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: =?utf-8?b?VG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+?= To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: - new upstream release Date: Tue, 09 Jun 2026 12:42:04 GMT Message-ID: <178100892419.1.5653861241647021114.rpms-openssl-ae5568515b15@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: ae5568515b15ad2ef0e9901c1ebf59dd950b5c90 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGFlNTU2ODUxNWIxNWFkMmVmMGU5OTAxYzFlYmY1 OWRkOTUwYjVjOTAKQXV0aG9yIDogVG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CkRhdGUgICA6IDIwMTAtMDEtMjFUMDg6MTI6MTIrMDA6MDAKU3RhdHMgIDogKzEyMjEzLy0x NDg5OSBpbiAyNSBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3Jn L3JwbXMvb3BlbnNzbC9jL2FlNTU2ODUxNWIxNWFkMmVmMGU5OTAxYzFlYmY1OWRkOTUwYjVjOTA/ YnJhbmNoPXJlYmFzZV80MGJldGEKCkxvZzoKLSBuZXcgdXBzdHJlYW0gcmVsZWFzZQoKLS0tCmRp ZmYgLS1naXQgYS8uY3ZzaWdub3JlIGIvLmN2c2lnbm9yZQppbmRleCAzODE5NjQ3Li5mMTMzZjZk IDEwMDY0NAotLS0gYS8uY3ZzaWdub3JlCisrKyBiLy5jdnNpZ25vcmUKQEAgLTEgKzEgQEAKLW9w ZW5zc2wtMS4wLjAtYmV0YTQtdXNhLnRhci5iejIKK29wZW5zc2wtMS4wLjAtYmV0YTUtdXNhLnRh ci5iejIKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTAuOS44ai1yZWFkbWUtd2FybmluZy5wYXRjaCBi L29wZW5zc2wtMC45LjhqLXJlYWRtZS13YXJuaW5nLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA0MTFlNmJkLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMC45LjhqLXJlYWRtZS13 YXJuaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotZGlmZiAtdXAgb3Bl bnNzbC0wLjkuOGovUkVBRE1FLndhcm5pbmcgb3BlbnNzbC0wLjkuOGovUkVBRE1FCi0tLS0gb3Bl bnNzbC0wLjkuOGovUkVBRE1FLndhcm5pbmcJMjAwOS0wMS0wNyAxMTo1MDo1My4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTAuOS44ai9SRUFETUUJMjAwOS0wMS0xNCAxNzo0MzowMi4wMDAw MDAwMDAgKzAxMDAKLUBAIC01LDYgKzUsMzEgQEAKLSAgQ29weXJpZ2h0IChjKSAxOTk1LTE5OTgg RXJpYyBBLiBZb3VuZywgVGltIEouIEh1ZHNvbgotICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIAot KyBXQVJOSU5HCi0rIC0tLS0tLS0KLSsKLSsgVGhpcyB2ZXJzaW9uIG9mIE9wZW5TU0wgaXMgYnVp bHQgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBvcGVyYXRpb24gaW4KLSsgdGhlIHNvIGNhbGxlZCBG SVBTIG1vZGUuIE5vdGUgdGhvdWdoIHRoYXQgdGhlIGxpYnJhcnkgYXMgd2UgYnVpbGQgaXQKLSsg aXMgbm90IEZJUFMgdmFsaWRhdGVkIGFuZCB0aGUgRklQUyBtb2RlIGlzIHByZXNlbnQgZm9yIHRl c3RpbmcgcHVycG9zZXMKLSsgb25seS4KLSsgCi0rIFRoaXMgdmVyc2lvbiBhbHNvIGNvbnRhaW5z IGEgZmV3IGRpZmZlcmVuY2VzIGZyb20gdGhlIHVwc3RyZWFtIGNvZGUKLSsgc29tZSBvZiB3aGlj aCBhcmU6Ci0rICAgKiBUaGUgRklQUyBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uIGNoZWNrIGlzIGlt cGxlbWVudGVkIGRpZmZlcmVudGx5Ci0rICAgICBmcm9tIHRoZSB1cHN0cmVhbSBGSVBTIHZhbGlk YXRlZCBPcGVuU1NMIG1vZHVsZS4gSXQgdmVyaWZpZXMKLSsgICAgIEhNQUMtU0hBMjU2IGNoZWNr c3VtIG9mIHRoZSB3aG9sZSBsaWJjcnlwdG8gc2hhcmVkIGxpYnJhcnkuCi0rICAgKiBUaGUgbW9k dWxlIHJlc3BlY3RzIHRoZSBrZXJuZWwgRklQUyBmbGFnIC9wcm9jL3N5cy9jcnlwdG8vZmlwcyBh bmQKLSsgICAgIHRyaWVzIHRvIGluaXRpYWxpemUgdGhlIEZJUFMgbW9kZSBpZiBpdCBpcyBzZXQg dG8gMSBhYm9ydGluZyBpZiB0aGUKLSsgICAgIEZJUFMgbW9kZSBjb3VsZCBub3QgYmUgaW5pdGlh bGl6ZWQuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZm9yY2UgdGhlCi0rICAgICBPcGVuU1NMIGxp YnJhcnkgdG8gRklQUyBtb2RlIGVzcGVjaWFsbHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBieQot KyAgICAgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgT1BFTlNTTF9GT1JDRV9GSVBT X01PREUuCi0rICAgKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgT1BFTlNTTF9OT19ERUZB VUxUX1pMSUIgaXMgc2V0IHRoZSBtb2R1bGUKLSsgICAgIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkg bG9hZCB0aGUgYnVpbHQgaW4gY29tcHJlc3Npb24gbWV0aG9kIFpMSUIKLSsgICAgIHdoZW4gaW5p dGlhbGl6ZWQuIEFwcGxpY2F0aW9ucyBjYW4gc3RpbGwgZXhwbGljaXRlbHkgYXNrIGZvciBaTElC Ci0rICAgICBjb21wcmVzc2lvbiBtZXRob2QuCi0rICAgKiBUaGVyZSBpcyBhZGRlZCBhIHN1cHBv cnQgZm9yIEVBUC1GQVNUIHRocm91Z2ggVExTIGV4dGVuc2lvbi4gVGhpcyBjb2RlCi0rICAgICBp cyBiYWNrcG9ydGVkIGZyb20gT3BlblNTTCB1cHN0cmVhbSBkZXZlbG9wbWVudCBicmFuY2guCi0r Ci0gIERFU0NSSVBUSU9OCi0gIC0tLS0tLS0tLS0tCi0gCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0x LjAuMC1iZXRhMy1jaXBoZXItY2hhbmdlLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1jaXBo ZXItY2hhbmdlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmU3YWRhLi4w MDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtY2lwaGVyLWNoYW5nZS5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTMv c3NsL3NzbC5oLmNpcGhlci1jaGFuZ2Ugb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3NsLmgKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2wuaC5jaXBoZXItY2hhbmdlCTIwMDktMDgtMDUg MTg6MjI6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9zc2wvc3Ns LmgJMjAwOS0wOC0wNSAxODoyNzozMi4wMDAwMDAwMDAgKzAyMDAKLUBAIC01MTEsNyArNTExLDcg QEAgdHlwZWRlZiBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKLSAKLSAjZGVmaW5lIFNTTF9PUF9NSUNS T1NPRlRfU0VTU19JRF9CVUcJCQkweDAwMDAwMDAxTAotICNkZWZpbmUgU1NMX09QX05FVFNDQVBF X0NIQUxMRU5HRV9CVUcJCQkweDAwMDAwMDAyTAotLSNkZWZpbmUgU1NMX09QX05FVFNDQVBFX1JF VVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4TAotKyNkZWZpbmUgU1NMX09QX05FVFND QVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4TCAvKiBjYW4gYnJlYWsgc29t ZSBzZWN1cml0eSBleHBlY3RhdGlvbnMgKi8KLSAjZGVmaW5lIFNTTF9PUF9TU0xSRUYyX1JFVVNF X0NFUlRfVFlQRV9CVUcJCTB4MDAwMDAwMTBMCi0gI2RlZmluZSBTU0xfT1BfTUlDUk9TT0ZUX0JJ R19TU0xWM19CVUZGRVIJCTB4MDAwMDAwMjBMCi0gI2RlZmluZSBTU0xfT1BfTVNJRV9TU0xWMl9S U0FfUEFERElORwkJCTB4MDAwMDAwNDBMIC8qIG5vIGVmZmVjdCBzaW5jZSAwLjkuN2ggYW5kIDAu OS44YiAqLwotQEAgLTUyOCw3ICs1MjgsNyBAQCB0eXBlZGVmIHN0cnVjdCBzc2xfc2Vzc2lvbl9z dAotIAotIC8qIFNTTF9PUF9BTEw6IHZhcmlvdXMgYnVnIHdvcmthcm91bmRzIHRoYXQgc2hvdWxk IGJlIHJhdGhlciBoYXJtbGVzcy4KLSAgKiAgICAgICAgICAgICBUaGlzIHVzZWQgdG8gYmUgMHgw MDBGRkZGRkwgYmVmb3JlIDAuOS43LiAqLwotLSNkZWZpbmUgU1NMX09QX0FMTAkJCQkJMHg4MDAw MEZGRkwKLSsjZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBGRjdMCi0gCi0gLyogRFRMUyBv cHRpb25zICovCi0gI2RlZmluZSBTU0xfT1BfTk9fUVVFUllfTVRVICAgICAgICAgICAgICAgICAw eDAwMDAxMDAwTAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtYmFja3BvcnRzLnBh dGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1iYWNrcG9ydHMucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGFkNGM3ZTQuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRh NC1iYWNrcG9ydHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9hc24xL2QyaV9wdS5jLmJhY2twb3J0cyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9hc24xL2QyaV9wdS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vYXNuMS9kMmlfcHUuYy5iYWNrcG9ydHMJMjAwOC0xMS0xMiAwNDo1Nzo0OS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9hc24xL2QyaV9w dS5jCTIwMDktMTEtMTggMTQ6MTE6MTQuMDAwMDAwMDAwICswMTAwCi1AQCAtODcsOSArODcsMTMg QEAgRVZQX1BLRVkgKmQyaV9QdWJsaWNLZXkoaW50IHR5cGUsIEVWUF9QSwotIAkJfQotIAllbHNl CXJldD0gKmE7Ci0gCi0tCXJldC0+c2F2ZV90eXBlPXR5cGU7Ci0tCXJldC0+dHlwZT1FVlBfUEtF WV90eXBlKHR5cGUpOwotLQlzd2l0Y2ggKHJldC0+dHlwZSkKLSsJaWYgKCFFVlBfUEtFWV9zZXRf dHlwZShyZXQsIHR5cGUpKQotKwkJewotKwkJQVNOMWVycihBU04xX0ZfRDJJX1BVQkxJQ0tFWSxF UlJfUl9FVlBfTElCKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKwotKwlzd2l0Y2ggKEVWUF9QS0VZ X2lkKHJldCkpCi0gCQl7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX1JTQQotIAljYXNlIEVWUF9QS0VZ X1JTQToKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX2xpYi5jLmJh Y2twb3J0cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF9saWIuYwotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX2xpYi5jLmJhY2twb3J0cwkyMDA2LTA3LTA0IDIy OjI3OjQ0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2 cC9wX2xpYi5jCTIwMDktMTEtMTggMTQ6MTE6MjYuMDAwMDAwMDAwICswMTAwCi1AQCAtMjIwLDcg KzIyMCwxMCBAQCBzdGF0aWMgaW50IHBrZXlfc2V0X3R5cGUoRVZQX1BLRVkgKnBrZXksCi0gI2lm bmRlZiBPUEVOU1NMX05PX0VOR0lORQotIAkJLyogSWYgd2UgaGF2ZSBhbiBFTkdJTkUgcmVsZWFz ZSBpdCAqLwotIAkJaWYgKHBrZXktPmVuZ2luZSkKLSsJCQl7Ci0gCQkJRU5HSU5FX2ZpbmlzaChw a2V5LT5lbmdpbmUpOwotKwkJCXBrZXktPmVuZ2luZSA9IE5VTEw7Ci0rCQkJfQotICNlbmRpZgot IAkJfQotIAlpZiAoc3RyKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8veDUw OS94NTA5X3ZmeS5jLmJhY2twb3J0cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by94NTA5L3g1 MDlfdmZ5LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by94NTA5L3g1MDlfdmZ5LmMu YmFja3BvcnRzCTIwMDktMTAtMzEgMjA6MjE6NDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCTIwMDktMTEtMTggMTQ6MTE6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtMTcyNyw2ICsxNzI3LDcgQEAgaW50IFg1MDlfY21wX3RpbWUo Y29uc3QgQVNOMV9USU1FICpjdG0sIAotIAkJCW9mZnNldD0gLW9mZnNldDsKLSAJCX0KLSAJYXRt LnR5cGU9Y3RtLT50eXBlOwotKwlhdG0uZmxhZ3MgPSAwOwotIAlhdG0ubGVuZ3RoPXNpemVvZihi dWZmMik7Ci0gCWF0bS5kYXRhPSh1bnNpZ25lZCBjaGFyICopYnVmZjI7Ci0gCgpkaWZmIC0tZ2l0 IGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1iYWNrcG9ydHMyLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1i ZXRhNC1iYWNrcG9ydHMyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2Uw NGQzLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtYmFja3BvcnRzMi5wYXRjaAor KysgL2Rldi9udWxsCkBAIC0xLDMzNCArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2FwcHMvY2EuYy5iYWNrcG9ydHMyIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9jYS5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL2NhLmMuYmFja3BvcnRzMgkyMDA5LTEwLTA0IDE4 OjQzOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9jYS5j CTIwMTAtMDEtMDcgMjM6MTY6MDguMDAwMDAwMDAwICswMTAwCi1AQCAtMjE1LDcgKzIxNSw2IEBA IHN0YXRpYyBpbnQgY2VydGlmeV9zcGthYyhYNTA5ICoqeHJldCwgY2gKLSAJCQkgY2hhciAqc3Rh cnRkYXRlLCBjaGFyICplbmRkYXRlLCBsb25nIGRheXMsIGNoYXIgKmV4dF9zZWN0LAotIAkJCSBD T05GICpjb25mLCBpbnQgdmVyYm9zZSwgdW5zaWduZWQgbG9uZyBjZXJ0b3B0LCAKLSAJCQkgdW5z aWduZWQgbG9uZyBuYW1lb3B0LCBpbnQgZGVmYXVsdF9vcCwgaW50IGV4dF9jb3B5KTsKLS1zdGF0 aWMgaW50IGZpeF9kYXRhKGludCBuaWQsIGludCAqdHlwZSk7Ci0gc3RhdGljIHZvaWQgd3JpdGVf bmV3X2NlcnRpZmljYXRlKEJJTyAqYnAsIFg1MDkgKngsIGludCBvdXRwdXRfZGVyLCBpbnQgbm90 ZXh0KTsKLSBzdGF0aWMgaW50IGRvX2JvZHkoWDUwOSAqKnhyZXQsIEVWUF9QS0VZICpwa2V5LCBY NTA5ICp4NTA5LCBjb25zdCBFVlBfTUQgKmRnc3QsCi0gCVNUQUNLX09GKENPTkZfVkFMVUUpICpw b2xpY3ksIENBX0RCICpkYiwgQklHTlVNICpzZXJpYWwsY2hhciAqc3Viaix1bnNpZ25lZCBsb25n IGNodHlwZSwgaW50IG11bHRpcmRuLAotQEAgLTIzMzQsMjUgKzIzMzMsOSBAQCBzdGF0aWMgaW50 IGNlcnRpZnlfc3BrYWMoWDUwOSAqKnhyZXQsIGNoCi0gCQkJY29udGludWU7Ci0gCQkJfQotIAot LQkJLyoKLS0JCWlmICgobmlkID09IE5JRF9wa2NzOV9lbWFpbEFkZHJlc3MpICYmIChlbWFpbF9k biA9PSAwKSkKLS0JCQljb250aW51ZTsKLS0JCSovCi0tCQkKLS0JCWo9QVNOMV9QUklOVEFCTEVf dHlwZSgodW5zaWduZWQgY2hhciAqKWJ1ZiwtMSk7Ci0tCQlpZiAoZml4X2RhdGEobmlkLCAmaikg PT0gMCkKLS0JCQl7Ci0tCQkJQklPX3ByaW50ZihiaW9fZXJyLAotLQkJCQkiaW52YWxpZCBjaGFy YWN0ZXJzIGluIHN0cmluZyAlc1xuIixidWYpOwotLQkJCWdvdG8gZXJyOwotLQkJCX0KLS0KLS0J CWlmICgobmU9WDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9OSUQoJm5lLG5pZCxqLAotLQkJCSh1 bnNpZ25lZCBjaGFyICopYnVmLAotLQkJCXN0cmxlbihidWYpKSkgPT0gTlVMTCkKLSsJCWlmICgh WDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9OSUQobiwgbmlkLCBjaHR5cGUsCi0rCQkJCSh1bnNpZ25l ZCBjaGFyICopYnVmLCAtMSwgLTEsIDApKQotIAkJCWdvdG8gZXJyOwotLQotLQkJaWYgKCFYNTA5 X05BTUVfYWRkX2VudHJ5KG4sbmUsLTEsIDApKSBnb3RvIGVycjsKLSAJCX0KLSAJaWYgKHNwa2kg PT0gTlVMTCkKLSAJCXsKLUBAIC0yMzk1LDIxICsyMzc4LDYgQEAgZXJyOgotIAlyZXR1cm4ob2sp OwotIAl9Ci0gCi0tc3RhdGljIGludCBmaXhfZGF0YShpbnQgbmlkLCBpbnQgKnR5cGUpCi0tCXsK LS0JaWYgKG5pZCA9PSBOSURfcGtjczlfZW1haWxBZGRyZXNzKQotLQkJKnR5cGU9Vl9BU04xX0lB NVNUUklORzsKLS0JaWYgKChuaWQgPT0gTklEX2NvbW1vbk5hbWUpICYmICgqdHlwZSA9PSBWX0FT TjFfSUE1U1RSSU5HKSkKLS0JCSp0eXBlPVZfQVNOMV9UNjFTVFJJTkc7Ci0tCWlmICgobmlkID09 IE5JRF9wa2NzOV9jaGFsbGVuZ2VQYXNzd29yZCkgJiYgKCp0eXBlID09IFZfQVNOMV9JQTVTVFJJ TkcpKQotLQkJKnR5cGU9Vl9BU04xX1Q2MVNUUklORzsKLS0JaWYgKChuaWQgPT0gTklEX3BrY3M5 X3Vuc3RydWN0dXJlZE5hbWUpICYmICgqdHlwZSA9PSBWX0FTTjFfVDYxU1RSSU5HKSkKLS0JCXJl dHVybigwKTsKLS0JaWYgKG5pZCA9PSBOSURfcGtjczlfdW5zdHJ1Y3R1cmVkTmFtZSkKLS0JCSp0 eXBlPVZfQVNOMV9JQTVTVFJJTkc7Ci0tCXJldHVybigxKTsKLS0JfQotLQotIHN0YXRpYyBpbnQg Y2hlY2tfdGltZV9mb3JtYXQoY29uc3QgY2hhciAqc3RyKQotIAl7Ci0gCXJldHVybiBBU04xX1RJ TUVfc2V0X3N0cmluZyhOVUxMLCBzdHIpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vYXNuMS9hbWV0aF9saWIuYy5iYWNrcG9ydHMyIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2FzbjEvYW1ldGhfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9hc24x L2FtZXRoX2xpYi5jLmJhY2twb3J0czIJMjAwOC0xMS0xMiAwNDo1Nzo0OS4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9hc24xL2FtZXRoX2xpYi5jCTIwMTAt MDEtMDcgMjM6MTY6MDguMDAwMDAwMDAwICswMTAwCi1AQCAtMzAxLDYgKzMwMSw4IEBAIEVWUF9Q S0VZX0FTTjFfTUVUSE9EKiBFVlBfUEtFWV9hc24xX25ldygKLSAJCWlmICghYW1ldGgtPmluZm8p Ci0gCQkJZ290byBlcnI7Ci0gCQl9Ci0rCWVsc2UKLSsJCWFtZXRoLT5pbmZvID0gTlVMTDsKLSAK LSAJaWYgKHBlbV9zdHIpCi0gCQl7Ci1AQCAtMzA4LDYgKzMxMCw4IEBAIEVWUF9QS0VZX0FTTjFf TUVUSE9EKiBFVlBfUEtFWV9hc24xX25ldygKLSAJCWlmICghYW1ldGgtPnBlbV9zdHIpCi0gCQkJ Z290byBlcnI7Ci0gCQl9Ci0rCWVsc2UKLSsJCWFtZXRoLT5wZW1fc3RyID0gTlVMTDsKLSAKLSAJ YW1ldGgtPnB1Yl9kZWNvZGUgPSAwOwotIAlhbWV0aC0+cHViX2VuY29kZSA9IDA7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iaW8vYl9zb2NrLmMuYmFja3BvcnRzMiBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9iaW8vYl9zb2NrLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9iaW8vYl9zb2NrLmMuYmFja3BvcnRzMgkyMDEwLTAxLTA3IDIzOjE2OjA4LjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Jpby9iX3NvY2su YwkyMDEwLTAxLTA3IDIzOjE2OjA4LjAwMDAwMDAwMCArMDEwMAotQEAgLTU5NSw3ICs1OTUsNyBA QCBpbnQgQklPX2dldF9hY2NlcHRfc29ja2V0KGNoYXIgKmhvc3QsIGluCi0gCQlzdHJ1Y3Qgc29j a2FkZHJfaW42IHNhX2luNjsKLSAjZW5kaWYKLSAJfSBzZXJ2ZXIsY2xpZW50OwotLQlpbnQgcz1J TlZBTElEX1NPQ0tFVCxjczsKLSsJaW50IHM9SU5WQUxJRF9TT0NLRVQsY3MsYWRkcmxlbjsKLSAJ dW5zaWduZWQgY2hhciBpcFs0XTsKLSAJdW5zaWduZWQgc2hvcnQgcG9ydDsKLSAJY2hhciAqc3Ry PU5VTEwsKmU7Ci1AQCAtNjY2LDggKzY2NiwxMCBAQCBpbnQgQklPX2dldF9hY2NlcHRfc29ja2V0 KGNoYXIgKmhvc3QsIGluCi0gCi0gCWlmICgoKnBfZ2V0YWRkcmluZm8uZikoaCxwLCZoaW50LCZy ZXMpKSBicmVhazsKLSAKLS0JbWVtY3B5KCZzZXJ2ZXIsIHJlcy0+YWlfYWRkciwKLS0JCXJlcy0+ YWlfYWRkcmxlbjw9c2l6ZW9mKHNlcnZlcik/cmVzLT5haV9hZGRybGVuOnNpemVvZihzZXJ2ZXIp KTsKLSsJYWRkcmxlbiA9IHJlcy0+YWlfYWRkcmxlbjw9c2l6ZW9mKHNlcnZlcikgPwotKwkJCXJl cy0+YWlfYWRkcmxlbiA6Ci0rCQkJc2l6ZW9mKHNlcnZlcik7Ci0rCW1lbWNweSgmc2VydmVyLCBy ZXMtPmFpX2FkZHIsIGFkZHJsZW4pOwotIAotIAkoKnBfZnJlZWFkZHJpbmZvLmYpKHJlcyk7Ci0g CWdvdG8gYWdhaW47Ci1AQCAtNjc5LDYgKzY4MSw3IEBAIGludCBCSU9fZ2V0X2FjY2VwdF9zb2Nr ZXQoY2hhciAqaG9zdCwgaW4KLSAJbWVtc2V0KChjaGFyICopJnNlcnZlciwwLHNpemVvZihzZXJ2 ZXIpKTsKLSAJc2VydmVyLnNhX2luLnNpbl9mYW1pbHk9QUZfSU5FVDsKLSAJc2VydmVyLnNhX2lu LnNpbl9wb3J0PWh0b25zKHBvcnQpOwotKwlhZGRybGVuID0gc2l6ZW9mKHNlcnZlci5zYV9pbik7 Ci0gCi0gCWlmIChoID09IE5VTEwgfHwgc3RyY21wKGgsIioiKSA9PSAwKQotIAkJc2VydmVyLnNh X2luLnNpbl9hZGRyLnNfYWRkcj1JTkFERFJfQU5ZOwotQEAgLTcxMiw3ICs3MTUsNyBAQCBhZ2Fp bjoKLSAJCWJpbmRfbW9kZT1CSU9fQklORF9OT1JNQUw7Ci0gCQl9Ci0gI2VuZGlmCi0tCWlmIChi aW5kKHMsJnNlcnZlci5zYSxzaXplb2Yoc2VydmVyKSkgPT0gLTEpCi0rCWlmIChiaW5kKHMsJnNl cnZlci5zYSxhZGRybGVuKSA9PSAtMSkKLSAJCXsKLSAjaWZkZWYgU09fUkVVU0VBRERSCi0gCQll cnJfbnVtPWdldF9sYXN0X3NvY2tldF9lcnJvcigpOwotQEAgLTc0MCw3ICs3NDMsNyBAQCBhZ2Fp bjoKLSAJCQlpZiAoY3MgIT0gSU5WQUxJRF9TT0NLRVQpCi0gCQkJCXsKLSAJCQkJaW50IGlpOwot LQkJCQlpaT1jb25uZWN0KGNzLCZjbGllbnQuc2Esc2l6ZW9mKGNsaWVudCkpOwotKwkJCQlpaT1j b25uZWN0KGNzLCZjbGllbnQuc2EsYWRkcmxlbik7Ci0gCQkJCWNsb3Nlc29ja2V0KGNzKTsKLSAJ CQkJaWYgKGlpID09IElOVkFMSURfU09DS0VUKQotIAkJCQkJewotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jLmJhY2twb3J0czIgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vYmlvL2Jzc19kZ3JhbS5jLmJhY2twb3J0czIJMjAxMC0wMS0wNyAyMzoxNjowOC4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iaW8vYnNzX2RncmFt LmMJMjAxMC0wMS0wNyAyMzoxNjowOC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zMzUsMTEgKzMzNSwy MSBAQCBzdGF0aWMgaW50IGRncmFtX3dyaXRlKEJJTyAqYiwgY29uc3QgY2hhCi0gCWlmICggZGF0 YS0+Y29ubmVjdGVkICkKLSAJCXJldD13cml0ZXNvY2tldChiLT5udW0saW4saW5sKTsKLSAJZWxz ZQotKwkJewotKwkJaW50IHBlZXJsZW4gPSBzaXplb2YoZGF0YS0+cGVlcik7Ci0rCi0rCQlpZiAo ZGF0YS0+cGVlci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKLSsJCQlwZWVybGVuID0gc2l6ZW9m KGRhdGEtPnBlZXIuc2FfaW4pOwotKyNpZiBPUEVOU1NMX1VTRV9JVlA2Ci0rCQllbHNlIGlmIChk YXRhLT5wZWVyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKLSsJCQlwZWVybGVuID0gc2l6ZW9m KGRhdGEtPnBlZXIuc2FfaW42KTsKLSsjZW5kaWYKLSAjaWYgZGVmaW5lZChORVRXQVJFX0NMSUIp ICYmIGRlZmluZWQoTkVUV0FSRV9CU0RTT0NLKQotLQkJcmV0PXNlbmR0byhiLT5udW0sIChjaGFy ICopaW4sIGlubCwgMCwgJmRhdGEtPnBlZXIuc2EsIHNpemVvZihkYXRhLT5wZWVyKSk7Ci0rCQly ZXQ9c2VuZHRvKGItPm51bSwgKGNoYXIgKilpbiwgaW5sLCAwLCAmZGF0YS0+cGVlci5zYSwgcGVl cmxlbik7Ci0gI2Vsc2UKLS0JCXJldD1zZW5kdG8oYi0+bnVtLCBpbiwgaW5sLCAwLCAmZGF0YS0+ cGVlci5zYSwgc2l6ZW9mKGRhdGEtPnBlZXIpKTsKLSsJCXJldD1zZW5kdG8oYi0+bnVtLCBpbiwg aW5sLCAwLCAmZGF0YS0+cGVlci5zYSwgcGVlcmxlbik7Ci0gI2VuZGlmCi0rCQl9Ci0gCi0gCUJJ T19jbGVhcl9yZXRyeV9mbGFncyhiKTsKLSAJaWYgKHJldCA8PSAwKQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vYm5fbXVsLmMuYmFja3BvcnRzMiBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ibi9ibl9tdWwuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2JuL2JuX211bC5jLmJhY2twb3J0czIJMjAwOS0wNi0xNyAxMzo0Nzo1NC4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ibi9ibl9tdWwuYwkyMDEwLTAxLTA3 IDIzOjE2OjA4LjAwMDAwMDAwMCArMDEwMAotQEAgLTEwMzIsMTUgKzEwMzIsMTUgQEAgaW50IEJO X211bChCSUdOVU0gKnIsIGNvbnN0IEJJR05VTSAqYSwgYwotIAkJCQlnb3RvIGVycjsKLSAJCQlp ZiAoYWwgPiBqIHx8IGJsID4gaikKLSAJCQkJewotLQkJCQlibl93ZXhwYW5kKHQsayo0KTsKLS0J CQkJYm5fd2V4cGFuZChycixrKjQpOwotKwkJCQlpZiAoYm5fd2V4cGFuZCh0LGsqNCkgPT0gTlVM TCkgZ290byBlcnI7Ci0rCQkJCWlmIChibl93ZXhwYW5kKHJyLGsqNCkgPT0gTlVMTCkgZ290byBl cnI7Ci0gCQkJCWJuX211bF9wYXJ0X3JlY3Vyc2l2ZShyci0+ZCxhLT5kLGItPmQsCi0gCQkJCQlq LGFsLWosYmwtaix0LT5kKTsKLSAJCQkJfQotIAkJCWVsc2UJLyogYWwgPD0gaiB8fCBibCA8PSBq ICovCi0gCQkJCXsKLS0JCQkJYm5fd2V4cGFuZCh0LGsqMik7Ci0tCQkJCWJuX3dleHBhbmQocnIs ayoyKTsKLSsJCQkJaWYgKGJuX3dleHBhbmQodCxrKjIpID09IE5VTEwpIGdvdG8gZXJyOwotKwkJ CQlpZiAoYm5fd2V4cGFuZChycixrKjIpID09IE5VTEwpIGdvdG8gZXJyOwotIAkJCQlibl9tdWxf cmVjdXJzaXZlKHJyLT5kLGEtPmQsYi0+ZCwKLSAJCQkJCWosYWwtaixibC1qLHQtPmQpOwotIAkJ CQl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX3BtZXRoLmMu YmFja3BvcnRzMiBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuYmFja3BvcnRzMgky MDA5LTA5LTAyIDE3OjUxOjI4LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDEwLTAxLTA3IDIzOjE2OjA4LjAwMDAwMDAwMCAr MDEwMAotQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMgaW50IHBrZXlfZHNhX3NpZ24oRVZQX1BL RVlfQ1RYICpjCi0gCi0gCXJldCA9IERTQV9zaWduKHR5cGUsIHRicywgdGJzbGVuLCBzaWcsICZz bHRtcCwgZHNhKTsKLSAKLS0JaWYgKHJldCA8IDApCi0rCWlmIChyZXQgPD0gMCkKLSAJCXJldHVy biByZXQ7Ci0gCSpzaWdsZW4gPSBzbHRtcDsKLSAJcmV0dXJuIDE7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZGlnZXN0LmMuYmFja3BvcnRzMiBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ldnAvZGlnZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvZGlnZXN0LmMuYmFja3BvcnRzMgkyMDEwLTAxLTA3IDIzOjE2OjA3LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9kaWdlc3QuYwkyMDEwLTAx LTA3IDIzOjE2OjA4LjAwMDAwMDAwMCArMDEwMAotQEAgLTEyNyw3ICsxMjcsOCBAQCBFVlBfTURf Q1RYICpFVlBfTURfQ1RYX2NyZWF0ZSh2b2lkKQotIAl7Ci0gCUVWUF9NRF9DVFggKmN0eD1PUEVO U1NMX21hbGxvYyhzaXplb2YgKmN0eCk7Ci0gCi0tCUVWUF9NRF9DVFhfaW5pdChjdHgpOwotKwlp ZiAoY3R4KQotKwkJRVZQX01EX0NUWF9pbml0KGN0eCk7Ci0gCi0gCXJldHVybiBjdHg7Ci0gCX0K LUBAIC0yNTYsNiArMjU3LDEyIEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpj dHgsIGMKLSAJCQl7Ci0gCQkJY3R4LT51cGRhdGUgPSB0eXBlLT51cGRhdGU7Ci0gCQkJY3R4LT5t ZF9kYXRhPU9QRU5TU0xfbWFsbG9jKHR5cGUtPmN0eF9zaXplKTsKLSsJCQlpZiAoY3R4LT5tZF9k YXRhID09IE5VTEwpCi0rCQkJCXsKLSsJCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VY LAotKwkJCQkJCQlFUlJfUl9NQUxMT0NfRkFJTFVSRSk7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9 Ci0gCQkJfQotIAkJfQotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLUBAIC0zNDYsOCArMzUz LDE3IEBAIGludCBFVlBfTURfQ1RYX2NvcHlfZXgoRVZQX01EX0NUWCAqb3V0LCAKLSAKLSAJaWYg KGluLT5tZF9kYXRhICYmIG91dC0+ZGlnZXN0LT5jdHhfc2l6ZSkKLSAJCXsKLS0JCWlmICh0bXBf YnVmKSBvdXQtPm1kX2RhdGEgPSB0bXBfYnVmOwotLQkJZWxzZSBvdXQtPm1kX2RhdGE9T1BFTlNT TF9tYWxsb2Mob3V0LT5kaWdlc3QtPmN0eF9zaXplKTsKLSsJCWlmICh0bXBfYnVmKQotKwkJCW91 dC0+bWRfZGF0YSA9IHRtcF9idWY7Ci0rCQllbHNlCi0rCQkJewotKwkJCW91dC0+bWRfZGF0YT1P UEVOU1NMX21hbGxvYyhvdXQtPmRpZ2VzdC0+Y3R4X3NpemUpOwotKwkJCWlmICghb3V0LT5tZF9k YXRhKQotKwkJCQl7Ci0rCQkJCUVWUGVycihFVlBfRl9FVlBfTURfQ1RYX0NPUFlfRVgsRVJSX1Jf TUFMTE9DX0ZBSUxVUkUpOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSAJCW1lbWNw eShvdXQtPm1kX2RhdGEsaW4tPm1kX2RhdGEsb3V0LT5kaWdlc3QtPmN0eF9zaXplKTsKLSAJCX0K LSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfZXJyLmMuYmFj a3BvcnRzMiBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2Vyci5jCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lcnIuYy5iYWNrcG9ydHMyCTIwMTAtMDEt MDcgMjM6MTY6MDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZXZwL2V2cF9lcnIuYwkyMDEwLTAxLTA3IDIzOjE2OjA4LjAwMDAwMDAwMCArMDEwMAotQEAg LTE4Niw2ICsxODYsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfcmVhc29uc1td Ci0ge0VSUl9SRUFTT04oRVZQX1JfUFJJVkFURV9LRVlfREVDT0RFX0VSUk9SKSwicHJpdmF0ZSBr ZXkgZGVjb2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfUFJJVkFURV9LRVlfRU5DT0RF X0VSUk9SKSwicHJpdmF0ZSBrZXkgZW5jb2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1Jf UFVCTElDX0tFWV9OT1RfUlNBKSAgICAsInB1YmxpYyBrZXkgbm90IHJzYSJ9LAotK3tFUlJfUkVB U09OKEVWUF9SX1VOS05PV05fQ0lQSEVSKSAgICAgICAgLCJ1bmtub3duIGNpcGhlciJ9LAotK3tF UlJfUkVBU09OKEVWUF9SX1VOS05PV05fRElHRVNUKSAgICAgICAgLCJ1bmtub3duIGRpZ2VzdCJ9 LAotIHtFUlJfUkVBU09OKEVWUF9SX1VOS05PV05fUEJFX0FMR09SSVRITSkgLCJ1bmtub3duIHBi ZSBhbGdvcml0aG0ifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9VTlNVUE9SVEVEX05VTUJFUl9PRl9S T1VORFMpLCJ1bnN1cG9ydGVkIG51bWJlciBvZiByb3VuZHMifSwKLSB7RVJSX1JFQVNPTihFVlBf Ul9VTlNVUFBPUlRFRF9BTEdPUklUSE0pICwidW5zdXBwb3J0ZWQgYWxnb3JpdGhtIn0sCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmguYmFja3BvcnRzMiBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvZXZwLmguYmFja3BvcnRzMgkyMDEwLTAxLTA3IDIzOjE2OjA3LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnAuaAkyMDEwLTAx LTA3IDIzOjE2OjA4LjAwMDAwMDAwMCArMDEwMAotQEAgLTEyNzUsNiArMTI3NSw4IEBAIHZvaWQg RVJSX2xvYWRfRVZQX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBFVlBfUl9QUklWQVRFX0tFWV9E RUNPREVfRVJST1IJCQkgMTQ1Ci0gI2RlZmluZSBFVlBfUl9QUklWQVRFX0tFWV9FTkNPREVfRVJS T1IJCQkgMTQ2Ci0gI2RlZmluZSBFVlBfUl9QVUJMSUNfS0VZX05PVF9SU0EJCQkgMTA2Ci0rI2Rl ZmluZSBFVlBfUl9VTktOT1dOX0NJUEhFUgkJCQkgMTYwCi0rI2RlZmluZSBFVlBfUl9VTktOT1dO X0RJR0VTVAkJCQkgMTYxCi0gI2RlZmluZSBFVlBfUl9VTktOT1dOX1BCRV9BTEdPUklUSE0JCQkg MTIxCi0gI2RlZmluZSBFVlBfUl9VTlNVUE9SVEVEX05VTUJFUl9PRl9ST1VORFMJCSAxMzUKLSAj ZGVmaW5lIEVWUF9SX1VOU1VQUE9SVEVEX0FMR09SSVRITQkJCSAxNTYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfcGJlLmMuYmFja3BvcnRzMiBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX3BiZS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZXZwL2V2cF9wYmUuYy5iYWNrcG9ydHMyCTIwMDgtMTEtMDUgMTk6Mzg6NTcuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9wYmUuYwky MDEwLTAxLTA3IDIzOjE3OjE1LjAwMDAwMDAwMCArMDEwMAotQEAgLTE3NCwxMiArMTc0LDI2IEBA IGludCBFVlBfUEJFX0NpcGhlckluaXQoQVNOMV9PQkpFQ1QgKnBiZV8KLSAJaWYgKGNpcGhlcl9u aWQgPT0gLTEpCi0gCQljaXBoZXIgPSBOVUxMOwotIAllbHNlCi0rCQl7Ci0gCQljaXBoZXIgPSBF VlBfZ2V0X2NpcGhlcmJ5bmlkKGNpcGhlcl9uaWQpOwotKwkJaWYgKCFjaXBoZXIpCi0rCQkJewot KwkJCUVWUGVycihFVlBfRl9FVlBfUEJFX0NJUEhFUklOSVQsRVZQX1JfVU5LTk9XTl9DSVBIRVIp OwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSAKLSAJaWYgKG1kX25pZCA9PSAtMSkKLSAJ CW1kID0gTlVMTDsKLSAJZWxzZQotKwkJewotIAkJbWQgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmlkKG1k X25pZCk7Ci0rCQlpZiAoIW1kKQotKwkJCXsKLSsJCQlFVlBlcnIoRVZQX0ZfRVZQX1BCRV9DSVBI RVJJTklULEVWUF9SX1VOS05PV05fRElHRVNUKTsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9 Ci0gCi0gCWlmICgha2V5Z2VuKGN0eCwgcGFzcywgcGFzc2xlbiwgcGFyYW0sIGNpcGhlciwgbWQs IGVuX2RlKSkKLSAJCXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9y c2FfbGliLmMuYmFja3BvcnRzMiBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2xp Yi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9saWIuYy5iYWNrcG9y dHMyCTIwMTAtMDEtMDcgMjM6MTY6MDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDEwLTAxLTA3IDIzOjE2OjA4LjAwMDAwMDAw MCArMDEwMAotQEAgLTIwOCw3ICsyMDgsMTYgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUg KmVuZ2luZSkKLSAJcmV0LT5tdF9ibGluZGluZz1OVUxMOwotIAlyZXQtPmJpZ251bV9kYXRhPU5V TEw7Ci0gCXJldC0+ZmxhZ3M9cmV0LT5tZXRoLT5mbGFnczsKLS0JQ1JZUFRPX25ld19leF9kYXRh KENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSk7Ci0rCWlmICghQ1JZUFRP X25ld19leF9kYXRhKENSWVBUT19FWF9JTkRFWF9SU0EsIHJldCwgJnJldC0+ZXhfZGF0YSkpCi0r CQl7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotKwlpZiAocmV0LT5lbmdpbmUpCi0rCQlF TkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKLSsjZW5kaWYKLSsJCU9QRU5TU0xfZnJlZShyZXQp OwotKwkJcmV0dXJuKE5VTEwpOwotKwkJfQotKwotIAlpZiAoKHJldC0+bWV0aC0+aW5pdCAhPSBO VUxMKSAmJiAhcmV0LT5tZXRoLT5pbml0KHJldCkpCi0gCQl7Ci0gI2lmbmRlZiBPUEVOU1NMX05P X0VOR0lORQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8veDUwOS94NTA5X2x1 LmMuYmFja3BvcnRzMiBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by94NTA5L3g1MDlfbHUuYwot LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3g1MDkveDUwOV9sdS5jLmJhY2twb3J0czIJ MjAwOS0xMC0xOCAxNjo0MjoyNy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by94NTA5L3g1MDlfbHUuYwkyMDEwLTAxLTA3IDIzOjE2OjA4LjAwMDAwMDAwMCAr MDEwMAotQEAgLTIwMCw3ICsyMDAsMTMgQEAgWDUwOV9TVE9SRSAqWDUwOV9TVE9SRV9uZXcodm9p ZCkKLSAJcmV0LT5sb29rdXBfY3JscyA9IDA7Ci0gCXJldC0+Y2xlYW51cCA9IDA7Ci0gCi0tCUNS WVBUT19uZXdfZXhfZGF0YShDUllQVE9fRVhfSU5ERVhfWDUwOV9TVE9SRSwgcmV0LCAmcmV0LT5l eF9kYXRhKTsKLSsJaWYgKCFDUllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1g1MDlf U1RPUkUsIHJldCwgJnJldC0+ZXhfZGF0YSkpCi0rCQl7Ci0rCQlza19YNTA5X09CSkVDVF9mcmVl KHJldC0+b2Jqcyk7Ci0rCQlPUEVOU1NMX2ZyZWUocmV0KTsKLSsJCXJldHVybiBOVUxMOwotKwkJ fQotKwotIAlyZXQtPnJlZmVyZW5jZXM9MTsKLSAJcmV0dXJuIHJldDsKLSAJfQoKZGlmZiAtLWdp dCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtYmludXRpbHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJl dGE0LWJpbnV0aWxzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzliMmU2 Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtYmludXRpbHMucGF0Y2gKKysrIC9k ZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9tZDUvYXNtL21kNS14ODZfNjQucGwuYmludXRpbHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vbWQ1L2FzbS9tZDUteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vbWQ1L2FzbS9tZDUteDg2XzY0LnBsLmJpbnV0aWxzCTIwMDktMTEtMTIgMTU6MTc6MjkuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1L2FzbS9tZDUt eDg2XzY0LnBsCTIwMDktMTEtMTIgMTc6MjY6MDguMDAwMDAwMDAwICswMTAwCi1AQCAtMTksNiAr MTksNyBAQCBteSAkY29kZTsKLSBzdWIgcm91bmQxX3N0ZXAKLSB7Ci0gICAgIG15ICgkcG9zLCAk ZHN0LCAkeCwgJHksICR6LCAka19uZXh0LCAkVF9pLCAkcykgPSBAXzsKLSsgICAgJFRfaSA9IHVu cGFjaygibCIscGFjaygibCIsIGhleCgkVF9pKSkpOyAjIGNvbnZlcnQgdG8gMzItYml0IHNpZ25l ZCBkZWNpbWFsCi0gICAgICRjb2RlIC49ICIgbW92CTAqNCglcnNpKSwJJXIxMGQJCS8qIChORVhU IFNURVApIFhbMF0gKi9cbiIgaWYgKCRwb3MgPT0gLTEpOwotICAgICAkY29kZSAuPSAiIG1vdgkl ZWR4LAkJJXIxMWQJCS8qIChORVhUIFNURVApIHonID0gJWVkeCAqL1xuIiBpZiAoJHBvcyA9PSAt MSk7Ci0gICAgICRjb2RlIC49IDw8RU9GOwotQEAgLTQzLDYgKzQ0LDcgQEAgRU9GCi0gc3ViIHJv dW5kMl9zdGVwCi0gewotICAgICBteSAoJHBvcywgJGRzdCwgJHgsICR5LCAkeiwgJGtfbmV4dCwg JFRfaSwgJHMpID0gQF87Ci0rICAgICRUX2kgPSB1bnBhY2soImwiLHBhY2soImwiLCBoZXgoJFRf aSkpKTsgIyBjb252ZXJ0IHRvIDMyLWJpdCBzaWduZWQgZGVjaW1hbAotICAgICAkY29kZSAuPSAi IG1vdgkxKjQoJXJzaSksCSVyMTBkCQkvKiAoTkVYVCBTVEVQKSBYWzFdICovXG4iIGlmICgkcG9z ID09IC0xKTsKLSAgICAgJGNvZGUgLj0gIiBtb3YJJWVkeCwJCSVyMTFkCQkvKiAoTkVYVCBTVEVQ KSB6JyA9ICVlZHggKi9cbiIgaWYgKCRwb3MgPT0gLTEpOwotICAgICAkY29kZSAuPSAiIG1vdgkl ZWR4LAkJJXIxMmQJCS8qIChORVhUIFNURVApIHonID0gJWVkeCAqL1xuIiBpZiAoJHBvcyA9PSAt MSk7Ci1AQCAtNjksNiArNzEsNyBAQCBFT0YKLSBzdWIgcm91bmQzX3N0ZXAKLSB7Ci0gICAgIG15 ICgkcG9zLCAkZHN0LCAkeCwgJHksICR6LCAka19uZXh0LCAkVF9pLCAkcykgPSBAXzsKLSsgICAg JFRfaSA9IHVucGFjaygibCIscGFjaygibCIsIGhleCgkVF9pKSkpOyAjIGNvbnZlcnQgdG8gMzIt Yml0IHNpZ25lZCBkZWNpbWFsCi0gICAgICRjb2RlIC49ICIgbW92CTUqNCglcnNpKSwJJXIxMGQJ CS8qIChORVhUIFNURVApIFhbNV0gKi9cbiIgaWYgKCRwb3MgPT0gLTEpOwotICAgICAkY29kZSAu PSAiIG1vdgklZWN4LAkJJXIxMWQJCS8qIChORVhUIFNURVApIHknID0gJWVjeCAqL1xuIiBpZiAo JHBvcyA9PSAtMSk7Ci0gICAgICRjb2RlIC49IDw8RU9GOwotQEAgLTkxLDYgKzk0LDcgQEAgRU9G Ci0gc3ViIHJvdW5kNF9zdGVwCi0gewotICAgICBteSAoJHBvcywgJGRzdCwgJHgsICR5LCAkeiwg JGtfbmV4dCwgJFRfaSwgJHMpID0gQF87Ci0rICAgICRUX2kgPSB1bnBhY2soImwiLHBhY2soImwi LCBoZXgoJFRfaSkpKTsgIyBjb252ZXJ0IHRvIDMyLWJpdCBzaWduZWQgZGVjaW1hbAotICAgICAk Y29kZSAuPSAiIG1vdgkwKjQoJXJzaSksCSVyMTBkCQkvKiAoTkVYVCBTVEVQKSBYWzBdICovXG4i IGlmICgkcG9zID09IC0xKTsKLSAgICAgJGNvZGUgLj0gIiBtb3YJXCQweGZmZmZmZmZmLAklcjEx ZFxuIiBpZiAoJHBvcyA9PSAtMSk7Ci0gICAgICRjb2RlIC49ICIgeG9yCSVlZHgsCQklcjExZAkJ LyogKE5FWFQgU1RFUCkgbm90IHonID0gbm90ICVlZHgqL1xuIgotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vc2hhL2FzbS9zaGExLXg4Nl82NC5wbC5iaW51dGlscyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9zaGEvYXNtL3NoYTEteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vc2hhL2FzbS9zaGExLXg4Nl82NC5wbC5iaW51dGlscwkyMDA5LTEx LTEyIDE1OjE3OjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3NoYS9hc20vc2hhMS14ODZfNjQucGwJMjAwOS0xMS0xMiAxNzoyNDoxOC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0xNTAsNyArMTUwLDcgQEAgX19fCi0gc3ViIEJPRFlfMjBfMzkgewotIG15ICgk aSwkYSwkYiwkYywkZCwkZSwkZik9QF87Ci0gbXkgJGo9JGkrMTsKLS1teSAkSz0oJGk8NDApPzB4 NmVkOWViYTE6MHhjYTYyYzFkNjsKLStteSAkSz0oJGk8NDApPzB4NmVkOWViYTE6LTB4MzU5ZDNl MmE7Ci0gJGNvZGUuPTw8X19fIGlmICgkaTw3OSk7Ci0gCWxlYQkkSygkeGksJGUpLCRmCi0gCW1v dglgNCooJGolMTYpYCglcnNwKSwkeGkKLUBAIC0xODcsNyArMTg3LDcgQEAgc3ViIEJPRFlfNDBf NTkgewotIG15ICgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87Ci0gbXkgJGo9JGkrMTsKLSAkY29k ZS49PDxfX187Ci0tCWxlYQkweDhmMWJiY2RjKCR4aSwkZSksJGYKLSsJbGVhCS0weDcwZTQ0MzI0 KCR4aSwkZSksJGYKLSAJbW92CWA0KigkaiUxNilgKCVyc3ApLCR4aQotIAltb3YJJGIsJHQwCi0g CW1vdgkkYiwkdDEKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWNsaWVudC1yZW5l Zy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTQtY2xpZW50LXJlbmVnLnBhdGNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWI5YWI3Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4w LjAtYmV0YTQtY2xpZW50LXJlbmVnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBA QAotRG8gbm90IGVuZm9yY2UgdGhlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIG9uIHRoZSBjbGll bnQgLSB0b28gbWFueSBicm9rZW4gc2VydmVycyByZW1haW4uCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L3NzbC90MV9saWIuYy5jbGllbnQtcmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvdDFfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9saWIuYy5jbGllbnQt cmVuZWcJMjAwOS0xMS0xMiAxNToxNzoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGE0L3NzbC90MV9saWIuYwkyMDA5LTExLTE4IDE0OjA0OjE5LjAwMDAwMDAwMCArMDEw MAotQEAgLTk4NSw2ICs5ODUsNyBAQCBpbnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChT U0wgKnMsCi0gCi0gCWlmIChkYXRhID49IChkK24tMikpCi0gCQl7Ci0rI2lmIDAKLSAJCS8qIEJl Y2F1c2UgdGhlIGNsaWVudCBkb2VzIG5vdCBzZWUgYW55IHJlbmVnb3RpYXRpb24gZHVyaW5nIGFu Ci0gCQkgICBhdHRhY2ssIHdlIG11c3QgZW5mb3JjZSB0aGlzIG9uIGFsbCBzZXJ2ZXIgaGVsbG9z LCBldmVuIHRoZQotIAkJICAgZmlyc3QgKi8KLUBAIC05OTQsNiArOTk1LDcgQEAgaW50IHNzbF9w YXJzZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLAotIAkJCSphbCA9IFNTTF9BRF9JTExFR0FM X1BBUkFNRVRFUjsgLyogaXMgdGhpcyB0aGUgcmlnaHQgYWxlcnQ/ICovCi0gCQkJcmV0dXJuIDA7 Ci0gCQkJfQotKyNlbmRpZgotIAkJcmV0dXJuIDE7Ci0gCQl9Ci0gCi1AQCAtMTEyNiwxMiArMTEy OCwxNCBAQCBpbnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQlyZXR1 cm4gMDsKLSAJCX0KLSAKLSsjaWYgMAotIAlpZiAoIXJlbmVnb3RpYXRlX3NlZW4KLSAJCSYmICEo cy0+Y3R4LT5vcHRpb25zICYgU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElP TikpCi0gCQl7Ci0gCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMg dGhlIHJpZ2h0IGFsZXJ0PyAqLwotIAkJcmV0dXJuIDA7Ci0gCQl9Ci0rI2VuZGlmCi0gCi0gCWlm ICghcy0+aGl0ICYmIHRsc2V4dF9zZXJ2ZXJuYW1lID09IDEpCi0gCQl7CgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC0xLjAuMC1iZXRhNC1jdmUtMjAwOS00MzU1LnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1i ZXRhNC1jdmUtMjAwOS00MzU1LnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2 MWYwY2Q2Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtY3ZlLTIwMDktNDM1NS5w YXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLU1vZGlmeSBjb21wcmVzc2lvbiBj b2RlIHNvIGl0IGZyZWVzIHVwIHN0cnVjdHVyZXMgd2l0aG91dCB1c2luZyB0aGUKLWV4X2RhdGEg Y2FsbGJhY2tzLiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gd2hlcmUgc29tZSBhcHBsaWNh dGlvbnMKLWNhbGwgQ1JZUFRPX2ZyZWVfYWxsX2V4X2RhdGEoKSBiZWZvcmUgYXBwbGljYXRpb24g ZXhpdCAoZS5nLiB3aGVuCi1yZXN0YXJ0aW5nKSB0aGVuIHVzZSBjb21wcmVzc2lvbiAoZS5nLiBT U0wgd2l0aCBjb21wcmVzc2lvbikgbGF0ZXIuCi1UaGlzIHJlc3VsdHMgaW4gc2lnbmlmaWNhbnQg cGVyLWNvbm5lY3Rpb24gbWVtb3J5IGxlYWtzIGFuZAotaGFzIGNhdXNlZCBzb21lIHNlY3VyaXR5 IGlzc3VlcyBpbmNsdWRpbmcgQ1ZFLTIwMDgtMTY3OCBhbmQKLUNWRS0yMDA5LTQzNTUuCi1bU3Rl dmUgSGVuc29uXQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY29tcC9jX3ps aWIuYy5jb21wbGVhayBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jb21wL2NfemxpYi5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY29tcC9jX3psaWIuYy5jb21wbGVhawkyMDA4 LTEyLTEzIDE4OjE5OjQwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2NvbXAvY196bGliLmMJMjAxMC0wMS0xMyAyMjowNjoyMC4wMDAwMDAwMDAgKzAxMDAK LUBAIC0xMzYsMTUgKzEzNiw2IEBAIHN0cnVjdCB6bGliX3N0YXRlCi0gCi0gc3RhdGljIGludCB6 bGliX3N0YXRlZnVsX2V4X2lkeCA9IC0xOwotIAotLXN0YXRpYyB2b2lkIHpsaWJfc3RhdGVmdWxf ZnJlZV9leF9kYXRhKHZvaWQgKm9iaiwgdm9pZCAqaXRlbSwKLS0JQ1JZUFRPX0VYX0RBVEEgKmFk LCBpbnQgaW5kLGxvbmcgYXJnbCwgdm9pZCAqYXJncCkKLS0JewotLQlzdHJ1Y3QgemxpYl9zdGF0 ZSAqc3RhdGUgPSAoc3RydWN0IHpsaWJfc3RhdGUgKilpdGVtOwotLQlpbmZsYXRlRW5kKCZzdGF0 ZS0+aXN0cmVhbSk7Ci0tCWRlZmxhdGVFbmQoJnN0YXRlLT5vc3RyZWFtKTsKLS0JT1BFTlNTTF9m cmVlKHN0YXRlKTsKLS0JfQotLQotIHN0YXRpYyBpbnQgemxpYl9zdGF0ZWZ1bF9pbml0KENPTVBf Q1RYICpjdHgpCi0gCXsKLSAJaW50IGVycjsKLUBAIC0xODgsNiArMTc5LDEyIEBAIHN0YXRpYyBp bnQgemxpYl9zdGF0ZWZ1bF9pbml0KENPTVBfQ1RYICoKLSAKLSBzdGF0aWMgdm9pZCB6bGliX3N0 YXRlZnVsX2ZpbmlzaChDT01QX0NUWCAqY3R4KQotIAl7Ci0rCXN0cnVjdCB6bGliX3N0YXRlICpz dGF0ZSA9Ci0rCQkoc3RydWN0IHpsaWJfc3RhdGUgKilDUllQVE9fZ2V0X2V4X2RhdGEoJmN0eC0+ ZXhfZGF0YSwKLSsJCQl6bGliX3N0YXRlZnVsX2V4X2lkeCk7Ci0rCWluZmxhdGVFbmQoJnN0YXRl LT5pc3RyZWFtKTsKLSsJZGVmbGF0ZUVuZCgmc3RhdGUtPm9zdHJlYW0pOwotKwlPUEVOU1NMX2Zy ZWUoc3RhdGUpOwotIAlDUllQVE9fZnJlZV9leF9kYXRhKENSWVBUT19FWF9JTkRFWF9DT01QLGN0 eCwmY3R4LT5leF9kYXRhKTsKLSAJfQotIAotQEAgLTQwMiw3ICszOTksNyBAQCBDT01QX01FVEhP RCAqQ09NUF96bGliKHZvaWQpCi0gCQkJaWYgKHpsaWJfc3RhdGVmdWxfZXhfaWR4ID09IC0xKQot IAkJCQl6bGliX3N0YXRlZnVsX2V4X2lkeCA9Ci0gCQkJCQlDUllQVE9fZ2V0X2V4X25ld19pbmRl eChDUllQVE9fRVhfSU5ERVhfQ09NUCwKLS0JCQkJCQkwLE5VTEwsTlVMTCxOVUxMLHpsaWJfc3Rh dGVmdWxfZnJlZV9leF9kYXRhKTsKLSsJCQkJCQkwLE5VTEwsTlVMTCxOVUxMLE5VTEwpOwotIAkJ CUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19DT01QKTsKLSAJCQlpZiAoemxpYl9zdGF0ZWZ1 bF9leF9pZHggPT0gLTEpCi0gCQkJCWdvdG8gZXJyOwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4w LjAtYmV0YTQtZHRscy1pcHY2LnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzLWlwdjYu cGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOWQzMzAuLjAwMDAwMDAKLS0t IGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzLWlwdjYucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAt MSwyMjIgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmlvL2Jf c29jay5jLmR0bHMtaXB2NiBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iaW8vYl9zb2NrLmMK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iaW8vYl9zb2NrLmMuZHRscy1pcHY2CTIw MDktMTEtMDkgMTU6MDk6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vYmlvL2Jfc29jay5jCTIwMDktMTEtMjMgMDg6NTA6NDUuMDAwMDAwMDAwICswMTAw Ci1AQCAtODIyLDcgKzgyMiw4IEBAIGludCBCSU9fYWNjZXB0KGludCBzb2NrLCBjaGFyICoqYWRk cikKLSAJaWYgKHNpemVvZihzYS5sZW4uaSkhPXNpemVvZihzYS5sZW4ucykgJiYgc2EubGVuLmk9 PTApCi0gCQl7Ci0gCQlPUEVOU1NMX2Fzc2VydChzYS5sZW4uczw9c2l6ZW9mKHNhLmZyb20pKTsK LS0JCXNhLmxlbi5pID0gKHVuc2lnbmVkIGludClzYS5sZW4uczsKLSsJCXNhLmxlbi5pID0gKGlu dClzYS5sZW4uczsKLSsJCS8qIHVzZSBzYS5sZW4uaSBmcm9tIHRoaXMgcG9pbnQgKi8KLSAJCX0K LSAJaWYgKHJldCA9PSBJTlZBTElEX1NPQ0tFVCkKLSAJCXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2Jpby9ic3NfZGdyYW0uYy5kdGxzLWlwdjYgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vYmlvL2Jzc19kZ3JhbS5jLmR0bHMtaXB2NgkyMDA5LTEwLTE1IDE5OjQxOjQ0LjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Jpby9ic3NfZGdyYW0uYwky MDEwLTAxLTA3IDE3OjMxOjAwLjAwMDAwMDAwMCArMDEwMAotQEAgLTEwOCwxMSArMTA4LDEzIEBA IHN0YXRpYyBCSU9fTUVUSE9EIG1ldGhvZHNfZGdyYW1wPQotIAotIHR5cGVkZWYgc3RydWN0IGJp b19kZ3JhbV9kYXRhX3N0Ci0gCXsKLSsJdW5pb24gewotKwkJc3RydWN0IHNvY2thZGRyIHNhOwot KwkJc3RydWN0IHNvY2thZGRyX2luIHNhX2luOwotICNpZiBPUEVOU1NMX1VTRV9JUFY2Ci0tCXN0 cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7Ci0tI2Vsc2UKLS0Jc3RydWN0IHNvY2thZGRyX2lu IHBlZXI7Ci0rCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNhX2luNjsKLSAjZW5kaWYKLSsJfSBwZWVy OwotIAl1bnNpZ25lZCBpbnQgY29ubmVjdGVkOwotIAl1bnNpZ25lZCBpbnQgX2Vycm5vOwotIAl1 bnNpZ25lZCBpbnQgbXR1OwotQEAgLTI3OCwyOCArMjgwLDM4IEBAIHN0YXRpYyBpbnQgZGdyYW1f cmVhZChCSU8gKmIsIGNoYXIgKm91dCwKLSAJaW50IHJldD0wOwotIAliaW9fZGdyYW1fZGF0YSAq ZGF0YSA9IChiaW9fZGdyYW1fZGF0YSAqKWItPnB0cjsKLSAKLSsJc3RydWN0CXsKLSsJLyoKLSsJ ICogU2VlIGNvbW1lbnRhcnkgaW4gYl9zb2NrLmMuIDxhcHBybz4KLSsJICovCi0rCXVuaW9uCXsg c2l6ZV90IHM7IGludCBpOyB9IGxlbjsKLSsJdW5pb24JewotKwkJc3RydWN0IHNvY2thZGRyIHNh OwotKwkJc3RydWN0IHNvY2thZGRyX2luIHNhX2luOwotICNpZiBPUEVOU1NMX1VTRV9JUFY2Ci0t CXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHBlZXI7Ci0tI2Vsc2UKLS0Jc3RydWN0IHNvY2thZGRy X2luIHBlZXI7Ci0rCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNhX2luNjsKLSAjZW5kaWYKLS0JaW50 IHBlZXJsZW4gPSBzaXplb2YocGVlcik7Ci0rCQl9IHBlZXI7Ci0rCX0gc2E7Ci0rCi0rCXNhLmxl bi5zPTA7Ci0rCXNhLmxlbi5pPXNpemVvZihzYS5wZWVyKTsKLSAKLSAJaWYgKG91dCAhPSBOVUxM KQotIAkJewotIAkJY2xlYXJfc29ja2V0X2Vycm9yKCk7Ci0tCQltZW1zZXQoJnBlZXIsIDB4MDAs IHBlZXJsZW4pOwotLQkJLyogTGFzdCBhcmcgaW4gcmVjdmZyb20gaXMgc2lnbmVkIG9uIHNvbWUg cGxhdGZvcm1zIGFuZAotLQkJICogdW5zaWduZWQgb24gb3RoZXJzLiBJdCBpcyBvZiB0eXBlIHNv Y2tsZW5fdCBvbiBzb21lCi0tCQkgKiBidXQgdGhpcyBpcyBub3QgdW5pdmVyc2FsLiBDYXN0IHRv ICh2b2lkICopIHRvIGF2b2lkCi0tCQkgKiBjb21waWxlciB3YXJuaW5ncy4KLS0JCSAqLwotKwkJ bWVtc2V0KCZzYS5wZWVyLCAweDAwLCBzaXplb2Yoc2EucGVlcikpOwotIAkJZGdyYW1fYWRqdXN0 X3Jjdl90aW1lb3V0KGIpOwotLQkJcmV0PXJlY3Zmcm9tKGItPm51bSxvdXQsb3V0bCwwLChzdHJ1 Y3Qgc29ja2FkZHIgKikmcGVlciwodm9pZCAqKSZwZWVybGVuKTsKLSsJCXJldD1yZWN2ZnJvbShi LT5udW0sb3V0LG91dGwsMCwmc2EucGVlci5zYSwodm9pZCAqKSZzYS5sZW4pOwotKwkJaWYgKHNp emVvZihzYS5sZW4uaSkhPXNpemVvZihzYS5sZW4ucykgJiYgc2EubGVuLmk9PTApCi0rCQkJewot KwkJCU9QRU5TU0xfYXNzZXJ0KHNhLmxlbi5zPD1zaXplb2Yoc2EucGVlcikpOwotKwkJCXNhLmxl bi5pID0gKGludClzYS5sZW4uczsKLSsJCQl9Ci0gCQlkZ3JhbV9yZXNldF9yY3ZfdGltZW91dChi KTsKLSAKLSAJCWlmICggISBkYXRhLT5jb25uZWN0ZWQgICYmIHJldCA+PSAwKQotLQkJCUJJT19j dHJsKGIsIEJJT19DVFJMX0RHUkFNX1NFVF9QRUVSLCAwLCAmcGVlcik7Ci0rCQkJQklPX2N0cmwo YiwgQklPX0NUUkxfREdSQU1fU0VUX1BFRVIsIDAsICZzYS5wZWVyKTsKLSAKLSAJCUJJT19jbGVh cl9yZXRyeV9mbGFncyhiKTsKLSAJCWlmIChyZXQgPCAwKQotQEAgLTMyMywyNSArMzM1LDEwIEBA IHN0YXRpYyBpbnQgZGdyYW1fd3JpdGUoQklPICpiLCBjb25zdCBjaGEKLSAJaWYgKCBkYXRhLT5j b25uZWN0ZWQgKQotIAkJcmV0PXdyaXRlc29ja2V0KGItPm51bSxpbixpbmwpOwotIAllbHNlCi0t I2lmIE9QRU5TU0xfVVNFX0lQVjYKLS0JCWlmIChkYXRhLT5wZWVyLnNzX2ZhbWlseSA9PSBBRl9J TkVUKQotICNpZiBkZWZpbmVkKE5FVFdBUkVfQ0xJQikgJiYgZGVmaW5lZChORVRXQVJFX0JTRFNP Q0spCi0tCQkJcmV0PXNlbmR0byhiLT5udW0sIChjaGFyICopaW4sIGlubCwgMCwgKGNvbnN0IHN0 cnVjdCBzb2NrYWRkciAqKSZkYXRhLT5wZWVyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7 Ci0rCQlyZXQ9c2VuZHRvKGItPm51bSwgKGNoYXIgKilpbiwgaW5sLCAwLCAmZGF0YS0+cGVlci5z YSwgc2l6ZW9mKGRhdGEtPnBlZXIpKTsKLSAjZWxzZQotLQkJCXJldD1zZW5kdG8oYi0+bnVtLCBp biwgaW5sLCAwLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmRhdGEtPnBlZXIsIHNpemVvZihz dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLS0jZW5kaWYKLS0JCWVsc2UKLS0jaWYgZGVmaW5lZChORVRX QVJFX0NMSUIpICYmIGRlZmluZWQoTkVUV0FSRV9CU0RTT0NLKQotLQkJCXJldD1zZW5kdG8oYi0+ bnVtLCAoY2hhciAqKWluLCBpbmwsIDAsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmZGF0YS0+ cGVlciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLS0jZWxzZQotLQkJCXJldD1zZW5k dG8oYi0+bnVtLCBpbiwgaW5sLCAwLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmRhdGEtPnBl ZXIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0tI2VuZGlmCi0tI2Vsc2UKLS0jaWYg ZGVmaW5lZChORVRXQVJFX0NMSUIpICYmIGRlZmluZWQoTkVUV0FSRV9CU0RTT0NLKQotLQkJcmV0 PXNlbmR0byhiLT5udW0sIChjaGFyICopaW4sIGlubCwgMCwgKGNvbnN0IHN0cnVjdCBzb2NrYWRk ciAqKSZkYXRhLT5wZWVyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0tI2Vsc2UKLS0J CXJldD1zZW5kdG8oYi0+bnVtLCBpbiwgaW5sLCAwLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICop JmRhdGEtPnBlZXIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLS0jZW5kaWYKLSsJCXJl dD1zZW5kdG8oYi0+bnVtLCBpbiwgaW5sLCAwLCAmZGF0YS0+cGVlci5zYSwgc2l6ZW9mKGRhdGEt PnBlZXIpKTsKLSAjZW5kaWYKLSAKLSAJQklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwotQEAgLTQy OCwxMSArNDI1LDIwIEBAIHN0YXRpYyBsb25nIGRncmFtX2N0cmwoQklPICpiLCBpbnQgY21kLCAK LSAJCWVsc2UKLSAJCQl7Ci0gI2VuZGlmCi0rCQkJc3dpdGNoICh0by0+c2FfZmFtaWx5KQotKwkJ CQl7Ci0rCQkJCWNhc2UgQUZfSU5FVDoKLSsJCQkJCW1lbWNweSgmZGF0YS0+cGVlcix0byxzaXpl b2YoZGF0YS0+cGVlci5zYV9pbikpOwotKwkJCQkJYnJlYWs7Ci0gI2lmIE9QRU5TU0xfVVNFX0lQ VjYKLS0JCQltZW1jcHkoJihkYXRhLT5wZWVyKSx0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9z dG9yYWdlKSk7Ci0tI2Vsc2UKLS0JCQltZW1jcHkoJihkYXRhLT5wZWVyKSx0bywgc2l6ZW9mKHN0 cnVjdCBzb2NrYWRkcl9pbikpOwotLSNlbmRpZgotKwkJCQljYXNlIEFGX0lORVQ2OgotKwkJCQkJ bWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNpemVvZihkYXRhLT5wZWVyLnNhX2luNikpOwotKwkJCQkJ YnJlYWs7Ci0rI2VuZGlmCi0rCQkJCWRlZmF1bHQ6Ci0rCQkJCQltZW1jcHkoJmRhdGEtPnBlZXIs dG8sc2l6ZW9mKGRhdGEtPnBlZXIuc2EpKTsKLSsJCQkJCWJyZWFrOwotKwkJCQl9Ci0gI2lmIDAK LSAJCQl9Ci0gI2VuZGlmCi1AQCAtNTM3LDQxICs1NDMsNjIgQEAgc3RhdGljIGxvbmcgZGdyYW1f Y3RybChCSU8gKmIsIGludCBjbWQsIAotIAkJaWYgKCB0byAhPSBOVUxMKQotIAkJCXsKLSAJCQlk YXRhLT5jb25uZWN0ZWQgPSAxOwotKwkJCXN3aXRjaCAodG8tPnNhX2ZhbWlseSkKLSsJCQkJewot KwkJCQljYXNlIEFGX0lORVQ6Ci0rCQkJCQltZW1jcHkoJmRhdGEtPnBlZXIsdG8sc2l6ZW9mKGRh dGEtPnBlZXIuc2FfaW4pKTsKLSsJCQkJCWJyZWFrOwotICNpZiBPUEVOU1NMX1VTRV9JUFY2Ci0t CQkJbWVtY3B5KCYoZGF0YS0+cGVlciksdG8sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFn ZSkpOwotLSNlbHNlCi0tCQkJbWVtY3B5KCYoZGF0YS0+cGVlciksdG8sIHNpemVvZihzdHJ1Y3Qg c29ja2FkZHJfaW4pKTsKLS0jZW5kaWYKLSsJCQkJY2FzZSBBRl9JTkVUNjoKLSsJCQkJCW1lbWNw eSgmZGF0YS0+cGVlcix0byxzaXplb2YoZGF0YS0+cGVlci5zYV9pbjYpKTsKLSsJCQkJCWJyZWFr OwotKyNlbmRpZgotKwkJCQlkZWZhdWx0OgotKwkJCQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNp emVvZihkYXRhLT5wZWVyLnNhKSk7Ci0rCQkJCQlicmVhazsKLSsJCQkJfQotIAkJCX0KLSAJCWVs c2UKLSAJCQl7Ci0gCQkJZGF0YS0+Y29ubmVjdGVkID0gMDsKLS0jaWYgT1BFTlNTTF9VU0VfSVBW NgotLQkJCW1lbXNldCgmKGRhdGEtPnBlZXIpLCAweDAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy X3N0b3JhZ2UpKTsKLS0jZWxzZQotLQkJCW1lbXNldCgmKGRhdGEtPnBlZXIpLCAweDAwLCBzaXpl b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0tI2VuZGlmCi0rCQkJbWVtc2V0KCYoZGF0YS0+cGVl ciksIDB4MDAsIHNpemVvZihkYXRhLT5wZWVyKSk7Ci0gCQkJfQotIAkJYnJlYWs7Ci0gCWNhc2Ug QklPX0NUUkxfREdSQU1fR0VUX1BFRVI6Ci0tCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgcHRy OwotLQotKwkJc3dpdGNoIChkYXRhLT5wZWVyLnNhLnNhX2ZhbWlseSkKLSsJCQl7Ci0rCQkJY2Fz ZSBBRl9JTkVUOgotKwkJCQlyZXQ9c2l6ZW9mKGRhdGEtPnBlZXIuc2FfaW4pOwotKwkJCQlicmVh azsKLSAjaWYgT1BFTlNTTF9VU0VfSVBWNgotLQkJbWVtY3B5KHRvLCAmKGRhdGEtPnBlZXIpLCBz aXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKTsKLS0JCXJldCA9IHNpemVvZihzdHJ1Y3Qg c29ja2FkZHJfc3RvcmFnZSk7Ci0tI2Vsc2UKLS0JCW1lbWNweSh0bywgJihkYXRhLT5wZWVyKSwg c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotLQkJcmV0ID0gc2l6ZW9mKHN0cnVjdCBzb2Nr YWRkcl9pbik7Ci0tI2VuZGlmCi0rCQkJY2FzZSBBRl9JTkVUNjoKLSsJCQkJcmV0PXNpemVvZihk YXRhLT5wZWVyLnNhX2luNik7Ci0rCQkJCWJyZWFrOwotKyNlbmRpZgotKwkJCWRlZmF1bHQ6Ci0r CQkJCXJldD1zaXplb2YoZGF0YS0+cGVlci5zYSk7Ci0rCQkJCWJyZWFrOwotKwkJCX0KLSsJCWlm IChudW09PTAgfHwgbnVtPnJldCkKLSsJCQludW09cmV0OwotKwkJbWVtY3B5KHB0ciwmZGF0YS0+ cGVlciwocmV0PW51bSkpOwotIAkJYnJlYWs7Ci0gCWNhc2UgQklPX0NUUkxfREdSQU1fU0VUX1BF RVI6Ci0gCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgcHRyOwotLQotKwkJc3dpdGNoICh0by0+ c2FfZmFtaWx5KQotKwkJCXsKLSsJCQljYXNlIEFGX0lORVQ6Ci0rCQkJCW1lbWNweSgmZGF0YS0+ cGVlcix0byxzaXplb2YoZGF0YS0+cGVlci5zYV9pbikpOwotKwkJCQlicmVhazsKLSAjaWYgT1BF TlNTTF9VU0VfSVBWNgotLQkJbWVtY3B5KCYoZGF0YS0+cGVlciksIHRvLCBzaXplb2Yoc3RydWN0 IHNvY2thZGRyX3N0b3JhZ2UpKTsKLS0jZWxzZQotLQkJbWVtY3B5KCYoZGF0YS0+cGVlciksIHRv LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0tI2VuZGlmCi0rCQkJY2FzZSBBRl9JTkVU NjoKLSsJCQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNpemVvZihkYXRhLT5wZWVyLnNhX2luNikp OwotKwkJCQlicmVhazsKLSsjZW5kaWYKLSsJCQlkZWZhdWx0OgotKwkJCQltZW1jcHkoJmRhdGEt PnBlZXIsdG8sc2l6ZW9mKGRhdGEtPnBlZXIuc2EpKTsKLSsJCQkJYnJlYWs7Ci0rCQkJfQotIAkJ YnJlYWs7Ci0gCWNhc2UgQklPX0NUUkxfREdSQU1fU0VUX05FWFRfVElNRU9VVDoKLSAJCW1lbWNw eSgmKGRhdGEtPm5leHRfdGltZW91dCksIHB0ciwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7Cgpk aWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzLXJlbmVnLnBhdGNoIGIvb3BlbnNz bC0xLjAuMC1iZXRhNC1kdGxzLXJlbmVnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA3OTE2NWYxLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtZHRscy1yZW5l Zy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDU3MSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9kMV9ib3RoLmMuZHRscy1yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0 L3NzbC9kMV9ib3RoLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9kMV9ib3RoLmMuZHRs cy1yZW5lZwkyMDA5LTExLTAyIDE0OjM3OjE3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvc3NsL2QxX2JvdGguYwkyMDEwLTAxLTA3IDE3OjM1OjE5LjAwMDAwMDAwMCAr MDEwMAotQEAgLTc2NCw2ICs3NjQsMjQgQEAgaW50IGR0bHMxX3NlbmRfZmluaXNoZWQoU1NMICpz LCBpbnQgYSwgaQotIAkJcCs9aTsKLSAJCWw9aTsKLSAKLSsJLyogQ29weSB0aGUgZmluaXNoZWQg c28gd2UgY2FuIHVzZSBpdCBmb3IKLSsJICogcmVuZWdvdGlhdGlvbiBjaGVja3MKLSsJICovCi0r CWlmKHMtPnR5cGUgPT0gU1NMX1NUX0NPTk5FQ1QpCi0rCQl7Ci0rCQlPUEVOU1NMX2Fzc2VydChp IDw9IEVWUF9NQVhfTURfU0laRSk7Ci0rCQltZW1jcHkocy0+czMtPnByZXZpb3VzX2NsaWVudF9m aW5pc2hlZCwgCi0rCQkgICAgICAgcy0+czMtPnRtcC5maW5pc2hfbWQsIGkpOwotKwkJcy0+czMt PnByZXZpb3VzX2NsaWVudF9maW5pc2hlZF9sZW49aTsKLSsJCX0KLSsJZWxzZQotKwkJewotKwkJ T1BFTlNTTF9hc3NlcnQoaSA8PSBFVlBfTUFYX01EX1NJWkUpOwotKwkJbWVtY3B5KHMtPnMzLT5w cmV2aW91c19zZXJ2ZXJfZmluaXNoZWQsIAotKwkJICAgICAgIHMtPnMzLT50bXAuZmluaXNoX21k LCBpKTsKLSsJCXMtPnMzLT5wcmV2aW91c19zZXJ2ZXJfZmluaXNoZWRfbGVuPWk7Ci0rCQl9Ci0r Ci0gI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjE2Ci0gCQkvKiBNU1ZDIDEuNSBkb2VzIG5vdCBjbGVh ciB0aGUgdG9wIGJ5dGVzIG9mIHRoZSB3b3JkIHVubGVzcwotIAkJICogSSBkbyB0aGlzLgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvZDFfY2xudC5jLmR0bHMtcmVuZWcgb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvZDFfY2xudC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv ZDFfY2xudC5jLmR0bHMtcmVuZWcJMjAwOS0wNy0yNCAxMzo1MjozMi4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9kMV9jbG50LmMJMjAxMC0wMS0wNyAxNzo0NDo1 NS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yODYsMTYgKzI4Niw0NCBAQCBpbnQgZHRsczFfY29ubmVj dChTU0wgKnMpCi0gCi0gCQljYXNlIFNTTDNfU1RfQ1JfQ0VSVF9BOgotIAkJY2FzZSBTU0wzX1NU X0NSX0NFUlRfQjoKLSsjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0rCQkJcmV0PXNzbDNfY2hl Y2tfZmluaXNoZWQocyk7Ci0rCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKLSsJCQlpZiAocmV0 ID09IDIpCi0rCQkJCXsKLSsJCQkJcy0+aGl0ID0gMTsKLSsJCQkJaWYgKHMtPnRsc2V4dF90aWNr ZXRfZXhwZWN0ZWQpCi0rCQkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NSX1NFU1NJT05fVElDS0VUX0E7 Ci0rCQkJCWVsc2UKLSsJCQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1JfRklOSVNIRURfQTsKLSsJCQkJ cy0+aW5pdF9udW09MDsKLSsJCQkJYnJlYWs7Ci0rCQkJCX0KLSsjZW5kaWYKLSAJCQkvKiBDaGVj ayBpZiBpdCBpcyBhbm9uIERIIG9yIFBTSyAqLwotIAkJCWlmICghKHMtPnMzLT50bXAubmV3X2Np cGhlci0+YWxnb3JpdGhtX2F1dGggJiBTU0xfYU5VTEwpICYmCi0gCQkJICAgICEocy0+czMtPnRt cC5uZXdfY2lwaGVyLT5hbGdvcml0aG1fbWtleSAmIFNTTF9rUFNLKSkKLSAJCQkJewotIAkJCQly ZXQ9c3NsM19nZXRfc2VydmVyX2NlcnRpZmljYXRlKHMpOwotIAkJCQlpZiAocmV0IDw9IDApIGdv dG8gZW5kOwotKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKLSsJCQkJaWYgKHMtPnRsc2V4dF9z dGF0dXNfZXhwZWN0ZWQpCi0rCQkJCQlzLT5zdGF0ZT1TU0wzX1NUX0NSX0NFUlRfU1RBVFVTX0E7 Ci0rCQkJCWVsc2UKLSsJCQkJCXMtPnN0YXRlPVNTTDNfU1RfQ1JfS0VZX0VYQ0hfQTsKLSsJCQkJ fQotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlza2lwID0gMTsKLSsJCQkJcy0+c3RhdGU9U1NMM19T VF9DUl9LRVlfRVhDSF9BOwotKwkJCQl9Ci0rI2Vsc2UKLSAJCQkJfQotIAkJCWVsc2UKLSAJCQkJ c2tpcD0xOwotKwotIAkJCXMtPnN0YXRlPVNTTDNfU1RfQ1JfS0VZX0VYQ0hfQTsKLSsjZW5kaWYK LSAJCQlzLT5pbml0X251bT0wOwotIAkJCWJyZWFrOwotIAotQEAgLTQzNywxMSArNDY1LDM2IEBA IGludCBkdGxzMV9jb25uZWN0KFNTTCAqcykKLSAJCQkJfQotIAkJCWVsc2UKLSAJCQkJewotKyNp Zm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKLSsJCQkJLyogQWxsb3cgTmV3U2Vzc2lvblRpY2tldCBp ZiB0aWNrZXQgZXhwZWN0ZWQgKi8KLSsJCQkJaWYgKHMtPnRsc2V4dF90aWNrZXRfZXhwZWN0ZWQp Ci0rCQkJCQlzLT5zMy0+dG1wLm5leHRfc3RhdGU9U1NMM19TVF9DUl9TRVNTSU9OX1RJQ0tFVF9B OwotKwkJCQllbHNlCi0rI2VuZGlmCi0rCQkJCQotIAkJCQlzLT5zMy0+dG1wLm5leHRfc3RhdGU9 U1NMM19TVF9DUl9GSU5JU0hFRF9BOwotIAkJCQl9Ci0gCQkJcy0+aW5pdF9udW09MDsKLSAJCQli cmVhazsKLSAKLSsjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0rCQljYXNlIFNTTDNfU1RfQ1Jf U0VTU0lPTl9USUNLRVRfQToKLSsJCWNhc2UgU1NMM19TVF9DUl9TRVNTSU9OX1RJQ0tFVF9COgot KwkJCXJldD1zc2wzX2dldF9uZXdfc2Vzc2lvbl90aWNrZXQocyk7Ci0rCQkJaWYgKHJldCA8PSAw KSBnb3RvIGVuZDsKLSsJCQlzLT5zdGF0ZT1TU0wzX1NUX0NSX0ZJTklTSEVEX0E7Ci0rCQkJcy0+ aW5pdF9udW09MDsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSBTU0wzX1NUX0NSX0NFUlRfU1RBVFVT X0E6Ci0rCQljYXNlIFNTTDNfU1RfQ1JfQ0VSVF9TVEFUVVNfQjoKLSsJCQlyZXQ9c3NsM19nZXRf Y2VydF9zdGF0dXMocyk7Ci0rCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKLSsJCQlzLT5zdGF0 ZT1TU0wzX1NUX0NSX0tFWV9FWENIX0E7Ci0rCQkJcy0+aW5pdF9udW09MDsKLSsJCWJyZWFrOwot KyNlbmRpZgotKwotIAkJY2FzZSBTU0wzX1NUX0NSX0ZJTklTSEVEX0E6Ci0gCQljYXNlIFNTTDNf U1RfQ1JfRklOSVNIRURfQjoKLSAJCQlzLT5kMS0+Y2hhbmdlX2NpcGhlcl9zcGVjX29rID0gMTsK LUBAIC01NTQsOCArNjA3LDE0IEBAIGludCBkdGxzMV9jbGllbnRfaGVsbG8oU1NMICpzKQotIAli dWY9KHVuc2lnbmVkIGNoYXIgKilzLT5pbml0X2J1Zi0+ZGF0YTsKLSAJaWYgKHMtPnN0YXRlID09 IFNTTDNfU1RfQ1dfQ0xOVF9IRUxMT19BKQotIAkJewotKwkJU1NMX1NFU1NJT04gKnNlc3MgPSBz LT5zZXNzaW9uOwotIAkJaWYgKChzLT5zZXNzaW9uID09IE5VTEwpIHx8Ci0gCQkJKHMtPnNlc3Np b24tPnNzbF92ZXJzaW9uICE9IHMtPnZlcnNpb24pIHx8Ci0rI2lmZGVmIE9QRU5TU0xfTk9fVExT RVhUCi0rCQkJIXNlc3MtPnNlc3Npb25faWRfbGVuZ3RoIHx8Ci0rI2Vsc2UKLSsJCQkoIXNlc3Mt PnNlc3Npb25faWRfbGVuZ3RoICYmICFzZXNzLT50bHNleHRfdGljaykgfHwKLSsjZW5kaWYKLSAJ CQkocy0+c2Vzc2lvbi0+bm90X3Jlc3VtYWJsZSkpCi0gCQkJewotIAkJCWlmICghc3NsX2dldF9u ZXdfc2Vzc2lvbihzLDApKQotQEAgLTYzNSw3ICs2OTQsMTUgQEAgaW50IGR0bHMxX2NsaWVudF9o ZWxsbyhTU0wgKnMpCi0gCQkJKihwKyspPWNvbXAtPmlkOwotIAkJCX0KLSAJCSoocCsrKT0wOyAv KiBBZGQgdGhlIE5VTEwgbWV0aG9kICovCi0tCQkKLSsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fVExT RVhUCi0rCQlpZiAoKHAgPSBzc2xfYWRkX2NsaWVudGhlbGxvX3Rsc2V4dChzLCBwLCBidWYrU1NM M19SVF9NQVhfUExBSU5fTEVOR1RIKSkgPT0gTlVMTCkKLSsJCQl7Ci0rCQkJU1NMZXJyKFNTTF9G X1NTTDNfQ0xJRU5UX0hFTExPLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLSsJCQlnb3RvIGVycjsK LSsJCQl9Ci0rI2VuZGlmCQkKLSsKLSAJCWw9KHAtZCk7Ci0gCQlkPWJ1ZjsKLSAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2QxX2xpYi5jLmR0bHMtcmVuZWcgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvZDFfbGliLmMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2Qx X3NydnIuYy5kdGxzLXJlbmVnIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2QxX3NydnIuYwotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2QxX3NydnIuYy5kdGxzLXJlbmVnCTIwMDktMDktMDkg MTk6MDU6NDIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvZDFf c3J2ci5jCTIwMTAtMDEtMDcgMTc6NDQ6NTUuMDAwMDAwMDAwICswMTAwCi1AQCAtMzA1LDggKzMw NSwxOCBAQCBpbnQgZHRsczFfYWNjZXB0KFNTTCAqcykKLSAJCQlyZXQ9ZHRsczFfc2VuZF9zZXJ2 ZXJfaGVsbG8ocyk7Ci0gCQkJaWYgKHJldCA8PSAwKSBnb3RvIGVuZDsKLSAKLSsjaWZuZGVmIE9Q RU5TU0xfTk9fVExTRVhUCi0gCQkJaWYgKHMtPmhpdCkKLS0JCQkJcy0+c3RhdGU9U1NMM19TVF9T V19DSEFOR0VfQTsKLSsJCQkJewotKwkJCQlpZiAocy0+dGxzZXh0X3RpY2tldF9leHBlY3RlZCkK LSsJCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfU0VTU0lPTl9USUNLRVRfQTsKLSsJCQkJZWxzZQot KwkJCQkJcy0+c3RhdGU9U1NMM19TVF9TV19DSEFOR0VfQTsKLSsJCQkJfQotKyNlbHNlCi0rCQkJ aWYgKHMtPmhpdCkKLSsJCQkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfQ0hBTkdFX0E7Ci0rI2VuZGlm Ci0gCQkJZWxzZQotIAkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX0NFUlRfQTsKLSAJCQlzLT5pbml0 X251bT0wOwotQEAgLTMyMSwxMCArMzMxLDI0IEBAIGludCBkdGxzMV9hY2NlcHQoU1NMICpzKQot IAkJCQlkdGxzMV9zdGFydF90aW1lcihzKTsKLSAJCQkJcmV0PWR0bHMxX3NlbmRfc2VydmVyX2Nl cnRpZmljYXRlKHMpOwotIAkJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotKyNpZm5kZWYgT1BF TlNTTF9OT19UTFNFWFQKLSsJCQkJaWYgKHMtPnRsc2V4dF9zdGF0dXNfZXhwZWN0ZWQpCi0rCQkJ CQlzLT5zdGF0ZT1TU0wzX1NUX1NXX0NFUlRfU1RBVFVTX0E7Ci0rCQkJCWVsc2UKLSsJCQkJCXMt PnN0YXRlPVNTTDNfU1RfU1dfS0VZX0VYQ0hfQTsKLSsJCQkJfQotKwkJCWVsc2UKLSsJCQkJewot KwkJCQlza2lwID0gMTsKLSsJCQkJcy0+c3RhdGU9U1NMM19TVF9TV19LRVlfRVhDSF9BOwotKwkJ CQl9Ci0rI2Vsc2UKLSAJCQkJfQotIAkJCWVsc2UKLSAJCQkJc2tpcD0xOwotKwotIAkJCXMtPnN0 YXRlPVNTTDNfU1RfU1dfS0VZX0VYQ0hfQTsKLSsjZW5kaWYKLSAJCQlzLT5pbml0X251bT0wOwot IAkJCWJyZWFrOwotIAotQEAgLTUxOSwxMSArNTQzLDM0IEBAIGludCBkdGxzMV9hY2NlcHQoU1NM ICpzKQotIAkJCWR0bHMxX3N0b3BfdGltZXIocyk7Ci0gCQkJaWYgKHMtPmhpdCkKLSAJCQkJcy0+ c3RhdGU9U1NMX1NUX09LOwotKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKLSsJCQllbHNlIGlm IChzLT50bHNleHRfdGlja2V0X2V4cGVjdGVkKQotKwkJCQlzLT5zdGF0ZT1TU0wzX1NUX1NXX1NF U1NJT05fVElDS0VUX0E7Ci0rI2VuZGlmCi0gCQkJZWxzZQotIAkJCQlzLT5zdGF0ZT1TU0wzX1NU X1NXX0NIQU5HRV9BOwotIAkJCXMtPmluaXRfbnVtPTA7Ci0gCQkJYnJlYWs7Ci0gCi0rI2lmbmRl ZiBPUEVOU1NMX05PX1RMU0VYVAotKwkJY2FzZSBTU0wzX1NUX1NXX1NFU1NJT05fVElDS0VUX0E6 Ci0rCQljYXNlIFNTTDNfU1RfU1dfU0VTU0lPTl9USUNLRVRfQjoKLSsJCQlyZXQ9ZHRsczFfc2Vu ZF9uZXdzZXNzaW9uX3RpY2tldChzKTsKLSsJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotKwkJ CXMtPnN0YXRlPVNTTDNfU1RfU1dfQ0hBTkdFX0E7Ci0rCQkJcy0+aW5pdF9udW09MDsKLSsJCQli cmVhazsKLSsKLSsJCWNhc2UgU1NMM19TVF9TV19DRVJUX1NUQVRVU19BOgotKwkJY2FzZSBTU0wz X1NUX1NXX0NFUlRfU1RBVFVTX0I6Ci0rCQkJcmV0PXNzbDNfc2VuZF9jZXJ0X3N0YXR1cyhzKTsK LSsJCQlpZiAocmV0IDw9IDApIGdvdG8gZW5kOwotKwkJCXMtPnN0YXRlPVNTTDNfU1RfU1dfS0VZ X0VYQ0hfQTsKLSsJCQlzLT5pbml0X251bT0wOwotKwkJCWJyZWFrOwotKwotKyNlbmRpZgotKwot IAkJY2FzZSBTU0wzX1NUX1NXX0NIQU5HRV9BOgotIAkJY2FzZSBTU0wzX1NUX1NXX0NIQU5HRV9C OgotIAotQEAgLTc0OSw2ICs3OTYsOCBAQCBpbnQgZHRsczFfc2VuZF9zZXJ2ZXJfaGVsbG8oU1NM ICpzKQotIAkJcCs9c2w7Ci0gCi0gCQkvKiBwdXQgdGhlIGNpcGhlciAqLwotKwkJaWYgKHMtPnMz LT50bXAubmV3X2NpcGhlciA9PSBOVUxMKQotKwkJCXJldHVybiAtMTsKLSAJCWk9c3NsM19wdXRf Y2lwaGVyX2J5X2NoYXIocy0+czMtPnRtcC5uZXdfY2lwaGVyLHApOwotIAkJcCs9aTsKLSAKLUBA IC03NjIsNiArODExLDE0IEBAIGludCBkdGxzMV9zZW5kX3NlcnZlcl9oZWxsbyhTU0wgKnMpCi0g CQkJKihwKyspPXMtPnMzLT50bXAubmV3X2NvbXByZXNzaW9uLT5pZDsKLSAjZW5kaWYKLSAKLSsj aWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0rCQlpZiAoKHAgPSBzc2xfYWRkX3NlcnZlcmhlbGxv X3Rsc2V4dChzLCBwLCBidWYrU1NMM19SVF9NQVhfUExBSU5fTEVOR1RIKSkgPT0gTlVMTCkKLSsJ CQl7Ci0rCQkJU1NMZXJyKFNTTF9GX1NTTDNfU0VORF9TRVJWRVJfSEVMTE8sRVJSX1JfSU5URVJO QUxfRVJST1IpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rI2VuZGlmCi0rCi0gCQkvKiBkbyB0 aGUgaGVhZGVyICovCi0gCQlsPShwLWQpOwotIAkJZD1idWY7Ci1AQCAtMTM4NCwzICsxNDQxLDEx NCBAQCBpbnQgZHRsczFfc2VuZF9zZXJ2ZXJfY2VydGlmaWNhdGUoU1NMICpzCi0gCS8qIFNTTDNf U1RfU1dfQ0VSVF9CICovCi0gCXJldHVybihkdGxzMV9kb193cml0ZShzLFNTTDNfUlRfSEFORFNI QUtFKSk7Ci0gCX0KLSsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0raW50IGR0bHMxX3Nl bmRfbmV3c2Vzc2lvbl90aWNrZXQoU1NMICpzKQotKwl7Ci0rCWlmIChzLT5zdGF0ZSA9PSBTU0wz X1NUX1NXX1NFU1NJT05fVElDS0VUX0EpCi0rCQl7Ci0rCQl1bnNpZ25lZCBjaGFyICpwLCAqc2Vu YywgKm1hY3N0YXJ0OwotKwkJaW50IGxlbiwgc2xlbjsKLSsJCXVuc2lnbmVkIGludCBobGVuLCBt c2dfbGVuOwotKwkJRVZQX0NJUEhFUl9DVFggY3R4OwotKwkJSE1BQ19DVFggaGN0eDsKLSsJCVNT TF9DVFggKnRjdHggPSBzLT5pbml0aWFsX2N0eDsKLSsJCXVuc2lnbmVkIGNoYXIgaXZbRVZQX01B WF9JVl9MRU5HVEhdOwotKwkJdW5zaWduZWQgY2hhciBrZXlfbmFtZVsxNl07Ci0rCi0rCQkvKiBn ZXQgc2Vzc2lvbiBlbmNvZGluZyBsZW5ndGggKi8KLSsJCXNsZW4gPSBpMmRfU1NMX1NFU1NJT04o cy0+c2Vzc2lvbiwgTlVMTCk7Ci0rCQkvKiBTb21lIGxlbmd0aCB2YWx1ZXMgYXJlIDE2IGJpdHMs IHNvIGZvcmdldCBpdCBpZiBzZXNzaW9uIGlzCi0rIAkJICogdG9vIGxvbmcKLSsgCQkgKi8KLSsJ CWlmIChzbGVuID4gMHhGRjAwKQotKwkJCXJldHVybiAtMTsKLSsJCS8qIEdyb3cgYnVmZmVyIGlm IG5lZWQgYmU6IHRoZSBsZW5ndGggY2FsY3VsYXRpb24gaXMgYXMKLSsgCQkgKiBmb2xsb3dzIDEy IChEVExTIGhhbmRzaGFrZSBtZXNzYWdlIGhlYWRlcikgKwotKyAJCSAqIDQgKHRpY2tldCBsaWZl dGltZSBoaW50KSArIDIgKHRpY2tldCBsZW5ndGgpICsKLSsgCQkgKiAxNiAoa2V5IG5hbWUpICsg bWF4X2l2X2xlbiAoaXYgbGVuZ3RoKSArCi0rIAkJICogc2Vzc2lvbl9sZW5ndGggKyBtYXhfZW5j X2Jsb2NrX3NpemUgKG1heCBlbmNyeXB0ZWQgc2Vzc2lvbgotKyAJCSAqIGxlbmd0aCkgKyBtYXhf bWRfc2l6ZSAoSE1BQykuCi0rIAkJICovCi0rCQlpZiAoIUJVRl9NRU1fZ3JvdyhzLT5pbml0X2J1 ZiwKLSsJCQlEVExTMV9ITV9IRUFERVJfTEVOR1RIICsgMjIgKyBFVlBfTUFYX0lWX0xFTkdUSCAr Ci0rCQkJRVZQX01BWF9CTE9DS19MRU5HVEggKyBFVlBfTUFYX01EX1NJWkUgKyBzbGVuKSkKLSsJ CQlyZXR1cm4gLTE7Ci0rCQlzZW5jID0gT1BFTlNTTF9tYWxsb2Moc2xlbik7Ci0rCQlpZiAoIXNl bmMpCi0rCQkJcmV0dXJuIC0xOwotKwkJcCA9IHNlbmM7Ci0rCQlpMmRfU1NMX1NFU1NJT04ocy0+ c2Vzc2lvbiwgJnApOwotKwotKwkJcD0odW5zaWduZWQgY2hhciAqKSYocy0+aW5pdF9idWYtPmRh dGFbRFRMUzFfSE1fSEVBREVSX0xFTkdUSF0pOwotKwkJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4 KTsKLSsJCUhNQUNfQ1RYX2luaXQoJmhjdHgpOwotKwkJLyogSW5pdGlhbGl6ZSBITUFDIGFuZCBj aXBoZXIgY29udGV4dHMuIElmIGNhbGxiYWNrIHByZXNlbnQKLSsJCSAqIGl0IGRvZXMgYWxsIHRo ZSB3b3JrIG90aGVyd2lzZSB1c2UgZ2VuZXJhdGVkIHZhbHVlcwotKwkJICogZnJvbSBwYXJlbnQg Y3R4LgotKwkJICovCi0rCQlpZiAodGN0eC0+dGxzZXh0X3RpY2tldF9rZXlfY2IpCi0rCQkJewot KwkJCWlmICh0Y3R4LT50bHNleHRfdGlja2V0X2tleV9jYihzLCBrZXlfbmFtZSwgaXYsICZjdHgs Ci0rCQkJCQkJCSAmaGN0eCwgMSkgPCAwKQotKwkJCQl7Ci0rCQkJCU9QRU5TU0xfZnJlZShzZW5j KTsKLSsJCQkJcmV0dXJuIC0xOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZQotKwkJCXsKLSsJCQlS QU5EX3BzZXVkb19ieXRlcyhpdiwgMTYpOwotKwkJCUVWUF9FbmNyeXB0SW5pdF9leCgmY3R4LCBF VlBfYWVzXzEyOF9jYmMoKSwgTlVMTCwKLSsJCQkJCXRjdHgtPnRsc2V4dF90aWNrX2Flc19rZXks IGl2KTsKLSsJCQlITUFDX0luaXRfZXgoJmhjdHgsIHRjdHgtPnRsc2V4dF90aWNrX2htYWNfa2V5 LCAxNiwKLSsJCQkJCXRsc2V4dF90aWNrX21kKCksIE5VTEwpOwotKwkJCW1lbWNweShrZXlfbmFt ZSwgdGN0eC0+dGxzZXh0X3RpY2tfa2V5X25hbWUsIDE2KTsKLSsJCQl9Ci0rCQlsMm4ocy0+c2Vz c2lvbi0+dGxzZXh0X3RpY2tfbGlmZXRpbWVfaGludCwgcCk7Ci0rCQkvKiBTa2lwIHRpY2tldCBs ZW5ndGggZm9yIG5vdyAqLwotKwkJcCArPSAyOwotKwkJLyogT3V0cHV0IGtleSBuYW1lICovCi0r CQltYWNzdGFydCA9IHA7Ci0rCQltZW1jcHkocCwga2V5X25hbWUsIDE2KTsKLSsJCXAgKz0gMTY7 Ci0rCQkvKiBvdXRwdXQgSVYgKi8KLSsJCW1lbWNweShwLCBpdiwgRVZQX0NJUEhFUl9DVFhfaXZf bGVuZ3RoKCZjdHgpKTsKLSsJCXAgKz0gRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKCZjdHgpOwot KwkJLyogRW5jcnlwdCBzZXNzaW9uIGRhdGEgKi8KLSsJCUVWUF9FbmNyeXB0VXBkYXRlKCZjdHgs IHAsICZsZW4sIHNlbmMsIHNsZW4pOwotKwkJcCArPSBsZW47Ci0rCQlFVlBfRW5jcnlwdEZpbmFs KCZjdHgsIHAsICZsZW4pOwotKwkJcCArPSBsZW47Ci0rCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVw KCZjdHgpOwotKwotKwkJSE1BQ19VcGRhdGUoJmhjdHgsIG1hY3N0YXJ0LCBwIC0gbWFjc3RhcnQp OwotKwkJSE1BQ19GaW5hbCgmaGN0eCwgcCwgJmhsZW4pOwotKwkJSE1BQ19DVFhfY2xlYW51cCgm aGN0eCk7Ci0rCi0rCQlwICs9IGhsZW47Ci0rCQkvKiBOb3cgd3JpdGUgb3V0IGxlbmd0aHM6IHAg cG9pbnRzIHRvIGVuZCBvZiBkYXRhIHdyaXR0ZW4gKi8KLSsJCS8qIFRvdGFsIGxlbmd0aCAqLwot KwkJbGVuID0gcCAtICh1bnNpZ25lZCBjaGFyICopJihzLT5pbml0X2J1Zi0+ZGF0YVtEVExTMV9I TV9IRUFERVJfTEVOR1RIXSk7Ci0rCQlwPSh1bnNpZ25lZCBjaGFyICopJihzLT5pbml0X2J1Zi0+ ZGF0YVtEVExTMV9ITV9IRUFERVJfTEVOR1RIXSkgKyA0OwotKwkJczJuKGxlbiAtIDE4LCBwKTsg IC8qIFRpY2tldCBsZW5ndGggKi8KLSsKLSsJCS8qIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSAq LwotKwkJcy0+aW5pdF9udW09IGxlbjsKLSsJCXMtPnN0YXRlPVNTTDNfU1RfU1dfU0VTU0lPTl9U SUNLRVRfQjsKLSsJCXMtPmluaXRfb2ZmPTA7Ci0rCQlPUEVOU1NMX2ZyZWUoc2VuYyk7Ci0rCi0r CQkvKiBYRFRMUzogIHNldCBtZXNzYWdlIGhlYWRlciA/ICovCi0rCQltc2dfbGVuID0gcy0+aW5p dF9udW0gLSBEVExTMV9ITV9IRUFERVJfTEVOR1RIOwotKwkJZHRsczFfc2V0X21lc3NhZ2VfaGVh ZGVyKHMsICh2b2lkICopcy0+aW5pdF9idWYtPmRhdGEsCi0rCQkJU1NMM19NVF9ORVdTRVNTSU9O X1RJQ0tFVCwgbXNnX2xlbiwgMCwgbXNnX2xlbik7Ci0rCi0rCQkvKiBidWZmZXIgdGhlIG1lc3Nh Z2UgdG8gaGFuZGxlIHJlLXhtaXRzICovCi0rCQlkdGxzMV9idWZmZXJfbWVzc2FnZShzLCAwKTsK LSsJCX0KLSsKLSsJLyogU1NMM19TVF9TV19TRVNTSU9OX1RJQ0tFVF9CICovCi0rCXJldHVybihk dGxzMV9kb193cml0ZShzLFNTTDNfUlRfSEFORFNIQUtFKSk7Ci0rCX0KLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9sb2NsLmguZHRscy1yZW5lZyBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9zc2xfbG9jbC5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv c3NsX2xvY2wuaC5kdGxzLXJlbmVnCTIwMDktMTEtMjMgMDg6MzY6MDMuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2xvY2wuaAkyMDEwLTAxLTA3IDE3OjQ0 OjU1LjAwMDAwMDAwMCArMDEwMAotQEAgLTkzMyw3ICs5MzMsNyBAQCB2b2lkIGR0bHMxX3N0YXJ0 X3RpbWVyKFNTTCAqcyk7Ci0gdm9pZCBkdGxzMV9zdG9wX3RpbWVyKFNTTCAqcyk7Ci0gaW50IGR0 bHMxX2lzX3RpbWVyX2V4cGlyZWQoU1NMICpzKTsKLSB2b2lkIGR0bHMxX2RvdWJsZV90aW1lb3V0 KFNTTCAqcyk7Ci0tCi0raW50IGR0bHMxX3NlbmRfbmV3c2Vzc2lvbl90aWNrZXQoU1NMICpzKTsK LSAKLSAvKiBzb21lIGNsaWVudC1vbmx5IGZ1bmN0aW9ucyAqLwotIGludCBzc2wzX2NsaWVudF9o ZWxsbyhTU0wgKnMpOwotQEAgLTk0OSw2ICs5NDksOSBAQCBpbnQgc3NsM19zZW5kX2NsaWVudF9r ZXlfZXhjaGFuZ2UoU1NMICpzCi0gaW50IHNzbDNfZ2V0X2tleV9leGNoYW5nZShTU0wgKnMpOwot IGludCBzc2wzX2dldF9zZXJ2ZXJfY2VydGlmaWNhdGUoU1NMICpzKTsKLSBpbnQgc3NsM19jaGVj a19jZXJ0X2FuZF9hbGdvcml0aG0oU1NMICpzKTsKLSsjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhU Ci0raW50IHNzbDNfY2hlY2tfZmluaXNoZWQoU1NMICpzKTsKLSsjZW5kaWYKLSAKLSBpbnQgZHRs czFfY2xpZW50X2hlbGxvKFNTTCAqcyk7Ci0gaW50IGR0bHMxX3NlbmRfY2xpZW50X2NlcnRpZmlj YXRlKFNTTCAqcyk7Ci1AQCAtMTAzMCw2ICsxMDMzLDcgQEAgaW50IHNzbF9wcmVwYXJlX2NsaWVu dGhlbGxvX3Rsc2V4dChTU0wgKgotIGludCBzc2xfcHJlcGFyZV9zZXJ2ZXJoZWxsb190bHNleHQo U1NMICpzKTsKLSBpbnQgc3NsX2NoZWNrX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMpOwotIGlu dCBzc2xfY2hlY2tfc2VydmVyaGVsbG9fdGxzZXh0KFNTTCAqcyk7Ci0rCi0gI2lmZGVmIE9QRU5T U0xfTk9fU0hBMjU2Ci0gI2RlZmluZSB0bHNleHRfdGlja19tZAlFVlBfc2hhMQotICNlbHNlCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19jbG50LmMuZHRscy1yZW5lZyBvcGVu c3NsLTEuMC4wLWJldGE0L3NzbC9zM19jbG50LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3Nz bC9zM19jbG50LmMuZHRscy1yZW5lZwkyMDA5LTExLTIzIDA4OjM2OjA0LjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQuYwkyMDEwLTAxLTA3IDE3OjQ0 OjU1LjAwMDAwMDAwMCArMDEwMAotQEAgLTE3MCw5ICsxNzAsNiBAQAotIAotIHN0YXRpYyBjb25z dCBTU0xfTUVUSE9EICpzc2wzX2dldF9jbGllbnRfbWV0aG9kKGludCB2ZXIpOwotIHN0YXRpYyBp bnQgY2FfZG5fY21wKGNvbnN0IFg1MDlfTkFNRSAqIGNvbnN0ICphLGNvbnN0IFg1MDlfTkFNRSAq IGNvbnN0ICpiKTsKLS0jaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0tc3RhdGljIGludCBzc2wz X2NoZWNrX2ZpbmlzaGVkKFNTTCAqcyk7Ci0tI2VuZGlmCi0gCi0gc3RhdGljIGNvbnN0IFNTTF9N RVRIT0QgKnNzbDNfZ2V0X2NsaWVudF9tZXRob2QoaW50IHZlcikKLSAJewotQEAgLTE4MjcsNiAr MTgyNCw3IEBAIGludCBzc2wzX2dldF9uZXdfc2Vzc2lvbl90aWNrZXQoU1NMICpzKQotIAkJU1NM ZXJyKFNTTF9GX1NTTDNfR0VUX05FV19TRVNTSU9OX1RJQ0tFVCxTU0xfUl9MRU5HVEhfTUlTTUFU Q0gpOwotIAkJZ290byBmX2VycjsKLSAJCX0KLSsKLSAJcD1kPSh1bnNpZ25lZCBjaGFyICopcy0+ aW5pdF9tc2c7Ci0gCW4ybChwLCBzLT5zZXNzaW9uLT50bHNleHRfdGlja19saWZldGltZV9oaW50 KTsKLSAJbjJzKHAsIHRpY2tsZW4pOwotQEAgLTI5OTEsNyArMjk4OSw3IEBAIGVycjoKLSAgKi8K LSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0tc3RhdGljIGludCBzc2wzX2NoZWNrX2Zp bmlzaGVkKFNTTCAqcykKLStpbnQgc3NsM19jaGVja19maW5pc2hlZChTU0wgKnMpCi0gCXsKLSAJ aW50IG9rOwotIAlsb25nIG47Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9s aWIuYy5kdGxzLXJlbmVnIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3QxX2xpYi5jCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMuZHRscy1yZW5lZwkyMDA5LTExLTIzIDA4OjM2 OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3QxX2xpYi5j CTIwMTAtMDEtMDcgMTc6NDQ6NTUuMDAwMDAwMDAwICswMTAwCi1AQCAtMzQwLDcgKzM0MCw4IEBA IHVuc2lnbmVkIGNoYXIgKnNzbF9hZGRfY2xpZW50aGVsbG9fdGxzZXgKLSAgICAgICAgIH0KLSAK LSAjaWZuZGVmIE9QRU5TU0xfTk9fRUMKLS0JaWYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlz dCAhPSBOVUxMKQotKwlpZiAocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwgJiYK LSsJICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKLSAJCXsKLSAJCS8qIEFkZCBUTFMg ZXh0ZW5zaW9uIEVDUG9pbnRGb3JtYXRzIHRvIHRoZSBDbGllbnRIZWxsbyBtZXNzYWdlICovCi0g CQlsb25nIGxlbm1heDsgCi1AQCAtMzU5LDcgKzM2MCw4IEBAIHVuc2lnbmVkIGNoYXIgKnNzbF9h ZGRfY2xpZW50aGVsbG9fdGxzZXgKLSAJCW1lbWNweShyZXQsIHMtPnRsc2V4dF9lY3BvaW50Zm9y bWF0bGlzdCwgcy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0X2xlbmd0aCk7Ci0gCQlyZXQrPXMt PnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdF9sZW5ndGg7Ci0gCQl9Ci0tCWlmIChzLT50bHNleHRf ZWxsaXB0aWNjdXJ2ZWxpc3QgIT0gTlVMTCkKLSsJaWYgKHMtPnRsc2V4dF9lbGxpcHRpY2N1cnZl bGlzdCAhPSBOVUxMICYmCi0rCSAgICBzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCi0gCQl7 Ci0gCQkvKiBBZGQgVExTIGV4dGVuc2lvbiBFbGxpcHRpY0N1cnZlcyB0byB0aGUgQ2xpZW50SGVs bG8gbWVzc2FnZSAqLwotIAkJbG9uZyBsZW5tYXg7IAotQEAgLTQyMyw3ICs0MjUsOCBAQCB1bnNp Z25lZCBjaGFyICpzc2xfYWRkX2NsaWVudGhlbGxvX3Rsc2V4Ci0gCQlza2lwX2V4dDoKLSAKLSAj aWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAotLQlpZiAocy0+czMtPmNsaWVudF9v cGFxdWVfcHJmX2lucHV0ICE9IE5VTEwpCi0rCWlmIChzLT5zMy0+Y2xpZW50X29wYXF1ZV9wcmZf aW5wdXQgIT0gTlVMTCAmJgotKwkgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQotIAkJ ewotIAkJc2l6ZV90IGNvbCA9IHMtPnMzLT5jbGllbnRfb3BhcXVlX3ByZl9pbnB1dF9sZW47Ci0g CQkKLUBAIC00NDAsNyArNDQzLDggQEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9jbGllbnRoZWxs b190bHNleAotIAkJfQotICNlbmRpZgotIAotLQlpZiAocy0+dGxzZXh0X3N0YXR1c190eXBlID09 IFRMU0VYVF9TVEFUVVNUWVBFX29jc3ApCi0rCWlmIChzLT50bHNleHRfc3RhdHVzX3R5cGUgPT0g VExTRVhUX1NUQVRVU1RZUEVfb2NzcCAmJgotKwkgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJT SU9OKQotIAkJewotIAkJaW50IGk7Ci0gCQlsb25nIGV4dGxlbiwgaWRsZW4sIGl0bXA7Ci1AQCAt NTE1LDcgKzUxOSw3IEBAIHVuc2lnbmVkIGNoYXIgKnNzbF9hZGRfc2VydmVyaGVsbG9fdGxzZXgK LSAJCXMybigwLHJldCk7Ci0gCQl9Ci0gCi0tICAgICAgICBpZihzLT5zMy0+c2VuZF9jb25uZWN0 aW9uX2JpbmRpbmcpCi0rCWlmKHMtPnMzLT5zZW5kX2Nvbm5lY3Rpb25fYmluZGluZykKLSAgICAg ICAgIHsKLSAgICAgICAgICAgaW50IGVsOwotICAgICAgICAgICAKLUBAIC01NDAsNyArNTQ0LDgg QEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleAotICAgICAgICAgfQot IAotICNpZm5kZWYgT1BFTlNTTF9OT19FQwotLQlpZiAocy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRs aXN0ICE9IE5VTEwpCi0rCWlmIChzLT50bHNleHRfZWNwb2ludGZvcm1hdGxpc3QgIT0gTlVMTCAm JgotKwkgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQotIAkJewotIAkJLyogQWRkIFRM UyBleHRlbnNpb24gRUNQb2ludEZvcm1hdHMgdG8gdGhlIFNlcnZlckhlbGxvIG1lc3NhZ2UgKi8K LSAJCWxvbmcgbGVubWF4OyAKLUBAIC01NzksNyArNTg0LDggQEAgdW5zaWduZWQgY2hhciAqc3Ns X2FkZF9zZXJ2ZXJoZWxsb190bHNleAotIAkJfQotIAotICNpZmRlZiBUTFNFWFRfVFlQRV9vcGFx dWVfcHJmX2lucHV0Ci0tCWlmIChzLT5zMy0+c2VydmVyX29wYXF1ZV9wcmZfaW5wdXQgIT0gTlVM TCkKLSsJaWYgKHMtPnMzLT5zZXJ2ZXJfb3BhcXVlX3ByZl9pbnB1dCAhPSBOVUxMICYmCi0rCSAg ICBzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCi0gCQl7Ci0gCQlzaXplX3Qgc29sID0gcy0+ czMtPnNlcnZlcl9vcGFxdWVfcHJmX2lucHV0X2xlbjsKLSAJCQotQEAgLTc1Nyw3ICs3NjMsOCBA QCBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJfQotIAotICNp Zm5kZWYgT1BFTlNTTF9OT19FQwotLQkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9lY19w b2ludF9mb3JtYXRzKQotKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9lY19wb2ludF9m b3JtYXRzICYmCi0rCSAgICAgICAgICAgICBzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCi0g CQkJewotIAkJCXVuc2lnbmVkIGNoYXIgKnNkYXRhID0gZGF0YTsKLSAJCQlpbnQgZWNwb2ludGZv cm1hdGxpc3RfbGVuZ3RoID0gKihzZGF0YSsrKTsKLUBAIC03ODQsNyArNzkxLDggQEAgaW50IHNz bF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAotIAkJCWZwcmludGYoc3RkZXJyLCJc biIpOwotICNlbmRpZgotIAkJCX0KLS0JCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfZWxs aXB0aWNfY3VydmVzKQotKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9lbGxpcHRpY19j dXJ2ZXMgJiYKLSsJICAgICAgICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKLSAJ CQl7Ci0gCQkJdW5zaWduZWQgY2hhciAqc2RhdGEgPSBkYXRhOwotIAkJCWludCBlbGxpcHRpY2N1 cnZlbGlzdF9sZW5ndGggPSAoKihzZGF0YSsrKSA8PCA4KTsKLUBAIC04MTQsNyArODIyLDggQEAg aW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAotIAkJCX0KLSAjZW5kaWYg LyogT1BFTlNTTF9OT19FQyAqLwotICNpZmRlZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0 Ci0tCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQpCi0rCQll bHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5wdXQgJiYKLSsJICAgICAg ICAgICAgIHMtPnZlcnNpb24gIT0gRFRMUzFfVkVSU0lPTikKLSAJCQl7Ci0gCQkJdW5zaWduZWQg Y2hhciAqc2RhdGEgPSBkYXRhOwotIAotQEAgLTg1OCw4ICs4NjcsOCBAQCBpbnQgc3NsX3BhcnNl X2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJCXJldHVybiAwOwotIAkJCXJlbmVnb3Rp YXRlX3NlZW4gPSAxOwotIAkJCX0KLS0JCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfc3Rh dHVzX3JlcXVlc3QKLS0JCQkJCQkmJiBzLT5jdHgtPnRsc2V4dF9zdGF0dXNfY2IpCi0rCQllbHNl IGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3N0YXR1c19yZXF1ZXN0ICYmCi0rCQkgICAgICAgICBz LT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04gJiYgcy0+Y3R4LT50bHNleHRfc3RhdHVzX2NiKQot IAkJCXsKLSAJCQotIAkJCWlmIChzaXplIDwgNSkgCi1AQCAtMTAyNyw3ICsxMDM2LDggQEAgaW50 IHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLAotIAkJCX0KLSAKLSAjaWZuZGVm IE9QRU5TU0xfTk9fRUMKLS0JCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfZWNfcG9pbnRf Zm9ybWF0cykKLSsJCWVsc2UgaWYgKHR5cGUgPT0gVExTRVhUX1RZUEVfZWNfcG9pbnRfZm9ybWF0 cyAmJgotKwkgICAgICAgICAgICAgcy0+dmVyc2lvbiAhPSBEVExTMV9WRVJTSU9OKQotIAkJCXsK LSAJCQl1bnNpZ25lZCBjaGFyICpzZGF0YSA9IGRhdGE7Ci0gCQkJaW50IGVjcG9pbnRmb3JtYXRs aXN0X2xlbmd0aCA9ICooc2RhdGErKyk7Ci1AQCAtMTA3Myw3ICsxMDgzLDggQEAgaW50IHNzbF9w YXJzZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLAotIAkJCXMtPnRsc2V4dF90aWNrZXRfZXhw ZWN0ZWQgPSAxOwotIAkJCX0KLSAjaWZkZWYgVExTRVhUX1RZUEVfb3BhcXVlX3ByZl9pbnB1dAot LQkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0KQotKwkJZWxz ZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0ICYmCi0rCSAgICAgICAg ICAgICBzLT52ZXJzaW9uICE9IERUTFMxX1ZFUlNJT04pCi0gCQkJewotIAkJCXVuc2lnbmVkIGNo YXIgKnNkYXRhID0gZGF0YTsKLSAKLUBAIC0xMTAzLDcgKzExMTQsOCBAQCBpbnQgc3NsX3BhcnNl X3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJCX0KLSAJCQl9Ci0gI2VuZGlmCi0tCQll bHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3N0YXR1c19yZXF1ZXN0KQotKwkJZWxzZSBpZiAo dHlwZSA9PSBUTFNFWFRfVFlQRV9zdGF0dXNfcmVxdWVzdCAmJgotKwkJICAgICAgICAgcy0+dmVy c2lvbiAhPSBEVExTMV9WRVJTSU9OKQotIAkJCXsKLSAJCQkvKiBNVVNUIGJlIGVtcHR5IGFuZCBv bmx5IHNlbnQgaWYgd2UndmUgcmVxdWVzdGVkCi0gCQkJICogYSBzdGF0dXMgcmVxdWVzdCBtZXNz YWdlLgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtZW5naW5lc2Rpci5wYXRjaCBi L29wZW5zc2wtMS4wLjAtYmV0YTQtZW5naW5lc2Rpci5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMGEzMDRjZS4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGE0LWVu Z2luZXNkaXIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZS5lbmdpbmVzZGlyIG9wZW5zc2wtMS4wLjAtYmV0 YTQvQ29uZmlndXJlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUuZW5naW5lc2Rp cgkyMDA5LTExLTEyIDEyOjE3OjU5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvQ29uZmlndXJlCTIwMDktMTEtMTIgMTI6MTk6NDUuMDAwMDAwMDAwICswMTAwCi1AQCAt NjIyLDYgKzYyMiw3IEBAIG15ICRpZHhfbXVsdGlsaWIgPSAkaWR4Kys7Ci0gbXkgJHByZWZpeD0i IjsKLSBteSAkbGliZGlyPSIiOwotIG15ICRvcGVuc3NsZGlyPSIiOwotK215ICRlbmdpbmVzZGly PSIiOwotIG15ICRleGVfZXh0PSIiOwotIG15ICRpbnN0YWxsX3ByZWZpeD0gIiRFTlZ7J0lOU1RB TExfUFJFRklYJ30iOwotIG15ICRjcm9zc19jb21waWxlX3ByZWZpeD0iIjsKLUBAIC04MzMsNiAr ODM0LDEwIEBAIFBST0NFU1NfQVJHUzoKLSAJCQkJewotIAkJCQkkb3BlbnNzbGRpcj0kMTsKLSAJ CQkJfQotKwkJCWVsc2lmICgvXi0tZW5naW5lc2Rpcj0oLiopJC8pCi0rCQkJCXsKLSsJCQkJJGVu Z2luZXNkaXI9JDE7Ci0rCQkJCX0KLSAJCQllbHNpZiAoL14tLWluc3RhbGwucHJlZml4PSguKikk LykKLSAJCQkJewotIAkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7Ci1AQCAtMTA1NSw3ICsxMDYwLDcg QEAgY2hvcCAkcHJlZml4IGlmICRwcmVmaXggPX4gLy5cLyQvOwotIAotICRvcGVuc3NsZGlyPSRw cmVmaXggLiAiL3NzbCIgaWYgJG9wZW5zc2xkaXIgZXEgIiI7Ci0gJG9wZW5zc2xkaXI9JHByZWZp eCAuICIvIiAuICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyICF+IC8oXlwvfF5bYS16QS1aXTpb XFxcL10pLzsKLS0KLSskZW5naW5lc2Rpcj0iJHByZWZpeC9saWIvZW5naW5lcyIgaWYgJGVuZ2lu ZXNkaXIgZXEgIiI7Ci0gCi0gcHJpbnQgIklzTUsxTUY9JElzTUsxTUZcbiI7Ci0gCi1AQCAtMTY3 Niw3ICsxNjgxLDcgQEAgd2hpbGUgKDxJTj4pCi0gCQkjICRmb28gaXMgdG8gYmVjb21lICIkcHJl Zml4L2xpYiRtdWx0aWxpYi9lbmdpbmVzIjsKLSAJCSMgYXMgTWFrZWZpbGUub3JnIGFuZCBlbmdp bmVzL01ha2VmaWxlIGFyZSBhZGFwdGVkIGZvcgotIAkJIyAkbXVsdGlsaWIgc3VmZml4LgotLQkJ bXkgJGZvbyA9ICIkcHJlZml4L2xpYi9lbmdpbmVzIjsKLSsJCW15ICRmb28gPSAiJGVuZ2luZXNk aXIiOwotIAkJJGZvbyA9fiBzL1xcL1xcXFwvZzsKLSAJCXByaW50IE9VVCAiI2RlZmluZSBFTkdJ TkVTRElSIFwiJGZvb1wiXG4iOwotIAkJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9l bmdpbmVzL01ha2VmaWxlLmVuZ2luZXNkaXIgb3BlbnNzbC0xLjAuMC1iZXRhNC9lbmdpbmVzL01h a2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9lbmdpbmVzL01ha2VmaWxlLmVuZ2luZXNk aXIJMjAwOS0xMS0xMCAwMjo1Mjo1Mi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2VuZ2luZXMvTWFrZWZpbGUJMjAwOS0xMS0xMiAxMjoyMzowNi4wMDAwMDAwMDAgKzAx MDAKLUBAIC0xMjQsNyArMTI0LDcgQEAgaW5zdGFsbDoKLSAJCQkJc2Z4PSIuc28iOyBcCi0gCQkJ CWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9l bmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCi0gCQkJICBmaTsgXAotLQkJCSAgY2htb2QgNTU1 ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQk bCQkc2Z4Lm5ldzsgXAotKwkJCSAgY2htb2QgNzU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxM VE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAotIAkJCSAgbXYgLWYg JChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRs JCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5l cy8kJHBmeCQkbCQkc2Z4ICk7IFwKLSAJCWRvbmU7IFwKLSAJZmkKCmRpZmYgLS1naXQgYS9vcGVu c3NsLTEuMC4wLWJldGE0LWZpcHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LWZpcHMucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYjNkMWYuLjAwMDAwMDAKLS0tIGEv b3BlbnNzbC0xLjAuMC1iZXRhNC1maXBzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTIwNzkg KzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZQotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmln dXJlLmZpcHMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L0NvbmZpZ3VyZQkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEw MAotQEAgLTY2MCw2ICs2NjAsNyBAQCBteSAkY21sbF9lbmM9ImNhbWVsbGlhLm8gY21sbF9taXNj Lm8gY21sCi0gbXkgJHByb2Nlc3Nvcj0iIjsKLSBteSAkZGVmYXVsdF9yYW5saWI7Ci0gbXkgJHBl cmw7Ci0rbXkgJGZpcHM9MDsKLSAKLSAKLSAjIEFsbCBvZiB0aGUgZm9sbG93aW5nIGlzIGRpc2Fi bGVkIGJ5IGRlZmF1bHQgKFJDNSB3YXMgZW5hYmxlZCBiZWZvcmUgMC45LjgpOgotQEAgLTgwNiw2 ICs4MDcsMTAgQEAgUFJPQ0VTU19BUkdTOgotIAkJCX0KLSAJCWVsc2lmICgvXjM4NiQvKQotIAkJ CXsgJHByb2Nlc3Nvcj0zODY7IH0KLSsJCWVsc2lmICgvXmZpcHMkLykKLSsJCQl7Ci0rCQkJJGZp cHM9MTsKLSsJCSAgICAgICAgfQotIAkJZWxzaWYgKC9ecnNhcmVmJC8pCi0gCQkJewotIAkJCSMg Tm8gUlNBcmVmIHN1cHBvcnQgYW55IG1vcmUgc2luY2UgaXQncyBub3QgbmVlZGVkLgotQEAgLTEz NjgsNiArMTM3MywxMSBAQCAkY2ZsYWdzLj0iIC1ET1BFTlNTTF9JQTMyX1NTRTIiIGlmICghJG5v Ci0gCi0gJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX01PTlQiIGlmICgkYm5fb2JqID1+IC8t bW9udC8pOwotIAotK2lmICgkZmlwcykKLSsJewotKwkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0i I2RlZmluZSBPUEVOU1NMX0ZJUFNcbiI7Ci0rCX0KLSsKLSAkY3B1aWRfb2JqPSJtZW1fY2xyLm8i CXVubGVzcyAoJGNwdWlkX29iaiA9fiAvXC5vJC8pOwotICRkZXNfb2JqPSRkZXNfZW5jCXVubGVz cyAoJGRlc19vYmogPX4gL1wubyQvKTsKLSAkYmZfb2JqPSRiZl9lbmMJCXVubGVzcyAoJGJmX29i aiA9fiAvXC5vJC8pOwotQEAgLTE1MzUsNiArMTU0NSwxMCBAQCB3aGlsZSAoPElOPikKLSAJcy9e TElCS1JCNT0uKi9MSUJLUkI1PSR3aXRoYXJnc3sia3JiNS1saWIifS87Ci0gCXMvXkxJQlpMSUI9 LiovTElCWkxJQj0kd2l0aGFyZ3N7InpsaWItbGliIn0vOwotIAlzL15aTElCX0lOQ0xVREU9Liov WkxJQl9JTkNMVURFPSR3aXRoYXJnc3siemxpYi1pbmNsdWRlIn0vOwotKwlpZiAoJGZpcHMpCi0r CQl7Ci0rCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKLSsJCX0KLSAJcy9eU0hMSUJfVEFSR0VUPS4q L1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87Ci0gCXMvXlNITElCX01BUks9LiovU0hMSUJf TUFSSz0kc2hhcmVkX21hcmsvOwotIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURfTElCUz1cJChT SEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JmL2JmX3NrZXkuYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2JmL2JmX3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2JmL2JmX3NrZXkuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTc6NTIuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmYvYmZfc2tleS5jCTIwMDktMTEtMjMg MDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNTksMTAgKzU5LDE1IEBACi0gI2luY2x1ZGUg PHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Jsb3dm aXNoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5jbHVkZSAiYmZf bG9jbC5oIgotICNpbmNsdWRlICJiZl9waS5oIgotIAotLXZvaWQgQkZfc2V0X2tleShCRl9LRVkg KmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLStGSVBTX05PTl9GSVBT X1ZDSVBIRVJfSW5pdChCRikKLSAJewotIAlpbnQgaTsKLSAJQkZfTE9ORyAqcCxyaSxpblsyXTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iZi9ibG93ZmlzaC5oCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vYmYvYmxvd2Zpc2guaC5maXBzCTIwMDktMTEtMjMgMDg6MzI6MzAuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmYvYmxvd2Zpc2gu aAkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTEwNCw3ICsxMDQsOSBA QCB0eXBlZGVmIHN0cnVjdCBiZl9rZXlfc3QKLSAJQkZfTE9ORyBTWzQqMjU2XTsKLSAJfSBCRl9L RVk7Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBwcml2YXRlX0JGX3NldF9r ZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNl bmRpZgotIHZvaWQgQkZfc2V0X2tleShCRl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWdu ZWQgY2hhciAqZGF0YSk7Ci0gCi0gdm9pZCBCRl9lbmNyeXB0KEJGX0xPTkcgKmRhdGEsY29uc3Qg QkZfS0VZICprZXkpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vYm4u aC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL2JuLmgKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9ibi9ibi5oLmZpcHMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ibi9ibi5oCTIwMDktMTEt MjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNTQwLDYgKzU0MCwxNyBAQCBpbnQJQk5f aXNfcHJpbWVfZXgoY29uc3QgQklHTlVNICpwLGludCBuCi0gaW50CUJOX2lzX3ByaW1lX2Zhc3R0 ZXN0X2V4KGNvbnN0IEJJR05VTSAqcCxpbnQgbmNoZWNrcywgQk5fQ1RYICpjdHgsCi0gCQlpbnQg ZG9fdHJpYWxfZGl2aXNpb24sIEJOX0dFTkNCICpjYik7Ci0gCi0raW50IEJOX1g5MzFfZ2VuZXJh dGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpOwot KwotK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJ R05VTSAqcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0 IEJJR05VTSAqWHAyLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNC ICpjYik7Ci0raW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0g KnAxLCBCSUdOVU0gKnAyLAotKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKLSsJCQljb25z dCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCi0rCQkJQk5f R0VOQ0IgKmNiKTsKLSsKLSBCTl9NT05UX0NUWCAqQk5fTU9OVF9DVFhfbmV3KHZvaWQgKTsKLSB2 b2lkIEJOX01PTlRfQ1RYX2luaXQoQk5fTU9OVF9DVFggKmN0eCk7Ci0gaW50IEJOX21vZF9tdWxf bW9udGdvbWVyeShCSUdOVU0gKnIsY29uc3QgQklHTlVNICphLGNvbnN0IEJJR05VTSAqYiwKLWRp ZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ibi9ibl94OTMxcC5j Ci0tLS0gL2Rldi9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAyMjE1ICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vYm5feDkzMXAuYwkyMDA5LTExLTIzIDA4OjMy OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwyNzIgQEAKLSsvKiBibl94OTMxcC5jICov Ci0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3Bl blNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBo aWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29t KS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlv Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsvKiBYOS4zMSByb3V0aW5lcyBmb3Ig cHJpbWUgZGVyaXZhdGlvbiAqLwotKwotKy8qIFg5LjMxIHByaW1lIGRlcml2YXRpb24uIFRoaXMg aXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcHJpbWVzIHBpCi0rICogKHAxLCBwMiwgcTEsIHEyKSBm cm9tIGEgcGFyYW1ldGVyIFhwaSBieSBjaGVja2luZyBzdWNjZXNzaXZlIG9kZAotKyAqIGludGVn ZXJzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYm5feDkzMV9kZXJpdmVfcGkoQklHTlVNICpwaSwg Y29uc3QgQklHTlVNICpYcGksIEJOX0NUWCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYikKLSsJewot KwlpbnQgaSA9IDA7Ci0rCWlmICghQk5fY29weShwaSwgWHBpKSkKLSsJCXJldHVybiAwOwotKwlp ZiAoIUJOX2lzX29kZChwaSkgJiYgIUJOX2FkZF93b3JkKHBpLCAxKSkKLSsJCXJldHVybiAwOwot Kwlmb3IoOzspCi0rCQl7Ci0rCQlpKys7Ci0rCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKTsKLSsJ CS8qIE5CIDI3IE1SIGlzIHNwZWNpZmljZWQgaW4gWDkuMzEgKi8KLSsJCWlmIChCTl9pc19wcmlt ZV9mYXN0dGVzdF9leChwaSwgMjcsIGN0eCwgMSwgY2IpKQotKwkJCWJyZWFrOwotKwkJaWYgKCFC Tl9hZGRfd29yZChwaSwgMikpCi0rCQkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUJOX0dFTkNCX2NhbGwo Y2IsIDIsIGkpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotKy8qIFRoaXMgaXMgdGhlIG1haW4gWDku MzEgcHJpbWUgZGVyaXZhdGlvbiBmdW5jdGlvbi4gRnJvbSBwYXJhbWV0ZXJzCi0rICogWHAxLCBY cDIgYW5kIFhwIGRlcml2ZSB0aGUgcHJpbWUgcC4gSWYgdGhlIHBhcmFtZXRlcnMgcDEgb3IgcDIg YXJlCi0rICogbm90IE5VTEwgdGhleSB3aWxsIGJlIHJldHVybmVkIHRvbzogdGhpcyBpcyBuZWVk ZWQgZm9yIHRlc3RpbmcuCi0rICovCi0rCi0raW50IEJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KEJJ R05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwLCBj b25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICpl LCBCTl9DVFggKmN0eCwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlC SUdOVU0gKnQsICpwMXAyLCAqcG0xOwotKwotKwkvKiBPbmx5IGV2ZW4gZSBzdXBwb3J0ZWQgKi8K LSsJaWYgKCFCTl9pc19vZGQoZSkpCi0rCQlyZXR1cm4gMDsKLSsKLSsJQk5fQ1RYX3N0YXJ0KGN0 eCk7Ci0rCWlmICghcDEpCi0rCQlwMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJaWYgKCFwMikK LSsJCXAyID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwl0ID0gQk5fQ1RYX2dldChjdHgpOwotKwot KwlwMXAyID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlwbTEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0r Ci0rCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDEsIFhwMSwgY3R4LCBjYikpCi0rCQlnb3RvIGVy cjsKLSsKLSsJaWYgKCFibl94OTMxX2Rlcml2ZV9waShwMiwgWHAyLCBjdHgsIGNiKSkKLSsJCWdv dG8gZXJyOwotKwotKwlpZiAoIUJOX211bChwMXAyLCBwMSwgcDIsIGN0eCkpCi0rCQlnb3RvIGVy cjsKLSsKLSsJLyogRmlyc3Qgc2V0IHAgdG8gdmFsdWUgb2YgUnAgKi8KLSsKLSsJaWYgKCFCTl9t b2RfaW52ZXJzZShwLCBwMiwgcDEsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9t dWwocCwgcCwgcDIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9tb2RfaW52ZXJz ZSh0LCBwMSwgcDIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9tdWwodCwgdCwg cDEsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9zdWIocCwgcCwgdCkpCi0rCQln b3RvIGVycjsKLSsKLSsJaWYgKHAtPm5lZyAmJiAhQk5fYWRkKHAsIHAsIHAxcDIpKQotKwkJZ290 byBlcnI7Ci0rCi0rCS8qIHAgbm93IGVxdWFscyBScCAqLwotKwotKwlpZiAoIUJOX21vZF9zdWIo cCwgcCwgWHAsIHAxcDIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9hZGQocCwg cCwgWHApKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIHAgbm93IGVxdWFscyBZcDAgKi8KLSsKLSsJ Zm9yICg7OykKLSsJCXsKLSsJCWludCBpID0gMTsKLSsJCUJOX0dFTkNCX2NhbGwoY2IsIDAsIGkr Kyk7Ci0rCQlpZiAoIUJOX2NvcHkocG0xLCBwKSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmICghQk5f c3ViX3dvcmQocG0xLCAxKSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmICghQk5fZ2NkKHQsIHBtMSwg ZSwgY3R4KSkKLSsJCQlnb3RvIGVycjsKLSsJCWlmIChCTl9pc19vbmUodCkKLSsJCS8qIFg5LjMx IHNwZWNpZmllcyA4IE1SIGFuZCAxIEx1Y2FzIHRlc3Qgb3IgYW55IHByaW1lIHRlc3QKLSsJCSAq IG9mZmVyaW5nIHNpbWlsYXIgb3IgYmV0dGVyIGd1YXJhbnRlZXMgNTAgTVIgaXMgY29uc2lkZXJh Ymx5IAotKwkJICogYmV0dGVyLgotKwkJICovCi0rCQkJJiYgQk5faXNfcHJpbWVfZmFzdHRlc3Rf ZXgocCwgNTAsIGN0eCwgMSwgY2IpKQotKwkJCWJyZWFrOwotKwkJaWYgKCFCTl9hZGQocCwgcCwg cDFwMikpCi0rCQkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCUJOX0dFTkNCX2NhbGwoY2IsIDMsIDAp OwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCi0rCUJOX0NUWF9lbmQoY3R4KTsKLSsKLSsJ cmV0dXJuIHJldDsKLSsJfQotKwotKy8qIEdlbmVyYXRlIHBhaXIgb2YgcGFyYW10ZXJzIFhwLCBY cSBmb3IgWDkuMzEgcHJpbWUgZ2VuZXJhdGlvbi4KLSsgKiBOb3RlOiBuYml0cyBwYXJhbXRlciBp cyBzdW0gb2YgbnVtYmVyIG9mIGJpdHMgaW4gYm90aC4KLSsgKi8KLSsKLStpbnQgQk5fWDkzMV9n ZW5lcmF0ZV9YcHEoQklHTlVNICpYcCwgQklHTlVNICpYcSwgaW50IG5iaXRzLCBCTl9DVFggKmN0 eCkKLSsJewotKwlCSUdOVU0gKnQ7Ci0rCWludCBpOwotKwkvKiBOdW1iZXIgb2YgYml0cyBmb3Ig ZWFjaCBwcmltZSBpcyBvZiB0aGUgZm9ybQotKwkgKiA1MTIrMTI4cyBmb3IgcyA9IDAsIDEsIC4u LgotKwkgKi8KLSsJaWYgKChuYml0cyA8IDEwMjQpIHx8IChuYml0cyAmIDB4ZmYpKQotKwkJcmV0 dXJuIDA7Ci0rCW5iaXRzID4+PSAxOwotKwkvKiBUaGUgcmFuZG9tIHZhbHVlIFhwIG11c3QgYmUg YmV0d2VlbiBzcXJ0KDIpICogMl4obmJpdHMtMSkgYW5kCi0rCSAqIDJebmJpdHMgLSAxLiBCeSBz ZXR0aW5nIHRoZSB0b3AgdHdvIGJpdHMgd2UgZW5zdXJlIHRoYXQgdGhlIGxvd2VyCi0rCSAqIGJv dW5kIGlzIGV4Y2VlZGVkLgotKwkgKi8KLSsJaWYgKCFCTl9yYW5kKFhwLCBuYml0cywgMSwgMCkp Ci0rCQlyZXR1cm4gMDsKLSsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCXQgPSBCTl9DVFhfZ2V0 KGN0eCk7Ci0rCi0rCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspCi0rCQl7Ci0rCQlpZiAoIUJO X3JhbmQoWHEsIG5iaXRzLCAxLCAwKSkKLSsJCQlyZXR1cm4gMDsKLSsJCS8qIENoZWNrIHRoYXQg fFhwIC0gWHF8ID4gMl4obmJpdHMgLSAxMDApICovCi0rCQlCTl9zdWIodCwgWHAsIFhxKTsKLSsJ CWlmIChCTl9udW1fYml0cyh0KSA+IChuYml0cyAtIDEwMCkpCi0rCQkJYnJlYWs7Ci0rCQl9Ci0r Ci0rCUJOX0NUWF9lbmQoY3R4KTsKLSsKLSsJaWYgKGkgPCAxMDAwKQotKwkJcmV0dXJuIDE7Ci0r Ci0rCXJldHVybiAwOwotKwotKwl9Ci0rCi0rLyogR2VuZXJhdGUgcHJpbWVzIHVzaW5nIFg5LjMx IGFsZ29yaXRobS4gT2YgdGhlIHZhbHVlcyBwLCBwMSwgcDIsIFhwMQotKyAqIGFuZCBYcDIgb25s eSAncCcgbmVlZHMgdG8gYmUgbm9uLU5VTEwuIElmIGFueSBvZiB0aGUgb3RoZXJzIGFyZSBub3Qg TlVMTAotKyAqIHRoZSByZWxldmFudCBwYXJhbWV0ZXIgd2lsbCBiZSBzdG9yZWQgaW4gaXQuCi0r ICoKLSsgKiBEdWUgdG8gdGhlIGZhY3QgdGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAtIDEwMCkg bXVzdCBiZSBzYXRpc2ZpZWQgWHAgYW5kIFhxCi0rICogYXJlIGdlbmVyYXRlZCB1c2luZyB0aGUg cHJldmlvdXMgZnVuY3Rpb24gYW5kIHN1cHBsaWVkIGFzIGlucHV0LgotKyAqLwotKwotK2ludCBC Tl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpw MiwKLSsJCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwK LSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYikKLSsJ ewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCWlmICghWHAxKQot KwkJWHAxID0gQk5fQ1RYX2dldChjdHgpOwotKwlpZiAoIVhwMikKLSsJCVhwMiA9IEJOX0NUWF9n ZXQoY3R4KTsKLSsKLSsJaWYgKCFCTl9yYW5kKFhwMSwgMTAxLCAwLCAwKSkKLSsJCWdvdG8gZXJy b3I7Ci0rCWlmICghQk5fcmFuZChYcDIsIDEwMSwgMCwgMCkpCi0rCQlnb3RvIGVycm9yOwotKwlp ZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHAsIHAxLCBwMiwgWHAsIFhwMSwgWHAyLCBlLCBj dHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlC Tl9DVFhfZW5kKGN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vYm4vTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9i bi9NYWtlZmlsZS5maXBzCTIwMDgtMTEtMTIgMDk6MTk6MDIuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vTWFrZWZpbGUJMjAwOS0xMS0yMyAwODozMjoz MS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yNiwxMyArMjYsMTMgQEAgTElCU1JDPQlibl9hZGQuYyBi bl9kaXYuYyBibl9leHAuYyBibl9saQotIAlibl9wcmludC5jIGJuX3JhbmQuYyBibl9zaGlmdC5j IGJuX3dvcmQuYyBibl9ibGluZC5jIFwKLSAJYm5fa3Jvbi5jIGJuX3NxcnQuYyBibl9nY2QuYyBi bl9wcmltZS5jIGJuX2Vyci5jIGJuX3Nxci5jIGJuX2FzbS5jIFwKLSAJYm5fcmVjcC5jIGJuX21v bnQuYyBibl9tcGkuYyBibl9leHAyLmMgYm5fZ2YybS5jIGJuX25pc3QuYyBcCi0tCWJuX2RlcHIu YyBibl9jb25zdC5jCi0rCWJuX2RlcHIuYyBibl9jb25zdC5jIGJuX3g5MzFwLmMKLSAKLSBMSUJP Qko9CWJuX2FkZC5vIGJuX2Rpdi5vIGJuX2V4cC5vIGJuX2xpYi5vIGJuX2N0eC5vIGJuX211bC5v IGJuX21vZC5vIFwKLSAJYm5fcHJpbnQubyBibl9yYW5kLm8gYm5fc2hpZnQubyBibl93b3JkLm8g Ym5fYmxpbmQubyBcCi0gCWJuX2tyb24ubyBibl9zcXJ0Lm8gYm5fZ2NkLm8gYm5fcHJpbWUubyBi bl9lcnIubyBibl9zcXIubyAkKEJOX0FTTSkgXAotIAlibl9yZWNwLm8gYm5fbW9udC5vIGJuX21w aS5vIGJuX2V4cDIubyBibl9nZjJtLm8gYm5fbmlzdC5vIFwKLS0JYm5fZGVwci5vIGJuX2NvbnN0 Lm8KLSsJYm5fZGVwci5vIGJuX2NvbnN0Lm8gYm5feDkzMXAubwotIAotIFNSQz0gJChMSUJTUkMp Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9hc20vY21s bC14ODYucGwuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9hc20vY21s bC14ODYucGwKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9hc20vY21s bC14ODYucGwuZmlwcwkyMDA5LTA0LTA2IDE2OjI1OjAyLjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbAkyMDA5LTEx LTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTcyMiwxMiArNzIyLDE1IEBAIG15ICRi aWFzPWludChAVFswXSk/c2hpZnQoQFQpOjA7Ci0gfQotICZmdW5jdGlvbl9lbmQoIkNhbWVsbGlh X0VrZXlnZW4iKTsKLSAKLSskc2V0a2V5ZnVuYyA9ICJDYW1lbGxpYV9zZXRfa2V5IjsKLSskc2V0 a2V5ZnVuYyA9ICJwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkiIGlmICgkRU5We0ZJUFN9IG5lICIi KTsKLSsKLSBpZiAoJE9QRU5TU0wpIHsKLSAjIGludCBDYW1lbGxpYV9zZXRfa2V5ICgKLSAjCQlj b25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LAotICMJCWludCBiaXRzLAotICMJCUNBTUVMTElB X0tFWSAqa2V5KQotLSZmdW5jdGlvbl9iZWdpbl9CKCJDYW1lbGxpYV9zZXRfa2V5Iik7Ci0rJmZ1 bmN0aW9uX2JlZ2luX0IoJHNldGtleWZ1bmMpOwotIAkmcHVzaAkoImVieCIpOwotIAkmbW92CSgi ZWN4Iiwmd3BhcmFtKDApKTsJIyBwdWxsIGFyZ3VtZW50cwotIAkmbW92CSgiZWJ4Iiwmd3BhcmFt KDEpKTsKLUBAIC03NjAsNyArNzYzLDcgQEAgaWYgKCRPUEVOU1NMKSB7Ci0gJnNldF9sYWJlbCgi ZG9uZSIsNCk7Ci0gCSZwb3AJKCJlYngiKTsKLSAJJnJldAkoKTsKLS0mZnVuY3Rpb25fZW5kX0Io IkNhbWVsbGlhX3NldF9rZXkiKTsKLSsmZnVuY3Rpb25fZW5kX0IoJHNldGtleWZ1bmMpOwotIH0K LSAKLSBAU0JPWD0oCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxp YS9jYW1lbGxpYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY2Ft ZWxsaWEuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlh LmguZmlwcwkyMDA5LTExLTIzIDA4OjMyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmgJMjAwOS0xMS0yMyAwODozMjoz MS4wMDAwMDAwMDAgKzAxMDAKLUBAIC04OCw2ICs4OCwxMSBAQCBzdHJ1Y3QgY2FtZWxsaWFfa2V5 X3N0IAotIAl9OwotIHR5cGVkZWYgc3RydWN0IGNhbWVsbGlhX2tleV9zdCBDQU1FTExJQV9LRVk7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXko Y29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0rCUNBTUVMTElB X0tFWSAqa2V5KTsKLSsjZW5kaWYKLSsKLSBpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNp Z25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAJQ0FNRUxMSUFfS0VZICprZXkp OwotIAotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVs bGlhL2NtbGxfZmJsay5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAy MjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY21sbF9m YmxrLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNjgg QEAKLSsvKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWFfbWlzYy5jIC0qLSBtb2RlOkM7IGMtZmls ZS1zdHlsZTogImVheSIgLSotICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICoKLSsgKi8KLSsgCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9jYW1lbGxpYS5oPgotKyNpbmNsdWRlICJjbWxsX2xvY2wuaCIKLSsjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgQ2FtZWxs aWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywK LSsJQ0FNRUxMSUFfS0VZICprZXkpCi0rCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19C QURfQUJPUlQoQ0FNRUxMSUEpCi0rCXJldHVybiBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkodXNl cktleSwgYml0cywga2V5KTsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMJMjAwOC0xMC0yOCAxMzoxMzo1Mi4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9jbWxsX21p c2MuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTUyLDExICs1Miwy MCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv Y2FtZWxsaWEuaD4KLSAjaW5jbHVkZSAiY21sbF9sb2NsLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjZW5kaWYKLSAKLSBjb25zdCBjaGFyIENBTUVMTElBX3ZlcnNpb25bXT0iQ0FNRUxMSUEi IE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHBy aXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25z dCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICprZXkpCi0rI2Vsc2UKLSBpbnQgQ2FtZWxsaWFf c2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAJ Q0FNRUxMSUFfS0VZICprZXkpCi0rI2VuZGlmCi0gCXsKLSAJaWYoIXVzZXJLZXkgfHwgIWtleSkK LSAJCXJldHVybiAtMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVs bGlhL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvTWFr ZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5m aXBzCTIwMDgtMTItMjMgMTI6MzM6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUJMjAwOS0xMS0yMyAwODozMjozMS4wMDAw MDAwMDAgKzAxMDAKLUBAIC0yMyw5ICsyMyw5IEBAIEFQUFM9Ci0gCi0gTElCPSQoVE9QKS9saWJj cnlwdG8uYQotIExJQlNSQz1jYW1lbGxpYS5jIGNtbGxfbWlzYy5jIGNtbGxfZWNiLmMgY21sbF9j YmMuYyBjbWxsX29mYi5jIFwKLS0JICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIAotKwkgICBjbWxs X2NmYi5jIGNtbGxfY3RyLmMgY21sbF9mYmxrLmMKLSAKLS1MSUJPQko9IGNtbGxfZWNiLm8gY21s bF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykKLStMSUJPQko9IGNtbGxf ZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykgY21sbF9m YmxrLm8KLSAKLSBTUkM9ICQoTElCU1JDKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vY2FzdC9jYXN0LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYXN0 L2Nhc3QuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMJ MjAwOS0xMS0yMyAwODozMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9jYXN0L2Nhc3QuaAkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEw MAotQEAgLTgzLDcgKzgzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgY2FzdF9rZXlfc3QKLSAJaW50IHNo b3J0X2tleTsJLyogVXNlIHJlZHVjZWQgcm91bmRzIGZvciBzaG9ydCBrZXkgKi8KLSAJfSBDQVNU X0tFWTsKLSAKLS0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUyAKLSt2b2lkIHByaXZhdGVfQ0FTVF9z ZXRfa2V5KENBU1RfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp OwotKyNlbmRpZgotIHZvaWQgQ0FTVF9zZXRfa2V5KENBU1RfS0VZICprZXksIGludCBsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotIHZvaWQgQ0FTVF9lY2JfZW5jcnlwdChjb25zdCB1 bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsQ0FTVF9LRVkgKmtleSwKLSAJCSAg ICAgIGludCBlbmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FzdC9j X3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nhc3QvY19za2V5LmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMJMjAwMC0wNi0w MyAxNjoxMzozNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9jYXN0L2Nfc2tleS5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAt NTcsNiArNTcsMTEgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jYXN0Lmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5jbHVkZSAiY2FzdF9sY2wuaCIKLSAj aW5jbHVkZSAiY2FzdF9zLmgiCi0gCi1AQCAtNzIsNyArNzcsNyBAQAotICNkZWZpbmUgUzYgQ0FT VF9TX3RhYmxlNgotICNkZWZpbmUgUzcgQ0FTVF9TX3RhYmxlNwotIAotLXZvaWQgQ0FTVF9zZXRf a2V5KENBU1RfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0r RklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQ0FTVCkKLSAJewotIAlDQVNUX0xPTkcgeFsxNl07 Ci0gCUNBU1RfTE9ORyB6WzE2XTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY3J5cHRvLmgKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMDktMTEtMjMgMDg6MzI6 MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY3J5cHRv LmgJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC01NDYsMTIgKzU0Niw2 OSBAQCB2b2lkIE9wZW5TU0xEaWUoY29uc3QgY2hhciAqZmlsZSxpbnQgbGluCi0gdW5zaWduZWQg bG9uZyAqT1BFTlNTTF9pYTMyY2FwX2xvYyh2b2lkKTsKLSAjZGVmaW5lIE9QRU5TU0xfaWEzMmNh cCAoKihPUEVOU1NMX2lhMzJjYXBfbG9jKCkpKQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj ZGVmaW5lIEZJUFNfRVJST1JfSUdOT1JFRChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElO RV9fLCBcCi0rCQlhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdvcml0aG0gZXJyb3Ig aWdub3JlZCIpOwotKwotKyNkZWZpbmUgRklQU19CQURfQUJPUlQoYWxnKSBPcGVuU1NMRGllKF9f RklMRV9fLCBfX0xJTkVfXywgXAotKwkJI2FsZyAiIEFsZ29yaXRobSBmb3JiaWRkZW4gaW4gRklQ UyBtb2RlIik7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQU19TVFJJQ1QKLSsjZGVmaW5lIEZJUFNf QkFEX0FMR09SSVRITShhbGcpIEZJUFNfQkFEX0FCT1JUKGFsZykKLSsjZWxzZQotKyNkZWZpbmUg RklQU19CQURfQUxHT1JJVEhNKGFsZykgXAotKwl7IFwKLSsJRklQU2VycihGSVBTX0ZfSEFTSF9G SU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsgXAotKwlFUlJfYWRkX2Vycm9yX2RhdGEoMiwg IkFsZ29yaXRobT0iLCAjYWxnKTsgXAotKwlyZXR1cm4gMDsgXAotKwl9Ci0rI2VuZGlmCi0rCi0r LyogTG93IGxldmVsIGRpZ2VzdCBBUEkgYmxvY2tpbmcgbWFjcm8gKi8KLSsKLSsjZGVmaW5lIEZJ UFNfTk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKLSsJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpj KSBcCi0rCQl7IFwKLSsJCWlmIChGSVBTX21vZGUoKSkgXAotKwkJCUZJUFNfQkFEX0FMR09SSVRI TShhbGcpIFwKLSsJCXJldHVybiBwcml2YXRlXyMjYWxnIyNfSW5pdChjKTsgXAotKwkJfSBcCi0r CWludCBwcml2YXRlXyMjYWxnIyNfSW5pdChhbGcjI19DVFggKmMpCi0rCi0rLyogRm9yIGNpcGhl cnMgdGhlIEFQSSBvZnRlbiB2YXJpZXMgZnJvbSBjaXBoZXIgdG8gY2lwaGVyIGFuZCBlYWNoIG5l ZWRzIHRvCi0rICogYmUgdHJlYXRlZCBhcyBhIHNwZWNpYWwgY2FzZS4gVmFyaWFibGUga2V5IGxl bmd0aCBjaXBoZXJzIChCbG93ZmlzaCwgUkM0LAotKyAqIENBU1QpIGhvd2V2ZXIgYXJlIHZlcnkg c2ltaWxhciBhbmQgY2FuIHVzZSBhIGJsb2NraW5nIG1hY3JvLgotKyAqLwotKwotKyNkZWZpbmUg RklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoYWxnKSBcCi0rCXZvaWQgYWxnIyNfc2V0X2tleShh bGcjI19LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkgXAotKwkJ eyBcCi0rCQlpZiAoRklQU19tb2RlKCkpIFwKLSsJCQlGSVBTX0JBRF9BQk9SVChhbGcpIFwKLSsJ CXByaXZhdGVfIyNhbGcjI19zZXRfa2V5KGtleSwgbGVuLCBkYXRhKTsgXAotKwkJfSBcCi0rCXZv aWQgcHJpdmF0ZV8jI2FsZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXksIGludCBsZW4sIFwKLSsJ CQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rCi0rI2Vsc2UKLSsKLSsjZGVmaW5lIEZJ UFNfTk9OX0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAotKwl2b2lkIGFsZyMjX3NldF9rZXkoYWxn IyNfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rCi0rI2Rl ZmluZSBGSVBTX05PTl9GSVBTX01EX0luaXQoYWxnKSBcCi0rCWludCBhbGcjI19Jbml0KGFsZyMj X0NUWCAqYykgCi0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLSsKLSAvKiBCRUdJ TiBFUlJPUiBDT0RFUyAqLwotIC8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJh dGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0gICogbWFkZSBhZnRlciB0 aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4u Ci0gICovCi0gdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKLSAKLSsjZGVmaW5l IE9QRU5TU0xfSEFWRV9JTklUCTEKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpOwot KwotIC8qIEVycm9yIGNvZGVzIGZvciB0aGUgQ1JZUFRPIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBG dW5jdGlvbiBjb2Rlcy4gKi8KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Ro L2RoX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGhfZXJyLmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9lcnIuYy5maXBzCTIwMDYtMTEtMjEg MjI6Mjk6MzcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v ZGgvZGhfZXJyLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC03Myw2 ICs3Myw4IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX2Z1bmN0c1tdPQotIHtFUlJf RlVOQyhESF9GX0NPTVBVVEVfS0VZKSwJIkNPTVBVVEVfS0VZIn0sCi0ge0VSUl9GVU5DKERIX0Zf REhQQVJBTVNfUFJJTlRfRlApLAkiREhwYXJhbXNfcHJpbnRfZnAifSwKLSB7RVJSX0ZVTkMoREhf Rl9ESF9CVUlMVElOX0dFTlBBUkFNUyksCSJESF9CVUlMVElOX0dFTlBBUkFNUyJ9LAotK3tFUlJf RlVOQyhESF9GX0RIX0NPTVBVVEVfS0VZKSwJIkRIX2NvbXB1dGVfa2V5In0sCi0re0VSUl9GVU5D KERIX0ZfREhfR0VORVJBVEVfS0VZKSwJIkRIX2dlbmVyYXRlX2tleSJ9LAotIHtFUlJfRlVOQyhE SF9GX0RIX05FV19NRVRIT0QpLAkiREhfbmV3X21ldGhvZCJ9LAotIHtFUlJfRlVOQyhESF9GX0RI X1BBUkFNX0RFQ09ERSksCSJESF9QQVJBTV9ERUNPREUifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9Q UklWX0RFQ09ERSksCSJESF9QUklWX0RFQ09ERSJ9LAotQEAgLTk0LDYgKzk2LDcgQEAgc3RhdGlj IEVSUl9TVFJJTkdfREFUQSBESF9zdHJfcmVhc29uc1tdPQotIHtFUlJfUkVBU09OKERIX1JfQk5f RVJST1IpICAgICAgICAgICAgICAgLCJibiBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERIX1JfREVD T0RFX0VSUk9SKSAgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihESF9S X0lOVkFMSURfUFVCS0VZKSAgICAgICAgICwiaW52YWxpZCBwdWJsaWMga2V5In0sCi0re0VSUl9S RUFTT04oREhfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9 LAotIHtFUlJfUkVBU09OKERIX1JfS0VZU19OT1RfU0VUKSAgICAgICAgICAgLCJrZXlzIG5vdCBz ZXQifSwKLSB7RVJSX1JFQVNPTihESF9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgICwibW9kdWx1 cyB0b28gbGFyZ2UifSwKLSB7RVJSX1JFQVNPTihESF9SX05PX1BBUkFNRVRFUlNfU0VUKSAgICAg ICwibm8gcGFyYW1ldGVycyBzZXQifSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2RoL2RoX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGhfZ2Vu LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIwMDUt MDQtMjYgMjA6NTM6MTUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZGgvZGhfZ2VuLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBA IC02NSw2ICs2NSwxMCBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgot KyNlbmRpZgotIAotIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwgaW50 IHByaW1lX2xlbiwgaW50IGdlbmVyYXRvciwgQk5fR0VOQ0IgKmNiKTsKLSAKLUBAIC0xMDYsNiAr MTEwLDIwIEBAIHN0YXRpYyBpbnQgZGhfYnVpbHRpbl9nZW5wYXJhbXMoREggKnJldCwKLSAJaW50 IGcsb2s9IC0xOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0RI X0JVSUxUSU5fR0VOUEFSQU1TLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1 cm4gMDsKLSsJCX0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NM X0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlESGVycihESF9GX0RIX0JVSUxU SU5fR0VOUEFSQU1TLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJ CX0KLSsjZW5kaWYKLSsKLSAJY3R4PUJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBn b3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9kaC9kaC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGgu aAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoLmguZmlwcwkyMDA5LTExLTIz IDA4OjMyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2RoL2RoLmgJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC03Nyw2ICs3 Nyw4IEBACi0gIyBkZWZpbmUgT1BFTlNTTF9ESF9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCi0gI2Vu ZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0r Ci0gI2RlZmluZSBESF9GTEFHX0NBQ0hFX01PTlRfUCAgICAgMHgwMQotICNkZWZpbmUgREhfRkxB R19OT19FWFBfQ09OU1RUSU1FIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4g REgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0 aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKLUBAIC0yNDEsNiArMjQzLDggQEAgdm9pZCBFUlJf bG9hZF9ESF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgREhfRl9HRU5FUkFURV9QQVJBTUVURVJT CQkJIDEwNAotICNkZWZpbmUgREhfRl9QS0VZX0RIX0RFUklWRQkJCQkgMTEyCi0gI2RlZmluZSBE SF9GX1BLRVlfREhfS0VZR0VOCQkJCSAxMTMKLSsjZGVmaW5lIERIX0ZfREhfQ09NUFVURV9LRVkJ CQkJIDExNAotKyNkZWZpbmUgREhfRl9ESF9HRU5FUkFURV9LRVkJCQkgMTE1Ci0gCi0gLyogUmVh c29uIGNvZGVzLiAqLwotICNkZWZpbmUgREhfUl9CQURfR0VORVJBVE9SCQkJCSAxMDEKLUBAIC0y NTMsNiArMjU3LDcgQEAgdm9pZCBFUlJfbG9hZF9ESF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUg REhfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3Ci0gI2RlZmluZSBESF9SX05PX1BSSVZBVEVf VkFMVUUJCQkJIDEwMAotICNkZWZpbmUgREhfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkg MTA1Ci0rI2RlZmluZSBESF9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCQkgMTEwCi0gCi0gI2lmZGVm ICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Ro L2RoX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGhfa2V5LmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMDctMDMtMjgg MDI6MTU6MjMuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v ZGgvZGhfa2V5LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02MSw2 ICs2MSw5IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBpbnQgZ2VuZXJh dGVfa2V5KERIICpkaCk7Ci0gc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25lZCBjaGFyICpr ZXksIGNvbnN0IEJJR05VTSAqcHViX2tleSwgREggKmRoKTsKLUBAIC0xMDcsNiArMTEwLDE0IEBA IHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCkKLSAJQk5fTU9OVF9DVFggKm1vbnQ9TlVM TDsKLSAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZfa2V5PU5VTEw7Ci0gCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9Q RU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfR0VO RVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0K LSsjZW5kaWYKLSsKLSAJY3R4ID0gQk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdv dG8gZXJyOwotIAotQEAgLTE4NCw2ICsxOTUsMTMgQEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1 bnNpZ25lZCBjaGFyICprZQotIAkJREhlcnIoREhfRl9DT01QVVRFX0tFWSxESF9SX01PRFVMVVNf VE9PX0xBUkdFKTsKLSAJCWdvdG8gZXJyOwotIAkJfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlESGVycihESF9GX0NPTVBVVEVfS0VZLCBESF9S X0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSAKLSAJ Y3R4ID0gQk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotQEAgLTI1 MSw2ICsyNjksOSBAQCBzdGF0aWMgaW50IGRoX2JuX21vZF9leHAoY29uc3QgREggKmRoLCBCCi0g Ci0gc3RhdGljIGludCBkaF9pbml0KERIICpkaCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlkaC0+ZmxhZ3MgfD0gREhfRkxB R19DQUNIRV9NT05UX1A7Ci0gCXJldHVybigxKTsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2RzYS9kc2FfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNh X2dlbi5jLmZpcHMJMjAwOC0xMi0yNiAxODoxNzoyMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMDktMTEtMjMgMDg6MzI6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtNzcsOCArNzcsMTIgQEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIu aCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotICNpbmNsdWRlICJkc2FfbG9jbC5oIgotIAotIGlu dCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwgaW50IGJpdHMsCi1AQCAtMTI2 LDYgKzEzMCwyMSBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0g CUJOX0NUWCAqY3R4PU5VTEw7Ci0gCXVuc2lnbmVkIGludCBoPTI7Ci0gCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQ U2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sCi0rCQkgICAgRklQU19SX0ZJUFNfU0VM RlRFU1RfRkFJTEVEKTsKLSsJICAgIGdvdG8gZXJyOwotKwkgICAgfQotKwotKwlpZiAoRklQU19t b2RlKCkgJiYgKGJpdHMgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJ ewotKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOLCBEU0FfUl9LRVlfU0laRV9U T09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChxc2l6ZSAh PSBTSEFfRElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgot IAkgICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCi0gCQkvKiBpbnZhbGlkIHEgc2l6 ZSAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYS5oLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZHNhL2RzYS5oLmZpcHMJMjAwOS0xMS0yMyAwODozMjozMC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhLmgJMjAwOS0xMS0y MyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC04OCw2ICs4OCw4IEBACi0gIyBkZWZpbmUg T1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZpbmUg T1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERTQV9G TEFHX0NBQ0hFX01PTlRfUAkweDAxCi0gI2RlZmluZSBEU0FfRkxBR19OT19FWFBfQ09OU1RUSU1F ICAgICAgIDB4MDIgLyogbmV3IHdpdGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24g bm93IHVzZXMgY29uc3RhbnQgdGltZQotQEAgLTk3LDYgKzk5LDIxIEBACi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgdXNlZCBmb3IgYWxsIGV4cG9u ZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K LSAKLSsvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBEU0EgbWV0aG9kIGlzIEZJUFMgY29tcGxp YW50IGFuZCBjYW4gYmUgdXNlZAotKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhl IHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgotKyAqIGFwcGxpY2F0aW9uIHNldHMgdGhp cyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5Ci0rICogdG8g ZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgotKyAqLwotKwotKyNkZWZpbmUgRFNBX0ZM QUdfRklQU19NRVRIT0QJCQkweDA0MDAKLSsKLSsvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBv cGVyYXRpb25zIG5vcm1hbGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKLSsgKiBwZXJtaXR0 ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0 aGF0IHRoZQotKyAqIHVzYWdlIGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5lIERTQV9G TEFHX05PTl9GSVBTX0FMTE9XCQkJMHgwNDAwCi0rCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIGV4 dGVybiAiQyIgewotICNlbmRpZgotQEAgLTI3MCw4ICsyODcsMTEgQEAgdm9pZCBFUlJfbG9hZF9E U0Ffc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERTQV9GX0RPX0RTQV9QUklOVAkJCQkgMTA0Ci0g I2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlQJCQkJIDEwMAotICNkZWZpbmUgRFNBX0ZfRFNB UEFSQU1TX1BSSU5UX0ZQCQkJIDEwMQotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VO CQkJIDEyNAotKyNkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTIzCi0gI2Rl ZmluZSBEU0FfRl9EU0FfRE9fU0lHTgkJCQkgMTEyCi0gI2RlZmluZSBEU0FfRl9EU0FfRE9fVkVS SUZZCQkJCSAxMTMKLSsjZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTCQkJIDEy NQotICNkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QJCQkJIDEwMwotICNkZWZpbmUgRFNBX0Zf RFNBX1BBUkFNX0RFQ09ERQkJCQkgMTE5Ci0gI2RlZmluZSBEU0FfRl9EU0FfUFJJTlRfRlAJCQkJ IDEwNQotQEAgLTI5Niw5ICszMTYsMTIgQEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lk KTsKLSAjZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRQkJIDEwMAotICNk ZWZpbmUgRFNBX1JfREVDT0RFX0VSUk9SCQkJCSAxMDQKLSAjZGVmaW5lIERTQV9SX0lOVkFMSURf RElHRVNUX1RZUEUJCQkgMTA2Ci0rI2RlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkg MTEwCi0gI2RlZmluZSBEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMJCQkgMTAxCi0gI2RlZmluZSBE U0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTAzCi0rI2RlZmluZSBEU0FfUl9OT05fRklQU19N RVRIT0QJCQkJIDExMQotICNkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQJCQkJIDEwNwot KyNkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERQkgMTEyCi0g I2RlZmluZSBEU0FfUl9QQVJBTUVURVJfRU5DT0RJTkdfRVJST1IJCQkgMTA1Ci0gCi0gI2lmZGVm ICBfX2NwbHVzcGx1cwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2Rz YV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMJMjAwNy0wMy0y OCAwMjoxNToyNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9kc2EvZHNhX2tleS5jCTIwMDktMTEtMjMgMDg6MzM6MzIuMDAwMDAwMDAwICswMTAwCi1AQCAt NjMsOSArNjMsNTUgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlICJmaXBzX2xv Y2wuaCIKLSAKLSBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSk7Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBpbnQgZmlwc19kc2FfcGFpcndpc2VfZmFp bCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKQotKwl7Ci0rCWZp cHNfZHNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0raW50IGZpcHNfY2hlY2tfZHNhKERT QSAqZHNhKQotKwl7Ci0rCUVWUF9QS0VZICpwazsKLSsJdW5zaWduZWQgY2hhciB0YnNbXSA9ICJE U0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rCWludCByZXQgPSAwOwotKwotKyAgICAJaWYgKChw az1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9z ZXQxX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IHRicywgLTEsCi0rCQkJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCAwLCBOVUxMKSkKLSsJCWdvdG8g ZXJyOwotKwotKwlyZXQgPSAxOwotKwotK2VycjoKLSsJaWYgKHJldCA9PSAwKQotKwkJewotKwkJ Zmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19E U0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJCX0KLSsKLSsJaWYgKHBrKQotKwkJ RVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLSsKLSBp bnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAJewotIAlpZihkc2EtPm1ldGgtPmRzYV9r ZXlnZW4pCi1AQCAtNzksNiArMTI1LDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2Vu KERTQSAqZHNhKQotIAlCTl9DVFggKmN0eD1OVUxMOwotIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwq cHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUo KSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZR0VOLCBEU0FfUl9L RVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlm ICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCi0gCWlmIChkc2EtPnBy aXZfa2V5ID09IE5VTEwpCi1AQCAtMTE3LDYgKzE3MSwxNSBAQCBzdGF0aWMgaW50IGRzYV9idWls dGluX2tleWdlbihEU0EgKmRzYSkKLSAKLSAJZHNhLT5wcml2X2tleT1wcml2X2tleTsKLSAJZHNh LT5wdWJfa2V5PXB1Yl9rZXk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2Rl KCkpCi0rCQl7Ci0rCQlpZiAoZmlwc19kc2FfcGFpcndpc2VfZmFpbCkKLSsJCQlCTl9hZGRfd29y ZChkc2EtPnB1Yl9rZXksIDEpOwotKwkJaWYoIWZpcHNfY2hlY2tfZHNhKGRzYSkpCi0rCQkgICAg Z290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7Ci0gCi0gZXJyOgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9kc2EvZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNi4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX29zc2wuYwkyMDA5LTEx LTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTY1LDYgKzY1LDkgQEAKLSAjaW5jbHVk ZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvYXNuMS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Ci0gc3RhdGljIGludCBk c2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLCBC SUdOVU0gKipycCk7Ci1AQCAtODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2FfbW9kX2V4cCwgKi8K LSBOVUxMLCAvKiBkc2FfYm5fbW9kX2V4cCwgKi8KLSBkc2FfaW5pdCwKLSBkc2FfZmluaXNoLAot LTAsCi0rRFNBX0ZMQUdfRklQU19NRVRIT0QsCi0gTlVMTCwKLSBOVUxMLAotIE5VTEwKLUBAIC0x MzcsNiArMTQwLDIwIEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24K LSAJaW50IHJlYXNvbj1FUlJfUl9CTl9MSUI7Ci0gCURTQV9TSUcgKnJldD1OVUxMOwotIAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsK LSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7Ci0rCSAgICByZXR1cm4gTlVMTDsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgp ICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotKwotIAlCTl9pbml0 KCZtKTsKLSAJQk5faW5pdCgmeHIpOwotIAotQEAgLTMxMiw2ICszMjksMjAgQEAgc3RhdGljIGlu dCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAotIAkJcmV0dXJuIC0xOwotIAkJfQotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAg IHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9k ZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlf U0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRpZgotKwotIAlpID0g Qk5fbnVtX2JpdHMoZHNhLT5xKTsKLSAJLyogZmlwcyAxODYtMyBhbGxvd3Mgb25seSBkaWZmZXJl bnQgc2l6ZXMgZm9yIHEgKi8KLSAJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0ICYmIGkgIT0gMjU2 KQotQEAgLTQwMyw2ICs0MzQsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5z aWduZWQgCi0gCi0gc3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKLSB7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCWRzYS0+Zmxh Z3N8PURTQV9GTEFHX0NBQ0hFX01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIH0KLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9lcnIvZXJyX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZXJyL2Vycl9hbGwuYy5maXBzCTIwMDktMDgtMDkgMTY6NTg6MDUuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXJyL2Vycl9hbGwuYwkyMDA5LTExLTIz IDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTk2LDYgKzk2LDkgQEAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9vY3NwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvdHMuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKLSAjaW5jbHVkZSA8b3BlbnNz bC9jbXMuaD4KLSAjZW5kaWYKLUBAIC0xNDksNiArMTUyLDkgQEAgdm9pZCBFUlJfbG9hZF9jcnlw dG9fc3RyaW5ncyh2b2lkKQotICNlbmRpZgotIAlFUlJfbG9hZF9PQ1NQX3N0cmluZ3MoKTsKLSAJ RVJSX2xvYWRfVUlfc3RyaW5ncygpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRVJSX2xvYWRf RklQU19zdHJpbmdzKCk7Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0NNUwotIAlFUlJf bG9hZF9DTVNfc3RyaW5ncygpOwotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L2RpZ2VzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZp cHMJMjAwOC0xMS0wNCAxMzowNjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ldnAvZGlnZXN0LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAg KzAxMDAKLUBAIC0xMTYsNiArMTE2LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0g I2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2Ns LmgiCi0gCi0gdm9pZCBFVlBfTURfQ1RYX2luaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7Ci1AQCAt MTM3LDkgKzEzOCw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25z Ci0gCXJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOwotIAl9Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRy YXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29yaXRobXMg aW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50 IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2Vz dCBpbml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF91cGRhdGUoRVZQX01EX0NU WCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQotKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGludCBiYWRfZmlu YWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQotKwl7IEZJUFNfRVJST1JfSUdO T1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX01E IGJhZF9tZCA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQsCi0rCWJh ZF91cGRhdGUsCi0rCWJhZF9maW5hbCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJMCwK LSsJezAsMCwwLDB9LAotKwl9OwotKwotKyNlbmRpZgotKwotIGludCBFVlBfRGlnZXN0SW5pdF9l eChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5FICppbXBsKQotIAl7 Ci0gCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxBR19DTEVBTkVEKTsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7 Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOwotKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOwotKwkJcmV0dXJuIDA7Ci0rCQl9 Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBXaGV0aGVyIGl0J3Mg bmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCi0g CSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2 b2lkIHJlbGVhc2luZwotQEAgLTE5NSw2ICsyMzcsMTggQEAgaW50IEVWUF9EaWdlc3RJbml0X2V4 KEVWUF9NRF9DVFggKmN0eCwgYwotICNlbmRpZgotIAlpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkK LSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJewot KwkJCWlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykgCi0rCQkJICYmICEoY3R4 LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpCi0rCQkJCXsKLSsJCQkJ RVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7 Ci0rCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJ CQl9Ci0rI2VuZGlmCi0gCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3QtPmN0eF9zaXpl KQotIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJY3R4LT5kaWdlc3Q9dHlwZTsK LUBAIC0yMjIsNiArMjc2LDkgQEAgc2tpcF90b19pbml0OgotIAotIGludCBFVlBfRGlnZXN0VXBk YXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQotIAl7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlm Ci0gCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7Ci0gCX0KLSAKLUBAIC0yMzgs NiArMjk1LDkgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpjdHgsIHVucwotIGlu dCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwg dW5zaWduZWQgaW50ICpzaXplKQotIAl7Ci0gCWludCByZXQ7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCi0gCU9QRU5TU0xfYXNzZXJ0 KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhfTURfU0laRSk7Ci0gCXJldD1jdHgtPmRp Z2VzdC0+ZmluYWwoY3R4LG1kKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfYWVzLmMK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMDQtMDEt MjggMjA6MDU6MzMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vZXZwL2VfYWVzLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02 OSwzMiArNjksMjkgQEAgdHlwZWRlZiBzdHJ1Y3QKLSAKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVS KGFlc18xMjgsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAotIAkJICAgICAgIE5JRF9hZXNfMTI4LCAx NiwgMTYsIDE2LCAxMjgsCi0tCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0JCSAg ICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2Fz bjFfaXYsCi0tCQkgICAgICAgTlVMTCkKLSsJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQ X0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJICAg ICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0gSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNf MTkyLCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLSAJCSAgICAgICBOSURfYWVzXzE5MiwgMTYsIDI0 LCAxNiwgMTI4LAotLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCi0tCQkgICAgICAg RVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2 LAotLQkJICAgICAgIE5VTEwpCi0rCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBI X0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICAgIGFlc19pbml0X2tleSwKLSsJCSAgICAgICBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzI1Niwg a3MsIEFFUywgRVZQX0FFU19LRVksCi0gCQkgICAgICAgTklEX2Flc18yNTYsIDE2LCAzMiwgMTYs IDEyOCwKLS0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJICAgICAgIEVWUF9D SVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLS0J CSAgICAgICBOVUxMKQotLQotLSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRz KQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQot LQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEp Ci0tSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxKQotLQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgs OCkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4 KQotKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNO MSwKLSsJCSAgICAgICBhZXNfaW5pdF9rZXksCi0rCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCkKLSsKLSsjZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxjYml0cyxmbGFncykJ SU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxjYml0cywxNixmbGFn cykKLSsKLStJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lN UExFTUVOVF9BRVNfQ0ZCUigxOTIsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FF U19DRkJSKDI1NiwxLEVWUF9DSVBIX0ZMQUdfRklQUykKLSsKLStJTVBMRU1FTlRfQUVTX0NGQlIo MTI4LDgsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCxFVlBf Q0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4LEVWUF9DSVBIX0ZMQUdf RklQUykKLSAKLSBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBj b25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0gCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwg aW50IGVuYykKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX2NhbWVs bGlhLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzCTIwMDYt MDgtMzEgMjI6NTY6MjAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZXZwL2VfY2FtZWxsaWEuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEw MAotQEAgLTkzLDcgKzkzLDcgQEAgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihjYW1lbGxpYV8yNTYs IGtzLAotIAlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotIAlOVUxMKQotIAotLSNkZWZpbmUgSU1Q TEVNRU5UX0NBTUVMTElBX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlh LENhbWVsbGlhLEVWUF9DQU1FTExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYpCi0rI2RlZmluZSBJ TVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxs aWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNiwwKQotIAotIElN UExFTUVOVF9DQU1FTExJQV9DRkJSKDEyOCwxKQotIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKDE5 MiwxKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfZGVzMy5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMJMjAwOC0xMi0yOSAxMzozNTo0Ny4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9kZXMz LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yMDYsOSArMjA2LDkg QEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAotICAgICB9Ci0gCi0g QkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlLCA4LCAx NiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5pdF9rZXksIE5VTEws IAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9p diwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFH X0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5V TEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUgZGVzX2VkZTNfY2ZiNjRfY2lwaGVyIGRl c19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE3LDIxICsyMTcsMjEgQEAgQkxPQ0tfQ0lQSEVSX2Rl ZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIAotICNkZWZpbmUgZGVzX2VkZTNfZWNiX2NpcGhlciBk ZXNfZWRlX2VjYl9jaXBoZXIKLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlMywgREVTX0VE RV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0LAotLQkJCUVWUF9DSVBIX1JBTkRfS0VZ LCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwK LS0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJ UEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRlc19lZGUzX2lu aXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotIEJMT0NL X0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDEs Ci0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJ ICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24x X2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZM QUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVM TCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIEJMT0NLX0NJUEhFUl9kZWZf Y2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDgsCi0tCQkgICAgIEVW UF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJICAgICBFVlBfQ0lQ SEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQ X0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVMTCwgTlVMTCwgTlVM TCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIHN0YXRpYyBpbnQgZGVzX2VkZV9pbml0X2tleShF VlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ldnAvZV9udWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvZV9udWxsLmMuZmlwcwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX251bGwuYwkyMDA5LTExLTIzIDA4 OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGNvbnN0IEVW UF9DSVBIRVIgbl9jaXBoZXI9Ci0gCXsKLSAJTklEX3VuZGVmLAotIAkxLDAsMCwKLS0JMCwKLSsJ RVZQX0NJUEhfRkxBR19GSVBTLAotIAludWxsX2luaXRfa2V5LAotIAludWxsX2NpcGhlciwKLSAJ TlVMTCwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfZW5jLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2VuYy5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6 MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2 cF9lbmMuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTY4LDggKzY4 LDUzIEBACi0gCi0gY29uc3QgY2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9QRU5TU0xfVkVSU0lP Tl9QVEVYVDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2Yg dGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0r ICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwot KwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWdu ZWQgY2hhciAqa2V5LAotKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJuIDA7fQotKwotK3N0 YXRpYyBpbnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsCi0rCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQot Kwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0r LyogTkI6IG5vIGNsZWFudXAgYmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVyIGZhaWxlZCBpbml0 ICovCi0rCi0rc3RhdGljIGludCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNO MV9UWVBFICp0eXApCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsg cmV0dXJuIDA7fQotK3N0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgs IEFTTjFfVFlQRSAqdHlwKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24x Iik7IHJldHVybiAwO30KLStzdGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgs IGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJD aXBoZXIgY3RybCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYmFk X2NpcGhlciA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFkX2luaXQs Ci0rCWJhZF9kb19jaXBoZXIsCi0rCU5VTEwsCi0rCTAsCi0rCWJhZF9zZXRfYXNuMSwKLSsJYmFk X2dldF9hc24xLAotKwliYWRfY3RybCwKLSsJTlVMTAotKwl9OwotKwotKyNlbmRpZgotKwotIHZv aWQgRVZQX0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQotIAl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNl dChjdHgsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAJLyogY3R4LT5jaXBoZXI9TlVMTDsg Ki8KLSAJfQotQEAgLTEwMSw2ICsxNDYsMTQgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9D SVBIRVJfQ1RYICpjdAotIAkJCWVuYyA9IDE7Ci0gCQljdHgtPmVuY3J5cHQgPSBlbmM7Ci0gCQl9 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJ ewotKwkJRklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQlyZXR1cm4gMDsK LSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIg aXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4 dHMKLSAJICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkg dG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAtMjE5LDYgKzI3MiwyMiBAQCBza2lwX3RvX2luaXQ6Ci0g CQl9Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCS8qIEFmdGVyICdrZXknIGlzIHNl dCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCi0rCSAqIFNv IG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCi0rCSAqLwot KwlpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYgKCEoY3R4LT5jaXBoZXItPmZs YWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQotKwkJCSYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhf RkxBR19OT05fRklQU19BTExPVykpCi0rCQkJewotKwkJCUVWUGVycihFVlBfRl9FVlBfQ0lQSEVS SU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKwkJCWN0eC0+Y2lwaGVyID0gJmJh ZF9jaXBoZXI7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZihr ZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19DQUxMX0lOSVQpKSB7 Ci0gCQlpZighY3R4LT5jaXBoZXItPmluaXQoY3R4LGtleSxpdixlbmMpKSByZXR1cm4gMDsKLSAJ fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfZXJyLmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2Vyci5jLmZpcHMJMjAwOC0xMi0yOSAxNzoxMTo1NC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2Vy ci5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTU0LDYgKzE1NCw3 IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9yZWFzb25zW10KLSB7RVJSX1JFQVNP TihFVlBfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVycm9yIn0sCi0ge0VSUl9S RUFTT04oRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUykgICAsImRpZmZlcmVudCBrZXkgdHlwZXMi fSwKLSB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUykgICwiZGlmZmVyZW50 IHBhcmFtZXRlcnMifSwKLSt7RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9GT1JfRklQUykgICAg ICwiZGlzYWJsZWQgZm9yIGZpcHMifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9FTkNPREVfRVJST1Ip ICAgICAgICAgICwiZW5jb2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRVZQX1BCRV9D SVBIRVJJTklUX0VSUk9SKSwiZXZwIHBiZSBjaXBoZXJpbml0IGVycm9yIn0sCi0ge0VSUl9SRUFT T04oRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkpICAsImV4cGVjdGluZyBhbiByc2Ega2V5In0s Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmguZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDA5LTExLTIzIDA4OjMyOjMwLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnAuaAkyMDA5LTExLTIzIDA4 OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTc1LDYgKzc1LDEwIEBACi0gI2luY2x1ZGUgPG9w ZW5zc2wvYmlvLmg+Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAvKgotICNkZWZpbmUgRVZQX1JDMl9LRVlf U0laRQkJMTYKLSAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2Ci1AQCAtMTk3LDYgKzIwMSw4 IEBAIHR5cGVkZWYgaW50IGV2cF92ZXJpZnlfbWV0aG9kKGludCB0eXBlLGMKLSAKLSAjZGVmaW5l IEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRQkweDAwMDQKLSAKLSsjZGVmaW5lIEVW UF9NRF9GTEFHX0ZJUFMJMHgwNDAwIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBT IG1vZGUgKi8KLSsKLSAvKiBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyIGZsYWdzLi4uICovCi0g Ci0gI2RlZmluZSBFVlBfTURfRkxBR19ESUdBTEdJRF9NQVNLCQkweDAwMTgKLUBAIC0yNjksMTAg KzI3NSw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVhbmVkICovCi0gI2Rl ZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBmcmVlIHVwIGN0eC0+ bWRfZGF0YQotIAkJCQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyogRklQUyBhbmQg cGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25zIGFyZSBoZXJlCi0t ICogc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMgZm9yIG90aGVyIHB1 cnBvc2VzLgotLSAqLwotLQotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9X CTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJCQkJICogaW4gRklQ UyBtb2RlICovCi0gCi1AQCAtMjg0LDYgKzI4NiwxMCBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdAot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBLQ1MjMSB2MS41IG1v ZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEwCS8qIFg5LjMxIG1v ZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIwCS8qIFBTUyBtb2Rl ICovCi0rI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsJCSgoY3R4 LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2RlZmluZSBFVlBfTURf Q1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwot KyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBzYWx0IG1heCBvciBh dXRvIHJlY292ZXJlZCAqLwotIAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PX0lOSVQJCTB4 MDEwMCAvKiBEb24ndCBpbml0aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0zMzAsNiArMzM2LDE0 IEBAIHN0cnVjdCBldnBfY2lwaGVyX3N0Ci0gI2RlZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJ MHgxMDAKLSAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KLSAjZGVm aW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAKLSsvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1 c2UgaW4gRklQUyBtb2RlICovCi0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBTCQkweDQwMAot Ky8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KLSsjZGVmaW5lCQlFVlBf Q0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCi0rLyogQWxsb3cgdXNlIGRlZmF1bHQgQVNO MSBnZXQvc2V0IGl2ICovCi0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEJMHgx MDAwCi0rLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBtb2RlIG9ubHkg Ki8KLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAotIAotIC8qIGN0 cmwoKSB2YWx1ZXMgKi8KLSAKLUBAIC01MDcsNiArNTIxLDEwIEBAIGludAlFVlBfQnl0ZXNUb0tl eShjb25zdCBFVlBfQ0lQSEVSICp0eXAKLSAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0gCQlpbnQgZGF0YWwsIGludCBjb3VudCwgdW5zaWdu ZWQgY2hhciAqa2V5LHVuc2lnbmVkIGNoYXIgKml2KTsKLSAKLSt2b2lkCUVWUF9DSVBIRVJfQ1RY X3NldF9mbGFncyhFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpOwotK3ZvaWQJRVZQX0NJ UEhFUl9DVFhfY2xlYXJfZmxhZ3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKTsKLStp bnQgCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3MoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCxp bnQgZmxhZ3MpOwotKwotIGludAlFVlBfRW5jcnlwdEluaXQoRVZQX0NJUEhFUl9DVFggKmN0eCxj b25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCi0gCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGNv bnN0IHVuc2lnbmVkIGNoYXIgKml2KTsKLSBpbnQJRVZQX0VuY3J5cHRJbml0X2V4KEVWUF9DSVBI RVJfQ1RYICpjdHgsY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBFTkdJTkUgKmltcGwsCi1AQCAt MTIyNSw2ICsxMjQzLDcgQEAgdm9pZCBFUlJfbG9hZF9FVlBfc3RyaW5ncyh2b2lkKTsKLSAjZGVm aW5lIEVWUF9SX0RFQ09ERV9FUlJPUgkJCQkgMTE0Ci0gI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRf S0VZX1RZUEVTCQkJIDEwMQotICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMJCQkg MTUzCi0rI2RlZmluZSBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUwkJCQkgMTYwCi0gI2RlZmluZSBF VlBfUl9FTkNPREVfRVJST1IJCQkJIDExNQotICNkZWZpbmUgRVZQX1JfRVZQX1BCRV9DSVBIRVJJ TklUX0VSUk9SCQkJIDExOQotICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkJCQkg MTI3Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2xpYi5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9saWIuYwotLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcwkyMDA5LTA0LTEwIDEyOjMwOjI3 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBf bGliLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Nyw2ICs2Nyw4 IEBAIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8KLSAKLSAJaWYgKGMt PmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMtPmNpcGhlci0+ c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBoZXItPmZsYWdz ICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhFUl9zZXRfYXNu MV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0KTsKLUBAIC03 OCw2ICs4MCw4IEBAIGludCBFVlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQX0NJUEhFUl8KLSAK LSAJaWYgKGMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0PWMt PmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5jaXBo ZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJUEhF Ul9nZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4ocmV0 KTsKLUBAIC0xODAsNiArMTg0LDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Jsb2NrX3NpemUoY29u c3QgRVZQXwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0g CXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5k aWYKLSAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxpbixpbmwpOwotIAl9 Ci0gCi1AQCAtMjg5LDMgKzI5NiwxOCBAQCBpbnQgRVZQX01EX0NUWF90ZXN0X2ZsYWdzKGNvbnN0 IEVWUF9NRF9DCi0gCXsKLSAJcmV0dXJuIChjdHgtPmZsYWdzICYgZmxhZ3MpOwotIAl9Ci0rCi0r dm9pZCBFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZs YWdzKQotKwl7Ci0rCWN0eC0+ZmxhZ3MgfD0gZmxhZ3M7Ci0rCX0KLSsKLSt2b2lkIEVWUF9DSVBI RVJfQ1RYX2NsZWFyX2ZsYWdzKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykKLSsJewot KwljdHgtPmZsYWdzICY9IH5mbGFnczsKLSsJfQotKwotK2ludCBFVlBfQ0lQSEVSX0NUWF90ZXN0 X2ZsYWdzKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykKLSsJewotKwlyZXR1 cm4gKGN0eC0+ZmxhZ3MgJiBmbGFncyk7Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v ZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2xv Y2wuaC5maXBzCTIwMDktMTEtMjMgMDg6MzI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9sb2NsLmgJMjAwOS0xMS0yMyAwODozMjozMS4w MDAwMDAwMDAgKzAxMDAKLUBAIC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMgaW50IGNuYW1lIyNf Y2JjX2NpcGhlcihFVlBfQ0lQSEVSCi0gc3RhdGljIGludCBjbmFtZSMjX2NmYiMjY2JpdHMjI19j aXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkgXAotIHtcCi0gCXNpemVfdCBjaHVuaz1FVlBfTUFY Q0hVTks7XAotLQlpZiAoY2JpdHM9PTEpICBjaHVuaz4+PTM7XAotKwlpZiAoY2JpdHM9PTEgJiYg IShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUykpICBjaHVuaz4+PTM7XAot IAlpZiAoaW5sPGNodW5rKSBjaHVuaz1pbmw7XAotIAl3aGlsZShpbmwgJiYgaW5sPj1jaHVuaylc Ci0gCSAgICB7XAotLQkgICAgY3ByZWZpeCMjX2NmYiMjY2JpdHMjI19lbmNyeXB0KGluLCBvdXQs IChsb25nKShjYml0cz09MT9jaHVuayo4OmNodW5rKSwgJigoa3N0cnVjdCAqKWN0eC0+Y2lwaGVy X2RhdGEpLT5rc2NoZWQsIGN0eC0+aXYsICZjdHgtPm51bSwgY3R4LT5lbmNyeXB0KTtcCi0rCSAg ICBjcHJlZml4IyNfY2ZiIyNjYml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpKGNiaXRzPT0x ICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpP2NodW5rKjg6Y2h1 bmspLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5pdiwgJmN0 eC0+bnVtLCBjdHgtPmVuY3J5cHQpO1wKLSAJICAgIGlubC09Y2h1bms7XAotIAkgICAgaW4gKz1j aHVuaztcCi0gCSAgICBvdXQrPWNodW5rO1wKLUBAIC0yNTQsMTQgKzI1NCwyOSBAQCBjb25zdCBF VlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMjX2VjYih2b2lkCi0gCi0gI2RlZmluZSBFVlBfQ19EQVRB KGtzdHJ1Y3QsIGN0eCkJKChrc3RydWN0ICopKGN0eCktPmNpcGhlcl9kYXRhKQotIAotLSNkZWZp bmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVyLGNwcmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxj Yml0cyxpdl9sZW4pIFwKLSsjZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtz dHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2JpdHMsaXZfbGVuLGZsKSBcCi0gCUJMT0NLX0NJUEhFUl9m dW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkg XAotIAlCTE9DS19DSVBIRVJfZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAot IAkJCSAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2Jp dHMsIFwKLS0JCQkgICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCi0tCQkJICAgICBF VlBfQ0lQSEVSX3NldF9hc24xX2l2LCBcCi0tCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2 LCBcCi0tCQkJICAgICBOVUxMKQotKwkJCSAgICAgKGZsKXxFVlBfQ0lQSF9GTEFHX0RFRkFVTFRf QVNOMSwgXAotKwkJCSAgICAgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwpCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0 ZV9SQzJfc2V0X2tleQotKyNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQot KyNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci0rI2RlZmluZSBSQzVf MzJfc2V0X2tleQlwcml2YXRlX1JDNV8zMl9zZXRfa2V5Ci0rI2RlZmluZSBCRl9zZXRfa2V5CXBy aXZhdGVfQkZfc2V0X2tleQotKyNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBwcml2YXRlX0NhbWVs bGlhX3NldF9rZXkKLSsjZGVmaW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHByaXZhdGVfaWRlYV9z ZXRfZW5jcnlwdF9rZXkKLSsKLSsjZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVfTUQ1X0luaXQKLSsj ZGVmaW5lIE1ENF9Jbml0CXByaXZhdGVfTUQ0X0luaXQKLSsjZGVmaW5lIE1EMl9Jbml0CXByaXZh dGVfTUQyX0luaXQKLSsjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJfSW5pdAotKyNkZWZp bmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAotKwotKyNlbmRpZgotIAotIHN0cnVjdCBldnBf cGtleV9jdHhfc3QKLSAJewotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L21fZHNzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbV9kc3MuYwotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAwNi0wNC0xOSAx OTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9l dnAvbV9kc3MuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTgxLDcg KzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQ9Ci0gCU5JRF9kc2FXaXRoU0hBLAot IAlOSURfZHNhV2l0aFNIQSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BL RVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAot IAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L21fZHNzMS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fZHNzMS5jLmZp cHMJMjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ldnAvbV9kc3MxLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAg KzAxMDAKLUBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZD0KLSAJ TklEX2RzYSwKLSAJTklEX2RzYVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xFTkdUSCwKLS0JRVZQ X01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9G TEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvbV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAv bV9zaGExLmMuZmlwcwkyMDA4LTAzLTEyIDIyOjE0OjI0LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDA5LTExLTIzIDA4OjMyOjMx LjAwMDAwMDAwMCArMDEwMAotQEAgLTgyLDcgKzgyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBz aGExX21kPQotIAlOSURfc2hhMSwKLSAJTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hB X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBf TURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05B VFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAot IAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTExOSw3ICsxMjAsOCBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIHNoYTIyNF9tZD0KLSAJTklEX3NoYTIyNCwKLSAJTklEX3NoYTIyNFdpdGhS U0FFbmNyeXB0aW9uLAotIAlTSEEyMjRfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtF WV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwK LSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyMjQsCi0gCXVwZGF0ZTI1NiwKLSAJZmluYWwy NTYsCi1AQCAtMTM4LDcgKzE0MCw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2X21kPQot IAlOSURfc2hhMjU2LAotIAlOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQTI1Nl9E SUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01E X0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJ aW5pdDI1NiwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNjksNyArMTcyLDggQEAg c3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9Ci0gCU5JRF9zaGEzODQsCi0gCU5JRF9zaGEz ODRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMzg0X0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9G TEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0r CUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9B QlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0Mzg0LAotIAl1cGRhdGU1MTIsCi0g CWZpbmFsNTEyLAotQEAgLTE4OCw3ICsxOTIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUx Ml9tZD0KLSAJTklEX3NoYTUxMiwKLSAJTklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAotIAlT SEE1MTJfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF fEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0Rf U0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJ UFMsCi0gCWluaXQ1MTIsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbmFtZXMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9uYW1lcy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L25hbWVzLmMuZmlwcwkyMDA5LTA0LTEwIDEyOjMwOjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9uYW1lcy5jCTIwMDktMTEtMjMgMDg6MzI6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtNjYsNiArNjYsMTAgQEAgaW50IEVWUF9hZGRfY2lwaGVyKGNv bnN0IEVWUF9DSVBIRVIgKmMpCi0gCXsKLSAJaW50IHI7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKyNlbmRpZgotKwotIAlyPU9CSl9OQU1FX2Fk ZChPQkpfbmlkMnNuKGMtPm5pZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwoY29uc3QgY2hh ciAqKWMpOwotIAlpZiAociA9PSAwKSByZXR1cm4oMCk7Ci0gCWNoZWNrX2RlZmVyKGMtPm5pZCk7 Ci1AQCAtNzksNiArODMsMTAgQEAgaW50IEVWUF9hZGRfZGlnZXN0KGNvbnN0IEVWUF9NRCAqbWQp Ci0gCWludCByOwotIAljb25zdCBjaGFyICpuYW1lOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJbmFtZT1PQkpfbmlkMnNu KG1kLT50eXBlKTsKLSAJcj1PQkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9UWVBFX01EX01FVEgs KGNvbnN0IGNoYXIgKiltZCk7Ci0gCWlmIChyID09IDApIHJldHVybigwKTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2V2cC9wX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2V2cC9wX3NpZ24uYy5maXBzCTIwMDYtMDUtMjQgMTU6Mjk6MzAuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMDktMTEtMjMgMDg6 MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8b3Bl bnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0gI2lmZGVmIHVuZGVm Ci0gdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCi1AQCAt MTAxLDYgKzEwMiwyMiBAQCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2ln Ci0gCQkJZ290byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtj dHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3Mg JiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNh X3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwot KwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKLSsJCQl7Ci0rCQkJ aW50IHNhbHRsZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgs IFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJc2FsdGxl biA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYgKHNhbHRsZW4gPT0g RVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0xOwotKwkJCWVsc2Ug aWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJCQlzYWx0bGVuID0g LTI7Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0 bGVuKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlpZiAoRVZQX1BLRVlfc2lnbihw a2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQotIAkJCWdvdG8gZXJyOwotIAkJ KnNpZ2xlbiA9IHNsdG1wOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF92ZXJpZnku YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJMjAw OC0xMS0xMiAwNDo1ODowMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEw MAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotIAotIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAq Y3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCi0gCSAgICAgdW5zaWduZWQgaW50IHNp Z2xlbiwgRVZQX1BLRVkgKnBrZXkpCi1AQCAtODYsNiArODcsMjIgQEAgaW50IEVWUF9WZXJpZnlG aW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgotIAkJCWdvdG8gZXJyOwotIAkJaWYgKEVWUF9QS0VZ X0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAJCQlnb3Rv IGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKwkJ CWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5H KSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlmIChFVlBfUEtFWV9D VFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDApCi0r CQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChj dHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rCQkJ CXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290byBlcnI7Ci0rCQkJ fQotIAkJaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVu KTsKLSAJCWVycjoKLSAJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKLWRpZmYgLXVwIC9kZXYv bnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYwot LS0tIC9kZXYvbnVsbAkyMDA5LTExLTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCTIwMDktMTEt MjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDkzOSBAQAotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsg KgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKgotKyAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0rICBOSVNUIEFFUyBBbGdvcml0aG0gVmFsaWRhdGlvbiBTdWl0ZQotKyAgVGVz dCBQcm9ncmFtCi0rCi0rICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3Jh dGlvbgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1E IDIwODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIu aD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUg PGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0r Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZu ZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0r ewotKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7 Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRl ICJmaXBzX3V0bC5oIgotKwotKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKLSsKLSsjZGVmaW5l IFZFUkJPU0UgMAotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLwotKwotK2ludCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsCi0rCSAgICBj aGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwgCi0rCSAgICB1bnNp Z25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5zaWduZWQgY2hhciAq Y2lwaGVydGV4dCwgaW50IGxlbikKLSsgICAgewotKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBo ZXIgPSBOVUxMOwotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCi0r CXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVW UF9hZXNfMTI4X2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMTkyX2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxz ZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5 c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2VjYigpOwot KwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2VjYigp OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Vj YigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9k ZSwgIkNGQjEyOCIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNl IDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0r CQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEyOCgpOwotKwkJYnJlYWs7 Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEyOCgpOwotKwkJ YnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJP RkIiLCAzKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewotKwkJY2FzZSAxMjg6 Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAx OTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9vZmIoKTsKLSsJCWJyZWFrOwotKwotKwkJY2Fz ZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsJCWJyZWFrOwotKwkJfQot Kwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKLSsJewotKwlzd2l0 Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0gRVZQX2Flc18xMjhf Y2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNf MTkyX2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBf YWVzXzI1Nl9jZmIxKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBlbHNlIGlmKCFzdHJj YXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQlj YXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsJCWJyZWFrOwotKwot KwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4KCk7Ci0rCQlicmVhazsK LSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiOCgpOwotKwkJYnJl YWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5rbm93biBtb2RlOiAl c1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gMDsKLSsJfQotKyAgICBpZiAoIWNpcGhlcikKLSsJewot KwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwotKwlyZXR1cm4gMDsg Ci0rCX0KLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5 LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAwOwotKyAgICBpZighc3RyY2FzZWNtcChhbW9k ZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZM QUdfTEVOR1RIX0JJVFMpOwotKyAgICBpZiAoZGlyKQotKwkJRVZQX0NpcGhlcihjdHgsIGNpcGhl cnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJZWxzZQotKwkJRVZQX0NpcGhlcihjdHgsIHBsYWlu dGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStjaGFyICp0 X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFyICp0X21vZGVbNl0g PSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4In07Ci0rZW51bSBNb2Rl IHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkIxMjh9OwotK2VudW0gWENyeXB0IHtYREVD UllQVCwgWEVOQ1JZUFR9OwotKwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwot Ky8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAgICAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLwotKwotKy8qI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoKGIp JTgpKSYxKSovCi0rLyojZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+ KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIpJTgpKSkqLwotKwotKyNkZWZpbmUgZ2IoYSxi KSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYxKQotKyNkZWZpbmUgc2IoYSxiLHYpICgoYSlb KGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0oYiklOCkpKXwoISEodikgPDwgKDctKGIpJTgp KSkKLSsKLStpbnQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgaW50IGFrZXlzeiwgdW5zaWdu ZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICppVmVjLAotKwkgICBpbnQgZGlyLCB1bnNpZ25l ZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICBGSUxFICpyZnApCi0rICAgIHsKLSsgICAgaW50 IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMV1bMzJdOwotKyAgICB1bnNpZ25l ZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVdOwotKyAgICB1bnNpZ25lZCBjaGFyIHB0ZXh0 WzEwMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBjdGV4dFsxMDAxXVszMl07Ci0rICAgIHVu c2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsKLSsgICAgaW50IGksIGosIG4sIG4xLCBuMjsK LSsgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0gYWtleXN6Lzg7Ci0rICAgIEVWUF9DSVBIRVJf Q1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKGxl biA+IDMyKQotKwl7Ci0rCXByaW50ZigiXG4+Pj4+IExlbmd0aCBleGNlZWRzIDMyIGZvciAlcyAl ZCA8PDw8XG5cbiIsIAotKwkgICAgICAgYW1vZGUsIGFrZXlzeik7Ci0rCXJldHVybiAtMTsKLSsJ fQotKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUgPCA2OyArK2ltb2RlKQotKwlpZiAoc3RyY21w KGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQotKwkgICAgYnJlYWs7Ci0rICAgIGlmIChpbW9k ZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2duaXplZCBtb2RlOiAlc1xuIiwgYW1vZGUp OwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsgICAgbWVtY3B5KGtleVswXSwgYUtleSwgbmtleXN6 KTsKLSsgICAgaWYgKGlWZWMpCi0rCW1lbWNweShpdlswXSwgaVZlYywgQUVTX0JMT0NLX1NJWkUp OwotKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwltZW1jcHkocHRleHRbMF0sIHRleHQsIGxl bik7Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBsZW4pOwotKyAgICBmb3Ig KGkgPSAwOyBpIDwgMTAwOyArK2kpCi0rCXsKLSsJLyogcHJpbnRmKCJJdGVyYXRpb24gJWRcbiIs IGkpOyAqLwotKwlpZiAoaSA+IDApCi0rCSAgICB7Ci0rCSAgICBmcHJpbnRmKHJmcCwiQ09VTlQg PSAlZFxuIixpKTsKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGtleVtpXSxua2V5c3oscmZwLDAp OwotKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8qIEVDQiAqLwotKwkJT3V0cHV0VmFsdWUoIklW IixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7Ci0rCSAgICAvKiBPdXRwdXQgQ2lwaGVydGV4 dCB8IFBsYWludGV4dCAqLwotKwkgICAgT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLGRpciA/IHB0 ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKLSsJCQlpbW9kZSA9PSBDRkIxKTsKLSsJICAgIH0K LSsJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1v ZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCWlmIChqID09IDApCi0rCQkgICAgeyAvKiBz ZXQgdXAgZW5jcnlwdGlvbiAqLwotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFr ZXlzeiwga2V5W2ldLCBOVUxMLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgaWYgKGRp ciA9PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7Ci0r CQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKLSsJCSAg ICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCi0rCQkJ ewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJCW1l bWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkgICAgZWxzZQotKwkJ CXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQlt ZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJy ZWFrOwotKwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjogIAotKwkgICAgY2FzZSBD RkIxMjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZj dHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRpciwgIC8qIDAgPSBk ZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsK LSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBpdltp XSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIGl2W2ldLCBsZW4p OwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQ VCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7 Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJICAg IGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxl bik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxlbik7Ci0rCQkJfQotKwkJ ICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkI4OgotKwkJaWYgKGogPT0gMCkKLSsJ CSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0s IGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJ CQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3Rl eHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgs IHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlpZiAoZGlyID09IFhFTkNS WVBUKQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNweShwdGV4dFtqKzFd LCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBj dGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlm IChqIDwgMTYpCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKLSsJCSAg ICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZdLCBsZW4pOwotKwkJICAg IH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkIxOgotKwkJaWYoaiA9PSAwKQotKwkJICAg IHsKLSsjaWYgMAotKwkJICAgIC8qIGNvbXBlbnNhdGUgZm9yIHdyb25nIGVuZGlhbm5lc3Mgb2Yg aW5wdXQgZmlsZSAqLwotKwkJICAgIGlmKGkgPT0gMCkKLSsJCQlwdGV4dFswXVswXTw8PTc7Ci0r I2VuZGlmCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixrZXlbaV0saXZb aV0sZGlyLAotKwkJCQlwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBoZXIo JmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBfQ2lw aGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsKLSsJCSAgICB9Ci0rCQlpZihk aXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJICAgIGlmKGogPCAxMjgpCi0rCQkJc2IocHRl eHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAgICBlbHNlCi0rCQkJc2IocHRleHRbaisxXSww LGdiKGN0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICBpZihqIDwgMTI4KQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7Ci0rCQkgICAg ZWxzZQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihwdGV4dFtqLTEyOF0sMCkpOwotKwkJICAgIH0K LSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwktLWo7IC8qIHJlc2V0IHRvIGxhc3Qgb2YgcmFu Z2UgKi8KLSsJLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KLSsJT3V0cHV0VmFs dWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxlbixyZnAsCi0rCQkgICAg aW1vZGUgPT0gQ0ZCMSk7Ci0rCWZwcmludGYocmZwLCAiXG4iKTsgIC8qIGFkZCBzZXBhcmF0b3Ig Ki8KLSsKLSsJLyogQ29tcHV0ZSBuZXh0IEtFWSAqLwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQot KwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0g fHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5 c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBj dGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsK LSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkg ICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNl Ci0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTky OgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1l bWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNl IDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSwgMTYpOwotKwkJICAg IG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJ ICAgIH0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgp Ci0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0r CQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0r CQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2Ug aWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBh a2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihwdGV4dFtqLW4y XSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0r CQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbal0sIDE2KTsKLSsJ CSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBwdGV4 dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIHB0ZXh0W2pdLCAxNik7 Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwg cHRleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBwdGV4dFtqXSwg MTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJLyogQ29tcHV0ZSBuZXh0 IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0ICovCi0rCWZvciAobiA9IDA7IG4gPCBua2V5 c3o7ICsrbikKLSsJICAgIGtleVtpKzFdW25dID0ga2V5W2ldW25dIF4gY2lwaGVydGV4dFtuXTsK LSsJCi0rCS8qIENvbXB1dGUgbmV4dCBJViBhbmQgdGV4dCAqLwotKwlpZiAoZGlyID09IFhFTkNS WVBUKQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJICAgIGNhc2UgRUNC OgotKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJl YWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAgY2FzZSBDRkIxMjg6 Ci0rCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCW1lbWNw eShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAg ICBjYXNlIENGQjg6Ci0rCQkvKiBJVltpKzFdID0gY3QgKi8KLSsJCWZvciAobjEgPSAwLCBuMiA9 IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFdID0gY3RleHRbai1u Ml1bMF07Ci0rCQlwdGV4dFswXVswXSA9IGN0ZXh0W2otMTZdWzBdOwotKwkJYnJlYWs7Ci0rCSAg ICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikK LSsJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJCXB0ZXh0WzBdWzBd PWN0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UK LSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJ CW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwot KwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2UgQ0ZCMTI4OgotKwkJ bWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0rCQltZW1jcHkoY3Rl eHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2Fz ZSBDRkI4OgotKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCi0r CQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCWN0ZXh0WzBdWzBdID0gcHRl eHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJCWZvcihuMT0wLG4y PTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IocHRl eHRbai1uMl0sMCkpOwotKwkJY3RleHRbMF1bMF09cHRleHRbai0xMjhdWzBdJjB4ODA7Ci0rCQli cmVhazsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAgICAKLSsgICAgcmV0dXJuIHJldDsKLSsgICAg fQotKwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgICMgQ29uZmlnIGluZm8gZm9y IHYtb25lCi0rICAjIEFFU1ZTIE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgotKyAgIyBTdGF0ZSA6IEVu Y3J5cHQgYW5kIERlY3J5cHQKLSsgICMgS2V5IExlbmd0aCA6IDI1NgotKyAgIyBGcmkgQXVnIDMw IDA0OjA3OjIyIFBNCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLStpbnQg cHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAgewotKyAgICBjaGFy IGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7 Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKLSsgICAgY2hhciB0YnVmWzIwNDhdOwotKyAgICBpbnQg aWxlbiwgbGVuLCByZXQgPSAwOwotKyAgICBjaGFyIGFsZ29bOF0gPSAiIjsKLSsgICAgY2hhciBh bW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzhdID0gIiI7Ci0rICAgIGludCBha2V5c3og PSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKLSsgICAgaW50IGRp ciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRb MjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKLSsgICAgY2hhciAq cnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJewotKwlwcmludGYo Ik5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0cmNweShhZm4sIHJx ZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9PSBOVUxMKQotKwl7 Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIGFmbiwg c3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlmICghcnNwZmlsZSkK LSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJlcS8iKTsKLSsjaWZk ZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0cnN0cihyZm4sInJl cVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShycCwicnNwIiwzKTsKLSsJ cnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIucnNwIiwgNCk7Ci0rCXJz cGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3BmaWxlLCAidyIpKSA9 PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJ ICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7Ci0rCWFmcCA9IE5V TEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAoZmdldHMoaWJ1Ziwg c2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGluZSh0YnVmLCBpYnVm KTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyogICAgICBwcmludGYoInN0ZXA9JWQgaWJ1 Zj0lcyIsc3RlcCxpYnVmKTsgKi8KLSsJc3dpdGNoIChzdGVwKQotKwkgICAgewotKwljYXNlIDA6 ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQotKwkJeyAv KiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgoKmFsZ28gPT0gJ1wwJykgfHwKLSsJCSAgICAo KmFtb2RlID09ICdcMCcpIHx8Ci0rCQkgICAgKGFrZXlzeiA9PSAwKSkKLSsJCSAgICB7Ci0rCQkg ICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwgTW9kZSBvciBLZXlTaXplICglcy8lcy8lZClc biIsCi0rCQkJICAgYWxnbyxhbW9kZSxha2V5c3opOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAg fQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgICsr IHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCi0r CQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOwotKwkJ ZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLwot KwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYgKGFrZXlzeikKLSsJ CSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0 aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwot KwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMgIiwgNikgPT0gMCkKLSsJCQl7Ci0rCQkJc3Ry Y3B5KGFsZ28sICJBRVMiKTsKLSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0rCQkJcHAgKz0gNjsK LSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0rCQkJc3RybmNweShh dGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQgbW9kZSAqLwot KwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0rCQkJbiA9IHN0cmxl bih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJCWFtb2RlW25dID0g J1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJPU0UpCi0rCQkJ CXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBhbW9kZSk7Ci0rCQkJfQot KwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0aCA6ICIsIDEzKSA9PSAw KQotKwkJCXsKLSsJCQlha2V5c3ogPSBhdG9pKHBwKzEzKTsKLSsJCQlpZiAoVkVSQk9TRSkKLSsJ CQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBha2V5c3opOwotKwkJCX0KLSsJCSAgICB9Ci0r CQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRd ICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0cyhpYnVmLCByZnAp OwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9 PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RF Q1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwotKwkJICAgIGVyciA9 IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChkaXIgPT0gLTEp Ci0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBr ZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJCXN0ZXAgPSAyOwot KwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0r CSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZighc3RybmNhc2VjbXAo aWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJYnJlYWs7Ci0rCi0rCSAgICBpZiAoc3RybmNhc2VjbXAo aWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgS0VZXG4i KTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlsZW4gPSBoZXgyYmlu KChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAg IHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsK LSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJaWYgKHN0cmNt cChhbW9kZSwgIkVDQiIpID09IDApCi0rCQkgICAgewotKwkJICAgIG1lbXNldChpVmVjLCAwLCBz aXplb2YoaVZlYykpOwotKwkJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9y IEVDQiAqLwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICArK3N0ZXA7Ci0rCQl9Ci0rCSAgICBi cmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJm cCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKLSsJCXsK LSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgZWxz ZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKLSsJCWlmIChs ZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOwotKwkJICAg IGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJJViIsIGlW ZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsK LSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnAp OwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkK LSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJZXJyID0gMTsKLSsJ CX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKLSsJCWlm KCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0x LHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50 ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQg UExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsK LSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1 ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKLSsJCWlmIChz dHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAg IHsKLSsJCSAgICBpZihkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAg ICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4sIAotKwkJCSAgICAgIHJmcCkg PCAwKQotKwkJCUVYSVQoMSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBy ZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRp ciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lw aGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4 dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0 ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9 IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAo aWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2lu ZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFz dHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4o aWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4gPSBoZXgyYmluKGli dWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJp bnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVh azsKLSsJCSAgICB9Ci0rCi0rCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwgY2lwaGVydGV4dCwg bGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8g VGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZl YywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFL ZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwot KwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgi UExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAotKwkJCQkhc3Ry Y21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAg YnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCi0rCQl7Ci0r CQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOwotKwkJfQotKwkg ICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJCXsgLyogTUNUIGFscmVh ZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0rCQl9Ci0r CSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwotKwkgICAgfQotKwl9Ci0rICAgIGlmIChyZnAp Ci0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZwKQotKwlmY2xvc2UoYWZwKTsKLSsgICAgcmV0 dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAK LSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgotKyAg QSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1mIHh4eC5yZXEK LSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWQgeHh4 eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAotKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNw ZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0gTlVMTDsKLSsgICAgY2hhciBmblsyNTBdID0g IiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7Ci0rCWRv X3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwotKwl9Ci0rI2VuZGlmCi0rICAgIGlmIChhcmdj ID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQotKwkgICAg ewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQotKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3Zb MV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAgICBmX29wdCA9IDE7Ci0rCSAgICBkX29wdCA9 IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHByaW50ZigiSW52YWxpZCBwYXJh bWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAo YXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsK LSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoZF9vcHQpCi0rCSAgICBycWxpc3QgPSBh cmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOwotKwkg ICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKGRfb3B0KQotKwl7 IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEoZnAgPSBmb3BlbihycWxp c3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBm aWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsJd2hpbGUgKGZnZXRzKGZuLCBz aXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAgICBzdHJ0b2soZm4sICJcclxuIik7Ci0rCSAg ICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBpZiAoVkVSQk9TRSkKLSsJCXByaW50ZigiUHJvY2Vz c2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0r CQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZu KTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAg ZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQotKwkgICAgcHJpbnRm KCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkK LSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8 XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0r ICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKLS0tLSAvZGV2L251bGwJMjAwOS0xMS0y MCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAg KzAxMDAKLUBAIC0wLDAgKzEsNzAyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIE5JU1QgREVT IE1vZGVzIG9mIE9wZXJhdGlvbiBWYWxpZGF0aW9uIFN5c3RlbQotKyAgVGVzdCBQcm9ncmFtCi0r Ci0rICBCYXNlZCBvbiB0aGUgQUVTIFZhbGlkYXRpb24gU3VpdGUsIHdoaWNoIHdhczoKLSsgIERv bmF0ZWQgdG8gT3BlblNTTCBieToKLSsgIFYtT05FIENvcnBvcmF0aW9uCi0rICAyMDI1MCBDZW50 dXJ5IEJsdmQsIFN1aXRlIDMwMAotKyAgR2VybWFudG93biwgTUQgMjA4NzQKLSsgIFUuUy5BLgot KyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rCi0r I2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1 ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0r Ci0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8g RklQUyBERVMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsK LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0r I2RlZmluZSBERVNfQkxPQ0tfU0laRSA4Ci0rCi0rI2RlZmluZSBWRVJCT1NFIDAKLSsKLStpbnQg REVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5 c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCi0r CSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCi0rCSAgICB1bnNp Z25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbGVuKQotKyAgICB7Ci0rICAg IGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7Ci0rCi0rICAgIGlmIChha2V5c3ogIT0g MTkyKQotKwl7Ci0rCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7Ci0r CUVYSVQoMSk7Ci0rCX0KLSsKLSsgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAw KQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2Vj bXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfZWNiKCk7Ci0r ICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkI2NCIpID09IDApCi0rCWNpcGhlciA9 IEVWUF9kZXNfZWRlM19jZmI2NCgpOwotKyAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwg Ik9GQiIsIDMpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19vZmIoKTsKLSsgICAgZWxz ZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNf Y2ZiOCgpOwotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCWNpcGhl ciA9IEVWUF9kZXNfZWRlM19jZmIxKCk7Ci0rICAgIGVsc2UKLSsJewotKwlwcmludGYoIlVua25v d24gbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAgICBpZiAoRVZQ X0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkK LSsJcmV0dXJuIDA7Ci0rICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCi0rCU1fRVZQ X0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7Ci0r ICAgIEVWUF9DaXBoZXIoY3R4LCBvdXQsIGluLCBsZW4pOwotKwotKyAgICByZXR1cm4gMTsKLSsg ICAgfQotKwotK3ZvaWQgRGVidWdWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwg aW50IGxlbikKLSsgICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rICAgIGludCBvbGVuOwot KyAgICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7Ci0rICAgIHByaW50ZigiJXMgPSAl LipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyAgICB9Ci0rCi0rdm9pZCBzaGlmdGluKHVuc2ln bmVkIGNoYXIgKmRzdCx1bnNpZ25lZCBjaGFyICpzcmMsaW50IG5iaXRzKQotKyAgICB7Ci0rICAg IGludCBuOwotKwotKyAgICAvKiBtb3ZlIHRoZSBieXRlcy4uLiAqLwotKyAgICBtZW1tb3ZlKGRz dCxkc3QrbmJpdHMvOCwzKjgtbmJpdHMvOCk7Ci0rICAgIC8qIGFwcGVuZCBuZXcgZGF0YSAqLwot KyAgICBtZW1jcHkoZHN0KzMqOC1uYml0cy84LHNyYywobmJpdHMrNykvOCk7Ci0rICAgIC8qIGxl ZnQgc2hpZnQgdGhlIGJpdHMgKi8KLSsgICAgaWYobmJpdHMlOCkKLSsJZm9yKG49MCA7IG4gPCAz KjggOyArK24pCi0rCSAgICBkc3Rbbl09KGRzdFtuXSA8PCAobmJpdHMlOCkpfChkc3RbbisxXSA+ PiAoOC1uYml0cyU4KSk7Ci0rICAgIH0JCi0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIs ICJDSVBIRVJURVhUIn07Ci0rY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJD RkIxIiwiQ0ZCOCIsIkNGQjY0In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBD RkI4LCBDRkI2NH07Ci0raW50IFNpemVzWzZdPXs2NCw2NCw2NCwxLDgsNjR9OwotKwotK3ZvaWQg ZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgIGludCBha2V5c3osIGludCBudW1rZXlzLCB1bnNp Z25lZCBjaGFyICpha2V5LHVuc2lnbmVkIGNoYXIgKml2ZWMsCi0rCSAgICBpbnQgZGlyLCB1bnNp Z25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICAgRklMRSAqcmZwKQotKyAgICB7Ci0rICAg IGludCBpLGltb2RlOwotKyAgICB1bnNpZ25lZCBjaGFyIG5rWzQqOF07IC8qIGxvbmdlc3Qga2V5 KzggKi8KLSsgICAgdW5zaWduZWQgY2hhciB0ZXh0MFs4XTsKLSsKLSsgICAgZm9yIChpbW9kZT0w IDsgaW1vZGUgPCA2IDsgKytpbW9kZSkKLSsJaWYoIXN0cmNtcChhbW9kZSx0X21vZGVbaW1vZGVd KSkKLSsJICAgIGJyZWFrOwotKyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAKLSsJcHJpbnRmKCJV bnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwotKyAg ICBmb3IoaT0wIDsgaSA8IDQwMCA7ICsraSkKLSsJewotKwlpbnQgajsKLSsJaW50IG47Ci0rCWlu dCBrcD1ha2V5c3ovNjQ7Ci0rCXVuc2lnbmVkIGNoYXIgb2xkX2l2WzhdOwotKwlFVlBfQ0lQSEVS X0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWZwcmludGYocmZw LCJcbkNPVU5UID0gJWRcbiIsaSk7Ci0rCWlmKGtwID09IDEpCi0rCSAgICBPdXRwdXRWYWx1ZSgi S0VZIixha2V5LDgscmZwLDApOwotKwllbHNlCi0rCSAgICBmb3Iobj0wIDsgbiA8IGtwIDsgKytu KQotKwkJewotKwkJZnByaW50ZihyZnAsIktFWSVkIixuKzEpOwotKwkJT3V0cHV0VmFsdWUoIiIs YWtleStuKjgsOCxyZnAsMCk7Ci0rCQl9Ci0rCi0rCWlmKGltb2RlICE9IEVDQikKLSsJICAgIE91 dHB1dFZhbHVlKCJJViIsaXZlYyw4LHJmcCwwKTsKLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXjFd LHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKLSsjaWYgMAotKwkvKiBjb21wZW5zYXRlIGZv ciBlbmRpYW5uZXNzICovCi0rCWlmKGltb2RlID09IENGQjEpCi0rCSAgICB0ZXh0WzBdPDw9NzsK LSsjZW5kaWYKLSsJbWVtY3B5KHRleHQwLHRleHQsOCk7Ci0rCi0rCWZvcihqPTAgOyBqIDwgMTAw MDAgOyArK2opCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG9sZF90ZXh0WzhdOwotKwot KwkgICAgbWVtY3B5KG9sZF90ZXh0LHRleHQsOCk7Ci0rCSAgICBpZihqID09IDApCi0rCQl7Ci0r CQltZW1jcHkob2xkX2l2LGl2ZWMsOCk7Ci0rCQlERVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGFr ZXksaXZlYyxkaXIsdGV4dCx0ZXh0LGxlbik7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlt ZW1jcHkob2xkX2l2LGN0eC5pdiw4KTsKLSsJCUVWUF9DaXBoZXIoJmN0eCx0ZXh0LHRleHQsbGVu KTsKLSsJCX0KLSsJICAgIGlmKGogPT0gOTk5OSkKLSsJCXsKLSsJCU91dHB1dFZhbHVlKHRfdGFn W2Rpcl0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOwotKwkJLyoJCW1lbWNweShpdmVjLHRl eHQsOCk7ICovCi0rCQl9Ci0rCSAgICAvKgkgICAgRGVidWdWYWx1ZSgiaXYiLGN0eC5pdiw4KTsg Ki8KLSsJICAgIC8qIGFjY3VtdWxhdGUgbWF0ZXJpYWwgZm9yIHRoZSBuZXh0IGtleSAqLwotKwkg ICAgc2hpZnRpbihuayx0ZXh0LFNpemVzW2ltb2RlXSk7Ci0rCSAgICAvKgkgICAgRGVidWdWYWx1 ZSgibmsiLG5rLDI0KTsqLwotKwkgICAgaWYoKGRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9k ZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0Ci0rCQkJfHwgaW1vZGUgPT0gQ0JDKSkgfHwgaW1v ZGUgPT0gT0ZCKQotKwkJbWVtY3B5KHRleHQsb2xkX2l2LDgpOwotKwotKwkgICAgaWYoIWRpciAm JiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0KSkKLSsJ CXsKLSsJCS8qIHRoZSB0ZXN0IHNwZWNpZmllcyB1c2luZyB0aGUgb3V0cHV0IG9mIHRoZSByYXcg REVTIG9wZXJhdGlvbgotKwkJICAgd2hpY2ggd2UgZG9uJ3QgaGF2ZSwgc28gcmVjb25zdHJ1Y3Qg aXQuLi4gKi8KLSsJCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJCSAgICB0ZXh0W25dXj1vbGRf dGV4dFtuXTsKLSsJCX0KLSsJICAgIH0KLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAg YWtleVtuXV49bmtbMTYrbl07Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJICAgIGFrZXlb OCtuXV49bmtbOCtuXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkgICAgYWtleVsxNitu XV49bmtbbl07Ci0rCWlmKG51bWtleXMgPCAzKQotKwkgICAgbWVtY3B5KCZha2V5WzIqOF0sYWtl eSw4KTsKLSsJaWYobnVta2V5cyA8IDIpCi0rCSAgICBtZW1jcHkoJmFrZXlbOF0sYWtleSw4KTsK LSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopYWtleSk7Ci0rCURFU19zZXRfb2Rk X3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzgpKTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChE RVNfY2Jsb2NrICopKGFrZXkrMTYpKTsKLSsJbWVtY3B5KGl2ZWMsY3R4Lml2LDgpOwotKwotKwkv KiBwb2ludGxlc3MgZXhlcmNpc2UgLSB0aGUgZmluYWwgdGV4dCBkb2Vzbid0IGRlcGVuZCBvbiB0 aGUKLSsJICAgaW5pdGlhbCB0ZXh0IGluIE9GQiBtb2RlLCBzbyB3aG8gY2FyZXMgd2hhdCBpdCBp cz8gKFdobwotKwkgICBkZXNpZ25lZCB0aGVzZSB0ZXN0cz8pICovCi0rCWlmKGltb2RlID09IE9G QikKLSsJICAgIGZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJCXRleHRbbl09dGV4dDBbbl1eb2xk X2l2W25dOwotKwl9Ci0rICAgIH0KLSsgICAgCi0raW50IHByb2NfZmlsZShjaGFyICpycWZpbGUs IGNoYXIgKnJzcGZpbGUpCi0rICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07Ci0r ICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFyIGlidWZbMjA0OF0s IHRidWZbMjA0OF07Ci0rICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7Ci0rICAgIGNoYXIgYW1v ZGVbOF0gPSAiIjsKLSsgICAgY2hhciBhdGVzdFsxMDBdID0gIiI7Ci0rICAgIGludCBha2V5c3o9 MDsKLSsgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07Ci0rICAgIGludCBkaXIg PSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIw NDhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07Ci0rICAgIGNoYXIgKnJw OwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIGludCBudW1rZXlzPTE7Ci0rICAgIEVW UF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmls ZSkpCi0rCXsKLSsJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVybiAtMTsKLSsJfQot KyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwg InIiKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xu IiwgCi0rCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVybiAtMTsKLSsJfQot KyAgICBpZiAoIXJzcGZpbGUpCi0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwotKwlycD1zdHJzdHIo cmZuLCJyZXEvIik7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlmICghcnApCi0rCSAg ICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQocnApOwotKwltZW1j cHkocnAsInJzcCIsMyk7Ci0rCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKLSsJbWVtY3B5KHJw LCAiLnJzcCIsIDQpOwotKwlyc3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlmICgocmZwID0gZm9w ZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZp bGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCWZjbG9z ZShhZnApOwotKwlhZnAgPSBOVUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsgICAgd2hpbGUgKCFl cnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKLSsJewotKwl0 aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7Ci0rCS8qCXByaW50 Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyovCi0rCWlmKHN0ZXAgPT0gMyAmJiAhc3Ry Y21wKGFtb2RlLCJFQ0IiKSkKLSsJICAgIHsKLSsJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2Yo aVZlYykpOwotKwkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICov Ci0rCSAgICB9Ci0rCXN3aXRjaCAoc3RlcCkKLSsJICAgIHsKLSsJY2FzZSAwOiAgLyogcmVhZCBw cmVhbWJsZSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKLSsJCXsgLyogZW5kIG9mIHBy ZWFtYmxlICovCi0rCQlpZiAoKmFtb2RlID09ICdcMCcpCi0rCQkgICAgewotKwkJICAgIHByaW50 ZigiTWlzc2luZyBNb2RlXG4iKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWVsc2UK LSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICArKyBzdGVwOwotKwkJ ICAgIH0KLSsJCX0KLSsJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQotKwkJewotKwkJcHJp bnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJCWVyciA9IDE7Ci0r CQl9Ci0rCSAgICBlbHNlCi0rCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8KLSsJCWNoYXIgKnhw LCAqcHAgPSBpYnVmKzI7Ci0rCQlpbnQgbjsKLSsJCWlmKCphbW9kZSkKLSsJCSAgICB7IC8qIGlu c2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDAp OwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQot KwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmKCFz dHJuY21wKHBwLCJJTlZFUlNFICIsOCkgfHwgIXN0cm5jbXAocHAsIkRFUyAiLDQpCi0rCQkgICAg ICAgfHwgIXN0cm5jbXAocHAsIlRERVMgIiw1KQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJQ RVJNVVRBVElPTiAiLDEyKQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJTVUJTVElUVVRJT04g IiwxMykKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVkFSSUFCTEUgIiw5KSkKLSsJCQl7Ci0r CQkJLyogZ2V0IHRlc3QgdHlwZSAqLwotKwkJCWlmKCFzdHJuY21wKHBwLCJERVMgIiw0KSkKLSsJ CQkgICAgcHArPTQ7Ci0rCQkJZWxzZSBpZighc3RybmNtcChwcCwiVERFUyAiLDUpKQotKwkJCSAg ICBwcCs9NTsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0rCQkJ c3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBnZXQg bW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0rCQkJ biA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJCWFt b2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZFUkJP U0UpCi0rCQkJCXByaW50ZigiVGVzdD0lcywgTW9kZT0lc1xuIixhdGVzdCxhbW9kZSk7Ci0rCQkJ fQotKwkJICAgIH0KLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDE6ICAvKiBbRU5DUllQ VF0gfCBbREVDUllQVF0gKi8KLSsJICAgIGlmKGlidWZbMF0gPT0gJ1xuJykKLSsJCWJyZWFrOwot KwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQotKwkJewotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJ CSsrc3RlcDsKLSsJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkK LSsJCSAgICBkaXIgPSAxOwotKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBU XSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMDsKLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAg cHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKLSsJCSAgICBlcnIgPSAxOwot KwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQotKwkJ ewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29y ZFxuIik7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgCi0rCQlzdGVwID0gMjsKLSsKLSsJ Y2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCi0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJewot KwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAg fQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKLSsJCXsKLSsJICAg ICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAgICAgICAgIH0KLSsJ ICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVD0iLDYpKQotKwkJewotKwkgICAgICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAgfQotKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIk51bUtleXMgPSAiLDEwKSkKLSsJCXsKLSsJCW51bWtleXM9YXRv aShpYnVmKzEwKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgIAotKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkgPSAiLDYpKQotKwkJewotKwkJYWtl eXN6PTY0OwotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKLSsJCWlmIChs ZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAg ICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBh S2V5LCBsZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAo aWJ1ZiwiS0VZcyA9ICIsNykpCi0rCQl7Ci0rCQlha2V5c3o9NjQqMzsKLSsJCWxlbj1oZXgyYmlu KGlidWYrNyxhS2V5KTsKLSsJCWlmKGxlbiAhPSA4KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYo IkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9 Ci0rCQltZW1jcHkoYUtleSs4LGFLZXksOCk7Ci0rCQltZW1jcHkoYUtleSsxNixhS2V5LDgpOwot KwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZSgiS0VZcyIsYUtleSxsZW4pOwotKwkJKytz dGVwOwotKwkJfQotKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZIiwzKSkKLSsJ CXsKLSsJCWludCBuPWlidWZbM10tJzEnOwotKwotKwkJYWtleXN6PTY0KjM7Ci0rCQlsZW49aGV4 MmJpbihpYnVmKzcsYUtleStuKjgpOwotKwkJaWYobGVuICE9IDgpCi0rCQkgICAgewotKwkJICAg IHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJICAgIGJyZWFrOwot KwkJICAgIH0KLSsJCWlidWZbNF09J1wwJzsKLSsJCVByaW50VmFsdWUoaWJ1ZixhS2V5LGxlbik7 Ci0rCQlpZihuID09IDIpCi0rCQkgICAgKytzdGVwOwotKwkJfQotKwkgICAgZWxzZQotKwkJewot KwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkgICAgYnJl YWs7Ci0rCi0rCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCi0rCSAgICBmcHV0cyhpYnVmLCByZnAp OwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9IDApCi0rCQl7Ci0r CQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UK LSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7Ci0rCQlpZiAobGVu IDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4iKTsKLSsJCSAgICBl cnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVj LCBsZW4pOwotKwkJc3RlcCA9IChkaXIpPyA0OiA1OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0r CWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK LSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCi0r CQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9 Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpbnQgbm4gPSBzdHJsZW4oaWJ1ZisxMik7Ci0rCQlpZigh c3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxw bGFpbnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4 dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBM QUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0r CQkgICAgfQotKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKLSsJCSAgICB7Ci0rCQkg ICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUo IlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7Ci0rCQlpZiAoc3Ry Y21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAg IHsKLSsJCSAgICBkb19tY3QoYW1vZGUsYWtleXN6LG51bWtleXMsYUtleSxpVmVjLGRpcixwbGFp bnRleHQsbGVuLHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBhc3Nl cnQoZGlyID09IDEpOwotKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwg YUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICov Ci0rCQkJCSAgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZhbHVl KCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNG QjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJ Y2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsK LSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQot KwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJfQotKwkg ICAgZWxzZQotKwkJewotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1i aW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOwotKwkJZWxzZQot KwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKLSsJCWlmIChsZW4gPCAw KQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7Ci0rCQkg ICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCQotKwkJUHJpbnRWYWx1ZSgi Q0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9u dGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19t Y3QoYW1vZGUsIGFrZXlzeiwgbnVta2V5cywgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBo ZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBh c3NlcnQoZGlyID09IDApOwotKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlz eiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0 ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJICAgIE91dHB1dFZh bHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxlbixyZnAsCi0rCQkJ CSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0r CSAgICBicmVhazsKLSsKLSsJY2FzZSA2OgotKwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKLSsJ CXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRvclxuIik7Ci0rCQl9 Ci0rCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQotKwkJeyAvKiBNQ1Qg YWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLwotKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJ CX0KLSsJICAgIHN0ZXAgPSAxOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYg KHJmcCkKLSsJZmNsb3NlKHJmcCk7Ci0rICAgIGlmIChhZnApCi0rCWZjbG9zZShhZnApOwotKyAg ICByZXR1cm4gZXJyOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgUHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxl IG9yIAotKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUu Ci0rICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3QgLWYgeHh4 LnJlcQotKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgotKyAgICBhZXNfdGVzdCAt ZCB4eHh4eC54eHgKLSsgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Ci0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKLSsgICAgewotKyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIs ICpyc3BmaWxlID0gTlVMTDsKLSsgICAgRklMRSAqZnAgPSBOVUxMOwotKyAgICBjaGFyIGZuWzI1 MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKLSsgICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOwot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCXsK LSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsjZW5kaWYKLSsgICAgaWYg KGFyZ2MgPiAxKQotKwl7Ci0rCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCi0r CSAgICB7Ci0rCSAgICBkX29wdCA9IDE7Ci0rCSAgICB9Ci0rCWVsc2UgaWYgKHN0cmNhc2VjbXAo YXJndlsxXSwgIi1mIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGZfb3B0ID0gMTsKLSsJICAgIGRf b3B0ID0gMDsKLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgcHJpbnRmKCJJbnZhbGlk IHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0r CWlmIChhcmdjIDwgMykKLSsJICAgIHsKLSsJICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJc biIpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChkX29wdCkKLSsJICAgIHJxbGlz dCA9IGFyZ3ZbMl07Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN0cmNweShmbiwgYXJndlsyXSk7 Ci0rCSAgICByc3BmaWxlID0gYXJndlszXTsKLSsJICAgIH0KLSsJfQotKyAgICBpZiAoZF9vcHQp Ci0rCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLwotKwlpZiAoIShmcCA9IGZvcGVu KHJxbGlzdCwgInIiKSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBs aXN0IGZpbGVcbiIpOwotKwkgICAgcmV0dXJuIC0xOwotKwkgICAgfQotKwl3aGlsZSAoZmdldHMo Zm4sIHNpemVvZihmbiksIGZwKSkKLSsJICAgIHsKLSsJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsK LSsJICAgIHN0cmNweShyZm4sIGZuKTsKLSsJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIs IHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmlu dGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQo MSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5n bGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQotKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAl c1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAg IHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAg ICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5k aWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2Nh dnMvZmlwc19kc3N2cy5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAy MjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf ZHNzdnMuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw1 MzcgQEAKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZm5kZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBwb3J0XG4iKTsKLSsg ICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNs dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5jbHVkZSAiZmlwc191 dGwuaCIKLSsKLStzdGF0aWMgdm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikK LSsJewotKwlpbnQgbGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0rCWxlbiA9IEJOX251 bV9ieXRlcyhibik7Ci0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICghdG1wKQot KwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0r CQlyZXR1cm47Ci0rCQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJcHJpbnRmKCIlcyA9ICIs IG5hbWUpOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlwcmludGYoIiUwMlgiLCB0 bXBbaV0pOwotKwlmcHV0cygiXG4iLCBzdGRvdXQpOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsKLSsJ cmV0dXJuOwotKwl9Ci0rCi0rdm9pZCBwcmltZXMoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEw MjQwXTsKLSsgICAgY2hhciBsYnVmWzEwMjQwXTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVl OwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJ ewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFs dWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJQcmlt ZSIpKQotKwkgICAgewotKwkgICAgQklHTlVNICpwcDsKLSsKLSsJICAgIHBwPUJOX25ldygpOwot KwkgICAgZG9faGV4MmJuKCZwcCx2YWx1ZSk7Ci0rCSAgICBwcmludGYoInJlc3VsdD0gJWNcbiIs Ci0rCQkgICBCTl9pc19wcmltZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1AnIDogJ0YnKTsKLSsJ ICAgIH0JICAgIAotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZygpCi0rICAgIHsKLSsgICAgY2hh ciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9m IGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2 YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGlu dWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgbm1vZD1hdG9p KHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAgIHsKLSsJICAg IGludCBuPWF0b2kodmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1v ZCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBd OwotKwkJRFNBICpkc2E7Ci0rCQlpbnQgY291bnRlcjsKLSsJCXVuc2lnbmVkIGxvbmcgaDsKLSsJ CWRzYSA9IEZJUFNfZHNhX25ldygpOwotKwotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChkc2EsIG5tb2Qsc2VlZCwwLCZjb3VudGVyLCZoLE5VTEwpKQotKwkJCXsKLSsJCQlkb19w cmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCXBibigiUCIsZHNhLT5wKTsK LSsJCXBibigiUSIsZHNhLT5xKTsKLSsJCXBibigiRyIsZHNhLT5nKTsKLSsJCXB2KCJTZWVkIixz ZWVkLDIwKTsKLSsJCXByaW50ZigiYyA9ICVkXG4iLGNvdW50ZXIpOwotKwkJcHJpbnRmKCJIID0g JWx4XG4iLGgpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWVsc2UK LSsJICAgIGZwdXRzKGJ1ZixzdGRvdXQpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZ3Zlcigp Ci0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsg ICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5V TEwsICpnID0gTlVMTDsKLSsgICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOwotKyAgICB1bnNpZ25l ZCBsb25nIGgsIGgyOwotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBpbnQgbm1vZD0wOwotKyAg ICB1bnNpZ25lZCBjaGFyIHNlZWRbMTAyNF07Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXpl b2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwg JnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250 aW51ZTsKLSsJCX0KLSsJZnB1dHMoYnVmLCBzdGRvdXQpOwotKwlpZighc3RyY21wKGtleXdvcmQs Ilttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3 b3JkLCJTZWVkIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgc2xlbiA9IGhleDJiaW4odmFsdWUsIHNl ZWQpOwotKwkgICAgaWYgKHNsZW4gIT0gMjApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlNl ZWQgcGFyc2UgbGVuZ3RoIGVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgfQot KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiYyIpKQotKwkgICAgY291bnRlciA9YXRvaShidWYr NCk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJIIikpCi0rCSAgICB7Ci0rCSAgICBoID0g YXRvaSh2YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcpCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkgICAgZHNh ID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KGRzYSwgbm1vZCxzZWVkLDIwICwmY291bnRlcjIsJmgyLE5VTEwpKQotKwkJCXsKLSsJCQlkb19w cmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsgICAgICAgICAgICBpZiAoQk5f Y21wKGRzYS0+cCwgcCkgfHwgQk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21wKGRzYS0+ZywgZykK LSsJCXx8IChjb3VudGVyICE9IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCi0rCSAgICAJcHJpbnRm KCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgIGVsc2UKLSsJICAgIAlwcmludGYoIlJlc3VsdCA9IFBc biIpOwotKwkgICAgQk5fZnJlZShwKTsKLSsJICAgIEJOX2ZyZWUocSk7Ci0rCSAgICBCTl9mcmVl KGcpOwotKwkgICAgcCA9IE5VTEw7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAgIGcgPSBOVUxMOwot KwkgICAgRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gTlVMTDsKLSsJICAgIH0KLSsJ fQotKyAgICB9Ci0rCi0rLyogS2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGluZS4gTkI6IHRoaXMg aXNuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgRklQUzE0MC0yCi0rICogYWxnb3JpdGhtIHRlc3Rz LiBJdCBpcyBhbiBhZGRpdGlvbmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRo ZQotKyAqIG91dHB1dCBvZiB0aGUgS2V5UGFpciB0ZXN0LgotKyAqLwotKwotK3N0YXRpYyBpbnQg ZHNzX3BhcmFtY2hlY2soaW50IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpxLCBCSUdOVU0gKmcs Ci0rCQkJCQkJCUJOX0NUWCAqY3R4KQotKyAgICB7Ci0rICAgIEJJR05VTSAqcmVtID0gTlVMTDsK LSsgICAgaWYgKEJOX251bV9iaXRzKHApICE9IG5tb2QpCi0rCXJldHVybiAwOwotKyAgICBpZiAo Qk5fbnVtX2JpdHMocSkgIT0gMTYwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1l X2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsg ICAgaWYgKEJOX2lzX3ByaW1lX2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAx KQotKwlyZXR1cm4gMDsKLSsgICAgcmVtID0gQk5fbmV3KCk7Ci0rICAgIGlmICghQk5fbW9kKHJl bSwgcCwgcSwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkKLSsgICAgCXx8IChCTl9jbXAoZywgQk5f dmFsdWVfb25lKCkpIDw9IDApCi0rCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8 fCAhQk5faXNfb25lKHJlbSkpCi0rCXsKLSsJQk5fZnJlZShyZW0pOwotKwlyZXR1cm4gMDsKLSsJ fQotKyAgICAvKiBUb2RvOiBjaGVjayBnICovCi0rICAgIEJOX2ZyZWUocmVtKTsKLSsgICAgcmV0 dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIGtleXZlcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZb MTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVl OwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKlggPSBOVUxM LCAqWSA9IE5VTEw7Ci0rICAgIEJJR05VTSAqWTI7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsK LSsgICAgaW50IG5tb2Q9MCwgcGFyYW1jaGVjayA9IDA7Ci0rCi0rICAgIGN0eCA9IEJOX0NUWF9u ZXcoKTsKLSsgICAgWTIgPSBCTl9uZXcoKTsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVv ZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAm dmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRp bnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIHsKLSsJICAg IGlmIChwKQotKwkJQk5fZnJlZShwKTsKLSsJICAgIHAgPSBOVUxMOwotKwkgICAgaWYgKHEpCi0r CQlCTl9mcmVlKHEpOwotKwkgICAgcSA9IE5VTEw7Ci0rCSAgICBpZiAoZykKLSsJCUJOX2ZyZWUo Zyk7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIHBhcmFtY2hlY2sgPSAwOwotKwkgICAgbm1vZD1h dG9pKHZhbHVlKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJ ICAgIHA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKLSsJ ICAgIHE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKLSsJ ICAgIGc9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlgiKSkKLSsJ ICAgIFg9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKLSsJ ICAgIHsKLSsJICAgIFk9aGV4MmJuKHZhbHVlKTsKLSsJICAgIGlmICghcCB8fCAhcSB8fCAhZyB8 fCAhWCB8fCAhWSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOwot KwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLHApOwotKwkgICAgcGJuKCJRIixxKTsK LSsJICAgIHBibigiRyIsZyk7Ci0rCSAgICBwYm4oIlgiLFgpOwotKwkgICAgcGJuKCJZIixZKTsK LSsJICAgIGlmICghcGFyYW1jaGVjaykKLSsJCXsKLSsJCWlmIChkc3NfcGFyYW1jaGVjayhubW9k LCBwLCBxLCBnLCBjdHgpKQotKwkJCXBhcmFtY2hlY2sgPSAxOwotKwkJZWxzZQotKwkJCXBhcmFt Y2hlY2sgPSAtMTsKLSsJCX0KLSsJICAgIGlmIChwYXJhbWNoZWNrICE9IDEpCi0rCSAgIAlwcmlu dGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgZWxzZQotKwkJewotKwkJaWYgKCFCTl9tb2RfZXhw KFkyLCBnLCBYLCBwLCBjdHgpIHx8IEJOX2NtcChZMiwgWSkpCi0rCSAgICAJCXByaW50ZigiUmVz dWx0ID0gRlxuIik7Ci0rCSAgICAgICAgZWxzZQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IFBc biIpOwotKwkJfQotKwkgICAgQk5fZnJlZShYKTsKLSsJICAgIEJOX2ZyZWUoWSk7Ci0rCSAgICBY ID0gTlVMTDsKLSsJICAgIFkgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rCWlmIChwKQotKwkgICAg Qk5fZnJlZShwKTsKLSsJaWYgKHEpCi0rCSAgICBCTl9mcmVlKHEpOwotKwlpZiAoZykKLSsJICAg IEJOX2ZyZWUoZyk7Ci0rCWlmIChZMikKLSsJICAgIEJOX2ZyZWUoWTIpOwotKyAgICB9Ci0rCi0r dm9pZCBrZXlwYWlyKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBs YnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGludCBubW9kPTA7 Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7 Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewot KwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChr ZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiTiIpKQotKwkgICAgewotKwkgICAgRFNBICpkc2E7Ci0rCSAgICBpbnQgbj1h dG9pKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkg ICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJp bnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwot KwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0 YygnXG4nLHN0ZG91dCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQlpZiAoIURTQV9n ZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhp dCgxKTsKLSsJCQl9Ci0rCi0rCQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOwotKwkJcGJuKCJZIixk c2EtPnB1Yl9rZXkpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0K LSsgICAgfQotKwotK3ZvaWQgc2lnZ2VuKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsK LSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAg IGludCBubW9kPTA7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1 ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5 d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0r CQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7 Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIs bm1vZCk7Ci0rCSAgICBpZiAoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNh ID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4 KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJZG9fcHJpbnRfZXJy b3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAg cGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4n LHN0ZG91dCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJ ICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOwotKwkgICAgdW5zaWduZWQgY2hh ciBzYnVmWzYwXTsKLSsJICAgIHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAgaW50IG47Ci0rCSAg ICBFVlBfUEtFWSBwazsKLSsJICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAgIERTQV9TSUcgKnNp ZzsKLSsJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCSAgICBuPWhleDJiaW4odmFs dWUsbXNnKTsKLSsJICAgIHB2KCJNc2ciLG1zZyxuKTsKLSsKLSsJICAgIGlmICghRFNBX2dlbmVy YXRlX2tleShkc2EpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwot KwkJfQotKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBrLnBrZXkuZHNhID0g ZHNhOwotKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwotKwkgICAgRVZQX1NpZ25Jbml0 X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4 LCBtc2csIG4pOwotKwkgICAgRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7 Ci0rCi0rCSAgICBzaWcgPSBEU0FfU0lHX25ldygpOwotKwkgICAgRklQU19kc2Ffc2lnX2RlY29k ZShzaWcsIHNidWYsIHNsZW4pOwotKwotKwkgICAgcGJuKCJSIixzaWctPnIpOwotKwkgICAgcGJu KCJTIixzaWctPnMpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICBEU0FfU0lHX2Zy ZWUoc2lnKTsKLSsJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCSAgICB9Ci0rCX0K LSsJaWYgKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsgICAgfQotKwotK3ZvaWQgc2ln dmVyKCkKLSsgICAgewotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsK LSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKLSsg ICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wLCBuPTA7Ci0rICAgIERT QV9TSUcgc2csICpzaWcgPSAmc2c7Ci0rCi0rICAgIHNpZy0+ciA9IE5VTEw7Ci0rICAgIHNpZy0+ cyA9IE5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBO VUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYo IXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUp OwotKwkgICAgaWYoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhPUZJUFNf ZHNhX25ldygpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkg ICAgZHNhLT5wPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikp Ci0rCSAgICBkc2EtPnE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IkciKSkKLSsJICAgIHsKLSsJICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOwotKwotKwkgICAgcHJp bnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBwYm4oIlAiLGRzYS0+cCk7Ci0rCSAg ICBwYm4oIlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0rCSAgICBwdXRjKCdc bicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQot KwkgICAgewotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNnIixtc2cs bik7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICBkc2Et PnB1Yl9rZXk9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlIiKSkK LSsJICAgIHNpZy0+cj1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi UyIpKQotKwkgICAgewotKwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAgRVZQX1BLRVkgcGs7 Ci0rCSAgICB1bnNpZ25lZCBjaGFyIHNpZ2J1Zls2MF07Ci0rCSAgICB1bnNpZ25lZCBpbnQgc2xl bjsKLSsJICAgIGludCByOwotKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsJICAgIHBr LnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHNp Zy0+cz1oZXgyYm4odmFsdWUpOwotKwkKLSsJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJ ICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsKLSsJICAgIHNs ZW4gPSBGSVBTX2RzYV9zaWdfZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKLSsJICAgIEVWUF9WZXJpZnlJ bml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9WZXJpZnlVcGRhdGUo Jm1jdHgsIG1zZywgbik7Ci0rCSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWdidWYs IHNsZW4sICZwayk7Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwkKLSsJICAg IHByaW50ZigiUmVzdWx0ID0gJWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7Ci0rCSAgICBwdXRj KCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFy Z2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0rCWZwcmlu dGYoc3RkZXJyLCIlcyBbcHJpbWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4i LGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQot Kwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFzdHJj bXAoYXJndlsxXSwicHJpbWUiKSkKLSsJcHJpbWVzKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCJwcWciKSkKLSsJcHFnKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJw cWd2ZXIiKSkKLSsJcHFndmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXlw YWlyIikpCi0rCWtleXBhaXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXZl ciIpKQotKwlrZXl2ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIp KQotKwlzaWdnZW4oKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQot KwlzaWd2ZXIoKTsKLSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93 IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCi0tLS0gL2Rldi9udWxsCTIwMDkt MTEtMjAgMDg6MzA6NDMuNTM0MDAyMjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTAsMCArMSwyMzAgQEAKLSsvKgotKyAqIENydWRlIHRlc3QgZHJpdmVyIGZv ciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCi0rICogZ2VuZXJh dGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1Y3QuCi0rICoKLSsgKiBOb3RlIHRoZSBpbnB1dCBm aWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1hdAotKyAqIGFz IGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJh dG9yCi0rICogVmFsaWRhdGlvbiBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KLSsgKgot KyAqLwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVO U1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOwotKyAg ICByZXR1cm4gMDsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0r I2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwotKyNpbmNsdWRlICJm aXBzX3V0bC5oIgotKwotK3ZvaWQgdnN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICpr ZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQg Y2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIg YnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rCi0rICAgIGtleWxlbiA9IDA7Ci0rCi0rICAg IHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWZwdXRz KGJ1ZixzdGRvdXQpOwotKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCi0r CQlrZXlsZW4gPSAxNjsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAx MykpCi0rCQlrZXlsZW4gPSAyNDsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtl eV0iLCAxMykpCi0rCQlrZXlsZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAm dmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJL ZXkiKSkKLSsJICAgIHsKLSsJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYg KGkgIT0ga2V5bGVuKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5n dGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQotKwkgICAgewotKwkgICAgZHQ9aGV4 MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50Zihz dGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCSAgICB9 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0rCSAgICB2PWhleDJi aW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3Rk ZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBp ZiAoIWtleSB8fCAhZHQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9y IERUXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtl eSwga2V5bGVuKTsKLSsJICAgIEZJUFNfcmFuZF9zZWVkKHYsMTYpOwotKwkgICAgRklQU19yYW5k X3NldF9kdChkdCk7Ci0rCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKLSsJ ICAgICAgICByZXR1cm47Ci0rCSAgICAgICAgfQotKwotKwkgICAgcHYoIlIiLHJldCwxNik7Ci0r CSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0rCSAgICBPUEVOU1NM X2ZyZWUoZHQpOwotKwkgICAgZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKHYpOwotKwkg ICAgdiA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgbWN0KCkKLSsgICAg ewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2 ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBj aGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07 Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rICAg IGludCBqOwotKwotKyAgICBrZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6 ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYo IXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVs c2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7 Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVu ID0gMzI7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQot KwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAg ICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsK LSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4i LCBrZXlsZW4pOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiRFQiKSkKLSsJICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0r CSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBs ZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiViIpKQotKwkgICAgewotKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkg ICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5n dGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJ ewotKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47 Ci0rCQl9Ci0rCi0rCSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBG SVBTX3JhbmRfc2VlZCh2LDE2KTsKLSsJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQot KwkJewotKwkJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOwotKwkJICAgIGlmIChGSVBTX3JhbmRf Ynl0ZXMocmV0LDE2KSA8PSAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdl dHRpbmcgUFJORyB2YWx1ZVxuIik7Ci0rCQkgICAgICAgIHJldHVybjsKLSsJCSAgICAgICAgfQot KwkJICAgIC8qIEluY3JlbWVudCBEVCAqLwotKwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGot LSkKLSsJCQl7Ci0rCQkJZHRbal0rKzsKLSsJCQlpZiAoZHRbal0pCi0rCQkJCWJyZWFrOwotKwkJ CX0KLSsJCX0KLSsKLSsJICAgIHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtl eSk7Ci0rCSAgICBrZXkgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0 ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAg fQotKwl9Ci0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAg ewotKyAgICBpZihhcmdjICE9IDIpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0 XVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgx KSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBGSVBT X3JhbmRfcmVzZXQoKTsKLSsgICAgaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkpCi0rCXsKLSsJ ZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKLSsJZG9f cHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0cmNtcChhcmd2WzFd LCJtY3QiKSkKLSsJbWN0KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkK LSsJdnN0KCk7Ci0rICAgIGVsc2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBo b3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAw OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTEx LTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAw MDAgKzAxMDAKLUBAIC0wLDAgKzEsMzkwIEBACi0rLyogZmlwc19yc2FndGVzdC5jICovCi0rLyog V3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRo ZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICog Q29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20p LiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVk c29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8u aD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv eDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0 bC5oIgotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0aWMgaW50 IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdO VU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSk7Ci0rc3RhdGljIGludCByc2FfcHJp bnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwgQklHTlVNICpYcTIs IEJJR05VTSAqWHEpOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewot KwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJ aWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdv dG8gZW5kOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxz ZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlv dXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0r CWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxp emF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJ CXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9y XG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0KG91dCwgaW4pKQot KwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nlc3Npbmcg ZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0r CWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4g JiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBz dGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsj ZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNhX3Rlc3QoRklMRSAq b3V0LCBGSUxFICppbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsK LSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCUJJR05VTSAq WHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpYcCA9IE5VTEw7Ci0rCUJJR05VTSAqWHExID0gTlVM TCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJJR05VTSAqZSA9IE5VTEw7Ci0rCWludCBy ZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2Mo UlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVT VF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8g ZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwg aW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJ CWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwot KwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0r Ci0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBq dXN0IGNvcHkgKi8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAo ZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVl OwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFj ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAw OwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFk aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBm cm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdo aWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0g PSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQotKwkJCXsKLSsJCQlpZiAo WHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCi0rCQkJewotKwkJCWlm IChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQotKwkJCXsKLSsJCQlp ZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQotKwkJCXsKLSsJCQlp ZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCi0rCQkJewotKwkJ CWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEyLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJv cjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQotKwkJCXsKLSsJ CQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJ aWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKLSsJCQljb250aW51ZTsK LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAyIikpCi0rCQkJY29udGludWU7Ci0rCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJxMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAicTIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIm4iKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImQi KSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJ ZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAoZSAmJiBYcDEgJiYgWHAyICYmIFhwKQot KwkJCXsKLSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290 byBlcnJvcjsKLSsJCQlpZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwgWHAyLCBYcCwg ZSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcDEpOwotKwkJCVhwMSA9IE5VTEw7 Ci0rCQkJQk5fZnJlZShYcDIpOwotKwkJCVhwMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcCk7Ci0r CQkJWHAgPSBOVUxMOwotKwkJCUJOX2ZyZWUoZSk7Ci0rCQkJZSA9IE5VTEw7Ci0rCQkJfQotKwot KwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYmIFhxKQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmlu dGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBYcSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5f ZnJlZShYcTEpOwotKwkJCVhxMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcTIpOwotKwkJCVhxMiA9 IE5VTEw7Ci0rCQkJQk5fZnJlZShYcSk7Ci0rCQkJWHEgPSBOVUxMOwotKwkJCUZJUFNfcnNhX2Zy ZWUocnNhKTsKLSsJCQlyc2EgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsK LSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7 Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwotKwlpZiAoWHAx KQotKwkJQk5fZnJlZShYcDEpOwotKwlpZiAoWHAyKQotKwkJQk5fZnJlZShYcDIpOwotKwlpZiAo WHApCi0rCQlCTl9mcmVlKFhwKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYg KFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMikKLSsJCUJOX2ZyZWUoWHEyKTsKLSsJ aWYgKFhxKQotKwkJQk5fZnJlZShYcSk7Ci0rCWlmIChlKQotKwkJQk5fZnJlZShlKTsKLSsJaWYg KHJzYSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFy c2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vz c2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0 YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpY cDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAotKwkJQklHTlVNICplKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwlCSUdOVU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKLSsJcDEgPSBCTl9uZXco KTsKLSsJcDIgPSBCTl9uZXcoKTsKLSsJaWYgKCFwMSB8fCAhcDIpCi0rCQlnb3RvIGVycm9yOwot KwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwgTlVMTCwgWHAx LCBYcDIsIFhwLAotKwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQotKwkJZ290byBl cnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKLSsJZG9fYm5fcHJp bnRfbmFtZShvdXQsICJwMiIsIHAyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwIiwgcnNh LT5wKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChwMSkKLSsJCUJOX2ZyZWUo cDEpOwotKwlpZiAocDIpCi0rCQlCTl9mcmVlKHAyKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQot KwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklH TlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKQotKwl7Ci0rCWludCByZXQgPSAwOwot KwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0gTlVMTDsKLSsJcTEgPSBCTl9uZXcoKTsKLSsJcTIg PSBCTl9uZXcoKTsKLSsJaWYgKCFxMSB8fCAhcTIpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAo IVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVMTCwgTlVMTCwg TlVMTCwKLSsJCQkJCQlYcTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQotKwkJZ290byBlcnJvcjsK LSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMSIsIHExKTsKLSsJZG9fYm5fcHJpbnRfbmFt ZShvdXQsICJxMiIsIHEyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwgcnNhLT5xKTsK LSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJuIiwgcnNhLT5uKTsKLSsJZG9fYm5fcHJpbnRfbmFt ZShvdXQsICJkIiwgcnNhLT5kKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChx MSkKLSsJCUJOX2ZyZWUocTEpOwotKwlpZiAocTIpCi0rCQlCTl9mcmVlKHEyKTsKLSsKLSsJcmV0 dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKLS0tLSAvZGV2L251bGwJ MjAwOS0xMS0yMCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMDktMTEtMjMgMDg6MzI6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDM3MCBAQAotKy8qIGZpcHNfcnNhc3Rlc3QuYyAq LwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9w ZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNv bSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBI dWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRp by5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50 IFNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2Es IGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4s IGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsK LSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDEsIFNhbHRs ZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9l cnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2MgPiAyKSAmJiAhc3Ry Y21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IGF0b2koYXJndlsy XSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmludGYoc3RkZXJyLCAiRkFU QUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwotKwkJCX0KLSsJCWFy Z2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFyZ2MgPiAxKSAmJiAh c3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9IC0yOwotKwkJYXJn Yy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRp bjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8 IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3 Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0 IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAo IW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0 aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV9zdGVzdChv dXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBU1RF U1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNl Ci0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJv cnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlp ZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4g cmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0r aW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKLSsJewotKwlj aGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVl OwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCXVu c2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0gLTE7Ci0rCWludCBrZXls ZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVt ID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVO KTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwot KwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUg KGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVt Kys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7 Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNp Z24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0ganVz dCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0 KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9 IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0r CQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1 ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwg aXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQkvKiBMb29r IGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLwotKwotKwkJaWYgKCFzdHJjbXAoa2V5 d29yZCwgIlttb2QiKSkKLSsJCQl7Ci0rCQkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7 Ci0rCQkJaWYgKCpwICE9ICddJykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkqcCA9IDA7 Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxlbiA8IDApCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hB QWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0 ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0r CQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNI QTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAo dmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlm ICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0r CQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1 cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3Jk LCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1z ZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJfQotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQkv KiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0cHV0IHB1YmxpYwot KwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4KLSsJCSAqLwotKwot KwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKLSsJCQl7Ci0rCQkJQklHTlVNICpibl9l OwotKwkJCWlmIChyc2EpCi0rCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBGSVBT X3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlibl9lID0g Qk5fbmV3KCk7Ci0rCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9lLCAweDEwMDEpKQot KwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KHJzYSwg a2V5bGVuLCBibl9lLCBOVUxMKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlCTl9mcmVlKGJuX2Up OwotKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChvdXQsIHJzYS0+bik7 Ci0rCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPmUp OwotKwkJCWZwdXRzKCJcbiIsIG91dCk7Ci0rCQkJY3VycmVudF9rZXlsZW4gPSBrZXlsZW47Ci0r CQkJfQotKwotKwkJaWYgKE1zZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAoIXJzYV9wcmludHNp ZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlTYWx0bGVuKSkKLSsJCQkJ Z290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJ CX0KLSsKLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1 ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNT TF9mcmVlKGxpbmVidWYpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJlZShyc2EpOwotKwot KwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJG QVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3Rv IGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRzaWcoRklMRSAqb3V0LCBS U0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25n IE1zZ2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNo YXIgKnNpZ2J1ZiA9IE5VTEw7Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8qIEVWUF9QS0VZIHN0cnVj dHVyZSAqLwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0rCXBrLnR5cGUgPSBF VlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhOwotKwotKwlzaWdsZW4gPSBSU0Ffc2l6 ZShyc2EpOwotKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOwotKwlpZiAoIXNpZ2J1 ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYg KFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJ CQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVs c2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZjdHgsIGRn c3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmY3R4LCBN c2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwoJmN0eCwg c2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJZnB1dHMoIlMgPSAiLCBvdXQpOwot KwotKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMlgi LCBzaWdidWZbaV0pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwotKwlyZXQgPSAxOwotKwot KwllcnJvcjoKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9u dWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMK LS0tLSAvZGV2L251bGwJMjAwOS0xMS0yMCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMDkt MTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDM3NyBAQAotKy8qIGZp cHNfcnNhdnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3Rl dmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8K LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChl YXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwot K2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJ UFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0r I2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAq aW4sIGludCBzYWx0bGVuKTsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0r CQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2ln bmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNs ZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0r CXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0r CWludCBTYWx0bGVuID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJ ZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKChhcmdjID4g MikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSBh dG9pKGFyZ3ZbMl0pOwotKwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQlnb3RvIGVuZDsKLSsJ CQl9Ci0rCQlhcmdjIC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVsc2UgaWYgKChhcmdj ID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJCVNhbHRsZW4gPSAt MjsKLSsJCWFyZ2MtLTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJ CWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJ aWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihh cmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBp bml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFy c2FfdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlkb19w cmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xvc2Uo aW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwotKwot KwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEw MjQwCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQot Kwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwljaGFyICprZXl3b3Jk LCAqdmFsdWU7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCUJJR05VTSAqbiA9IE5V TEwsICplID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOwot Kwlsb25nIE1zZ2xlbiwgU2xlbjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBsbnVtID0gMDsKLSsK LSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsJbGlu ZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwotKwotKwlpZiAoIWxp bmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hpbGUgKGZnZXRzKG9s aW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQlsbnVtKys7Ci0rCQlz dHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVidWY7Ci0rCQkvKiBT a2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpr ZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJ CXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdp dGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYgKCFwIHx8ICpr ZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCi0r CQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJcSA9IHAgLSAxOwot KwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7Ci0rCQl2YWx1ZSA9 IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2YWx1ZSsrOwotKwot KwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXAgPSB2YWx1ZSAr IHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAoIXN0cmNtcChrZXl3 b3JkLCAibiIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIp KQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCi0r CQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlkZ3N0ID0gRVZQX3No YTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCi0rCQkJCWRnc3Qg PSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQot KwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJT SEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNlIGlmICghc3RyY21w KHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7Ci0rCQkJZWxzZQot KwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBh bGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikp Ci0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0 cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCU1zZyA9IGhleDJi aW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJy b3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQotKwkJCXsKLSsJ CQlpZiAoUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAm IDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNs ZW4pOwotKwkJCWlmICghUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UK LSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0r CQlpZiAobiAmJiBlICYmIE1zZyAmJiBTICYmIGRnc3QpCi0rCQkJewotKwkJCWlmICghcnNhX3By aW50dmVyKG91dCwgbiwgZSwgZGdzdCwKLSsJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0 bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cg PSBOVUxMOwotKwkJCU9QRU5TU0xfZnJlZShTKTsKLSsJCQlTID0gTlVMTDsKLSsJCQl9Ci0rCi0r CQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYp Ci0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xf ZnJlZShsaW5lYnVmKTsKLSsJaWYgKG4pCi0rCQlCTl9mcmVlKG4pOwotKwlpZiAoZSkKLSsJCUJO X2ZyZWUoZSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJp bnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51 bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHJzYV9wcmludHZl cihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAq ZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBj aGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWludCByZXQgPSAwLCByOwot KwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KLSsJUlNBICpyc2FfcHVi a2V5ID0gTlVMTDsKLSsJRVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25l ZCBjaGFyICpidWYgPSBOVUxMOwotKwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rCWlm ICghcnNhX3B1YmtleSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAo bik7Ci0rCXJzYV9wdWJrZXktPmUgPSBCTl9kdXAoZSk7Ci0rCWlmICghcnNhX3B1YmtleS0+biB8 fCAhcnNhX3B1YmtleS0+ZSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXBrLnR5cGUgPSBFVlBfUEtFWV9S U0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhX3B1YmtleTsKLSsKLSsJRVZQX01EX0NUWF9pbml0KCZj dHgpOwotKwotKwlpZiAoU2FsdGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBfTURfQ1RYX3NldF9m bGFncygmY3R4LAotKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYp KTsKLSsJCX0KLSsJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQX01EX0NUWF9zZXRf ZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYgKCFFVlBfVmVyaWZ5 SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1Zl cmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyID0g RVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMsIFNsZW4sICZwayk7Ci0rCi0rCi0rCUVWUF9NRF9DVFhf Y2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHIgPCAwKQotKwkJZ290byBlcnJvcjsKLSsJRVJSX2Ns ZWFyX2Vycm9yKCk7Ci0rCi0rCWlmIChyID09IDApCi0rCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwg b3V0KTsKLSsJZWxzZQotKwkJZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7Ci0rCi0rCXJldCA9 IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocnNhX3B1YmtleSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNh X3B1YmtleSk7Ci0rCWlmIChidWYpCi0rCQlPUEVOU1NMX2ZyZWUoYnVmKTsKLSsKLSsJcmV0dXJu IHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTEx LTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTAsMCArMSwzODggQEAKLSsvKiBmaXBzX3NoYXRlc3QuYyAqLwotKy8qIFdy aXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUg T3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3 YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRq aEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNp bmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2 My5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7 Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwu aCIKLSsKLStzdGF0aWMgaW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKLStzdGF0 aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWdu ZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKTsKLStzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0 IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVk TGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAq aW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBT X21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWlu ID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rk b3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWlu KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIp OwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0rCi0rCWVuZDoKLSsK LSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAoaW4gJiYgKGluICE9 IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQot KwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsKLSsjZGVmaW5lIFNI QV9URVNUX01BWF9CSVRTCTEwMjQwMAotKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChT SEFfVEVTVF9NQVhfQklUUyA+PiAzKSAqIDIpICsgMTAwKQotKwotK2ludCBkZ3N0X3Rlc3QoRklM RSAqb3V0LCBGSUxFICppbikKLSsJewotKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKLSsJY2hh ciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsK LSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOwotKwlsb25nIE1zZ0xl biA9IC0xLCBMZW4gPSAtMSwgU2VlZExlbiA9IC0xOwotKwlpbnQgcmV0ID0gMDsKLSsJaW50IGxu dW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVM RU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0r Ci0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwotKwl3 aGlsZSAoZmdldHMob2xpbmVidWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJCXsKLSsJ CWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3JkID0gbGlu ZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExvb2sgZm9y ID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyogSWYgbm8g PSBvciBzdGFydHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJaWYg KCFwKQotKwkJCXsKLSsJCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsJCQljb250aW51ZTsKLSsJ CQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8K LSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsK LSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBz cGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFs dWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2 YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCQl3aGlsZSAoKnAg PT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsK LSsJCWlmICghc3RyY21wKGtleXdvcmQsIltMIikgJiYgKnA9PSddJykKLSsJCQl7Ci0rCQkJc3dp dGNoIChhdG9pKHZhbHVlKSkKLSsJCQkJewotKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAg IGJyZWFrOwotKwkJCQljYXNlIDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOwotKwkJCQljYXNl IDMyOiBtZD1FVlBfc2hhMjU2KCk7IGJyZWFrOwotKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0 KCk7IGJyZWFrOwotKwkJCQljYXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOwotKwkJCQlk ZWZhdWx0OiBnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiTGVuIikpCi0rCQkJewotKwkJCWlmIChMZW4gIT0gLTEpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJTGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKExlbiA8IDAp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9m IDggYml0cyAqLwotKwkJCWlmIChMZW4gJiAweDcpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJaWYgKExlbiA+IFNIQV9URVNUX01BWF9CSVRTKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwot KwkJCU1zZ0xlbiA9IExlbiA+PiAzOwotKwkJCX0KLSsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlsb25nIHRtcGxlbjsKLSsJCQlpZiAoc3RybGVuKHZh bHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKE1zZykKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOwotKwkJ CWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIlNlZWQiKSkKLSsJCQl7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAx KQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCWlmIChTZWVkKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCVNlZWQgPSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKLSsJCQlpZiAo IVNlZWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAiTUQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAobWQgJiYgTXNn ICYmIChNc2dMZW4gPj0gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBN c2csIE1zZ0xlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1zZyk7Ci0r CQkJTXNnID0gTlVMTDsKLSsJCQlNc2dMZW4gPSAtMTsKLSsJCQlMZW4gPSAtMTsKLSsJCQl9Ci0r CQllbHNlIGlmIChtZCAmJiBTZWVkICYmIChTZWVkTGVuID4gMCkpCi0rCQkJewotKwkJCWlmICgh cHJpbnRfbW9udGUobWQsIG91dCwgU2VlZCwgU2VlZExlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0r CQkJT1BFTlNTTF9mcmVlKFNlZWQpOwotKwkJCVNlZWQgPSBOVUxMOwotKwkJCVNlZWRMZW4gPSAt MTsKLSsJCQl9Ci0rCQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoK LSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxp bmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChNc2cpCi0rCQlPUEVOU1NM X2ZyZWUoTXNnKTsKLSsJaWYgKFNlZWQpCi0rCQlPUEVOU1NMX2ZyZWUoU2VlZCk7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJy b3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQs IEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKLSsJewotKwlp bnQgaSwgbWRsZW47Ci0rCXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKLSsJaWYg KCFFVlBfRGlnZXN0KE1zZywgTXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1k LCBOVUxMKSkKLSsJCXsKLSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRl cnIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCWZvciAo aSA9IDA7IGkgPCBtZGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOwot KwlmcHV0cygiXG4iLCBvdXQpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyBpbnQgcHJp bnRfbW9udGUoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAq U2VlZCwgaW50IFNlZWRMZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGksIGosIGs7Ci0rCWludCBy ZXQgPSAwOwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0z LCAqcDsKLSsJdW5zaWduZWQgaW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47Ci0rCi0rCUVW UF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUp Ci0rCQltbGVuID0gU2VlZExlbjsKLSsJZWxzZQotKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsK LSsKLSsJbTEgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTIgPSBPUEVOU1NMX21hbGxvYyht bGVuKTsKLSsJbTMgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsKLSsJaWYgKCFtMSB8fCAhbTIg fHwgIW0zKQotKwkJZ290byBtY19lcnJvcjsKLSsKLSsJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0g U2VlZExlbjsKLSsJbWVtY3B5KG0xLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0yLCBTZWVk LCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKLSsKLSsJZnB1dHMoIlxu Iiwgb3V0KTsKLSsKLSsJZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQotKwkJewotKwkJZm9yIChp ID0gMDsgaSA8IDEwMDA7IGkrKykKLSsJCQl7Ci0rCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwg bWQsIE5VTEwpOwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKLSsJCQlF VlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0yLCBtMmxlbik7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgm Y3R4LCBtMywgbTNsZW4pOwotKwkJCXAgPSBtMTsKLSsJCQltMSA9IG0yOwotKwkJCW0xbGVuID0g bTJsZW47Ci0rCQkJbTIgPSBtMzsKLSsJCQltMmxlbiA9IG0zbGVuOwotKwkJCW0zID0gcDsKLSsJ CQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgbTMsICZtM2xlbik7Ci0rCQkJfQotKwkJZnByaW50 ZihvdXQsICJDT1VOVCA9ICVkXG4iLCBqKTsKLSsJCWZwdXRzKCJNRCA9ICIsIG91dCk7Ci0rCQlm b3IgKGsgPSAwOyBrIDwgbTNsZW47IGsrKykKLSsJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1tr XSk7Ci0rCQlmcHV0cygiXG5cbiIsIG91dCk7Ci0rCQltZW1jcHkobTEsIG0zLCBtM2xlbik7Ci0r CQltZW1jcHkobTIsIG0zLCBtM2xlbik7Ci0rCQltMWxlbiA9IG0ybGVuID0gbTNsZW47Ci0rCQl9 Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCW1jX2Vycm9yOgotKwlpZiAobTEpCi0rCQlPUEVOU1NMX2Zy ZWUobTEpOwotKwlpZiAobTIpCi0rCQlPUEVOU1NMX2ZyZWUobTIpOwotKwlpZiAobTMpCi0rCQlP UEVOU1NMX2ZyZWUobTMpOwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAotLS0tIC9kZXYvbnVsbAkyMDA5 LTExLTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtMCwwICsxLDM0MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwot K3ZvaWQgZG9fcHJpbnRfZXJyb3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hhciAqZmlsZSwgKmRh dGE7Ci0rCWludCBsaW5lLCBmbGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwotKwl3aGlsZSAoKGwg PSBFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkK LSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNv bj0lZCIKLSsJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwgRVJSX0dFVF9MSUIo bCksIEVSUl9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJZmlsZSwgbGluZSwg ZmxhZ3MgJiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0rCX0KLSsKLStpbnQg aGV4MmJpbihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAg IGludCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAgIGZvciAobjE9MCxu Mj0wIDsgaW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZpcnN0IGJ5dGUgKi8K LSsJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0rCSAgICBjaCA9IGlu W24xKytdIC0gJzAnOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAn RicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwotKwllbHNlIGlmICgoaW5bbjFd ID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyAr IDEwOwotKwllbHNlCi0rCSAgICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0pCi0rCSAgICB7Ci0r CSAgICBvdXRbbjIrK109Y2g7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJb3V0W24yXSA9IGNo IDw8IDQ7Ci0rCS8qIHNlY29uZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGlu W24xXSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGlu W24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAn QScgKyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkK LSsJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0x OwotKwlvdXRbbjIrK10gfD0gY2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwotKyAgICB9Ci0rCi0r dW5zaWduZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQotKwl7 Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSAr IDEpLzIpOwotKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4gcDsKLSsJfQotKwot K2ludCBkb19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQotKwl7Ci0rCXVuc2ln bmVkIGNoYXIgKnA7Ci0rCWxvbmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlwID0gaGV4MmJpbl9t KGluLCAmcGxlbik7Ci0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAoISpwcikKLSsJCSpw ciA9IEJOX25ldygpOwotKwlpZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlpZiAoQk5fYmluMmJu KHAsIHBsZW4sICpwcikpCi0rCQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHApOwotKwlyZXR1cm4g cjsKLSsJfQotKwotK2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCi0rCXsK LSsJaW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0 ZXMoYm4pOwotKwlpZiAobGVuID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAiLCBvdXQpOwotKwkJ cmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0rCWlmICgh dG1wKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxu Iik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXApOwotKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOwotKwlP UEVOU1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnRf bmFtZShGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50 IHI7Ci0rCWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRvX2JuX3ByaW50KG91 dCwgYm4pOwotKwlpZiAoIXIpCi0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZh bCwgY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwg KnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQg PSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwotKwkvKiBMb29rIGZv ciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAn PScgZXhpdCAqLwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9IHAgLSAxOwotKwot KwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsK LSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3Zl IHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVl KSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp KnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkqcHZhbCA9IHZhbHVl OwotKwlyZXR1cm4gMTsKLSsJfQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQot KyAgICB7Ci0rICAgIEJJR05VTSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRvX2hleDJibigmcCwg aW4pKQotKwlyZXR1cm4gTlVMTDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAgIH0KLSsKLStpbnQg YmluMmhleChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKLSsgICAg ewotKyAgICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwotKwotKyAgICBmb3Ig KG4xPTAsbjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKLSsJewotKwljaD1pbltuMV0gPj4gNDsKLSsJ aWYgKGNoIDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwllbHNlCi0rCSAgICBv dXRbbjIrK109Y2gtMTArJ2EnOwotKwljaD1pbltuMV0gJiAweDBmOwotKwlpZihjaCA8PSAweDA5 KQotKwkgICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEw KydhJzsKLSsJfQotKyAgICBvdXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBuMjsKLSsgICAgfQot KwotK3ZvaWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQg bGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAgYmluMmhleCh2YWws bGVuLG9idWYpOwotKyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOwotKyAgICB9Ci0r Ci0rLyogVG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMg c3RhZ2UganVzdCBjb252ZXJ0Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxl IGZvcm0uIEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAia2V5d29yZCA9IHZh bHVlXG4iIG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5l cwotKyAqIGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgotKyAq LwotKwotK2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsK LSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGlu ZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8K LSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsr OwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwot KwotKwkvKiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCi0rCWlm ICghcCkKLSsJCXsKLSsJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKLSsJCXdo aWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0g PSAwOwotKwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNhdChvbGluZWJ1Ziwg IlxuIik7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwotKwotKwkvKiBSZW1v dmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEp KQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsgMTsKLSsKLSsJLyog UmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0r Ci0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJ KnAtLSA9IDA7Ci0rCi0rCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0rCXN0cmNhdChvbGlu ZWJ1ZiwgIiA9ICIpOwotKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJc3RyY2F0KG9saW5l YnVmLCAiXG4iKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjogdGhpcyByZXR1cm4g dGhlIG51bWJlciBvZiBfYml0c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihjb25zdCBjaGFyICpp biwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAgIGludCBuOwotKwot KyAgICBtZW1zZXQob3V0LDAsbGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCi0r CWlmKGluW25dID09ICcxJykKLSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7Ci0rICAg IHJldHVybiBsZW47Ci0rICAgIH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hh ciAqaW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rCi0rICAgIGZv cihuPTAgOyBuIDwgbGVuIDsgKytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkp KSA/ICcxJyA6ICcwJzsKLSsgICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2b2lkIFByaW50VmFs dWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0rewotKyNpZiBWRVJC T1NFCi0rICBjaGFyIG9idWZbMjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9sZW4gPSBiaW4yaGV4 KHZhbCwgbGVuLCBvYnVmKTsKLSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9i dWYpOwotKyNlbmRpZgotK30KLSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWdu ZWQgY2hhciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCi0rICAgIHsKLSsg ICAgY2hhciBvYnVmWzIwNDhdOwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAgaWYoYml0bW9kZSkK LSsJb2xlbj1iaW4yYmludCh2YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0rCW9sZW49YmluMmhl eCh2YWwsbGVuLG9idWYpOwotKwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFn LCBvbGVuLCBvYnVmKTsKLSsjaWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwg dGFnLCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAtdXAgL2Rldi9udWxs IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHNfZXJyLmMKLS0tLSAvZGV2L251bGwJMjAw OS0xMS0yMCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9maXBzX2Vyci5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1A QCAtMCwwICsxLDcgQEAKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgImZpcHNfZXJyLmgiCi0rI2Vsc2UKLStzdGF0 aWMgdm9pZCAqZHVtbXk9JmR1bW15OwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHNfZXJyLmgKLS0tLSAvZGV2L251bGwJMjAwOS0xMS0y MCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9maXBzX2Vyci5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCww ICsxLDEzNyBAQAotKy8qIGNyeXB0by9maXBzX2Vyci5oICovCi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3Jl QE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9n cmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0 LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsg KiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKy8qIE5PVEU6IHRo aXMgZmlsZSB3YXMgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIG1rZXJyLnBsIHNjcmlwdDogYW55IGNo YW5nZXMKLSsgKiBtYWRlIHRvIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0 IG5leHQgdXBkYXRlcyB0aGlzIGZpbGUsCi0rICogb25seSByZWFzb24gc3RyaW5ncyB3aWxsIGJl IHByZXNlcnZlZC4KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rLyogQkVHSU4gRVJS T1IgQ09ERVMgKi8KLSsjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCi0rCi0rI2RlZmluZSBFUlJfRlVO QyhmdW5jKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsZnVuYywwKQotKyNkZWZpbmUgRVJSX1JFQVNP TihyZWFzb24pIEVSUl9QQUNLKEVSUl9MSUJfRklQUywwLHJlYXNvbikKLSsKLStzdGF0aWMgRVJS X1NUUklOR19EQVRBIEZJUFNfc3RyX2Z1bmN0c1tdPQotKwl7Ci0re0VSUl9GVU5DKEZJUFNfRl9E SF9CVUlMVElOX0dFTlBBUkFNUyksCSJESF9CVUlMVElOX0dFTlBBUkFNUyJ9LAotK3tFUlJfRlVO QyhGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLAkiRFNBX0JVSUxUSU5fUEFSQU1HRU4ifSwK LSt7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWduIn0sCi0re0VSUl9G VU5DKEZJUFNfRl9EU0FfRE9fVkVSSUZZKSwJIkRTQV9kb192ZXJpZnkifSwKLSt7RVJSX0ZVTkMo RklQU19GX0VWUF9DSVBIRVJJTklUX0VYKSwJIkVWUF9DaXBoZXJJbml0X2V4In0sCi0re0VSUl9G VU5DKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCksCSJFVlBfRGlnZXN0SW5pdF9leCJ9LAotK3tF UlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19EU0EpLAkiRklQU19DSEVDS19EU0EifSwKLSt7RVJS X0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UKSwJIkZJUFNfQ0hFQ0tf SU5DT1JFX0ZJTkdFUlBSSU5UIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSks CSJGSVBTX0NIRUNLX1JTQSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19EU0FfQ0hFQ0spLAki RklQU19EU0FfQ0hFQ0sifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfTU9ERV9TRVQpLAkiRklQ U19tb2RlX3NldCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNU KSwJImZpcHNfcGtleV9zaWduYXR1cmVfdGVzdCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19T RUxGVEVTVF9BRVMpLAkiRklQU19zZWxmdGVzdF9hZXMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJ UFNfU0VMRlRFU1RfREVTKSwJIkZJUFNfc2VsZnRlc3RfZGVzIn0sCi0re0VSUl9GVU5DKEZJUFNf Rl9GSVBTX1NFTEZURVNUX0RTQSksCSJGSVBTX3NlbGZ0ZXN0X2RzYSJ9LAotK3tFUlJfRlVOQyhG SVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDKSwJIkZJUFNfc2VsZnRlc3RfaG1hYyJ9LAotK3tFUlJf RlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcpLAkiRklQU19zZWxmdGVzdF9ybmcifSwKLSt7 RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSksCSJGSVBTX3NlbGZ0ZXN0X3NoYTEi fSwKLSt7RVJSX0ZVTkMoRklQU19GX0hBU0hfRklOQUwpLAkiSEFTSF9GSU5BTCJ9LAotK3tFUlJf RlVOQyhGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOKSwJIlJTQV9CVUlMVElOX0tFWUdFTiJ9LAot K3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQpLAkiUlNBX0VBWV9QUklW QVRFX0RFQ1JZUFQifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBU KSwJIlJTQV9FQVlfUFJJVkFURV9FTkNSWVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZ X1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9FQVlfUFVCTElDX0RFQ1JZUFQifSwKLSt7RVJSX0ZVTkMo RklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX0VBWV9QVUJMSUNfRU5DUllQVCJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYKSwJIlJTQV9YOTMx X2dlbmVyYXRlX2tleV9leCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMp LAkiU1NMRUFZX1JBTkRfQllURVMifSwKLSt7MCxOVUxMfQotKwl9OwotKwotK3N0YXRpYyBFUlJf U1RSSU5HX0RBVEEgRklQU19zdHJfcmVhc29uc1tdPQotKwl7Ci0re0VSUl9SRUFTT04oRklQU19S X0NBTk5PVF9SRUFEX0VYRSkgICAgICAsImNhbm5vdCByZWFkIGV4ZSJ9LAotK3tFUlJfUkVBU09O KEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUKSwiY2Fubm90IHJlYWQgZXhlIGRpZ2VzdCJ9 LAotK3tFUlJfUkVBU09OKEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFKSwiY29udHJhZGlj dGluZyBldmlkZW5jZSJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9U X01BVENIKSwiZXhlIGRpZ2VzdCBkb2VzIG5vdCBtYXRjaCJ9LAotK3tFUlJfUkVBU09OKEZJUFNf Ul9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCksImZpbmdlcnByaW50IGRvZXMgbm90IG1hdGNo In0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJ Q19SRUxPQ0FURUQpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBub25waWMgcmVsb2NhdGVk In0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01F TlRfQUxJQVNJTkcpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBzZWdtZW50IGFsaWFzaW5n In0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCksImZpcHMgbW9k ZSBhbHJlYWR5IHNldCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxF RCkgLCJmaXBzIHNlbGZ0ZXN0IGZhaWxlZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9JTlZBTElE X0tFWV9MRU5HVEgpICAgLCJpbnZhbGlkIGtleSBsZW5ndGgifSwKLSt7RVJSX1JFQVNPTihGSVBT X1JfS0VZX1RPT19TSE9SVCkgICAgICAgICwia2V5IHRvbyBzaG9ydCJ9LAotK3tFUlJfUkVBU09O KEZJUFNfUl9OT05fRklQU19NRVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKLSt7RVJS X1JFQVNPTihGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpICwicGFpcndpc2UgdGVzdCBmYWls ZWQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IpICAgICwicnNhIGRl Y3J5cHQgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IpICAg ICwicnNhIGVuY3J5cHQgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKSAgICAgICwic2VsZnRlc3QgZmFpbGVkIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1RFU1Rf RkFJTFVSRSkgICAgICAgICAsInRlc3QgZmFpbHVyZSJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9V TlNVUFBPUlRFRF9QTEFURk9STSkgLCJ1bnN1cHBvcnRlZCBwbGF0Zm9ybSJ9LAotK3swLE5VTEx9 Ci0rCX07Ci0rCi0rI2VuZGlmCi0rCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCkK LSsJewotKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKLSsKLSsJaWYgKEVSUl9mdW5jX2Vycm9yX3N0 cmluZyhGSVBTX3N0cl9mdW5jdHNbMF0uZXJyb3IpID09IE5VTEwpCi0rCQl7Ci0rCQlFUlJfbG9h ZF9zdHJpbmdzKDAsRklQU19zdHJfZnVuY3RzKTsKLSsJCUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBT X3N0cl9yZWFzb25zKTsKLSsJCX0KLSsjZW5kaWYKLSsJfQotZGlmZiAtdXAgL2Rldi9udWxsIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0tIC9k ZXYvbnVsbAkyMDA5LTExLTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwkyMDA5LTExLTIzIDA4 OjMzOjMyLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwxMDMgQEAKLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rc3RhdGljIHN0cnVjdAotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsK LSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNp cGhlcnRleHRbMTZdOwotKyAgICB9IHRlc3RzW109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgwMSww eDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKLSsJICAweDA4LDB4MDksMHgwQSwweDBCLDB4 MEMsMHgwRCwweDBFLDB4MEYgfSwKLSsJeyAweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSww eDY2LDB4NzcsCi0rCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsMHhFRSwweEZGIH0s Ci0rCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMwLAotKwkgIDB4RDgs MHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAotKwl9LAotKwl9OwotKwotK3Zv aWQgRklQU19jb3JydXB0X2FlcygpCi0rICAgIHsKLSsgICAgdGVzdHNbMF0ua2V5WzBdKys7Ci0r ICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXMoKQotKyAgICB7Ci0rICAgIGludCBuOwot KyAgICBpbnQgcmV0ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBmb3Iobj0wIDsgbiA8IDEgOyArK24pCi0rCXsK LSsJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksCi0rCQkJCXRl c3RzW25dLmtleSwgTlVMTCwKLSsJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAotKwkJCQl0ZXN0c1tu XS5jaXBoZXJ0ZXh0LAotKwkJCQkxNikgPD0gMCkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rICAgIHJl dCA9IDE7Ci0rICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsg ICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMs RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsjZW5k aWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2Zp cHMuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMDktMTEtMjMgMDg6 MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDQxOSBAQAotKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAq ICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up Ci0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K LSsgKgotKyAqLwotKwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxsaW1pdHMu aD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLSsjaWZuZGVmIFBBVEhfTUFYCi0rI2RlZmlu ZSBQQVRIX01BWCAxMDI0Ci0rI2VuZGlmCi0rCi0rc3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2Zh aWw7Ci0rc3RhdGljIGludCBmaXBzX21vZGU7Ci0rc3RhdGljIGNvbnN0IHZvaWQgKmZpcHNfcmFu ZF9jaGVjazsKLSsKLStzdGF0aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBvbm9mZikKLSsJewot KwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAo Zmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd19s b2NrKCk7Ci0rCQlmaXBzX21vZGUgPSBvbm9mZjsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlw c193X3VubG9jaygpOwotKwkJfQotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19zZXRfcmFuZF9j aGVjayhjb25zdCB2b2lkICpyYW5kX2NoZWNrKQotKwl7Ci0rCWludCBvd25pbmdfdGhyZWFkID0g Zmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJ CXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKLSsJCWZpcHNfcmFuZF9j aGVjayA9IHJhbmRfY2hlY2s7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2so KTsKLSsJCX0KLSsJfQotKwotK2ludCBGSVBTX21vZGUodm9pZCkKLSsJewotKwlpbnQgcmV0ID0g MDsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJ aWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBz X3JfbG9jaygpOwotKwkJcmV0ID0gZmlwc19tb2RlOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBm aXBzX3JfdW5sb2NrKCk7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStjb25zdCB2b2lk ICpGSVBTX3JhbmRfY2hlY2sodm9pZCkKLSsJewotKwljb25zdCB2b2lkICpyZXQgPSAwOwotKwlp bnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoZmlw c19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2Nr KCk7Ci0rCQlyZXQgPSBmaXBzX3JhbmRfY2hlY2s7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZp cHNfcl91bmxvY2soKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCh2b2lkKQotKyAgICB7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBpZiAo Zmlwc19pc19zdGFydGVkKCkpCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293 bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOwot KwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7Ci0rCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19y X3VubG9jaygpOwotKwl9Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsKLSsvKiBTZWxmdGVz dCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAotKyAqIGR1 cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCi0r ICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4K LSsgKi8KLSsKLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKLSsgICAgewotKyAgICBp ZiAoZmlwc19zZWxmdGVzdF9mYWlsKQotKwl7Ci0rCU9wZW5TU0xEaWUoX19GSUxFX18sX19MSU5F X18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUiKTsKLSsJfQotKyAgICB9Ci0rCi0rdm9p ZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCi0rICAgIHsKLSsgICAgZmlwc19zZWxmdGVz dF9mYWlsID0gMTsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0KCkKLSsgICAgewotKwot KyAgICByZXR1cm4gRklQU19zZWxmdGVzdF9zaGExKCkKLSsJJiYgRklQU19zZWxmdGVzdF9obWFj KCkKLSsJJiYgRklQU19zZWxmdGVzdF9hZXMoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0r CSYmIEZJUFNfc2VsZnRlc3RfcnNhKCkKLSsJJiYgRklQU19zZWxmdGVzdF9kc2EoKTsKLSsgICAg fQotKwotK2ludCBGSVBTX21vZGVfc2V0KGludCBvbm9mZikKLSsgICAgewotKyAgICBpbnQgZmlw c19zZXRfb3duaW5nX3RocmVhZCgpOwotKyAgICBpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFk KCk7Ci0rICAgIGludCByZXQgPSAwOwotKwotKyAgICBmaXBzX3dfbG9jaygpOwotKyAgICBmaXBz X3NldF9zdGFydGVkKCk7Ci0rICAgIGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsKLSsgICAg aWYob25vZmYpCi0rCXsKLSsJdW5zaWduZWQgY2hhciBidWZbNDhdOwotKwotKwlmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAwOwotKwotKwkvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVz dCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCi0rCSAgIHNlZWRpbmcgKi8KLSsJaWYoRklQU19tb2Rl KCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9G SVBTX01PREVfQUxSRUFEWV9TRVQpOwotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJ ICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsjaWZkZWYgT1BFTlNT TF9JQTMyX1NTRTIKLSsJaWYgKChPUEVOU1NMX2lhMzJjYXAgJiAoMTw8MjV8MTw8MjYpKSAhPSAo MTw8MjV8MTw8MjYpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NF VCxGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pOwotKwkgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsjZW5kaWYK LSsKLSsJLyogUGVyZm9ybSBSTkcgS0FUIGJlZm9yZSBzZWVkaW5nICovCi0rCWlmICghRklQU19z ZWxmdGVzdF9ybmcoKSkKLSsJICAgIHsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0r CSAgICByZXQgPSAwOwotKwkgICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rCi0rCS8qIGF1dG9tYWdp Y2FsbHkgc2VlZCBQUk5HIGlmIG5vdCBhbHJlYWR5IHNlZWRlZCAqLwotKwlpZighRklQU19yYW5k X3N0YXR1cygpKQotKwkgICAgewotKwkgICAgaWYoUkFORF9ieXRlcyhidWYsc2l6ZW9mIGJ1Zikg PD0gMCkKLSsJCXsKLSsJCWZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCQlyZXQgPSAwOwotKwkJ Z290byBlbmQ7Ci0rCQl9Ci0rCSAgICBGSVBTX3JhbmRfc2V0X2tleShidWYsMzIpOwotKwkgICAg RklQU19yYW5kX3NlZWQoYnVmKzMyLDE2KTsKLSsJICAgIH0KLSsKLSsJLyogbm93IHN3aXRjaCBp bnRvIEZJUFMgbW9kZSAqLwotKwlmaXBzX3NldF9yYW5kX2NoZWNrKEZJUFNfcmFuZF9tZXRob2Qo KSk7Ci0rCVJBTkRfc2V0X3JhbmRfbWV0aG9kKEZJUFNfcmFuZF9tZXRob2QoKSk7Ci0rCWlmKEZJ UFNfc2VsZnRlc3QoKSkKLSsJICAgIGZpcHNfc2V0X21vZGUoMSk7Ci0rCWVsc2UKLSsJICAgIHsK LSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290 byBlbmQ7Ci0rCSAgICB9Ci0rCXJldCA9IDE7Ci0rCWdvdG8gZW5kOwotKwl9Ci0rICAgIGZpcHNf c2V0X21vZGUoMCk7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rICAgIHJldCA9IDE7 Ci0rZW5kOgotKyAgICBmaXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKLSsgICAgZmlwc193X3Vu bG9jaygpOwotKyAgICByZXR1cm4gcmV0OwotKyAgICB9Ci0rCi0rdm9pZCBmaXBzX3dfbG9jayh2 b2lkKQkJeyBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Ci0rdm9pZCBmaXBzX3df dW5sb2NrKHZvaWQpCXsgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Ci0rdm9p ZCBmaXBzX3JfbG9jayh2b2lkKQkJeyBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9 Ci0rdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpCXsgQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NL X0ZJUFMpOyB9Ci0rCi0rc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOwotK3N0YXRpYyB1bnNp Z25lZCBsb25nIGZpcHNfdGhyZWFkID0gMDsKLSsKLSt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9p ZCkKLSsJewotKwlmaXBzX3N0YXJ0ZWQgPSAxOwotKwl9Ci0rCi0raW50IGZpcHNfaXNfc3RhcnRl ZCh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3N0YXJ0ZWQ7Ci0rCX0KLSsKLStpbnQgZmlwc19p c19vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBz X2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCUNSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIp OwotKwkJaWYgKGZpcHNfdGhyZWFkICE9IDAgJiYgZmlwc190aHJlYWQgPT0gQ1JZUFRPX3RocmVh ZF9pZCgpKQotKwkJCXJldCA9IDE7Ci0rCQlDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQ UzIpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IGZpcHNfc2V0X293bmluZ190 aHJlYWQodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRl ZCgpKQotKwkJewotKwkJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAo Zmlwc190aHJlYWQgPT0gMCkKLSsJCQl7Ci0rCQkJZmlwc190aHJlYWQgPSBDUllQVE9fdGhyZWFk X2lkKCk7Ci0rCQkJcmV0ID0gMTsKLSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xP Q0tfRklQUzIpOwotKwkJfQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IGZpcHNfY2xlYXJf b3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19p c19zdGFydGVkKCkpCi0rCQl7Ci0rCQlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK LSsJCWlmIChmaXBzX3RocmVhZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCi0rCQkJewotKwkJCWZp cHNfdGhyZWFkID0gMDsKLSsJCQlyZXQgPSAxOwotKwkJCX0KLSsJCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsvKiBHZW5l cmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4gU2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBk YXRhCi0rICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1lc2FnZSBkaWdlc3QgbWQgYW5kIHNldHRp bmcgb3B0aW9uIGRpZ2VzdAotKyAqIGZsYWdzIG1kX2ZsYWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1l dGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKLSsgKiBhZGRpdGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25h dHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0ZXN0Ci0rICogVGhlIHN0cmluZyAiZmFp bF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIGluIGNhc2UKLSsgKiBv ZiBmYWlsdXJlLgotKyAqLwotKwotK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BL RVkgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKLSsJCQljb25z dCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAotKwkJCWNvbnN0IGNoYXIg KmZhaWxfc3RyKQotKwl7CQotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBzaWd0bXBb MjU2XSwgKnNpZyA9IHNpZ3RtcDsKLSsJdW5zaWduZWQgaW50IHNpZ2xlbjsKLSsJRVZQX01EX0NU WCBtY3R4OwotKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwotKwotKwlpZiAoKHBrZXktPnR5cGUg PT0gRVZQX1BLRVlfUlNBKQotKwkJJiYgKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSA+IHNpemVv ZihzaWd0bXApKSkKLSsJCXsKLSsJCXNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXkt PnBrZXkucnNhKSk7Ci0rCQlpZiAoIXNpZykKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfRklQ U19QS0VZX1NJR05BVFVSRV9URVNULEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLSsJCQlyZXR1cm4g MDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCWlmICh0YnNsZW4gPT0gLTEpCi0rCQl0YnNsZW4gPSBzdHJs ZW4oKGNoYXIgKil0YnMpOwotKwotKwlpZiAobWRfZmxhZ3MpCi0rCQlFVlBfTURfQ1RYX3NldF9m bGFncygmbWN0eCwgbWRfZmxhZ3MpOwotKwotKwlpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwg ZGlnZXN0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25VcGRhdGUoJm1j dHgsIHRicywgdGJzbGVuKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1NpZ25GaW5hbCgm bWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmIChrYXQg JiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQotKwkJ Z290byBlcnJvcjsKLSsKLSsJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBO VUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJz LCB0YnNsZW4pKQotKwkJZ290byBlcnJvcjsKLSsJcmV0ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4 LCBzaWcsIHNpZ2xlbiwgcGtleSk7Ci0rCi0rCWVycm9yOgotKwlpZiAoc2lnICE9IHNpZ3RtcCkK LSsJCU9QRU5TU0xfZnJlZShzaWcpOwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKwlp ZiAocmV0ICE9IDEpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJF X1RFU1QsRklQU19SX1RFU1RfRkFJTFVSRSk7Ci0rCQlpZiAoZmFpbF9zdHIpCi0rCQkJRVJSX2Fk ZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKLSsJCXJldHVybiAwOwotKwkJfQot KwlyZXR1cm4gMTsKLSsJfQotKwotKy8qIEdlbmVyYWxpemVkIHN5bW1ldHJpYyBjaXBoZXIgdGVz dCByb3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSByZXN1bHQKLSsgKiBhZ2FpbnN0IGtub3du IGFuc3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRoIG9yaWdpbmFsIHBsYWludGV4dC4KLSsg Ki8KLSsKLStpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCBF VlBfQ0lQSEVSICpjaXBoZXIsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKml2LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4 dCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAotKwkJCWludCBsZW4pCi0r CXsKLSsJdW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsJ dW5zaWduZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFXTsKLSsJT1BFTlNT TF9hc3NlcnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUpOwotKwlpZiAoRVZQX0Np cGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtleSwgaXYsIDEpIDw9IDApCi0rCQlyZXR1 cm4gMDsKLSsJRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbik7Ci0rCWlmICht ZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKEVWUF9D aXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2LCAwKSA8PSAwKQotKwkJcmV0 dXJuIDA7Ci0rCUVWUF9DaXBoZXIoY3R4LCBwbHRtcCwgY2l0bXAsIGxlbik7Ci0rCWlmIChtZW1j bXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlyZXR1cm4gMTsKLSsJ fQotKwotKyNpZiAwCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVy cm9yIGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KLSsgKiBuYW1lIGlzIHRvIGtlZXAgdGhl IGVycm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAotKyAqLwotK3ZvaWQgaGFzaF9maW5hbCh2b2lk KQotKwl7Ci0rCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05PTl9GSVBTX01FVEhP RCk7Ci0rCX0KLSsjZW5kaWYKLSsKLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKLS0tLSAvZGV2 L251bGwJMjAwOS0xMS0yMCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAwOS0xMS0yMyAwODoz MzozMi4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMTM5IEBACi0rLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICog ICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK LSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot KyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3Bl bnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHN0cnVjdAot KyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBw bGFpbnRleHRbOF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKLSsgICAgfSB0 ZXN0czJbXT0KLSsJewotKwl7Ci0rCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4MDQsMHgx NiwweGVjLAotKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9LAot Kwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAotKwl7IDB4NGMs MHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9Ci0rCX0sCi0rCXsKLSsJeyAweDVk LDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCi0rCSAgMHgwMSwweDE2LDB4N2Ms MHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCi0rCXsgMHg5YywweDUwLDB4MDksMHgwZiwweDVl LDB4N2QsMHg2OSwweDdlIH0sCi0rCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQsMHg5 ZSwweGZmIH0sCi0rCX0KLSsJfTsKLSsKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5z aWduZWQgY2hhciBrZXlbMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsg ICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotKyAgICB9IHRlc3RzM1tdPQotKwl7Ci0r CXsKLSsJeyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCSAgMHhG RSwweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAotKwkgIDB4MTIsMHgzNCwweDU2 LDB4NzgsMHg5YSwweGJjLDB4ZGUsMHhmMCB9LAotKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIsMHg1 ZCwweDQ4LDB4YjQsMHgxYyB9LAotKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEyLDB4 ZWEsMHgxYiB9LAotKwl9LAotKwl7Ci0rCXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIs MHgxMCwweEZFLAotKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiwK LSsJICAweEVELDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKLSsJeyAweDAx LDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKLSsJeyAweDExLDB4MjUsMHhi MCwweDM1LDB4YmUsMHhhMCwweDgyLDB4ODYgfSwKLSsJfSwKLSsJfTsKLSsKLSt2b2lkIEZJUFNf Y29ycnVwdF9kZXMoKQotKyAgICB7Ci0rICAgIHRlc3RzMlswXS5wbGFpbnRleHRbMF0rKzsKLSsg ICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCi0rICAgIHsKLSsgICAgaW50IG4sIHJl dCA9IDA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5p dCgmY3R4KTsKLSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQgY29t cGFyZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKLSsJ ewotKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCi0rCQkJ CXRlc3RzMltuXS5rZXksIE5VTEwsCi0rCQkJCXRlc3RzMltuXS5wbGFpbnRleHQsIHRlc3RzMltu XS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwl9Ci0rCi0rICAgIC8qIEVuY3J5cHQv ZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAgICBm b3Iobj0wIDsgbiA8IDIgOyArK24pCi0rCXsKLSsJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgs IEVWUF9kZXNfZWRlM19lY2IoKSwKLSsJCQkJdGVzdHMzW25dLmtleSwgTlVMTCwKLSsJCQkJdGVz dHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290byBlcnI7 Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsgICAgcmV0dXJuIHJl dDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTEx LTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwkyMDA5LTExLTIzIDA4OjMzOjMyLjAwMDAwMDAw MCArMDEwMAotQEAgLTAsMCArMSwxODYgQEAKLSsvKiBjcnlwdG8vZHNhL2RzYXRlc3QuYyAqLwot Ky8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4g U1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNv bmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl IGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9u LCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1 c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0 aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJt cwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFz IHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBi ZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJp YyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9m IHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBm b3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRv Y3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdl LgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICog ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl IGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBj YW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJl aW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlv dSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVy ZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkg eW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQu Y29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcg YGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0r ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAq IFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2 YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJl IGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFu ZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcg dGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyog c2VlZCwgb3V0X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gdGhlIE5JU1QgdGVzdCB2ZWN0b3Jz ICovCi0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7Ci0rCTB4NzcsIDB4OGYs IDB4NDAsIDB4NzQsIDB4NmYsIDB4NjYsIDB4YmUsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTksIDB4 MzQsCi0rCTB4NGMsIDB4ZmMsIDB4ZjMsIDB4MjgsIDB4YWEsIDB4NzAsIDB4MmQsIDB4M2EKLSsg IAl9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10gPSB7Ci0rCTB4ZjcsIDB4N2Ms IDB4MWIsIDB4ODMsIDB4ZDgsIDB4ZTgsIDB4NWMsIDB4N2YsIDB4ODUsIDB4MzAsIDB4MTcsIDB4 NTcsCi0rCTB4MjEsIDB4OTUsIDB4ZmUsIDB4MjYsIDB4MDQsIDB4ZWIsIDB4NDcsIDB4NGMsIDB4 M2EsIDB4NGEsIDB4ODEsIDB4NGIsCi0rCTB4NzEsIDB4MmUsIDB4ZWQsIDB4NmUsIDB4NGYsIDB4 M2QsIDB4MTEsIDB4MGYsIDB4N2MsIDB4ZmUsIDB4MzYsIDB4NDMsCi0rCTB4NTEsIDB4ZDksIDB4 ODEsIDB4MzksIDB4MTcsIDB4ZGYsIDB4NjIsIDB4ZjYsIDB4OWMsIDB4MDEsIDB4YTgsIDB4Njks Ci0rCTB4NzEsIDB4ZGQsIDB4MjksIDB4N2YsIDB4NDcsIDB4ZTYsIDB4NjUsIDB4YTYsIDB4MjIs IDB4ZTgsIDB4NmEsIDB4MTIsCi0rCTB4MmIsIDB4YzIsIDB4ODEsIDB4ZmYsIDB4MzIsIDB4NzAs IDB4MmYsIDB4OWUsIDB4Y2EsIDB4NTMsIDB4MjYsIDB4NDcsCi0rCTB4MGYsIDB4NTksIDB4ZDcs IDB4OWUsIDB4MmMsIDB4YTUsIDB4MDcsIDB4YzQsIDB4NDksIDB4NTIsIDB4YTMsIDB4ZTQsCi0r CTB4NmIsIDB4MDQsIDB4MDAsIDB4MjUsIDB4NDksIDB4ZTIsIDB4ZTYsIDB4N2YsIDB4MjgsIDB4 NzgsIDB4OTcsIDB4YjgsCi0rCTB4M2EsIDB4MzIsIDB4MTQsIDB4MzgsIDB4YTIsIDB4NTEsIDB4 MzMsIDB4MjIsIDB4NDQsIDB4N2UsIDB4ZDcsIDB4ZWYsCi0rCTB4NDUsIDB4ZGIsIDB4MDYsIDB4 NGEsIDB4ZDIsIDB4ODIsIDB4NGEsIDB4ODIsIDB4MmMsIDB4YjEsIDB4ZDcsIDB4ZDgsCi0rCTB4 YjYsIDB4NzMsIDB4MDAsIDB4NGQsIDB4OTQsIDB4NzcsIDB4OTQsIDB4ZWYKLSsJfTsKLSsKLStz dGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcVtdID0gewotKwkweGQ0LCAweDBhLCAweGFjLCAweDlm LCAweGJkLCAweDhjLCAweDgwLCAweGMyLCAweDM4LCAweDdlLCAweDJlLCAweDBjLAotKwkweDUy LCAweDVjLCAweGVhLCAweDM0LCAweGExLCAweDgzLCAweDMyLCAweGYzCi0rCX07Ci0rCi0rc3Rh dGljIHVuc2lnbmVkIGNoYXIgb3V0X2dbXSA9IHsKLSsJMHgzNCwgMHg3MywgMHg4YiwgMHg1Nywg MHg4NCwgMHg4ZSwgMHg1NSwgMHhiZiwgMHg1NywgMHhjYywgMHg0MSwgMHhiYiwKLSsJMHg1ZSwg MHgyYiwgMHhkNSwgMHg0MiwgMHhkZCwgMHgyNCwgMHgyMiwgMHgyYSwgMHgwOSwgMHhlYSwgMHgy NiwgMHgxZSwKLSsJMHgxNywgMHg2NSwgMHhjYiwgMHgxYSwgMHhiMywgMHgxMiwgMHg0NCwgMHhh MywgMHg5ZSwgMHg5OSwgMHhlOSwgMHg2MywKLSsJMHhlYiwgMHgzMCwgMHhiMSwgMHg3OCwgMHg3 YiwgMHgwOSwgMHg0MCwgMHgzMCwgMHhmYSwgMHg4MywgMHhjMiwgMHgzNSwKLSsJMHhlMSwgMHhj NCwgMHgyZCwgMHg3NCwgMHgxYSwgMHhiMSwgMHg4MywgMHg1NCwgMHhkOCwgMHgyOSwgMHhmNCwg MHhjZiwKLSsJMHg3ZiwgMHg2ZiwgMHg2NywgMHgxYywgMHgzNiwgMHg0OSwgMHhlZSwgMHg2Yywg MHhhMiwgMHgzYywgMHgyZCwgMHg2YSwKLSsJMHhlOSwgMHhkMywgMHg5YSwgMHhmNiwgMHg1Nywg MHg3OCwgMHg2ZiwgMHhmZCwgMHgzMywgMHhjZCwgMHgzYywgMHhlZCwKLSsJMHhmZCwgMHhkNCwg MHg0MSwgMHhlNiwgMHg1YywgMHg4YiwgMHhlMCwgMHg2OCwgMHgzMSwgMHg0NywgMHg0NywgMHhh ZiwKLSsJMHgxMiwgMHhhNywgMHhmOSwgMHgzMiwgMHgwZCwgMHg5NCwgMHgxNSwgMHg0OCwgMHhk MCwgMHg1NCwgMHg4NSwgMHhiMiwKLSsJMHgwNCwgMHhiNSwgMHg0ZCwgMHhkNCwgMHg5ZCwgMHgw NSwgMHgyMiwgMHgyNSwgMHhkOSwgMHhmZCwgMHg2YywgMHgzNiwKLSsJMHhlZiwgMHhiZSwgMHg2 OSwgMHg2YywgMHg1NSwgMHhmNCwgMHhlZSwgMHhlYwotKwl9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOwotKwotK3ZvaWQgRklQ U19jb3JydXB0X2RzYSgpCi0rICAgIHsKLSsgICAgKytzZWVkWzBdOwotKyAgICB9Ci0rCi0raW50 IEZJUFNfc2VsZnRlc3RfZHNhKCkKLSsgICAgewotKyAgICBEU0EgKmRzYTsKLSsgICAgaW50IGNv dW50ZXIsaSxqLCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgdW5zaWdu ZWQgY2hhciBidWZbMjU2XTsKLSsgICAgdW5zaWduZWQgbG9uZyBoOwotKyAgICBFVlBfTURfQ1RY IG1jdHg7Ci0rICAgIEVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCi0rICAgIEVWUF9NRF9DVFhfaW5p dCgmbWN0eCk7Ci0rCi0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsKLSsgICAgaWYoZHNhID09IE5V TEwpCi0rCWdvdG8gZXJyOwotKyAgICBpZighRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCAxMDI0LHNlZWQsMjAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAo Y291bnRlciAhPSAzNzgpIAotKwlnb3RvIGVycjsKLSsgICAgaWYgKGggIT0gMikKLSsJZ290byBl cnI7Ci0rICAgIGk9Qk5fYm4yYmluKGRzYS0+cSxidWYpOwotKyAgICBqPXNpemVvZihvdXRfcSk7 Ci0rICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcSxpKSAhPSAwKQotKwlnb3RvIGVy cjsKLSsKLSsgICAgaT1CTl9ibjJiaW4oZHNhLT5wLGJ1Zik7Ci0rICAgIGo9c2l6ZW9mKG91dF9w KTsKLSsgICAgaWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9wLGkpICE9IDApCi0rCWdvdG8g ZXJyOwotKwotKyAgICBpPUJOX2JuMmJpbihkc2EtPmcsYnVmKTsKLSsgICAgaj1zaXplb2Yob3V0 X2cpOwotKyAgICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X2csaSkgIT0gMCkKLSsJZ290 byBlcnI7Ci0rICAgIERTQV9nZW5lcmF0ZV9rZXkoZHNhKTsKLSsKLSsgICAgaWYgKChwaz1FVlBf UEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJZ290byBlcnI7Ci0rICAgIEVWUF9QS0VZX2Fzc2lnbl9E U0EocGssIGRzYSk7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNz MSgpLCBOVUxMKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgs IHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwg YnVmLCAmc2xlbiwgcGspKQotKwlnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5p dF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoIUVW UF9WZXJpZnlVcGRhdGUoJm1jdHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmIChF VlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgcGspICE9IDEpCi0rCWdvdG8gZXJyOwot KwotKyAgICByZXQgPSAxOwotKwotKyAgICBlcnI6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgm bWN0eCk7Ci0rICAgIGlmIChwaykKLSsJRVZQX1BLRVlfZnJlZShwayk7Ci0rICAgIGVsc2UgaWYg KGRzYSkKLSsJRFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2Vy cihGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAg IHJldHVybiByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHMuaAotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTIw IDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2ZpcHMvZmlwcy5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCww ICsxLDE2MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAq ICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3IgRklQ UyBpcyBkaXNhYmxlZC4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lm ZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBkc2Ff c3Q7Ci0rc3RydWN0IGV2cF9wa2V5X3N0OwotK3N0cnVjdCBlbnZfbWRfc3Q7Ci0rc3RydWN0IGV2 cF9jaXBoZXJfc3Q7Ci0rc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OwotKwotK2ludCBGSVBTX21v ZGVfc2V0KGludCBvbm9mZik7Ci0raW50IEZJUFNfbW9kZSh2b2lkKTsKLStjb25zdCB2b2lkICpG SVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOwot K3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjayh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGEx KHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1 cHRfYWVzKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLSt2b2lkIEZJUFNf Y29ycnVwdF9kZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOwotK3ZvaWQg RklQU19jb3JydXB0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZv aWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9k c2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKLStpbnQgRklQ U19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwotK3Zv aWQgRklQU19ybmdfc3RpY2sodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOwot K2ludCBGSVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7Ci0rCi0raW50IGZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWdu ZWQgaW50IGthdGxlbiwKLSsJCQljb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVuc2ln bmVkIGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cik7Ci0rCi0raW50IGZp cHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCi0rCQkJY29uc3Qg c3RydWN0IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICpr ZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJ aW50IGxlbik7Ci0rCi0rLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsvKiBUaGUgZm9sbG93aW5n IGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hh bmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0 aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotKyAqLwotK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdz KHZvaWQpOwotKwotKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCi0r Ci0rLyogRnVuY3Rpb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5Q QVJBTVMJCQkgMTAwCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAx Ci0rI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgotKyNkZWZpbmUgRklQU19GX0RT QV9ET19WRVJJRlkJCQkJIDEwMwotKyNkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VYCQkJ IDEyNAotKyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEyNQotKyNkZWZpbmUg RklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNL X0lOQ09SRV9GSU5HRVJQUklOVAkJIDEwNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNB CQkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJCQkgMTA3Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJCQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZ X1NJR05BVFVSRV9URVNUCQkJIDEwOQotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVT CQkJIDExMAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQotKyNkZWZp bmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgotKyNkZWZpbmUgRklQU19GX0ZJUFNf U0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORwkJ CSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0rI2RlZmlu ZSBGSVBTX0ZfSEFTSF9GSU5BTAkJCQkgMTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5f S0VZR0VOCQkJIDExNgotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUCQkJ IDExNwotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAotKyNk ZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5Ci0rI2RlZmluZSBGSVBT X0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKLSsjZGVmaW5lIEZJUFNfRl9SU0FfWDkz MV9HRU5FUkFURV9LRVlfRVgJCQkgMTIxCi0rI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRfQllU RVMJCQkgMTIyCi0rCi0rLyogUmVhc29uIGNvZGVzLiAqLwotKyNkZWZpbmUgRklQU19SX0NBTk5P VF9SRUFEX0VYRQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VT VAkJCSAxMDQKLSsjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDExNAot KyNkZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gJCSAxMDUKLSsjZGVmaW5l IEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUgRklQU19S X0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0rI2RlZmlu ZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAxMTIK LSsjZGVmaW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2RlZmluZSBG SVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1JfSU5WQUxJ RF9LRVlfTEVOR1RICQkJIDEwOQotKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJIDEw OAotKyNkZWZpbmUgRklQU19SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBGSVBT X1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZ UFRfRVJST1IJCQkgMTE1Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJCQkgMTE2 Ci0rI2RlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5lIEZJUFNf Ul9URVNUX0ZBSUxVUkUJCQkJIDExNwotKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRG T1JNCQkJIDExMwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlm Ci1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBz X2htYWNfc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTIwIDA4OjMwOjQzLjUzNDAw MjIxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19obWFj X3NlbGZ0ZXN0LmMJMjAwOS0xMS0yMyAwODozMzozMi4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAg KzEsMTM3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rCWNvbnN0 IEVWUF9NRCAqKCphbGcpKHZvaWQpOwotKwljb25zdCBjaGFyICprZXksICppdjsKLSsJdW5zaWdu ZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdOwotK30gSE1BQ19LQVQ7Ci0rCi0rc3RhdGlj IGNvbnN0IEhNQUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7CUVWUF9zaGExLAotKwkvKiBmcm9t IGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTgvZmlwcy0xOThh LnBkZiAqLwotKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAw eDA5LDB4MjIsMHhkMywweDQwLDB4NWYsMHhhYSwweDNkLDB4MTksCi0rCSAgMHg0ZiwweDgyLDB4 YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCwweDVjLAotKwkgIDB4YzYsMHhjNywweDVkLDB4MjQgfQot KyAgICB9LAotKyAgICB7CUVWUF9zaGEyMjQsCi0rCS8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhl IGFib3ZlLi4uICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAot Kwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAsMHhjYiwweDdkLDB4NTAsMHhmYiwKLSsJICAweDZlLDB4 ZTYsMHhjZSwweGExLDB4MjAsMHhiYSwweDI2LDB4YWEsCi0rCSAgMHgwOCwweGYzLDB4MDcsMHg3 NSwweDg3LDB4YjgsMHhhZCwweDFiLAotKwkgIDB4OGMsMHg4ZCwweDEyLDB4YzcgfQotKyAgICB9 LAotKyAgICB7CUVWUF9zaGEyNTYsCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1w bGUgIzIiLAotKwl7IDB4YjgsMHhmMiwweDBkLDB4YjUsMHg0MSwweGVhLDB4NDMsMHgwOSwKLSsJ ICAweGNhLDB4NGUsMHhhOSwweDM4LDB4MGMsMHhkMCwweGU4LDB4MzQsCi0rCSAgMHhmNywweDFm LDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2MSwweDM4LAotKwkgIDB4MGQsMHhjMSwweDdlLDB4YWUs MHg2YSwweDM0LDB4NTEsMHhkOSB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTM4NCwKLSsJIjAx MjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHgwOCwweGJjLDB4YjAs MHhkYSwweDQ5LDB4MWUsMHg4NywweGFkLAotKwkgIDB4OWEsMHgxZCwweDZhLDB4Y2UsMHgyMyww eGM1LDB4MGIsMHhmNiwKLSsJICAweGI3LDB4MTgsMHgwNiwweGE1LDB4NzcsMHhjZCwweDQ5LDB4 MDQsCi0rCSAgMHg4OSwweGYxLDB4ZTYsMHgyMywweDQ0LDB4NTEsMHg1MSwweDlmLAotKwkgIDB4 ODUsMHg1NiwweDgwLDB4NzksMHgwYywweGJkLDB4NGQsMHg1MCwKLSsJICAweGE0LDB4NWYsMHgy OSwweGUzLDB4OTMsMHhmMCwweGU4LDB4N2YgfQotKyAgICB9LAotKyAgICB7CUVWUF9zaGE1MTIs Ci0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4ODAsMHg5 ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4OTUsMHg0MSwKLSsJICAweDA1LDB4YmQsMHgwNCwweDEz LDB4MTYsMHhkYiwweDBmLDB4YWMsCi0rCSAgMHg0NCwweGQ1LDB4YTQsMHhkNSwweGQwLDB4ODks MHgyYiwweGQwLAotKwkgIDB4NGUsMHg4NiwweDY0LDB4MTIsMHhjMCwweDkwLDB4NzcsMHg2OCwK LSsJICAweGYxLDB4ODcsMHhiNywweDdjLDB4NGYsMHhhZSwweDJjLDB4MmYsCi0rCSAgMHgyMSww eGE1LDB4YjUsMHg2NSwweDlhLDB4NGYsMHg0YiwweGE3LAotKwkgIDB4NDcsMHgwMiwweGEzLDB4 ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwKLSsJICAweGJkLDB4NGYsMHgyNSwweDI3LDB4NDIsMHg5 OCwweDk5LDB4MDUgfQotKyAgICB9LAotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfaG1hYygp Ci0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIHVuc2lnbmVkIGludCAgICBvdXRsZW47Ci0rICAg IHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgY29uc3QgRVZQX01E ICAgKm1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsKLSsgICAgZm9yKG49MCx0PXZlY3Rv cjsgbjxzaXplb2YodmVjdG9yKS9zaXplb2YodmVjdG9yWzBdKTsgbisrLHQrKykKLSsJewotKwlt ZCA9ICgqdC0+YWxnKSgpOwotKwlITUFDKG1kLHQtPmtleSxzdHJsZW4odC0+a2V5KSwKLSsJCShj b25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsc3RybGVuKHQtPml2KSwKLSsJCW91dCwmb3V0bGVu KTsKLSsKLSsJaWYobWVtY21wKG91dCx0LT5rYXZhbCxvdXRsZW4pKQotKwkgICAgewotKwkgICAg RklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQp OwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzL2ZpcHNfcmFuZC5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAy MjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JhbmQu YwkyMDA5LTExLTIzIDA4OjMzOjMyLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw0MTIgQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsvKgotKyAqIFRoaXMgaXMgYSBGSVBTIGFw cHJvdmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCi0rICovCi0rCi0rI2lu Y2x1ZGUgImVfb3MuaCIKLSsKLSsvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9F WFRFTkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKLSsgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1l b2ZkYXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMKLSsgICBsaWtl IERFQyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KLSsjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5E RUQKLSsjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQotKyNlbmRpZgotKwotKyNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaWZu ZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0rI2VuZGlmCi0r I2luY2x1ZGUgPGFzc2VydC5oPgotKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsjIGlmZGVm IE9QRU5TU0xfVU5JU1RECi0rIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAotKyMgZWxzZQotKyMg IGluY2x1ZGUgPHVuaXN0ZC5oPgotKyMgZW5kaWYKLSsjZW5kaWYKLSsjaW5jbHVkZSA8c3RyaW5n Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwotK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOwotKwotKyNkZWZpbmUgQUVTX0JMT0NLX0xF TkdUSAkxNgotKwotKwotKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8KLSsKLSt0 eXBlZGVmIHN0cnVjdCAKLSsJewotKwlpbnQgc2VlZGVkOwotKwlpbnQga2V5ZWQ7Ci0rCWludCB0 ZXN0X21vZGU7Ci0rCWludCBzZWNvbmQ7Ci0rCWludCBlcnJvcjsKLSsJdW5zaWduZWQgbG9uZyBj b3VudGVyOwotKwlBRVNfS0VZIGtzOwotKwlpbnQgdnBvczsKLSsJLyogVGVtcG9yYXJ5IHN0b3Jh Z2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KLSsJdW5zaWduZWQgY2hhciB0 bXBfa2V5W0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xF TkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVk IGNoYXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJfSBGSVBTX1BSTkdfQ1RYOwotKwotK3N0 YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7Ci0rCi0rc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9 IDA7Ci0rCi0rdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQotKwl7Ci0rCWZpcHNfcHJuZ19mYWls ID0gMTsKLSsJfQotKwotK3ZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQU19QUk5HX0NUWCAq Y3R4KQotKwl7Ci0rCWN0eC0+c2VlZGVkID0gMDsKLSsJY3R4LT5rZXllZCA9IDA7Ci0rCWN0eC0+ dGVzdF9tb2RlID0gMDsKLSsJY3R4LT5jb3VudGVyID0gMDsKLSsJY3R4LT5zZWNvbmQgPSAwOwot KwljdHgtPmVycm9yID0gMDsKLSsJY3R4LT52cG9zID0gMDsKLSsJT1BFTlNTTF9jbGVhbnNlKGN0 eC0+ViwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCU9QRU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6 ZW9mKEFFU19LRVkpKTsKLSsJfQotKwkKLSsKLStzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5 KEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNf UkFORF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsJaWYg KGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQotKwkJewotKwkJ LyogZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8KLSsJCXJldHVybiAwOwotKwkJfQotKwlBRVNf c2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKLSsJaWYgKGtleWxl biA9PSAxNikKLSsJCXsKLSsJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOwotKwkJY3R4 LT5rZXllZCA9IDI7Ci0rCQl9Ci0rCWVsc2UKLSsJCWN0eC0+a2V5ZWQgPSAxOwotKwljdHgtPnNl ZWRlZCA9IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0 aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQotKwl7Ci0rCWlu dCBpOwotKwlpZiAoIWN0eC0+a2V5ZWQpCi0rCQlyZXR1cm4gMDsKLSsJLyogSW4gdGVzdCBtb2Rl IHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCi0rCWlmIChjdHgtPnRlc3RfbW9kZSkKLSsJ CXsKLSsJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCi0rCQkJcmV0dXJuIDA7Ci0r CQltZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCWN0eC0+c2VlZGVk ID0gMTsKLSsJCXJldHVybiAxOwotKwkJfQotKwkvKiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Igc3Vw cGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KLSsJZm9yIChpID0gMDsgaSA8IHNlZWRs ZW47IGkrKykKLSsJCXsKLSsJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtpXTsKLSsJCWlm IChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQl7Ci0rCQkJY3R4LT52cG9zID0g MDsKLSsJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBlcXVh bHMKLSsgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgot KyAJCQkgKi8gCi0rCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKLSsJCQkJewotKwkJCQlpZiAoIW1l bWNtcChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQotKwkJCQkJewotKwkJCQkJUkFORGVycihS QU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAotKwkJCQkJCVJBTkRfUl9QUk5HX1NFRURfTVVTVF9O T1RfTUFUQ0hfS0VZKTsKLSsJCQkJCXJldHVybiAwOwotKwkJCQkJfQotKwkJCQlPUEVOU1NMX2Ns ZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7Ci0rCQkJCWN0eC0+a2V5ZWQgPSAxOwotKwkJCQl9Ci0r CQkJY3R4LT5zZWVkZWQgPSAxOwotKwkJCX0KLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStp bnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwlpZiAoY3R4 LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5E X1JfUFJOR19LRVlFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJY3R4LT50ZXN0X21vZGUgPSAx OwotKwlyZXR1cm4gMTsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpCi0r CXsKLSsJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7Ci0rCX0KLSsKLStpbnQgRklQ U19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKLSsJewotKwlpZiAoIXNjdHgudGVzdF9t b2RlKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCxSQU5EX1JfTk9U X0lOX1RFU1RfTU9ERSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJbWVtY3B5KHNjdHguRFQsIGR0 LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBm aXBzX2dldF9kdChGSVBTX1BSTkdfQ1RYICpjdHgpCi0rICAgIHsKLSsjaWZkZWYgT1BFTlNTTF9T WVNfV0lOMzIKLSsJRklMRVRJTUUgZnQ7Ci0rI2Vsc2UKLSsJc3RydWN0IHRpbWV2YWwgdHY7Ci0r I2VuZGlmCi0rCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGN0eC0+RFQ7Ci0rCi0rI2lmbmRlZiBHRVRQ SURfSVNfTUVBTklOR0xFU1MKLSsJdW5zaWduZWQgbG9uZyBwaWQ7Ci0rI2VuZGlmCi0rCi0rI2lm ZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7Ci0r CWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKLSsJ YnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZm KTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYp ICYgMHhmZik7Ci0rCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1l ID4+IDI0KSAmIDB4ZmYpOwotKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3TG93RGF0 ZVRpbWUgJiAweGZmKTsKLSsJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRl VGltZSA+PiA4KSAmIDB4ZmYpOwotKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xv d0RhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKChm dC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyNlbHNlCi0rCWdldHRpbWVvZmRheSgm dHYsTlVMTCk7Ci0rCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfc2VjICYgMHhmZik7 Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAmIDB4ZmYpOwot KwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7Ci0r CWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKLSsJ YnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhmZik7Ci0rCWJ1Zls1XSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzZdID0g KHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKLSsJYnVmWzddID0g KHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsKLSsjZW5kaWYKLSsJ YnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpIChjdHgtPmNvdW50ZXIgJiAweGZmKTsKLSsJYnVmWzld ID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDgpICYgMHhmZik7Ci0rCWJ1Zlsx MF0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMTYpICYgMHhmZik7Ci0rCWJ1 ZlsxMV0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMjQpICYgMHhmZik7Ci0r Ci0rCWN0eC0+Y291bnRlcisrOwotKwotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNT Ci0rCXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQoKTsKLSsJYnVmWzEyXSA9ICh1bnNpZ25lZCBj aGFyKSAocGlkICYgMHhmZik7Ci0rCWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4g OCkgJiAweGZmKTsKLSsJYnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAw eGZmKTsKLSsJYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsK LSsjZW5kaWYKLSsgICAgfQotKwotK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFgg KmN0eCwKLSsJCQl1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKQot Kwl7Ci0rCXVuc2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVO R1RIXTsKLSsJdW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCWludCBpOwot KwlpZiAoY3R4LT5lcnJvcikKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5E X1JfUFJOR19FUlJPUik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgtPmtleWVkKQot KwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKLSsJ CXJldHVybiAwOwotKwkJfQotKwlpZiAoIWN0eC0+c2VlZGVkKQotKwkJewotKwkJUkFORGVycihS QU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rCWZvciAoOzspCi0rCQl7Ci0rCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQotKwkJCWZpcHNf Z2V0X2R0KGN0eCk7Ci0rCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4LT5rcyk7Ci0rCQlm b3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQotKwkJCXRtcFtpXSA9IElbaV0g XiBjdHgtPlZbaV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgtPmtzKTsKLSsJCWZvciAo aSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1wW2ldID0gUltpXSBeIElb aV07Ci0rCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOwotKwkJLyogQ29udGlu dW91cyBQUk5HIHRlc3QgKi8KLSsJCWlmIChjdHgtPnNlY29uZCkKLSsJCQl7Ci0rCQkJaWYgKGZp cHNfcHJuZ19mYWlsKQotKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RI KTsKLSsJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5HVEgpKQotKwkJ CQl7Ci0rCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfU1RVQ0sp OwotKwkJCQljdHgtPmVycm9yID0gMTsKLSsJCQkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwot KwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFF U19CTE9DS19MRU5HVEgpOwotKwkJaWYgKCFjdHgtPnNlY29uZCkKLSsJCQl7Ci0rCQkJY3R4LT5z ZWNvbmQgPSAxOwotKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJCWNvbnRpbnVlOwotKwkJ CX0KLSsKLSsJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQl7Ci0rCQkJbWVt Y3B5KG91dCwgUiwgb3V0bGVuKTsKLSsJCQlicmVhazsKLSsJCQl9Ci0rCi0rCQltZW1jcHkob3V0 LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCW91dCArPSBBRVNfQkxPQ0tfTEVOR1RIOwotKwkJ b3V0bGVuIC09IEFFU19CTE9DS19MRU5HVEg7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0r Ci0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19S QU5EX1NJWkVfVCBrZXlsZW4pCi0rCXsKLSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5 bGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0 OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFO RF9TSVpFX1Qgc2VlZGxlbikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2NrKENSWVBU T19MT0NLX1JBTkQpOwotKwlyZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNl ZWRsZW4pOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiBy ZXQ7Ci0rCX0KLSsKLSsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwg RklQU19SQU5EX1NJWkVfVCBjb3VudCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQp OwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0r CX0KLSsKLStpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNS WVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IHNjdHguc2VlZGVkOwotKwlD UllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0KLSsK LSt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQotKwl7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7Ci0rCWZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKLSsJQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19kb19y YW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQotKwl7 Ci0rCUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQg Zmlwc19kb19yYW5kX2FkZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRs ZW4sCi0rCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCi0rCXsKLSsJRklQU19yYW5kX3NlZWQoc2Vl ZCwgc2VlZGxlbik7Ci0rCX0KLSsKLStzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF9maXBz X21ldGg9Ci0rICAgIHsKLSsgICAgZmlwc19kb19yYW5kX3NlZWQsCi0rICAgIEZJUFNfcmFuZF9i eXRlcywKLSsgICAgRklQU19yYW5kX3Jlc2V0LAotKyAgICBmaXBzX2RvX3JhbmRfYWRkLAotKyAg ICBGSVBTX3JhbmRfYnl0ZXMsCi0rICAgIEZJUFNfcmFuZF9zdGF0dXMKLSsgICAgfTsKLSsKLStj b25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKQotK3sKLSsgIHJldHVybiAm cmFuZF9maXBzX21ldGg7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSAvZGV2L251bGwJMjAw OS0xMS0yMCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICsw MTAwCi1AQCAtMCwwICsxLDc3IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lm bmRlZiBIRUFERVJfRklQU19SQU5EX0gKLSsjZGVmaW5lIEhFQURFUl9GSVBTX1JBTkRfSAotKwot KyNpbmNsdWRlICJkZXMuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBf X2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK2ludCBGSVBTX3JhbmRfc2V0 X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKTsK LStpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51 bSk7Ci0raW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9T SVpFX1Qgb3V0bGVuKTsKLSsKLStpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKTsKLSt2b2lk IEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKLStpbnQgRklQU19yYW5kX3NldF9kdCh1bnNpZ25lZCBj aGFyICpkdCk7Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCk7Ci0rCi0rY29uc3QgUkFO RF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCk7Ci0rCi0rI2lmZGVmICBfX2NwbHVzcGx1 cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCi0tLS0gL2Rl di9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAyMjE1ICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDA5LTExLTIzIDA4 OjMzOjMyLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwzNzMgQEAKLSsvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBt ZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKwotKwotK3R5cGVkZWYg c3RydWN0Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsx Nl07Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhl IGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZT IHNwZWMgKi8KLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJ ezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYs MHgxYywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBh ZXNfMTI4X3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSww eDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4 ZTksMHgyMiwweGY5fSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAs MHhjMCwweDU1LAotKwkJIDB4ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0K LSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSww eDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4 ZmF9LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0r CQkJCS8qIFIgKi8KLSsJCXsweDdjLDB4MjIsMHgyYywweGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMs Ci0rCQkgMHgxYywweDljLDB4YjYsMHg0MSwweGE5LDB4ZjMsMHgyMiwweDBkfQotKwl9LAotKwl7 Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSww eDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmYn0sCi0rCQkJ CS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0r CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAq LwotKwkJezB4OGEsMHhhYSwweDAwLDB4MzksMHg2NiwweDY3LDB4NWIsMHhlNSwKLSsJCSAweDI5 LDB4MTQsMHgyOCwweDgxLDB4YTksMHg0ZCwweDRlLDB4Yzd9Ci0rCX0sCi0rCXsKLSsJCQkJLyog RFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkg MHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZjfSwKLSsJCQkJLyogViAqLwot KwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg4 OCwweGRkLDB4YTQsMHg1NiwweDMwLDB4MjQsMHgyMywweGU1LAotKwkJIDB4ZjYsMHg5ZCwweGE1 LDB4N2UsMHg3YiwweDk1LDB4YzcsMHgzYX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJ ezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQs MHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmR9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDA1LDB4MjUsMHg5 MiwweDQ2LDB4NjEsMHg3OSwweGQyLDB4Y2IsCi0rCQkgMHg3OCwweGM0LDB4MGIsMHgxNCwweDBh LDB4NWEsMHg5YSwweGM4fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIz LDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIs MHhiMCwweGU5LDB4MjMsMHg3N30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3 YSwweDU5LDB4MjYsMHhiYywKLSsJCSAweDQ4LDB4ZDksMHgzOCwweGJmLDB4ZjAsMHg4NSwweDhm LDB4ZWF9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4 LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTks MHgyMywweDc4fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHhhZSwweDUzLDB4ODcsMHhlZSwweDhjLDB4ZDksMHgx MiwweGY1LAotKwkJIDB4NzMsMHg1MywweGFlLDB4MDMsMHhmOSwweGQ1LDB4MTMsMHgzM30KLSsJ fSwKLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9Ci0rCQl7 MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSwweDZlLAotKwkJIDB4NDQsMHg2NCww eDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKLSsJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4 NGMsMHg4YiwweDk5LDB4M2J9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2W10g PSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2 OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRi fSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJ CQkvKiBSICovCi0rCQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAot KwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KLSsJfSwKLSsJewot KwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhj MSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGN9LAotKwkJCQkv KiBWICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJ IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8K LSsJCXsweDkyLDB4OGQsMHhiZSwweDA3LDB4ZGQsMHhjNywweDU4LDB4YzAsCi0rCQkgMHg2Ziww eDM1LDB4NDEsMHg5YiwweDE3LDB4YzksMHhiZCwweDlifQotKwl9LAotKwl7Ci0rCQkJCS8qIERU ICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4 YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0ZH0sCi0rCQkJCS8qIFYgKi8KLSsJ CXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4ZDUs MHhkZSwweGY0LDB4NTAsMHhmMywweGI3LDB4MTAsMHg0ZSwKLSsJCSAweGI4LDB4YzYsMHhmOCww eGNmLDB4ZTIsMHhiMSwweGNhLDB4YTJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsw eDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4 N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRlfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHhjZSwweDI5LDB4MDgs MHg0MywweGZjLDB4MzQsMHg0MSwweGU3LAotKwkJIDB4NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiww eDQ2LDB4YjEsMHhiYn0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCww eGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4 MjQsMHg3OCwweGYzLDB4NGZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYs MHhjYSwweGE4LDB4YmYsCi0rCQkgMHg4OSwweGI4LDB4NWUsMHgyZiwweDIyLDB4NTYsMHg5Miww eDJmfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCww eDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4 ZjMsMHhjOX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZl fSwKLSsJCQkJLyogUiAqLwotKwkJezB4MDUsMHhlYiwweDE4LDB4NTIsMHgzNCwweDQzLDB4MDAs MHg0MywKLSsJCSAweDZlLDB4NWEsMHhhNSwweGZlLDB4N2IsMHgzMiwweGM0LDB4MmR9Ci0rCX0s Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSww eDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweGNhfSwK LSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkv KiBSICovCi0rCQl7MHgxNSwweDNjLDB4ZTgsMHhkMSwweDA0LDB4YzcsMHhhZCwweDUwLAotKwkJ IDB4MGIsMHhmMCwweDA3LDB4MTYsMHhlNywweDU2LDB4N2EsMHhlYX0KLSsJfSwKLSt9OwotKwot K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4 MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAotKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3 YSwweDAzLDB4YjcsMHg5ZiwKLSsJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVl LDB4YjUsCi0rCQkgMHgyMSwweDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKLSsK LStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90dltdID0gewotKwl7Ci0rCQkJCS8qIERUICov Ci0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIs MHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsw eDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MzUsMHhj NywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywKLSsJCSAweDgyLDB4NzksMHg5OSwweGZi LDB4ZDAsMHhiMywweDNiLDB4NzJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRh LDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUs MHgzNCwweDc0LDB4OGUsMHg5ZSwweDg5fSwKLSsJCQkJLyogViAqLwotKwkJezB4YzAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg2YywweGY0LDB4NDIsMHg1 ZCwweGM3LDB4MDQsMHgxYSwweDQxLAotKwkJIDB4MjgsMHgyYSwweDc4LDB4YTksMHhiMCwweDEy LDB4YzQsMHg5NX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQx LDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQs MHg4ZSwweDllLDB4OGF9LAotKwkJCQkvKiBWICovCi0rCQl7MHhlMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDE2LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3 ZSwweGI5LDB4MzAsCi0rCQkgMHhkYiwweDY3LDB4NGIsMHhhYywweDJkLDB4ZTEsMHhkMSwweDc1 fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFk LDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUs MHg4Yn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK LSsJCQkJLyogUiAqLwotKwkJezB4MTQsMHg2ZiwweGY1LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgz MCwKLSsJCSAweGJjLDB4NTcsMHhlMiwweDRhLDB4ZjcsMHg0NSwweDYyLDB4MDV9Ci0rCX0sCi0r CXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIw LDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhjfSwKLSsJ CQkJLyogViAqLwotKwkJezB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK LSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBS ICovCi0rCQl7MHg5NiwweGUyLDB4YjQsMHgxZSwweDY2LDB4NWUsMHgwZiwweGE0LAotKwkJIDB4 YzUsMHhjZCwweGEyLDB4MDcsMHhjYywweGI3LDB4OTQsMHg0MH0KLSsJfSwKLSsJewotKwkJCQkv KiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJ CSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDlmLDB4MDZ9LAotKwkJCQkvKiBWICov Ci0rCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZX0sCi0rCQkJCS8qIFIgKi8KLSsJCXsw eDYxLDB4Y2UsMHgxZCwweDZhLDB4NDgsMHg3NSwweDk3LDB4MjgsCi0rCQkgMHg0YiwweDQxLDB4 ZGUsMHgxOCwweDQ0LDB4NGYsMHg1NiwweGVjfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0r CQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhh OSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwN30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKLSsJCQkJLyogUiAqLwotKwkJezB4NTIsMHg4OSww eDU5LDB4NzksMHgyZCwweGFhLDB4MjgsMHhiMywKLSsJCSAweGIwLDB4OGEsMHgzZSwweDcwLDB4 ZmEsMHg3MSwweDU5LDB4ODR9Ci0rCX0sCi0rfTsKLSsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9y bmcoKQotKyAgICB7Ci0rICAgIGFlc18xOTJfdHZbMF0uVlswXSsrOwotKyAgICB9Ci0rCi0rI2Rl ZmluZSBmaXBzX3JhbmRfdGVzdChrZXksIHR2KSBcCi0rCWRvX3JhbmRfdGVzdChrZXksIHNpemVv ZiBrZXksIHR2LCBzaXplb2YodHYpL3NpemVvZihBRVNfUFJOR19UVikpCi0rCi0rc3RhdGljIGlu dCBkb19yYW5kX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAotKwkJCUFFU19Q Uk5HX1RWICp0diwgaW50IG50dikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwlpbnQg aTsKLSsJaWYgKCFGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbikpCi0rCQlyZXR1cm4gMDsK LSsJZm9yIChpID0gMDsgaSA8IG50djsgaSsrKQotKwkJewotKwkJRklQU19yYW5kX3NlZWQodHZb aV0uViwgMTYpOwotKwkJRklQU19yYW5kX3NldF9kdCh0dltpXS5EVCk7Ci0rCQlGSVBTX3JhbmRf Ynl0ZXMoUiwgMTYpOwotKwkJaWYgKG1lbWNtcChSLCB0dltpXS5SLCAxNikpCi0rCQkJcmV0dXJu IDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3Ju ZygpCi0rCXsKLSsJRklQU19yYW5kX3Jlc2V0KCk7Ci0rCWlmICghRklQU19yYW5kX3Rlc3RfbW9k ZSgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFmaXBzX3JhbmRfdGVz dChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KQotKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18xOTJf a2V5LCBhZXNfMTkyX3R2KQotKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNf MjU2X3R2KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfcmFuZF9yZXNl dCgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCi0tLS0gL2Rldi9u dWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAyMjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAwOS0xMS0yMyAwODozMjozMS4w MDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMjQ4IEBACi0rLyogQ29weXJpZ2h0IChDKSAxOTk1 LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3Jp dHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1w bGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBT U0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5v bi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25z IGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8g YWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwK LSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUg U1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlz IGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhl IGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29w eXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5v dGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhp cyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZl biBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJy YXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3Nh Z2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9y IHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29m dHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSki Ci0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUg cm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0 b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mg c3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhl IGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFj a25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5Z IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3Ry aWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsg KiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBj b2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRp c3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNl Ll0KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAg ICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi Ci0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K LSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8u aD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJO byBGSVBTIFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UK LSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVu c2lnbmVkIGNoYXIgRFRbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBj aGFyIFJbMTZdOwotKwl9IEFFU19QUk5HX01DVDsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBh ZXNfMTI4X21jdF9rZXlbMTZdID0KLSsJezB4OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4 MzQsMHhiNSwKLSsJIDB4ZDgsMHgyYiwweGU4LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07Ci0r Ci0rc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwot Kwl7MHg2MywweDc2LDB4YmIsMHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAotKwkgMHg2NywweGM5 LDB4MjUsMHhmYSwweDcwLDB4MWYsMHgxMSwweGFjfSwKLSsJCQkvKiBWICovCi0rCXsweDU3LDB4 MmMsMHg4ZSwweDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcsCi0rCSAweDdlLDB4NzQsMHhmYiwweGRk LDB4YzQsMHg5NSwweDAxLDB4ZDF9LAotKwkJCS8qIFIgKi8KLSsJezB4NDgsMHhlOSwweGJkLDB4 MGQsMHgwNiwweGVlLDB4MTgsMHhmYiwKLSsJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZj LDB4OWIsMHg3M30KLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tl eVsyNF0gPQotKwl7MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAotKwkg MHg0ZCwweDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAotKwkgMHhiYywweDM1LDB4 NTEsMHgxNiwweDZiLDB4YWUsMHg5MywweDhhfTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfTUNUIGFl c18xOTJfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4 OTEsMHg1YSwweGEzLDB4YzksCi0rCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2MywweDE1 LDB4NTJ9LAotKwkJCS8qIFYgKi8KLSsJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSwweDllLDB4 OTAsMHg2NCwKLSsJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0r CQkJLyogUiAqLwotKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiwweDIxLAot KwkgMHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQotK307Ci0rCi0rc3Rh dGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9Ci0rCXsweDliLDB4MDUsMHhj OCwweDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAweGE2LDB4M2EsMHhhOCwweGNiLDB4NGUs MHg3MSwweGIyLDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhiNCwweGY2LDB4 NmQsCi0rCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9OwotKwotK3N0 YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4 MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKLSsJIDB4NjIsMHg2ZCwweDA0 LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJLyogViAqLwotKwl7MHg0ZiwweGNkLDB4 YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAotKwkgMHgzZSwweDBlLDB4NTYsMHg0NCwweDU5 LDB4ZTgsMHg4MywweGNhfSwKLSsJCQkvKiBSICovCi0rCXsweGM4LDB4ODcsMHhjMiwweDYxLDB4 NWIsMHhkMCwweGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4NWIsMHhkNSwweGYx LDB4OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIs aW50IG4pCi0rICAgIHsKLSsgICAgd2hpbGUobi0tID4gMCkKLSsJewotKwlwcmludGYoIiAlMDJ4 IiwqYisrKTsKLSsJfQotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgY29tcGFyZShjb25zdCB1bnNp Z25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsCi0rCQkgICAg aW50IG4pCi0rICAgIHsKLSsgICAgaW50IGk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgbiA7ICsr aSkKLSsJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQotKwkgICAgewotKwkgICAgcHV0cygi UmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAgICBkdW1wKHJlc3VsdCxuKTsKLSsJICAg IHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Ci0rCSAgICBkdW1wKGV4cGVjdGVk LG4pOwotKwkgICAgcHV0Y2hhcignXG4nKTsKLSsJICAgIEVYSVQoMSk7Ci0rCSAgICB9Ci0rICAg IH0KLSsKLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBr ZXlsZW4sIEFFU19QUk5HX01DVCAqdHYpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZb MTZdLCBkdFsxNl07Ci0rICAgIGludCBpLCBqOwotKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsg ICAgRklQU19yYW5kX3Rlc3RfbW9kZSgpOwotKyAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtl eWxlbik7Ci0rICAgIEZJUFNfcmFuZF9zZWVkKHR2LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwg dHYtPkRULCAxNik7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwl7Ci0rICAg IAlGSVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJRklQU19yYW5kX2J5dGVzKGJ1ZiwgMTYpOwotKwkv KiBJbmNyZW1lbnQgRFQgKi8KLSsJZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQotKwkJewotKwkJ ZHRbal0rKzsKLSsJCWlmIChkdFtqXSkKLSsJCQlicmVhazsKLSsJCX0KLSsJfQotKwotKyAgICBj b21wYXJlKGJ1Zix0di0+UiwgMTYpOwotKyAgICB9Ci0rCi0raW50IG1haW4oKQotKwl7Ci0rCXJ1 bl90ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7Ci0rCXByaW50Zigi RklQUyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAy NCwgJmFlc18xOTJfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIp OwotKwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlw cmludGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0r I2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlw cy9maXBzX3JzYV9zZWxmdGVzdC5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMu NTM0MDAyMjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBz X3JzYV9zZWxmdGVzdC5jCTIwMDktMTEtMjMgMDg6MzM6MzIuMDAwMDAwMDAwICswMTAwCi1AQCAt MCwwICsxLDQ0MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzLTIw MDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1 ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBuW10gPQotKyJceDAwXHhCQlx4 RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4QThceDcxIgot KyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3 NFx4NTRceEY1IgotKyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYxXHhF QVx4NDhceENFXHhFQlx4NkZceENEIgotKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4NjBceEUxXHhF Q1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgotKyJceDdGXHhBRlx4QjhceEUwXHhB M1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgotKyJceDg0XHhF RVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5 IgotKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3QVx4OUFceDQx XHhGNlx4QzFceDY4IgotKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2 XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgotKyJceENCIjsKLSsKLSsKLStzdGF0aWMgaW50IHNl dHJzYWtleShSU0EgKmtleSkKLSsgICAgewotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBlW10gPSAiXHgxMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRbXSA9 Ci0rIlx4MDBceEE1XHhEQVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5XHg4OFx4REJc eDMwXHhDMVx4Q0QiCi0rIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRc eDgxXHgzOFx4MDFceDU3XHg5Nlx4NDEiCi0rIlx4QjJceDk0XHgxMFx4QjNceEM3XHg5OVx4OERc eDZCXHhDNFx4NjVceDc0XHg1RVx4NUNceDM5XHgyNlx4NjkiCi0rIlx4RDZceDg3XHgwRFx4QTJc eEMwXHg4Mlx4QTlceDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCi0rIlx4Qzlc eDdGXHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4 OTQiCi0rIlx4NDRceEU1XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNceDhEXHhDM1x4 QkVceEY1XHhEMlx4MEEiCi0rIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFceDNFXHhERFx4 RkJceEUxXHhBMVx4Q0VceENDXHg0OFx4OTQiCi0rIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4 ODhceDNGXHhFNFx4NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCi0rIlx4QzEiOwotKwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPQotKyJceDAwXHhFRVx4Q0ZceEFFXHg4 MVx4QjFceEI5XHhCM1x4QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgotKyJceDAxXHg5 OVx4RUJceDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2 IgotKyJceDMyXHgxMlx4NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgyOFx4RkFceEU3 XHhBQVx4MDRceDBBIgotKyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4MzlceDc1 XHg0MVx4QkFceDJBXHg1OFx4RkJceDY1IgotKyJceDk5IjsKLSsKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgcVtdID0KLSsiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3XHhGNFx4NTNc eEY2XHgzNFx4MTJceDMzXHhFQVx4QUFceEQxXHhEOSIKLSsiXHgzNVx4M0ZceDZDXHg0Mlx4RDBc eDg4XHg2Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKLSsiXHg4Nlx4OThc eDQwXHhCNFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIK LSsiXHhDRlx4Q0VceDMzXHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFceEU3XHgwMFx4 QUZceDQ2XHgxNSIKLSsiXHgwMyI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGRtcDFbXSA9Ci0rIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJceDQw XHgyM1x4RkNceEQ2XHg5QVx4NUEiCi0rIlx4RUJceDA3XHhERFx4RENceDAxXHg4M1x4QTRceEQw XHhBQ1x4OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0UiCi0rIlx4RDlceDQ5XHgwOVx4NzVceEVB XHhCN1x4NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCi0rIlx4MjBceDJC XHgzOFx4RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEi OwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQotKyJceDQ3XHgx RVx4MDJceDkwXHhGRlx4MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4Nlx4NENceEE5 IgotKyJceDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRD XHgzMVx4NDZceEE3IgotKyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMx XHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgotKyJceDFCXHg5OVx4QTRceDk1XHg4NFx4OThceDA3 XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKLSsgICAgCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9Ci0rIlx4MDBceEIwXHg2Q1x4NEZceERBXHhC Qlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCi0rIlx4QjNceDgwXHhG Mlx4NzFceEY3XHgzNFx4NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhFMlx4MTEiCi0r Ilx4OUZceEM5XHg4Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2N1x4QkZceDQw XHgyQlx4NEUiCi0rIlx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVE XHhGQlx4MjVceDc5XHg4MFx4MzkiCi0rIlx4RjciOwotKwotKyAgICBrZXktPm4gPSBCTl9iaW4y Ym4obiwgc2l6ZW9mKG4pLTEsIGtleS0+bik7Ci0rICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBz aXplb2YoZSktMSwga2V5LT5lKTsKLSsgICAga2V5LT5kID0gQk5fYmluMmJuKGQsIHNpemVvZihk KS0xLCBrZXktPmQpOwotKyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6ZW9mKHApLTEsIGtl eS0+cCk7Ci0rICAgIGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSktMSwga2V5LT5xKTsK LSsgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihkbXAxKS0xLCBrZXktPmRt cDEpOwotKyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6ZW9mKGRtcTEpLTEsIGtl eS0+ZG1xMSk7Ci0rICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCkt MSwga2V5LT5pcW1wKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIEZJUFNfY29y cnVwdF9yc2EoKQotKyAgICB7Ci0rICAgIG5bMF0rKzsKLSsgICAgfQotKwotKy8qIEtub3duIEFu c3dlciBUZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBrZXkgc2lnbmlu ZwotKyAqIGthdF90YnMuCi0rICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X3Ric1tdID0gIk9wZW5TU0wgRklQUyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQiOwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsKLSsgIDB4MkQs IDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYsIDB4 REEsIDB4MEYsCi0rICAweDAxLCAweDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAweDI3LCAw eEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAotKyAgMHhGNCwgMHhCRiwgMHg0QSwgMHg3NCwg MHgzOSwgMHg1MSwgMHhCQiwgMHhFOCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywKLSsgIDB4RDEs IDB4REYsIDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4QzcsIDB4ODMsIDB4 RDUsIDB4NEMsCi0rICAweDdGLCAweDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAw eDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3LAotKyAgMHgwRCwgMHhBOSwgMHgyOCwgMHg1Niwg MHg3MywgMHhEOSwgMHgwNywgMHhFMywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwKLSsgIDB4QjYs IDB4RjMsIDB4RjIsIDB4NUUsIDB4NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcsIDB4RjAsIDB4 QzUsIDB4NDUsCi0rICAweDBBLCAweEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAw eDJBLCAweDBGLCAweEY4LCAweEI3LCAweDMxLAotKyAgMHhENiwgMHg1NSwgMHhFNCwgMHg2Niwg MHg3OCwgMHg4MSwgMHhENCwgMHhFNiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwKLSsgIDB4MjMs IDB4QjUsIDB4N0YsIDB4REMsIDB4MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUsIDB4MjAsIDB4 MjUsIDB4ODQsCi0rICAweDI2LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAw eEE5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEy MjRbXSA9IHsKLSsgIDB4MzksIDB4NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTksIDB4MzMsIDB4 RUQsIDB4RUYsIDB4QzUsIDB4NTgsIDB4QTcsCi0rICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAw eDUwLCAweDlBLCAweDJDLCAweDgyLCAweDk4LCAweDA4LCAweDk1LCAweEZBLAotKyAgMHhCMSwg MHg5RSwgMHhEMiwgMHg1NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgx RiwgMHg1NywKLSsgIDB4MzAsIDB4OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIsIDB4NTIsIDB4 MzcsIDB4NTUsIDB4NTQsIDB4MUMsIDB4ODksCi0rICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAw eDY0LCAweDkwLCAweDJFLCAweDE2LCAweENDLCAweDg2LCAweDA1LCAweEVFLAotKyAgMHhCMSwg MHhFNiwgMHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhB QiwgMHgyMiwKLSsgIDB4MTUsIDB4NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIsIDB4NzcsIDB4 NDAsIDB4NjQsIDB4NjIsIDB4RDEsIDB4QjUsCi0rICAweDM3LCAweDFFLCAweEUwLCAweDNELCAw eEE4LCAweEY5LCAweEQyLCAweEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAotKyAgMHg1OCwg MHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhF QSwgMHgyRCwKLSsgIDB4QzgsIDB4NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUsIDB4QjAsIDB4 NkEsIDB4QUYsIDB4OTUsIDB4QzAsIDB4MDAsCi0rICAweDU0LCAweDc2LCAweDNELCAweDBDLCAw eDlDLCAweEIyLCAweEVFLCAweEMwCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKLSsgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4 NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCi0rICAweDAwLCAw eDk3LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAweDlBLCAweEYz LCAweDhGLAotKyAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhF MiwgMHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKLSsgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4 OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCi0rICAweDdELCAw eDJFLCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAweDQ5LCAweDQ3 LCAweDA1LAotKyAgMHhBQiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhG NSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKLSsgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMsIDB4 NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCi0rICAweDBCLCAw eDQ3LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAweDU2LCAweENE LCAweDlGLAotKyAgMHgyMSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3NSwgMHg1 MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKLSsgIDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4 QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCi0rICAweDcyLCAw eEY0LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJELCAweDFDCi0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEzODRbXSA9IHsKLSsgIDB4NDAsIDB4 RkIsIDB4QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4MzEsIDB4QTgs IDB4RjIsCi0rICAweEVDLCAweDFDLCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlD LCAweDU3LCAweDQ1LCAweENELCAweDVFLAotKyAgMHg4NiwgMHgwMCwgMHhGNywgMHgyNSwgMHg3 OCwgMHhERSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKLSsgIDB4QUEsIDB4 MjUsIDB4RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4NzgsIDB4MjMs IDB4N0YsCi0rICAweDZGLCAweDAyLCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2 LCAweDMxLCAweERDLCAweDQyLCAweDZDLAotKyAgMHhCMiwgMHg0NCwgMHhFNSwgMHg0RCwgMHg2 NiwgMHhBMiwgMHhFNiwgMHg3MSwgMHhGMywgMHhBQywgMHg0RiwgMHhGQiwKLSsgIDB4OTEsIDB4 Q0EsIDB4RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4RDksIDB4M0Qs IDB4MkYsCi0rICAweDNBLCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERB LCAweDMyLCAweEFELCAweDQyLCAweDg5LAotKyAgMHg5OCwgMHg4QiwgMHgzOSwgMHg0NCwgMHhG MCwgMHhGQywgMHgzOCwgMHhBQywgMHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKLSsgIDB4NDgsIDB4 RjYsIDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQs IDB4NTUsCi0rICAweDQ4LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYx Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJb XSA9IHsKLSsgIDB4MDcsIDB4MUUsIDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4RTYsIDB4RTYs IDB4NTcsIDB4QUUsIDB4NjMsIDB4OEMsCi0rICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5 LCAweEJCLCAweEYyLCAweEM2LCAweDhGLCAweDEyLCAweDUzLCAweDlBLAotKyAgMHg5QiwgMHg1 NCwgMHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwg MHhERCwKLSsgIDB4NEIsIDB4RjMsIDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4N0MsIDB4MjQs IDB4NjAsIDB4NzksIDB4MjMsIDB4MzksCi0rICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4 LCAweEU5LCAweDlBLCAweDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAotKyAgMHg3QywgMHhF MywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwg MHg2MSwKLSsgIDB4NTcsIDB4RTMsIDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4MEMsIDB4MkEs IDB4MjAsIDB4QjAsIDB4ODUsIDB4MTMsCi0rICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMy LCAweDE1LCAweEM4LCAweEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYzLAotKyAgMHgyRCwgMHg2 MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwg MHhGRSwKLSsgIDB4NzYsIDB4RjIsIDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4Q0EsIDB4RkUs IDB4N0YsIDB4ODAsIDB4QzIsIDB4ODgsCi0rICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2 LCAweEM5LCAweDE0LCAweDhCCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1NIQTFbXSA9IHsKLSsgIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEs IDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCi0rICAweDRBLCAweEZELCAweDFB LCAweDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhELCAweDlCLAot KyAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1NSwg MHg3NywgMHg5MCwgMHhDRiwKLSsgIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEs IDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4RjgsCi0rICAweDgwLCAweEQxLCAweDhC LCAweEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhCLCAweEExLAot KyAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgyNCwgMHhBMSwg MHg0OSwgMHgzMCwgMHhCQSwKLSsgIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIs IDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCi0rICAweEJDLCAweDI5LCAweEE4 LCAweDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1LCAweDVGLAot KyAgMHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgyMSwgMHhDRiwg MHgyMywgMHg0OCwgMHgxRiwKLSsgIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0Ys IDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4OTUsCi0rICAweERGLCAweEYxLCAweDVG LCAweDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1NIQTIyNFtdID0gewotKyAgMHg2MiwgMHhBQSwgMHg3OSwgMHhB OSwgMHgxOCwgMHgwRSwgMHg1RiwgMHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhGOSwKLSsgIDB4 MjUsIDB4QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTks IDB4MTgsIDB4OEQsCi0rICAweDVCLCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAweDA4LCAweDA4 LCAweDYwLCAweEM1LCAweDFBLCAweEM1LCAweDg5LAotKyAgMHgwOCwgMHhFMiwgMHgxQiwgMHhC RCwgMHg2MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhDRCwKLSsgIDB4 QTQsIDB4MDIsIDB4QUQsIDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUs IDB4NDEsIDB4RTUsCi0rICAweEVFLCAweDFGLCAweDhELCAweDdFLCAweDA4LCAweDE2LCAweEE2 LCAweEUxLCAweDVFLCAweDBCLCAweEE5LCAweENDLAotKyAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4 NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKLSsgIDB4 MEIsIDB4NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4Mjgs IDB4M0UsIDB4QjIsCi0rICAweDU4LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAweEUwLCAweDky LCAweEUyLCAweEMwLCAweDY2LCAweEU2LCAweDM1LAotKyAgMHhEOSwgMHg3OSwgMHg3RiwgMHgx NywgMHg1RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKLSsgIDB4 NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7Ci0rICAweDBELCAw eDU1LCAweEUyLCAweEFBLCAweDgxLCAweERCLCAweDhFLCAweDgyLCAweDA1LCAweDE3LCAweEE1 LCAweDIzLAotKyAgMHhFNywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4 MSwgMHgyMCwgMHg3QiwgMHhBQSwgMHgyMywKLSsgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4 NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCi0rICAweDk4LCAw eDJELCAweDY5LCAweDg0LCAweEJGLCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAweDU4LCAweEIy LCAweDZFLAotKyAgMHgyQywgMHg0NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhF OCwgMHg2QSwgMHg5MCwgMHgyRCwgMHgxOCwKLSsgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4 MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCi0rICAweEJFLCAw eDIyLCAweEM3LCAweEQzLCAweEVDLCAweEMzLCAweDA5LCAweDVELCAweEJGLCAweEUyLCAweDgw LCAweDNBLAotKyAgMHg3QywgMHg4NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1 QywgMHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKLSsgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYsIDB4 QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCi0rICAweDI3LCAw eDQ4LCAweDJCLCAweEY1LCAweEFCLCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAweDkwLCAweDI3 LCAweDkwLAotKyAgMHhCRCwgMHg0NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhDMCwgMHg3 QQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEzODRbXSA9 IHsKLSsgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4 MjcsIDB4RUYsIDB4RTYsIDB4MUYsCi0rICAweEQyLCAweDkxLCAweDY4LCAweDU5LCAweDA0LCAw eEFFLCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAotKyAgMHg2RiwgMHgyMiwg MHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwgMHg1RCwgMHg1 QywKLSsgIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4 NUQsIDB4QTksIDB4QTYsIDB4NTUsCi0rICAweDY1LCAweDNFLCAweEQ5LCAweDJELCAweDAyLCAw eDM4LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2LCAweENGLAotKyAgMHg4MiwgMHhERCwg MHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwgMHgzMCwgMHhD MiwKLSsgIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4 RTIsIDB4N0QsIDB4RUIsIDB4OEMsCi0rICAweEZGLCAweDk1LCAweEU5LCAweDZBLCAweDFDLCAw eDNELCAweDRELCAweEJGLCAweDhGLCAweDhCLCAweDlDLCAweENELAotKyAgMHhFQSwgMHg4NSwg MHhFRSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhG MSwKLSsgIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4 MUUsIDB4MzcsIDB4REMsIDB4MDQsCi0rICAweEJELCAweDMxLCAweEEyLCAweDJGLCAweEIzLCAw eDM1LCAweDU2LCAweEJGCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1NIQTUxMltdID0gewotKyAgMHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwg MHhDQSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwgMHhDRiwKLSsgIDB4NDksIDB4MjUsIDB4NEEs IDB4QTEsIDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCi0r ICAweDE1LCAweEVBLCAweDVDLCAweEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2LCAweDgyLCAw eDZCLCAweDMyLCAweEYxLAotKyAgMHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwg MHg5QSwgMHhCNiwgMHg0QywgMHg1NCwgMHg5RiwgMHhEOCwKLSsgIDB4OEQsIDB4Q0MsIDB4QUMs IDB4OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCi0r ICAweDgwLCAweEUyLCAweEJDLCAweERELCAweDY3LCAweDJCLCAweEQ5LCAweDNGLCAweEU0LCAw eDc1LCAweDkyLCAweDZCLAotKyAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwg MHgzMywgMHhERiwgMHgxQiwgMHgxRCwgMHg0NywgMHhFNiwKLSsgIDB4NTksIDB4NTYsIDB4QTUs IDB4QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCi0r ICAweDZGLCAweDBFLCAweDJCLCAweDMxLCAweDlELCAweEY3LCAweDdGLCAweEIyLCAweDY0LCAw eDcxLCAweEUwLCAweDJELAotKyAgMHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwg MHhERiwgMHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5MSwKLSsgIDB4REYsIDB4NzAsIDB4MTQs IDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7Ci0rICAweDg2LCAweEI0LCAweDE4LCAw eEJBLCAweEQxLCAweDgwLCAweEI2LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAweERGLAotKyAg MHhFOSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhD NCwgMHhCMiwgMHg3NSwKLSsgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4 MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMsCi0rICAweDM1LCAweEUyLCAweEFBLCAw eDBCLCAweDVDLCAweEY4LCAweDM4LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAweDk3LAotKyAg MHg3MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0QiwgMHgz OCwgMHhCRSwgMHhENiwKLSsgIDB4NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4 MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTksCi0rICAweEVFLCAweDUxLCAweENDLCAw eDkyLCAweERELCAweEJDLCAweDYzLCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAweEQ3LAotKyAg MHg2RiwgMHg0QywgMHgzQywgMHgzNywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwgMHg3RCwgMHgy NCwgMHgxQywgMHg5OSwKLSsgIDB4NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4 OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4NzYsCi0rICAweDhFLCAweDZFLCAweENBLCAw eDdFLCAweDRFLCAweDE0LCAweEJBLCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAweDY3LAotKyAg MHhBMywgMHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1NltdID0gewotKyAg MHg3RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2 NCwgMHg1NCwgMHg4OSwKLSsgIDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIsIDB4OTYsIDB4 NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQsCi0rICAweEVBLCAweEEyLCAweDJELCAw eDVDLCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAweENGLAotKyAg MHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3 QiwgMHhDOCwgMHg5QiwKLSsgIDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAsIDB4ODgsIDB4 NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4NEIsCi0rICAweDAwLCAweDg1LCAweEYzLCAw eERELCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAweDk4LAotKyAg MHhBRCwgMHg0RSwgMHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1 OSwgMHgwMSwgMHhFQywKLSsgIDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUsIDB4NjMsIDB4 NzYsIDB4ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4OEMsCi0rICAweDMzLCAweDFELCAweDgyLCAw eDhDLCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAotKyAg MHgyMSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhG MCwgMHg1QiwgMHhEQywKLSsgIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEsIDB4MjksIDB4 OTQsIDB4ODAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkz MV9TSEEzODRbXSA9IHsKLSsgIDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4 MTEsIDB4MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4N0IsCi0rICAweEYyLCAweDgyLCAweDhFLCAw eDk5LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAotKyAg MHhFNiwgMHg0RiwgMHg1RSwgMHgwQSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwgMHhCOSwgMHhC RSwgMHgyRSwgMHhFMywKLSsgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4 OUMsIDB4OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4RjYsCi0rICAweDU3LCAweEMyLCAweEIwLCAw eDA4LCAweDUxLCAweDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAotKyAg MHhEOCwgMHg2OSwgMHhFOSwgMHhBQiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwgMHgxRSwgMHg2 RCwgMHg4RCwgMHhGMSwKLSsgIDB4M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4 MkIsIDB4RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4NzksCi0rICAweDI0LCAweDIyLCAweEU0LCAw eEI3LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAotKyAg MHgwRSwgMHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwgMHhDNSwgMHgx MiwgMHg0NCwgMHgzNSwKLSsgIDB4RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4 MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQsCi0rICAweEUyLCAweENELCAweDg1LCAw eERCLCAweDczLCAweDgyLCAweDY1LCAweDI4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7Ci0rICAweEE2LCAweDY1LCAweEEyLCAw eDc3LCAweDRGLCAweEIzLCAweDg2LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAweDYzLAotKyAg MHhGQywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhFMSwgMHhE OSwgMHhEQSwgMHhBQywKLSsgIDB4RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4 OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcsCi0rICAweDNBLCAweEJELCAweDVFLCAw eDUzLCAweDA5LCAweDRBLCAweEU2LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAweDI4LAotKyAg MHhBMCwgMHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywgMHhGQSwgMHhD NywgMHhGOCwgMHhDNSwKLSsgIDB4NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4 QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4QUYsCi0rICAweDE3LCAweDBFLCAweEUwLCAw eEJGLCAweDc5LCAweEY2LCAweDA0LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAweEQwLAotKyAg MHhDRSwgMHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwgMHg4RiwgMHg0 NiwgMHg1RiwgMHgwOSwKLSsgIDB4OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4 RTAsIDB4RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4N0MsCi0rICAweDM2LCAweDM1LCAweDIxLCAw eDMxLCAweEMzLCAweEZELCAweDkyLCAweDQyLCAweDExLCAweDMwLCAweDcxLCAweDFCLAotKyAg MHg2MCwgMHg4MywgMHgxOCwgMHg4OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMwotK307Ci0rCi0r Ci0raW50IEZJUFNfc2VsZnRlc3RfcnNhKCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJUlNBICpr ZXk7Ci0rCUVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCi0rCWlmICgoa2V5PVJTQV9uZXcoKSkgPT0g TlVMTCkKLSsJCWdvdG8gZXJyOwotKwlzZXRyc2FrZXkoa2V5KTsKLSsJaWYgKChwaz1FVlBfUEtF WV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9hc3NpZ25fUlNB KHBrLCBrZXkpOwotKwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ri cywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JT QV9TSEExKSwKLSsJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJ CQkJIlJTQSBTSEExIFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRf UlNBX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hBMjI0KSwKLSsJCQkJRVZQX3NoYTIyNCgpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTIyNCBQS0NTIzEiKSkKLSsJ CWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywg c2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRfUlNB X1NIQTI1NiksCi0rCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwK LSsJCQkJIlJTQSBTSEEyNTYgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJ CWthdF9SU0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAotKwkJCQlFVlBfc2hhMzg0 KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBMzg0IFBLQ1MjMSIp KQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGth dF9SU0FfU0hBNTEyKSwKLSsJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BL Q1MxLAotKwkJCQkiUlNBIFNIQTUxMiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJyOwotKwotKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTEpLAotKwkJ CQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEExIFBT UyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyMjQsIHNp emVvZihrYXRfUlNBX1BTU19TSEEyMjQpLAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhf RkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTIyNCBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjU2 KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJT QSBTSEEyNTYgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNT X1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMzg0IFBTUyIpKQotKwkJZ290 byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVvZihrYXRfUlNB X1BTU19TSEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNT LAotKwkJCQkiUlNBIFNIQTUxMiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK LSsJCQlrYXRfUlNBX1g5MzFfU0hBMSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEExKSwKLSsJCQlF VlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEExIFg5MzEi KSkKLSsJCWdvdG8gZXJyOwotKwkvKiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQgaW4gWDkuMzEg Ki8KLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfWDkz MV9TSEEyNTYpLAotKwkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAot KwkJCSJSU0EgU0hBMjU2IFg5MzEiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRf UlNBX1g5MzFfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCi0rCQkJRVZQX3No YTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEzODQgWDkzMSIp KQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEE1MTIsIHNpemVv ZihrYXRfUlNBX1g5MzFfU0hBNTEyKSwKLSsJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxB R19QQURfWDkzMSwKLSsJCQkiUlNBIFNIQTUxMiBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsKLSsK LSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsK LSsJZWxzZSBpZiAoa2V5KQotKwkJUlNBX2ZyZWUoa2V5KTsKLSsJcmV0dXJuIHJldDsKLSsJfQot KwotKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCi1kaWZmIC11cCAvZGV2L251bGwgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCi0tLS0gL2Rldi9u dWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAyMjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMDktMTEtMjMgMDg6MzI6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDI4MSBAQAotKy8qIGNyeXB0by9yc2EvcnNhX2dl bi5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2Fn ZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28g YXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5 IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFz Ci0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0 cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2Rl OyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNs dWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJp Z2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhA Y3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydz LCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUg bm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9k dWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBh dXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUg aW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0r ICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhl IHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1l dDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dy YXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0r ICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICog NC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0 aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlv biBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNy eXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJ QyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAq IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0r ICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1Ymxp Y2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBj YW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBj b3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2lu Y2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3Rk aW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHRpbWUuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rCi0rZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7Ci0rI2VuZGlm Ci0rCi0rLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCi0rCi0r aW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwg QklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklH TlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0 IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5f R0VOQ0IgKmNiKQotKwl7Ci0rCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9 TlVMTDsKLSsJQk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxMOwotKwotKwlpZiAoIXJzYSkgCi0r CQlnb3RvIGVycjsKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkgCi0rCQln b3RvIGVycjsKLSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCi0rCXIwID0gQk5fQ1RYX2dldChjdHgp OwotKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIz ID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAocjMgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwot KwlpZiAoIXJzYS0+ZSkKLSsJCXsKLSsJCXJzYS0+ZSA9IEJOX2R1cChlKTsKLSsJCWlmICghcnNh LT5lKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwllbHNlCi0rCQllID0gcnNhLT5lOwotKwotKwkv KiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNh bi4KLSsJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBh cmFtZXRlcnMuCi0rCSAqLwotKwotKwlpZiAoWHAgJiYgIXJzYS0+cCkKLSsJCXsKLSsJCXJzYS0+ cCA9IEJOX25ldygpOwotKwkJaWYgKCFyc2EtPnApCi0rCQkJZ290byBlcnI7Ci0rCi0rCQlpZiAo IUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAotKwkJCQkJWHAsIFhwMSwg WHAyLCBlLCBjdHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKFhxICYmICFy c2EtPnEpCi0rCQl7Ci0rCQlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJCWlmICghcnNhLT5xKQotKwkJ CWdvdG8gZXJyOwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBx MiwKLSsJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7Ci0rCQl9 Ci0rCi0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7 Ci0rCQlCTl9DVFhfZnJlZShjdHgpOwotKwkJcmV0dXJuIDI7Ci0rCQl9Ci0rCi0rCS8qIFNpbmNl IGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAK LSsJICogY29tcG9uZW50cy4KLSsJICovCi0rCi0rCS8qIGNhbGN1bGF0ZSBuICovCi0rCXJzYS0+ bj1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+biA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICgh Qk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyog Y2FsY3VsYXRlIGQgKi8KLSsJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkK LSsJCWdvdG8gZXJyOwkvKiBwLTEgKi8KLSsJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVl X29uZSgpKSkKLSsJCWdvdG8gZXJyOwkvKiBxLTEgKi8KLSsJaWYgKCFCTl9tdWwocjAscjEscjIs Y3R4KSkKLSsJCWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCi0rCi0rCWlmICghQk5fZ2NkKHIz LCByMSwgcjIsIGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9kaXYocjAsIE5VTEws IHIwLCByMywgY3R4KSkKLSsJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KLSsKLSsJ Y3R4MiA9IEJOX0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgyKQotKwkJZ290byBlcnI7Ci0rCi0rCXJz YS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLwotKwlpZiAo cnNhLT5kID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgbW9kIChw LTEpICovCi0rCXJzYS0+ZG1wMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQot KwkJZ290byBlcnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKLSsJ CWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KLSsJcnNhLT5kbXEx PUJOX25ldygpOwotKwlpZiAocnNhLT5kbXExID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYg KCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8q IGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KLSsJcnNhLT5pcW1wPUJOX21vZF9pbnZl cnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsKLSsKLSsJZXJyOgotKwlpZiAoY3R4KQotKwkJ ewotKwkJQk5fQ1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsJaWYg KGN0eDIpCi0rCQlCTl9DVFhfZnJlZShjdHgyKTsKLSsJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNh bGxzIHN1Y2Nlc3NmdWwgKi8KLSsJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKLSsJCXJl dHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwotK2ludCBSU0FfWDkzMV9nZW5lcmF0 ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpj YikKLSsJewotKwlpbnQgb2sgPSAwOwotKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsK LSsJQk5fQ1RYICpjdHggPSBOVUxMOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKGJp dHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0rCSAgICB7Ci0rCSAgICBG SVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hP UlQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlmIChiaXRzICYgMHhmZikKLSsJ ICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBT X1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0Zf UlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0r CSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygp OwotKwlpZiAoIWN0eCkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwot KwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCWlmICgh Qk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQotKwkJZ290byBlcnJvcjsK LSsKLSsJcnNhLT5wID0gQk5fbmV3KCk7Ci0rCXJzYS0+cSA9IEJOX25ldygpOwotKwlpZiAoIXJz YS0+cCB8fCAhcnNhLT5xKQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogR2VuZXJhdGUgdHdvIHBy aW1lcyBmcm9tIFhwLCBYcSAqLwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgo cnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKLSsJCQkJCWUsIGN0eCwgY2IpKQot KwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+ cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJCWdv dG8gZXJyb3I7Ci0rCi0rCS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlz IGNhbGwgd2lsbCBqdXN0IGRlcml2ZQotKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCi0r CSAqLwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEws IE5VTEwsCi0rCQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkK LSsJCWdvdG8gZXJyb3I7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZighZmlwc19jaGVj a19yc2EocnNhKSkKLSsJICAgIGdvdG8gZXJyb3I7Ci0rI2VuZGlmCi0rCi0rCW9rID0gMTsKLSsK LSsJZXJyb3I6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9D VFhfZnJlZShjdHgpOwotKwkJfQotKwotKwlpZiAob2spCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0 dXJuIDA7Ci0rCi0rCX0KLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMjAg MDg6MzA6NDMuNTM0MDAyMjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Zmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYwkyMDA5LTExLTIzIDA4OjMzOjMyLjAwMDAwMDAwMCAr MDEwMAotQEAgLTAsMCArMSw5OSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoK LSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK LSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLStzdGF0aWMgY2hhciB0ZXN0W11bNjBdPQotKyAgICB7Ci0rICAgICIiLAot KyAgICAiYWJjIiwKLSsgICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGpr bG1rbG1ubG1ub21ub3Bub3BxIgotKyAgICB9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RIXT0KLSsgICAgewotKyAgICB7IDB4ZGEsMHgzOSww eGEzLDB4ZWUsMHg1ZSwweDZiLDB4NGIsMHgwZCwweDMyLDB4NTUsCi0rICAgICAgMHhiZiwweGVm LDB4OTUsMHg2MCwweDE4LDB4OTAsMHhhZiwweGQ4LDB4MDcsMHgwOSB9LAotKyAgICB7IDB4YTks MHg5OSwweDNlLDB4MzYsMHg0NywweDA2LDB4ODEsMHg2YSwweGJhLDB4M2UsCi0rICAgICAgMHgy NSwweDcxLDB4NzgsMHg1MCwweGMyLDB4NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9LAotKyAgICB7 IDB4ODQsMHg5OCwweDNlLDB4NDQsMHgxYywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCi0rICAg ICAgMHg0YSwweGExLDB4ZjksMHg1MSwweDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAot KyAgICB9OwotKwotK3ZvaWQgRklQU19jb3JydXB0X3NoYTEoKQotKyAgICB7Ci0rICAgIHRlc3Rb Ml1bMF0rKzsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotKyAgICB7Ci0r ICAgIGludCBuOwotKwotKyAgICBmb3Iobj0wIDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3Rb MF0pIDsgKytuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwot KwotKwlFVlBfRGlnZXN0KHRlc3Rbbl0sc3RybGVuKHRlc3Rbbl0pLG1kLCBOVUxMLCBFVlBfc2hh MSgpLCBOVUxMKTsKLSsJaWYobWVtY21wKG1kLHJldFtuXSxzaXplb2YgbWQpKQotKwkgICAgewot KwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLEZJUFNfUl9TRUxGVEVTVF9G QUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCX0KLSsgICAgcmV0dXJuIDE7Ci0r ICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMKLS0tLSAvZGV2L251bGwJMjAwOS0x MS0yMCAwODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAw MDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMTczIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3NoYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsKLSsjaWZuZGVm IEZJUFNDQU5JU1RFUl9PCi0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkgeyByZXR1cm4gMDsg fQotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygpIHt9Ci0rdm9pZCBPUEVOU1NMX2NsZWFuc2Uo dm9pZCAqcCxzaXplX3QgbGVuKSB7fQotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsKLStzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBX0NUWCAqbWRfY3R4LFNIQV9DVFggKm9fY3R4 LAotKwkJICAgICAgY29uc3QgY2hhciAqa2V5KQotKyAgICB7Ci0rICAgIHNpemVfdCBsZW49c3Ry bGVuKGtleSk7Ci0rICAgIGludCBpOwotKyAgICB1bnNpZ25lZCBjaGFyIGtleW1kW0hNQUNfTUFY X01EX0NCTE9DS107Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGFkW0hNQUNfTUFYX01EX0NCTE9DS107 Ci0rCi0rICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NLKQotKwl7Ci0rCVNIQTFfSW5pdChtZF9jdHgp OwotKwlTSEExX1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7Ci0rCVNIQTFfRmluYWwoa2V5bWQsbWRf Y3R4KTsKLSsJbGVuPTIwOwotKwl9Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGtleW1kLGtleSxsZW4p OwotKyAgICBtZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9DQkxPQ0stbGVuKTsK LSsKLSsgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCi0rCXBhZFtp XT0weDM2XmtleW1kW2ldOwotKyAgICBTSEExX0luaXQobWRfY3R4KTsKLSsgICAgU0hBMV9VcGRh dGUobWRfY3R4LHBhZCxTSEFfQ0JMT0NLKTsKLSsKLSsgICAgZm9yKGk9MCA7IGkgPCBITUFDX01B WF9NRF9DQkxPQ0sgOyBpKyspCi0rCXBhZFtpXT0weDVjXmtleW1kW2ldOwotKyAgICBTSEExX0lu aXQob19jdHgpOwotKyAgICBTSEExX1VwZGF0ZShvX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rICAg IH0KLSsKLStzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNIQV9DVFgg Km1kX2N0eCxTSEFfQ1RYICpvX2N0eCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zlsy MF07Ci0rCi0rICAgIFNIQTFfRmluYWwoYnVmLG1kX2N0eCk7Ci0rICAgIFNIQTFfVXBkYXRlKG9f Y3R4LGJ1ZixzaXplb2YgYnVmKTsKLSsgICAgU0hBMV9GaW5hbChtZCxvX2N0eCk7Ci0rICAgIH0K LSsKLSsjZW5kaWYKLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKLSsgICAgewot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgc3RhdGljIGNoYXIga2V5W109ImV0YW9ucmlzaGRs Y3VwZm0iOwotKyAgICBpbnQgbixiaW5hcnk9MDsKLSsKLSsgICAgaWYoYXJnYyA8IDIpCi0rCXsK LSsJZnByaW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsK LSsJfQotKwotKyAgICBuPTE7Ci0rICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sIi1iaW5hcnkiKSkK LSsJewotKwluKys7Ci0rCWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmludC4uLiAq LwotKwl9Ci0rCi0rICAgIGZvcig7IG4gPCBhcmdjIDsgKytuKQotKwl7Ci0rCUZJTEUgKmY9Zm9w ZW4oYXJndltuXSwicmIiKTsKLSsJU0hBX0NUWCBtZF9jdHgsb19jdHg7Ci0rCXVuc2lnbmVkIGNo YXIgbWRbMjBdOwotKwlpbnQgaTsKLSsKLSsJaWYoIWYpCi0rCSAgICB7Ci0rCSAgICBwZXJyb3Io YXJndltuXSk7Ci0rCSAgICBleGl0KDIpOwotKwkgICAgfQotKwotKwlobWFjX2luaXQoJm1kX2N0 eCwmb19jdHgsa2V5KTsKLSsJZm9yKCA7IDsgKQotKwkgICAgewotKwkgICAgY2hhciBidWZbMTAy NF07Ci0rCSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxzaXplb2YgYnVmLGYpOwotKwotKwkgICAg aWYobCA9PSAwKQotKwkJewotKwkJaWYoZmVycm9yKGYpKQotKwkJICAgIHsKLSsJCSAgICBwZXJy b3IoYXJndltuXSk7Ci0rCQkgICAgZXhpdCgzKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAg YnJlYWs7Ci0rCQl9Ci0rCSAgICBTSEExX1VwZGF0ZSgmbWRfY3R4LGJ1ZixsKTsKLSsJICAgIH0K LSsJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7Ci0rCi0rCWlmIChiaW5hcnkpCi0rCSAg ICB7Ci0rCSAgICBmd3JpdGUobWQsMjAsMSxzdGRvdXQpOwotKwkgICAgYnJlYWs7CS8qIC4uLiBm b3Igc2luZ2xlKCEpIGZpbGUgKi8KLSsJICAgIH0KLSsKLSsJcHJpbnRmKCJITUFDLVNIQTEoJXMp PSAiLGFyZ3Zbbl0pOwotKwlmb3IoaT0wIDsgaSA8IDIwIDsgKytpKQotKwkgICAgcHJpbnRmKCIl MDJ4IixtZFtpXSk7Ci0rCXByaW50ZigiXG4iKTsKLSsJfQotKyNlbmRpZgotKyAgICByZXR1cm4g MDsKLSsgICAgfQotKwotKwotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMKLS0tLSAvZGV2L251bGwJMjAwOS0xMS0yMCAw ODozMDo0My41MzQwMDIyMTUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAw Ci1AQCAtMCwwICsxLDU4OCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICoK LSsgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZlciBmb3IgdGhlIEZJ UFMtMTQwIHRlc3RpbmcKLSsgKiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2YWxpZGF0aW9uLiAg SXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCi0rICogT3BlblNTTCBsaWJyYXJ5IGl0byBw ZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhpYwotKyAqIGZ1bmN0aW9ucy4g IEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxpYmVyYXRlbHkKLSsg KiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFzaAotKyAqCi0rICogQ29udHJp YnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCi0rICoKLSsgKi8KLSsjaW5jbHVkZSA8c3RkaW8uaD4K LSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK2ludCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rICAgIHsKLSsgICAgcHJpbnRmKCJObyBGSVBTIHN1 cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rICAgIH0KLSsjZWxzZQotKwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSsvKiBBRVM6IGVu Y3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2ZXJpZnkgcmVzdWx0IG1hdGNoZXMg b3JpZ2luYWwgcGxhaW50ZXh0Ci0rKi8KLStzdGF0aWMgaW50IEZJUFNfYWVzX3Rlc3Qodm9pZCkK LSsJewotKwlpbnQgcmV0ID0gMDsKLSsJdW5zaWduZWQgY2hhciBwbHRtcFsxNl07Ci0rCXVuc2ln bmVkIGNoYXIgY2l0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFyIGtleVsxNl0gPSB7IDEsMiwzLDQs NSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKLSsJdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9D SVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBf YWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJ RVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7Ci0rCWlmIChFVlBfQ2lwaGVy SW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDApIDw9IDAp Ci0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDE2KTsKLSsJ aWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCi0rCQlnb3RvIGVycjsKLSsJcmV0ID0g MTsKLSsJZXJyOgotKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKwlyZXR1cm4gcmV0 OwotKwl9Ci0rCi0rc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2b2lkKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1w WzhdOwotKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAs MTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCi0rCQkgICAgICAgICAgICAgIDE5LDIwLDIxLDIyLDIz LDI0fTsKLSsgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10gPSB7ICdlJywgJ3QnLCAnYScs ICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07Ci0rCUVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsJRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVW UF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCi0rCQlnb3RvIGVycjsK LSsJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4KTsKLSsJaWYgKEVWUF9DaXBo ZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDApIDw9 IDApCi0rCQlnb3RvIGVycjsKLSsJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwgY2l0bXAsIDgpOwot KwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9 IDE7Ci0rCWVycjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJcmV0dXJuIHJl dDsKLSsJfQotKwotKy8qCi0rICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkg aW5wdXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19kc2FfdGVzdChpbnQgYmFk KQotKyAgICB7Ci0rICAgIERTQSAqZHNhID0gTlVMTDsKLSsgICAgRVZQX1BLRVkgcGs7Ci0rICAg IHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVuc2lnbmVkIGNo YXIgYnVmWzYwXTsKLSsgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rICAgIGludCByID0gMDsKLSsg ICAgRVZQX01EX0NUWCBtY3R4OwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgRVZQ X01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAgZHNhID0gRFNBX25ldygpOwotKyAgICBpZiAoIWRz YSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIURT QV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmIChiYWQpCi0rCSAgICBC Tl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwotKyAgICBway50eXBlID0gRVZQX1BLRVlf RFNBOwotKyAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbkluaXRf ZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBf U2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCi0rCWdvdG8gZW5kOwot KyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCi0rCWdvdG8g ZW5kOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBO VUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgZGdz dCwgc2l6ZW9mKGRnc3QpIC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICByID0gRVZQX1ZlcmlmeUZp bmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rICAgIGVuZDoKLSsgICAgRVZQX01EX0NUWF9j bGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGRzYSkKLSsgIAkgIERTQV9mcmVlKGRzYSk7Ci0rICAg IGlmIChyICE9IDEpCi0rCXJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8q Ci0rICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0 LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQotKyAgICB7Ci0rICAg IFJTQSAqa2V5OwotKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0ZXh0W10gPSAiZXRhb25yaXNo ZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKLSsgICAgdW5zaWduZWQgaW50IHNs ZW47Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsgICAgRVZQX1BL RVkgcGs7Ci0rICAgIGludCByID0gMDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAg IEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAgIGtleSA9IFJTQV9uZXcoKTsKLSsgICAgYm4g PSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1cm4gMDsKLSsgICAgQk5f c2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwg MTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUoYm4pOwotKyAgICBpZiAo YmFkKQotKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKLSsKLSsgICAgcGsudHlwZSA9IEVW UF9QS0VZX1JTQTsKLSsgICAgcGsucGtleS5yc2EgPSBrZXk7Ci0rCi0rICAgIGlmICghRVZQX1Np Z25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlm ICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQp IC0gMSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1Ziwg JnNsZW4sICZwaykpCi0rCWdvdG8gZW5kOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4 KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1Zl cmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkK LSsJZ290byBlbmQ7Ci0rICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwg JnBrKTsKLSsgICAgZW5kOgotKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBp ZiAoa2V5KQotKyAgCSAgICBSU0FfZnJlZShrZXkpOwotKyAgICBpZiAociAhPSAxKQotKwlyZXR1 cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBTSEExOiBnZW5lcmF0ZSBoYXNo IG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1 dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTFfdGVzdCgpCi0rICAg IHsKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVF9MRU5HVEhdID0KLSsgICAg ICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywgMHgxYSwgMHgxZSwgMHg4ZSwgMHg2 NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwgMHgyYywgMHhlOCwgMHhiMywg MHhjNSwgMHgxOCB9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwot KwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJS X2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAx LG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAo bWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2 YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAot KyovCi0rc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQotKwl7MHhmNSwgMHg1MywgMHhj ZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAweGM5LCAweDY4LCAw eGMwLCAweGVhLCAweDQwLCAweDkxLAotKwkgMHg2LCAweGVjLCAweDhlLCAweDExLCAweDk2LCAw eGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2LCAweDUwLCAweDRmLCAweDQ3 LCAweDU3fTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsg ICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9j bGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxt ZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAo bWQsZGlnZXN0LHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAx OwotKyAgICB9Ci0rCi0rLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2 YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAot KyovCi0rc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25l ZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0gPQotKwl7MHg5OSwgMHhjOSwgMHhl OSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwgMHg4OCwgMHg1ZiwgMHg5NCwg MHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKLSsJIDB4MTYsIDB4MWYsIDB4M2QsIDB4ZjQsIDB4MWYs IDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsIDB4ZDAsIDB4ZTcsIDB4MGIsIDB4 OTQsIDB4NGEsCi0rCSAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAweDIwLCAweDA2LCAweGVmLCAw eDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAweGQ5LCAweDQwLCAweDIyLAotKwkg MHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgyNywgMHhmZSwgMHhiZCwgMHhk NiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhM307Ci0rICAgIHVuc2lnbmVkIGNo YXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBNTEy X0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFF VlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVM TCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hB MTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25v d24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19o bWFjX3NoYTFfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFv bnJpc2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAg dW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4NzMsIDB4ZjcsIDB4 YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEsIDB4ZWEsIDB4ZWEsIDB4NTYs IDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCi0rCSAweGIyLCAweGZiLCAweGVjLCAweGM2fTsKLSsK LSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQg aW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhF VlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikp IHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAg cmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEyMjQ6IGdl bmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0r ICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19z aGEyMjRfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJp c2hkIjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5z aWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsJezB4NzUsIDB4NTgsIDB4ZDUs IDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4YmUsIDB4MWMsIDB4 YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCi0rCSAweGU1LCAweDYyLCAweDQ5LCAweGI2LCAweDk0LCAw eGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5fTsKLSsKLSsgICAgdW5zaWdu ZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsK LSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhMjI0KCks a2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7 Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTI1NjogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTI1Nl90ZXN0 KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAg ICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFy IGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhlOSwgMHgxNywgMHhjMSwgMHg3YiwgMHg0 YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwgMHgwMiwgMHhmNSwgMHg3Miwg MHgzMywgMHg4NywKLSsJIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2IsIDB4N2UsIDB4YTgsIDB4ZWEs IDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYsIDB4ZGEsIDB4MjQsIDB4ZjR9Owot KwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25l ZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFD KEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRs ZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBMzg0 OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93 bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2ht YWNfc2hhMzg0X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRh b25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAg IHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweGIyLCAweDlkLCAw eDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2LCAweDYzLCAweDA4LCAweDI2 LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAotKwkgMHhlMiwgMHhkZiwgMHhmOCwgMHhmZiwgMHhj NiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgxYiwgMHhhYywgMHhiMCwgMHgwNywg MHgzOSwgMHgwOCwKLSsJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYsIDB4ZDYsIDB4NGMs IDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4YjgsIDB4OWIsIDB4ODgsIDB4MWN9Owot KwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25l ZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFD KEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRs ZW4pKSByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBNTEy OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93 bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2ht YWNfc2hhNTEyX3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRh b25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAg IHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweGNkLCAweDNlLCAw eGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFmLCAweGYzLCAweDc3 LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAotKwkgMHhmNywgMHhkMSwgMHg1MSwgMHg5NiwgMHgx NywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwgMHhhZCwgMHg3ZSwgMHgyNCwg MHhjYSwgMHhiMSwKLSsJIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUsIDB4ZWEsIDB4MmMsIDB4MDIs IDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEsIDB4N2YsIDB4ZWIsIDB4OWMsCi0r CSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAweGVlLCAweDQ2LCAw eDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUzfTsKLSsKLSsgICAgdW5zaWdu ZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsK LSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hhNTEyKCks a2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7 Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsKLSsvKiBESDogZ2VuZXJhdGUgc2hhcmVkIHBh cmFtZXRlcnMKLSsqLwotK3N0YXRpYyBpbnQgZGhfdGVzdCgpCi0rICAgIHsKLSsgICAgREggKmRo OwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgZGggPSBGSVBTX2RoX25ldygpOwotKyAg ICBpZiAoIWRoKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKCFESF9nZW5lcmF0ZV9wYXJhbWV0ZXJz X2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEZJUFNfZGhfZnJlZShk aCk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogWmVyb2l6ZQotKyovCi0rc3RhdGlj IGludCBaZXJvaXplKCkKLSsgICAgewotKyAgICBSU0EgKmtleTsKLSsgICAgQklHTlVNICpibjsK LSsgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAotKwl7IDB4NDgsIDB4NTAsIDB4ZjAs IDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4N2YsIDB4ODMsIDB4 MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKLSsgICAgaW50IGksIG47Ci0rCi0rICAgIGtleSA9IEZJ UFNfcnNhX25ldygpOwotKyAgICBibiA9IEJOX25ldygpOwotKyAgICBpZiAoIWtleSB8fCAhYm4p Ci0rCXJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOwotKyAgICBpZiAoIVJT QV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQotKwlyZXR1cm4gMDsKLSsgICAg Qk5fZnJlZShibik7Ci0rICAgIAotKyAgICBuID0gQk5fbnVtX2J5dGVzKGtleS0+ZCk7Ci0rICAg IHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRlIGtleVxuIiwgbik7Ci0rICAg IHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxuIik7Ci0rICAgIGRvX2JuX3By aW50KHN0ZG91dCwga2V5LT5kKTsKLSsgICAgQk5fcmFuZChrZXktPmQsbio4LC0xLDApOwotKyAg ICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxuIik7Ci0rICAgIGRvX2JuX3By aW50KHN0ZG91dCwga2V5LT5kKTsKLSsKLSsgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBi ZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IoaSA9IDA7IGkgPCBzaXplb2Yo dXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0rICAgICAgICBwcmlu dGYoIlxuIik7Ci0rICAgIFJBTkRfYnl0ZXModXNlcmtleSwgc2l6ZW9mIHVzZXJrZXkpOwotKyAg ICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsK LSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIs IHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIpOwotKwotKyAgICByZXR1cm4gMTsK LSsgICAgfQotKwotK3N0YXRpYyBpbnQgRXJyb3I7Ci0rY29uc3QgY2hhciAqIEZhaWwoY29uc3Qg Y2hhciAqbXNnKQotKyAgICB7Ci0rICAgIGRvX3ByaW50X2Vycm9ycygpOwotKyAgICBFcnJvcisr OwotKyAgICByZXR1cm4gbXNnOyAKLSsgICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIg Kiphcmd2KQotKyAgICB7Ci0rCi0rICAgIGludCBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAwLCBk b19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOwotKyAgICBpbnQgYmFkX3JzYSA9IDAsIGJhZF9kc2Eg PSAwOwotKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKLSsgICAgaW50IG5vX2V4aXQgPSAwOwot KwotKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGljYXRpb25cblxuIik7Ci0rCi0r ICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUsIGlmIGFueSAqLwotKyAgICBS QU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOwotKwotKyAgICBpZiAoYXJndlsxXSkgewotKyAg ICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLwotKyAgICAgICAgaWYgKCFzdHJjbXAoYXJn dlsxXSwgImFlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2FlcygpOwotKyAgICAg ICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBL QVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkZXMiKSkg ewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKLSsgICAgICAgICAgICBwcmludGYo IkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIp OwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2EiKSkgewotKyAgICAg ICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4u XG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNhIikpIHsKLSsg ICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJSU0Eg a2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtB VC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleSIp KSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVy ZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Ci0rCSAgICBiYWRfcnNhID0g MTsKLSsJICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJyc2FrZXlnZW4iKSkgewotKwkgICAgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMTsKLSsJ ICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9u IGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOwot KyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXkiKSkgewotKyAgICAg ICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlv biB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAgYmFkX2RzYSA9IDE7Ci0rCSAgICBu b19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5 Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19leGl0 ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0 dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAgIH0g ZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7Ci0rICAgICAgICAgICAgRklQU19j b3JydXB0X3NoYTEoKTsKLSsgICAgICAgICAgICBwcmludGYoIlNIQS0xIGhhc2ggd2l0aCBjb3Jy dXB0ZWQgS0FULi4uXG4iKTsKLSsJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmciKSkg ewotKwkgICAgRklQU19jb3JydXB0X3JuZygpOwotKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsx XSwgInJuZ3N0aWNrIikpIHsKLSsJICAgIGRvX3JuZ19zdGljayA9IDE7Ci0rCSAgICBub19leGl0 ID0gMTsKLSsJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250aW51b3VzIHRlc3Qu Li5cbiIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBwcmludGYoIkJhZCBhcmd1 bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOwotKyAgICAgICAgICAgIGV4aXQoMSk7Ci0rICAgICAg ICB9Ci0rCWlmICghbm9fZXhpdCkgewotKyAgICAgICAgCWlmICghRklQU19tb2RlX3NldCgxKSkg ewotKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgICAgIAkgICAgcHJpbnRmKCJQb3dl ci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKLSsJCSAgICBleGl0KDEpOwotKwkJfQotKyAgICAg ICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIpOwotKyAgICAgICAg CWV4aXQoMCk7Ci0rCX0KLSsgICAgfQotKwotKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3Jh cGhpYyBvcGVyYXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCIxLiBOb24tQXBwcm92ZWQgY3J5 cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7Ci0rICAgIHByaW50ZigiXHRhLiBJbmNs dWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKLSsgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3Vj Y2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBQb3dlci11cCBz ZWxmIHRlc3QKLSsgICAgKi8KLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIHByaW50Zigi Mi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOwotKyAgICBpZiAoIUZJUFNfbW9k ZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAgICBwcmludGYoRmFp bCgiRkFJTEVEIVxuIikpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIHByaW50Zigic3VjY2Vzc2Z1 bFxuIik7Ci0rICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4pCi0rICAgICAgICAgICAgRklQ U19jb3JydXB0X2RzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX2NvcnJ1cHRfcnNhX2tleWdlbikK LSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigpOwotKyAgICBpZiAoZG9fcm5n X3N0aWNrKQotKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7Ci0rCi0rICAgIC8qIEFFUyBl bmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCIzLiBBRVMgZW5jcnlw dGlvbi9kZWNyeXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19hZXNfdGVzdCgpID8gInN1 Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogUlNBIGtleSBn ZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRm KCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOwot KyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBERVMtQ0JDIGVuY3J5cHRpb24vZGVjcnlw dGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0 aW9uLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19kZXMzX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIERTQSBrZXkgZ2VuZXJhdGlvbiBh bmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KLSsgICAgKi8KLSsgICAgcHJpbnRmKCI2LiBEU0Ega2V5 IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7Ci0rICAgIHByaW50Zigg RklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFc biIpICk7Ci0rCi0rICAgIC8qIFNIQS0xIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3YS4g U0hBLTEgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhMV90ZXN0KCkgPyAic3VjY2Vz c2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBTSEEtMjU2IGhhc2gK LSsgICAgKi8KLSsgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50 ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxu IikgKTsKLSsKLSsgICAgLyogU0hBLTUxMiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2Mu IFNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfc2hhNTEyX3Rlc3QoKSA/ICJz dWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIEhNQUMtU0hB LTEgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdkLiBITUFDLVNIQS0xIGhhc2guLi4iKTsK LSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0yMjQgaGFzaAotKyAgICAq LwotKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4uLiIpOwotKyAgICBwcmludGYo IEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVE IVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjU2IGhhc2gKLSsgICAgKi8KLSsgICAgcHJp bnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNf c2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2cuIEhN QUMtU0hBLTM4NCBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTM4NF90ZXN0 KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBI TUFDLVNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdoLiBITUFDLVNIQS01MTIg aGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpID8gInN1Y2Nl c3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogTm9uLUFwcHJvdmVk IGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiOC4gTm9uLUFw cHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAgICBwcmludGYo Ilx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50ZiggZGhfdGVz dCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJICAgIDogRmFpbCgiZmFpbGVkIElO Q09SUkVDVExZIVxuIikgKTsKLSsKLSsgICAgLyogWmVyb2l6YXRpb24KLSsgICAgKi8KLSsgICAg cHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOwotKyAgICBwcmludGYoIFplcm9pemUoKSA/ ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKLSsJICAgIDogRmFpbCgiXHRmYWlsZWQgSU5D T1JSRUNUTFkhXG4iKSApOwotKwotKyAgICBwcmludGYoIlxuQWxsIHRlc3RzIGNvbXBsZXRlZCB3 aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOwotKyAgICByZXR1cm4gRXJyb3IgPyAxIDogMDsKLSsg ICAgfQotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2ZpcHNfbG9jbC5oCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0 MDAyMjE1ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwc19sb2NsLmgJ MjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNzIgQEAKLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lm ZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3ZvaWQgZmlwc193 X2xvY2sodm9pZCk7Ci0rdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc19yX2xv Y2sodm9pZCk7Ci0rdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpOwotK2ludCBmaXBzX2lzX3N0YXJ0 ZWQodm9pZCk7Ci0rdm9pZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpOwotK2ludCBmaXBzX2lzX293 bmluZ190aHJlYWQodm9pZCk7Ci0raW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCk7Ci0r dm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpOwotK2ludCBmaXBzX2NsZWFyX293bmlu Z190aHJlYWQodm9pZCk7Ci0rCi0rI2RlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFCTE2 Ci0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVw IC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL01ha2VmaWxlCi0tLS0g L2Rldi9udWxsCTIwMDktMTEtMjAgMDg6MzA6NDMuNTM0MDAyMjE1ICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDA5LTExLTIzIDA4OjMyOjMxLjAw MDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw4MSBAQAotKyMKLSsjIE9wZW5TU0wvY3J5cHRvL2Zp cHMvTWFrZWZpbGUKLSsjCi0rCi0rRElSPQlmaXBzCi0rVE9QPQkuLi8uLgotK0NDPQljYwotK0lO Q0xVREVTPQotK0NGTEFHPS1nCi0rTUFLRUZJTEU9CU1ha2VmaWxlCi0rQVI9CQlhciByCi0rCi0r Q0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotKwotK0dFTkVSQUw9TWFrZWZpbGUKLStURVNU PWZpcHNfdGVzdF9zdWl0ZS5jIGZpcHNfcmFuZHRlc3QuYwotK0FQUFM9Ci0rCi0rTElCPSQoVE9Q KS9saWJjcnlwdG8uYQotK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0 ZXN0LmMgZmlwc19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAotKyAgICBm aXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhMV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9z ZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMKLSsKLStMSUJP Qko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNfaG1hY19zZWxm dGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRlc3QubyBm aXBzX3NoYTFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5k Lm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19zdGFu ZGFsb25lX3NoYTEuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFERVI9 CSQoRVhIRUFERVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSsK LSt0b3A6Ci0rCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3Vi X2FsbCkKLSsKLSthbGw6CWxpYgotKwotK2xpYjoJJChMSUJPQkopCi0rCSQoQVIpICQoTElCKSAk KExJQk9CSikKLSsJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCi0rCUB0b3Vj aCBsaWIKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmls ZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWts aW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQotKwlAJChQRVJMKSAkKFRP UCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0rCUAkKFBFUkwpICQoVE9QKS91 dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStpbnN0YWxsOgotKwlAWyAtbiAi JChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCi0rCUBo ZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKLSsJZG8g IFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVu c3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2lu Y2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3RhZ3M6Ci0rCWN0YWdzICQoU1JD KQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JD KT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQg YmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykg JChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKLSsKLStkY2xlYW46 Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50 OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLSsJbXYgLWYgTWFrZWZpbGUu bmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBj b3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0rIyBETyBOT1QgREVMRVRFIFRI SVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotKwotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9obWFjL2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2htYWMv aG1hYy5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9obWFjL2htYWMuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAw MDAwMDAwMCArMDEwMAotQEAgLTc3LDYgKzc3LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19D VFggKmN0eCwgY29uc3Qgdm8KLSAKLSAJaWYgKGtleSAhPSBOVUxMKQotIAkJewotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVWUF9NRF9G TEFHX0ZJUFMpCi0rCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVykKLSsJCSB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NU WF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCi0rCQkJZ290byBlcnI7Ci0rI2VuZGlmCi0gCQlyZXNl dD0xOwotIAkJaj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7Ci0gCQlPUEVOU1NMX2Fzc2VydChqIDw9 IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7Ci1AQCAtMjA5LDMgKzIxNiwxMCBAQCB1bnNpZ25lZCBj aGFyICpITUFDKGNvbnN0IEVWUF9NRCAqZXZwX21kCi0gCXJldHVybiBOVUxMOwotIAl9Ci0gCi0r dm9pZCBITUFDX0NUWF9zZXRfZmxhZ3MoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgbG9uZyBmbGFn cykKLSsJewotKwlFVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LT5pX2N0eCwgZmxhZ3MpOwotKwlF VlBfTURfQ1RYX3NldF9mbGFncygmY3R4LT5vX2N0eCwgZmxhZ3MpOwotKwlFVlBfTURfQ1RYX3Nl dF9mbGFncygmY3R4LT5tZF9jdHgsIGZsYWdzKTsKLSsJfQotKwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vaG1hYy9obWFjLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9obWFjL2htYWMuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2htYWMvaG1h Yy5oLmZpcHMJMjAwOS0xMS0yMyAwODozMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9obWFjL2htYWMuaAkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAw MDAwMCArMDEwMAotQEAgLTEwMSw2ICsxMDEsNyBAQCB1bnNpZ25lZCBjaGFyICpITUFDKGNvbnN0 IEVWUF9NRCAqZXZwX21kCi0gCQkgICAgdW5zaWduZWQgaW50ICptZF9sZW4pOwotIGludCBITUFD X0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0NUWCAqc2N0eCk7Ci0gCi0rdm9pZCBITUFD X0NUWF9zZXRfZmxhZ3MoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0gCi0g I2lmZGVmICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vTWFrZWZpbGUKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9NYWtlZmlsZS5maXBzCTIwMDktMDQtMDYgMTY6 MzE6MzUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vTWFr ZWZpbGUJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zNCwxNCArMzQs MTQgQEAgR0VORVJBTD1NYWtlZmlsZSBSRUFETUUgY3J5cHRvLWxpYi5jb20gaQotIAotIExJQj0g JChUT1ApL2xpYmNyeXB0by5hCi0gU0hBUkVEX0xJQj0gbGliY3J5cHRvJChTSExJQl9FWFQpCi0t TElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBtZW1fZGJnLmMgY3ZlcnNpb24uYyBl eF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9fdGltZS5jIG9fc3RyLmMgb19kaXIu YwotLUxJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8gY3ZlcnNpb24ubyBleF9kYXRh Lm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGltZS5vIG9fc3RyLm8gb19kaXIubyAkKENQ VUlEX09CSikKLStMSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMgbWVtX2Nsci5jIG1lbV9kYmcuYyBj dmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGljLmMgdWlkLmMgb190aW1lLmMgb19z dHIuYyBvX2Rpci5jIG9faW5pdC5jIGZpcHNfZXJyLmMKLStMSUJPQko9IGNyeXB0bGliLm8gbWVt Lm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0YS5vIGNwdF9lcnIubyBlYmNkaWMubyB1aWQu byBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gb19pbml0Lm8gZmlwc19lcnIubyAkKENQVUlEX09C SikKLSAKLSBTUkM9ICQoTElCU1JDKQotIAotIEVYSEVBREVSPSBjcnlwdG8uaCBvcGVuc3Nsdi5o IG9wZW5zc2xjb25mLmggZWJjZGljLmggc3ltaGFja3MuaCBcCi0gCW9zc2xfdHlwLmgKLS1IRUFE RVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmgg b19kaXIuaCAkKEVYSEVBREVSKQotK0hFQURFUj0JY3J5cHRsaWIuaCBidWlsZGluZi5oIGZpcHNf bG9jbC5oIG1kMzJfY29tbW9uLmggb190aW1lLmggb19zdHIuaCBvX2Rpci5oICQoRVhIRUFERVIp Ci0gCi0gQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSAKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMDQtMDctMjUgMjE6MTA6NDEuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCTIw MDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNjEsNiArNjEsMTEgQEAKLSAj aW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvbWRjMi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gI3Vu ZGVmIGMybAotICNkZWZpbmUgYzJsKGMsbCkJKGwgPSgoREVTX0xPTkcpKCooKGMpKyspKSkgICAg LCBcCi1AQCAtNzUsNyArODAsNyBAQAotIAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwp Pj4yNEwpJjB4ZmYpKQotIAotIHN0YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29u c3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOwotLWludCBNREMyX0luaXQoTURDMl9D VFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KE1EQzIpCi0gCXsKLSAJYy0+bnVtPTA7Ci0g CWMtPnBhZF90eXBlPTE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZGMy L21kYzIuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kYzIvbWRjMi5oCi0tLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcwkyMDA5LTExLTIzIDA4 OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21k YzIvbWRjMi5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtODAsNyAr ODAsOSBAQCB0eXBlZGVmIHN0cnVjdCBtZGMyX2N0eF9zdAotIAlpbnQgcGFkX3R5cGU7IC8qIGVp dGhlciAxIG9yIDIsIGRlZmF1bHQgMSAqLwotIAl9IE1EQzJfQ1RYOwotIAotLQotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9NREMyX0luaXQoTURDMl9DVFggKmMpOwotKyNlbmRp ZgotIGludCBNREMyX0luaXQoTURDMl9DVFggKmMpOwotIGludCBNREMyX1VwZGF0ZShNREMyX0NU WCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1EQzJf RmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1EQzJfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vbWQyL21kMl9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9t ZDIvbWQyX2Rnc3QuYy5maXBzCTIwMDctMDgtMzEgMTI6MTI6MzUuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAwOS0xMS0yMyAw ODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Miw2ICs2MiwxMSBAQAotICNpbmNsdWRlIDxv cGVuc3NsL21kMi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAKLSBj b25zdCBjaGFyIE1EMl92ZXJzaW9uW109Ik1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAot QEAgLTExNiw3ICsxMjEsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQotIAkJcmV0 dXJuKCJtZDIoaW50KSIpOwotIAl9Ci0gCi0taW50IE1EMl9Jbml0KE1EMl9DVFggKmMpCi0rRklQ U19OT05fRklQU19NRF9Jbml0KE1EMikKLSAJewotIAljLT5udW09MDsKLSAJbWVtc2V0KGMtPnN0 YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL21kMi9tZDIuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kMi9tZDIuaAot LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kMi9tZDIuaC5maXBzCTIwMDktMTEtMjMg MDg6MzI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v bWQyL21kMi5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtODEsNiAr ODEsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDJzdGF0ZV9zdAotIAl9IE1EMl9DVFg7Ci0gCi0gY29u c3QgY2hhciAqTUQyX29wdGlvbnModm9pZCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBw cml2YXRlX01EMl9Jbml0KE1EMl9DVFggKmMpOwotKyNlbmRpZgotIGludCBNRDJfSW5pdChNRDJf Q1RYICpjKTsKLSBpbnQgTUQyX1VwZGF0ZShNRDJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTUQyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBN RDJfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9tZDRf ZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIwMDctMDEt MjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vbWQ0L21kNF9kZ3N0LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBA IC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJtZDRfbG9j bC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K LSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9W RVJTSU9OX1BURVhUOwotIAotQEAgLTcwLDcgKzc1LDcgQEAgY29uc3QgY2hhciBNRDRfdmVyc2lv bltdPSJNRDQiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcp MHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0 NzZMCi0gCi0taW50IE1ENF9Jbml0KE1ENF9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0 KE1ENCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1JTklUX0RBVEFf QTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9tZDQuaC5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9tZDQuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL21kNC9tZDQuaC5maXBzCTIwMDktMTEtMjMgMDg6MzI6MzAuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNC5oCTIwMDktMTEtMjMg MDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3Ry dWN0IE1ENHN0YXRlX3N0Ci0gCXVuc2lnbmVkIGludCBudW07Ci0gCX0gTUQ0X0NUWDsKLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTUQ0X0luaXQoTUQ0X0NUWCAqYyk7Ci0r I2VuZGlmCi0gaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpOwotIGludCBNRDRfVXBkYXRlKE1ENF9D VFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBNRDRfRmluYWwodW5z aWduZWQgY2hhciAqbWQsIE1ENF9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9tZDVfZGdz dC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAw MDAwMDAwMCArMDEwMAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0g I2luY2x1ZGUgIm1kNV9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25b XT0iTUQ1IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtNzAsNyArNzUsNyBAQCBjb25z dCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCi0gI2RlZmluZSBJTklUX0RBVEFf QyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2ln bmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1pbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykKLStGSVBT X05PTl9GSVBTX01EX0luaXQoTUQ1KQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwot IAljLT5BPUlOSVRfREFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v bWQ1L21kNS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1L21kNS5oCi0tLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1L21kNS5oLmZpcHMJMjAwOS0xMS0yMyAwODoz MjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDUv bWQ1LmgJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMDUsNiArMTA1 LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQ1c3RhdGVfc3QKLSAJdW5zaWduZWQgaW50IG51bTsKLSAJ fSBNRDVfQ1RYOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9NRDVfSW5p dChNRDVfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYyk7Ci0gaW50 IE1ENV9VcGRhdGUoTUQ1X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0g aW50IE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ1X0NUWCAqYyk7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZW0uYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL21lbS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWVtLmMuZmlwcwky MDA4LTExLTEyIDA0OjU3OjQ3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL21lbS5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAt MTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkICgqZnJlZV9sb2NrZWRfZnVuYykodm9pZCAqKSAK LSAKLSAvKiBtYXkgYmUgY2hhbmdlZCBhcyBsb25nIGFzICdhbGxvd19jdXN0b21pemVfZGVidWcn IGlzIHNldCAqLwotIC8qIFhYWCB1c2UgY29ycmVjdCBmdW5jdGlvbiBwb2ludGVyIHR5cGVzICov Ci0tI2lmZGVmIENSWVBUT19NREVCVUcKLSsjaWYgZGVmaW5lZChDUllQVE9fTURFQlVHKSAmJiAh ZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0gLyogdXNlIGRlZmF1bHQgZnVuY3Rpb25zIGZyb20gbWVt X2RiZy5jICovCi0gc3RhdGljIHZvaWQgKCptYWxsb2NfZGVidWdfZnVuYykodm9pZCAqLGludCxj b25zdCBjaGFyICosaW50LGludCkKLSAJPSBDUllQVE9fZGJnX21hbGxvYzsKLWRpZmYgLXVwIC9k ZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9vX2luaXQuYwotLS0tIC9kZXYvbnVs bAkyMDA5LTExLTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL29faW5pdC5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAw Ci1AQCAtMCwwICsxLDgwIEBACi0rLyogb19pbml0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBw cm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK LSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICog VGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBF cmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20p LgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPGVfb3MuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsKLSsvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlv biBvcGVyYXRpb25zLgotKyAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKLSsg Ki8KLSsKLSt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCi0rCXsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCXN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0rCWlmICghZG9uZSkKLSsJCXsKLSsj aWZkZWYgQ1JZUFRPX01ERUJVRwotKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KCk7Ci0rI2Vu ZGlmCi0rCQlkb25lID0gMTsKLSsJCX0KLSsjZW5kaWYKLSsJfQotKwkJCi0rCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL29wZW5zc2xjb25mLmgu aW4JMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xLDUgKzEsMjAgQEAK LSAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLwotIAotKyNpZmRlZiBPUEVOU1NMX0RPSU5H X01BS0VERVBFTkQKLSsKLSsvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRv IGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKLSsgKiB0aGF0IHNob3VsZCBi ZSB2aXNpYmxlIHRvIG1ha2VkZXBlbmQuCi0rICoKLSsgKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9l c24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MK LSsgKiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0 b3JpZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0KLSsgKi8KLSsKLSsjaWZuZGVmIE9QRU5T U0xfRklQUwotKyNkZWZpbmUgT1BFTlNTTF9GSVBTCi0rI2VuZGlmCi0rCi0rI2VuZGlmCi0rCi0g LyogR2VuZXJhdGUgODAzODYgY29kZT8gKi8KLSAjdW5kZWYgSTM4Nl9PTkxZCi0gCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAzLTA5IDE0OjA4OjA0LjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3BrY3MxMi9wMTJf Y3J0LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC01OSw2ICs1OSwx MCBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNs dWRlIDxvcGVuc3NsL3BrY3MxMi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gCi0gc3RhdGljIGludCBwa2NzMTJfYWRk X2JhZyhTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtDUzEyX1NBRkVCQUcgKmJh Zyk7Ci1AQCAtOTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3JlYXRlKGNoYXIgKnBhc3Ms IGNoYXIgKgotIAotIAkvKiBTZXQgZGVmYXVsdHMgKi8KLSAJaWYgKCFuaWRfY2VydCkKLSsJCXsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2RlKCkpCi0rCQkJbmlkX2NlcnQg PSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKLSsJCWVsc2UKLSsjZW5k aWYKLSAJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKLSsJCX0K LSAJaWYgKCFuaWRfa2V5KQotIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9U cmlwbGVERVNfQ0JDOwotIAlpZiAoIWl0ZXIpCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9tZF9yYW5k LmMuZmlwcwkyMDA5LTAxLTAzIDEwOjI1OjMyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAw MDAwMDAwICswMTAwCi1AQCAtMTI2LDYgKzEyNiwxMCBAQAotIAotICNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gI2lmZGVmIEJO X0RFQlVHCi0gIyBkZWZpbmUgUFJFRElDVAotQEAgLTM0Miw2ICszNDYsMTQgQEAgc3RhdGljIGlu dCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaAotICNlbmRpZgotIAlpbnQgZG9fc3Rpcl9w b29sID0gMDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkg ICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMsRklQU19SX05PTl9G SVBTX01FVEhPRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSAjaWZk ZWYgUFJFRElDVAotIAlpZiAocmFuZF9wcmVkaWN0YWJsZSkKLSAJCXsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBzCTIwMDYtMTEtMjEgMjI6Mjk6NDEuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCTIwMDkt MTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNzAsNiArNzAsMTMgQEAKLSAKLSBz dGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0c1tdPQotIAl7Ci0re0VSUl9GVU5D KFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QpLAkiRU5HX1JBTkRfR0VUX1JBTkRfTUVU SE9EIn0sCi0re0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkQpLAkiRklQU19SQU5EIn0sCi0re0VS Ul9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfQllURVMpLAkiRklQU19SQU5EX0JZVEVTIn0sCi0re0VS Ul9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUKSwJIkZJUFNfUkFORF9TRVRfRFQifSwKLSt7 RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX0RUKSwJIkZJUFNfU0VUX0RUIn0sCi0re0VSUl9GVU5D KFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQpLAkiRklQU19TRVRfUFJOR19TRUVEIn0sCi0re0VS Ul9GVU5DKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUpLAkiRklQU19TRVRfVEVTVF9NT0RFIn0s Ci0ge0VSUl9GVU5DKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJSQU5EX2dldF9yYW5k X21ldGhvZCJ9LAotIHtFUlJfRlVOQyhSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMpLAkiU1NMRUFZ X1JBTkRfQllURVMifSwKLSB7MCxOVUxMfQotQEAgLTc3LDcgKzg0LDE3IEBAIHN0YXRpYyBFUlJf U1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW10KLSAKLSBzdGF0aWMgRVJSX1NUUklOR19EQVRB IFJBTkRfc3RyX3JlYXNvbnNbXT0KLSAJewotK3tFUlJfUkVBU09OKFJBTkRfUl9OT05fRklQU19N RVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9U X0lOX1RFU1RfTU9ERSkgICAgICwibm90IGluIHRlc3QgbW9kZSJ9LAotK3tFUlJfUkVBU09OKFJB TkRfUl9OT19LRVlfU0VUKSAgICAgICAgICAgLCJubyBrZXkgc2V0In0sCi0re0VSUl9SRUFTT04o UkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSCksInBybmcgYXNraW5nIGZvciB0b28gbXVj aCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0VSUk9SKSAgICAgICAgICAgLCJwcm5nIGVy cm9yIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfS0VZRUQpICAgICAgICAgICAsInBybmcg a2V5ZWQifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVLRVlFRCkgICAgICwicHJu ZyBub3QgcmVrZXllZCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRCkg ICAgLCJwcm5nIG5vdCByZXNlZWRlZCJ9LAotIHtFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9T RUVERUQpICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJO R19TRUVEX01VU1RfTk9UX01BVENIX0tFWSksInBybmcgc2VlZCBtdXN0IG5vdCBtYXRjaCBrZXki fSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TVFVDSykgICAgICAgICAgICwicHJuZyBzdHVj ayJ9LAotIHswLE5VTEx9Ci0gCX07Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvcmFu ZC5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcwkyMDA5 LTExLTIzIDA4OjMyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JhbmQvcmFuZC5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1A QCAtMTI4LDExICsxMjgsMjggQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7Ci0g LyogRXJyb3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBGdW5jdGlv biBjb2Rlcy4gKi8KLSsjZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkg MTA4Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5ECQkJCSAxMDMKLSsjZGVmaW5lIFJBTkRfRl9G SVBTX1JBTkRfQllURVMJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJ CQkJIDEwNgotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX0RUCQkJCSAxMDQKLSsjZGVmaW5lIFJB TkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQJCQkgMTA3Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRf VEVTVF9NT0RFCQkJIDEwNQotICNkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJ IDEwMQotICNkZWZpbmUgUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEwMAotIAotIC8qIFJl YXNvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwNQot KyNkZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgotKyNkZWZpbmUgUkFORF9S X05PX0tFWV9TRVQJCQkJIDEwNwotKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09f TVVDSAkJCSAxMDEKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKLSsjZGVmaW5l IFJBTkRfUl9QUk5HX0tFWUVECQkJCSAxMDkKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtF WUVECQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKLSAj ZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAotKyNkZWZpbmUgUkFORF9SX1BS TkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkJCSAxMTAKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NU VUNLCQkJCSAxMDQKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowNC4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmRfbGliLmMJMjAwOS0x MS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02MCw2ICs2MCwxMiBAQAotICNpbmNs dWRlIDx0aW1lLmg+Ci0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotKyNpbmNsdWRlICJyYW5kX2xjbC5oIgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+ Ci0rI2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotICNpbmNsdWRlIDxvcGVu c3NsL2VuZ2luZS5oPgotICNlbmRpZgotQEAgLTEwMiw4ICsxMDgsMTkgQEAgY29uc3QgUkFORF9N RVRIT0QgKlJBTkRfZ2V0X3JhbmRfbWV0aG9kKAotIAkJCWZ1bmN0X3JlZiA9IGU7Ci0gCQllbHNl Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCWRlZmF1bHRfUkFORF9tZXRoID0g RklQU19tb2RlKCkgPyBGSVBTX3JhbmRfbWV0aG9kKCkgOiBSQU5EX1NTTGVheSgpOwotKwkJfQot KwlpZiAoRklQU19tb2RlKCkKLSsJCSYmIGRlZmF1bHRfUkFORF9tZXRoICE9IEZJUFNfcmFuZF9j aGVjaygpKQotKwkgICAgewotKwkgICAgUkFORGVycihSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRI T0QsUkFORF9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsj ZWxzZQotIAkJCWRlZmF1bHRfUkFORF9tZXRoID0gUkFORF9TU0xlYXkoKTsKLSAJCX0KLSsjZW5k aWYKLSAJcmV0dXJuIGRlZmF1bHRfUkFORF9tZXRoOwotIAl9Ci0gCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9yYzIvcmMyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9yYzIvcmMyLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzIvcmMyLmgu ZmlwcwkyMDA5LTExLTIzIDA4OjMyOjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL3JjMi9yYzIuaAkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCAr MDEwMAotQEAgLTc5LDcgKzc5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcmMyX2tleV9zdAotIAlSQzJf SU5UIGRhdGFbNjRdOwotIAl9IFJDMl9LRVk7Ci0gCi0tIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMg Ci0rdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3Qg dW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7Ci0rI2VuZGlmCi0gdm9pZCBSQzJfc2V0X2tl eShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJp dHMpOwotIHZvaWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2ln bmVkIGNoYXIgKm91dCxSQzJfS0VZICprZXksCi0gCQkgICAgIGludCBlbmMpOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmMyL3JjMl9za2V5LmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9yYzIvcmMyX3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JjMi9yYzJfc2tleS5jLmZpcHMJMjAwNy0wOS0xOCAyMzoxMDozMi4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzIvcmMyX3NrZXkuYwkyMDA5 LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTU3LDYgKzU3LDExIEBACi0gICov Ci0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvcmMyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsKLSAjaW5jbHVkZSAicmMyX2xvY2wuaCIKLSAKLSBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrZXlfdGFibGVbMjU2XT17Ci1AQCAtOTQsOCArOTksMjAgQEAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1NgotICAqIEJTQUZFIHVzZXMgdGhlICdyZXRhcmRl ZCcgdmVyc2lvbi4gIFdoYXQgSSBwcmV2aW91c2x5IHNoaXBwZWQgaXMKLSAgKiB0aGUgc2FtZSBh cyBzcGVjaWZ5aW5nIDEwMjQgZm9yIHRoZSAnYml0cycgcGFyYW1ldGVyLiAgQnNhZmUgdXNlcwot ICAqIGEgdmVyc2lvbiB3aGVyZSB0aGUgYml0cyBwYXJhbWV0ZXIgaXMgdGhlIHNhbWUgYXMgbGVu KjggKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0gdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZ ICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQotIAl7 Ci0rCWlmIChGSVBTX21vZGUoKSkKLSsJCUZJUFNfQkFEX0FCT1JUKFJDMikKLSsJcHJpdmF0ZV9S QzJfc2V0X2tleShrZXksIGxlbiwgZGF0YSwgYml0cyk7Ci0rCX0KLSt2b2lkIHByaXZhdGVfUkMy X3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRh LAotKwkJCQkJCQkJaW50IGJpdHMpCi0rI2Vsc2UKLSt2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkg KmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGJpdHMpCi0rI2Vu ZGlmCi0rCXsKLSAJaW50IGksajsKLSAJdW5zaWduZWQgY2hhciAqazsKLSAJUkMyX0lOVCAqa2k7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5w bC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwuZmlwcwky MDA5LTAyLTEyIDE1OjQ4OjQ5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAw MDAwICswMTAwCi1AQCAtMjAyLDQgKzIwMiw2IEBAIFJDNF9vcHRpb25zOgotIC5zdHJpbmcJInJj NCg4eCxjaGFyKSIKLSBfX18KLSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3ByaXZhdGVfUkM0 X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNvZGU7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcwkyMDA5 LTA0LTI3IDIxOjMxOjA0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTQ5OSw2ICs0OTksOCBAQCBfX18KLSAKLSAkY29kZSA9fiBzLyMoW2J3ZF0p LyQxL2dtOwotIAotKyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9n IGlmICgkRU5We0ZJUFN9IG5lICIiKTsKLSsKLSBwcmludCAkY29kZTsKLSAKLSBjbG9zZSBTVERP VVQ7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC01ODYu cGwuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwuZmlwcwkyMDA3 LTEyLTAyIDIyOjMyOjAzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCAr MDEwMAotQEAgLTE2Niw4ICsxNjYsMTIgQEAgJGlkeD0iZWR4IjsKLSAKLSAmZXh0ZXJuYWxfbGFi ZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7Ci0gCi0rJHNldGtleWZ1bmMgPSAiUkM0X3NldF9rZXki OwotKyRzZXRrZXlmdW5jID0gInByaXZhdGVfUkM0X3NldF9rZXkiIGlmICgkRU5We0ZJUFN9IG5l ICIiKTsKLSsKLSsKLSAjIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LGludCBsZW4sY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0tJmZ1bmN0aW9uX2JlZ2luKCJSQzRfc2V0X2tleSIp OwotKyZmdW5jdGlvbl9iZWdpbigkc2V0a2V5ZnVuYyk7Ci0gCSZtb3YJKCRvdXQsJndwYXJhbSgw KSk7CQkjIGxvYWQga2V5Ci0gCSZtb3YJKCRpZGksJndwYXJhbSgxKSk7CQkjIGxvYWQgbGVuCi0g CSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CQkjIGxvYWQgZGF0YQotQEAgLTI0NSw3ICsyNDksNyBA QCAkaWR4PSJlZHgiOwotIAkmeG9yCSgiZWF4IiwiZWF4Iik7Ci0gCSZtb3YJKCZEV1AoLTgsJG91 dCksImVheCIpOwkJIyBrZXktPng9MDsKLSAJJm1vdgkoJkRXUCgtNCwkb3V0KSwiZWF4Iik7CQkj IGtleS0+eT0wOwotLSZmdW5jdGlvbl9lbmQoIlJDNF9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2Vu ZCgkc2V0a2V5ZnVuYyk7Ci0gCi0gIyBjb25zdCBjaGFyICpSQzRfb3B0aW9ucyh2b2lkKTsKLSAm ZnVuY3Rpb25fYmVnaW5fQigiUkM0X29wdGlvbnMiKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JjNC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L3JjNC9NYWtlZmlsZQotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9NYWtlZmls ZS5maXBzCTIwMDktMDItMTEgMTE6MDE6MzYuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcmM0L01ha2VmaWxlCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAw MDAwICswMTAwCi1AQCAtMjEsOCArMjEsOCBAQCBURVNUPXJjNHRlc3QuYwotIEFQUFM9Ci0gCi0g TElCPSQoVE9QKS9saWJjcnlwdG8uYQotLUxJQlNSQz1yYzRfc2tleS5jIHJjNF9lbmMuYwotLUxJ Qk9CSj0kKFJDNF9FTkMpCi0rTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jIHJjNF9mYmxrLmMK LStMSUJPQko9JChSQzRfRU5DKSByYzRfZmJsay5vCi0gCi0gU1JDPSAkKExJQlNSQykKLSAKLWRp ZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvcmM0X2ZibGsu YwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTIwIDA4OjMwOjQzLjUzNDAwMjIxNSArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzRfZmJsay5jCTIwMDktMTEtMjMgMDg6 MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDc1IEBACi0rLyogY3J5cHRvL3JjNC9y YzRfZmJsay5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBv cGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5z aW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9yYzQu aD4KLSsjaW5jbHVkZSAicmM0X2xvY2wuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rLyogRklQUyBtb2RlIGJsb2Nr aW5nIGZvciBSQzQgaGFzIHRvIGJlIGRvbmUgc2VwYXJhdGVseSBzaW5jZSBSQzRfc2V0X2tleQot KyAqIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbiBhc3NlbWJseSBsYW5ndWFnZSBmaWxlLgotKyAq LwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtl eSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsJewotKwlpZiAoRklQU19t b2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9SVChSQzQpCi0rCXByaXZhdGVfUkM0X3NldF9rZXkoa2V5 LCBsZW4sIGRhdGEpOwotKwl9Ci0rI2VuZGlmCi0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9yYzQvcmM0LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQv cmM0LmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvcmM0LmguZmlwcwkyMDA5 LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JjNC9yYzQuaAkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAg LTc4LDYgKzc4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcmM0X2tleV9zdAotIAotICAKLSBjb25zdCBj aGFyICpSQzRfb3B0aW9ucyh2b2lkKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBwcml2 YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSk7Ci0rI2VuZGlmCi0gdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBs ZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotIHZvaWQgUkM0KFJDNF9LRVkgKmtleSwg c2l6ZV90IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqaW5kYXRhLAotIAkJdW5zaWduZWQgY2hh ciAqb3V0ZGF0YSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvcmM0 X3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzRfc2tleS5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcwkyMDA3LTAx LTIxIDE0OjA3OjEzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3JjNC9yYzRfc2tleS5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1A QCAtNTksNiArNTksMTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4KLSAjaW5jbHVkZSAi cmM0X2xvY2wuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gY29uc3QgY2hhciBSQzRfdmVyc2lvbltdPSJSQzQi IE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC04NSw3ICs5MCwxMSBAQCBjb25zdCBjaGFy ICpSQzRfb3B0aW9ucyh2b2lkKQotICAqIERhdGU6IFdlZCwgMTQgU2VwIDE5OTQgMDY6MzU6MzEg R01UCi0gICovCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9SQzRfc2V0 X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0r I2Vsc2UKLSB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSkKLSsjZW5kaWYKLSAJewotICAgICAgICAgcmVnaXN0ZXIgUkM0X0lO VCB0bXA7Ci0gICAgICAgICByZWdpc3RlciBpbnQgaWQxLGlkMjsKLUBAIC0xMjYsNyArMTM1LDEy IEBAIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCAKLSAJCSAqIG1vZHVs ZS4uLgotIAkJICoJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgotIAkJICovCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwkJdW5zaWduZWQgbG9uZyAqaWEzMmNhcF9wdHIgPSBPUEVOU1NMX2lhMzJj YXBfbG9jKCk7Ci0rCQlpZiAoaWEzMmNhcF9wdHIgJiYgKCppYTMyY2FwX3B0ciAmICgxPDwyOCkp KSB7Ci0rI2Vsc2UKLSAJCWlmIChPUEVOU1NMX2lhMzJjYXBfUCAmICgxPDwyOCkpIHsKLSsjZW5k aWYKLSAJCQl1bnNpZ25lZCBjaGFyICpjcD0odW5zaWduZWQgY2hhciAqKWQ7Ci0gCi0gCQkJZm9y IChpPTA7aTwyNTY7aSsrKSBjcFtpXT1pOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vcmlwZW1kL3JpcGVtZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmlw ZW1kL3JpcGVtZC5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmlwZW1kL3JpcGVt ZC5oLmZpcHMJMjAwOS0xMS0yMyAwODozMjozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9yaXBlbWQvcmlwZW1kLmgJMjAwOS0xMS0yMyAwODozMjozMS4w MDAwMDAwMDAgKzAxMDAKLUBAIC05MSw2ICs5MSw5IEBAIHR5cGVkZWYgc3RydWN0IFJJUEVNRDE2 MHN0YXRlX3N0Ci0gCXVuc2lnbmVkIGludCAgIG51bTsKLSAJfSBSSVBFTUQxNjBfQ1RYOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9SSVBFTUQxNjBfSW5pdChSSVBFTUQx NjBfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAq Yyk7Ci0gaW50IFJJUEVNRDE2MF9VcGRhdGUoUklQRU1EMTYwX0NUWCAqYywgY29uc3Qgdm9pZCAq ZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFJJUEVNRDE2MF9GaW5hbCh1bnNpZ25lZCBjaGFyICpt ZCwgUklQRU1EMTYwX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JpcGVt ZC9ybWRfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmlwZW1kL3JtZF9k Z3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjEzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCTIwMDktMTEtMjMgMDg6MzI6 MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNTksNiArNTksMTEgQEAKLSAjaW5jbHVkZSA8c3RkaW8u aD4KLSAjaW5jbHVkZSAicm1kX2xvY2wuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gCi0gY29uc3QgY2hhciBSTUQxNjBf dmVyc2lvbltdPSJSSVBFLU1EMTYwIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtNjks NyArNzQsNyBAQCBjb25zdCBjaGFyIFJNRDE2MF92ZXJzaW9uW109IlJJUEUtTUQxNjAiCi0gICAg ICB2b2lkIHJpcGVtZDE2MF9ibG9jayhSSVBFTUQxNjBfQ1RYICpjLCB1bnNpZ25lZCBsb25nICpw LHNpemVfdCBudW0pOwotICMgIGVuZGlmCi0gCi0taW50IFJJUEVNRDE2MF9Jbml0KFJJUEVNRDE2 MF9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KFJJUEVNRDE2MCkKLSAJewotIAltZW1z ZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1SSVBFTUQxNjBfQTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9yc2EvcnNhX2VheS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cnNhL3JzYV9lYXkuYy5maXBzCTIwMDgtMDktMTQgMTU6NTE6NDQuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9lYXkuYwkyMDA5LTExLTIzIDA4 OjMzOjMyLjAwMDAwMDAwMCArMDEwMAotQEAgLTExNCw2ICsxMTQsMTAgQEAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotICNpZm5kZWYgUlNB X05VTEwKLSAKLUBAIC0xMzgsNyArMTQyLDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3BrY3Mx X2VheV9tZXRoPXsKLSAJQk5fbW9kX2V4cF9tb250LCAvKiBYWFggcHJvYmFibHkgd2Ugc2hvdWxk IG5vdCB1c2UgTW9udGdvbWVyeSBpZiAgZSA9PSAzICovCi0gCVJTQV9lYXlfaW5pdCwKLSAJUlNB X2VheV9maW5pc2gsCi0tCTAsIC8qIGZsYWdzICovCi0rCVJTQV9GTEFHX0ZJUFNfTUVUSE9ELCAv KiBmbGFncyAqLwotIAlOVUxMLAotIAkwLCAvKiByc2Ffc2lnbiAqLwotIAkwLCAvKiByc2FfdmVy aWZ5ICovCi1AQCAtMTUwLDYgKzE1NCwxNiBAQCBjb25zdCBSU0FfTUVUSE9EICpSU0FfUEtDUzFf U1NMZWF5KHZvaWQpCi0gCXJldHVybigmcnNhX3BrY3MxX2VheV9tZXRoKTsKLSAJfQotIAotKy8q IFVzYWdlIGV4YW1wbGU7Ci0rICogICAgTU9OVF9IRUxQRVIocnNhLCBibl9jdHgsIHAsIHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVycik7Ci0rICovCi0rI2RlZmlu ZSBNT05UX0hFTFBFUihyc2EsIGN0eCwgbSwgcHJlX2NvbmQsIGVycl9pbnN0cikgXAotKwlpZigo cHJlX2NvbmQpICYmICgocnNhKS0+X21ldGhvZF9tb2RfIyNtID09IE5VTEwpICYmIFwKLSsJCQkh Qk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmKChyc2EpLT5fbWV0aG9kX21vZF8jI20pLCBcCi0rCQkJ CUNSWVBUT19MT0NLX1JTQSwgXAotKwkJCQkocnNhKS0+bSwgKGN0eCkpKSBcCi0rCQllcnJfaW5z dHIKLSsKLSBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmZyb20sCi0gCSAgICAgdW5zaWduZWQgY2hhciAqdG8sIFJTQSAqcnNh LCBpbnQgcGFkZGluZykKLSAJewotQEAgLTE1OCw2ICsxNzIsMjMgQEAgc3RhdGljIGludCBSU0Ff ZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9TlVMTDsKLSAJ Qk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfbW9k ZSgpKQotKwkJewotKwkJaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJ UFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNh LT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNB ZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKEJOX251 bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQotIAkJewotIAkJ UlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX01PRFVMVVNfVE9PX0xB UkdFKTsKLUBAIC0yMjMsOSArMjU0LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1YmxpY19lbmNy eXB0KGludCBmbAotIAkJZ290byBlcnI7Ci0gCQl9Ci0gCi0tCWlmIChyc2EtPmZsYWdzICYgUlNB X0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2Et Pl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJCWdvdG8g ZXJyOwotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NB Q0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChy ZXQsZixyc2EtPmUscnNhLT5uLGN0eCwKLSAJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8gZXJy OwotQEAgLTM1NSw2ICszODQsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlw dChpbnQgZgotIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOwotIAlCTl9CTElORElORyAqYmxpbmRp bmcgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQot KwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihG SVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVE KTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8 IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNBZXJyKFJT QV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwot KwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NU WF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlmICAg PSBCTl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNDMyLDkgKzQ3OCw3IEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wcml2YXRlX2VuY3J5cHQoaW50IGYKLSAJCWVsc2UKLSAJCQlkPSByc2EtPmQ7Ci0gCi0tCQlp ZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKLS0JCQlpZighQk5fTU9OVF9D VFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+ biwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0rCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAkJaWYgKCFy c2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAotIAkJCQlyc2EtPl9tZXRo b2RfbW9kX24pKSBnb3RvIGVycjsKLUBAIC00ODgsNiArNTMyLDIzIEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAJaW50IGxvY2FsX2JsaW5kaW5nID0gMDsKLSAJ Qk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0r CQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKEJO X251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0r CQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCwgUlNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgot KwotIAlpZigoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RY X3N0YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC01NTUsOSArNjE2LDcg QEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgotIAkJZWxzZQotIAkJ CWQgPSByc2EtPmQ7Ci0gCi0tCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJ QykKLS0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2Rfbiwg Q1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJCWdvdG8gZXJyOwotKwkJTU9OVF9I RUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdv dG8gZXJyKTsKLSAJCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLGQscnNhLT5uLGN0 eCwKLSAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkKLSAJCSAgZ290byBlcnI7Ci1AQCAtNjE3LDYg KzY3NiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCi0gCXVu c2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVz dF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVD UllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0K LSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9E VUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQ VCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJ fQotKyNlbmRpZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01B WF9NT0RVTFVTX0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfREVD UllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTY2Nyw5ICs3NDMsNyBAQCBzdGF0 aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50IGZsCi0gCQlnb3RvIGVycjsKLSAJCX0K LSAKLS0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlpZiAoIUJO X01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNB LCByc2EtPm4sIGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBu LCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCWlm ICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAotIAkJcnNh LT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7Ci1AQCAtNzE3LDYgKzc5MSw3IEBAIHN0YXRpYyBp bnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKLSAJQklHTlVNICpyMSwqbTEsKnZyZnk7 Ci0gCUJJR05VTSBsb2NhbF9kbXAxLGxvY2FsX2RtcTEsbG9jYWxfYyxsb2NhbF9yMTsKLSAJQklH TlVNICpkbXAxLCpkbXExLCpjLCpwcjE7Ci0rCWludCBibl9mbGFnczsKLSAJaW50IHJldD0wOwot IAotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLUBAIC03MjQsNDEgKzc5OSwzMSBAQCBzdGF0aWMgaW50 IFJTQV9lYXlfbW9kX2V4cChCSUdOVU0gKnIwLCBjCi0gCW0xID0gQk5fQ1RYX2dldChjdHgpOwot IAl2cmZ5ID0gQk5fQ1RYX2dldChjdHgpOwotIAotLQl7Ci0tCQlCSUdOVU0gbG9jYWxfcCwgbG9j YWxfcTsKLS0JCUJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTDsKLS0KLS0JCS8qIE1ha2Ugc3Vy ZSBCTl9tb2RfaW52ZXJzZSBpbiBNb250Z29tZXJ5IGludGlhbGl6YXRpb24gdXNlcyB0aGUKLS0J CSAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZyAodW5sZXNzIFJTQV9GTEFHX05PX0NPTlNUVElNRSBp cyBzZXQpCi0tCQkgKi8KLS0JCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJ TUUpKQotLQkJCXsKLS0JCQlCTl9pbml0KCZsb2NhbF9wKTsKLS0JCQlwID0gJmxvY2FsX3A7Ci0t CQkJQk5fd2l0aF9mbGFncyhwLCByc2EtPnAsIEJOX0ZMR19DT05TVFRJTUUpOwotLQotLQkJCUJO X2luaXQoJmxvY2FsX3EpOwotLQkJCXEgPSAmbG9jYWxfcTsKLS0JCQlCTl93aXRoX2ZsYWdzKHEs IHJzYS0+cSwgQk5fRkxHX0NPTlNUVElNRSk7Ci0tCQkJfQotLQkJZWxzZQotLQkJCXsKLS0JCQlw ID0gcnNhLT5wOwotLQkJCXEgPSByc2EtPnE7Ci0tCQkJfQotKwkvKiBNYWtlIHN1cmUgbW9kX2lu dmVyc2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdCAKLSsJICogQk5f RkxHX0NPTlNUVElNRSBmbGFnLgotKwkgKi8KLSsJYm5fZmxhZ3MgPSByc2EtPnAtPmZsYWdzOwot KwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKLSsJCXsKLSsJCXJz YS0+cC0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKLSsJCX0KLSsJTU9OVF9IRUxQRVIocnNh LCBjdHgsIHAsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVycik7 Ci0rCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLwotKwlyc2EtPnAtPmZsYWdzID0gYm5f ZmxhZ3M7Ci0gCi0tCQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUpCi0t CQkJewotLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9w LCBDUllQVE9fTE9DS19SU0EsIHAsIGN0eCkpCi0tCQkJCWdvdG8gZXJyOwotLQkJCWlmICghQk5f TU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9xLCBDUllQVE9fTE9DS19SU0Es IHEsIGN0eCkpCi0tCQkJCWdvdG8gZXJyOwotLQkJCX0KLS0JfQotKyAgICAgICAgLyogTWFrZSBz dXJlIG1vZF9pbnZlcnNlIGluIG1vbnRnb21lcmV5IGludGlhbGl6YXRpb24gdXNlIGNvcnJlY3QK LSsgICAgICAgICAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZy4KLSsgICAgICAgICAqLwotKwlibl9m bGFncyA9IHJzYS0+cS0+ZmxhZ3M7Ci0rCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19D T05TVFRJTUUpKQotKwkJewotKwkJcnNhLT5xLT5mbGFncyB8PSBCTl9GTEdfQ09OU1RUSU1FOwot KwkJfQotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcSwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NB Q0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKLSsJLyogV2UgcmVzdG9yZSBibl9mbGFncyBiYWNrICov Ci0rCXJzYS0+cS0+ZmxhZ3MgPSBibl9mbGFnczsJCi0gCi0tCWlmIChyc2EtPmZsYWdzICYgUlNB X0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2Et Pl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJCWdvdG8g ZXJyOwotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NB Q0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAkvKiBjb21wdXRlIEkgbW9kIHEgKi8KLSAJaWYg KCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi1AQCAtODc1LDYgKzk0MCw5 IEBAIGVycjoKLSAKLSBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKLSAJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAly c2EtPmZsYWdzfD1SU0FfRkxBR19DQUNIRV9QVUJMSUN8UlNBX0ZMQUdfQ0FDSEVfUFJJVkFURTsK LSAJcmV0dXJuKDEpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y c2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9lcnIu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcwkyMDA4 LTEyLTI5IDE3OjExOjU2LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAK LUBAIC0xMTEsOCArMTExLDEyIEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9mdW5j dHNbXT0KLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSU5UX0ZQKSwJIlJTQV9wcmludF9mcCJ9LAot IHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVl9ERUNPREUpLAkiUlNBX1BSSVZfREVDT0RFIn0sCi0g e0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0VOQ09ERSksCSJSU0FfUFJJVl9FTkNPREUifSwKLSt7 RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfcHJpdmF0ZV9lbmNyeXB0 In0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJfREVDT0RFKSwJIlJTQV9QVUJfREVDT0RFIn0s Ci0re0VSUl9GVU5DKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCksCSJSU0FfcHVibGljX2RlY3J5 cHQifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwJIlJTQV9zZXR1cF9i bGluZGluZyJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwJIlJT QV9zZXRfZGVmYXVsdF9tZXRob2QifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9NRVRIT0Qp LAkiUlNBX3NldF9tZXRob2QifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLAkiUlNBX3Np Z24ifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcpLAkiUlNB X3NpZ25fQVNOMV9PQ1RFVF9TVFJJTkcifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1ZFUklGWSks CSJSU0FfdmVyaWZ5In0sCi1AQCAtMTU1LDEwICsxNTksMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdf REFUQSBSU0Ffc3RyX3JlYXNvbnNbXQotIHtFUlJfUkVBU09OKFJTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCkgICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9MQVNU X09DVEVUX0lOVkFMSUQpICAgICwibGFzdCBvY3RldCBpbnZhbGlkIn0sCi0ge0VSUl9SRUFTT04o UlNBX1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCi0re0VS Ul9SRUFTT04oUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9 LAotIHtFUlJfUkVBU09OKFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVCkgICAgLCJubyBwdWJsaWMg ZXhwb25lbnQifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5H KSwibnVsbCBiZWZvcmUgYmxvY2sgbWlzc2luZyJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX05fRE9F U19OT1RfRVFVQUxfUF9RKSAgLCJuIGRvZXMgbm90IGVxdWFsIHAgcSJ9LAotIHtFUlJfUkVBU09O KFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IpICAgLCJvYWVwIGRlY29kaW5nIGVycm9yIn0sCi0r e0VSUl9SRUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSksIm9w ZXJhdGlvbiBub3QgYWxsb3dlZCBpbiBmaXBzIG1vZGUifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9P UEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJU19LRVlUWVBFKSwib3BlcmF0aW9uIG5vdCBz dXBwb3J0ZWQgZm9yIHRoaXMga2V5dHlwZSJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX1BBRERJTkdf Q0hFQ0tfRkFJTEVEKSAgLCJwYWRkaW5nIGNoZWNrIGZhaWxlZCJ9LAotIHtFUlJfUkVBU09OKFJT QV9SX1BfTk9UX1BSSU1FKSAgICAgICAgICAgLCJwIG5vdCBwcmltZSJ9LAotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JzYS9yc2FfZ2VuLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNy4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2dlbi5jCTIwMDktMTEtMjMg MDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNjcsNiArNjcsODIgQEAKLSAjaW5jbHVkZSAi Y3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L3JzYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotK3N0YXRpYyBpbnQgZmlwc19yc2FfcGFpcndpc2Vf ZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKQotKwl7Ci0r CWZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0raW50IGZpcHNfY2hlY2tfcnNh KFJTQSAqcnNhKQotKwl7Ci0rCWNvbnN0IHVuc2lnbmVkIGNoYXIgdGJzW10gPSAiUlNBIFBhaXJ3 aXNlIENoZWNrIERhdGEiOwotKwl1bnNpZ25lZCBjaGFyICpjdGJ1ZiA9IE5VTEwsICpwdGJ1ZiA9 IE5VTEw7Ci0rCWludCBsZW4sIHJldCA9IDA7Ci0rCUVWUF9QS0VZICpwazsKLSsKLSsJaWYgKChw az1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwotKwlFVlBfUEtFWV9z ZXQxX1JTQShwaywgcnNhKTsKLSsKLSsJLyogUGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBz aWduYXR1cmUgdGVzdCAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJz LCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1Mx LCBOVUxMKQotKwkJfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJ CQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsIE5VTEwpCi0r CQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAs IEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBOVUxMKSkKLSsJCWdvdG8gZXJy OwotKwkvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0L2RlY3J5cHQg dGVzdCAqLwotKwljdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOwotKwlpZiAo IWN0YnVmKQotKwkJZ290byBlcnI7Ci0rCi0rCWxlbiA9IFJTQV9wdWJsaWNfZW5jcnlwdChzaXpl b2YodGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKwlpZiAo bGVuIDw9IDApCi0rCQlnb3RvIGVycjsKLSsJLyogQ2hlY2sgY2lwaGVydGV4dCBkb2Vzbid0IG1h dGNoIHBsYWludGV4dCAqLwotKwlpZiAoKGxlbiA9PSAoc2l6ZW9mKHRicykgLSAxKSkgJiYgIW1l bWNtcCh0YnMsIGN0YnVmLCBsZW4pKQotKwkJZ290byBlcnI7Ci0rCXB0YnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCi0rCWlmICghcHRidWYpCi0rCQlnb3RvIGVycjsKLSsJ bGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtD UzFfUEFERElORyk7Ci0rCWlmIChsZW4gIT0gKHNpemVvZih0YnMpIC0gMSkpCi0rCQlnb3RvIGVy cjsKLSsJaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQotKwkJZ290byBlcnI7Ci0rCi0rCXJl dCA9IDE7Ci0rCi0rCWlmICghcHRidWYpCi0rCQlnb3RvIGVycjsKLSsJCi0rCWVycjoKLSsJaWYg KHJldCA9PSAwKQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJRklQU2Vy cihGSVBTX0ZfRklQU19DSEVDS19SU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJ CX0KLSsKLSsJaWYgKGN0YnVmKQotKwkJT1BFTlNTTF9mcmVlKGN0YnVmKTsKLSsJaWYgKHB0YnVm KQotKwkJT1BFTlNTTF9mcmVlKHB0YnVmKTsKLSsJaWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShw ayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IHJzYV9i dWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VO Q0IgKmNiKTsKLSAKLUBAIC05MCw2ICsxNjYsMjMgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9r ZXlnZW4oUlNBICpyc2EsIAotIAlpbnQgYml0c3AsYml0c3Esb2s9IC0xLG49MDsKLSAJQk5fQ1RY ICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkK LSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICAJewotKwkJICAgIEZJ UFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkgICAgCXJldHVybiAwOwotKwkgICAgCX0KLSsKLSsJCWlmIChiaXRzIDwgT1BFTlNT TF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJICAgIHsKLSsJCSAgICBGSVBTZXJyKEZJ UFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0tFWV9UT09fU0hPUlQpOwotKwkJICAgIHJl dHVybiAwOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJY3R4PUJOX0NUWF9uZXcoKTsKLSAJ aWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci1AQCAtMjAx LDYgKzI5NCwxNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgCi0g CQlwID0gcnNhLT5wOwotIAlpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCxyc2EtPnEscCxj dHgpKSBnb3RvIGVycjsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUo KSkKLSsJCXsKLSsJCWlmIChmaXBzX3JzYV9wYWlyd2lzZV9mYWlsKQotKwkJCUJOX2FkZF93b3Jk KHJzYS0+biwgMSk7Ci0rCi0rCQlpZighZmlwc19jaGVja19yc2EocnNhKSkKLSsJCSAgICBnb3Rv IGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJb2s9MTsKLSBlcnI6Ci0gCWlmIChvayA9PSAtMSkK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2EuaC5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2EuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMDktMTEtMjMgMDg6MzI6MzAuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYS5oCTIwMDktMTEtMjMgMDg6 MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNzQsNiArNzQsMjEgQEAKLSAjZXJyb3IgUlNBIGlz IGRpc2FibGVkLgotICNlbmRpZgotIAotKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIFJTQSBt ZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCi0rICogaW4gRklQUyBtb2Rl LiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCi0rICog YXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyBy ZXBvc2liaWxpdHkKLSsgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCi0rICov Ci0rCi0rI2RlZmluZSBSU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAotKwotKy8qIElmIHRo aXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBt b2RlIGFyZQotKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9u c2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCi0rICogdXNhZ2UgaXMgY29tcGxpYW50LgotKyAq LwotKwotKyNkZWZpbmUgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKLSsKLSAjaWZk ZWYgIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7Ci0gI2VuZGlmCi1AQCAtMTY0LDYgKzE3OSw4 IEBAIHN0cnVjdCByc2Ffc3QKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRT CTE2Mzg0Ci0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVT X0JJVFMgMTAyNAotKwotICNpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCi0g IyBkZWZpbmUgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCTMwNzIKLSAjZW5kaWYKLUBA IC0yNjcsNiArMjg0LDExIEBAIFJTQSAqCVJTQV9nZW5lcmF0ZV9rZXkoaW50IGJpdHMsIHVuc2ln bmUKLSAKLSAvKiBOZXcgdmVyc2lvbiAqLwotIGludAlSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAq cnNhLCBpbnQgYml0cywgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0FfWDkzMV9k ZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJ R05VTSAqcTIsCi0rCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25z dCBCSUdOVU0gKlhwLAotKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwg Y29uc3QgQklHTlVNICpYcSwKLSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0r aW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJ R05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLSAKLSBpbnQJUlNBX2NoZWNrX2tleShjb25zdCBSU0Eg Kik7Ci0gCS8qIG5leHQgNCByZXR1cm4gLTEgb24gZXJyb3IgKi8KLUBAIC00MzgsOCArNDYwLDEy IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBSU0FfRl9SU0Ff UFJJTlRfRlAJCQkJIDExNgotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfREVDT0RFCQkJCSAxMzcK LSAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0VOQ09ERQkJCQkgMTM4Ci0rI2RlZmluZSBSU0FfRl9S U0FfUFJJVkFURV9FTkNSWVBUCQkJIDE0OAotICNkZWZpbmUgUlNBX0ZfUlNBX1BVQl9ERUNPREUJ CQkJIDEzOQotKyNkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUCQkJIDE0OQotICNkZWZp bmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HCQkJIDEzNgotKyNkZWZpbmUgUlNBX0ZfUlNBX1NF VF9ERUZBVUxUX01FVEhPRAkJCSAxNTAKLSsjZGVmaW5lIFJTQV9GX1JTQV9TRVRfTUVUSE9ECQkJ CSAxNTEKLSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOCQkJCQkgMTE3Ci0gI2RlZmluZSBSU0FfRl9S U0FfU0lHTl9BU04xX09DVEVUX1NUUklORwkJIDExOAotICNkZWZpbmUgUlNBX0ZfUlNBX1ZFUklG WQkJCQkgMTE5Ci1AQCAtNDc5LDEwICs1MDUsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5n cyh2b2lkKTsKLSAjZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMjAKLSAjZGVm aW5lIFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRAkJCSAxMzQKLSAjZGVmaW5lIFJTQV9SX01PRFVM VVNfVE9PX0xBUkdFCQkJCSAxMDUKLSsjZGVmaW5lIFJTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkg MTQ5Ci0gI2RlZmluZSBSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQJCQkgMTQwCi0gI2RlZmluZSBS U0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HCQkJIDExMwotICNkZWZpbmUgUlNBX1JfTl9E T0VTX05PVF9FUVVBTF9QX1EJCQkgMTI3Ci0gI2RlZmluZSBSU0FfUl9PQUVQX0RFQ09ESU5HX0VS Uk9SCQkJIDEyMQotKyNkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNf TU9ERQkgMTUwCi0gI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX1NVUFBPUlRFRF9GT1JfVEhJ U19LRVlUWVBFCSAxNDgKLSAjZGVmaW5lIFJTQV9SX1BBRERJTkdfQ0hFQ0tfRkFJTEVECQkJIDEx NAotICNkZWZpbmUgUlNBX1JfUF9OT1RfUFJJTUUJCQkJIDEyOAotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3JzYS9yc2FfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2Ev cnNhX2xpYi5jLmZpcHMJMjAwOS0wOC0wNSAxNzowNDoxNi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2xpYi5jCTIwMDktMTEtMjMgMDg6MzI6 MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtODAsNiArODAsMTMgQEAgUlNBICpSU0FfbmV3KHZvaWQp Ci0gCi0gdm9pZCBSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0IFJTQV9NRVRIT0QgKm1ldGgp Ci0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgt PmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JT QV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rCQlyZXR1cm47 Ci0rCQl9Ci0rI2VuZGlmCi0gCWRlZmF1bHRfUlNBX21ldGggPSBtZXRoOwotIAl9Ci0gCi1AQCAt MTExLDYgKzExOCwxMyBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9N Ci0gCS8qIE5COiBUaGUgY2FsbGVyIGlzIHNwZWNpZmljYWxseSBzZXR0aW5nIGEgbWV0aG9kLCBz byBpdCdzIG5vdCB1cCB0byB1cwotIAkgKiB0byBkZWFsIHdpdGggd2hpY2ggRU5HSU5FIGl0IGNv bWVzIGZyb20uICovCi0gCWNvbnN0IFJTQV9NRVRIT0QgKm10bXA7Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNf TUVUSE9EKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0FfU0VUX01FVEhPRCwgUlNBX1JfTk9O X0ZJUFNfTUVUSE9EKTsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotIAltdG1wID0gcnNh LT5tZXRoOwotIAlpZiAobXRtcC0+ZmluaXNoKSBtdG1wLT5maW5pc2gocnNhKTsKLSAjaWZuZGVm IE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAtMTYzLDYgKzE3NywxOCBAQCBSU0EgKlJTQV9uZXdfbWV0 aG9kKEVOR0lORSAqZW5naW5lKQotIAkJCX0KLSAJCX0KLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKHJldC0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxB R19GSVBTX01FVEhPRCkpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX05FV19NRVRIT0QsIFJT QV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotKwkJaWYg KHJldC0+ZW5naW5lKQotKwkJCUVOR0lORV9maW5pc2gocmV0LT5lbmdpbmUpOwotKyNlbmRpZgot KwkJT1BFTlNTTF9mcmVlKHJldCk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5kaWYKLSAK LSAJcmV0LT5wYWQ9MDsKLSAJcmV0LT52ZXJzaW9uPTA7Ci1AQCAtMjg1LDYgKzMxMSwxMyBAQCBp bnQgUlNBX3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1Ci0gaW50IFJTQV9wcml2YXRl X2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNo YXIgKnRvLAotIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSAJewotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQs IFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rI2VuZGlmCi0gCXJldHVybihyc2EtPm1ldGgtPnJzYV9wcml2X2VuYyhmbGVuLCBm cm9tLCB0bywgcnNhLCBwYWRkaW5nKSk7Ci0gCX0KLSAKLUBAIC0yOTcsNiArMzMwLDEzIEBAIGlu dCBSU0FfcHJpdmF0ZV9kZWNyeXB0KGludCBmbGVuLCBjb25zdCAKLSBpbnQgUlNBX3B1YmxpY19k ZWNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFy ICp0bywKLSAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0gCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJT QV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJcmV0dXJuIDA7Ci0r CQl9Ci0rI2VuZGlmCi0gCXJldHVybihyc2EtPm1ldGgtPnJzYV9wdWJfZGVjKGZsZW4sIGZyb20s IHRvLCByc2EsIHBhZGRpbmcpKTsKLSAJfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y c2EvcnNhX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2Ffc2ln bi5jLmZpcHMJMjAwNy0wNC0yNCAwMzowNTo0Mi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX3NpZ24uYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAw MDAwMDAwMCArMDEwMAotQEAgLTEzMCw3ICsxMzAsOCBAQCBpbnQgUlNBX3NpZ24oaW50IHR5cGUs IGNvbnN0IHVuc2lnbmVkIGNoCi0gCQlpMmRfWDUwOV9TSUcoJnNpZywmcCk7Ci0gCQlzPXRtcHM7 Ci0gCX0KLS0JaT1SU0FfcHJpdmF0ZV9lbmNyeXB0KGkscyxzaWdyZXQscnNhLFJTQV9QS0NTMV9Q QURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWluZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZv aWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMgPyByc2Et Pm1ldGgtPnJzYV9wcml2X2VuYyhpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAw OwotIAlpZiAoaSA8PSAwKQotIAkJcmV0PTA7Ci0gCWVsc2UKLUBAIC0xNjEsOCArMTYyLDggQEAg aW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotIAotIAlpZigoZHR5cGUg PT0gTklEX21kNV9zaGExKSAmJiBybSkKLSAJCXsKLS0JCWkgPSBSU0FfcHVibGljX2RlY3J5cHQo KGludClzaWdsZW4sCi0tCQkJCQlzaWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJ CWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2RlYygoaW50 KXNpZ2xlbiwKLSsJCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAJ CWlmIChpIDw9IDApCi0gCQkJcmV0dXJuIDA7Ci0gCQkqcHJtX2xlbiA9IGk7Ci1AQCAtMTc5LDcg KzE4MCw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAJCQlS U0FlcnIoUlNBX0ZfSU5UX1JTQV9WRVJJRlksUlNBX1JfSU5WQUxJRF9NRVNTQUdFX0xFTkdUSCk7 Ci0gCQkJZ290byBlcnI7Ci0gCX0KLS0JaT1SU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4s c2lnYnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKTsKLSsJLyogTkI6IGNhbGwgdW5kZXJseWlu ZyBtZXRob2QgZGlyZWN0bHkgdG8gYXZvaWQgRklQUyBibG9ja2luZyAqLwotKwlpID0gcnNhLT5t ZXRoLT5yc2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sc2ln YnVmLHMscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCi0gCWlmIChpIDw9IDApIGdvdG8g ZXJyOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYV9kZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhX2Rnc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGFfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAx NDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9z aGEvc2hhX2Rnc3QuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTU3 LDYgKzU3LDEyIEBACi0gICovCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTApICYmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU0hBKQotIAotICN1bmRlZiAgU0hBXzEKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGEu aAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGEuaC5maXBzCTIwMDktMTEt MjMgMDg6MzI6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vc2hhL3NoYS5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTA2 LDYgKzEwNiw5IEBAIHR5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0Ci0gCX0gU0hBX0NUWDsKLSAK LSAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJp dmF0ZV9TSEFfSW5pdChTSEFfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgU0hBX0luaXQoU0hBX0NU WCAqYyk7Ci0gaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6 ZV90IGxlbik7Ci0gaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcwkyMDA5LTExLTIzIDA4OjMyOjMw LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGFf bG9jbC5oCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTIyLDggKzEy MiwxNSBAQCB2b2lkIHNoYTFfYmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAqYywgCi0gI2RlZmlu ZSBJTklUX0RBVEFfaDMgMHgxMDMyNTQ3NlVMCi0gI2RlZmluZSBJTklUX0RBVEFfaDQgMHhjM2Qy ZTFmMFVMCi0gCi0rI2lmIGRlZmluZWQoU0hBXzApICYmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQot K0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChTSEEpCi0rI2Vsc2UKLSBpbnQgSEFTSF9JTklUIChTSEFf Q1RYICpjKQotKyNlbmRpZgotIAl7Ci0rI2lmIGRlZmluZWQoU0hBXzEpICYmIGRlZmluZWQoT1BF TlNTTF9GSVBTKQotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAo YywwLHNpemVvZigqYykpOwotIAljLT5oMD1JTklUX0RBVEFfaDA7Ci0gCWMtPmgxPUlOSVRfREFU QV9oMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGExZGdzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMKLS0tLSBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhMWRnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6 MDc6MTQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hh L3NoYTFkZ3N0LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Myw2 ICs2MywxMCBAQAotICNkZWZpbmUgU0hBXzEKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Ns di5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2VuZGlmCi0rCi0gCi0gY29uc3QgY2hhciBTSEExX3ZlcnNpb25bXT0iU0hBMSIgT1BFTlNTTF9W RVJTSU9OX1BURVhUOwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hh L3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTI1Ni5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMJMjAwNy0wMS0y MSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9zaGEvc2hhMjU2LmMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0x MiwxMiArMTIsMTkgQEAKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSAjaW5jbHVk ZSA8b3BlbnNzbC9zaGEuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0g Ci0gY29uc3QgY2hhciBTSEEyNTZfdmVyc2lvbltdPSJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05f UFRFWFQ7Ci0gCi0gaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQotIAl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNl dCAoYywwLHNpemVvZigqYykpOwotIAljLT5oWzBdPTB4YzEwNTllZDhVTDsJYy0+aFsxXT0weDM2 N2NkNTA3VUw7Ci0gCWMtPmhbMl09MHgzMDcwZGQxN1VMOwljLT5oWzNdPTB4ZjcwZTU5MzlVTDsK LUBAIC0yOSw2ICszNiw5IEBAIGludCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKLSAKLSBp bnQgU0hBMjU2X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9m KCpjKSk7Ci0gCWMtPmhbMF09MHg2YTA5ZTY2N1VMOwljLT5oWzFdPTB4YmI2N2FlODVVTDsKLSAJ Yy0+aFsyXT0weDNjNmVmMzcyVUw7CWMtPmhbM109MHhhNTRmZjUzYVVMOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vc2hhL3NoYTUxMi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v c2hhL3NoYTUxMi5jLmZpcHMJMjAwOC0xMi0yOSAxMzozNTo0OC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhNTEyLmMJMjAwOS0xMS0yMyAwODoz MjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC01LDYgKzUsMTAgQEAKLSAgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot ICAqLwotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAjaWYgIWRlZmlu ZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBNTEyKQotIC8qCi0g ICogSU1QTEVNRU5UQVRJT04gTk9URVMuCi1AQCAtNjEsNiArNjUsOSBAQCBjb25zdCBjaGFyIFNI QTUxMl92ZXJzaW9uW109IlNIQS01MTIiIE9QCi0gCi0gaW50IFNIQTM4NF9Jbml0IChTSEE1MTJf Q1RYICpjKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7Ci0rI2VuZGlmCi0gI2lmIGRlZmluZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1f XykgfHwgZGVmaW5lZChfX2FybSkpCi0gCS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVk IGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8KLSAJdW5zaWduZWQgaW50ICpoID0gKHVuc2lnbmVkIGlu dCAqKWMtPmg7Ci1AQCAtOTAsNiArOTcsOSBAQCBpbnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFgg KmMpCi0gCi0gaW50IFNIQTUxMl9Jbml0IChTSEE1MTJfQ1RYICpjKQotIAl7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gI2lmIGRlZmlu ZWQoU0hBNTEyX0FTTSkgJiYgKGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX2FybSkpCi0g CS8qIG1haW50YWluIGR3b3JkIG9yZGVyIHJlcXVpcmVkIGJ5IGFzc2VtYmxlciBtb2R1bGUgKi8K LSAJdW5zaWduZWQgaW50ICpoID0gKHVuc2lnbmVkIGludCAqKWMtPmg7Ci1AQCAtMzgwLDcgKzM5 MCw3IEBAIHN0YXRpYyBjb25zdCBTSEFfTE9ORzY0IEs1MTJbODBdID0gewotIAkJCQkoKFNIQV9M T05HNjQpaGkpPDwzMnxsbzsJfSkKLSAjICAgZW5kaWYKLSAjICBlbGlmIChkZWZpbmVkKF9BUkNI X1BQQykgJiYgZGVmaW5lZChfXzY0QklUX18pKSB8fCBkZWZpbmVkKF9BUkNIX1BQQzY0KQotLSMg ICBkZWZpbmUgUk9UUihhLG4pCSh7IHVuc2lnbmVkIGxvbmcgcmV0OwkJXAotKyMgICBkZWZpbmUg Uk9UUihhLG4pCSh7IFNIQV9MT05HNjQgcmV0OwkJXAotIAkJCQlhc20gKCJyb3RyZGkgJTAsJTEs JTIiCVwKLSAJCQkJOiAiPXIiKHJldCkJCVwKLSAJCQkJOiAiciIoYSksIksiKG4pKTsgcmV0Owl9 KQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9NYWtlZmlsZS5vcmcuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE0L01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvTWFrZWZp bGUub3JnLmZpcHMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE0L01ha2VmaWxlLm9yZwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTExMCw2ICsxMTAsOSBAQCBMSUJLUkI1PQotIFpMSUJfSU5DTFVERT0KLSBM SUJaTElCPQotIAotKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAotK0ZJUFM9Ci0rCi0gRElS Uz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCi0gRU5HRElSUz0gY2Nnb3N0 Ci0gU0hMSUJESVJTPSBjcnlwdG8gc3NsCi1AQCAtMTIyLDcgKzEyNSw3IEBAIFNESVJTPSAgXAot IAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCi0gCWJ1ZmZlciBiaW8g c3RhY2sgbGhhc2ggcmFuZCBlcnIgXAotIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29uZiB0 eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKLS0JY21zIHBxdWV1ZSB0cyBq cGFrZSBzdG9yZQotKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3JlIGZpcHMKLSAjIGtlZXAgaW4g bWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCi0gIyBh Y2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgotIAotQEAgLTIwNiw2ICsyMDksNyBAQCBC VUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNTCi0gCQlSTUQxNjBfQVNNX09C Sj0nJChSTUQxNjBfQVNNX09CSiknCQlcCi0gCQlXUF9BU01fT0JKPSckKFdQX0FTTV9PQkopJwkJ CVwKLSAJCVBFUkxBU01fU0NIRU1FPSckKFBFUkxBU01fU0NIRU1FKScJCVwKLSsJCUZJUFM9IiQk e0ZJUFM6LSQoRklQUyl9IglcCi0gCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmls ZSBNQUtFT1ZFUlJJREVTPQotICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXpl cyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAotICMgd2hpY2ggaW4gdHVybiBl bGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2NpcGguYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3NzbF9jaXBoLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xf Y2lwaC5jLmZpcHMJMjAwOS0wOS0xMyAwMToxODowOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfY2lwaC5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAw MDAwICswMTAwCi1AQCAtNzI3LDYgKzcyNyw5IEBAIHN0YXRpYyB2b2lkIHNzbF9jaXBoZXJfY29s bGVjdF9jaXBoZXJzKGMKLSAJCSAgICAhKGMtPmFsZ29yaXRobV9hdXRoICYgZGlzYWJsZWRfYXV0 aCkgJiYKLSAJCSAgICAhKGMtPmFsZ29yaXRobV9lbmMgJiBkaXNhYmxlZF9lbmMpICYmCi0gCQkg ICAgIShjLT5hbGdvcml0aG1fbWFjICYgZGlzYWJsZWRfbWFjKSAmJgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJCQkoIUZJUFNfbW9kZSgpIHx8IChjLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMp KSAmJgotKyNlbmRpZgotIAkJICAgICEoYy0+YWxnb3JpdGhtX3NzbCAmIGRpc2FibGVkX3NzbCkp Ci0gCQkJewotIAkJCWNvX2xpc3RbY29fbGlzdF9udW1dLmNpcGhlciA9IGM7Ci1AQCAtMTQyMyw3 ICsxNDI2LDExIEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xfY3JlYXRlX2NpcGhlcl8KLSAJ ICovCi0gCWZvciAoY3VyciA9IGhlYWQ7IGN1cnIgIT0gTlVMTDsgY3VyciA9IGN1cnItPm5leHQp Ci0gCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJaWYgKGN1cnItPmFjdGl2ZSAmJiAoIUZJ UFNfbW9kZSgpIHx8IGN1cnItPmNpcGhlci0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkKLSsj ZWxzZQotIAkJaWYgKGN1cnItPmFjdGl2ZSkKLSsjZW5kaWYKLSAJCQl7Ci0gCQkJc2tfU1NMX0NJ UEhFUl9wdXNoKGNpcGhlcnN0YWNrLCBjdXJyLT5jaXBoZXIpOwotICNpZmRlZiBDSVBIRVJfREVC VUcKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9saWIuYy5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3Ns L3NzbF9saWIuYy5maXBzCTIwMDktMTAtMTYgMTU6NDE6NTIuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2xpYi5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAw MDAwMDAwICswMTAwCi1AQCAtMTQ3MSw2ICsxNDcxLDE0IEBAIFNTTF9DVFggKlNTTF9DVFhfbmV3 KGNvbnN0IFNTTF9NRVRIT0QgKm0KLSAJCXJldHVybihOVUxMKTsKLSAJCX0KLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAobWV0aC0+dmVyc2lvbiA8IFRMUzFf VkVSU0lPTikpCQotKwkJewotKwkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLCBTU0xfUl9PTkxZ X1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0rCQlyZXR1cm4gTlVMTDsKLSsJCX0KLSsjZW5k aWYKLSsKLSAJaWYgKFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9pZHgoKSA8IDApCi0g CQl7Ci0gCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsU1NMX1JfWDUwOV9WRVJJRklDQVRJT05f U0VUVVBfUFJPQkxFTVMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsdGVzdC5jCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9zc2wvc3NsdGVzdC5jLmZpcHMJMjAwOS0xMS0yMyAwODozMjozMS4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2x0ZXN0LmMJMjAwOS0xMS0y MyAwODozMjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yNjUsNiArMjY1LDkgQEAgc3RhdGljIHZv aWQgc3ZfdXNhZ2Uodm9pZCkKLSAJewotIAlmcHJpbnRmKHN0ZGVyciwidXNhZ2U6IHNzbHRlc3Qg W2FyZ3MgLi4uXVxuIik7Ci0gCWZwcmludGYoc3RkZXJyLCJcbiIpOwotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJZnByaW50ZihzdGRlcnIsIi1GICAgICAgICAgICAgIC0gcnVuIHRlc3QgaW4gRklQ UyBtb2RlXG4iKTsKLSsjZW5kaWYKLSAJZnByaW50ZihzdGRlcnIsIiAtc2VydmVyX2F1dGggIC0g Y2hlY2sgc2VydmVyIGNlcnRpZmljYXRlXG4iKTsKLSAJZnByaW50ZihzdGRlcnIsIiAtY2xpZW50 X2F1dGggIC0gZG8gY2xpZW50IGF1dGhlbnRpY2F0aW9uXG4iKTsKLSAJZnByaW50ZihzdGRlcnIs IiAtcHJveHkgICAgICAgIC0gYWxsb3cgcHJveHkgY2VydGlmaWNhdGVzXG4iKTsKLUBAIC00ODQs NiArNDg3LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAjZW5kaWYKLSAJ U1RBQ0tfT0YoU1NMX0NPTVApICpzc2xfY29tcF9tZXRob2RzID0gTlVMTDsKLSAJaW50IHRlc3Rf Y2lwaGVybGlzdCA9IDA7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpbnQgZmlwc19tb2RlPTA7 Ci0rI2VuZGlmCi0gCi0gCXZlcmJvc2UgPSAwOwotIAlkZWJ1ZyA9IDA7Ci1AQCAtNTE1LDcgKzUy MSwxNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAotIAl3aGlsZSAoYXJn YyA+PSAxKQotIAkJewotLQkJaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkK LSsJCWlmKCFzdHJjbXAoKmFyZ3YsIi1GIikpCi0rCQkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJCQlmaXBzX21vZGU9MTsKLSsjZWxzZQotKwkJCWZwcmludGYoc3RkZXJyLCJub3QgY29tcGls ZWQgd2l0aCBGSVBTIHN1cHBvcnQsIHNvIGV4aXR0aW5nIHdpdGhvdXQgcnVubmluZy5cbiIpOwot KwkJCUVYSVQoMCk7Ci0rI2VuZGlmCi0rCQkJfQotKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCIt c2VydmVyX2F1dGgiKSA9PSAwKQotIAkJCXNlcnZlcl9hdXRoPTE7Ci0gCQllbHNlIGlmCShzdHJj bXAoKmFyZ3YsIi1jbGllbnRfYXV0aCIpID09IDApCi0gCQkJY2xpZW50X2F1dGg9MTsKLUBAIC03 MTEsNiArNzI2LDIwIEBAIGJhZDoKLSAJCUVYSVQoMSk7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwlpZihmaXBzX21vZGUpCi0rCQl7Ci0rCQlpZighRklQU19tb2RlX3NldCgxKSkK LSsJCQl7Ci0rCQkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKLSsJCQlFUlJfcHJpbnRfZXJy b3JzKEJJT19uZXdfZnAoc3RkZXJyLEJJT19OT0NMT1NFKSk7Ci0rCQkJRVhJVCgxKTsKLSsJCQl9 Ci0rCQllbHNlCi0rCQkJZnByaW50ZihzdGRlcnIsIioqKiBJTiBGSVBTIE1PREUgKioqXG4iKTsK LSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKHByaW50X3RpbWUpCi0gCQl7Ci0gCQlpZiAoIWJpb19w YWlyKQotQEAgLTIxNTMsMTIgKzIxODIsMTIgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBhcHBf dmVyaWZ5X2NhbGxiYQotIAkJfQotIAotICNpZm5kZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQot LSMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpZiAwCi0gCWlmKHMtPnZlcnNpb24gPT0gVExTMV9W RVJTSU9OKQotIAkJRklQU19hbGxvd19tZDUoMSk7Ci0gIyBlbmRpZgotIAlvayA9IFg1MDlfdmVy aWZ5X2NlcnQoY3R4KTsKLS0jIGlmZGVmIE9QRU5TU0xfRklQUwotKyMgaWYgMAotIAlpZihzLT52 ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKLSAJCUZJUFNfYWxsb3dfbWQ1KDApOwotICMgZW5kaWYK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19jbG50LmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9zMjNfY2xudC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv czIzX2NsbnQuYy5maXBzCTIwMDktMDgtMDUgMTc6Mjk6MTQuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX2NsbnQuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAw MDAwMDAwMCArMDEwMAotQEAgLTMzNSw2ICszMzUsMTQgQEAgc3RhdGljIGludCBzc2wyM19jbGll bnRfaGVsbG8oU1NMICpzKQotIAkJCXZlcnNpb25fbWFqb3IgPSBUTFMxX1ZFUlNJT05fTUFKT1I7 Ci0gCQkJdmVyc2lvbl9taW5vciA9IFRMUzFfVkVSU0lPTl9NSU5PUjsKLSAJCQl9Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwkJZWxzZSBpZihGSVBTX21vZGUoKSkKLSsJCQl7Ci0rCQkJU1NMZXJy KFNTTF9GX1NTTDIzX0NMSUVOVF9IRUxMTywKLSsJCQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURf SU5fRklQU19NT0RFKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKyNlbmRpZgotIAkJZWxzZSBp ZiAodmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCi0gCQkJewotIAkJCXZlcnNpb25fbWFqb3IgPSBT U0wzX1ZFUlNJT05fTUFKT1I7Ci1AQCAtNjE4LDYgKzYyNiwxNCBAQCBzdGF0aWMgaW50IHNzbDIz X2dldF9zZXJ2ZXJfaGVsbG8oU1NMICpzCi0gCQlpZiAoKHBbMl0gPT0gU1NMM19WRVJTSU9OX01J Tk9SKSAmJgotIAkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19TU0x2MykpCi0gCQkJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlpZihGSVBTX21vZGUoKSkKLSsJCQkJewotKwkJCQlTU0xl cnIoU1NMX0ZfU1NMMjNfR0VUX1NFUlZFUl9IRUxMTywKLSsJCQkJCVNTTF9SX09OTFlfVExTX0FM TE9XRURfSU5fRklQU19NT0RFKTsKLSsJCQkJZ290byBlcnI7Ci0rCQkJCX0KLSsjZW5kaWYKLSAJ CQlzLT52ZXJzaW9uPVNTTDNfVkVSU0lPTjsKLSAJCQlzLT5tZXRob2Q9U1NMdjNfY2xpZW50X21l dGhvZCgpOwotIAkJCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19zcnZy LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfc3J2ci5jCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9zc2wvczIzX3NydnIuYy5maXBzCTIwMDgtMDYtMDMgMDQ6NDg6MzQuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX3NydnIuYwkyMDA5LTEx LTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTM4Niw2ICszODYsMTUgQEAgaW50IHNz bDIzX2dldF9jbGllbnRfaGVsbG8oU1NMICpzKQotIAkJCX0KLSAJCX0KLSAKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lP TikpCi0rCQl7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX0NMSUVOVF9IRUxMTywKLSsJCQkJ CVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCWdvdG8gZXJyOwotKwkJ fQotKyNlbmRpZgotKwotIAlpZiAocy0+c3RhdGUgPT0gU1NMMjNfU1RfU1JfQ0xOVF9IRUxMT19C KQotIAkJewotIAkJLyogd2UgaGF2ZSBTU0x2My9UTFN2MSBpbiBhbiBTU0x2MiBoZWFkZXIKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3MzX2NsbnQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2Ns bnQuYy5maXBzCTIwMDktMTAtMzAgMTU6MDY6MTguMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5jCTIwMDktMTEtMjMgMDg6MzI6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtMTU2LDYgKzE1NiwxMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMu aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19ESAotICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0g I2VuZGlmCi1AQCAtMTUzMCw2ICsxNTM0LDggQEAgaW50IHNzbDNfZ2V0X2tleV9leGNoYW5nZShT U0wgKnMpCi0gCQkJcT1tZF9idWY7Ci0gCQkJZm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCi0g CQkJCXsKLSsJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKLSsJCQkJCUVWUF9NRF9D VFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgs KG51bSA9PSAyKQotIAkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7Ci0gCQkJ CUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wz X1JBTkRPTV9TSVpFKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2VuYy5j LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC9zM19lbmMuYy5maXBzCTIwMDktMDQtMTYgMTk6MjI6NTAuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfZW5jLmMJMjAwOS0xMS0yMyAwODoz MjozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNzAsNiArMTcwLDcgQEAgc3RhdGljIGludCBzc2wz X2dlbmVyYXRlX2tleV9ibG9jayhTU0wgKgotICNlbmRpZgotIAlrPTA7Ci0gCUVWUF9NRF9DVFhf aW5pdCgmbTUpOwotKwlFVlBfTURfQ1RYX3NldF9mbGFncygmbTUsIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVyk7Ci0gCUVWUF9NRF9DVFhfaW5pdCgmczEpOwotIAlmb3IgKGk9MDsgKGlu dClpPG51bTsgaSs9TUQ1X0RJR0VTVF9MRU5HVEgpCi0gCQl7Ci1AQCAtNjE0LDYgKzYxNSw4IEBA IGludCBzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhTU0wgKnMpCi0gCQlpZiAoKG1hc2sgJiBz LT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIpICYmIG1kKSAKLSAJCQl7Ci0gCQkJcy0+ czMtPmhhbmRzaGFrZV9kZ3N0W2ldPUVWUF9NRF9DVFhfY3JlYXRlKCk7Ci0rCQkJRVZQX01EX0NU WF9zZXRfZmxhZ3Mocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLAotKwkJCQlFVlBfTURfQ1RYX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpOwotIAkJCUVWUF9EaWdlc3RJbml0X2V4KHMtPnMzLT5oYW5kc2hh a2VfZGdzdFtpXSxtZCxOVUxMKTsKLSAJCQlFVlBfRGlnZXN0VXBkYXRlKHMtPnMzLT5oYW5kc2hh a2VfZGdzdFtpXSxoZGF0YSxoZGF0YWxlbik7Ci0gCQkJfSAKLUBAIC02NzAsNiArNjczLDcgQEAg c3RhdGljIGludCBzc2wzX2hhbmRzaGFrZV9tYWMoU1NMICpzLCBpbgotIAkJcmV0dXJuIDA7Ci0g CX0JCi0gCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0 eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJRVZQX01EX0NUWF9jb3B5X2V4 KCZjdHgsZCk7Ci0gCW49RVZQX01EX0NUWF9zaXplKCZjdHgpOwotIAlpZiAobiA8IDApCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC9zM19zcnZyLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19zcnZy LmMuZmlwcwkyMDA5LTEwLTMwIDE0OjIyOjQ0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvc3NsL3MzX3NydnIuYwkyMDA5LTExLTIzIDA4OjMyOjMxLjAwMDAwMDAwMCAr MDEwMAotQEAgLTE2NzksNiArMTY3OSw4IEBAIGludCBzc2wzX3NlbmRfc2VydmVyX2tleV9leGNo YW5nZShTU0wgKnMKLSAJCQkJaj0wOwotIAkJCQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkK LSAJCQkJCXsKLSsJCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCi0rCQkJCQkJRVZQ X01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZt ZF9jdHgsKG51bSA9PSAyKQotIAkJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwp OwotIAkJCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21b MF0pLFNTTDNfUkFORE9NX1NJWkUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv dDFfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9lbmMuYwotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvc3NsL3QxX2VuYy5jLmZpcHMJMjAwOS0wNC0xOSAyMDowMzoxMy4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9lbmMuYwkyMDA5LTEx LTIzIDA4OjMyOjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTE2OSw2ICsxNjksOCBAQCBzdGF0aWMg dm9pZCB0bHMxX1BfaGFzaChjb25zdCBFVlBfTUQgKm1kCi0gCi0gCUhNQUNfQ1RYX2luaXQoJmN0 eCk7Ci0gCUhNQUNfQ1RYX2luaXQoJmN0eF90bXApOwotKwlITUFDX0NUWF9zZXRfZmxhZ3MoJmN0 eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSsJSE1BQ19DVFhfc2V0X2ZsYWdz KCZjdHhfdG1wLCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAlITUFDX0luaXRf ZXgoJmN0eCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7Ci0gCUhNQUNfSW5pdF9leCgmY3R4X3RtcCxz ZWMsc2VjX2xlbixtZCwgTlVMTCk7Ci0gCWlmIChzZWVkMSAhPSBOVUxMKSBITUFDX1VwZGF0ZSgm Y3R4LHNlZWQxLHNlZWQxX2xlbik7CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1y ZW5lZy1lcnIucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LXJlbmVnLWVyci5wYXRjaApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxZGJlNy4uMDAwMDAwMAotLS0gYS9vcGVuc3Ns LTEuMC4wLWJldGE0LXJlbmVnLWVyci5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAg QEAKLUJldHRlciBlcnJvciByZXBvcnRpbmcgZm9yIHVuc2FmZSByZW5lZ290aWF0aW9uLgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2Vyci5jLnJlbmVnLWVyciBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9zc2xfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9z c2xfZXJyLmMucmVuZWctZXJyCTIwMDktMTEtMDkgMTk6NDU6NDIuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2Vyci5jCTIwMDktMTEtMjAgMTc6NTY6NTcu MDAwMDAwMDAwICswMTAwCi1AQCAtMjI2LDcgKzIyNiw5IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RB VEEgU1NMX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZVTkMoU1NMX0ZfU1NMX0xPQURfQ0xJRU5UX0NB X0ZJTEUpLAkiU1NMX2xvYWRfY2xpZW50X0NBX2ZpbGUifSwKLSB7RVJSX0ZVTkMoU1NMX0ZfU1NM X05FVyksCSJTU0xfbmV3In0sCi0ge0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxM T19SRU5FR09USUFURV9FWFQpLAkiU1NMX1BBUlNFX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VY VCJ9LAotK3tFUlJfRlVOQyhTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fVExTRVhUKSwJIlNT TF9QQVJTRV9DTElFTlRIRUxMT19UTFNFWFQifSwKLSB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1BBUlNF X1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVCksCSJTU0xfUEFSU0VfU0VSVkVSSEVMTE9fUkVO RUdPVElBVEVfRVhUIn0sCi0re0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19U TFNFWFQpLAkiU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVCJ9LAotIHtFUlJfRlVOQyhTU0xf Rl9TU0xfUEVFSyksCSJTU0xfcGVlayJ9LAotIHtFUlJfRlVOQyhTU0xfRl9TU0xfUFJFUEFSRV9D TElFTlRIRUxMT19UTFNFWFQpLAkiU1NMX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUIn0sCi0g e0VSUl9GVU5DKFNTTF9GX1NTTF9QUkVQQVJFX1NFUlZFUkhFTExPX1RMU0VYVCksCSJTU0xfUFJF UEFSRV9TRVJWRVJIRUxMT19UTFNFWFQifSwKLUBAIC01MjYsNiArNTI4LDcgQEAgc3RhdGljIEVS Ul9TVFJJTkdfREFUQSBTU0xfc3RyX3JlYXNvbnNbXQotIHtFUlJfUkVBU09OKFNTTF9SX1VOS05P V05fUkVNT1RFX0VSUk9SX1RZUEUpLCJ1bmtub3duIHJlbW90ZSBlcnJvciB0eXBlIn0sCi0ge0VS Ul9SRUFTT04oU1NMX1JfVU5LTk9XTl9TU0xfVkVSU0lPTikgICAsInVua25vd24gc3NsIHZlcnNp b24ifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9VTktOT1dOX1NUQVRFKSAgICAgICAgICwidW5rbm93 biBzdGF0ZSJ9LAotK3tFUlJfUkVBU09OKFNTTF9SX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElP Tl9ESVNBQkxFRCksInVuc2FmZSBsZWdhY3kgcmVuZWdvdGlhdGlvbiBkaXNhYmxlZCJ9LAotIHtF UlJfUkVBU09OKFNTTF9SX1VOU1VQUE9SVEVEX0NJUEhFUikgICAgLCJ1bnN1cHBvcnRlZCBjaXBo ZXIifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9VTlNVUFBPUlRFRF9DT01QUkVTU0lPTl9BTEdPUklU SE0pLCJ1bnN1cHBvcnRlZCBjb21wcmVzc2lvbiBhbGdvcml0aG0ifSwKLSB7RVJSX1JFQVNPTihT U0xfUl9VTlNVUFBPUlRFRF9ESUdFU1RfVFlQRSksInVuc3VwcG9ydGVkIGRpZ2VzdCB0eXBlIn0s Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2wuaC5yZW5lZy1lcnIgb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvc3NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2wu aC5yZW5lZy1lcnIJMjAwOS0xMS0xMiAxNToxNzoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE0L3NzbC9zc2wuaAkyMDA5LTExLTIwIDE3OjU2OjU3LjAwMDAwMDAwMCAr MDEwMAotQEAgLTE5MzQsNyArMTkzNCw5IEBAIHZvaWQgRVJSX2xvYWRfU1NMX3N0cmluZ3Modm9p ZCk7Ci0gI2RlZmluZSBTU0xfRl9TU0xfTE9BRF9DTElFTlRfQ0FfRklMRQkJCSAxODUKLSAjZGVm aW5lIFNTTF9GX1NTTF9ORVcJCQkJCSAxODYKLSAjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9DTElF TlRIRUxMT19SRU5FR09USUFURV9FWFQJIDMwMAotKyNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX0NM SUVOVEhFTExPX1RMU0VYVAkJIDMwMgotICNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhF TExPX1JFTkVHT1RJQVRFX0VYVAkgMzAxCi0rI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfU0VSVkVS SEVMTE9fVExTRVhUCQkgMzAzCi0gI2RlZmluZSBTU0xfRl9TU0xfUEVFSwkJCQkJIDI3MAotICNk ZWZpbmUgU1NMX0ZfU1NMX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhUCQkgMjgxCi0gI2RlZmlu ZSBTU0xfRl9TU0xfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQJCSAyODIKLUBAIC0yMjMxLDYg KzIyMzMsNyBAQCB2b2lkIEVSUl9sb2FkX1NTTF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgU1NM X1JfVU5LTk9XTl9SRU1PVEVfRVJST1JfVFlQRQkJCSAyNTMKLSAjZGVmaW5lIFNTTF9SX1VOS05P V05fU1NMX1ZFUlNJT04JCQkgMjU0Ci0gI2RlZmluZSBTU0xfUl9VTktOT1dOX1NUQVRFCQkJCSAy NTUKLSsjZGVmaW5lIFNTTF9SX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTl9ESVNBQkxFRAkg MzM4Ci0gI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9DSVBIRVIJCQkgMjU2Ci0gI2RlZmluZSBT U0xfUl9VTlNVUFBPUlRFRF9DT01QUkVTU0lPTl9BTEdPUklUSE0JCSAyNTcKLSAjZGVmaW5lIFNT TF9SX1VOU1VQUE9SVEVEX0RJR0VTVF9UWVBFCQkJIDMyNgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvczIzX3NydnIuYy5yZW5lZy1lcnIgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv czIzX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19zcnZyLmMucmVuZWct ZXJyCTIwMDktMTEtMTIgMTU6MTc6MjkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvczIzX3NydnIuYwkyMDA5LTExLTIwIDE3OjU3OjIzLjAwMDAwMDAwMCArMDEw MAotQEAgLTQ5Nyw2ICs0OTcsMTEgQEAgaW50IHNzbDIzX2dldF9jbGllbnRfaGVsbG8oU1NMICpz KQotIAkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9DTElFTlRfSEVMTE8sU1NMX1JfVU5TVVBQT1JU RURfUFJPVE9DT0wpOwotIAkJZ290byBlcnI7Ci0gI2Vsc2UKLSsJCWlmICghKHMtPmN0eC0+b3B0 aW9ucyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04pKQotKwkJCXsK LSsJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX0NMSUVOVF9IRUxMTyxTU0xfUl9VTlNBRkVfTEVH QUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSAJCS8q IHdlIGFyZSB0YWxraW5nIHNzbHYyICovCi0gCQkvKiB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBT U0x2My9UTFN2MSBzZXR1cCBhbmQgcHV0IGluIHRoZQotIAkJICogc3NsdjIgc3R1ZmYuICovCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9saWIuYy5yZW5lZy1lcnIgb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90 MV9saWIuYy5yZW5lZy1lcnIJMjAwOS0xMS0xOCAxNDowNDoxOS4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9saWIuYwkyMDA5LTExLTIwIDE3OjU2OjU3LjAw MDAwMDAwMCArMDEwMAotQEAgLTYzNiw2ICs2MzYsNyBAQCBpbnQgc3NsX3BhcnNlX2NsaWVudGhl bGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJewotIAkJCS8qIFdlIHNob3VsZCBhbHdheXMgc2VlIG9u ZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNpb24gKi8KLSAJCQkqYWwgPSBTU0xf QURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAqLwotKwkJ CVNTTGVycihTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fVExTRVhULCBTU0xfUl9VTlNBRkVf TEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQpOwotIAkJCXJldHVybiAwOwotIAkJCX0KLSAJ CXJldHVybiAxOwotQEAgLTk2NSw2ICs5NjYsNyBAQCBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxv X3Rsc2V4dChTU0wgKnMsCi0gIAlpZiAocy0+bmV3X3Nlc3Npb24gJiYgIXJlbmVnb3RpYXRlX3Nl ZW4KLSAgCQkmJiAhKHMtPmN0eC0+b3B0aW9ucyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZ X1JFTkVHT1RJQVRJT04pKQotICAJCXsKLSsJCVNTTGVycihTU0xfRl9TU0xfUEFSU0VfQ0xJRU5U SEVMTE9fVExTRVhULCBTU0xfUl9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQp OwotICAJCSphbCA9IFNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsgLyogaXMgdGhpcyB0aGUgcmln aHQgYWxlcnQ/ICovCi0gIAkJcmV0dXJuIDA7Ci0gIAkJfQotQEAgLTk5Myw2ICs5OTUsNyBAQCBp bnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJewotIAkJCS8qIFdl IHNob3VsZCBhbHdheXMgc2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNp b24gKi8KLSAJCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhl IHJpZ2h0IGFsZXJ0PyAqLwotKwkJCVNTTGVycihTU0xfRl9TU0xfUEFSU0VfU0VSVkVSSEVMTE9f VExTRVhULCBTU0xfUl9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQpOwotIAkJ CXJldHVybiAwOwotIAkJCX0KLSAjZW5kaWYKLUBAIC0xMTMzLDYgKzExMzYsNyBAQCBpbnQgc3Ns X3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkmJiAhKHMtPmN0eC0+b3B0aW9u cyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04pKQotIAkJewotIAkJ KmFsID0gU1NMX0FEX0lMTEVHQUxfUEFSQU1FVEVSOyAvKiBpcyB0aGlzIHRoZSByaWdodCBhbGVy dD8gKi8KLSsJCVNTTGVycihTU0xfRl9TU0xfUEFSU0VfU0VSVkVSSEVMTE9fVExTRVhULCBTU0xf Ul9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQpOwotIAkJcmV0dXJuIDA7Ci0g CQl9Ci0gI2VuZGlmCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5lZy1zY3N2 LnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5lZy1zY3N2LnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBhNTBkNzFmLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAt YmV0YTQtcmVuZWctc2Nzdi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDc5MyArMCwwIEBACi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jbGllbnQuYy5zY3N2IG9wZW5zc2wt MS4wLjAtYmV0YTQvYXBwcy9zX2NsaWVudC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBz L3NfY2xpZW50LmMuc2NzdgkyMDEwLTAxLTA3IDIzOjM3OjM5LjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX2NsaWVudC5jCTIwMTAtMDEtMDcgMjM6Mzc6Mzku MDAwMDAwMDAwICswMTAwCi1AQCAtMzgyLDcgKzM4Miw3IEBAIGludCBNQUlOKGludCwgY2hhciAq Kik7Ci0gCi0gaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotIAl7Ci0tCWludCBvZmY9 MDsKLSsJdW5zaWduZWQgaW50IG9mZj0wLCBjbHI9MDsKLSAJU1NMICpjb249TlVMTDsKLSAJaW50 IHMsayx3aWR0aCxzdGF0ZT0wOwotIAljaGFyICpjYnVmPU5VTEwsKnNidWY9TlVMTCwqbWJ1Zj1O VUxMOwotQEAgLTY2MCw2ICs2NjAsMTAgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQotIAkJCW9mZnw9U1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRTsKLSAJCWVsc2UgaWYg KHN0cmNtcCgqYXJndiwiLWxlZ2FjeV9yZW5lZ290aWF0aW9uIikgPT0gMCkKLSAJCQlvZmZ8PVNT TF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT047Ci0rCQllbHNlIGlmCShzdHJj bXAoKmFyZ3YsIi1sZWdhY3lfc2VydmVyX2Nvbm5lY3QiKSA9PSAwKQotKwkJCXsgb2ZmfD1TU0xf T1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUOyB9Ci0rCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1u b19sZWdhY3lfc2VydmVyX2Nvbm5lY3QiKSA9PSAwKQotKwkJCXsgY2xyfD1TU0xfT1BfTEVHQUNZ X1NFUlZFUl9DT05ORUNUOyB9Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBoZXIiKSA9 PSAwKQotIAkJCXsKLSAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci1AQCAtODcwLDYgKzg3 NCw5IEBAIGJhZDoKLSAJCVNTTF9DVFhfc2V0X29wdGlvbnMoY3R4LFNTTF9PUF9BTEx8b2ZmKTsK LSAJZWxzZQotIAkJU1NMX0NUWF9zZXRfb3B0aW9ucyhjdHgsb2ZmKTsKLSsKLSsJaWYgKGNscikK LSsJCVNTTF9DVFhfY2xlYXJfb3B0aW9ucyhjdHgsIGNscik7Ci0gCS8qIERUTFM6IHBhcnRpYWwg cmVhZHMgZW5kIHVwIGRpc2NhcmRpbmcgdW5yZWFkIFVEUCBieXRlcyA6LSggCi0gCSAqIFNldHRp bmcgcmVhZCBhaGVhZCBzb2x2ZXMgdGhpcyBwcm9ibGVtLgotIAkgKi8KLUBAIC0xNzI1LDYgKzE3 MzIsOCBAQCBzdGF0aWMgdm9pZCBwcmludF9zdHVmZihCSU8gKmJpbywgU1NMICpzCi0gCQkJCQkJ CSBFVlBfUEtFWV9iaXRzKHBrdG1wKSk7Ci0gCQlFVlBfUEtFWV9mcmVlKHBrdG1wKTsKLSAJfQot KwlCSU9fcHJpbnRmKGJpbywgIlNlY3VyZSBSZW5lZ290aWF0aW9uIElTJXMgc3VwcG9ydGVkXG4i LAotKwkJCVNTTF9nZXRfc2VjdXJlX3JlbmVnb3RpYXRpb25fc3VwcG9ydChzKSA/ICIiIDogIiBO T1QiKTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ09NUAotIAljb21wPVNTTF9nZXRfY3VycmVudF9j b21wcmVzc2lvbihzKTsKLSAJZXhwYW5zaW9uPVNTTF9nZXRfY3VycmVudF9leHBhbnNpb24ocyk7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19zZXJ2ZXIuYy5zY3N2IG9wZW5z c2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9h cHBzL3Nfc2VydmVyLmMuc2NzdgkyMDEwLTAxLTA3IDIzOjM3OjM5LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jCTIwMTAtMDEtMDcgMjM6Mzc6 MzkuMDAwMDAwMDAwICswMTAwCi1AQCAtMjIxMiw2ICsyMjEyLDggQEAgc3RhdGljIGludCBpbml0 X3NzbF9jb25uZWN0aW9uKFNTTCAqY29uKQotIAkJCWNvbi0+a3NzbF9jdHgtPmNsaWVudF9wcmlu Yyk7Ci0gCQl9Ci0gI2VuZGlmIC8qIE9QRU5TU0xfTk9fS1JCNSAqLwotKwlCSU9fcHJpbnRmKGJp b19zX291dCwgIlNlY3VyZSBSZW5lZ290aWF0aW9uIElTJXMgc3VwcG9ydGVkXG4iLAotKwkJICAg ICAgU1NMX2dldF9zZWN1cmVfcmVuZWdvdGlhdGlvbl9zdXBwb3J0KGNvbikgPyAiIiA6ICIgTk9U Iik7Ci0gCXJldHVybigxKTsKLSAJfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9k b2Mvc3NsL1NTTF9DVFhfc2V0X29wdGlvbnMucG9kLnNjc3Ygb3BlbnNzbC0xLjAuMC1iZXRhNC9k b2Mvc3NsL1NTTF9DVFhfc2V0X29wdGlvbnMucG9kCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9k b2Mvc3NsL1NTTF9DVFhfc2V0X29wdGlvbnMucG9kLnNjc3YJMjAwNy0wOC0yNCAwMDo0OToxMy4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2RvYy9zc2wvU1NMX0NUWF9z ZXRfb3B0aW9ucy5wb2QJMjAxMC0wMS0wNyAyMzozNzozOS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0y LDcgKzIsNyBAQAotIAotID1oZWFkMSBOQU1FCi0gCi0tU1NMX0NUWF9zZXRfb3B0aW9ucywgU1NM X3NldF9vcHRpb25zLCBTU0xfQ1RYX2dldF9vcHRpb25zLCBTU0xfZ2V0X29wdGlvbnMgLSBtYW5p cHVsYXRlIFNTTCBlbmdpbmUgb3B0aW9ucwotK1NTTF9DVFhfc2V0X29wdGlvbnMsIFNTTF9zZXRf b3B0aW9ucywgU1NMX0NUWF9jbGVhcl9vcHRpb25zLCBTU0xfY2xlYXJfb3B0aW9ucywgU1NMX0NU WF9nZXRfb3B0aW9ucywgU1NMX2dldF9vcHRpb25zLCBTU0xfZ2V0X3NlY3VyZV9yZW5lZ290aWF0 aW9uX3N1cHBvcnQgLSBtYW5pcHVsYXRlIFNTTCBvcHRpb25zCi0gCi0gPWhlYWQxIFNZTk9QU0lT Ci0gCi1AQCAtMTEsMjYgKzExLDQxIEBAIFNTTF9DVFhfc2V0X29wdGlvbnMsIFNTTF9zZXRfb3B0 aW9ucywgU1MKLSAgbG9uZyBTU0xfQ1RYX3NldF9vcHRpb25zKFNTTF9DVFggKmN0eCwgbG9uZyBv cHRpb25zKTsKLSAgbG9uZyBTU0xfc2V0X29wdGlvbnMoU1NMICpzc2wsIGxvbmcgb3B0aW9ucyk7 Ci0gCi0rIGxvbmcgU1NMX0NUWF9jbGVhcl9vcHRpb25zKFNTTF9DVFggKmN0eCwgbG9uZyBvcHRp b25zKTsKLSsgbG9uZyBTU0xfY2xlYXJfb3B0aW9ucyhTU0wgKnNzbCwgbG9uZyBvcHRpb25zKTsK LSsKLSAgbG9uZyBTU0xfQ1RYX2dldF9vcHRpb25zKFNTTF9DVFggKmN0eCk7Ci0gIGxvbmcgU1NM X2dldF9vcHRpb25zKFNTTCAqc3NsKTsKLSAKLSsgbG9uZyBTU0xfZ2V0X3NlY3VyZV9yZW5lZ290 aWF0aW9uX3N1cHBvcnQoU1NMICpzc2wpOwotKwotID1oZWFkMSBERVNDUklQVElPTgotIAotK05v dGU6IGFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIHVzaW5nIG1hY3Jvcy4KLSsK LSBTU0xfQ1RYX3NldF9vcHRpb25zKCkgYWRkcyB0aGUgb3B0aW9ucyBzZXQgdmlhIGJpdG1hc2sg aW4gQjxvcHRpb25zPiB0byBCPGN0eD4uCi0gT3B0aW9ucyBhbHJlYWR5IHNldCBiZWZvcmUgYXJl IG5vdCBjbGVhcmVkIQotIAotIFNTTF9zZXRfb3B0aW9ucygpIGFkZHMgdGhlIG9wdGlvbnMgc2V0 IHZpYSBiaXRtYXNrIGluIEI8b3B0aW9ucz4gdG8gQjxzc2w+LgotIE9wdGlvbnMgYWxyZWFkeSBz ZXQgYmVmb3JlIGFyZSBub3QgY2xlYXJlZCEKLSAKLStTU0xfQ1RYX2NsZWFyX29wdGlvbnMoKSBj bGVhcnMgdGhlIG9wdGlvbnMgc2V0IHZpYSBiaXRtYXNrIGluIEI8b3B0aW9ucz4KLSt0byBCPGN0 eD4uCi0rCi0rU1NMX2NsZWFyX29wdGlvbnMoKSBjbGVhcnMgdGhlIG9wdGlvbnMgc2V0IHZpYSBi aXRtYXNrIGluIEI8b3B0aW9ucz4gdG8gQjxzc2w+LgotKwotIFNTTF9DVFhfZ2V0X29wdGlvbnMo KSByZXR1cm5zIHRoZSBvcHRpb25zIHNldCBmb3IgQjxjdHg+LgotIAotIFNTTF9nZXRfb3B0aW9u cygpIHJldHVybnMgdGhlIG9wdGlvbnMgc2V0IGZvciBCPHNzbD4uCi0gCi0rU1NMX2dldF9zZWN1 cmVfcmVuZWdvdGlhdGlvbl9zdXBwb3J0KCkgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHBlZXIgc3Vw cG9ydHMKLStzZWN1cmUgcmVuZWdvdGlhdGlvbi4KLSsKLSA9aGVhZDEgTk9URVMKLSAKLSBUaGUg YmVoYXZpb3VyIG9mIHRoZSBTU0wgbGlicmFyeSBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHNl dmVyYWwgb3B0aW9ucy4KLSBUaGUgb3B0aW9ucyBhcmUgY29kZWQgYXMgYml0bWFza3MgYW5kIGNh biBiZSBjb21iaW5lZCBieSBhIGxvZ2ljYWwgQjxvcj4KLS1vcGVyYXRpb24gKHwpLiBPcHRpb25z IGNhbiBvbmx5IGJlIGFkZGVkIGJ1dCBjYW4gbmV2ZXIgYmUgcmVzZXQuCi0rb3BlcmF0aW9uICh8 KS4KLSAKLSBTU0xfQ1RYX3NldF9vcHRpb25zKCkgYW5kIFNTTF9zZXRfb3B0aW9ucygpIGFmZmVj dCB0aGUgKGV4dGVybmFsKQotIHByb3RvY29sIGJlaGF2aW91ciBvZiB0aGUgU1NMIGxpYnJhcnku IFRoZSAoaW50ZXJuYWwpIGJlaGF2aW91ciBvZgotQEAgLTE5OSw3ICsyMTQsNyBAQCBEbyBub3Qg dXNlIHRoZSBUTFN2MSBwcm90b2NvbC4KLSAKLSBXaGVuIHBlcmZvcm1pbmcgcmVuZWdvdGlhdGlv biBhcyBhIHNlcnZlciwgYWx3YXlzIHN0YXJ0IGEgbmV3IHNlc3Npb24KLSAoaS5lLiwgc2Vzc2lv biByZXN1bXB0aW9uIHJlcXVlc3RzIGFyZSBvbmx5IGFjY2VwdGVkIGluIHRoZSBpbml0aWFsCi0t aGFuZHNoYWtlKS4gIFRoaXMgb3B0aW9uIGlzIG5vdCBuZWVkZWQgZm9yIGNsaWVudHMuCi0raGFu ZHNoYWtlKS4gVGhpcyBvcHRpb24gaXMgbm90IG5lZWRlZCBmb3IgY2xpZW50cy4KLSAKLSA9aXRl bSBTU0xfT1BfTk9fVElDS0VUCi0gCi1AQCAtMjA5LDE1ICsyMjQsNjMgQEAgb2YgUkZDNDUwN2Jp cyB0aWNrZXRzIGZvciBzdGF0ZWxlc3Mgc2VzcwotIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0aGlz IGZ1bmN0aW9uYWxpdHkgaXMgZGlzYWJsZWQgYW5kIHRpY2tldHMgd2lsbAotIG5vdCBiZSB1c2Vk IGJ5IGNsaWVudHMgb3Igc2VydmVycy4KLSAKLSs9aXRlbSBTU0xfT1BfQUxMT1dfVU5TQUZFX0xF R0FDWV9SRU5FR09USUFUSU9OCi0rCi0rU2VlIHRoZSBCPFNFQ1VSRSBSRU5FR09USUFUSU9OPiBz ZWN0aW9uIGZvciBhIGRpc2N1c3Npb24gb2YgdGhlIHB1cnBvc2Ugb2YKLSt0aGlzIG9wdGlvbgot KwotID1iYWNrCi0gCi0rPWhlYWQxIFNFQ1VSRSBSRU5FR09USUFUSU9OCi0rCi0rT3BlblNTTCAw LjkuOG0gYW5kIGxhdGVyIGFsd2F5cyBhdHRlbXB0cyB0byB1c2Ugc2VjdXJlIHJlbmVnb3RpYXRp b24gYXMKLStkZXNjcmliZWQgaW4gZHJhZnQtaWV0Zi10bHMtcmVuZWdvdGlhdGlvbiAoRklYTUU6 IHJlcGxhY2UgYnkgUkZDKS4gVGhpcwotK2NvdW50ZXJzIGEgcHJlZml4IGF0dGFjayBkZXNjcmli ZWQgaW4gdGhlIGRyYWZ0IGFuZCBlbHNld2hlcmUgKEZJWE1FOiBuZWVkIGZ1bGwKLStyZWZlcmVu Y2UpLgotKwotK1RoaXMgYXR0YWNrIGhhcyBmYXIgcmVhY2hpbmcgY29uc2VxdWVuY2VzIHdoaWNo IGFwcGxpY2F0aW9uIHdyaXRlcnMgc2hvdWxkIGJlCi0rYXdhcmUgb2YuIEluIHRoZSBkZXNjcmlw dGlvbiBiZWxvdyBhbiBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0aW5nIHNlY3VyZQotK3JlbmVnb3Rp YXRpb24gaXMgcmVmZXJyZWQgdG8gYXMgSTxwYXRjaGVkPi4gQSBzZXJ2ZXIgbm90IHN1cHBvcnRp bmcgc2VjdXJlCi0rcmVuZWdvdGlhdGlvbiBpcyByZWZlcnJlZCB0byBhcyBJPHVucGF0Y2hlZD4u Ci0rCi0rSWYgYW4gdW5wYXRjaGVkIGNsaWVudCBhdHRlbXB0cyB0byBjb25uZWN0IHRvIGEgcGF0 Y2hlZCBPcGVuU1NMIHNlcnZlciB0aGVuCi0rdGhlIGF0dGVtcHQgd2lsbCBzdWNjZWVkIGJ1dCBy ZW5lZ290aWF0aW9uIGlzIG5vdCBwZXJtaXR0ZWQuIEFzIHJlcXVpcmVkCi0rYnkgdGhlIHN0YW5k YXJkIGEgQjxub19yZW5lZ290aWF0aW9uPiBhbGVydCBpcyBzZW50IGJhY2sgdG8gdGhlIGNsaWVu dCBpZgotK3RoZSBUTFMgdjEuMCBwcm90b2NvbCBpcyB1c2VkLiBJZiBTU0x2My4wIGlzIHVzZWQg dGhlbiByZW5lZ290aWF0aW9uIHJlc3VsdHMKLStpbiBhIGZhdGFsIEI8aGFuZHNoYWtlX2ZhaWxl ZD4gYWxlcnQuCi0rCi0rSWYgYSBwYXRjaGVkIE9wZW5TU0wgY2xpZW50IGF0dGVtcHRzIHRvIGNv bm5lY3QgdG8gYW4gdW5wYXRjaGVkIHNlcnZlcgotK3RoZW4gdGhlIGNvbm5lY3Rpb24gd2lsbCBm YWlsIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGRldGVybWluZQotK3doZXRoZXIgYW4g YXR0YWNrIGlzIHRha2luZyBwbGFjZS4KLSsKLStJZiB0aGUgb3B0aW9uIEI8U1NMX09QX0FMTE9X X1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTj4gaXMgc2V0IHRoZW4gdGhlCi0rYWJvdmUgcmVz dHJpY3Rpb25zIGFyZSByZWxheGVkLiBSZW5lZ290aWF0aW9uIGlzIHBlcm1pc3NpYmxlIGFuZCBp bml0aWFsCi0rY29ubmVjdGlvbnMgdG8gdW5wYXRjaGVkIHNlcnZlcnMgd2lsbCBzdWNjZWVkLgot KwotK1RoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiBiZWNhdXNlIGl0IGxl YXZlcyBib3RoIGNsaWVudHMgYW5kCi0rc2VydmVycyB2dWxuZXJhYmxlLiBIb3dldmVyIHVucGF0 Y2hlZCBzZXJ2ZXJzIGFuZCBjbGllbnRzIGFyZSBsaWtlbHkgdG8gYmUKLSthcm91bmQgZm9yIHNv bWUgdGltZSBhbmQgcmVmdXNpbmcgdG8gY29ubmVjdCB0byB1bnBhdGNoZWQgc2VydmVycyBvciBk ZW55aW5nCi0rcmVuZWdvdGlvbiBhbHRvZ2V0aGVyIG1heSBiZSB1bmFjY2VwdGFibGUuIFNvIGFw cGxpY2F0aW9ucyBtYXkgYmUgZm9yY2VkIHRvCi0rdG9sZXJhdGUgdW5zYWZlIHJlbmVnb3RpYXRp b24gZm9yIHRoZSBpbW1lZGlhdGUgZnV0dXJlLgotKwotK1RoZSBmdW5jdGlvbiBTU0xfZ2V0X3Nl Y3VyZV9yZW5lZ290aWF0aW9uX3N1cHBvcnQoKSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGVlcgot K3N1cHBvcnRzIHNlY3VyZSByZW5lZ290aWF0aW9uLiAKLSsKLStUaGUgZGVwcmVjYXRlZCBTU0x2 MiBwcm90b2NvbCBkb2VzIG5vdCBzdXBwb3J0IHNlY3VyZSByZW5lZ290aWF0aW9uIGF0IGFsbC4K LSsKLSA9aGVhZDEgUkVUVVJOIFZBTFVFUwotIAotIFNTTF9DVFhfc2V0X29wdGlvbnMoKSBhbmQg U1NMX3NldF9vcHRpb25zKCkgcmV0dXJuIHRoZSBuZXcgb3B0aW9ucyBiaXRtYXNrCi0gYWZ0ZXIg YWRkaW5nIEI8b3B0aW9ucz4uCi0gCi0rU1NMX0NUWF9jbGVhcl9vcHRpb25zKCkgYW5kIFNTTF9j bGVhcl9vcHRpb25zKCkgcmV0dXJuIHRoZSBuZXcgb3B0aW9ucyBiaXRtYXNrCi0rYWZ0ZXIgY2xl YXJpbmcgQjxvcHRpb25zPi4KLSsKLSBTU0xfQ1RYX2dldF9vcHRpb25zKCkgYW5kIFNTTF9nZXRf b3B0aW9ucygpIHJldHVybiB0aGUgY3VycmVudCBiaXRtYXNrLgotIAotK1NTTF9nZXRfc2VjdXJl X3JlbmVnb3RpYXRpb25fc3VwcG9ydCgpIHJldHVybnMgMSBpcyB0aGUgcGVlciBzdXBwb3J0cwot K3NlY3VyZSByZW5lZ290aWF0aW9uIGFuZCAwIGlmIGl0IGRvZXMgbm90LgotKwotID1oZWFkMSBT RUUgQUxTTwotIAotIEw8c3NsKDMpfHNzbCgzKT4sIEw8U1NMX25ldygzKXxTU0xfbmV3KDMpPiwg TDxTU0xfY2xlYXIoMyl8U1NMX2NsZWFyKDMpPiwKLUBAIC0yNDAsNCArMzAzLDEwIEBAIFZlcnNp b25zIHVwIHRvIE9wZW5TU0wgMC45LjZjIGRvIG5vdCBpbmMKLSBjYW4gYmUgZGlzYWJsZWQgd2l0 aCB0aGlzIG9wdGlvbiAoaW4gT3BlblNTTCAwLjkuNmQsIGl0IHdhcyBhbHdheXMKLSBlbmFibGVk KS4KLSAKLStTU0xfQ1RYX2NsZWFyX29wdGlvbnMoKSBhbmQgU1NMX2NsZWFyX29wdGlvbnMoKSB3 ZXJlIGZpcnN0IGFkZGVkIGluIE9wZW5TU0wKLSswLjkuOG0uCi0rCi0rQjxTU0xfT1BfQUxMT1df VU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OPiB3YXMgZmlyc3QgYWRkZWQgaW4gT3BlblNTTAot KzAuOS44bS4KLSsKLSA9Y3V0Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9kMV9j bG50LmMuc2NzdiBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9kMV9jbG50LmMKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9kMV9jbG50LmMuc2NzdgkyMDEwLTAxLTA3IDIzOjM3OjM5LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2QxX2NsbnQuYwkyMDEwLTAx LTA3IDIzOjM3OjM5LjAwMDAwMDAwMCArMDEwMAotQEAgLTY5OCw3ICs2OTgsNyBAQCBpbnQgZHRs czFfY2xpZW50X2hlbGxvKFNTTCAqcykKLSAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi0gCQlp ZiAoKHAgPSBzc2xfYWRkX2NsaWVudGhlbGxvX3Rsc2V4dChzLCBwLCBidWYrU1NMM19SVF9NQVhf UExBSU5fTEVOR1RIKSkgPT0gTlVMTCkKLSAJCQl7Ci0tCQkJU1NMZXJyKFNTTF9GX1NTTDNfQ0xJ RU5UX0hFTExPLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLSsJCQlTU0xlcnIoU1NMX0ZfRFRMUzFf Q0xJRU5UX0hFTExPLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLSAJCQlnb3RvIGVycjsKLSAJCQl9 Ci0gI2VuZGlmCQkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2QxX3NydnIuYy5z Y3N2IG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL2QxX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvc3NsL2QxX3NydnIuYy5zY3N2CTIwMTAtMDEtMDcgMjM6Mzc6MzkuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvZDFfc3J2ci5jCTIwMTAtMDEtMDcgMjM6 Mzc6MzkuMDAwMDAwMDAwICswMTAwCi1AQCAtODE0LDcgKzgxNCw3IEBAIGludCBkdGxzMV9zZW5k X3NlcnZlcl9oZWxsbyhTU0wgKnMpCi0gI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAotIAkJaWYg KChwID0gc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleHQocywgcCwgYnVmK1NTTDNfUlRfTUFYX1BM QUlOX0xFTkdUSCkpID09IE5VTEwpCi0gCQkJewotLQkJCVNTTGVycihTU0xfRl9TU0wzX1NFTkRf U0VSVkVSX0hFTExPLEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLSsJCQlTU0xlcnIoU1NMX0ZfRFRM UzFfU0VORF9TRVJWRVJfSEVMTE8sRVJSX1JfSU5URVJOQUxfRVJST1IpOwotIAkJCXJldHVybiAt MTsKLSAJCQl9Ci0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xf ZXJyLmMuc2NzdiBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfZXJyLmMKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9zc2xfZXJyLmMuc2NzdgkyMDEwLTAxLTA3IDIzOjM3OjM5LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9lcnIuYwkyMDEwLTAx LTA3IDIzOjM3OjM5LjAwMDAwMDAwMCArMDEwMAotQEAgLTQxNCw2ICs0MTQsNyBAQCBzdGF0aWMg RVJSX1NUUklOR19EQVRBIFNTTF9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04oU1NMX1JfTk9f UFJJVkFURV9LRVlfQVNTSUdORUQpLCJubyBwcml2YXRlIGtleSBhc3NpZ25lZCJ9LAotIHtFUlJf UkVBU09OKFNTTF9SX05PX1BST1RPQ09MU19BVkFJTEFCTEUpLCJubyBwcm90b2NvbHMgYXZhaWxh YmxlIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfTk9fUFVCTElDS0VZKSAgICAgICAgICAsIm5vIHB1 YmxpY2tleSJ9LAotK3tFUlJfUkVBU09OKFNTTF9SX05PX1JFTkVHT1RJQVRJT04pICAgICAgLCJu byByZW5lZ290aWF0aW9uIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfTk9fUkVRVUlSRURfRElHRVNU KSAgICAsImRpZ2VzdCByZXF1cmVkIGZvciBoYW5kc2hha2UgaXNuJ3QgY29tcHV0ZWQifSwKLSB7 RVJSX1JFQVNPTihTU0xfUl9OT19TSEFSRURfQ0lQSEVSKSAgICAgICwibm8gc2hhcmVkIGNpcGhl ciJ9LAotIHtFUlJfUkVBU09OKFNTTF9SX05PX1ZFUklGWV9DQUxMQkFDSykgICAgLCJubyB2ZXJp ZnkgY2FsbGJhY2sifSwKLUBAIC00NTMsNiArNDU0LDcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFU QSBTU0xfc3RyX3JlYXNvbnNbXQotIHtFUlJfUkVBU09OKFNTTF9SX1JFVVNFX0NFUlRfTEVOR1RI X05PVF9aRVJPKSwicmV1c2UgY2VydCBsZW5ndGggbm90IHplcm8ifSwKLSB7RVJSX1JFQVNPTihT U0xfUl9SRVVTRV9DRVJUX1RZUEVfTk9UX1pFUk8pLCJyZXVzZSBjZXJ0IHR5cGUgbm90IHplcm8i fSwKLSB7RVJSX1JFQVNPTihTU0xfUl9SRVVTRV9DSVBIRVJfTElTVF9OT1RfWkVSTyksInJldXNl IGNpcGhlciBsaXN0IG5vdCB6ZXJvIn0sCi0re0VSUl9SRUFTT04oU1NMX1JfU0NTVl9SRUNFSVZF RF9XSEVOX1JFTkVHT1RJQVRJTkcpLCJzY3N2IHJlY2VpdmVkIHdoZW4gcmVuZWdvdGlhdGluZyJ9 LAotIHtFUlJfUkVBU09OKFNTTF9SX1NFUlZFUkhFTExPX1RMU0VYVCkgICAgLCJzZXJ2ZXJoZWxs byB0bHNleHQifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9TRVNTSU9OX0lEX0NPTlRFWFRfVU5JTklU SUFMSVpFRCksInNlc3Npb24gaWQgY29udGV4dCB1bmluaXRpYWxpemVkIn0sCi0ge0VSUl9SRUFT T04oU1NMX1JfU0hPUlRfUkVBRCkgICAgICAgICAgICAsInNob3J0IHJlYWQifSwKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbC5oLnNjc3Ygb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvc3NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2wuaC5zY3N2CTIwMTAtMDEt MDcgMjM6Mzc6MzkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv c3NsLmgJMjAxMC0wMS0wNyAyMzozNzozOS4wMDAwMDAwMDAgKzAxMDAKLUBAIC01MTEsNiArNTEx LDggQEAgdHlwZWRlZiBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKLSAKLSAjZGVmaW5lIFNTTF9PUF9N SUNST1NPRlRfU0VTU19JRF9CVUcJCQkweDAwMDAwMDAxTAotICNkZWZpbmUgU1NMX09QX05FVFND QVBFX0NIQUxMRU5HRV9CVUcJCQkweDAwMDAwMDAyTAotKy8qIEFsbG93IGluaXRpYWwgY29ubmVj dGlvbiB0byBzZXJ2ZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBSSSAqLwotKyNkZWZpbmUgU1NMX09Q X0xFR0FDWV9TRVJWRVJfQ09OTkVDVAkJCTB4MDAwMDAwMDRMCi0gI2RlZmluZSBTU0xfT1BfTkVU U0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUcJCTB4MDAwMDAwMDhMIC8qIGNhbiBicmVhayBz b21lIHNlY3VyaXR5IGV4cGVjdGF0aW9ucyAqLwotICNkZWZpbmUgU1NMX09QX1NTTFJFRjJfUkVV U0VfQ0VSVF9UWVBFX0JVRwkJMHgwMDAwMDAxMEwKLSAjZGVmaW5lIFNTTF9PUF9NSUNST1NPRlRf QklHX1NTTFYzX0JVRkZFUgkJMHgwMDAwMDAyMEwKLUBAIC01MTgsNyArNTIwLDYgQEAgdHlwZWRl ZiBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKLSAjZGVmaW5lIFNTTF9PUF9TU0xFQVlfMDgwX0NMSUVO VF9ESF9CVUcJCQkweDAwMDAwMDgwTAotICNkZWZpbmUgU1NMX09QX1RMU19ENV9CVUcJCQkJMHgw MDAwMDEwMEwKLSAjZGVmaW5lIFNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUcJCQkweDAwMDAw MjAwTAotLSNkZWZpbmUgU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTgkw eDAwMDAwNDAwTAotIAotIC8qIERpc2FibGUgU1NMIDMuMC9UTFMgMS4wIENCQyB2dWxuZXJhYmls aXR5IHdvcmthcm91bmQgdGhhdCB3YXMgYWRkZWQKLSAgKiBpbiBPcGVuU1NMIDAuOS42ZC4gIFVz dWFsbHkgKGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24gcHJvdG9jb2wpCi1AQCAtNTQ0LDYg KzU0NSw4IEBAIHR5cGVkZWYgc3RydWN0IHNzbF9zZXNzaW9uX3N0Ci0gI2RlZmluZSBTU0xfT1Bf Tk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04JMHgwMDAxMDAwMEwKLSAvKiBE b24ndCB1c2UgY29tcHJlc3Npb24gZXZlbiBpZiBzdXBwb3J0ZWQgKi8KLSAjZGVmaW5lIFNTTF9P UF9OT19DT01QUkVTU0lPTgkJCQkweDAwMDIwMDAwTAotKy8qIFBlcm1pdCB1bnNhZmUgbGVnYWN5 IHJlbmVnb3RpYXRpb24gKi8KLSsjZGVmaW5lIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JF TkVHT1RJQVRJT04JMHgwMDA0MDAwMEwKLSAvKiBJZiBzZXQsIGFsd2F5cyBjcmVhdGUgYSBuZXcg a2V5IHdoZW4gdXNpbmcgdG1wX2VjZGggcGFyYW1ldGVycyAqLwotICNkZWZpbmUgU1NMX09QX1NJ TkdMRV9FQ0RIX1VTRQkJCQkweDAwMDgwMDAwTAotIC8qIElmIHNldCwgYWx3YXlzIGNyZWF0ZSBh IG5ldyBrZXkgd2hlbiB1c2luZyB0bXBfZGggcGFyYW1ldGVycyAqLwotQEAgLTU5OSwxNyArNjAy LDI1IEBAIHR5cGVkZWYgc3RydWN0IHNzbF9zZXNzaW9uX3N0Ci0gCi0gI2RlZmluZSBTU0xfQ1RY X3NldF9vcHRpb25zKGN0eCxvcCkgXAotIAlTU0xfQ1RYX2N0cmwoKGN0eCksU1NMX0NUUkxfT1BU SU9OUywob3ApLE5VTEwpCi0rI2RlZmluZSBTU0xfQ1RYX2NsZWFyX29wdGlvbnMoY3R4LG9wKSBc Ci0rCVNTTF9DVFhfY3RybCgoY3R4KSxTU0xfQ1RSTF9DTEVBUl9PUFRJT05TLChvcCksTlVMTCkK LSAjZGVmaW5lIFNTTF9DVFhfZ2V0X29wdGlvbnMoY3R4KSBcCi0gCVNTTF9DVFhfY3RybCgoY3R4 KSxTU0xfQ1RSTF9PUFRJT05TLDAsTlVMTCkKLSAjZGVmaW5lIFNTTF9zZXRfb3B0aW9ucyhzc2ws b3ApIFwKLSAJU1NMX2N0cmwoKHNzbCksU1NMX0NUUkxfT1BUSU9OUywob3ApLE5VTEwpCi0rI2Rl ZmluZSBTU0xfY2xlYXJfb3B0aW9ucyhzc2wsb3ApIFwKLSsJU1NMX2N0cmwoKHNzbCksU1NMX0NU UkxfQ0xFQVJfT1BUSU9OUywob3ApLE5VTEwpCi0gI2RlZmluZSBTU0xfZ2V0X29wdGlvbnMoc3Ns KSBcCi0gICAgICAgICBTU0xfY3RybCgoc3NsKSxTU0xfQ1RSTF9PUFRJT05TLDAsTlVMTCkKLSAK LSAjZGVmaW5lIFNTTF9DVFhfc2V0X21vZGUoY3R4LG9wKSBcCi0gCVNTTF9DVFhfY3RybCgoY3R4 KSxTU0xfQ1RSTF9NT0RFLChvcCksTlVMTCkKLSsjZGVmaW5lIFNTTF9DVFhfY2xlYXJfbW9kZShj dHgsb3ApIFwKLSsJU1NMX0NUWF9jdHJsKChjdHgpLFNTTF9DVFJMX0NMRUFSX01PREUsKG9wKSxO VUxMKQotICNkZWZpbmUgU1NMX0NUWF9nZXRfbW9kZShjdHgpIFwKLSAJU1NMX0NUWF9jdHJsKChj dHgpLFNTTF9DVFJMX01PREUsMCxOVUxMKQotKyNkZWZpbmUgU1NMX2NsZWFyX21vZGUoc3NsLG9w KSBcCi0rCVNTTF9jdHJsKChzc2wpLFNTTF9DVFJMX0NMRUFSX01PREUsKG9wKSxOVUxMKQotICNk ZWZpbmUgU1NMX3NldF9tb2RlKHNzbCxvcCkgXAotIAlTU0xfY3RybCgoc3NsKSxTU0xfQ1RSTF9N T0RFLChvcCksTlVMTCkKLSAjZGVmaW5lIFNTTF9nZXRfbW9kZShzc2wpIFwKLUBAIC02MTcsNiAr NjI4LDggQEAgdHlwZWRlZiBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKLSAjZGVmaW5lIFNTTF9zZXRf bXR1KHNzbCwgbXR1KSBcCi0gICAgICAgICBTU0xfY3RybCgoc3NsKSxTU0xfQ1RSTF9TRVRfTVRV LChtdHUpLE5VTEwpCi0gCi0rI2RlZmluZSBTU0xfZ2V0X3NlY3VyZV9yZW5lZ290aWF0aW9uX3N1 cHBvcnQoc3NsKSBcCi0rCVNTTF9jdHJsKChzc2wpLCBTU0xfQ1RSTF9HRVRfUklfU1VQUE9SVCwg MCwgTlVMTCkKLSAKLSB2b2lkIFNTTF9DVFhfc2V0X21zZ19jYWxsYmFjayhTU0xfQ1RYICpjdHgs IHZvaWQgKCpjYikoaW50IHdyaXRlX3AsIGludCB2ZXJzaW9uLCBpbnQgY29udGVudF90eXBlLCBj b25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIFNTTCAqc3NsLCB2b2lkICphcmcpKTsKLSB2b2lk IFNTTF9zZXRfbXNnX2NhbGxiYWNrKFNTTCAqc3NsLCB2b2lkICgqY2IpKGludCB3cml0ZV9wLCBp bnQgdmVyc2lvbiwgaW50IGNvbnRlbnRfdHlwZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVu LCBTU0wgKnNzbCwgdm9pZCAqYXJnKSk7Ci1AQCAtMTM4OSw2ICsxNDAyLDEwIEBAIERFQ0xBUkVf UEVNX3J3KFNTTF9TRVNTSU9OLCBTU0xfU0VTU0lPTikKLSAjZGVmaW5lIERUTFNfQ1RSTF9IQU5E TEVfVElNRU9VVAk3NAotICNkZWZpbmUgRFRMU19DVFJMX0xJU1RFTgkJCTc1Ci0gCi0rI2RlZmlu ZSBTU0xfQ1RSTF9HRVRfUklfU1VQUE9SVAkJCTc2Ci0rI2RlZmluZSBTU0xfQ1RSTF9DTEVBUl9P UFRJT05TCQkJNzcKLSsjZGVmaW5lIFNTTF9DVFJMX0NMRUFSX01PREUJCQk3OAotKwotICNkZWZp bmUgRFRMU3YxX2dldF90aW1lb3V0KHNzbCwgYXJnKSBcCi0gCVNTTF9jdHJsKHNzbCxEVExTX0NU UkxfR0VUX1RJTUVPVVQsMCwgKHZvaWQgKilhcmcpCi0gI2RlZmluZSBEVExTdjFfaGFuZGxlX3Rp bWVvdXQoc3NsKSBcCi1AQCAtMjExOSw2ICsyMTM2LDcgQEAgdm9pZCBFUlJfbG9hZF9TU0xfc3Ry aW5ncyh2b2lkKTsKLSAjZGVmaW5lIFNTTF9SX05PX1BSSVZBVEVfS0VZX0FTU0lHTkVECQkJIDE5 MAotICNkZWZpbmUgU1NMX1JfTk9fUFJPVE9DT0xTX0FWQUlMQUJMRQkJCSAxOTEKLSAjZGVmaW5l IFNTTF9SX05PX1BVQkxJQ0tFWQkJCQkgMTkyCi0rI2RlZmluZSBTU0xfUl9OT19SRU5FR09USUFU SU9OCQkJCSAzMzkKLSAjZGVmaW5lIFNTTF9SX05PX1JFUVVJUkVEX0RJR0VTVAkJCSAzMjQKLSAj ZGVmaW5lIFNTTF9SX05PX1NIQVJFRF9DSVBIRVIJCQkJIDE5MwotICNkZWZpbmUgU1NMX1JfTk9f VkVSSUZZX0NBTExCQUNLCQkJIDE5NAotQEAgLTIxNTgsNiArMjE3Niw3IEBAIHZvaWQgRVJSX2xv YWRfU1NMX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBTU0xfUl9SRVVTRV9DRVJUX0xFTkdUSF9O T1RfWkVSTwkJIDIxNgotICNkZWZpbmUgU1NMX1JfUkVVU0VfQ0VSVF9UWVBFX05PVF9aRVJPCQkJ IDIxNwotICNkZWZpbmUgU1NMX1JfUkVVU0VfQ0lQSEVSX0xJU1RfTk9UX1pFUk8JCSAyMTgKLSsj ZGVmaW5lIFNTTF9SX1NDU1ZfUkVDRUlWRURfV0hFTl9SRU5FR09USUFUSU5HCQkgMzQ1Ci0gI2Rl ZmluZSBTU0xfUl9TRVJWRVJIRUxMT19UTFNFWFQJCQkgMjc1Ci0gI2RlZmluZSBTU0xfUl9TRVNT SU9OX0lEX0NPTlRFWFRfVU5JTklUSUFMSVpFRAkJIDI3NwotICNkZWZpbmUgU1NMX1JfU0hPUlRf UkVBRAkJCQkgMjE5Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfbGliLmMu c2NzdiBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC9zc2xfbGliLmMuc2NzdgkyMDEwLTAxLTA3IDIzOjM3OjM5LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9saWIuYwkyMDEwLTAxLTA3IDIz OjM4OjA4LjAwMDAwMDAwMCArMDEwMAotQEAgLTEwNDEsOCArMTA0MSwxMiBAQCBsb25nIFNTTF9j dHJsKFNTTCAqcyxpbnQgY21kLGxvbmcgbGFyZyx2Ci0gCi0gCWNhc2UgU1NMX0NUUkxfT1BUSU9O UzoKLSAJCXJldHVybihzLT5vcHRpb25zfD1sYXJnKTsKLSsJY2FzZSBTU0xfQ1RSTF9DTEVBUl9P UFRJT05TOgotKwkJcmV0dXJuKHMtPm9wdGlvbnMmPX5sYXJnKTsKLSAJY2FzZSBTU0xfQ1RSTF9N T0RFOgotIAkJcmV0dXJuKHMtPm1vZGV8PWxhcmcpOwotKwljYXNlIFNTTF9DVFJMX0NMRUFSX01P REU6Ci0rCQlyZXR1cm4ocy0+bW9kZSAmPX5sYXJnKTsKLSAJY2FzZSBTU0xfQ1RSTF9HRVRfTUFY X0NFUlRfTElTVDoKLSAJCXJldHVybihzLT5tYXhfY2VydF9saXN0KTsKLSAJY2FzZSBTU0xfQ1RS TF9TRVRfTUFYX0NFUlRfTElTVDoKLUBAIC0xMDYyLDYgKzEwNjYsMTAgQEAgbG9uZyBTU0xfY3Ry bChTU0wgKnMsaW50IGNtZCxsb25nIGxhcmcsdgotIAkJCXJldHVybiAwOwotIAkJcy0+bWF4X3Nl bmRfZnJhZ21lbnQgPSBsYXJnOwotIAkJcmV0dXJuIDE7Ci0rCWNhc2UgU1NMX0NUUkxfR0VUX1JJ X1NVUFBPUlQ6Ci0rCQlpZiAocy0+czMpCi0rCQkJcmV0dXJuIHMtPnMzLT5zZW5kX2Nvbm5lY3Rp b25fYmluZGluZzsKLSsJCWVsc2UgcmV0dXJuIDA7Ci0gCWRlZmF1bHQ6Ci0gCQlyZXR1cm4ocy0+ bWV0aG9kLT5zc2xfY3RybChzLGNtZCxsYXJnLHBhcmcpKTsKLSAJCX0KLUBAIC0xMTQ4LDggKzEx NTYsMTIgQEAgbG9uZyBTU0xfQ1RYX2N0cmwoU1NMX0NUWCAqY3R4LGludCBjbWQsbAotIAkJcmV0 dXJuKGN0eC0+c3RhdHMuc2Vzc19jYWNoZV9mdWxsKTsKLSAJY2FzZSBTU0xfQ1RSTF9PUFRJT05T OgotIAkJcmV0dXJuKGN0eC0+b3B0aW9uc3w9bGFyZyk7Ci0rCWNhc2UgU1NMX0NUUkxfQ0xFQVJf T1BUSU9OUzoKLSsJCXJldHVybihjdHgtPm9wdGlvbnMmPX5sYXJnKTsKLSAJY2FzZSBTU0xfQ1RS TF9NT0RFOgotIAkJcmV0dXJuKGN0eC0+bW9kZXw9bGFyZyk7Ci0rCWNhc2UgU1NMX0NUUkxfQ0xF QVJfTU9ERToKLSsJCXJldHVybihjdHgtPm1vZGUmPX5sYXJnKTsKLSAJY2FzZSBTU0xfQ1RSTF9T RVRfTUFYX1NFTkRfRlJBR01FTlQ6Ci0gCQlpZiAobGFyZyA8IDUxMiB8fCBsYXJnID4gU1NMM19S VF9NQVhfUExBSU5fTEVOR1RIKQotIAkJCXJldHVybiAwOwotQEAgLTEzNTcsNiArMTM2OSwyMiBA QCBpbnQgc3NsX2NpcGhlcl9saXN0X3RvX2J5dGVzKFNTTCAqcyxTVEFDCi0gCQlqID0gcHV0X2Ni ID8gcHV0X2NiKGMscCkgOiBzc2xfcHV0X2NpcGhlcl9ieV9jaGFyKHMsYyxwKTsKLSAJCXArPWo7 Ci0gCQl9Ci0rCS8qIElmIHAgPT0gcSwgbm8gY2lwaGVycyBhbmQgY2FsbGVyIGluZGljYXRlcyBh biBlcnJvci4gT3RoZXJ3aXNlCi0rCSAqIGFkZCBTQ1NWIGlmIG5vdCByZW5lZ290aWF0aW5nLgot KwkgKi8KLSsJaWYgKHAgIT0gcSAmJiAhcy0+bmV3X3Nlc3Npb24pCi0rCQl7Ci0rCQlzdGF0aWMg U1NMX0NJUEhFUiBzY3N2ID0KLSsJCQl7Ci0rCQkJMCwgTlVMTCwgU1NMM19DS19TQ1NWLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwCi0rCQkJfTsKLSsJCWogPSBwdXRfY2IgPyBwdXRfY2IoJnNj c3YscCkgOiBzc2xfcHV0X2NpcGhlcl9ieV9jaGFyKHMsJnNjc3YscCk7Ci0rCQlwKz1qOwotKyNp ZmRlZiBPUEVOU1NMX1JJX0RFQlVHCi0rCQlmcHJpbnRmKHN0ZGVyciwgIlNDU1Ygc2VudCBieSBj bGllbnRcbiIpOwotKyNlbmRpZgotKwkJfQotKwotIAlyZXR1cm4ocC1xKTsKLSAJfQotIAotQEAg LTEzNjYsNiArMTM5NCw4IEBAIFNUQUNLX09GKFNTTF9DSVBIRVIpICpzc2xfYnl0ZXNfdG9fY2lw aGUKLSAJY29uc3QgU1NMX0NJUEhFUiAqYzsKLSAJU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNrOwot IAlpbnQgaSxuOwotKwlpZiAocy0+czMpCi0rCQlzLT5zMy0+c2VuZF9jb25uZWN0aW9uX2JpbmRp bmcgPSAwOwotIAotIAluPXNzbF9wdXRfY2lwaGVyX2J5X2NoYXIocyxOVUxMLE5VTEwpOwotIAlp ZiAoKG51bSVuKSAhPSAwKQotQEAgLTEzODMsNiArMTQxMywyNiBAQCBTVEFDS19PRihTU0xfQ0lQ SEVSKSAqc3NsX2J5dGVzX3RvX2NpcGhlCi0gCi0gCWZvciAoaT0wOyBpPG51bTsgaSs9bikKLSAJ CXsKLSsJCS8qIENoZWNrIGZvciBTQ1NWICovCi0rCQlpZiAocy0+czMgJiYgKG4gIT0gMyB8fCAh cFswXSkgJiYKLSsJCQkocFtuLTJdID09ICgoU1NMM19DS19TQ1NWID4+IDgpICYgMHhmZikpICYm Ci0rCQkJKHBbbi0xXSA9PSAoU1NMM19DS19TQ1NWICYgMHhmZikpKQotKwkJCXsKLSsJCQkvKiBT Q1NWIGZhdGFsIGlmIHJlbmVnb3RpYXRpbmcgKi8KLSsJCQlpZiAocy0+bmV3X3Nlc3Npb24pCi0r CQkJCXsKLSsJCQkJU1NMZXJyKFNTTF9GX1NTTF9CWVRFU19UT19DSVBIRVJfTElTVCxTU0xfUl9T Q1NWX1JFQ0VJVkVEX1dIRU5fUkVORUdPVElBVElORyk7Ci0rCQkJCXNzbDNfc2VuZF9hbGVydChz LFNTTDNfQUxfRkFUQUwsU1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFKTsgCi0rCQkJCWdvdG8gZXJy OwotKwkJCQl9Ci0rCQkJcy0+czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nID0gMTsKLSsJCQlw ICs9IG47Ci0rI2lmZGVmIE9QRU5TU0xfUklfREVCVUcKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIlND U1YgcmVjZWl2ZWQgYnkgc2VydmVyXG4iKTsKLSsjZW5kaWYKLSsJCQljb250aW51ZTsKLSsJCQl9 Ci0rCi0gCQljPXNzbF9nZXRfY2lwaGVyX2J5X2NoYXIocyxwKTsKLSAJCXArPW47Ci0gCQlpZiAo YyAhPSBOVUxMKQotQEAgLTE2NDIsNiArMTY5MiwxMCBAQCBTU0xfQ1RYICpTU0xfQ1RYX25ldyhj b25zdCBTU0xfTUVUSE9EICptCi0gCX0KLSAjZW5kaWYKLSAjZW5kaWYKLSsJLyogRGVmYXVsdCBp cyB0byBjb25uZWN0IHRvIG5vbi1SSSBzZXJ2ZXJzLiBXaGVuIFJJIGlzIG1vcmUgd2lkZWx5Ci0r CSAqIGRlcGxveWVkIG1pZ2h0IGNoYW5nZSB0aGlzLgotKwkgKi8KLSsJcmV0LT5vcHRpb25zID0g U1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVDsKLSAKLSAJcmV0dXJuKHJldCk7Ci0gZXJyOgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsMy5oLnNjc3Ygb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvc3NsMy5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsMy5oLnNj c3YJMjAxMC0wMS0wNyAyMzozNzozOC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC9zc2wzLmgJMjAxMC0wMS0wNyAyMzozNzozOS4wMDAwMDAwMDAgKzAxMDAKLUBA IC0xMjgsNiArMTI4LDkgQEAKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYKLSAKLSsvKiBTaWduYWxs aW5nIGNpcGhlciBzdWl0ZSB2YWx1ZTogZnJvbSBkcmFmdC1pZXRmLXRscy1yZW5lZ290aWF0aW9u LTAzLnR4dCAqLwotKyNkZWZpbmUgU1NMM19DS19TQ1NWCQkJCTB4MDMwMDAwRkYKLSsKLSAjZGVm aW5lIFNTTDNfQ0tfUlNBX05VTExfTUQ1CQkJMHgwMzAwMDAwMQotICNkZWZpbmUgU1NMM19DS19S U0FfTlVMTF9TSEEJCQkweDAzMDAwMDAyCi0gI2RlZmluZSBTU0wzX0NLX1JTQV9SQzRfNDBfTUQ1 IAkJCTB4MDMwMDAwMDMKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQu Yy5zY3N2IG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2NsbnQuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3MzX2NsbnQuYy5zY3N2CTIwMTAtMDEtMDcgMjM6Mzc6MzkuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5jCTIwMTAtMDEtMDcg MjM6Mzc6MzkuMDAwMDAwMDAwICswMTAwCi1AQCAtOTE2LDcgKzkxNiw3IEBAIGludCBzc2wzX2dl dF9zZXJ2ZXJfaGVsbG8oU1NMICpzKQotIAotICNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKLSAJ LyogVExTIGV4dGVuc2lvbnMqLwotLQlpZiAocy0+dmVyc2lvbiA+IFNTTDNfVkVSU0lPTikKLSsJ aWYgKHMtPnZlcnNpb24gPj0gU1NMM19WRVJTSU9OKQotIAkJewotIAkJaWYgKCFzc2xfcGFyc2Vf c2VydmVyaGVsbG9fdGxzZXh0KHMsJnAsZCxuLCAmYWwpKQotIAkJCXsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvc3NsL3MzX3BrdC5jLnNjc3Ygb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv czNfcGt0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19wa3QuYy5zY3N2CTIwMDkt MDctMTQgMTc6Mjg6NDQuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvczNfcGt0LmMJMjAxMC0wMS0wNyAyMzozNzozOS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMTIw LDcgKzExMjAsMjUgQEAgc3RhcnQ6Ci0gCQkgKiBub3cgdHJ5IGFnYWluIHRvIG9idGFpbiB0aGUg KGFwcGxpY2F0aW9uKSBkYXRhIHdlIHdlcmUgYXNrZWQgZm9yICovCi0gCQlnb3RvIHN0YXJ0Owot IAkJfQotLQotKwkvKiBJZiB3ZSBhcmUgYSBzZXJ2ZXIgYW5kIGdldCBhIGNsaWVudCBoZWxsbyB3 aGVuIHJlbmVnb3RpYXRpb24gaXNuJ3QKLSsJICogYWxsb3dlZCBzZW5kIGJhY2sgYSBubyByZW5l Z290aWF0aW9uIGFsZXJ0IGFuZCBjYXJyeSBvbi4KLSsJICogV0FSTklORzogZXhwZXJpbWVudGFs IGNvZGUsIG5lZWRzIHJldmlld2luZyAoc3RldmUpCi0rCSAqLwotKwlpZiAocy0+c2VydmVyICYm Ci0rCQlTU0xfaXNfaW5pdF9maW5pc2hlZChzKSAmJgotKyAgICAJCSFzLT5zMy0+c2VuZF9jb25u ZWN0aW9uX2JpbmRpbmcgJiYKLSsJCShzLT52ZXJzaW9uID4gU1NMM19WRVJTSU9OKSAmJgotKwkJ KHMtPnMzLT5oYW5kc2hha2VfZnJhZ21lbnRfbGVuID49IDQpICYmCi0rCQkocy0+czMtPmhhbmRz aGFrZV9mcmFnbWVudFswXSA9PSBTU0wzX01UX0NMSUVOVF9IRUxMTykgJiYKLSsJCShzLT5zZXNz aW9uICE9IE5VTEwpICYmIChzLT5zZXNzaW9uLT5jaXBoZXIgIT0gTlVMTCkgJiYKLSsJCSEocy0+ Y3R4LT5vcHRpb25zICYgU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikp Ci0rCQkKLSsJCXsKLSsJCS8qcy0+czMtPmhhbmRzaGFrZV9mcmFnbWVudF9sZW4gPSAwOyovCi0r CQlyci0+bGVuZ3RoID0gMDsKLSsJCXNzbDNfc2VuZF9hbGVydChzLFNTTDNfQUxfV0FSTklORywg U1NMX0FEX05PX1JFTkVHT1RJQVRJT04pOwotKwkJZ290byBzdGFydDsKLSsJCX0KLSAJaWYgKHMt PnMzLT5hbGVydF9mcmFnbWVudF9sZW4gPj0gMikKLSAJCXsKLSAJCWludCBhbGVydF9sZXZlbCA9 IHMtPnMzLT5hbGVydF9mcmFnbWVudFswXTsKLUBAIC0xMTUwLDYgKzExNjgsMjEgQEAgc3RhcnQ6 Ci0gCQkJCXMtPnNodXRkb3duIHw9IFNTTF9SRUNFSVZFRF9TSFVURE9XTjsKLSAJCQkJcmV0dXJu KDApOwotIAkJCQl9Ci0rCQkJLyogVGhpcyBpcyBhIHdhcm5pbmcgYnV0IHdlIHJlY2VpdmUgaXQg aWYgd2UgcmVxdWVzdGVkCi0rCQkJICogcmVuZWdvdGlhdGlvbiBhbmQgdGhlIHBlZXIgZGVuaWVk IGl0LiBUZXJtaW5hdGUgd2l0aAotKwkJCSAqIGEgZmF0YWwgYWxlcnQgYmVjYXVzZSBpZiBhcHBs aWNhdGlvbiB0cmllZCB0bwotKwkJCSAqIHJlbmVnb3RpYXRpZSBpdCBwcmVzdW1hYmx5IGhhZCBh IGdvb2QgcmVhc29uIGFuZAotKwkJCSAqIGV4cGVjdHMgaXQgdG8gc3VjY2VlZC4KLSsJCQkgKgot KwkJCSAqIEluIGZ1dHVyZSB3ZSBtaWdodCBoYXZlIGEgcmVuZWdvdGlhdGlvbiB3aGVyZSB3ZQot KwkJCSAqIGRvbid0IGNhcmUgaWYgdGhlIHBlZXIgcmVmdXNlZCBpdCB3aGVyZSB3ZSBjYXJyeSBv bi4KLSsJCQkgKi8KLSsJCQllbHNlIGlmIChhbGVydF9kZXNjciA9PSBTU0xfQURfTk9fUkVORUdP VElBVElPTikKLSsJCQkJewotKwkJCQlhbCA9IFNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKLSsJ CQkJU1NMZXJyKFNTTF9GX1NTTDNfUkVBRF9CWVRFUyxTU0xfUl9OT19SRU5FR09USUFUSU9OKTsK LSsJCQkJZ290byBmX2VycjsKLSsJCQkJfQotIAkJCX0KLSAJCWVsc2UgaWYgKGFsZXJ0X2xldmVs ID09IDIpIC8qIGZhdGFsICovCi0gCQkJewotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvczNfc3J2ci5jLnNjc3Ygb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfc3J2ci5jCi0tLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfc3J2ci5jLnNjc3YJMjAxMC0wMS0wNyAyMzozNzoz OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19zcnZyLmMJ MjAxMC0wMS0wNyAyMzozNzozOS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMDE1LDcgKzEwMTUsNyBA QCBpbnQgc3NsM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcykKLSAKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fVExTRVhUCi0gCS8qIFRMUyBleHRlbnNpb25zKi8KLS0JaWYgKHMtPnZlcnNpb24gPiBTU0wz X1ZFUlNJT04pCi0rCWlmIChzLT52ZXJzaW9uID49IFNTTDNfVkVSU0lPTikKLSAJCXsKLSAJCWlm ICghc3NsX3BhcnNlX2NsaWVudGhlbGxvX3Rsc2V4dChzLCZwLGQsbiwgJmFsKSkKLSAJCQl7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9saWIuYy5zY3N2IG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3QxX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGli LmMuc2NzdgkyMDEwLTAxLTA3IDIzOjM3OjM5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvc3NsL3QxX2xpYi5jCTIwMTAtMDEtMDcgMjM6Mzg6MDguMDAwMDAwMDAwICsw MTAwCi1AQCAtMjc1LDggKzI3NSw5IEBAIHVuc2lnbmVkIGNoYXIgKnNzbF9hZGRfY2xpZW50aGVs bG9fdGxzZXgKLSAJaW50IGV4dGRhdGFsZW49MDsKLSAJdW5zaWduZWQgY2hhciAqcmV0ID0gcDsK LSAKLS0JLyogZG9uJ3QgYWRkIGV4dGVuc2lvbnMgZm9yIFNTTHYzICovCi0tCWlmIChzLT5jbGll bnRfdmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCi0rCS8qIGRvbid0IGFkZCBleHRlbnNpb25zIGZv ciBTU0x2MyB1bmxlc3MgZG9pbmcgc2VjdXJlIHJlbmVnb3RpYXRpb24gKi8KLSsJaWYgKHMtPmNs aWVudF92ZXJzaW9uID09IFNTTDNfVkVSU0lPTgotKwkJCQkJJiYgIXMtPnMzLT5zZW5kX2Nvbm5l Y3Rpb25fYmluZGluZykKLSAJCXJldHVybiBwOwotIAotIAlyZXQrPTI7Ci1AQCAtMzE1LDggKzMx Niw5IEBAIHVuc2lnbmVkIGNoYXIgKnNzbF9hZGRfY2xpZW50aGVsbG9fdGxzZXgKLSAJCXJldCs9 c2l6ZV9zdHI7Ci0gCQl9Ci0gCi0tICAgICAgICAvKiBBZGQgdGhlIHJlbmVnb3RpYXRpb24gb3B0 aW9uOiBUT0RPRUtSIHN3aXRjaCAqLwotLSAgICAgICAgewotKyAgICAgICAgLyogQWRkIFJJIGlm IHJlbmVnb3RpYXRpbmcgKi8KLSsgICAgICAgIGlmIChzLT5uZXdfc2Vzc2lvbikKLSsgICAgICAg ICAgewotICAgICAgICAgICBpbnQgZWw7Ci0gICAgICAgICAgIAotICAgICAgICAgICBpZighc3Ns X2FkZF9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQocywgMCwgJmVsLCAwKSkKLUBAIC01MDQs OCArNTA2LDggQEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleAotIAlp bnQgZXh0ZGF0YWxlbj0wOwotIAl1bnNpZ25lZCBjaGFyICpyZXQgPSBwOwotIAotLQkvKiBkb24n dCBhZGQgZXh0ZW5zaW9ucyBmb3IgU1NMdjMgKi8KLS0JaWYgKHMtPnZlcnNpb24gPT0gU1NMM19W RVJTSU9OKQotKwkvKiBkb24ndCBhZGQgZXh0ZW5zaW9ucyBmb3IgU1NMdjMsIHVubGVzcyBkb2lu ZyBzZWN1cmUgcmVuZWdvdGlhdGlvbiAqLwotKwlpZiAocy0+dmVyc2lvbiA9PSBTU0wzX1ZFUlNJ T04gJiYgIXMtPnMzLT5zZW5kX2Nvbm5lY3Rpb25fYmluZGluZykKLSAJCXJldHVybiBwOwotIAkK LSAJcmV0Kz0yOwotQEAgLTYzMywyNCArNjM1LDEzIEBAIGludCBzc2xfcGFyc2VfY2xpZW50aGVs bG9fdGxzZXh0KFNTTCAqcywKLSAKLSAJcy0+c2VydmVybmFtZV9kb25lID0gMDsKLSAJcy0+dGxz ZXh0X3N0YXR1c190eXBlID0gLTE7Ci0tCXMtPnMzLT5zZW5kX2Nvbm5lY3Rpb25fYmluZGluZyA9 IDA7Ci0gCi0gCWlmIChkYXRhID49IChkK24tMikpCi0tCQl7Ci0tCQlpZiAocy0+bmV3X3Nlc3Np b24KLS0JCQkmJiAhKHMtPmN0eC0+b3B0aW9ucyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZ X1JFTkVHT1RJQVRJT04pKQotLQkJCXsKLS0JCQkvKiBXZSBzaG91bGQgYWx3YXlzIHNlZSBvbmUg ZXh0ZW5zaW9uOiB0aGUgcmVuZWdvdGlhdGUgZXh0ZW5zaW9uICovCi0tCQkJKmFsID0gU1NMX0FE X0lMTEVHQUxfUEFSQU1FVEVSOyAvKiBpcyB0aGlzIHRoZSByaWdodCBhbGVydD8gKi8KLS0JCQlT U0xlcnIoU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1RMU0VYVCwgU1NMX1JfVU5TQUZFX0xF R0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLS0JCQlyZXR1cm4gMDsKLS0JCQl9Ci0tCQly ZXR1cm4gMTsKLS0JCX0KLSsJCWdvdG8gcmlfY2hlY2s7Ci0gCW4ycyhkYXRhLGxlbik7Ci0gCi0g CWlmIChkYXRhID4gKGQrbi1sZW4pKSAKLS0JCXJldHVybiAxOwotKwkJZ290byByaV9jaGVjazsK LSAKLSAJd2hpbGUgKGRhdGEgPD0gKGQrbi00KSkKLSAJCXsKLUBAIC02NTgsNyArNjQ5LDcgQEAg aW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAotIAkJbjJzKGRhdGEsc2l6 ZSk7Ci0gCi0gCQlpZiAoZGF0YStzaXplID4gKGQrbikpCi0tCSAgIAkJcmV0dXJuIDE7Ci0rCSAg IAkJZ290byByaV9jaGVjazsKLSAjaWYgMAotIAkJZnByaW50ZihzdGRlcnIsIlJlY2VpdmVkIGV4 dGVuc2lvbiB0eXBlICVkIHNpemUgJWRcbiIsdHlwZSxzaXplKTsKLSAjZW5kaWYKLUBAIC05NzEs MTcgKzk2MiwyMiBAQCBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCi0g CQkvKiBzZXNzaW9uIHRpY2tldCBwcm9jZXNzZWQgZWFybGllciAqLwotIAkJZGF0YSs9c2l6ZTsK LSAJCX0KLS0gIAotLSAJaWYgKHMtPm5ld19zZXNzaW9uICYmICFyZW5lZ290aWF0ZV9zZWVuCi0t IAkJJiYgIShzLT5jdHgtPm9wdGlvbnMgJiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5F R09USUFUSU9OKSkKLS0gCQl7Ci0tCQlTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExP X1RMU0VYVCwgU1NMX1JfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLS0g CQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFs ZXJ0PyAqLwotLSAJCXJldHVybiAwOwotLSAJCX0KLS0gCi0gCQkJCQotIAkqcCA9IGRhdGE7Ci0r Ci0rCXJpX2NoZWNrOgotKwotKwkvKiBOZWVkIFJJIGlmIHJlbmVnb3RpYXRpbmcgKi8KLSsKLSsJ aWYgKCFyZW5lZ290aWF0ZV9zZWVuICYmIHMtPm5ld19zZXNzaW9uICYmCi0rCQkhKHMtPm9wdGlv bnMgJiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OKSkKLSsJCXsKLSsJ CSphbCA9IFNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKLSsJIAlTU0xlcnIoU1NMX0ZfU1NMX1BB UlNFX0NMSUVOVEhFTExPX1RMU0VYVCwKLSsJCQkJU1NMX1JfVU5TQUZFX0xFR0FDWV9SRU5FR09U SUFUSU9OX0RJU0FCTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotIAlyZXR1cm4gMTsKLSAJ fQotIAotQEAgLTk5NSwyMSArOTkxLDcgQEAgaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb190bHNl eHQoU1NMICpzLAotIAlpbnQgcmVuZWdvdGlhdGVfc2VlbiA9IDA7Ci0gCi0gCWlmIChkYXRhID49 IChkK24tMikpCi0tCQl7Ci0tI2lmIDAKLS0JCS8qIEJlY2F1c2UgdGhlIGNsaWVudCBkb2VzIG5v dCBzZWUgYW55IHJlbmVnb3RpYXRpb24gZHVyaW5nIGFuCi0tCQkgICBhdHRhY2ssIHdlIG11c3Qg ZW5mb3JjZSB0aGlzIG9uIGFsbCBzZXJ2ZXIgaGVsbG9zLCBldmVuIHRoZQotLQkJICAgZmlyc3Qg Ki8KLS0JCWlmICghKHMtPmN0eC0+b3B0aW9ucyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZ X1JFTkVHT1RJQVRJT04pKQotLQkJCXsKLS0JCQkvKiBXZSBzaG91bGQgYWx3YXlzIHNlZSBvbmUg ZXh0ZW5zaW9uOiB0aGUgcmVuZWdvdGlhdGUgZXh0ZW5zaW9uICovCi0tCQkJKmFsID0gU1NMX0FE X0lMTEVHQUxfUEFSQU1FVEVSOyAvKiBpcyB0aGlzIHRoZSByaWdodCBhbGVydD8gKi8KLS0JCQlT U0xlcnIoU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVCwgU1NMX1JfVU5TQUZFX0xF R0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLS0JCQlyZXR1cm4gMDsKLS0JCQl9Ci0tI2Vu ZGlmCi0tCQlyZXR1cm4gMTsKLS0JCX0KLSsJCWdvdG8gcmlfY2hlY2s7Ci0gCi0gCW4ycyhkYXRh LGxlbik7Ci0gCi1AQCAtMTAxOSw3ICsxMDAxLDcgQEAgaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxs b190bHNleHQoU1NMICpzLAotIAkJbjJzKGRhdGEsc2l6ZSk7Ci0gCi0gCQlpZiAoZGF0YStzaXpl ID4gKGQrbikpCi0tCSAgIAkJcmV0dXJuIDE7Ci0rCSAgIAkJZ290byByaV9jaGVjazsKLSAKLSAJ CWlmIChzLT50bHNleHRfZGVidWdfY2IpCi0gCQkJcy0+dGxzZXh0X2RlYnVnX2NiKHMsIDEsIHR5 cGUsIGRhdGEsIHNpemUsCi1AQCAtMTE0MywxNiArMTEyNSw2IEBAIGludCBzc2xfcGFyc2Vfc2Vy dmVyaGVsbG9fdGxzZXh0KFNTTCAqcywKLSAJCXJldHVybiAwOwotIAkJfQotIAotLSNpZiAwCi0t CWlmICghcmVuZWdvdGlhdGVfc2VlbgotLQkJJiYgIShzLT5jdHgtPm9wdGlvbnMgJiBTU0xfT1Bf QUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OKSkKLS0JCXsKLS0JCSphbCA9IFNTTF9B RF9JTExFR0FMX1BBUkFNRVRFUjsgLyogaXMgdGhpcyB0aGUgcmlnaHQgYWxlcnQ/ICovCi0tCQlT U0xlcnIoU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVCwgU1NMX1JfVU5TQUZFX0xF R0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLS0JCXJldHVybiAwOwotLQkJfQotLSNlbmRp ZgotLQotIAlpZiAoIXMtPmhpdCAmJiB0bHNleHRfc2VydmVybmFtZSA9PSAxKQotIAkJewotICAJ CWlmIChzLT50bHNleHRfaG9zdG5hbWUpCi1AQCAtMTE3NSw2ICsxMTQ3LDI2IEBAIGludCBzc2xf cGFyc2Vfc2VydmVyaGVsbG9fdGxzZXh0KFNTTCAqcywKLSAJCX0KLSAKLSAJKnAgPSBkYXRhOwot KwotKwlyaV9jaGVjazoKLSsKLSsJLyogRGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gc2VlIFJJLiBT dHJpY3RseSBzcGVha2luZyBpZiB3ZSB3YW50IHRvCi0rCSAqIGF2b2lkIGFuIGF0dGFjayB3ZSBz aG91bGQgKmFsd2F5cyogc2VlIFJJIGV2ZW4gb24gaW5pdGlhbCBzZXJ2ZXIKLSsJICogaGVsbG8g YmVjYXVzZSB0aGUgY2xpZW50IGRvZXNuJ3Qgc2VlIGFueSByZW5lZ290aWF0aW9uIGR1cmluZyBh bgotKwkgKiBhdHRhY2suIEhvd2V2ZXIgdGhpcyB3b3VsZCBtZWFuIHdlIGNvdWxkIG5vdCBjb25u ZWN0IHRvIGFueSBzZXJ2ZXIKLSsJICogd2hpY2ggZG9lc24ndCBzdXBwb3J0IFJJIHNvIGZvciB0 aGUgaW1tZWRpYXRlIGZ1dHVyZSB0b2xlcmF0ZSBSSQotKwkgKiBhYnNlbmNlIG9uIGluaXRpYWwg Y29ubmVjdCBvbmx5LgotKwkgKi8KLSsJaWYgKCFyZW5lZ290aWF0ZV9zZWVuICYmIAotKwkJKHMt Pm5ld19zZXNzaW9uIHx8ICEocy0+b3B0aW9ucyAmIFNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5F Q1QpKQotKwkJJiYgIShzLT5vcHRpb25zICYgU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVO RUdPVElBVElPTikpCi0rCQl7Ci0rCQkqYWwgPSBTU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7Ci0r CQlTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVCwKLSsJCQkJU1NMX1Jf VU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLSsJCXJldHVybiAwOwotKwkJ fQotKwotIAlyZXR1cm4gMTsKLSAJfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvdDFfcmVuZWcuYy5zY3N2IG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3QxX3JlbmVnLmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9yZW5lZy5jLnNjc3YJMjAwOS0xMS0wOSAxOTo0 NTo0Mi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9yZW5l Zy5jCTIwMTAtMDEtMDcgMjM6Mzc6MzkuMDAwMDAwMDAwICswMTAwCi1AQCAtMTMwLDEwICsxMzAs MTUgQEAgaW50IHNzbF9hZGRfY2xpZW50aGVsbG9fcmVuZWdvdGlhdGVfZXh0KAotIAotICAgICAg ICAgbWVtY3B5KHAsIHMtPnMzLT5wcmV2aW91c19jbGllbnRfZmluaXNoZWQsCi0gCSAgICAgICBz LT5zMy0+cHJldmlvdXNfY2xpZW50X2ZpbmlzaGVkX2xlbik7Ci0rI2lmZGVmIE9QRU5TU0xfUklf REVCVUcKLSsgICAgZnByaW50ZihzdGRlcnIsICIlcyBSSSBleHRlbnNpb24gc2VudCBieSBjbGll bnRcbiIsCi0rCQlzLT5zMy0+cHJldmlvdXNfY2xpZW50X2ZpbmlzaGVkX2xlbiA/ICJOb24tZW1w dHkiIDogIkVtcHR5Iik7Ci0rI2VuZGlmCi0gICAgICAgICB9Ci0gICAgIAotICAgICAqbGVuPXMt PnMzLT5wcmV2aW91c19jbGllbnRfZmluaXNoZWRfbGVuICsgMTsKLS0gICAgCi0rCi0rIAotICAg ICByZXR1cm4gMTsKLSAgICAgfQotIAotQEAgLTE2Niw3ICsxNzEsNyBAQCBpbnQgc3NsX3BhcnNl X2NsaWVudGhlbGxvX3JlbmVnb3RpYXRlX2V4Ci0gICAgIGlmKGlsZW4gIT0gcy0+czMtPnByZXZp b3VzX2NsaWVudF9maW5pc2hlZF9sZW4pCi0gICAgICAgICB7Ci0gICAgICAgICBTU0xlcnIoU1NM X0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVCxTU0xfUl9SRU5FR09USUFU SU9OX01JU01BVENIKTsKLS0gICAgICAgICphbD1TU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7Ci0r ICAgICAgICAqYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwotICAgICAgICAgcmV0dXJuIDA7 Ci0gICAgICAgICB9Ci0gICAgIAotQEAgLTE3NCw5ICsxNzksMTMgQEAgaW50IHNzbF9wYXJzZV9j bGllbnRoZWxsb19yZW5lZ290aWF0ZV9leAotIAkgICAgICBzLT5zMy0+cHJldmlvdXNfY2xpZW50 X2ZpbmlzaGVkX2xlbikpCi0gICAgICAgICB7Ci0gICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX1BB UlNFX0NMSUVOVEhFTExPX1JFTkVHT1RJQVRFX0VYVCxTU0xfUl9SRU5FR09USUFUSU9OX01JU01B VENIKTsKLS0gICAgICAgICphbD1TU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7Ci0rICAgICAgICAq YWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOwotICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg ICB9Ci0rI2lmZGVmIE9QRU5TU0xfUklfREVCVUcKLSsgICAgZnByaW50ZihzdGRlcnIsICIlcyBS SSBleHRlbnNpb24gcmVjZWl2ZWQgYnkgc2VydmVyXG4iLAotKwkJCQlpbGVuID8gIk5vbi1lbXB0 eSIgOiAiRW1wdHkiKTsKLSsjZW5kaWYKLSAKLSAgICAgcy0+czMtPnNlbmRfY29ubmVjdGlvbl9i aW5kaW5nPTE7Ci0gCi1AQCAtMjA2LDYgKzIxNSwxMCBAQCBpbnQgc3NsX2FkZF9zZXJ2ZXJoZWxs b19yZW5lZ290aWF0ZV9leHQoCi0gCi0gICAgICAgICBtZW1jcHkocCwgcy0+czMtPnByZXZpb3Vz X3NlcnZlcl9maW5pc2hlZCwKLSAJICAgICAgIHMtPnMzLT5wcmV2aW91c19zZXJ2ZXJfZmluaXNo ZWRfbGVuKTsKLSsjaWZkZWYgT1BFTlNTTF9SSV9ERUJVRwotKyAgICBmcHJpbnRmKHN0ZGVyciwg IiVzIFJJIGV4dGVuc2lvbiBzZW50IGJ5IHNlcnZlclxuIiwKLSsgICAgCQlzLT5zMy0+cHJldmlv dXNfY2xpZW50X2ZpbmlzaGVkX2xlbiA/ICJOb24tZW1wdHkiIDogIkVtcHR5Iik7Ci0rI2VuZGlm Ci0gICAgICAgICB9Ci0gICAgIAotICAgICAqbGVuPXMtPnMzLT5wcmV2aW91c19jbGllbnRfZmlu aXNoZWRfbGVuCi1AQCAtMjQ5LDcgKzI2Miw3IEBAIGludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9f cmVuZWdvdGlhdGVfZXgKLSAgICAgaWYoaWxlbiAhPSBleHBlY3RlZF9sZW4pCi0gICAgICAgICB7 Ci0gICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRF X0VYVCxTU0xfUl9SRU5FR09USUFUSU9OX01JU01BVENIKTsKLS0gICAgICAgICphbD1TU0xfQURf SUxMRUdBTF9QQVJBTUVURVI7Ci0rICAgICAgICAqYWw9U1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJF OwotICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICB9Ci0gCi1AQCAtMjU3LDcgKzI3MCw3IEBA IGludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fcmVuZWdvdGlhdGVfZXgKLSAJICAgICAgcy0+czMt PnByZXZpb3VzX2NsaWVudF9maW5pc2hlZF9sZW4pKQotICAgICAgICAgewotICAgICAgICAgU1NM ZXJyKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19SRU5FR09USUFURV9FWFQsU1NMX1JfUkVO RUdPVElBVElPTl9NSVNNQVRDSCk7Ci0tICAgICAgICAqYWw9U1NMX0FEX0lMTEVHQUxfUEFSQU1F VEVSOwotKyAgICAgICAgKmFsPVNTTF9BRF9IQU5EU0hBS0VfRkFJTFVSRTsKLSAgICAgICAgIHJl dHVybiAwOwotICAgICAgICAgfQotICAgICBkICs9IHMtPnMzLT5wcmV2aW91c19jbGllbnRfZmlu aXNoZWRfbGVuOwotQEAgLTI2OSw2ICsyODIsMTEgQEAgaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxs b19yZW5lZ290aWF0ZV9leAotICAgICAgICAgKmFsPVNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsK LSAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgfQotKyNpZmRlZiBPUEVOU1NMX1JJX0RFQlVH Ci0rICAgIGZwcmludGYoc3RkZXJyLCAiJXMgUkkgZXh0ZW5zaW9uIHJlY2VpdmVkIGJ5IGNsaWVu dFxuIiwKLSsJCQkJaWxlbiA/ICJOb24tZW1wdHkiIDogIkVtcHR5Iik7Ci0rI2VuZGlmCi0rICAg IHMtPnMzLT5zZW5kX2Nvbm5lY3Rpb25fYmluZGluZz0xOwotIAotICAgICByZXR1cm4gMTsKLSAg ICAgfQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVuZWcucGF0Y2ggYi9vcGVu c3NsLTEuMC4wLWJldGE0LXJlbmVnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA5MmUyMDZkLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVuZWcucGF0Y2gK KysrIC9kZXYvbnVsbApAQCAtMSwyMzcgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9hcHBzL3NfY2IuYy5yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jYi5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL3NfY2IuYy5yZW5lZwkyMDA5LTEwLTE1IDIwOjQ4 OjQ3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX2NiLmMJ MjAwOS0xMS0xMiAxNTowMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02NjksNiArNjY5LDEwIEBA IHZvaWQgTVNfQ0FMTEJBQ0sgdGxzZXh0X2NiKFNTTCAqcywgaW50IGMKLSAJCWV4dG5hbWUgPSAi c2VydmVyIHRpY2tldCI7Ci0gCQlicmVhazsKLSAKLSsJCWNhc2UgVExTRVhUX1RZUEVfcmVuZWdv dGlhdGU6Ci0rCQlleHRuYW1lID0gInJlbmVnb3RpYXRlIjsKLSsJCWJyZWFrOwotKwotICNpZmRl ZiBUTFNFWFRfVFlQRV9vcGFxdWVfcHJmX2lucHV0Ci0gCQljYXNlIFRMU0VYVF9UWVBFX29wYXF1 ZV9wcmZfaW5wdXQ6Ci0gCQlleHRuYW1lID0gIm9wYXF1ZSBQUkYgaW5wdXQiOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBzL3NfY2xpZW50LmMucmVuZWcgb3BlbnNzbC0xLjAuMC1i ZXRhNC9hcHBzL3NfY2xpZW50LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jbGll bnQuYy5yZW5lZwkyMDA5LTExLTEyIDE0OjU3OjQ4LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTQvYXBwcy9zX2NsaWVudC5jCTIwMDktMTEtMTIgMTU6MDE6NDguMDAwMDAw MDAwICswMTAwCi1AQCAtMzQzLDYgKzM0Myw3IEBAIHN0YXRpYyB2b2lkIHNjX3VzYWdlKHZvaWQp Ci0gCUJJT19wcmludGYoYmlvX2VyciwiIC1zdGF0dXMgICAgICAgICAgIC0gcmVxdWVzdCBjZXJ0 aWZpY2F0ZSBzdGF0dXMgZnJvbSBzZXJ2ZXJcbiIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAt bm9fdGlja2V0ICAgICAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vzc2lvbiB0aWNr ZXRzXG4iKTsKLSAjZW5kaWYKLSsJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290 aWF0aW9uIC0gZW5hYmxlIHVzZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxu Iik7Ci0gCX0KLSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi1AQCAtNjU3LDYgKzY1OCw4 IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjZW5kaWYKLSAJCWVsc2UgaWYg KHN0cmNtcCgqYXJndiwiLXNlcnZlcnByZWYiKSA9PSAwKQotIAkJCW9mZnw9U1NMX09QX0NJUEhF Ul9TRVJWRVJfUFJFRkVSRU5DRTsKLSsJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWxlZ2FjeV9y ZW5lZ290aWF0aW9uIikgPT0gMCkKLSsJCQlvZmZ8PVNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZ X1JFTkVHT1RJQVRJT047Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBoZXIiKSA9PSAw KQotIAkJCXsKLSAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L2FwcHMvc19zZXJ2ZXIuYy5yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0L2Fw cHMvc19zZXJ2ZXIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jLnJl bmVnCTIwMDktMTEtMTIgMTQ6NTc6NDguMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9hcHBzL3Nfc2VydmVyLmMJMjAwOS0xMS0xMiAxNTowMTo0OC4wMDAwMDAwMDAgKzAx MDAKLUBAIC00OTEsNiArNDkxLDcgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKLSAJQklP X3ByaW50ZihiaW9fZXJyLCIgICAgICAgICAgICAgICAgIG5vdCBzcGVjaWZpZWQgKGRlZmF1bHQg aXMgJXMpXG4iLFRFU1RfQ0VSVDIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGxzZXh0ZGVi dWcgIC0gaGV4IGR1bXAgb2YgYWxsIFRMUyBleHRlbnNpb25zIHJlY2VpdmVkXG4iKTsKLSAJQklP X3ByaW50ZihiaW9fZXJyLCIgLW5vX3RpY2tldCAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdi aXMgc2Vzc2lvbiB0aWNrZXRzXG4iKTsKLSsJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9y ZW5lZ290aWF0aW9uIC0gZW5hYmxlIHVzZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vy b3VzKVxuIik7Ci0gI2VuZGlmCi0gCX0KLSAKLUBAIC0xMDEzLDYgKzEwMTQsOCBAQCBpbnQgTUFJ TihpbnQgYXJnYywgY2hhciAqYXJndltdKQotIAkJCXZlcmlmeV9yZXR1cm5fZXJyb3IgPSAxOwot IAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVycHJlZiIpID09IDApCi0gCQkJeyBvZmZ8 PVNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U7IH0KLSsJCWVsc2UgaWYgKHN0cmNtcCgq YXJndiwiLWxlZ2FjeV9yZW5lZ290aWF0aW9uIikgPT0gMCkKLSsJCQlvZmZ8PVNTTF9PUF9BTExP V19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT047Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3Ys Ii1jaXBoZXIiKSA9PSAwKQotIAkJCXsKLSAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90bHMxLmgucmVuZWcgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvdGxzMS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdGxzMS5oLnJl bmVnCTIwMDktMTEtMTIgMTQ6NTc6NDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvdGxzMS5oCTIwMDktMTEtMTIgMTU6MDI6MzAuMDAwMDAwMDAwICswMTAwCi1A QCAtMjAxLDYgKzIwMSw5IEBAIGV4dGVybiAiQyIgewotICMgZGVmaW5lIFRMU0VYVF9UWVBFX29w YXF1ZV9wcmZfaW5wdXQJCT8/ICovCi0gI2VuZGlmCi0gCi0rLyogVGVtcG9yYXJ5IGV4dGVuc2lv biB0eXBlICovCi0rI2RlZmluZSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZSAgICAgICAgICAgICAg ICAgMHhmZjAxCi0rCi0gLyogTmFtZVR5cGUgdmFsdWUgZnJvbSBSRkMgMzU0NiAqLwotICNkZWZp bmUgVExTRVhUX05BTUVUWVBFX2hvc3RfbmFtZSAwCi0gLyogc3RhdHVzIHJlcXVlc3QgdmFsdWUg ZnJvbSBSRkMgMzU0NiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGli LmMucmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGE0L3NzbC90MV9saWIuYy5yZW5lZwkyMDA5LTExLTA4IDE1OjM2OjMyLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3QxX2xpYi5jCTIwMDktMTEtMTIg MTU6MDI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMzE1LDYgKzMxNSwzMCBAQCB1bnNpZ25lZCBj aGFyICpzc2xfYWRkX2NsaWVudGhlbGxvX3Rsc2V4Ci0gCQlyZXQrPXNpemVfc3RyOwotIAkJfQot IAotKyAgICAgICAgLyogQWRkIHRoZSByZW5lZ290aWF0aW9uIG9wdGlvbjogVE9ET0VLUiBzd2l0 Y2ggKi8KLSsgICAgICAgIHsKLSsgICAgICAgICAgaW50IGVsOwotKyAgICAgICAgICAKLSsgICAg ICAgICAgaWYoIXNzbF9hZGRfY2xpZW50aGVsbG9fcmVuZWdvdGlhdGVfZXh0KHMsIDAsICZlbCwg MCkpCi0rICAgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX0FE RF9DTElFTlRIRUxMT19UTFNFWFQsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLSsgICAgICAgICAg ICAgIHJldHVybiBOVUxMOwotKyAgICAgICAgICAgICAgfQotKwotKyAgICAgICAgICBpZigobGlt aXQgLSBwIC0gNCAtIGVsKSA8IDApIHJldHVybiBOVUxMOwotKyAgICAgICAgICAKLSsgICAgICAg ICAgczJuKFRMU0VYVF9UWVBFX3JlbmVnb3RpYXRlLHJldCk7Ci0rICAgICAgICAgIHMybihlbCxy ZXQpOwotKwotKyAgICAgICAgICBpZighc3NsX2FkZF9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9l eHQocywgcmV0LCAmZWwsIGVsKSkKLSsgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgIFNT TGVycihTU0xfRl9TU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVCwgRVJSX1JfSU5URVJOQUxfRVJS T1IpOwotKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICAgICAgICB9Ci0rCi0r ICAgICAgICAgIHJldCArPSBlbDsKLSsgICAgICAgIH0KLSsKLSAjaWZuZGVmIE9QRU5TU0xfTk9f RUMKLSAJaWYgKHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCAhPSBOVUxMKQotIAkJewotQEAg LTQ5MCw2ICs1MTQsMzEgQEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNl eAotIAkJczJuKFRMU0VYVF9UWVBFX3NlcnZlcl9uYW1lLHJldCk7Ci0gCQlzMm4oMCxyZXQpOwot IAkJfQotKwotKyAgICAgICAgaWYocy0+czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nKQotKyAg ICAgICAgewotKyAgICAgICAgICBpbnQgZWw7Ci0rICAgICAgICAgIAotKyAgICAgICAgICBpZigh c3NsX2FkZF9zZXJ2ZXJoZWxsb19yZW5lZ290aWF0ZV9leHQocywgMCwgJmVsLCAwKSkKLSsgICAg ICAgICAgICAgIHsKLSsgICAgICAgICAgICAgIFNTTGVycihTU0xfRl9TU0xfQUREX1NFUlZFUkhF TExPX1RMU0VYVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwotKyAgICAgICAgICAgICAgcmV0dXJu IE5VTEw7Ci0rICAgICAgICAgICAgICB9Ci0rCi0rICAgICAgICAgIGlmKChsaW1pdCAtIHAgLSA0 IC0gZWwpIDwgMCkgcmV0dXJuIE5VTEw7Ci0rICAgICAgICAgIAotKyAgICAgICAgICBzMm4oVExT RVhUX1RZUEVfcmVuZWdvdGlhdGUscmV0KTsKLSsgICAgICAgICAgczJuKGVsLHJldCk7Ci0rCi0r ICAgICAgICAgIGlmKCFzc2xfYWRkX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dChzLCByZXQs ICZlbCwgZWwpKQotKyAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgU1NMZXJyKFNTTF9G X1NTTF9BRERfU0VSVkVSSEVMTE9fVExTRVhULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci0rICAg ICAgICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAg cmV0ICs9IGVsOwotKyAgICAgICAgfQotKwotICNpZm5kZWYgT1BFTlNTTF9OT19FQwotIAlpZiAo cy0+dGxzZXh0X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpCi0gCQl7Ci1AQCAtNTc0LDExICs2 MjMsMjMgQEAgaW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAotIAl1bnNp Z25lZCBzaG9ydCBzaXplOwotIAl1bnNpZ25lZCBzaG9ydCBsZW47Ci0gCXVuc2lnbmVkIGNoYXIg KmRhdGEgPSAqcDsKLSsJaW50IHJlbmVnb3RpYXRlX3NlZW4gPSAwOwotKwotIAlzLT5zZXJ2ZXJu YW1lX2RvbmUgPSAwOwotIAlzLT50bHNleHRfc3RhdHVzX3R5cGUgPSAtMTsKLSsJcy0+czMtPnNl bmRfY29ubmVjdGlvbl9iaW5kaW5nID0gMDsKLSAKLSAJaWYgKGRhdGEgPj0gKGQrbi0yKSkKLSsJ CXsKLSsJCWlmIChzLT5uZXdfc2Vzc2lvbgotKwkJCSYmICEocy0+Y3R4LT5vcHRpb25zICYgU1NM X09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikpCi0rCQkJewotKwkJCS8qIFdl IHNob3VsZCBhbHdheXMgc2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNp b24gKi8KLSsJCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhl IHJpZ2h0IGFsZXJ0PyAqLwotKwkJCXJldHVybiAwOwotKwkJCX0KLSAJCXJldHVybiAxOwotKwkJ fQotIAluMnMoZGF0YSxsZW4pOwotIAotIAlpZiAoZGF0YSA+IChkK24tbGVuKSkgCi1AQCAtNzkw LDYgKzg1MSwxMiBAQCBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCi0g CQkJCXJldHVybiAwOwotIAkJCQl9Ci0gCQkJfQotKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRf VFlQRV9yZW5lZ290aWF0ZSkKLSsJCQl7Ci0rCQkJaWYoIXNzbF9wYXJzZV9jbGllbnRoZWxsb19y ZW5lZ290aWF0ZV9leHQocywgZGF0YSwgc2l6ZSwgYWwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQly ZW5lZ290aWF0ZV9zZWVuID0gMTsKLSsJCQl9Ci0gCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9U WVBFX3N0YXR1c19yZXF1ZXN0Ci0gCQkJCQkJJiYgcy0+Y3R4LT50bHNleHRfc3RhdHVzX2NiKQot IAkJCXsKLUBAIC04OTQsNiArOTYxLDE0IEBAIGludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdGxz ZXh0KFNTTCAqcywKLSAJCS8qIHNlc3Npb24gdGlja2V0IHByb2Nlc3NlZCBlYXJsaWVyICovCi0g CQlkYXRhKz1zaXplOwotIAkJfQotKyAgCi0rIAlpZiAocy0+bmV3X3Nlc3Npb24gJiYgIXJlbmVn b3RpYXRlX3NlZW4KLSsgCQkmJiAhKHMtPmN0eC0+b3B0aW9ucyAmIFNTTF9PUF9BTExPV19VTlNB RkVfTEVHQUNZX1JFTkVHT1RJQVRJT04pKQotKyAJCXsKLSsgCQkqYWwgPSBTU0xfQURfSUxMRUdB TF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAqLwotKyAJCXJldHVybiAw OwotKyAJCX0KLSsgCi0gCQkJCQotIAkqcCA9IGRhdGE7Ci0gCXJldHVybiAxOwotQEAgLTkwNSwx MSArOTgwLDIyIEBAIGludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdGxzZXh0KFNTTCAqcywKLSAJ dW5zaWduZWQgc2hvcnQgc2l6ZTsKLSAJdW5zaWduZWQgc2hvcnQgbGVuOyAgCi0gCXVuc2lnbmVk IGNoYXIgKmRhdGEgPSAqcDsKLS0KLSAJaW50IHRsc2V4dF9zZXJ2ZXJuYW1lID0gMDsKLSsJaW50 IHJlbmVnb3RpYXRlX3NlZW4gPSAwOwotIAotIAlpZiAoZGF0YSA+PSAoZCtuLTIpKQotKwkJewot KwkJLyogQmVjYXVzZSB0aGUgY2xpZW50IGRvZXMgbm90IHNlZSBhbnkgcmVuZWdvdGlhdGlvbiBk dXJpbmcgYW4KLSsJCSAgIGF0dGFjaywgd2UgbXVzdCBlbmZvcmNlIHRoaXMgb24gYWxsIHNlcnZl ciBoZWxsb3MsIGV2ZW4gdGhlCi0rCQkgICBmaXJzdCAqLwotKwkJaWYgKCEocy0+Y3R4LT5vcHRp b25zICYgU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikpCi0rCQkJewot KwkJCS8qIFdlIHNob3VsZCBhbHdheXMgc2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0 ZSBleHRlbnNpb24gKi8KLSsJCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlz IHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAqLwotKwkJCXJldHVybiAwOwotKwkJCX0KLSAJCXJldHVy biAxOwotKwkJfQotIAotIAluMnMoZGF0YSxsZW4pOwotIAotQEAgLTEwMjUsNyArMTExMSwxMiBA QCBpbnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJLyogU2V0IGZs YWcgdG8gZXhwZWN0IENlcnRpZmljYXRlU3RhdHVzIG1lc3NhZ2UgKi8KLSAJCQlzLT50bHNleHRf c3RhdHVzX2V4cGVjdGVkID0gMTsKLSAJCQl9Ci0tCi0rCQllbHNlIGlmICh0eXBlID09IFRMU0VY VF9UWVBFX3JlbmVnb3RpYXRlKQotKwkJCXsKLSsJCQlpZighc3NsX3BhcnNlX3NlcnZlcmhlbGxv X3JlbmVnb3RpYXRlX2V4dChzLCBkYXRhLCBzaXplLCBhbCkpCi0rCQkJCXJldHVybiAwOwotKwkJ CXJlbmVnb3RpYXRlX3NlZW4gPSAxOwotKwkJCX0KLSAJCWRhdGErPXNpemU7CQkKLSAJCX0KLSAK LUBAIC0xMDM1LDYgKzExMjYsMTMgQEAgaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb190bHNleHQo U1NMICpzLAotIAkJcmV0dXJuIDA7Ci0gCQl9Ci0gCi0rCWlmICghcmVuZWdvdGlhdGVfc2Vlbgot KwkJJiYgIShzLT5jdHgtPm9wdGlvbnMgJiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5F R09USUFUSU9OKSkKLSsJCXsKLSsJCSphbCA9IFNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsgLyog aXMgdGhpcyB0aGUgcmlnaHQgYWxlcnQ/ICovCi0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSAJaWYg KCFzLT5oaXQgJiYgdGxzZXh0X3NlcnZlcm5hbWUgPT0gMSkKLSAJCXsKLSAgCQlpZiAocy0+dGxz ZXh0X2hvc3RuYW1lKQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtdGxzLWNvbXAu cGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LXRscy1jb21wLnBhdGNoCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCBkNWMyNWM1Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0 YTQtdGxzLWNvbXAucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2Vyci5jLnRscy1jb21wIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3NzbF9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9l cnIuYy50bHMtY29tcAkyMDEwLTAxLTA3IDE4OjQ1OjQ2LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9lcnIuYwkyMDEwLTAxLTA3IDIyOjQ2OjEwLjAwMDAw MDAwMCArMDEwMAotQEAgLTMyOSw2ICszMjksNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFNT TF9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04oU1NMX1JfQ0lQSEVSX1RBQkxFX1NSQ19FUlJP UiksImNpcGhlciB0YWJsZSBzcmMgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9DTElFTlRI RUxMT19UTFNFWFQpICAgICwiY2xpZW50aGVsbG8gdGxzZXh0In0sCi0ge0VSUl9SRUFTT04oU1NM X1JfQ09NUFJFU1NFRF9MRU5HVEhfVE9PX0xPTkcpLCJjb21wcmVzc2VkIGxlbmd0aCB0b28gbG9u ZyJ9LAotK3tFUlJfUkVBU09OKFNTTF9SX0NPTVBSRVNTSU9OX0RJU0FCTEVEKSAgLCJjb21wcmVz c2lvbiBkaXNhYmxlZCJ9LAotIHtFUlJfUkVBU09OKFNTTF9SX0NPTVBSRVNTSU9OX0ZBSUxVUkUp ICAgLCJjb21wcmVzc2lvbiBmYWlsdXJlIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfQ09NUFJFU1NJ T05fSURfTk9UX1dJVEhJTl9QUklWQVRFX1JBTkdFKSwiY29tcHJlc3Npb24gaWQgbm90IHdpdGhp biBwcml2YXRlIHJhbmdlIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfQ09NUFJFU1NJT05fTElCUkFS WV9FUlJPUiksImNvbXByZXNzaW9uIGxpYnJhcnkgZXJyb3IifSwKLUBAIC0zNTcsOCArMzU4LDEw IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgU1NMX3N0cl9yZWFzb25zW10KLSB7RVJSX1JFQVNP TihTU0xfUl9IVFRQU19QUk9YWV9SRVFVRVNUKSAgICwiaHR0cHMgcHJveHkgcmVxdWVzdCJ9LAot IHtFUlJfUkVBU09OKFNTTF9SX0hUVFBfUkVRVUVTVCkgICAgICAgICAgLCJodHRwIHJlcXVlc3Qi fSwKLSB7RVJSX1JFQVNPTihTU0xfUl9JTExFR0FMX1BBRERJTkcpICAgICAgICwiaWxsZWdhbCBw YWRkaW5nIn0sCi0re0VSUl9SRUFTT04oU1NMX1JfSU5DT05TSVNURU5UX0NPTVBSRVNTSU9OKSwi aW5jb25zaXN0ZW50IGNvbXByZXNzaW9uIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfSU5WQUxJRF9D SEFMTEVOR0VfTEVOR1RIKSwiaW52YWxpZCBjaGFsbGVuZ2UgbGVuZ3RoIn0sCi0ge0VSUl9SRUFT T04oU1NMX1JfSU5WQUxJRF9DT01NQU5EKSAgICAgICAsImludmFsaWQgY29tbWFuZCJ9LAotK3tF UlJfUkVBU09OKFNTTF9SX0lOVkFMSURfQ09NUFJFU1NJT05fQUxHT1JJVEhNKSwiaW52YWxpZCBj b21wcmVzc2lvbiBhbGdvcml0aG0ifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9JTlZBTElEX1BVUlBP U0UpICAgICAgICwiaW52YWxpZCBwdXJwb3NlIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfSU5WQUxJ RF9TVEFUVVNfUkVTUE9OU0UpLCJpbnZhbGlkIHN0YXR1cyByZXNwb25zZSJ9LAotIHtFUlJfUkVB U09OKFNTTF9SX0lOVkFMSURfVElDS0VUX0tFWVNfTEVOR1RIKSwiaW52YWxpZCB0aWNrZXQga2V5 cyBsZW5ndGgifSwKLUBAIC00MjEsNiArNDI0LDcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBT U0xfc3RyX3JlYXNvbnNbXQotIHtFUlJfUkVBU09OKFNTTF9SX05VTExfU1NMX0NUWCkgICAgICAg ICAgLCJudWxsIHNzbCBjdHgifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9OVUxMX1NTTF9NRVRIT0Rf UEFTU0VEKSwibnVsbCBzc2wgbWV0aG9kIHBhc3NlZCJ9LAotIHtFUlJfUkVBU09OKFNTTF9SX09M RF9TRVNTSU9OX0NJUEhFUl9OT1RfUkVUVVJORUQpLCJvbGQgc2Vzc2lvbiBjaXBoZXIgbm90IHJl dHVybmVkIn0sCi0re0VSUl9SRUFTT04oU1NMX1JfT0xEX1NFU1NJT05fQ09NUFJFU1NJT05fQUxH T1JJVEhNX05PVF9SRVRVUk5FRCksIm9sZCBzZXNzaW9uIGNvbXByZXNzaW9uIGFsZ29yaXRobSBu b3QgcmV0dXJuZWQifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJ UFNfTU9ERSksIm9ubHkgdGxzIGFsbG93ZWQgaW4gZmlwcyBtb2RlIn0sCi0ge0VSUl9SRUFTT04o U1NMX1JfT1BBUVVFX1BSRl9JTlBVVF9UT09fTE9ORyksIm9wYXF1ZSBQUkYgaW5wdXQgdG9vIGxv bmcifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9QQUNLRVRfTEVOR1RIX1RPT19MT05HKSwicGFja2V0 IGxlbmd0aCB0b28gbG9uZyJ9LAotQEAgLTQ1MSw2ICs0NTUsNyBAQCBzdGF0aWMgRVJSX1NUUklO R19EQVRBIFNTTF9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04oU1NMX1JfUkVORUdPVElBVElP Tl9FTkNPRElOR19FUlIpLCJyZW5lZ290aWF0aW9uIGVuY29kaW5nIGVyciJ9LAotIHtFUlJfUkVB U09OKFNTTF9SX1JFTkVHT1RJQVRJT05fTUlTTUFUQ0gpLCJyZW5lZ290aWF0aW9uIG1pc21hdGNo In0sCi0ge0VSUl9SRUFTT04oU1NMX1JfUkVRVUlSRURfQ0lQSEVSX01JU1NJTkcpLCJyZXF1aXJl ZCBjaXBoZXIgbWlzc2luZyJ9LAotK3tFUlJfUkVBU09OKFNTTF9SX1JFUVVJUkVEX0NPTVBSRVNT U0lPTl9BTEdPUklUSE1fTUlTU0lORyksInJlcXVpcmVkIGNvbXByZXNzc2lvbiBhbGdvcml0aG0g bWlzc2luZyJ9LAotIHtFUlJfUkVBU09OKFNTTF9SX1JFVVNFX0NFUlRfTEVOR1RIX05PVF9aRVJP KSwicmV1c2UgY2VydCBsZW5ndGggbm90IHplcm8ifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9SRVVT RV9DRVJUX1RZUEVfTk9UX1pFUk8pLCJyZXVzZSBjZXJ0IHR5cGUgbm90IHplcm8ifSwKLSB7RVJS X1JFQVNPTihTU0xfUl9SRVVTRV9DSVBIRVJfTElTVF9OT1RfWkVSTyksInJldXNlIGNpcGhlciBs aXN0IG5vdCB6ZXJvIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2wuaC50 bHMtY29tcCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2wuaAotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvc3NsL3NzbC5oLnRscy1jb21wCTIwMTAtMDEtMDcgMTg6NDU6NDYuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsLmgJMjAxMC0wMS0wNyAyMjo0Nzow Ny4wMDAwMDAwMDAgKzAxMDAKLUBAIC00ODUsNyArNDg1LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3Ns X3Nlc3Npb25fc3QKLSAJbG9uZyB0aW1lb3V0OwotIAlsb25nIHRpbWU7Ci0gCi0tCWludCBjb21w cmVzc19tZXRoOwkJLyogTmVlZCB0byBsb29rdXAgdGhlIG1ldGhvZCAqLwotKwl1bnNpZ25lZCBp bnQgY29tcHJlc3NfbWV0aDsJLyogTmVlZCB0byBsb29rdXAgdGhlIG1ldGhvZCAqLwotIAotIAlj b25zdCBTU0xfQ0lQSEVSICpjaXBoZXI7Ci0gCXVuc2lnbmVkIGxvbmcgY2lwaGVyX2lkOwkvKiB3 aGVuIEFTTi4xIGxvYWRlZCwgdGhpcwotQEAgLTIwNTEsNiArMjA1MSw3IEBAIHZvaWQgRVJSX2xv YWRfU1NMX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBTU0xfUl9DSVBIRVJfVEFCTEVfU1JDX0VS Uk9SCQkJIDEzOQotICNkZWZpbmUgU1NMX1JfQ0xJRU5USEVMTE9fVExTRVhUCQkJIDIyNgotICNk ZWZpbmUgU1NMX1JfQ09NUFJFU1NFRF9MRU5HVEhfVE9PX0xPTkcJCSAxNDAKLSsjZGVmaW5lIFNT TF9SX0NPTVBSRVNTSU9OX0RJU0FCTEVECQkJIDM0MwotICNkZWZpbmUgU1NMX1JfQ09NUFJFU1NJ T05fRkFJTFVSRQkJCSAxNDEKLSAjZGVmaW5lIFNTTF9SX0NPTVBSRVNTSU9OX0lEX05PVF9XSVRI SU5fUFJJVkFURV9SQU5HRQkgMzA3Ci0gI2RlZmluZSBTU0xfUl9DT01QUkVTU0lPTl9MSUJSQVJZ X0VSUk9SCQkJIDE0MgotQEAgLTIwNzksOCArMjA4MCwxMCBAQCB2b2lkIEVSUl9sb2FkX1NTTF9z dHJpbmdzKHZvaWQpOwotICNkZWZpbmUgU1NMX1JfSFRUUFNfUFJPWFlfUkVRVUVTVAkJCSAxNTUK LSAjZGVmaW5lIFNTTF9SX0hUVFBfUkVRVUVTVAkJCQkgMTU2Ci0gI2RlZmluZSBTU0xfUl9JTExF R0FMX1BBRERJTkcJCQkJIDI4MwotKyNkZWZpbmUgU1NMX1JfSU5DT05TSVNURU5UX0NPTVBSRVNT SU9OCQkJIDM0MAotICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9DSEFMTEVOR0VfTEVOR1RICQkJIDE1 OAotICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9DT01NQU5ECQkJCSAyODAKLSsjZGVmaW5lIFNTTF9S X0lOVkFMSURfQ09NUFJFU1NJT05fQUxHT1JJVEhNCQkgMzQxCi0gI2RlZmluZSBTU0xfUl9JTlZB TElEX1BVUlBPU0UJCQkJIDI3OAotICNkZWZpbmUgU1NMX1JfSU5WQUxJRF9TVEFUVVNfUkVTUE9O U0UJCQkgMzI4Ci0gI2RlZmluZSBTU0xfUl9JTlZBTElEX1RJQ0tFVF9LRVlTX0xFTkdUSAkJIDMy NQotQEAgLTIxNDMsNiArMjE0Niw3IEBAIHZvaWQgRVJSX2xvYWRfU1NMX3N0cmluZ3Modm9pZCk7 Ci0gI2RlZmluZSBTU0xfUl9OVUxMX1NTTF9DVFgJCQkJIDE5NQotICNkZWZpbmUgU1NMX1JfTlVM TF9TU0xfTUVUSE9EX1BBU1NFRAkJCSAxOTYKLSAjZGVmaW5lIFNTTF9SX09MRF9TRVNTSU9OX0NJ UEhFUl9OT1RfUkVUVVJORUQJCSAxOTcKLSsjZGVmaW5lIFNTTF9SX09MRF9TRVNTSU9OX0NPTVBS RVNTSU9OX0FMR09SSVRITV9OT1RfUkVUVVJORUQgMzQ0Ci0gI2RlZmluZSBTU0xfUl9PTkxZX1RM U19BTExPV0VEX0lOX0ZJUFNfTU9ERQkJIDI5NwotICNkZWZpbmUgU1NMX1JfT1BBUVVFX1BSRl9J TlBVVF9UT09fTE9ORwkJCSAzMjcKLSAjZGVmaW5lIFNTTF9SX1BBQ0tFVF9MRU5HVEhfVE9PX0xP TkcJCQkgMTk4Ci1AQCAtMjE3Myw2ICsyMTc3LDcgQEAgdm9pZCBFUlJfbG9hZF9TU0xfc3RyaW5n cyh2b2lkKTsKLSAjZGVmaW5lIFNTTF9SX1JFTkVHT1RJQVRJT05fRU5DT0RJTkdfRVJSCQkgMzM2 Ci0gI2RlZmluZSBTU0xfUl9SRU5FR09USUFUSU9OX01JU01BVENICQkJIDMzNwotICNkZWZpbmUg U1NMX1JfUkVRVUlSRURfQ0lQSEVSX01JU1NJTkcJCQkgMjE1Ci0rI2RlZmluZSBTU0xfUl9SRVFV SVJFRF9DT01QUkVTU1NJT05fQUxHT1JJVEhNX01JU1NJTkcJIDM0MgotICNkZWZpbmUgU1NMX1Jf UkVVU0VfQ0VSVF9MRU5HVEhfTk9UX1pFUk8JCSAyMTYKLSAjZGVmaW5lIFNTTF9SX1JFVVNFX0NF UlRfVFlQRV9OT1RfWkVSTwkJCSAyMTcKLSAjZGVmaW5lIFNTTF9SX1JFVVNFX0NJUEhFUl9MSVNU X05PVF9aRVJPCQkgMjE4Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19jbG50 LmMudGxzLWNvbXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5jLnRscy1jb21wCTIwMTAtMDEtMDcgMTc6NTM6MTIu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5jCTIw MTAtMDEtMDcgMjI6NDc6MDcuMDAwMDAwMDAwICswMTAwCi1AQCAtODk1LDEwICs4OTUsMzEgQEAg aW50IHNzbDNfZ2V0X3NlcnZlcl9oZWxsbyhTU0wgKnMpCi0gCQlTU0xlcnIoU1NMX0ZfU1NMM19H RVRfU0VSVkVSX0hFTExPLFNTTF9SX1VOU1VQUE9SVEVEX0NPTVBSRVNTSU9OX0FMR09SSVRITSk7 Ci0gCQlnb3RvIGZfZXJyOwotIAkJfQotKwkvKiBJZiBjb21wcmVzc2lvbiBpcyBkaXNhYmxlZCB3 ZSdkIGJldHRlciBub3QgdHJ5IHRvIHJlc3VtZSBhIHNlc3Npb24KLSsJICogdXNpbmcgY29tcHJl c3Npb24uCi0rCSAqLwotKwlpZiAocy0+c2Vzc2lvbi0+Y29tcHJlc3NfbWV0aCAhPSAwKQotKwkJ ewotKwkJYWw9U1NMX0FEX0lOVEVSTkFMX0VSUk9SOwotKwkJU1NMZXJyKFNTTF9GX1NTTDNfR0VU X1NFUlZFUl9IRUxMTyxTU0xfUl9JTkNPTlNJU1RFTlRfQ09NUFJFU1NJT04pOwotKwkJZ290byBm X2VycjsKLSsJCX0KLSAjZWxzZQotIAlqPSAqKHArKyk7Ci0tCWlmICgoaiA9PSAwKSB8fCAocy0+ b3B0aW9ucyAmIFNTTF9PUF9OT19DT01QUkVTU0lPTikpCi0rCWlmIChzLT5oaXQgJiYgaiAhPSBz LT5zZXNzaW9uLT5jb21wcmVzc19tZXRoKQotKwkJewotKwkJYWw9U1NMX0FEX0lMTEVHQUxfUEFS QU1FVEVSOwotKwkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX1NFUlZFUl9IRUxMTyxTU0xfUl9PTERf U0VTU0lPTl9DT01QUkVTU0lPTl9BTEdPUklUSE1fTk9UX1JFVFVSTkVEKTsKLSsJCWdvdG8gZl9l cnI7Ci0rCQl9Ci0rCWlmIChqID09IDApCi0gCQljb21wPU5VTEw7Ci0rCWVsc2UgaWYgKHMtPm9w dGlvbnMgJiBTU0xfT1BfTk9fQ09NUFJFU1NJT04pCi0rCQl7Ci0rCQlhbD1TU0xfQURfSUxMRUdB TF9QQVJBTUVURVI7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfU0VSVkVSX0hFTExPLFNTTF9S X0NPTVBSRVNTSU9OX0RJU0FCTEVEKTsKLSsJCWdvdG8gZl9lcnI7Ci0rCQl9Ci0gCWVsc2UKLSAJ CWNvbXA9c3NsM19jb21wX2ZpbmQocy0+Y3R4LT5jb21wX21ldGhvZHMsaik7Ci0gCQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfc3J2ci5jLnRscy1jb21wIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3MzX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX3Ny dnIuYy50bHMtY29tcAkyMDEwLTAxLTA3IDE3OjUzOjEyLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX3NydnIuYwkyMDEwLTAxLTA3IDIyOjQ2OjEwLjAwMDAw MDAwMCArMDEwMAotQEAgLTEwODgsNyArMTA4OCw1MCBAQCBpbnQgc3NsM19nZXRfY2xpZW50X2hl bGxvKFNTTCAqcykKLSAJICogYWxnb3JpdGhtcyBmcm9tIHRoZSBjbGllbnQsIHN0YXJ0aW5nIGF0 IHEuICovCi0gCXMtPnMzLT50bXAubmV3X2NvbXByZXNzaW9uPU5VTEw7Ci0gI2lmbmRlZiBPUEVO U1NMX05PX0NPTVAKLS0JaWYgKCEocy0+b3B0aW9ucyAmIFNTTF9PUF9OT19DT01QUkVTU0lPTikg JiYgcy0+Y3R4LT5jb21wX21ldGhvZHMpCi0rCS8qIFRoaXMgb25seSBoYXBwZW5zIGlmIHdlIGhh dmUgYSBjYWNoZSBoaXQgKi8KLSsJaWYgKHMtPnNlc3Npb24tPmNvbXByZXNzX21ldGggIT0gMCkK LSsJCXsKLSsJCWludCBtLCBjb21wX2lkID0gcy0+c2Vzc2lvbi0+Y29tcHJlc3NfbWV0aDsKLSsJ CS8qIFBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiByZXN1bWVkIGNvbXByZXNzaW9uIGFsZ29yaXRo bSAqLwotKwkJLyogQ2FuJ3QgZGlzYWJsZSBjb21wcmVzc2lvbiAqLwotKwkJaWYgKHMtPm9wdGlv bnMgJiBTU0xfT1BfTk9fQ09NUFJFU1NJT04pCi0rCQkJewotKwkJCWFsPVNTTF9BRF9JTlRFUk5B TF9FUlJPUjsKLSsJCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0hFTExPLFNTTF9SX0lO Q09OU0lTVEVOVF9DT01QUkVTU0lPTik7Ci0rCQkJZ290byBmX2VycjsKLSsJCQl9Ci0rCQkvKiBM b29rIGZvciByZXN1bWVkIGNvbXByZXNzaW9uIG1ldGhvZCAqLwotKwkJZm9yIChtID0gMDsgbSA8 IHNrX1NTTF9DT01QX251bShzLT5jdHgtPmNvbXBfbWV0aG9kcyk7IG0rKykKLSsJCQl7Ci0rCQkJ Y29tcD1za19TU0xfQ09NUF92YWx1ZShzLT5jdHgtPmNvbXBfbWV0aG9kcyxtKTsKLSsJCQlpZiAo Y29tcF9pZCA9PSBjb21wLT5pZCkKLSsJCQkJewotKwkJCQlzLT5zMy0+dG1wLm5ld19jb21wcmVz c2lvbj1jb21wOwotKwkJCQlicmVhazsKLSsJCQkJfQotKwkJCX0KLSsJCWlmIChzLT5zMy0+dG1w Lm5ld19jb21wcmVzc2lvbiA9PSBOVUxMKQotKwkJCXsKLSsJCQlhbD1TU0xfQURfSU5URVJOQUxf RVJST1I7Ci0rCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9IRUxMTyxTU0xfUl9JTlZB TElEX0NPTVBSRVNTSU9OX0FMR09SSVRITSk7Ci0rCQkJZ290byBmX2VycjsKLSsJCQl9Ci0rCQkv KiBMb29rIGZvciByZXN1bWVkIG1ldGhvZCBpbiBjb21wcmVzc2lvbiBsaXN0ICovCi0rCQlmb3Ig KG0gPSAwOyBtIDwgaTsgbSsrKQotKwkJCXsKLSsJCQlpZiAocVttXSA9PSBjb21wX2lkKQotKwkJ CQlicmVhazsKLSsJCQl9Ci0rCQlpZiAobSA+PSBpKQotKwkJCXsKLSsJCQlhbD1TU0xfQURfSUxM RUdBTF9QQVJBTUVURVI7Ci0rCQkJU1NMZXJyKFNTTF9GX1NTTDNfR0VUX0NMSUVOVF9IRUxMTyxT U0xfUl9SRVFVSVJFRF9DT01QUkVTU1NJT05fQUxHT1JJVEhNX01JU1NJTkcpOwotKwkJCWdvdG8g Zl9lcnI7Ci0rCQkJfQotKwkJfQotKwllbHNlIGlmIChzLT5oaXQpCi0rCQljb21wID0gTlVMTDsK LSsJZWxzZSBpZiAoIShzLT5vcHRpb25zICYgU1NMX09QX05PX0NPTVBSRVNTSU9OKSAmJiBzLT5j dHgtPmNvbXBfbWV0aG9kcykKLSAJCXsgLyogU2VlIGlmIHdlIGhhdmUgYSBtYXRjaCAqLwotIAkJ aW50IG0sbm4sbyx2LGRvbmU9MDsKLSAKLUBAIC0xMTEyLDYgKzExNTUsMTYgQEAgaW50IHNzbDNf Z2V0X2NsaWVudF9oZWxsbyhTU0wgKnMpCi0gCQllbHNlCi0gCQkJY29tcD1OVUxMOwotIAkJfQot KyNlbHNlCi0rCS8qIElmIGNvbXByZXNzaW9uIGlzIGRpc2FibGVkIHdlJ2QgYmV0dGVyIG5vdCB0 cnkgdG8gcmVzdW1lIGEgc2Vzc2lvbgotKwkgKiB1c2luZyBjb21wcmVzc2lvbi4KLSsJICovCi0r CWlmIChzLT5zZXNzaW9uLT5jb21wcmVzc19tZXRoICE9IDApCi0rCQl7Ci0rCQlhbD1TU0xfQURf SU5URVJOQUxfRVJST1I7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMM19HRVRfQ0xJRU5UX0hFTExPLFNT TF9SX0lOQ09OU0lTVEVOVF9DT01QUkVTU0lPTik7Ci0rCQlnb3RvIGZfZXJyOwotKwkJfQotICNl bmRpZgotIAotIAkvKiBHaXZlbiBzLT5zZXNzaW9uLT5jaXBoZXJzIGFuZCBTU0xfZ2V0X2NpcGhl cnMsIHdlIG11c3QKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LXRsc3Zlci5wYXRj aCBiL29wZW5zc2wtMS4wLjAtYmV0YTQtdGxzdmVyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA4ODI4MmY5Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtdGxz dmVyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotRml4IGhhbmRsaW5nIG9m IGZ1dHVyZSBUTFMgdmVyc2lvbnMuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9z MjNfc3J2ci5jLnRsc3ZlciBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfc3J2ci5jCi0tLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX3NydnIuYy50bHN2ZXIJMjAxMC0wMS0xMiAyMjoy MDoxNS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfc3J2 ci5jCTIwMTAtMDEtMTMgMjI6MDI6NDcuMDAwMDAwMDAwICswMTAwCi1AQCAtMzE1LDcgKzMxNSw3 IEBAIGludCBzc2wyM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcykKLSAJCQkgKHBbMV0gPT0gU1NM M19WRVJTSU9OX01BSk9SKSAmJgotIAkJCSAocFs1XSA9PSBTU0wzX01UX0NMSUVOVF9IRUxMTykg JiYKLSAJCQkgKChwWzNdID09IDAgJiYgcFs0XSA8IDUgLyogc2lsbHkgcmVjb3JkIGxlbmd0aD8g Ki8pCi0tCQkJCXx8IChwWzldID09IHBbMV0pKSkKLSsJCQkJfHwgKHBbOV0gPj0gcFsxXSkpKQot IAkJCXsKLSAJCQkvKgotIAkJCSAqIFNTTHYzIG9yIHRsczEgaGVhZGVyCi1AQCAtMzM5LDYgKzMz OSwxMyBAQCBpbnQgc3NsMjNfZ2V0X2NsaWVudF9oZWxsbyhTU0wgKnMpCi0gCQkJCXZbMV0gPSBU TFMxX1ZFUlNJT05fTUlOT1I7Ci0gI2VuZGlmCi0gCQkJCX0KLSsJCQkvKiBpZiBtYWpvciB2ZXJz aW9uIG51bWJlciA+IDMgc2V0IG1pbm9yIHRvIGEgdmFsdWUKLSsJCQkgKiB3aGljaCB3aWxsIHVz ZSB0aGUgaGlnaGVzdCB2ZXJzaW9uIDMgd2Ugc3VwcG9ydC4KLSsJCQkgKiBJZiBUTFMgMi4wIGV2 ZXIgYXBwZWFycyB3ZSB3aWxsIG5lZWQgdG8gcmV2aXNlCi0rCQkJICogdGhpcy4uLi4KLSsJCQkg Ki8KLSsJCQllbHNlIGlmIChwWzldID4gU1NMM19WRVJTSU9OX01BSk9SKQotKwkJCQl2WzFdPTB4 ZmY7Ci0gCQkJZWxzZQotIAkJCQl2WzFdPXBbMTBdOyAvKiBtaW5vciB2ZXJzaW9uIGFjY29yZGlu ZyB0byBjbGllbnRfdmVyc2lvbiAqLwotIAkJCWlmICh2WzFdID49IFRMUzFfVkVSU0lPTl9NSU5P UikKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LXZlcnNpb24ucGF0Y2ggYi9vcGVu c3NsLTEuMC4wLWJldGE0LXZlcnNpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IGFiMTJiZTAuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhNC12ZXJzaW9uLnBh dGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotV2UgaGF2ZSB0byBrZWVwIHRoZSBi ZXRhIHN0YXR1cyBvbiAzIGFzIHNvbWUgYXBwbGljYXRpb25zIChPcGVuU1NIKSBpbmNvcnJlY3Rs eSBpbnNpc3QKLW9uIGhhdmluZyB0aGUgc2FtZSBiZXRhIHN0YXR1cyBvZiBPcGVuU1NMIGxpYnJh cnkgYXMgdGhleSB3ZXJlIGJ1aWx0IGFnYWluc3QuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v b3BlbnNzbHYuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL29wZW5zc2x2LmgudmVy c2lvbgkyMDA5LTExLTEyIDE1OjE3OjI4LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL29wZW5zc2x2LmgJMjAwOS0xMS0xMyAxMjozOTowOC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0yNSw3ICsyNSw3IEBACi0gICogKFByaW9yIHRvIDAuOS41YSBiZXRhMSwgYSBk aWZmZXJlbnQgc2NoZW1lIHdhcyB1c2VkOiBNTU5ORkZSQkIgZm9yCi0gICogIG1ham9yIG1pbm9y IGZpeCBmaW5hbCBwYXRjaC9iZXRhKQotICAqLwotLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05V TUJFUgkweDEwMDAwMDA0TAotKyNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAw MDAzTAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhU CSJPcGVuU1NMIDEuMC4wLWZpcHMtYmV0YTQgMTAgTm92IDIwMDkiCi0gI2Vsc2UKCmRpZmYgLS1n aXQgYS9vcGVuc3NsLTEuMC4wLWJldGE1LWNpcGhlci1jaGFuZ2UucGF0Y2ggYi9vcGVuc3NsLTEu MC4wLWJldGE1LWNpcGhlci1jaGFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMmU4MzQzYgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjAtYmV0YTUt Y2lwaGVyLWNoYW5nZS5wYXRjaApAQCAtMCwwICsxLDIxIEBACitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE1L3NzbC9zc2wuaC5jaXBoZXItY2hhbmdlIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3Ns L3NzbC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvc3NsLmguY2lwaGVyLWNoYW5nZQky MDEwLTAxLTIwIDE4OjEyOjA3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTUvc3NsL3NzbC5oCTIwMTAtMDEtMjAgMTg6MTM6MDQuMDAwMDAwMDAwICswMTAwCitAQCAtNTEz LDcgKzUxMyw3IEBAIHR5cGVkZWYgc3RydWN0IHNzbF9zZXNzaW9uX3N0CisgI2RlZmluZSBTU0xf T1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRwkJCTB4MDAwMDAwMDJMCisgLyogQWxsb3cgaW5pdGlh bCBjb25uZWN0aW9uIHRvIHNlcnZlcnMgdGhhdCBkb24ndCBzdXBwb3J0IFJJICovCisgI2RlZmlu ZSBTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUCQkJMHgwMDAwMDAwNEwKKy0jZGVmaW5lIFNT TF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRwkJMHgwMDAwMDAwOEwKKysjZGVm aW5lIFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRwkJMHgwMDAwMDAwOEwg LyogY2FuIGJyZWFrIHNvbWUgc2VjdXJpdHkgZXhwZWN0YXRpb25zICovCisgI2RlZmluZSBTU0xf T1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHCQkweDAwMDAwMDEwTAorICNkZWZpbmUgU1NM X09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSCQkweDAwMDAwMDIwTAorICNkZWZpbmUgU1NM X09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkcJCQkweDAwMDAwMDQwTCAvKiBubyBlZmZlY3Qgc2lu Y2UgMC45LjdoIGFuZCAwLjkuOGIgKi8KK0BAIC01MzAsNyArNTMwLDcgQEAgdHlwZWRlZiBzdHJ1 Y3Qgc3NsX3Nlc3Npb25fc3QKKyAKKyAvKiBTU0xfT1BfQUxMOiB2YXJpb3VzIGJ1ZyB3b3JrYXJv dW5kcyB0aGF0IHNob3VsZCBiZSByYXRoZXIgaGFybWxlc3MuCisgICogICAgICAgICAgICAgVGhp cyB1c2VkIHRvIGJlIDB4MDAwRkZGRkZMIGJlZm9yZSAwLjkuNy4gKi8KKy0jZGVmaW5lIFNTTF9P UF9BTEwJCQkJCTB4ODAwMDBGRkZMCisrI2RlZmluZSBTU0xfT1BfQUxMCQkJCQkweDgwMDAwRkY3 TAorIAorIC8qIERUTFMgb3B0aW9ucyAqLworICNkZWZpbmUgU1NMX09QX05PX1FVRVJZX01UVSAg ICAgICAgICAgICAgICAgMHgwMDAwMTAwMEwKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJl dGE1LWVuZ2luZXNkaXIucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE1LWVuZ2luZXNkaXIucGF0 Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk0MmQ2ZQotLS0gL2Rldi9u dWxsCisrKyBiL29wZW5zc2wtMS4wLjAtYmV0YTUtZW5naW5lc2Rpci5wYXRjaApAQCAtMCwwICsx LDUyIEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L0NvbmZpZ3VyZS5lbmdpbmVzZGly IG9wZW5zc2wtMS4wLjAtYmV0YTUvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9D b25maWd1cmUuZW5naW5lc2RpcgkyMDEwLTAxLTIwIDE4OjA3OjA1LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvQ29uZmlndXJlCTIwMTAtMDEtMjAgMTg6MTA6NDguMDAw MDAwMDAwICswMTAwCitAQCAtNjIyLDYgKzYyMiw3IEBAIG15ICRpZHhfbXVsdGlsaWIgPSAkaWR4 Kys7CisgbXkgJHByZWZpeD0iIjsKKyBteSAkbGliZGlyPSIiOworIG15ICRvcGVuc3NsZGlyPSIi OworK215ICRlbmdpbmVzZGlyPSIiOworIG15ICRleGVfZXh0PSIiOworIG15ICRpbnN0YWxsX3By ZWZpeD0gIiRFTlZ7J0lOU1RBTExfUFJFRklYJ30iOworIG15ICRjcm9zc19jb21waWxlX3ByZWZp eD0iIjsKK0BAIC04MzMsNiArODM0LDEwIEBAIFBST0NFU1NfQVJHUzoKKyAJCQkJeworIAkJCQkk b3BlbnNzbGRpcj0kMTsKKyAJCQkJfQorKwkJCWVsc2lmICgvXi0tZW5naW5lc2Rpcj0oLiopJC8p CisrCQkJCXsKKysJCQkJJGVuZ2luZXNkaXI9JDE7CisrCQkJCX0KKyAJCQllbHNpZiAoL14tLWlu c3RhbGwucHJlZml4PSguKikkLykKKyAJCQkJeworIAkJCQkkaW5zdGFsbF9wcmVmaXg9JDE7CitA QCAtMTA1Myw3ICsxMDU4LDcgQEAgY2hvcCAkcHJlZml4IGlmICRwcmVmaXggPX4gLy5cLyQvOwor IAorICRvcGVuc3NsZGlyPSRwcmVmaXggLiAiL3NzbCIgaWYgJG9wZW5zc2xkaXIgZXEgIiI7Cisg JG9wZW5zc2xkaXI9JHByZWZpeCAuICIvIiAuICRvcGVuc3NsZGlyIGlmICRvcGVuc3NsZGlyICF+ IC8oXlwvfF5bYS16QS1aXTpbXFxcL10pLzsKKy0KKyskZW5naW5lc2Rpcj0iJHByZWZpeC9saWIv ZW5naW5lcyIgaWYgJGVuZ2luZXNkaXIgZXEgIiI7CisgCisgcHJpbnQgIklzTUsxTUY9JElzTUsx TUZcbiI7CisgCitAQCAtMTY3Myw3ICsxNjc4LDcgQEAgd2hpbGUgKDxJTj4pCisgCQl9CisgCWVs c2lmCSgvXiNkZWZpbmVccytFTkdJTkVTRElSLykKKyAJCXsKKy0JCW15ICRmb28gPSAiJHByZWZp eC8kbGliZGlyL2VuZ2luZXMiOworKwkJbXkgJGZvbyA9ICIkZW5naW5lc2RpciI7CisgCQkkZm9v ID1+IHMvXFwvXFxcXC9nOworIAkJcHJpbnQgT1VUICIjZGVmaW5lIEVOR0lORVNESVIgXCIkZm9v XCJcbiI7CisgCQl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2VuZ2luZXMvTWFrZWZp bGUuZW5naW5lc2RpciBvcGVuc3NsLTEuMC4wLWJldGE1L2VuZ2luZXMvTWFrZWZpbGUKKy0tLSBv cGVuc3NsLTEuMC4wLWJldGE1L2VuZ2luZXMvTWFrZWZpbGUuZW5naW5lc2RpcgkyMDEwLTAxLTE2 IDIxOjA2OjA5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvZW5naW5l cy9NYWtlZmlsZQkyMDEwLTAxLTIwIDE4OjA3OjA1LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyNCw3 ICsxMjQsNyBAQCBpbnN0YWxsOgorIAkJCQlzZng9Ii5zbyI7IFwKKyAJCQkJY3AgY3lnJCRsLmRs bCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngk JGwkJHNmeC5uZXc7IFwKKyAJCQkgIGZpOyBcCistCQkJICBjaG1vZCA1NTUgJChJTlNUQUxMX1BS RUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBc CisrCQkJICBjaG1vZCA3NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElS KS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBtdiAtZiAkKElOU1RBTExfUFJF RklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXcgJChJ TlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRz ZnggKTsgXAorIAkJZG9uZTsgXAorIAlmaQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0 YTUtZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTUtZmlwcy5wYXRjaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA1NDJkCi0tLSAvZGV2L251bGwKKysrIGIvb3Bl bnNzbC0xLjAuMC1iZXRhNS1maXBzLnBhdGNoCkBAIC0wLDAgKzEsMTIwNzAgQEAKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9D b25maWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L0NvbmZpZ3VyZS5maXBzCTIwMTAtMDEt MjAgMTg6MTM6NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9Db25m aWd1cmUJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC02NjAsNiArNjYw LDcgQEAgbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbAorIG15ICRwcm9j ZXNzb3I9IiI7CisgbXkgJGRlZmF1bHRfcmFubGliOworIG15ICRwZXJsOworK215ICRmaXBzPTA7 CisgCisgCisgIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChS QzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKK0BAIC04MDYsNiArODA3LDEwIEBAIFBST0NF U1NfQVJHUzoKKyAJCQl9CisgCQllbHNpZiAoL14zODYkLykKKyAJCQl7ICRwcm9jZXNzb3I9Mzg2 OyB9CisrCQllbHNpZiAoL15maXBzJC8pCisrCQkJeworKwkJCSRmaXBzPTE7CisrCQkgICAgICAg IH0KKyAJCWVsc2lmICgvXnJzYXJlZiQvKQorIAkJCXsKKyAJCQkjIE5vIFJTQXJlZiBzdXBwb3J0 IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KK0BAIC0xMzY4LDYgKzEzNzMsMTEgQEAg JGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRubworIAorICRjZmxhZ3MuPSIg LURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvLW1vbnQvKTsKKyAKKytpZiAo JGZpcHMpCisrCXsKKysJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9G SVBTXG4iOworKwl9CisrCisgJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9v YmogPX4gL1wubyQvKTsKKyAkZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9c Lm8kLyk7CisgJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKK0BA IC0xNTM1LDYgKzE1NDUsMTAgQEAgd2hpbGUgKDxJTj4pCisgCXMvXkxJQktSQjU9LiovTElCS1JC NT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOworIAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdpdGhh cmdzeyJ6bGliLWxpYiJ9LzsKKyAJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0 aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKKysJaWYgKCRmaXBzKQorKwkJeworKwkJcy9eRklQUz0u Ki9GSVBTPXllcy87CisrCQl9CisgCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNo YXJlZF90YXJnZXQvOworIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJr LzsKKyAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQo U0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9i Zi9iZl9za2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9iZi9iZl9za2V5LmMu ZmlwcwkyMDA4LTExLTEyIDA0OjU3OjUyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2JmL2JmX3NrZXkuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAw MCArMDEwMAorQEAgLTU5LDEwICs1OSwxNSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNs dWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9ibG93ZmlzaC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgImJmX2xvY2wuaCIKKyAjaW5jbHVk ZSAiYmZfcGkuaCIKKyAKKy12b2lkIEJGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQkYp CisgCXsKKyAJaW50IGk7CisgCUJGX0xPTkcgKnAscmksaW5bMl07CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9iZi9ibG93ZmlzaC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vYmYvYmxvd2Zpc2guaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Jm L2Jsb3dmaXNoLmguZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ1LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JmL2Jsb3dmaXNoLmgJMjAxMC0wMS0yMCAxODox Mzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDQsNyArMTA0LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg YmZfa2V5X3N0CisgCUJGX0xPTkcgU1s0KjI1Nl07CisgCX0gQkZfS0VZOworIAorLSAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTIAorK3ZvaWQgcHJpdmF0ZV9CRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBp bnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lkIEJGX3Nl dF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwor IAorIHZvaWQgQkZfZW5jcnlwdChCRl9MT05HICpkYXRhLGNvbnN0IEJGX0tFWSAqa2V5KTsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL2JuLmguZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9ibi9ibi5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v Ym4vYm4uaC5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vYm4vYm4uaAkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAw MDAwMCArMDEwMAorQEAgLTU0MCw2ICs1NDAsMTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNvbnN0 IEJJR05VTSAqcCxpbnQgbgorIGludAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdO VU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAqY3R4LAorIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9u LCBCTl9HRU5DQiAqY2IpOworIAorK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhw LCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KTsKKysKKytpbnQgQk5fWDkzMV9k ZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorKwkJCWNv bnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKKysJ CQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpOworK2ludCBCTl9Y OTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwK KysJCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCisrCQkJY29uc3QgQklHTlVNICpYcCwKKysJ CQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LAorKwkJCUJOX0dFTkNCICpjYik7CisrCisg Qk5fTU9OVF9DVFggKkJOX01PTlRfQ1RYX25ldyh2b2lkICk7Cisgdm9pZCBCTl9NT05UX0NUWF9p bml0KEJOX01PTlRfQ1RYICpjdHgpOworIGludCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVN ICpyLGNvbnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9ibi9ibl94OTMxcC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vYm4vYm5feDkzMXAuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL2Ju X3g5MzFwLmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAxMC0wMS0yMCAxODoxMzo0 Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMjcyIEBACisrLyogYm5feDkzMXAuYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSku ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrLyogWDkuMzEgcm91dGluZXMgZm9yIHBy aW1lIGRlcml2YXRpb24gKi8KKysKKysvKiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uLiBUaGlzIGlz IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQorKyAqIChwMSwgcDIsIHExLCBxMikgZnJv bSBhIHBhcmFtZXRlciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBvZGQKKysgKiBpbnRlZ2Vy cy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJuX3g5MzFfZGVyaXZlX3BpKEJJR05VTSAqcGksIGNv bnN0IEJJR05VTSAqWHBpLCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpCisrCXsKKysJ aW50IGkgPSAwOworKwlpZiAoIUJOX2NvcHkocGksIFhwaSkpCisrCQlyZXR1cm4gMDsKKysJaWYg KCFCTl9pc19vZGQocGkpICYmICFCTl9hZGRfd29yZChwaSwgMSkpCisrCQlyZXR1cm4gMDsKKysJ Zm9yKDs7KQorKwkJeworKwkJaSsrOworKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSk7CisrCQkv KiBOQiAyNyBNUiBpcyBzcGVjaWZpY2VkIGluIFg5LjMxICovCisrCQlpZiAoQk5faXNfcHJpbWVf ZmFzdHRlc3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsKKysJCWlmICghQk5f YWRkX3dvcmQocGksIDIpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlCTl9HRU5DQl9jYWxsKGNi LCAyLCBpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBUaGlzIGlzIHRoZSBtYWluIFg5LjMx IHByaW1lIGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVycworKyAqIFhwMSwgWHAy IGFuZCBYcCBkZXJpdmUgdGhlIHByaW1lIHAuIElmIHRoZSBwYXJhbWV0ZXJzIHAxIG9yIHAyIGFy ZQorKyAqIG5vdCBOVUxMIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0b286IHRoaXMgaXMgbmVlZGVk IGZvciB0ZXN0aW5nLgorKyAqLworKworK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdO VU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJY29uc3QgQklHTlVNICpYcCwgY29u c3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgcmV0ID0gMDsKKysKKysJQklH TlVNICp0LCAqcDFwMiwgKnBtMTsKKysKKysJLyogT25seSBldmVuIGUgc3VwcG9ydGVkICovCisr CWlmICghQk5faXNfb2RkKGUpKQorKwkJcmV0dXJuIDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgp OworKwlpZiAoIXAxKQorKwkJcDEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmICghcDIpCisr CQlwMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJdCA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJ cDFwMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJcG0xID0gQk5fQ1RYX2dldChjdHgpOworKwor KwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2IpKQorKwkJZ290byBlcnI7 CisrCisrCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4LCBjYikpCisrCQlnb3Rv IGVycjsKKysKKysJaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7 CisrCisrCS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCisrCisrCWlmICghQk5fbW9k X2ludmVyc2UocCwgcDIsIHAxLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVs KHAsIHAsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbW9kX2ludmVyc2Uo dCwgcDEsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVsKHQsIHQsIHAx LCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fc3ViKHAsIHAsIHQpKQorKwkJZ290 byBlcnI7CisrCisrCWlmIChwLT5uZWcgJiYgIUJOX2FkZChwLCBwLCBwMXAyKSkKKysJCWdvdG8g ZXJyOworKworKwkvKiBwIG5vdyBlcXVhbHMgUnAgKi8KKysKKysJaWYgKCFCTl9tb2Rfc3ViKHAs IHAsIFhwLCBwMXAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fYWRkKHAsIHAs IFhwKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBwIG5vdyBlcXVhbHMgWXAwICovCisrCisrCWZv ciAoOzspCisrCQl7CisrCQlpbnQgaSA9IDE7CisrCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKysp OworKwkJaWYgKCFCTl9jb3B5KHBtMSwgcCkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX3N1 Yl93b3JkKHBtMSwgMSkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX2djZCh0LCBwbTEsIGUs IGN0eCkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoQk5faXNfb25lKHQpCisrCQkvKiBYOS4zMSBz cGVjaWZpZXMgOCBNUiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFueSBwcmltZSB0ZXN0CisrCQkgKiBv ZmZlcmluZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1SIGlzIGNvbnNpZGVyYWJs eSAKKysJCSAqIGJldHRlci4KKysJCSAqLworKwkJCSYmIEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4 KHAsIDUwLCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsKKysJCWlmICghQk5fYWRkKHAsIHAsIHAx cDIpKQorKwkJCWdvdG8gZXJyOworKwkJfQorKworKwlCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKTsK KysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKworKwlCTl9DVFhfZW5kKGN0eCk7CisrCisrCXJl dHVybiByZXQ7CisrCX0KKysKKysvKiBHZW5lcmF0ZSBwYWlyIG9mIHBhcmFtdGVycyBYcCwgWHEg Zm9yIFg5LjMxIHByaW1lIGdlbmVyYXRpb24uCisrICogTm90ZTogbmJpdHMgcGFyYW10ZXIgaXMg c3VtIG9mIG51bWJlciBvZiBiaXRzIGluIGJvdGguCisrICovCisrCisraW50IEJOX1g5MzFfZ2Vu ZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgp CisrCXsKKysJQklHTlVNICp0OworKwlpbnQgaTsKKysJLyogTnVtYmVyIG9mIGJpdHMgZm9yIGVh Y2ggcHJpbWUgaXMgb2YgdGhlIGZvcm0KKysJICogNTEyKzEyOHMgZm9yIHMgPSAwLCAxLCAuLi4K KysJICovCisrCWlmICgobmJpdHMgPCAxMDI0KSB8fCAobmJpdHMgJiAweGZmKSkKKysJCXJldHVy biAwOworKwluYml0cyA+Pj0gMTsKKysJLyogVGhlIHJhbmRvbSB2YWx1ZSBYcCBtdXN0IGJlIGJl dHdlZW4gc3FydCgyKSAqIDJeKG5iaXRzLTEpIGFuZAorKwkgKiAyXm5iaXRzIC0gMS4gQnkgc2V0 dGluZyB0aGUgdG9wIHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBsb3dlcgorKwkgKiBib3Vu ZCBpcyBleGNlZWRlZC4KKysJICovCisrCWlmICghQk5fcmFuZChYcCwgbmJpdHMsIDEsIDApKQor KwkJcmV0dXJuIDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwl0ID0gQk5fQ1RYX2dldChj dHgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorKwkJeworKwkJaWYgKCFCTl9y YW5kKFhxLCBuYml0cywgMSwgMCkpCisrCQkJcmV0dXJuIDA7CisrCQkvKiBDaGVjayB0aGF0IHxY cCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSAqLworKwkJQk5fc3ViKHQsIFhwLCBYcSk7CisrCQlp ZiAoQk5fbnVtX2JpdHModCkgPiAobmJpdHMgLSAxMDApKQorKwkJCWJyZWFrOworKwkJfQorKwor KwlCTl9DVFhfZW5kKGN0eCk7CisrCisrCWlmIChpIDwgMTAwMCkKKysJCXJldHVybiAxOworKwor KwlyZXR1cm4gMDsKKysKKysJfQorKworKy8qIEdlbmVyYXRlIHByaW1lcyB1c2luZyBYOS4zMSBh bGdvcml0aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKKysgKiBhbmQgWHAyIG9ubHkg J3AnIG5lZWRzIHRvIGJlIG5vbi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90aGVycyBhcmUgbm90IE5V TEwKKysgKiB0aGUgcmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwgYmUgc3RvcmVkIGluIGl0LgorKyAq CisrICogRHVlIHRvIHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4obmJpdHMgLSAxMDApIG11 c3QgYmUgc2F0aXNmaWVkIFhwIGFuZCBYcQorKyAqIGFyZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHBy ZXZpb3VzIGZ1bmN0aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1dC4KKysgKi8KKysKKytpbnQgQk5f WDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIs CisrCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAsCisr CQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpCisrCXsK KysJaW50IHJldCA9IDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlpZiAoIVhwMSkKKysJ CVhwMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJaWYgKCFYcDIpCisrCQlYcDIgPSBCTl9DVFhfZ2V0 KGN0eCk7CisrCisrCWlmICghQk5fcmFuZChYcDEsIDEwMSwgMCwgMCkpCisrCQlnb3RvIGVycm9y OworKwlpZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQorKwkJZ290byBlcnJvcjsKKysJaWYg KCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChwLCBwMSwgcDIsIFhwLCBYcDEsIFhwMiwgZSwgY3R4 LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJQk5f Q1RYX2VuZChjdHgpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCitkaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9ibi9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2JuL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vYm4v TWFrZWZpbGUuZmlwcwkyMDA4LTExLTEyIDA5OjE5OjAyLjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL01ha2VmaWxlCTIwMTAtMDEtMjAgMTg6MTM6NDYu MDAwMDAwMDAwICswMTAwCitAQCAtMjYsMTMgKzI2LDEzIEBAIExJQlNSQz0JYm5fYWRkLmMgYm5f ZGl2LmMgYm5fZXhwLmMgYm5fbGkKKyAJYm5fcHJpbnQuYyBibl9yYW5kLmMgYm5fc2hpZnQuYyBi bl93b3JkLmMgYm5fYmxpbmQuYyBcCisgCWJuX2tyb24uYyBibl9zcXJ0LmMgYm5fZ2NkLmMgYm5f cHJpbWUuYyBibl9lcnIuYyBibl9zcXIuYyBibl9hc20uYyBcCisgCWJuX3JlY3AuYyBibl9tb250 LmMgYm5fbXBpLmMgYm5fZXhwMi5jIGJuX2dmMm0uYyBibl9uaXN0LmMgXAorLQlibl9kZXByLmMg Ym5fY29uc3QuYworKwlibl9kZXByLmMgYm5fY29uc3QuYyBibl94OTMxcC5jCisgCisgTElCT0JK PQlibl9hZGQubyBibl9kaXYubyBibl9leHAubyBibl9saWIubyBibl9jdHgubyBibl9tdWwubyBi bl9tb2QubyBcCisgCWJuX3ByaW50Lm8gYm5fcmFuZC5vIGJuX3NoaWZ0Lm8gYm5fd29yZC5vIGJu X2JsaW5kLm8gXAorIAlibl9rcm9uLm8gYm5fc3FydC5vIGJuX2djZC5vIGJuX3ByaW1lLm8gYm5f ZXJyLm8gYm5fc3FyLm8gJChCTl9BU00pIFwKKyAJYm5fcmVjcC5vIGJuX21vbnQubyBibl9tcGku byBibl9leHAyLm8gYm5fZ2YybS5vIGJuX25pc3QubyBcCistCWJuX2RlcHIubyBibl9jb25zdC5v CisrCWJuX2RlcHIubyBibl9jb25zdC5vIGJuX3g5MzFwLm8KKyAKKyBTUkM9ICQoTElCU1JDKQor IAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwt eDg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwt eDg2LnBsCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwt eDg2LnBsLmZpcHMJMjAwOS0wNC0wNiAxNjoyNTowMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYucGwJMjAxMC0wMS0y MCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC03MjIsMTIgKzcyMiwxNSBAQCBteSAkYmlh cz1pbnQoQFRbMF0pP3NoaWZ0KEBUKTowOworIH0KKyAmZnVuY3Rpb25fZW5kKCJDYW1lbGxpYV9F a2V5Z2VuIik7CisgCisrJHNldGtleWZ1bmMgPSAiQ2FtZWxsaWFfc2V0X2tleSI7CisrJHNldGtl eWZ1bmMgPSAicHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7 CisrCisgaWYgKCRPUEVOU1NMKSB7CisgIyBpbnQgQ2FtZWxsaWFfc2V0X2tleSAoCisgIwkJY29u c3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwKKyAjCQlpbnQgYml0cywKKyAjCQlDQU1FTExJQV9L RVkgKmtleSkKKy0mZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxsaWFfc2V0X2tleSIpOworKyZmdW5j dGlvbl9iZWdpbl9CKCRzZXRrZXlmdW5jKTsKKyAJJnB1c2gJKCJlYngiKTsKKyAJJm1vdgkoImVj eCIsJndwYXJhbSgwKSk7CSMgcHVsbCBhcmd1bWVudHMKKyAJJm1vdgkoImVieCIsJndwYXJhbSgx KSk7CitAQCAtNzYwLDcgKzc2Myw3IEBAIGlmICgkT1BFTlNTTCkgeworICZzZXRfbGFiZWwoImRv bmUiLDQpOworIAkmcG9wCSgiZWJ4Iik7CisgCSZyZXQJKCk7CistJmZ1bmN0aW9uX2VuZF9CKCJD YW1lbGxpYV9zZXRfa2V5Iik7CisrJmZ1bmN0aW9uX2VuZF9CKCRzZXRrZXlmdW5jKTsKKyB9Cisg CisgQFNCT1g9KAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEv Y2FtZWxsaWEuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL2NhbWVs bGlhLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5o LmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIwMTAtMDEtMjAgMTg6MTM6NDYu MDAwMDAwMDAwICswMTAwCitAQCAtODgsNiArODgsMTEgQEAgc3RydWN0IGNhbWVsbGlhX2tleV9z dCAKKyAJfTsKKyB0eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgQ0FNRUxMSUFfS0VZOwor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNv bnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9L RVkgKmtleSk7CisrI2VuZGlmCisrCisgaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWdu ZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgCUNBTUVMTElBX0tFWSAqa2V5KTsK KyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJs ay5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBz CTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAw MDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNjggQEAKKysvKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxs aWFfbWlzYy5jIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKi8KKysgCisrI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgorKyNpbmNsdWRl ICJjbWxsX2xvY2wuaCIKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKytpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFy ICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKysJQ0FNRUxMSUFfS0VZICprZXkpCisrCXsKKysJ aWYgKEZJUFNfbW9kZSgpKQorKwkJRklQU19CQURfQUJPUlQoQ0FNRUxMSUEpCisrCXJldHVybiBw cml2YXRlX0NhbWVsbGlhX3NldF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKysJfQorKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNj LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYwor LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMJ MjAwOC0xMC0yOCAxMzoxMzo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAw MDAwMCArMDEwMAorQEAgLTUyLDExICs1MiwyMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2x2Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KKyAjaW5jbHVkZSAiY21sbF9s b2NsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBjb25zdCBjaGFyIENB TUVMTElBX3ZlcnNpb25bXT0iQ0FNRUxMSUEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1 bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKysJQ0FNRUxMSUFfS0VZICpr ZXkpCisrI2Vsc2UKKyBpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1 c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKyAJQ0FNRUxMSUFfS0VZICprZXkpCisrI2VuZGlmCisg CXsKKyAJaWYoIXVzZXJLZXkgfHwgIWtleSkKKyAJCXJldHVybiAtMTsKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzCTIwMDgtMTItMjMgMTI6MzM6MDAuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvTWFrZWZp bGUJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMyw5ICsyMyw5IEBA IEFQUFM9CisgCisgTElCPSQoVE9QKS9saWJjcnlwdG8uYQorIExJQlNSQz1jYW1lbGxpYS5jIGNt bGxfbWlzYy5jIGNtbGxfZWNiLmMgY21sbF9jYmMuYyBjbWxsX29mYi5jIFwKKy0JICAgY21sbF9j ZmIuYyBjbWxsX2N0ci5jIAorKwkgICBjbWxsX2NmYi5jIGNtbGxfY3RyLmMgY21sbF9mYmxrLmMK KyAKKy1MSUJPQko9IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8g JChDTUxMX0VOQykKKytMSUJPQko9IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNt bGxfY3RyLm8gJChDTUxMX0VOQykgY21sbF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FzdC9jYXN0LmguZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYXN0L2Nhc3QuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0NS4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYXN0L2Nhc3QuaAkyMDEwLTAx LTIwIDE4OjE0OjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTgzLDcgKzgzLDkgQEAgdHlwZWRlZiBz dHJ1Y3QgY2FzdF9rZXlfc3QKKyAJaW50IHNob3J0X2tleTsJLyogVXNlIHJlZHVjZWQgcm91bmRz IGZvciBzaG9ydCBrZXkgKi8KKyAJfSBDQVNUX0tFWTsKKyAKKy0gCisrI2lmZGVmIE9QRU5TU0xf RklQUyAKKyt2b2lkIHByaXZhdGVfQ0FTVF9zZXRfa2V5KENBU1RfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworKyNlbmRpZgorIHZvaWQgQ0FTVF9zZXRfa2V5 KENBU1RfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworIHZv aWQgQ0FTVF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hh ciAqb3V0LCBjb25zdCBDQVNUX0tFWSAqa2V5LAorIAkJICAgICAgaW50IGVuYyk7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vY2FzdC9jX3NrZXkuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcwkyMDAwLTA2LTAzIDE2OjEzOjM1LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Nhc3QvY19za2V5LmMJMjAxMC0w MS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC01Nyw2ICs1NywxMSBAQAorICAqLwor IAorICNpbmNsdWRlIDxvcGVuc3NsL2Nhc3QuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNl bmRpZgorKworICNpbmNsdWRlICJjYXN0X2xjbC5oIgorICNpbmNsdWRlICJjYXN0X3MuaCIKKyAK K0BAIC03Miw3ICs3Nyw3IEBACisgI2RlZmluZSBTNiBDQVNUX1NfdGFibGU2CisgI2RlZmluZSBT NyBDQVNUX1NfdGFibGU3CisgCistdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50 IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKytGSVBTX05PTl9GSVBTX1ZDSVBIRVJf SW5pdChDQVNUKQorIAl7CisgCUNBU1RfTE9ORyB4WzE2XTsKKyAJQ0FTVF9MT05HIHpbMTZdOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9jcnlwdG8uaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2NyeXB0by5oLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0NS4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jcnlwdG8uaAkyMDEwLTAxLTIwIDE4OjEzOjQ2 LjAwMDAwMDAwMCArMDEwMAorQEAgLTU0NiwxMiArNTQ2LDY5IEBAIHZvaWQgT3BlblNTTERpZShj b25zdCBjaGFyICpmaWxlLGludCBsaW4KKyB1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBf bG9jKHZvaWQpOworICNkZWZpbmUgT1BFTlNTTF9pYTMyY2FwICgqKE9QRU5TU0xfaWEzMmNhcF9s b2MoKSkpCisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNkZWZpbmUgRklQU19FUlJPUl9JR05P UkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKysJCWFsZyAiIHByZXZp b3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7CisrCisrI2RlZmlu ZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCisr CQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUiKTsKKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTX1NUUklDVAorKyNkZWZpbmUgRklQU19CQURfQUxHT1JJVEhNKGFsZykgRklQ U19CQURfQUJPUlQoYWxnKQorKyNlbHNlCisrI2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxn KSBcCisrCXsgXAorKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19N RVRIT0QpOyBcCisrCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxnb3JpdGhtPSIsICNhbGcpOyBc CisrCXJldHVybiAwOyBcCisrCX0KKysjZW5kaWYKKysKKysvKiBMb3cgbGV2ZWwgZGlnZXN0IEFQ SSBibG9ja2luZyBtYWNybyAqLworKworKyNkZWZpbmUgRklQU19OT05fRklQU19NRF9Jbml0KGFs ZykgXAorKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwKKysJCXsgXAorKwkJaWYgKEZJ UFNfbW9kZSgpKSBcCisrCQkJRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAorKwkJcmV0dXJuIHBy aXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCisrCQl9IFwKKysJaW50IHByaXZhdGVfIyNhbGcjI19J bml0KGFsZyMjX0NUWCAqYykKKysKKysvKiBGb3IgY2lwaGVycyB0aGUgQVBJIG9mdGVuIHZhcmll cyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVhY2ggbmVlZHMgdG8KKysgKiBiZSB0cmVhdGVk IGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhlcnMgKEJsb3dmaXNo LCBSQzQsCisrICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1pbGFyIGFuZCBjYW4gdXNlIGEg YmxvY2tpbmcgbWFjcm8uCisrICovCisrCisrI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJf SW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBcCisrCQl7IFwKKysJCWlmIChGSVBTX21vZGUo KSkgXAorKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykgXAorKwkJcHJpdmF0ZV8jI2FsZyMjX3NldF9r ZXkoa2V5LCBsZW4sIGRhdGEpOyBcCisrCQl9IFwKKysJdm9pZCBwcml2YXRlXyMjYWxnIyNfc2V0 X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgXAorKwkJCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSkKKysKKysjZWxzZQorKworKyNkZWZpbmUgRklQU19OT05fRklQU19WQ0lQSEVSX0lu aXQoYWxnKSBcCisrCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysKKysjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfTURf SW5pdChhbGcpIFwKKysJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpjKSAKKysKKysjZW5kaWYg LyogZGVmIE9QRU5TU0xfRklQUyAqLworKworIC8qIEJFR0lOIEVSUk9SIENPREVTICovCisgLyog VGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vy ci5wbC4gQW55IGNoYW5nZXMKKyAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3 cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKyAgKi8KKyB2b2lkIEVSUl9sb2Fk X0NSWVBUT19zdHJpbmdzKHZvaWQpOworIAorKyNkZWZpbmUgT1BFTlNTTF9IQVZFX0lOSVQJMQor K3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7CisrCisgLyogRXJyb3IgY29kZXMgZm9y IHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTozNy4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9lcnIuYwkyMDEwLTAxLTIw IDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEVSUl9T VFJJTkdfREFUQSBESF9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKERIX0ZfQ09NUFVURV9LRVkp LAkiQ09NUFVURV9LRVkifSwKKyB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJE SHBhcmFtc19wcmludF9mcCJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1T KSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCisre0VSUl9GVU5DKERIX0ZfREhfQ09NUFVURV9L RVkpLAkiREhfY29tcHV0ZV9rZXkifSwKKyt7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkp LAkiREhfZ2VuZXJhdGVfa2V5In0sCisge0VSUl9GVU5DKERIX0ZfREhfTkVXX01FVEhPRCksCSJE SF9uZXdfbWV0aG9kIn0sCisge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BB UkFNX0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZf REVDT0RFIn0sCitAQCAtOTQsNiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0 cl9yZWFzb25zW109Cisge0VSUl9SRUFTT04oREhfUl9CTl9FUlJPUikgICAgICAgICAgICAgICAs ImJuIGVycm9yIn0sCisge0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAgICAgICAgICAs ImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAg ICAgLCJpbnZhbGlkIHB1YmxpYyBrZXkifSwKKyt7RVJSX1JFQVNPTihESF9SX0tFWV9TSVpFX1RP T19TTUFMTCkgICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFTT04oREhfUl9L RVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAorIHtFUlJfUkVBU09OKERI X1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAorIHtFUlJf UkVBU09OKERIX1JfTk9fUEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9 LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAwNS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9nZW4uYwkyMDEw LTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTY1LDYgKzY1LDEwIEBACisgI2lu Y2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGlu dCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LCBpbnQgcHJpbWVfbGVuLCBpbnQgZ2VuZXJh dG9yLCBCTl9HRU5DQiAqY2IpOworIAorQEAgLTEwNiw2ICsxMTAsMjAgQEAgc3RhdGljIGludCBk aF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAorIAlpbnQgZyxvaz0gLTE7CisgCUJOX0NUWCAq Y3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKworKwlpZiAo RklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAljdHg9 Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3Rh cnQoY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RoL2RoLmguZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZGgvZGguaC5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGguaAkyMDEwLTAxLTIwIDE4 OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTc3LDYgKzc3LDggQEAKKyAjIGRlZmluZSBPUEVO U1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5T U0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjZGVmaW5lIERIX0ZMQUdfQ0FD SEVfTU9OVF9QICAgICAweDAxCisgI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgw MiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQg dGltZQorQEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7 CisgI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0CisgI2RlZmluZSBESF9G X1BLRVlfREhfREVSSVZFCQkJCSAxMTIKKyAjZGVmaW5lIERIX0ZfUEtFWV9ESF9LRVlHRU4JCQkJ IDExMworKyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0CisrI2RlZmluZSBESF9G X0RIX0dFTkVSQVRFX0tFWQkJCSAxMTUKKyAKKyAvKiBSZWFzb24gY29kZXMuICovCisgI2RlZmlu ZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQorQEAgLTI1Myw2ICsyNTcsNyBAQCB2b2lkIEVS Ul9sb2FkX0RIX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VU CQkJCSAxMDcKKyAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAwCisgI2RlZmlu ZSBESF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKKysjZGVmaW5lIERIX1JfS0VZ X1NJWkVfVE9PX1NNQUxMCQkJCSAxMTAKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyMy4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9rZXkuYwkyMDEwLTAxLTIw IDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTYxLDYgKzYxLDkgQEAKKyAjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9kaC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2VuZGlmCisgCisgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBzdGF0 aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJf a2V5LCBESCAqZGgpOworQEAgLTEwNyw2ICsxMTAsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9r ZXkoREggKmRoKQorIAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9 TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBT X21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RV TFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorKworIAljdHggPSBC Tl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CisgCitAQCAtMTg0LDYg KzE5NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCisgCQlE SGVycihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9EVUxVU19UT09fTEFSR0UpOworIAkJZ290byBl cnI7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJO X251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJ CXsKKysJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsK KysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorIAorIAljdHggPSBCTl9DVFhfbmV3KCk7Cisg CWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7CitAQCAtMjUxLDYgKzI2OSw5IEBAIHN0YXRpYyBp bnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQo REggKmRoKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7CisrI2VuZGlmCisgCWRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0 dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNh X2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZHNhL2RzYV9nZW4uYworLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDA4LTEyLTI2 IDE4OjE3OjIxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2RzYS9kc2FfZ2VuLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC03 Nyw4ICs3NywxMiBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNh Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisgI2luY2x1ZGUgImRzYV9sb2NsLmgiCisgCisgaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKK0BAIC0xMjYsNiArMTMwLDIxIEBAIGludCBkc2Ff YnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAJ dW5zaWduZWQgaW50IGg9MjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJ Tl9QQVJBTUdFTiwKKysJCSAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAg Z290byBlcnI7CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAoYml0cyA8IE9QRU5T U0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0ZfRFNB X0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlnb3RvIGVy cjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKHFzaXplICE9IFNIQV9ESUdFU1RfTEVOR1RIICYm IHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCisgCSAgICBxc2l6ZSAhPSBTSEEyNTZf RElHRVNUX0xFTkdUSCkKKyAJCS8qIGludmFsaWQgcSBzaXplICovCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9kc2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNhLmgu ZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2RzYS9kc2EuaAkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCAr MDEwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxV U19CSVRTCTEwMDAwCisgI2VuZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEK KyAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0 aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1l CitAQCAtOTcsNiArOTksMjEgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwgZXhwb25lbnRzLgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworIAorKy8qIElmIHRoaXMgZmxhZyBp cyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCisr ICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRo b2QuIElmIGFuCisrICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRo b2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKKysgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBj b21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQw MAorKworKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlz YWJsZWQgaW4gRklQUyBtb2RlIGFyZQorKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBs aWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCisrICogdXNhZ2UgaXMg Y29tcGxpYW50LgorKyAqLworKworKyNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkw eDA0MDAKKysKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitA QCAtMjcwLDggKzI4NywxMSBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICNk ZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9GX0RTQVBBUkFN U19QUklOVAkJCQkgMTAwCisgI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAJCQkgMTAx CisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0CisrI2RlZmluZSBEU0Ff Rl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKKyAjZGVmaW5lIERTQV9GX0RTQV9ET19TSUdO CQkJCSAxMTIKKyAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMworKyNkZWZpbmUg RFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTI1CisgI2RlZmluZSBEU0FfRl9EU0Ff TkVXX01FVEhPRAkJCQkgMTAzCisgI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAx MTkKKyAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1CitAQCAtMjk2LDkgKzMxNiwx MiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgRFNBX1JfREFU QV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAwCisgI2RlZmluZSBEU0FfUl9ERUNPREVfRVJS T1IJCQkJIDEwNAorICNkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKKysj ZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKKyAjZGVmaW5lIERTQV9SX01J U1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKKyAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdF CQkJCSAxMDMKKysjZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTExCisgI2RlZmlu ZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3CisrI2RlZmluZSBEU0FfUl9PUEVSQVRJ T05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxMTIKKyAjZGVmaW5lIERTQV9SX1BBUkFNRVRF Ul9FTkNPRElOR19FUlJPUgkJCSAxMDUKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vZHNhL2RzYV9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI1LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAxMC0w MS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC02Myw5ICs2Myw1NSBAQAorICNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorIAorIHN0YXRpYyBpbnQg ZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr Cisrc3RhdGljIGludCBmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNf Y29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19kc2FfcGFpcndpc2VfZmFpbCA9 IDE7CisrCX0KKysKKytpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCisrCXsKKysJRVZQX1BL RVkgKnBrOworKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRh IjsKKysJaW50IHJldCA9IDA7CisrCisrICAgIAlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBO VUxMKQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOworKwor KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQkJCU5VTEws IDAsIEVWUF9zaGExKCksIDAsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IDE7Cisr CisrZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWls KCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJU0VfVEVT VF9GQUlMRUQpOworKwkJfQorKworKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysK KysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorKworIGludCBEU0FfZ2VuZXJhdGVfa2V5KERT QSAqZHNhKQorIAl7CisgCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKK0BAIC03OSw2ICsxMjUs MTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCUJOX0NUWCAq Y3R4PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2Et PnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVy cihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9 PSBOVUxMKSBnb3RvIGVycjsKKyAKKyAJaWYgKGRzYS0+cHJpdl9rZXkgPT0gTlVMTCkKK0BAIC0x MTcsNiArMTcxLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQor IAorIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OworIAlkc2EtPnB1Yl9rZXk9cHViX2tleTsKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChmaXBz X2RzYV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7Cisr CQlpZighZmlwc19jaGVja19kc2EoZHNhKSkKKysJCSAgICBnb3RvIGVycjsKKysJCX0KKysjZW5k aWYKKyAJb2s9MTsKKyAKKyBlcnI6CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RzYS9kc2Ff b3NzbC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlw cwkyMDA3LTAzLTI4IDAyOjE1OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAw ICswMTAwCitAQCAtNjUsNiArNjUsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorICNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAK KyBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwg aW50IGRsZW4sIERTQSAqZHNhKTsKKyBzdGF0aWMgaW50IGRzYV9zaWduX3NldHVwKERTQSAqZHNh LCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJwKTsKK0BAIC04Miw3 ICs4NSw3IEBAIE5VTEwsIC8qIGRzYV9tb2RfZXhwLCAqLworIE5VTEwsIC8qIGRzYV9ibl9tb2Rf ZXhwLCAqLworIGRzYV9pbml0LAorIGRzYV9maW5pc2gsCistMCwKKytEU0FfRkxBR19GSVBTX01F VEhPRCwKKyBOVUxMLAorIE5VTEwsCisgTlVMTAorQEAgLTEzNyw2ICsxNDAsMjAgQEAgc3RhdGlj IERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgorIAlpbnQgcmVhc29uPUVSUl9SX0JO X0xJQjsKKyAJRFNBX1NJRyAqcmV0PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0Zf RFNBX0RPX1NJR04sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiBO VUxMOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+ cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJy KERTQV9GX0RTQV9ET19TSUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJu IE5VTEw7CisrCQl9CisrI2VuZGlmCisrCisgCUJOX2luaXQoJm0pOworIAlCTl9pbml0KCZ4cik7 CisgCitAQCAtMzEyLDYgKzMyOSwyMCBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3Qg dW5zaWduZWQgCisgCQlyZXR1cm4gLTE7CisgCQl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBT X0ZfRFNBX0RPX1ZFUklGWSxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0 dXJuIC0xOworKwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRz YS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNB ZXJyKERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQly ZXR1cm4gLTE7CisrCQl9CisrI2VuZGlmCisrCisgCWkgPSBCTl9udW1fYml0cyhkc2EtPnEpOwor IAkvKiBmaXBzIDE4Ni0zIGFsbG93cyBvbmx5IGRpZmZlcmVudCBzaXplcyBmb3IgcSAqLworIAlp ZiAoaSAhPSAxNjAgJiYgaSAhPSAyMjQgJiYgaSAhPSAyNTYpCitAQCAtNDAzLDYgKzQzNCw5IEBA IHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCAKKyAKKyBzdGF0aWMgaW50 IGRzYV9pbml0KERTQSAqZHNhKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9O VF9QOworIAlyZXR1cm4oMSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZXJyL2Vycl9hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Vyci9lcnJf YWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJ MjAwOS0wOC0wOSAxNjo1ODowNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICsw MTAwCitAQCAtOTYsNiArOTYsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC90cy5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgI2lmbmRl ZiBPUEVOU1NMX05PX0NNUworICNpbmNsdWRlIDxvcGVuc3NsL2Ntcy5oPgorICNlbmRpZgorQEAg LTE0OSw2ICsxNTIsOSBAQCB2b2lkIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKHZvaWQpCisgI2Vu ZGlmCisgCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOworIAlFUlJfbG9hZF9VSV9zdHJpbmdzKCk7 CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlFUlJfbG9hZF9GSVBTX3N0cmluZ3MoKTsKKysjZW5k aWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisgCUVSUl9sb2FkX0NNU19zdHJpbmdzKCk7Cisg I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZGlnZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZGlnZXN0LmMKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDA5LTEyLTA5IDE2OjAyOjE0 LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9kaWdl c3QuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTExNiw2ICsxMTYs NyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAjaW5jbHVkZSA8b3BlbnNzbC9lbmdp bmUuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyB2b2lkIEVWUF9NRF9D VFhfaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsKK0BAIC0xMzgsOSArMTM5LDUwIEBAIGludCBF VlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKKyAJcmV0dXJuIEVWUF9EaWdlc3RJ bml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVt cHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9y ZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAq Y3R4KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQor KworK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0 YSxzaXplX3QgY291bnQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7 IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5z aWduZWQgY2hhciAqbWQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsg cmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KKysJeworKwkwLAor KwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX3VwZGF0ZSwKKysJYmFkX2ZpbmFs LAorKwlOVUxMLAorKwlOVUxMLAorKwlOVUxMLAorKwkwLAorKwl7MCwwLDAsMH0sCisrCX07Cisr CisrI2VuZGlmCisrCisgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29u c3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCisgCXsKKyAJRVZQX01EX0NUWF9jbGVhcl9m bGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VW UF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmRp Z2VzdCA9ICZiYWRfbWQ7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBj YW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJICogc28gdGhpcyBjb250ZXh0IG1h eSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCitAQCAtMTk2 LDYgKzIzOCwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisg I2VuZGlmCisgCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQorIAkJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQl7CisrCQkJaWYgKCEodHlwZS0+ZmxhZ3Mg JiBFVlBfTURfRkxBR19GSVBTKSAKKysJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQkJeworKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VT VElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQkJY3R4LT5kaWdlc3QgPSAm YmFkX21kOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysjZW5kaWYKKyAJCWlmIChj dHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCisgCQkJT1BFTlNTTF9mcmVlKGN0 eC0+bWRfZGF0YSk7CisgCQljdHgtPmRpZ2VzdD10eXBlOworQEAgLTIyOSw2ICsyODMsOSBAQCBz a2lwX3RvX2luaXQ6CisgCisgaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eC0+dXBkYXRl KGN0eCxkYXRhLGNvdW50KTsKKyAJfQorIAorQEAgLTI0NSw2ICszMDIsOSBAQCBpbnQgRVZQX0Rp Z2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zCisgaW50IEVWUF9EaWdlc3RGaW5hbF9leChF VlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCisg CXsKKyAJaW50IHJldDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKKysjZW5kaWYKKyAKKyAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUg PD0gRVZQX01BWF9NRF9TSVpFKTsKKyAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9hZXMuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAwNC0wMS0yOCAyMDowNTozMy4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9hZXMuYwkyMDEwLTAx LTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTY5LDMyICs2OSwyOSBAQCB0eXBlZGVm IHN0cnVjdAorIAorIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzEyOCwga3MsIEFFUywgRVZQ X0FFU19LRVksCisgCQkgICAgICAgTklEX2Flc18xMjgsIDE2LCAxNiwgMTYsIDEyOCwKKy0JCSAg ICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAorLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2Fz bjFfaXYsCistCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKy0JCSAgICAgICBOVUxM KQorKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNO MSwKKysJCSAgICAgICBhZXNfaW5pdF9rZXksCisrCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCkKKyBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xOTIsIGtzLCBBRVMsIEVWUF9BRVNf S0VZLAorIAkJICAgICAgIE5JRF9hZXNfMTkyLCAxNiwgMjQsIDE2LCAxMjgsCistCQkgICAgICAg MCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKKy0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2 LAorLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCistCQkgICAgICAgTlVMTCkKKysJ CSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisr CQkgICAgICAgYWVzX2luaXRfa2V5LAorKwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp CisgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMjU2LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwK KyAJCSAgICAgICBOSURfYWVzXzI1NiwgMTYsIDMyLCAxNiwgMTI4LAorLQkJICAgICAgIDAsIGFl c19pbml0X2tleSwgTlVMTCwgCistCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0J CSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorLQkJICAgICAgIE5VTEwpCistCistI2Rl ZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGFlcyxB RVMsRVZQX0FFU19LRVksa3Msa3NpemUsY2JpdHMsMTYpCistCistSU1QTEVNRU5UX0FFU19DRkJS KDEyOCwxKQorLUlNUExFTUVOVF9BRVNfQ0ZCUigxOTIsMSkKKy1JTVBMRU1FTlRfQUVTX0NGQlIo MjU2LDEpCistCistSU1QTEVNRU5UX0FFU19DRkJSKDEyOCw4KQorLUlNUExFTUVOVF9BRVNfQ0ZC UigxOTIsOCkKKy1JTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDgpCisrCQkgICAgICAgRVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICAgIGFlc19pbml0 X2tleSwKKysJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorKworKyNkZWZpbmUgSU1Q TEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzLGZsYWdzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVT LEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2LGZsYWdzKQorKworK0lNUExFTUVOVF9BRVNf Q0ZCUigxMjgsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDE5Miwx LEVWUF9DSVBIX0ZMQUdfRklQUykKKytJTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDEsRVZQX0NJUEhf RkxBR19GSVBTKQorKworK0lNUExFTUVOVF9BRVNfQ0ZCUigxMjgsOCxFVlBfQ0lQSF9GTEFHX0ZJ UFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDE5Miw4LEVWUF9DSVBIX0ZMQUdfRklQUykKKytJTVBM RU1FTlRfQUVTX0NGQlIoMjU2LDgsRVZQX0NJUEhfRkxBR19GSVBTKQorIAorIHN0YXRpYyBpbnQg YWVzX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwKKyAJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMJMjAwNi0wOC0zMSAyMjo1NjoyMC4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9jYW1lbGxpYS5j CTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtOTMsNyArOTMsNyBAQCBJ TVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGNhbWVsbGlhXzI1Niwga3MsCisgCUVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCisgCU5VTEwpCisgCistI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihr c2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElB X0tFWSxrcyxrc2l6ZSxjYml0cywxNikKKysjZGVmaW5lIElNUExFTUVOVF9DQU1FTExJQV9DRkJS KGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBfQ0FNRUxM SUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2LDApCisgCisgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIo MTI4LDEpCisgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoMTkyLDEpCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9ldnAvZV9kZXMzLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAv ZV9kZXMzLmMuZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2 LjAwMDAwMDAwMCArMDEwMAorQEAgLTIwNiw5ICsyMDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUz X2NmYjhfY2lwaGVyKEVWUF9DSVBICisgICAgIH0KKyAKKyBCTE9DS19DSVBIRVJfZGVmcyhkZXNf ZWRlLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKKy0JCQlFVlBfQ0lQ SF9SQU5EX0tFWSwgZGVzX2VkZV9pbml0X2tleSwgTlVMTCwgCistCQkJRVZQX0NJUEhFUl9zZXRf YXNuMV9pdiwKKy0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9L RVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJCWRl c19lZGVfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisg CisgI2RlZmluZSBkZXNfZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKK0BA IC0yMTcsMjEgKzIxNywyMSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tF WSwgCisgI2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgorIAor IEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4 LCAyNCwgOCwgNjQsCistCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBO VUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2Fz bjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhf RkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZTNfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVM TCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2Vk ZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKKy0JCSAgICAgRVZQX0NJUEhfUkFO RF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2Fz bjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5E X0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkg ICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAg ICBkZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9L RVksTklEX2Rlc19lZGUzLDI0LDgsOCwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGUzX2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkg ICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQ SF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUz X2luaXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwp CisgCisgc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2V2cC9lX251bGwuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9lX251 bGwuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIw MDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAw CitAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBuX2NpcGhlcj0KKyAJ eworIAlOSURfdW5kZWYsCisgCTEsMCwwLAorLQkwLAorKwlFVlBfQ0lQSF9GTEFHX0ZJUFMsCisg CW51bGxfaW5pdF9rZXksCisgCW51bGxfY2lwaGVyLAorIAlOVUxMLAorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2V2cC9ldnBfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9l dnAvZXZwX2VuYy5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMC4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTAtMDEtMjAgMTg6 MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtNjgsOCArNjgsNTMgQEAKKyAKKyBjb25zdCBjaGFy IEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dy YW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMg bW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5p dChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCisrCXsgRklQU19FUlJPUl9JR05PUkVE KCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfZG9fY2lwaGVy KEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkgY29uc3QgdW5z aWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCisrCXsgRklQU19FUlJPUl9JR05PUkVE KCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KKysKKysvKiBOQjogbm8gY2xlYW51cCBiZWNh dXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KKysKKytzdGF0aWMgaW50IGJh ZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBT X0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGlu dCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCisrCXsg RklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQorK3N0YXRp YyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZv aWQgKnB0cikKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAw O30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KKysJeworKwkwLAor KwkwLAorKwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX2RvX2NpcGhlciwKKysJ TlVMTCwKKysJMCwKKysJYmFkX3NldF9hc24xLAorKwliYWRfZ2V0X2FzbjEsCisrCWJhZF9jdHJs LAorKwlOVUxMCisrCX07CisrCisrI2VuZGlmCisrCisgdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0 KEVWUF9DSVBIRVJfQ1RYICpjdHgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNf c2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQ SEVSX0NUWCkpOworIAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLworIAl9CitAQCAtMTAxLDYgKzE0 NiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgCQkJZW5j ID0gMTsKKyAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKKyAJCX0KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9F VlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJY3R4LT5j aXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5k ZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5p dHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRl eHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BA IC0yMTksNiArMjcyLDIyIEBAIHNraXBfdG9faW5pdDoKKyAJCX0KKyAJfQorIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVy cyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KKysJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJ UFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KKysJICovCisrCWlmIChrZXkgJiYgRklQU19tb2Rl KCkpCisrCQl7CisrCQlpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJ UFMpCisrCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkK KysJCQl7CisrCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxF RF9GT1JfRklQUyk7CisrCQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCQlyZXR1cm4g MDsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZs YWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKKyAJCWlmKCFjdHgtPmNpcGhlci0+ aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9ldnAvZXZwX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vZXZwL2V2cF9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9l dnBfZXJyLmMuZmlwcwkyMDA5LTEyLTE3IDE2OjI4OjQ0LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnBfZXJyLmMJMjAxMC0wMS0yMCAxODoxMzo0 Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNTQsNiArMTU0LDcgQEAgc3RhdGljIEVSUl9TVFJJTkdf REFUQSBFVlBfc3RyX3JlYXNvbnNbXQorIHtFUlJfUkVBU09OKEVWUF9SX0RFQ09ERV9FUlJPUikg ICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRf S0VZX1RZUEVTKSAgICwiZGlmZmVyZW50IGtleSB0eXBlcyJ9LAorIHtFUlJfUkVBU09OKEVWUF9S X0RJRkZFUkVOVF9QQVJBTUVURVJTKSAgLCJkaWZmZXJlbnQgcGFyYW1ldGVycyJ9LAorK3tFUlJf UkVBU09OKEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKSAgICAgLCJkaXNhYmxlZCBmb3IgZmlwcyJ9 LAorIHtFUlJfUkVBU09OKEVWUF9SX0VOQ09ERV9FUlJPUikgICAgICAgICAgLCJlbmNvZGUgZXJy b3IifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9FVlBfUEJFX0NJUEhFUklOSVRfRVJST1IpLCJldnAg cGJlIGNpcGhlcmluaXQgZXJyb3IifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9FWFBFQ1RJTkdfQU5f UlNBX0tFWSkgICwiZXhwZWN0aW5nIGFuIHJzYSBrZXkifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnAuaC5maXBz CTIwMTAtMDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZXZwL2V2cC5oCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAw CitAQCAtNzUsNiArNzUsMTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyAjZW5kaWYK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNl bmRpZgorKworIC8qCisgI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgorICNkZWZpbmUgRVZQ X1JDNF9LRVlfU0laRQkJMTYKK0BAIC0xOTcsNiArMjAxLDggQEAgdHlwZWRlZiBpbnQgZXZwX3Zl cmlmeV9tZXRob2QoaW50IHR5cGUsYworIAorICNkZWZpbmUgRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFCTB4MDAwNAorIAorKyNkZWZpbmUgRVZQX01EX0ZMQUdfRklQUwkweDA0MDAg LyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworKworIC8qIERpZ2Vz dEFsZ29yaXRobUlkZW50aWZpZXIgZmxhZ3MuLi4gKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9GTEFH X0RJR0FMR0lEX01BU0sJCTB4MDAxOAorQEAgLTI2OSwxMCArMjc1LDYgQEAgc3RydWN0IGVudl9t ZF9jdHhfc3QKKyAJCQkJCQkqIGNsZWFuZWQgKi8KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19S RVVTRQkJMHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCisgCQkJCQkJKiBpbiBF VlBfTURfQ1RYX2NsZWFudXAgKi8KKy0vKiBGSVBTIGFuZCBwYWQgb3B0aW9ucyBhcmUgaWdub3Jl ZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKKy0gKiBzbyB3ZSBkb24ndCBhY2NpZGVu dGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCistICovCistCisgI2Rl ZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4CS8qIEFsbG93IHVzZSBv ZiBub24gRklQUyBkaWdlc3QKKyAJCQkJCQkgKiBpbiBGSVBTIG1vZGUgKi8KKyAKK0BAIC0yODQs NiArMjg2LDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0CisgI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BLQ1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLworICNkZWZpbmUgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLworICNkZWZpbmUgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KKysjZGVmaW5lIE1fRVZQX01E X0NUWF9GTEFHX1BTU19TQUxUKGN0eCkgXAorKwkJKChjdHgtPmZsYWdzPj4xNikgJjB4RkZGRikg Lyogc2VlZCBsZW5ndGggKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4JMHhG RkZGCS8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCisrI2RlZmluZSBFVlBfTURfQ1RYX0ZM QUdfUFNTX01SRUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVjb3ZlcmVkICovCisgCisg I2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8qIERvbid0IGluaXRpYWxp emUgbWRfZGF0YSAqLworIAorQEAgLTMzMCw2ICszMzYsMTQgQEAgc3RydWN0IGV2cF9jaXBoZXJf c3QKKyAjZGVmaW5lIAlFVlBfQ0lQSF9OT19QQURESU5HCQkweDEwMAorIC8qIGNpcGhlciBoYW5k bGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZ CQkweDIwMAorKy8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBGSVBTIG1vZGUgKi8KKysj ZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCisrLyogQWxsb3cgbm9uIEZJUFMgY2lw aGVyIGluIEZJUFMgbW9kZSAqLworKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxM T1cJMHg4MDAKKysvKiBBbGxvdyB1c2UgZGVmYXVsdCBBU04xIGdldC9zZXQgaXYgKi8KKysjZGVm aW5lCQlFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMQkweDEwMDAKKysvKiBCdWZmZXIgbGVuZ3Ro IGluIGJpdHMgbm90IGJ5dGVzOiBDRkIxIG1vZGUgb25seSAqLworKyNkZWZpbmUJCUVWUF9DSVBI X0ZMQUdfTEVOR1RIX0JJVFMJMHgyMDAwCisgCisgLyogY3RybCgpIHZhbHVlcyAqLworIAorQEAg LTUwNyw2ICs1MjEsMTAgQEAgaW50CUVWUF9CeXRlc1RvS2V5KGNvbnN0IEVWUF9DSVBIRVIgKnR5 cAorIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0 YSwKKyAJCWludCBkYXRhbCwgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICprZXksdW5zaWduZWQg Y2hhciAqaXYpOworIAorK3ZvaWQJRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKEVWUF9DSVBIRVJf Q1RYICpjdHgsIGludCBmbGFncyk7Cisrdm9pZAlFVlBfQ0lQSEVSX0NUWF9jbGVhcl9mbGFncyhF VlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpOworK2ludCAJRVZQX0NJUEhFUl9DVFhfdGVz dF9mbGFncyhjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4LGludCBmbGFncyk7CisrCisgaW50CUVW UF9FbmNyeXB0SW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhl ciwKKyAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYp OworIGludAlFVlBfRW5jcnlwdEluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0eCxjb25zdCBFVlBf Q0lQSEVSICpjaXBoZXIsIEVOR0lORSAqaW1wbCwKK0BAIC0xMjI1LDYgKzEyNDMsNyBAQCB2b2lk IEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9S CQkJCSAxMTQKKyAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMJCQkgMTAxCisgI2Rl ZmluZSBFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUwkJCSAxNTMKKysjZGVmaW5lIEVWUF9SX0RJ U0FCTEVEX0ZPUl9GSVBTCQkJCSAxNjAKKyAjZGVmaW5lIEVWUF9SX0VOQ09ERV9FUlJPUgkJCQkg MTE1CisgI2RlZmluZSBFVlBfUl9FVlBfUEJFX0NJUEhFUklOSVRfRVJST1IJCQkgMTE5CisgI2Rl ZmluZSBFVlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tFWQkJCSAxMjcKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9ldnAvZXZwX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZw L2V2cF9saWIuYy5maXBzCTIwMDktMTItMjUgMTU6MTI6MjQuMDAwMDAwMDAwICswMTAwCisrKysg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDEwLTAxLTIwIDE4OjEz OjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTY3LDYgKzY3LDggQEAgaW50IEVWUF9DSVBIRVJfcGFy YW1fdG9fYXNuMShFVlBfQ0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJh bWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0ZXJzKGMs dHlwZSk7CisrCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFV TFRfQVNOMSkKKysJCXJldD1FVlBfQ0lQSEVSX3NldF9hc24xX2l2KGMsIHR5cGUpOworIAllbHNl CisgCQlyZXQ9LTE7CisgCXJldHVybihyZXQpOworQEAgLTc4LDYgKzgwLDggQEAgaW50IEVWUF9D SVBIRVJfYXNuMV90b19wYXJhbShFVlBfQ0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVyLT5nZXRf YXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJh bWV0ZXJzKGMsdHlwZSk7CisrCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9G TEFHX0RFRkFVTFRfQVNOMSkKKysJCXJldD1FVlBfQ0lQSEVSX2dldF9hc24xX2l2KGMsIHR5cGUp OworIAllbHNlCisgCQlyZXQ9LTE7CisgCXJldHVybihyZXQpOworQEAgLTE4Niw2ICsxOTAsOSBA QCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCisgCisgaW50IEVWUF9D aXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT5jaXBo ZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7CisgCX0KKyAKK0BAIC0yOTUsMyArMzAyLDE4 IEBAIGludCBFVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY29uc3QgRVZQX01EX0MKKyAJeworIAlyZXR1 cm4gKGN0eC0+ZmxhZ3MgJiBmbGFncyk7CisgCX0KKysKKyt2b2lkIEVWUF9DSVBIRVJfQ1RYX3Nl dF9mbGFncyhFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpCisrCXsKKysJY3R4LT5mbGFn cyB8PSBmbGFnczsKKysJfQorKworK3ZvaWQgRVZQX0NJUEhFUl9DVFhfY2xlYXJfZmxhZ3MoRVZQ X0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKQorKwl7CisrCWN0eC0+ZmxhZ3MgJj0gfmZsYWdz OworKwl9CisrCisraW50IEVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3MoY29uc3QgRVZQX0NJUEhF Ul9DVFggKmN0eCwgaW50IGZsYWdzKQorKwl7CisrCXJldHVybiAoY3R4LT5mbGFncyAmIGZsYWdz KTsKKysJfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2V2cF9sb2Ns LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAxMC0wMS0yMCAx ODoxMzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9l dnAvZXZwX2xvY2wuaAkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEx MSwxMSArMTExLDExIEBAIHN0YXRpYyBpbnQgY25hbWUjI19jYmNfY2lwaGVyKEVWUF9DSVBIRVIK KyBzdGF0aWMgaW50IGNuYW1lIyNfY2ZiIyNjYml0cyMjX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3Qg aW5sKSBcCisge1wKKyAJc2l6ZV90IGNodW5rPUVWUF9NQVhDSFVOSztcCistCWlmIChjYml0cz09 MSkgIGNodW5rPj49MztcCisrCWlmIChjYml0cz09MSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQ SF9GTEFHX0xFTkdUSF9CSVRTKSkgIGNodW5rPj49MztcCisgCWlmIChpbmw8Y2h1bmspIGNodW5r PWlubDtcCisgCXdoaWxlKGlubCAmJiBpbmw+PWNodW5rKVwKKyAJICAgIHtcCistCSAgICBjcHJl Zml4IyNfY2ZiIyNjYml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcpKGNiaXRzPT0xP2NodW5r Kjg6Y2h1bmspLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwgY3R4LT5p diwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQpO1wKKysJICAgIGNwcmVmaXgjI19jZmIjI2NiaXRz IyNfZW5jcnlwdChpbiwgb3V0LCAobG9uZykoY2JpdHM9PTEgJiYgIShjdHgtPmZsYWdzICYgRVZQ X0NJUEhfRkxBR19MRU5HVEhfQklUUyk/Y2h1bmsqODpjaHVuayksICYoKGtzdHJ1Y3QgKiljdHgt PmNpcGhlcl9kYXRhKS0+a3NjaGVkLCBjdHgtPml2LCAmY3R4LT5udW0sIGN0eC0+ZW5jcnlwdCk7 XAorIAkgICAgaW5sLT1jaHVuaztcCisgCSAgICBpbiArPWNodW5rO1wKKyAJICAgIG91dCs9Y2h1 bms7XAorQEAgLTI1NCwxNCArMjU0LDI5IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1l IyNfZWNiKHZvaWQKKyAKKyAjZGVmaW5lIEVWUF9DX0RBVEEoa3N0cnVjdCwgY3R4KQkoKGtzdHJ1 Y3QgKikoY3R4KS0+Y2lwaGVyX2RhdGEpCisgCistI2RlZmluZSBJTVBMRU1FTlRfQ0ZCUihjaXBo ZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRzLGl2X2xlbikgXAorKyNkZWZp bmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVyLGNwcmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxj Yml0cyxpdl9sZW4sZmwpIFwKKyAJQkxPQ0tfQ0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMja2V5 c2l6ZSxjcHJlZml4LGNiaXRzLGtzdHJ1Y3Qsa3NjaGVkKSBcCisgCUJMT0NLX0NJUEhFUl9kZWZf Y2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxrc3RydWN0LCBcCisgCQkJICAgICBOSURfIyNjaXBoZXIj I18jI2tleXNpemUsIGtleXNpemUvOCwgaXZfbGVuLCBjYml0cywgXAorLQkJCSAgICAgMCwgY2lw aGVyIyNfaW5pdF9rZXksIE5VTEwsIFwKKy0JCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYs IFwKKy0JCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIE5VTEwpCisr CQkJICAgICAoZmwpfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCisrCQkJICAgICBjaXBo ZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKysKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5CisrI2RlZmlu ZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5CisrI2RlZmluZSBDQVNUX3NldF9rZXkJ cHJpdmF0ZV9DQVNUX3NldF9rZXkKKysjZGVmaW5lIFJDNV8zMl9zZXRfa2V5CXByaXZhdGVfUkM1 XzMyX3NldF9rZXkKKysjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5CisrI2Rl ZmluZSBDYW1lbGxpYV9zZXRfa2V5IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQorKyNkZWZpbmUg aWRlYV9zZXRfZW5jcnlwdF9rZXkgcHJpdmF0ZV9pZGVhX3NldF9lbmNyeXB0X2tleQorKworKyNk ZWZpbmUgTUQ1X0luaXQJcHJpdmF0ZV9NRDVfSW5pdAorKyNkZWZpbmUgTUQ0X0luaXQJcHJpdmF0 ZV9NRDRfSW5pdAorKyNkZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5pdAorKyNkZWZpbmUg TURDMl9Jbml0CXByaXZhdGVfTURDMl9Jbml0CisrI2RlZmluZSBTSEFfSW5pdAlwcml2YXRlX1NI QV9Jbml0CisrCisrI2VuZGlmCisgCisgc3RydWN0IGV2cF9wa2V5X2N0eF9zdAorIAl7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9kc3MuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX2Rzcy5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDA2LTA0LTE5IDE5OjA1OjU3LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTAtMDEtMjAg MTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIGRzYV9tZD0KKyAJTklEX2RzYVdpdGhTSEEsCisgCU5JRF9kc2FXaXRoU0hBLAorIAlT SEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCisrCUVWUF9NRF9G TEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJ ZmluYWwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9kc3MxLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9kc3MxLmMKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcwkyMDA2LTA0LTE5IDE5OjA1OjU3 LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX2Rz czEuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTgyLDcgKzgyLDcg QEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc3MxX21kPQorIAlOSURfZHNhLAorIAlOSURfZHNhV2l0 aFNIQTEsCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwK KysJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJ dXBkYXRlLAorIAlmaW5hbCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2 cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX3NoYTEuYwor LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzCTIwMDgtMDMt MTIgMjI6MTQ6MjQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZXZwL21fc2hhMS5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAt ODIsNyArODIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFfbWQ9CisgCU5JRF9zaGExLAor IAlOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwKKyAJ ZmluYWwsCitAQCAtMTE5LDcgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21k PQorIAlOSURfc2hhMjI0LAorIAlOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTIy NF9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQ X01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdO QVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywK KyAJaW5pdDIyNCwKKyAJdXBkYXRlMjU2LAorIAlmaW5hbDI1NiwKK0BAIC0xMzgsNyArMTQwLDgg QEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyNTZfbWQ9CisgCU5JRF9zaGEyNTYsCisgCU5JRF9z aGEyNTZXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMjU2X0RJR0VTVF9MRU5HVEgsCistCUVWUF9N RF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQs CisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0MjU2LAorIAl1cGRhdGUyNTYs CisgCWZpbmFsMjU2LAorQEAgLTE2OSw3ICsxNzIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNo YTM4NF9tZD0KKyAJTklEX3NoYTM4NCwKKyAJTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLAor IAlTSEEzODRfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFH X0ZJUFMsCisgCWluaXQzODQsCisgCXVwZGF0ZTUxMiwKKyAJZmluYWw1MTIsCitAQCAtMTg4LDcg KzE5Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kPQorIAlOSURfc2hhNTEyLAor IAlOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTUxMl9ESUdFU1RfTEVOR1RILAor LQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdf RElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDUxMiwKKyAJdXBk YXRlNTEyLAorIAlmaW5hbDUxMiwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2V2cC9uYW1lcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL25hbWVzLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbmFtZXMuYy5maXBzCTIwMDktMDQt MTAgMTI6MzA6MjcuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZXZwL25hbWVzLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC02 Niw2ICs2NiwxMCBAQCBpbnQgRVZQX2FkZF9jaXBoZXIoY29uc3QgRVZQX0NJUEhFUiAqYykKKyAJ eworIAlpbnQgcjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9QRU5TU0xfaW5pdF9saWJy YXJ5KCk7CisrI2VuZGlmCisrCisgCXI9T0JKX05BTUVfYWRkKE9CSl9uaWQyc24oYy0+bmlkKSxP QkpfTkFNRV9UWVBFX0NJUEhFUl9NRVRILChjb25zdCBjaGFyICopYyk7CisgCWlmIChyID09IDAp IHJldHVybigwKTsKKyAJY2hlY2tfZGVmZXIoYy0+bmlkKTsKK0BAIC03OSw2ICs4MywxMCBAQCBp bnQgRVZQX2FkZF9kaWdlc3QoY29uc3QgRVZQX01EICptZCkKKyAJaW50IHI7CisgCWNvbnN0IGNo YXIgKm5hbWU7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlPUEVOU1NMX2luaXRfbGlicmFy eSgpOworKyNlbmRpZgorKworIAluYW1lPU9CSl9uaWQyc24obWQtPnR5cGUpOworIAlyPU9CSl9O QU1FX2FkZChuYW1lLE9CSl9OQU1FX1RZUEVfTURfTUVUSCwoY29uc3QgY2hhciAqKW1kKTsKKyAJ aWYgKHIgPT0gMCkgcmV0dXJuKDApOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL3Bfc2ln bi5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAw Ni0wNS0yNCAxNToyOTozMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9ldnAvcF9zaWduLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAK K0BAIC02MSw2ICs2MSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyAjaWZkZWYgdW5kZWYKKyB2b2lkIEVWUF9TaWduSW5pdChF VlBfTURfQ1RYICpjdHgsIEVWUF9NRCAqdHlwZSkKK0BAIC0xMDEsNiArMTAyLDIyIEBAIGludCBF VlBfU2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKKyAJCQlnb3RvIGVycjsKKyAJCWlm IChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDAp CisgCQkJZ290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURf WDkzMSkKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5 MzFfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTKQorKwkJCXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlpZiAo RVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5H KSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdf UFNTX1NBTFQoY3R4KTsKKysJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01E TEVOKQorKwkJCQlzYWx0bGVuID0gLTE7CisrCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURf Q1RYX0ZMQUdfUFNTX01SRUMpCisrCQkJCXNhbHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdvdG8g ZXJyOworKwkJCX0KKyAJCWlmIChFVlBfUEtFWV9zaWduKHBrY3R4LCBzaWdyZXQsICZzbHRtcCwg bSwgbV9sZW4pIDw9IDApCisgCQkJZ290byBlcnI7CisgCQkqc2lnbGVuID0gc2x0bXA7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jCistLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDA4LTExLTEyIDA0OjU4OjAxLjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9wX3ZlcmlmeS5j CTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtNjEsNiArNjEsNyBAQAor ICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Cisg CisgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnNpZ2J1ZiwKKyAJICAgICB1bnNpZ25lZCBpbnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkK K0BAIC04Niw2ICs4NywyMiBAQCBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwg Y29uCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQo cGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRf cnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJy OworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7Cisr CQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtj dHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQkJc2Fs dGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4g PT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKKysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVs c2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVu ID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBz YWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCQl9CisgCQlpID0gRVZQX1BLRVlfdmVy aWZ5KHBrY3R4LCBzaWdidWYsIHNpZ2xlbiwgbSwgbV9sZW4pOworIAkJZXJyOgorIAkJRVZQX1BL RVlfQ1RYX2ZyZWUocGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9m aXBzL2NhdnMvZmlwc19hZXNhdnMuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNh dnMuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw5Mzkg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgTklTVCBBRVMgQWxnb3JpdGhtIFZhbGlkYXRpb24g U3VpdGUKKysgIFRlc3QgUHJvZ3JhbQorKworKyAgRG9uYXRlZCB0byBPcGVuU1NMIGJ5OgorKyAg Vi1PTkUgQ29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2ZCwgU3VpdGUgMzAwCisrICBH ZXJtYW50b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5j bHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxlcnJuby5o PgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlICJlX29z LmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIEFFUyBzdXBwb3J0XG4iKTsKKysg ICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5lIEFFU19CTE9DS19TSVpFIDE2 CisrCisrI2RlZmluZSBWRVJCT1NFIDAKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKytpbnQgQUVTVGVzdChFVlBfQ0lQSEVSX0NUWCAq Y3R4LAorKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXks IAorKwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCSAgICB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVu c2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3QgRVZQ X0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJD QkMiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6Cisr CQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6 CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jYmMoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAy NTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jYmMoKTsKKysJCWJyZWFrOworKwkJfQorKwor Kwl9CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwl7Cisr CXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVz XzEyOF9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBf YWVzXzE5Ml9lY2IoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBF VlBfYWVzXzI1Nl9lY2IoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYgKHN0 cmNhc2VjbXAoYW1vZGUsICJDRkIxMjgiKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQor KwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysJ CWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmIxMjgo KTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9j ZmIxMjgoKTsKKysJCWJyZWFrOworKwkJfQorKworKwl9CisrICAgIGVsc2UgaWYgKHN0cm5jYXNl Y21wKGFtb2RlLCAiT0ZCIiwgMykgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsK KysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfb2ZiKCk7CisrCQlicmVhazsK KysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfb2ZiKCk7CisrCQlicmVh azsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfb2ZiKCk7CisrCQli cmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikp CisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9 IEVWUF9hZXNfMTI4X2NmYjEoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBo ZXIgPSBFVlBfYWVzXzE5Ml9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJ Y2lwaGVyID0gRVZQX2Flc18yNTZfY2ZiMSgpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAg ZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6 KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9jZmI4KCk7Cisr CQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiOCgp OworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Nm YjgoKTsKKysJCWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UKKysJeworKwlwcmludGYoIlVu a25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgaWYgKCFj aXBoZXIpCisrCXsKKysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsK KysJcmV0dXJuIDA7IAorKwl9CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhl ciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1cm4gMDsKKysgICAgaWYoIXN0 cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoY3R4 LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgaWYgKGRpcikKKysJCUVWUF9DaXBo ZXIoY3R4LCBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCWVsc2UKKysJCUVWUF9DaXBo ZXIoY3R4LCBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrY2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07CisrY2hh ciAqdF9tb2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjEyOCJ9 OworK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCMTI4fTsKKytlbnVt IFhDcnlwdCB7WERFQ1JZUFQsIFhFTkNSWVBUfTsKKysKKysvKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ki8KKysvKiAgTW9udGUgQ2FybG8gVGVzdHMgICAgICAgICAgKi8KKysvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysvKiNkZWZpbmUgZ2IoYSxiKSAoKChhKVso YikvOF0gPj4gKChiKSU4KSkmMSkqLworKy8qI2RlZmluZSBzYihhLGIsdikgKChhKVsoYikvOF09 KChhKVsoYikvOF0mfigxIDw8ICgoYiklOCkpKXwoISEodikgPDwgKChiKSU4KSkpKi8KKysKKysj ZGVmaW5lIGdiKGEsYikgKCgoYSlbKGIpLzhdID4+ICg3LShiKSU4KSkmMSkKKysjZGVmaW5lIHNi KGEsYix2KSAoKGEpWyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKDctKGIpJTgpKSl8KCEhKHYp IDw8ICg3LShiKSU4KSkpCisrCisraW50IGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgIGludCBh a2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksdW5zaWduZWQgY2hhciAqaVZlYywKKysJICAgaW50 IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJICAgRklMRSAqcmZwKQorKyAg ICB7CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxMDFdWzMyXTsK KysgICAgdW5zaWduZWQgY2hhciBpdlsxMDFdW0FFU19CTE9DS19TSVpFXTsKKysgICAgdW5zaWdu ZWQgY2hhciBwdGV4dFsxMDAxXVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgY3RleHRbMTAwMV1b MzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbNjQrNF07CisrICAgIGludCBpLCBq LCBuLCBuMSwgbjI7CisrICAgIGludCBpbW9kZSA9IDAsIG5rZXlzeiA9IGFrZXlzei84OworKyAg ICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Cisr CisrICAgIGlmIChsZW4gPiAzMikKKysJeworKwlwcmludGYoIlxuPj4+PiBMZW5ndGggZXhjZWVk cyAzMiBmb3IgJXMgJWQgPDw8PFxuXG4iLCAKKysJICAgICAgIGFtb2RlLCBha2V5c3opOworKwly ZXR1cm4gLTE7CisrCX0KKysgICAgZm9yIChpbW9kZSA9IDA7IGltb2RlIDwgNjsgKytpbW9kZSkK KysJaWYgKHN0cmNtcChhbW9kZSwgdF9tb2RlW2ltb2RlXSkgPT0gMCkKKysJICAgIGJyZWFrOwor KyAgICBpZiAoaW1vZGUgPT0gNikKKysJeyAKKysJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTog JXNcbiIsIGFtb2RlKTsKKysJcmV0dXJuIC0xOworKwl9CisrCisrICAgIG1lbWNweShrZXlbMF0s IGFLZXksIG5rZXlzeik7CisrICAgIGlmIChpVmVjKQorKwltZW1jcHkoaXZbMF0sIGlWZWMsIEFF U19CTE9DS19TSVpFKTsKKysgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJbWVtY3B5KHB0ZXh0 WzBdLCB0ZXh0LCBsZW4pOworKyAgICBlbHNlCisrCW1lbWNweShjdGV4dFswXSwgdGV4dCwgbGVu KTsKKysgICAgZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKQorKwl7CisrCS8qIHByaW50ZigiSXRl cmF0aW9uICVkXG4iLCBpKTsgKi8KKysJaWYgKGkgPiAwKQorKwkgICAgeworKwkgICAgZnByaW50 ZihyZnAsIkNPVU5UID0gJWRcbiIsaSk7CisrCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixrZXlbaV0s bmtleXN6LHJmcCwwKTsKKysJICAgIGlmIChpbW9kZSAhPSBFQ0IpICAvKiBFQ0IgKi8KKysJCU91 dHB1dFZhbHVlKCJJViIsaXZbaV0sQUVTX0JMT0NLX1NJWkUscmZwLDApOworKwkgICAgLyogT3V0 cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8KKysJICAgIE91dHB1dFZhbHVlKHRfdGFnW2Rp cl4xXSxkaXIgPyBwdGV4dFswXSA6IGN0ZXh0WzBdLGxlbixyZnAsCisrCQkJaW1vZGUgPT0gQ0ZC MSk7CisrCSAgICB9CisrCWZvciAoaiA9IDA7IGogPCAxMDAwOyArK2opCisrCSAgICB7CisrCSAg ICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAgY2FzZSBFQ0I6CisrCQlpZiAoaiA9PSAwKQor KwkJICAgIHsgLyogc2V0IHVwIGVuY3J5cHRpb24gKi8KKysJCSAgICByZXQgPSBBRVNUZXN0KCZj dHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgTlVMTCwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRl Y3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOwor KwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0 W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0s IGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhF TkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwg bGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbal0sIGxlbik7CisrCQkJfQorKwkJ ICAgIGVsc2UKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0s IGxlbik7CisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2pdLCBsZW4pOworKwkJCX0KKysJ CSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6ICAK KysJICAgIGNhc2UgQ0ZCMTI4OgorKwkJaWYgKGogPT0gMCkKKysJCSAgICB7CisrCQkgICAgcmV0 ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKKysJCQkJICBk aXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3Rl eHRbal0sIGxlbik7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRl eHRbaisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFd LCBpdltpXSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0 ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTFdLCBsZW4pOwor KwkJCX0KKysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0s IGN0ZXh0W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTFdLCBsZW4p OworKwkJCX0KKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCODoKKysJCWlm IChqID09IDApCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFr ZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBl bmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJ CWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQlFVlBfQ2lw aGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJRVZQ X0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQorKwkJaWYg KGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1j cHkocHRleHRbaisxXSwgJml2W2ldW2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHko cHRleHRbaisxXSwgY3RleHRbai0xNl0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAg IHsKKysJCSAgICBpZiAoaiA8IDE2KQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCAmaXZbaV1bal0s IGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqLTE2XSwg bGVuKTsKKysJCSAgICB9CisrCQlicmVhazsKKysKKysJICAgIGNhc2UgQ0ZCMToKKysJCWlmKGog PT0gMCkKKysJCSAgICB7CisrI2lmIDAKKysJCSAgICAvKiBjb21wZW5zYXRlIGZvciB3cm9uZyBl bmRpYW5uZXNzIG9mIGlucHV0IGZpbGUgKi8KKysJCSAgICBpZihpID09IDApCisrCQkJcHRleHRb MF1bMF08PD03OworKyNlbmRpZgorKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCxhbW9kZSxha2V5 c3osa2V5W2ldLGl2W2ldLGRpciwKKysJCQkJcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJ ICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJ CQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pdLCBwdGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNl CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCisrCQkg ICAgfQorKwkJaWYoZGlyID09IFhFTkNSWVBUKQorKwkJICAgIHsKKysJCSAgICBpZihqIDwgMTI4 KQorKwkJCXNiKHB0ZXh0W2orMV0sMCxnYihpdltpXSxqKSk7CisrCQkgICAgZWxzZQorKwkJCXNi KHB0ZXh0W2orMV0sMCxnYihjdGV4dFtqLTEyOF0sMCkpOworKwkJICAgIH0KKysJCWVsc2UKKysJ CSAgICB7CisrCQkgICAgaWYoaiA8IDEyOCkKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IoaXZbaV0s aikpOworKwkJICAgIGVsc2UKKysJCQlzYihjdGV4dFtqKzFdLDAsZ2IocHRleHRbai0xMjhdLDAp KTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJLS1qOyAvKiByZXNldCB0 byBsYXN0IG9mIHJhbmdlICovCisrCS8qIE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICov CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sZGlyID8gY3RleHRbal0gOiBwdGV4dFtqXSxsZW4s cmZwLAorKwkJICAgIGltb2RlID09IENGQjEpOworKwlmcHJpbnRmKHJmcCwgIlxuIik7ICAvKiBh ZGQgc2VwYXJhdG9yICovCisrCisrCS8qIENvbXB1dGUgbmV4dCBLRVkgKi8KKysJaWYgKGRpciA9 PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIGlmIChpbW9kZSA9PSBDRkI4KQorKwkJeyAvKiBj dCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8fCBDVFtqXSAqLworKwkJZm9yIChuMSA9 IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyArK24xLCAtLW4yKQorKwkJICAgIGNpcGhl cnRleHRbbjFdID0gY3RleHRbai1uMl1bMF07CisrCQl9CisrCSAgICBlbHNlIGlmKGltb2RlID09 IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5c3otMSA7IG4xIDwgYWtleXN6IDsgKytu MSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEsZ2IoY3RleHRbai1uMl0sMCkpOworKwkJ fQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3opCisrCQkgICAgeworKwkJY2FzZSAxMjg6 CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7 CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSs4LCA4 KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJy ZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0s IDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsxNiwgY3RleHRbal0sIDE2KTsKKysJCSAg ICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIGlmIChp bW9kZSA9PSBDRkI4KQorKwkJeyAvKiBjdCA9IENUW2otMTVdIHx8IENUW2otMTRdIHx8IC4uLiB8 fCBDVFtqXSAqLworKwkJZm9yIChuMSA9IDAsIG4yID0gbmtleXN6LTE7IG4xIDwgbmtleXN6OyAr K24xLCAtLW4yKQorKwkJICAgIGNpcGhlcnRleHRbbjFdID0gcHRleHRbai1uMl1bMF07CisrCQl9 CisrCSAgICBlbHNlIGlmKGltb2RlID09IENGQjEpCisrCQl7CisrCQlmb3IobjE9MCxuMj1ha2V5 c3otMSA7IG4xIDwgYWtleXN6IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGNpcGhlcnRleHQsbjEs Z2IocHRleHRbai1uMl0sMCkpOworKwkJfQorKwkgICAgZWxzZQorKwkJc3dpdGNoIChha2V5c3op CisrCQkgICAgeworKwkJY2FzZSAxMjg6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIHB0ZXh0 W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDE5MjoKKysJCSAgICBtZW1jcHkoY2lw aGVydGV4dCwgcHRleHRbai0xXSs4LCA4KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCs4LCBw dGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAyNTY6CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0sIDE2KTsKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCsx NiwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCSAgICB9CisrCS8q IENvbXB1dGUgbmV4dCBrZXk6IEtleVtpKzFdID0gS2V5W2ldIHhvciBjdCAqLworKwlmb3IgKG4g PSAwOyBuIDwgbmtleXN6OyArK24pCisrCSAgICBrZXlbaSsxXVtuXSA9IGtleVtpXVtuXSBeIGNp cGhlcnRleHRbbl07CisrCQorKwkvKiBDb21wdXRlIG5leHQgSVYgYW5kIHRleHQgKi8KKysJaWYg KGRpciA9PSBYRU5DUllQVCkKKysJICAgIHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7Cisr CSAgICBjYXNlIEVDQjoKKysJCW1lbWNweShwdGV4dFswXSwgY3RleHRbal0sIEFFU19CTE9DS19T SVpFKTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAg IGNhc2UgQ0ZCMTI4OgorKwkJbWVtY3B5KGl2W2krMV0sIGN0ZXh0W2pdLCBBRVNfQkxPQ0tfU0la RSk7CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJ CWJyZWFrOworKwkgICAgY2FzZSBDRkI4OgorKwkJLyogSVZbaSsxXSA9IGN0ICovCisrCQlmb3Ig KG4xID0gMCwgbjIgPSAxNTsgbjEgPCAxNjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24x XSA9IGN0ZXh0W2otbjJdWzBdOworKwkJcHRleHRbMF1bMF0gPSBjdGV4dFtqLTE2XVswXTsKKysJ CWJyZWFrOworKwkgICAgY2FzZSBDRkIxOgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjgg OyArK24xLC0tbjIpCisrCQkgICAgc2IoaXZbaSsxXSxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Cisr CQlwdGV4dFswXVswXT1jdGV4dFtqLTEyOF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkg ICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJeworKwkgICAg Y2FzZSBFQ0I6CisrCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7 CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6CisrCSAgICBjYXNl IENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlicmVh azsKKysJICAgIGNhc2UgQ0ZCODoKKysJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyAr K24xLCAtLW4yKQorKwkJICAgIGl2W2krMV1bbjFdID0gcHRleHRbai1uMl1bMF07CisrCQljdGV4 dFswXVswXSA9IHB0ZXh0W2otMTZdWzBdOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjE6Cisr CQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7ICsrbjEsLS1uMikKKysJCSAgICBzYihpdltp KzFdLG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCWN0ZXh0WzBdWzBdPXB0ZXh0W2otMTI4XVsw XSYweDgwOworKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgCisrICAgIHJldHVy biByZXQ7CisrICAgIH0KKysKKysvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PSovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICAjIENv bmZpZyBpbmZvIGZvciB2LW9uZQorKyAgIyBBRVNWUyBNTVQgdGVzdCBkYXRhIGZvciBFQ0IKKysg ICMgU3RhdGUgOiBFbmNyeXB0IGFuZCBEZWNyeXB0CisrICAjIEtleSBMZW5ndGggOiAyNTYKKysg ICMgRnJpIEF1ZyAzMCAwNDowNzoyMiBQTQorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisrCisraW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCisrICAg IHsKKysgICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07CisrICAgIEZJTEUgKmFmcCA9IE5VTEws ICpyZnAgPSBOVUxMOworKyAgICBjaGFyIGlidWZbMjA0OF07CisrICAgIGNoYXIgdGJ1ZlsyMDQ4 XTsKKysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbGdvWzhdID0gIiI7 CisrICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVzdFs4XSA9ICIiOworKyAg ICBpbnQgYWtleXN6ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07 CisrICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7CisrICAgIHVuc2lnbmVkIGNo YXIgcGxhaW50ZXh0WzIwNDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07 CisrICAgIGNoYXIgKnJwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7CisrCisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCisr CXsKKysJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBz dHJjcHkoYWZuLCBycWZpbGUpOworKworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkg PT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisr CSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBp ZiAoIXJzcGZpbGUpCisrCXsKKysJc3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIocmZuLCJy ZXEvIik7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrCWlmICghcnApCisrCSAgICBycD1z dHJzdHIocmZuLCJyZXFcXCIpOworKyNlbmRpZgorKwlhc3NlcnQocnApOworKwltZW1jcHkocnAs InJzcCIsMyk7CisrCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJwLCAiLnJz cCIsIDQpOworKwlyc3BmaWxlID0gcmZuOworKwl9CisrICAgIGlmICgocmZwID0gZm9wZW4ocnNw ZmlsZSwgInciKSkgPT0gTlVMTCkKKysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVz LCAlc1xuIiwgCisrCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9zZShhZnAp OworKwlhZnAgPSBOVUxMOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFlcnIgJiYg KGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0aWR5X2xp bmUodGJ1ZiwgaWJ1Zik7CisrCWlsZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qICAgICAgcHJpbnRm KCJzdGVwPSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7ICovCisrCXN3aXRjaCAoc3RlcCkKKysJICAg IHsKKysJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0g J1xuJykKKysJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCisrCQlpZiAoKCphbGdvID09ICdcMCcp IHx8CisrCQkgICAgKCphbW9kZSA9PSAnXDAnKSB8fAorKwkJICAgIChha2V5c3ogPT0gMCkpCisr CQkgICAgeworKwkJICAgIHByaW50ZigiTWlzc2luZyBBbGdvcml0aG0sIE1vZGUgb3IgS2V5U2l6 ZSAoJXMvJXMvJWQpXG4iLAorKwkJCSAgIGFsZ28sYW1vZGUsYWtleXN6KTsKKysJCSAgICBlcnIg PSAxOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKKysJCSAgICArKyBzdGVwOworKwkJICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYgKGlidWZb MF0gIT0gJyMnKQorKwkJeworKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4i LCBpYnVmKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHByb2Nlc3Mg cHJlYW1ibGUgKi8KKysJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsKKysJCWlm IChha2V5c3opCisrCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLworKwkJ ICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBj dGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKKysJCSAgICBpZiAoc3RybmNtcChwcCwgIkFFU1ZTICIsIDYpID09IDApCisr CQkJeworKwkJCXN0cmNweShhbGdvLCAiQUVTIik7CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwor KwkJCXBwICs9IDY7CisrCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7CisrCQkJbiA9IHhwLXBwOwor KwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlhdGVzdFtuXSA9ICdcMCc7CisrCQkJLyog Z2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLwor KwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJ CQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLworKwkJCWlmIChW RVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3QgPSAlcywgTW9kZSA9ICVzXG4iLCBhdGVzdCwgYW1v ZGUpOworKwkJCX0KKysJCSAgICBlbHNlIGlmIChzdHJuY2FzZWNtcChwcCwgIktleSBMZW5ndGgg OiAiLCAxMykgPT0gMCkKKysJCQl7CisrCQkJYWtleXN6ID0gYXRvaShwcCsxMyk7CisrCQkJaWYg KFZFUkJPU0UpCisrCQkJCXByaW50ZigiS2V5IHNpemUgPSAlZFxuIiwgYWtleXN6KTsKKysJCQl9 CisrCQkgICAgfQorKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBU XSB8IFtERUNSWVBUXSAqLworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQorKwkJeworKwkJZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJCSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VO Q1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBpZiAoc3RybmNhc2Vj bXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMDsKKysJCWVsc2UK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsK KysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSBp ZiAoZGlyID09IC0xKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyBFTkNS WVBUL0RFQ1JZUFQga2V5d29yZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJICAgIGVsc2UgCisr CQlzdGVwID0gMjsKKysKKysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisrCSAgICBmcHV0cyhp YnVmLCByZnApOworKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCWJyZWFrOworKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkKKysJCWJyZWFrOworKworKwkgICAgaWYg KHN0cm5jYXNlY21wKGlidWYsICJLRVkgPSAiLCA2KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJN aXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJ bGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlmIChsZW4gPCAwKQorKwkJ ICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsK KysJCWlmIChzdHJjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwkJICAgIHsKKysJCSAgICBtZW1z ZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAv KiBubyBpdmVjIGZvciBFQ0IgKi8KKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgKytzdGVwOwor KwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCisrCSAgICBm cHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUp ICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOworKwkJZXJyID0gMTsKKysJ CX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZl Yyk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIElW XG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJUHJpbnRW YWx1ZSgiSVYiLCBpVmVjLCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0OiA1OworKwkJfQorKwkg ICAgYnJlYWs7CisrCisrCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLworKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0g IiwgMTIpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKKysJ CWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQgbm4gPSBzdHJsZW4oaWJ1 ZisxMik7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmlu KGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbj1oZXgyYmluKGli dWYrMTIsIHBsYWludGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJp bnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJCSAgICBlcnIgPTE7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOworKwkJICAgIH0K KysJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxl bik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRl c3QgKi8KKysJCSAgICB7CisrCQkgICAgaWYoZG9fbWN0KGFtb2RlLCBha2V5c3osIGFLZXksIGlW ZWMsIAorKwkJCSAgICAgIGRpciwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuLCAKKysJ CQkgICAgICByZnApIDwgMCkKKysJCQlFWElUKDEpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAg ICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBpVmVj LCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBw bGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhFUlRF WFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJ CSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6IC8q IENJUEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYg KHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7CisrCQlw cmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisr CQl7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmluKGli dWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVu ID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAg eworKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIgPTE7 CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKworKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIs IGNpcGhlcnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgPT0gMCkgIC8q IE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJ ICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9k ZSwgYWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9 IGVuY3J5cHQgKi8KKysJCQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAg T3V0cHV0VmFsdWUoIlBMQUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJm cCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsK KysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAn XG4nKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4i KTsKKysJCX0KKysJICAgIGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7 IC8qIE1DVCBhbHJlYWR5IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCBy ZnApOworKwkJfQorKwkgICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQor KyAgICBpZiAocmZwKQorKwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFm cCk7CisrICAgIHJldHVybiBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2lu Z2xlIGZpbGUgb3IgCisrICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGlu IGEgZmlsZS4KKysgIEEgc2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVz dCAtZiB4eHgucmVxCisrICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFl c190ZXN0IC1kIHh4eHh4Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJy ZXEudHh0IiwgKnJzcGZpbGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNo YXIgZm5bMjUwXSA9ICIiLCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29w dCA9IDE7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgx KSkKKysJeworKwlkb19wcmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgor KyAgICBpZiAoYXJnYyA+IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikg PT0gMCkKKysJICAgIHsKKysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3Ry Y2FzZWNtcChhcmd2WzFdLCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOwor KwkgICAgZF9vcHQgPSAwOworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYo IkludmFsaWQgcGFyYW1ldGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJ ICAgIH0KKysJaWYgKGFyZ2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBh cmFtZXRlclxuIik7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkg ICAgcnFsaXN0ID0gYXJndlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBh cmd2WzJdKTsKKysJICAgIHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlm IChkX29wdCkKKysJeyAvKiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZw ID0gZm9wZW4ocnFsaXN0LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9w ZW4gcmVxIGxpc3QgZmlsZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxl IChmZ2V0cyhmbiwgc2l6ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAi XHJcbiIpOworKwkgICAgc3RyY3B5KHJmbiwgZm4pOworKwkgICAgaWYgKFZFUkJPU0UpCisrCQlw cmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShyZm4s IHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAl cyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2UoZnAp OworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9TRSkK KysJICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShm biwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxl ZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAg IHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEz OjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rlc21vdnMuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor QEAgLTAsMCArMSw3MDIgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw NCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgTklTVCBERVMgTW9kZXMg b2YgT3BlcmF0aW9uIFZhbGlkYXRpb24gU3lzdGVtCisrICBUZXN0IFByb2dyYW0KKysKKysgIEJh c2VkIG9uIHRoZSBBRVMgVmFsaWRhdGlvbiBTdWl0ZSwgd2hpY2ggd2FzOgorKyAgRG9uYXRlZCB0 byBPcGVuU1NMIGJ5OgorKyAgVi1PTkUgQ29ycG9yYXRpb24KKysgIDIwMjUwIENlbnR1cnkgQmx2 ZCwgU3VpdGUgMzAwCisrICBHZXJtYW50b3duLCBNRCAyMDg3NAorKyAgVS5TLkEuCisrICAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5 cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIERF UyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKysjZGVmaW5l IERFU19CTE9DS19TSVpFIDgKKysKKysjZGVmaW5lIFZFUkJPU0UgMAorKworK2ludCBERVNUZXN0 KEVWUF9DSVBIRVJfQ1RYICpjdHgsCisrCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5z aWduZWQgY2hhciAqYUtleSwgCisrCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKKysJICAgIGlu dCBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJICAgIHVuc2lnbmVkIGNo YXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBsZW4pCisrICAgIHsKKysgICAgY29uc3Qg RVZQX0NJUEhFUiAqY2lwaGVyID0gTlVMTDsKKysKKysgICAgaWYgKGFrZXlzeiAhPSAxOTIpCisr CXsKKysJcHJpbnRmKCJJbnZhbGlkIGtleSBzaXplOiAlZFxuIiwgYWtleXN6KTsKKysJRVhJVCgx KTsKKysJfQorKworKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNCQyIpID09IDApCisrCWNp cGhlciA9IEVWUF9kZXNfZWRlM19jYmMoKTsKKysgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9k ZSwgIkVDQiIpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19lY2IoKTsKKysgICAgZWxz ZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjY0IikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rl c19lZGUzX2NmYjY0KCk7CisrICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKGFtb2RlLCAiT0ZCIiwg MykgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX29mYigpOworKyAgICBlbHNlIGlmKCFz dHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI4KCk7 CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJY2lwaGVyID0gRVZQ X2Rlc19lZGUzX2NmYjEoKTsKKysgICAgZWxzZQorKwl7CisrCXByaW50ZigiVW5rbm93biBtb2Rl OiAlc1xuIiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGlmIChFVlBfQ2lwaGVy SW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwgYUtleSwgaVZlYywgZGlyKSA8PSAwKQorKwlyZXR1 cm4gMDsKKysgICAgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkKKysJTV9FVlBfQ0lQSEVS X0NUWF9zZXRfZmxhZ3MoY3R4LCBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKTsKKysgICAgRVZQ X0NpcGhlcihjdHgsIG91dCwgaW4sIGxlbik7CisrCisrICAgIHJldHVybiAxOworKyAgICB9Cisr Cisrdm9pZCBEZWJ1Z1ZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVu KQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrICAgIG9s ZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIs IHRhZywgb2xlbiwgb2J1Zik7CisrICAgIH0KKysKKyt2b2lkIHNoaWZ0aW4odW5zaWduZWQgY2hh ciAqZHN0LHVuc2lnbmVkIGNoYXIgKnNyYyxpbnQgbmJpdHMpCisrICAgIHsKKysgICAgaW50IG47 CisrCisrICAgIC8qIG1vdmUgdGhlIGJ5dGVzLi4uICovCisrICAgIG1lbW1vdmUoZHN0LGRzdCtu Yml0cy84LDMqOC1uYml0cy84KTsKKysgICAgLyogYXBwZW5kIG5ldyBkYXRhICovCisrICAgIG1l bWNweShkc3QrMyo4LW5iaXRzLzgsc3JjLChuYml0cys3KS84KTsKKysgICAgLyogbGVmdCBzaGlm dCB0aGUgYml0cyAqLworKyAgICBpZihuYml0cyU4KQorKwlmb3Iobj0wIDsgbiA8IDMqOCA7ICsr bikKKysJICAgIGRzdFtuXT0oZHN0W25dIDw8IChuYml0cyU4KSl8KGRzdFtuKzFdID4+ICg4LW5i aXRzJTgpKTsKKysgICAgfQkKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KKytjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhF UlRFWFQifTsKKytjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJD RkI4IiwiQ0ZCNjQifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENG QjY0fTsKKytpbnQgU2l6ZXNbNl09ezY0LDY0LDY0LDEsOCw2NH07CisrCisrdm9pZCBkb19tY3Qo Y2hhciAqYW1vZGUsIAorKwkgICAgaW50IGFrZXlzeiwgaW50IG51bWtleXMsIHVuc2lnbmVkIGNo YXIgKmFrZXksdW5zaWduZWQgY2hhciAqaXZlYywKKysJICAgIGludCBkaXIsIHVuc2lnbmVkIGNo YXIgKnRleHQsIGludCBsZW4sCisrCSAgICBGSUxFICpyZnApCisrICAgIHsKKysgICAgaW50IGks aW1vZGU7CisrICAgIHVuc2lnbmVkIGNoYXIgbmtbNCo4XTsgLyogbG9uZ2VzdCBrZXkrOCAqLwor KyAgICB1bnNpZ25lZCBjaGFyIHRleHQwWzhdOworKworKyAgICBmb3IgKGltb2RlPTAgOyBpbW9k ZSA8IDYgOyArK2ltb2RlKQorKwlpZighc3RyY21wKGFtb2RlLHRfbW9kZVtpbW9kZV0pKQorKwkg ICAgYnJlYWs7CisrICAgIGlmIChpbW9kZSA9PSA2KQorKwl7IAorKwlwcmludGYoIlVucmVjb2du aXplZCBtb2RlOiAlc1xuIiwgYW1vZGUpOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGZvcihp PTAgOyBpIDwgNDAwIDsgKytpKQorKwl7CisrCWludCBqOworKwlpbnQgbjsKKysJaW50IGtwPWFr ZXlzei82NDsKKysJdW5zaWduZWQgY2hhciBvbGRfaXZbOF07CisrCUVWUF9DSVBIRVJfQ1RYIGN0 eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysJZnByaW50ZihyZnAsIlxuQ09V TlQgPSAlZFxuIixpKTsKKysJaWYoa3AgPT0gMSkKKysJICAgIE91dHB1dFZhbHVlKCJLRVkiLGFr ZXksOCxyZnAsMCk7CisrCWVsc2UKKysJICAgIGZvcihuPTAgOyBuIDwga3AgOyArK24pCisrCQl7 CisrCQlmcHJpbnRmKHJmcCwiS0VZJWQiLG4rMSk7CisrCQlPdXRwdXRWYWx1ZSgiIixha2V5K24q OCw4LHJmcCwwKTsKKysJCX0KKysKKysJaWYoaW1vZGUgIT0gRUNCKQorKwkgICAgT3V0cHV0VmFs dWUoIklWIixpdmVjLDgscmZwLDApOworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJeMV0sdGV4dCxs ZW4scmZwLGltb2RlID09IENGQjEpOworKyNpZiAwCisrCS8qIGNvbXBlbnNhdGUgZm9yIGVuZGlh bm5lc3MgKi8KKysJaWYoaW1vZGUgPT0gQ0ZCMSkKKysJICAgIHRleHRbMF08PD03OworKyNlbmRp ZgorKwltZW1jcHkodGV4dDAsdGV4dCw4KTsKKysKKysJZm9yKGo9MCA7IGogPCAxMDAwMCA7ICsr aikKKysJICAgIHsKKysJICAgIHVuc2lnbmVkIGNoYXIgb2xkX3RleHRbOF07CisrCisrCSAgICBt ZW1jcHkob2xkX3RleHQsdGV4dCw4KTsKKysJICAgIGlmKGogPT0gMCkKKysJCXsKKysJCW1lbWNw eShvbGRfaXYsaXZlYyw4KTsKKysJCURFU1Rlc3QoJmN0eCxhbW9kZSxha2V5c3osYWtleSxpdmVj LGRpcix0ZXh0LHRleHQsbGVuKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCW1lbWNweShv bGRfaXYsY3R4Lml2LDgpOworKwkJRVZQX0NpcGhlcigmY3R4LHRleHQsdGV4dCxsZW4pOworKwkJ fQorKwkgICAgaWYoaiA9PSA5OTk5KQorKwkJeworKwkJT3V0cHV0VmFsdWUodF90YWdbZGlyXSx0 ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7CisrCQkvKgkJbWVtY3B5KGl2ZWMsdGV4dCw4KTsg Ki8KKysJCX0KKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJpdiIsY3R4Lml2LDgpOyAqLworKwkg ICAgLyogYWNjdW11bGF0ZSBtYXRlcmlhbCBmb3IgdGhlIG5leHQga2V5ICovCisrCSAgICBzaGlm dGluKG5rLHRleHQsU2l6ZXNbaW1vZGVdKTsKKysJICAgIC8qCSAgICBEZWJ1Z1ZhbHVlKCJuayIs bmssMjQpOyovCisrCSAgICBpZigoZGlyICYmIChpbW9kZSA9PSBDRkIxIHx8IGltb2RlID09IENG QjggfHwgaW1vZGUgPT0gQ0ZCNjQKKysJCQl8fCBpbW9kZSA9PSBDQkMpKSB8fCBpbW9kZSA9PSBP RkIpCisrCQltZW1jcHkodGV4dCxvbGRfaXYsOCk7CisrCisrCSAgICBpZighZGlyICYmIChpbW9k ZSA9PSBDRkIxIHx8IGltb2RlID09IENGQjggfHwgaW1vZGUgPT0gQ0ZCNjQpKQorKwkJeworKwkJ LyogdGhlIHRlc3Qgc3BlY2lmaWVzIHVzaW5nIHRoZSBvdXRwdXQgb2YgdGhlIHJhdyBERVMgb3Bl cmF0aW9uCisrCQkgICB3aGljaCB3ZSBkb24ndCBoYXZlLCBzbyByZWNvbnN0cnVjdCBpdC4uLiAq LworKwkJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkJICAgIHRleHRbbl1ePW9sZF90ZXh0W25d OworKwkJfQorKwkgICAgfQorKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5W25d Xj1ua1sxNituXTsKKysJZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVs4K25dXj1u a1s4K25dOworKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCisrCSAgICBha2V5WzE2K25dXj1ua1tu XTsKKysJaWYobnVta2V5cyA8IDMpCisrCSAgICBtZW1jcHkoJmFrZXlbMio4XSxha2V5LDgpOwor KwlpZihudW1rZXlzIDwgMikKKysJICAgIG1lbWNweSgmYWtleVs4XSxha2V5LDgpOworKwlERVNf c2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKilha2V5KTsKKysJREVTX3NldF9vZGRfcGFyaXR5 KChERVNfY2Jsb2NrICopKGFrZXkrOCkpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxv Y2sgKikoYWtleSsxNikpOworKwltZW1jcHkoaXZlYyxjdHguaXYsOCk7CisrCisrCS8qIHBvaW50 bGVzcyBleGVyY2lzZSAtIHRoZSBmaW5hbCB0ZXh0IGRvZXNuJ3QgZGVwZW5kIG9uIHRoZQorKwkg ICBpbml0aWFsIHRleHQgaW4gT0ZCIG1vZGUsIHNvIHdobyBjYXJlcyB3aGF0IGl0IGlzPyAoV2hv CisrCSAgIGRlc2lnbmVkIHRoZXNlIHRlc3RzPykgKi8KKysJaWYoaW1vZGUgPT0gT0ZCKQorKwkg ICAgZm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkJdGV4dFtuXT10ZXh0MFtuXV5vbGRfaXZbbl07 CisrCX0KKysgICAgfQorKyAgICAKKytpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAq cnNwZmlsZSkKKysgICAgeworKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKKysgICAgRklM RSAqYWZwID0gTlVMTCwgKnJmcCA9IE5VTEw7CisrICAgIGNoYXIgaWJ1ZlsyMDQ4XSwgdGJ1Zlsy MDQ4XTsKKysgICAgaW50IGlsZW4sIGxlbiwgcmV0ID0gMDsKKysgICAgY2hhciBhbW9kZVs4XSA9 ICIiOworKyAgICBjaGFyIGF0ZXN0WzEwMF0gPSAiIjsKKysgICAgaW50IGFrZXlzej0wOworKyAg ICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsKKysgICAgaW50IGRpciA9IC0xLCBl cnIgPSAwLCBzdGVwID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Cisr ICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsKKysgICAgY2hhciAqcnA7CisrICAg IEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgaW50IG51bWtleXM9MTsKKysgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKKysJ eworKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHN0 cmNweShhZm4sIHJxZmlsZSk7CisrCisrICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9 PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKKysJ ICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIGlm ICghcnNwZmlsZSkKKysJeworKwlzdHJjcHkocmZuLGFmbik7CisrCXJwPXN0cnN0cihyZm4sInJl cS8iKTsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJaWYgKCFycCkKKysJICAgIHJwPXN0 cnN0cihyZm4sInJlcVxcIik7CisrI2VuZGlmCisrCWFzc2VydChycCk7CisrCW1lbWNweShycCwi cnNwIiwzKTsKKysJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOworKwltZW1jcHkocnAsICIucnNw IiwgNCk7CisrCXJzcGZpbGUgPSByZm47CisrCX0KKysgICAgaWYgKChyZnAgPSBmb3Blbihyc3Bm aWxlLCAidyIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKKysJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJZmNsb3NlKGFmcCk7 CisrCWFmcCA9IE5VTEw7CisrCXJldHVybiAtMTsKKysJfQorKyAgICB3aGlsZSAoIWVyciAmJiAo ZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQorKwl7CisrCXRpZHlfbGlu ZSh0YnVmLCBpYnVmKTsKKysJaWxlbiA9IHN0cmxlbihpYnVmKTsKKysJLyoJcHJpbnRmKCJzdGVw PSVkIGlidWY9JXMiLHN0ZXAsaWJ1Zik7Ki8KKysJaWYoc3RlcCA9PSAzICYmICFzdHJjbXAoYW1v ZGUsIkVDQiIpKQorKwkgICAgeworKwkgICAgbWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7 CisrCSAgICBzdGVwID0gKGRpcik/IDQ6IDU7ICAvKiBubyBpdmVjIGZvciBFQ0IgKi8KKysJICAg IH0KKysJc3dpdGNoIChzdGVwKQorKwkgICAgeworKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxl ICovCisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnXG4nKQorKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUg Ki8KKysJCWlmICgqYW1vZGUgPT0gJ1wwJykKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJNaXNz aW5nIE1vZGVcbiIpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAg IHsKKysJCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkJICAgICsrIHN0ZXA7CisrCQkgICAgfQor KwkJfQorKwkgICAgZWxzZSBpZiAoaWJ1ZlswXSAhPSAnIycpCisrCQl7CisrCQlwcmludGYoIklu dmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIsIGlidWYpOworKwkJZXJyID0gMTsKKysJCX0KKysJ ICAgIGVsc2UKKysJCXsgLyogcHJvY2VzcyBwcmVhbWJsZSAqLworKwkJY2hhciAqeHAsICpwcCA9 IGlidWYrMjsKKysJCWludCBuOworKwkJaWYoKmFtb2RlKQorKwkJICAgIHsgLyogaW5zZXJ0IGN1 cnJlbnQgdGltZSAmIGRhdGUgKi8KKysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkg ICAgZnByaW50ZihyZnAsICIjICVzIiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNl CisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYoIXN0cm5jbXAo cHAsIklOVkVSU0UgIiw4KSB8fCAhc3RybmNtcChwcCwiREVTICIsNCkKKysJCSAgICAgICB8fCAh c3RybmNtcChwcCwiVERFUyAiLDUpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlBFUk1VVEFU SU9OICIsMTIpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlNVQlNUSVRVVElPTiAiLDEzKQor KwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJWQVJJQUJMRSAiLDkpKQorKwkJCXsKKysJCQkvKiBn ZXQgdGVzdCB0eXBlICovCisrCQkJaWYoIXN0cm5jbXAocHAsIkRFUyAiLDQpKQorKwkJCSAgICBw cCs9NDsKKysJCQllbHNlIGlmKCFzdHJuY21wKHBwLCJUREVTICIsNSkpCisrCQkJICAgIHBwKz01 OworKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1wcDsKKysJCQlzdHJuY3B5 KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJCS8qIGdldCBtb2RlICov CisrCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIgKi8KKysJCQluID0gc3Ry bGVuKHhwKzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7CisrCQkJYW1vZGVbbl0g PSAnXDAnOworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlpZiAoVkVSQk9TRSkKKysJ CQkJcHJpbnRmKCJUZXN0PSVzLCBNb2RlPSVzXG4iLGF0ZXN0LGFtb2RlKTsKKysJCQl9CisrCQkg ICAgfQorKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMTogIC8qIFtFTkNSWVBUXSB8IFtE RUNSWVBUXSAqLworKwkgICAgaWYoaWJ1ZlswXSA9PSAnXG4nKQorKwkJYnJlYWs7CisrCSAgICBp ZiAoaWJ1ZlswXSA9PSAnWycpCisrCQl7CisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJKytzdGVw OworKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQorKwkJICAg IGRpciA9IDE7CisrCQllbHNlIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkg PT0gMCkKKysJCSAgICBkaXIgPSAwOworKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBwcmludGYo IkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOworKwkJICAgIGVyciA9IDE7CisrCQkgICAg fQorKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNlIGlmIChkaXIgPT0gLTEpCisrCQl7CisrCQll cnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsK KysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSAKKysJCXN0ZXAgPSAyOworKworKwljYXNlIDI6 IC8qIEtFWSA9IHh4eHggKi8KKysJICAgIGlmKCppYnVmID09ICdcbicpCisrCQl7CisrCSAgICAg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAg ICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQorKwkJeworKwkgICAgICAgIGZw dXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgaWYo IXN0cm5jYXNlY21wKGlidWYsIkNPVU5UPSIsNikpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKKysJCWJyZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNh c2VjbXAoaWJ1ZiwiTnVtS2V5cyA9ICIsMTApKQorKwkJeworKwkJbnVta2V5cz1hdG9pKGlidWYr MTApOworKwkJYnJlYWs7CisrCQl9CisrCSAgCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkg ICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSA9ICIsNikpCisrCQl7CisrCQlha2V5c3o9NjQ7 CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOworKwkJaWYgKGxlbiA8IDAp CisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVycj0x OworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxl bik7CisrCQkrK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJL RVlzID0gIiw3KSkKKysJCXsKKysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJiaW4oaWJ1Zis3 LGFLZXkpOworKwkJaWYobGVuICE9IDgpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxp ZCBLRVlcbiIpOworKwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCW1l bWNweShhS2V5KzgsYUtleSw4KTsKKysJCW1lbWNweShhS2V5KzE2LGFLZXksOCk7CisrCQlpYnVm WzRdPSdcMCc7CisrCQlQcmludFZhbHVlKCJLRVlzIixhS2V5LGxlbik7CisrCQkrK3N0ZXA7Cisr CQl9CisrCSAgICBlbHNlIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkiLDMpKQorKwkJeworKwkJ aW50IG49aWJ1ZlszXS0nMSc7CisrCisrCQlha2V5c3o9NjQqMzsKKysJCWxlbj1oZXgyYmluKGli dWYrNyxhS2V5K24qOCk7CisrCQlpZihsZW4gIT0gOCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRm KCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAg fQorKwkJaWJ1Zls0XT0nXDAnOworKwkJUHJpbnRWYWx1ZShpYnVmLGFLZXksbGVuKTsKKysJCWlm KG4gPT0gMikKKysJCSAgICArK3N0ZXA7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlwcmlu dGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBicmVhazsKKysK KysJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAg ICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkgIT0gMCkKKysJCXsKKysJCXByaW50 ZigiTWlzc2luZyBJVlxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJewor KwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVjKTsKKysJCWlmIChsZW4gPCAwKQor KwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgSVZcbiIpOworKwkJICAgIGVyciA9MTsK KysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7 CisrCQlzdGVwID0gKGRpcik/IDQ6IDU7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA0 OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAiLCAxMikgIT0gMCkKKysJCXsKKysJ CXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAg IGVsc2UKKysJCXsKKysJCWludCBubiA9IHN0cmxlbihpYnVmKzEyKTsKKysJCWlmKCFzdHJjbXAo YW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4 dCk7CisrCQllbHNlCisrCQkgICAgbGVuPWhleDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKKysJ CWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhU OiAlcyIsIGlidWYrMTIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9 CisrCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQorKwkJICAgIHsKKysJCSAgICBwcmlu dGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7CisrCQkgICAgfQorKwkJUHJpbnRWYWx1ZSgiUExBSU5U RVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRl c3QsICJNb250ZSIpID09IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJ ICAgIGRvX21jdChhbW9kZSxha2V5c3osbnVta2V5cyxhS2V5LGlWZWMsZGlyLHBsYWludGV4dCxs ZW4scmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChkaXIg PT0gMSk7CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5LCBp VmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJ ICBjaXBoZXJ0ZXh0LCBwbGFpbnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIkNJUEhF UlRFWFQiLGNpcGhlcnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKTsK KysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDU6 IC8qIENJUEhFUlRFWFQgPSB4eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAg aWYgKHN0cm5jYXNlY21wKGlidWYsICJDSVBIRVJURVhUID0gIiwgMTMpICE9IDApCisrCQl7Cisr CQlwcmludGYoIk1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNl CisrCQl7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkgICAgbGVuPWJpbnQyYmlu KGlidWYrMTMsc3RybGVuKGlidWYrMTMpLTEsY2lwaGVydGV4dCk7CisrCQllbHNlCisrCQkgICAg bGVuID0gaGV4MmJpbihpYnVmKzEzLGNpcGhlcnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkg ICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBDSVBIRVJURVhUXG4iKTsKKysJCSAgICBlcnIg PTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJCisrCQlQcmludFZhbHVlKCJDSVBIRVJU RVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJNb250ZSIpID09 IDApICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9k ZSwgYWtleXN6LCBudW1rZXlzLCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQs IGxlbiwgcmZwKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGFzc2VydChk aXIgPT0gMCk7CisrCQkgICAgcmV0ID0gREVTVGVzdCgmY3R4LCBhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJ CQkJICBwbGFpbnRleHQsIGNpcGhlcnRleHQsIGxlbik7CisrCQkgICAgT3V0cHV0VmFsdWUoIlBM QUlOVEVYVCIsKHVuc2lnbmVkIGNoYXIgKilwbGFpbnRleHQsbGVuLHJmcCwKKysJCQkJIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKTsKKysJCSAgICB9CisrCQlzdGVwID0gNjsKKysJCX0KKysJICAgIGJy ZWFrOworKworKwljYXNlIDY6CisrCSAgICBpZiAoaWJ1ZlswXSAhPSAnXG4nKQorKwkJeworKwkJ ZXJyID0gMTsKKysJCXByaW50ZigiTWlzc2luZyB0ZXJtaW5hdG9yXG4iKTsKKysJCX0KKysJICAg IGVsc2UgaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpICE9IDApCisrCQl7IC8qIE1DVCBhbHJlYWR5 IGFkZGVkIHRlcm1pbmF0aW5nIG5sICovCisrCQlmcHV0cyhpYnVmLCByZnApOworKwkJfQorKwkg ICAgc3RlcCA9IDE7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICBpZiAocmZwKQor KwlmY2xvc2UocmZwKTsKKysgICAgaWYgKGFmcCkKKysJZmNsb3NlKGFmcCk7CisrICAgIHJldHVy biBlcnI7CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrICBQcm9jZXNzZXMgZWl0aGVyIGEgc2luZ2xlIGZpbGUgb3IgCisr ICBhIHNldCBvZiBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgcGFzc2VkIGluIGEgZmlsZS4KKysgIEEg c2luZ2xlIGZpbGUgaXMgc3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZiB4eHgucmVxCisr ICBBIHNldCBvZiBmaWxlcyBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190ZXN0IC1kIHh4eHh4 Lnh4eAorKyAgVGhlIGRlZmF1bHQgaXM6IC1kIHJlcS50eHQKKystLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisraW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQorKyAgICB7CisrICAgIGNoYXIgKnJxbGlzdCA9ICJyZXEudHh0IiwgKnJzcGZp bGUgPSBOVUxMOworKyAgICBGSUxFICpmcCA9IE5VTEw7CisrICAgIGNoYXIgZm5bMjUwXSA9ICIi LCByZm5bMjU2XSA9ICIiOworKyAgICBpbnQgZl9vcHQgPSAwLCBkX29wdCA9IDE7CisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19w cmludF9lcnJvcnMoKTsKKysJRVhJVCgxKTsKKysJfQorKyNlbmRpZgorKyAgICBpZiAoYXJnYyA+ IDEpCisrCXsKKysJaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1kIikgPT0gMCkKKysJICAgIHsK KysJICAgIGRfb3B0ID0gMTsKKysJICAgIH0KKysJZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzFd LCAiLWYiKSA9PSAwKQorKwkgICAgeworKwkgICAgZl9vcHQgPSAxOworKwkgICAgZF9vcHQgPSAw OworKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBwcmludGYoIkludmFsaWQgcGFyYW1l dGVyOiAlc1xuIiwgYXJndlsxXSk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGFy Z2MgPCAzKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJNaXNzaW5nIHBhcmFtZXRlclxuIik7Cisr CSAgICByZXR1cm4gMDsKKysJICAgIH0KKysJaWYgKGRfb3B0KQorKwkgICAgcnFsaXN0ID0gYXJn dlsyXTsKKysJZWxzZQorKwkgICAgeworKwkgICAgc3RyY3B5KGZuLCBhcmd2WzJdKTsKKysJICAg IHJzcGZpbGUgPSBhcmd2WzNdOworKwkgICAgfQorKwl9CisrICAgIGlmIChkX29wdCkKKysJeyAv KiBsaXN0IG9mIGZpbGVzIChkaXJlY3RvcnkpICovCisrCWlmICghKGZwID0gZm9wZW4ocnFsaXN0 LCAiciIpKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiQ2Fubm90IG9wZW4gcmVxIGxpc3QgZmls ZVxuIik7CisrCSAgICByZXR1cm4gLTE7CisrCSAgICB9CisrCXdoaWxlIChmZ2V0cyhmbiwgc2l6 ZW9mKGZuKSwgZnApKQorKwkgICAgeworKwkgICAgc3RydG9rKGZuLCAiXHJcbiIpOworKwkgICAg c3RyY3B5KHJmbiwgZm4pOworKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsK KysJICAgIGlmIChwcm9jX2ZpbGUocmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+ IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJ CX0KKysJICAgIH0KKysJZmNsb3NlKGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxl ICovCisrCXsKKysJaWYgKFZFUkJPU0UpCisrCQlwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBm bik7CisrCWlmIChwcm9jX2ZpbGUoZm4sIHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRm KCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJ fQorKyAgICBFWElUKDApOworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMKKy0t LSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMJ MjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAw MDAwMDAwICswMTAwCitAQCAtMCwwICsxLDUzNyBAQAorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8c3RkaW8uaD4K KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgICBwcmludGYoIk5v IEZJUFMgRFNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKyNlbHNlCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlw ZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyB2b2lkIHBibihjb25z dCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCBsZW4sIGk7CisrCXVuc2lnbmVk IGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKKysJdG1wID0gT1BFTlNTTF9t YWxsb2MobGVuKTsKKysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9y eSBhbGxvY2F0aW9uIGVycm9yXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJQk5fYm4yYmluKGJu LCB0bXApOworKwlwcmludGYoIiVzID0gIiwgbmFtZSk7CisrCWZvciAoaSA9IDA7IGkgPCBsZW47 IGkrKykKKysJCXByaW50ZigiJTAyWCIsIHRtcFtpXSk7CisrCWZwdXRzKCJcbiIsIHN0ZG91dCk7 CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwlyZXR1cm47CisrCX0KKysKKyt2b2lkIHByaW1lcygp CisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNDBdOworKyAgICBjaGFyIGxidWZbMTAyNDBdOwor KyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXpl b2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlpZiAo IXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOwor KwlpZighc3RyY21wKGtleXdvcmQsIlByaW1lIikpCisrCSAgICB7CisrCSAgICBCSUdOVU0gKnBw OworKworKwkgICAgcHA9Qk5fbmV3KCk7CisrCSAgICBkb19oZXgyYm4oJnBwLHZhbHVlKTsKKysJ ICAgIHByaW50ZigicmVzdWx0PSAlY1xuIiwKKysJCSAgIEJOX2lzX3ByaW1lX2V4KHBwLDIwLE5V TEwsTlVMTCkgPyAnUCcgOiAnRicpOworKwkgICAgfQkgICAgCisrCX0KKysgICAgfQorKworK3Zv aWQgcHFnKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrCisr ICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlm ICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1 dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3Jk LCJbbW9kIikpCisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5 d29yZCwiTiIpKQorKwkgICAgeworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAgICBw cmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysKKysJICAgIHdoaWxlKG4tLSkKKysJCXsK KysJCXVuc2lnbmVkIGNoYXIgc2VlZFsyMF07CisrCQlEU0EgKmRzYTsKKysJCWludCBjb3VudGVy OworKwkJdW5zaWduZWQgbG9uZyBoOworKwkJZHNhID0gRklQU19kc2FfbmV3KCk7CisrCisrCQlp ZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDAsJmNvdW50ZXIs JmgsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7Cisr CQkJfQorKwkJcGJuKCJQIixkc2EtPnApOworKwkJcGJuKCJRIixkc2EtPnEpOworKwkJcGJuKCJH Iixkc2EtPmcpOworKwkJcHYoIlNlZWQiLHNlZWQsMjApOworKwkJcHJpbnRmKCJjID0gJWRcbiIs Y291bnRlcik7CisrCQlwcmludGYoIkggPSAlbHhcbiIsaCk7CisrCQlwdXRjKCdcbicsc3Rkb3V0 KTsKKysJCX0KKysJICAgIH0KKysJZWxzZQorKwkgICAgZnB1dHMoYnVmLHN0ZG91dCk7CisrCX0K KysgICAgfQorKworK3ZvaWQgcHFndmVyKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsK KysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAg IEJJR05VTSAqcCA9IE5VTEwsICpxID0gTlVMTCwgKmcgPSBOVUxMOworKyAgICBpbnQgY291bnRl ciwgY291bnRlcjI7CisrICAgIHVuc2lnbmVkIGxvbmcgaCwgaDI7CisrICAgIERTQSAqZHNhPU5V TEw7CisrICAgIGludCBubW9kPTA7CisrICAgIHVuc2lnbmVkIGNoYXIgc2VlZFsxMDI0XTsKKysK KysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJ aWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlm cHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlmcHV0cyhidWYsIHN0ZG91 dCk7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlNlZWQiKSkKKysJICAgIHsKKysJICAgIGlu dCBzbGVuID0gaGV4MmJpbih2YWx1ZSwgc2VlZCk7CisrCSAgICBpZiAoc2xlbiAhPSAyMCkKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiU2VlZCBwYXJzZSBsZW5ndGggZXJyb3JcbiIpOworKwkJ ZXhpdCAoMSk7CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJjIikp CisrCSAgICBjb3VudGVyID1hdG9pKGJ1Zis0KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQs IkgiKSkKKysJICAgIHsKKysJICAgIGggPSBhdG9pKHZhbHVlKTsKKysJICAgIGlmICghcCB8fCAh cSB8fCAhZykKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJ ZXhpdCAoMSk7CisrCQl9CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICgh RFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMjAgLCZjb3VudGVyMiwm aDIsTlVMTCkpCisrCQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7Cisr CQkJfQorKyAgICAgICAgICAgIGlmIChCTl9jbXAoZHNhLT5wLCBwKSB8fCBCTl9jbXAoZHNhLT5x LCBxKSB8fCBCTl9jbXAoZHNhLT5nLCBnKQorKwkJfHwgKGNvdW50ZXIgIT0gY291bnRlcjIpIHx8 IChoICE9IGgyKSkKKysJICAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAgZWxzZQor KwkgICAgCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCSAgICBCTl9mcmVlKHApOworKwkgICAg Qk5fZnJlZShxKTsKKysJICAgIEJOX2ZyZWUoZyk7CisrCSAgICBwID0gTlVMTDsKKysJICAgIHEg PSBOVUxMOworKwkgICAgZyA9IE5VTEw7CisrCSAgICBGSVBTX2RzYV9mcmVlKGRzYSk7CisrCSAg ICBkc2EgPSBOVUxMOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysvKiBLZXlwYWlyIHZlcmlm aWNhdGlvbiByb3V0aW5lLiBOQjogdGhpcyBpc24ndCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBGSVBT MTQwLTIKKysgKiBhbGdvcml0aG0gdGVzdHMuIEl0IGlzIGFuIGFkZGl0aW9uYWwgdGVzdCB0byBw ZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gdGhlCisrICogb3V0cHV0IG9mIHRoZSBLZXlQYWlyIHRl c3QuCisrICovCisrCisrc3RhdGljIGludCBkc3NfcGFyYW1jaGVjayhpbnQgbm1vZCwgQklHTlVN ICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqZywKKysJCQkJCQkJQk5fQ1RYICpjdHgpCisrICAgIHsK KysgICAgQklHTlVNICpyZW0gPSBOVUxMOworKyAgICBpZiAoQk5fbnVtX2JpdHMocCkgIT0gbm1v ZCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9udW1fYml0cyhxKSAhPSAxNjApCisrCXJldHVy biAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocCwgQk5fcHJpbWVfY2hlY2tzLCBjdHgsIE5V TEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICBpZiAoQk5faXNfcHJpbWVfZXgocSwgQk5fcHJp bWVfY2hlY2tzLCBjdHgsIE5VTEwpICE9IDEpCisrCXJldHVybiAwOworKyAgICByZW0gPSBCTl9u ZXcoKTsKKysgICAgaWYgKCFCTl9tb2QocmVtLCBwLCBxLCBjdHgpIHx8ICFCTl9pc19vbmUocmVt KQorKyAgICAJfHwgKEJOX2NtcChnLCBCTl92YWx1ZV9vbmUoKSkgPD0gMCkKKysJfHwgIUJOX21v ZF9leHAocmVtLCBnLCBxLCBwLCBjdHgpIHx8ICFCTl9pc19vbmUocmVtKSkKKysJeworKwlCTl9m cmVlKHJlbSk7CisrCXJldHVybiAwOworKwl9CisrICAgIC8qIFRvZG86IGNoZWNrIGcgKi8KKysg ICAgQk5fZnJlZShyZW0pOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3ZvaWQga2V5dmVy KCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOwor KyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIEJJR05VTSAqcCA9IE5VTEwsICpxID0g TlVMTCwgKmcgPSBOVUxMLCAqWCA9IE5VTEwsICpZID0gTlVMTDsKKysgICAgQklHTlVNICpZMjsK KysgICAgQk5fQ1RYICpjdHggPSBOVUxMOworKyAgICBpbnQgbm1vZD0wLCBwYXJhbWNoZWNrID0g MDsKKysKKysgICAgY3R4ID0gQk5fQ1RYX25ldygpOworKyAgICBZMiA9IEJOX25ldygpOworKwor KyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlp ZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZw dXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29y ZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgaWYgKHApCisrCQlCTl9mcmVlKHApOworKwkgICAg cCA9IE5VTEw7CisrCSAgICBpZiAocSkKKysJCUJOX2ZyZWUocSk7CisrCSAgICBxID0gTlVMTDsK KysJICAgIGlmIChnKQorKwkJQk5fZnJlZShnKTsKKysJICAgIGcgPSBOVUxMOworKwkgICAgcGFy YW1jaGVjayA9IDA7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiWCIpKQorKwkgICAgWD1oZXgyYm4odmFsdWUpOworKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgeworKwkgICAgWT1oZXgyYm4odmFsdWUpOwor KwkgICAgaWYgKCFwIHx8ICFxIHx8ICFnIHx8ICFYIHx8ICFZKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJQYXJzZSBFcnJvclxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIHBibigi UCIscCk7CisrCSAgICBwYm4oIlEiLHEpOworKwkgICAgcGJuKCJHIixnKTsKKysJICAgIHBibigi WCIsWCk7CisrCSAgICBwYm4oIlkiLFkpOworKwkgICAgaWYgKCFwYXJhbWNoZWNrKQorKwkJewor KwkJaWYgKGRzc19wYXJhbWNoZWNrKG5tb2QsIHAsIHEsIGcsIGN0eCkpCisrCQkJcGFyYW1jaGVj ayA9IDE7CisrCQllbHNlCisrCQkJcGFyYW1jaGVjayA9IC0xOworKwkJfQorKwkgICAgaWYgKHBh cmFtY2hlY2sgIT0gMSkKKysJICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAgICBlbHNl CisrCQl7CisrCQlpZiAoIUJOX21vZF9leHAoWTIsIGcsIFgsIHAsIGN0eCkgfHwgQk5fY21wKFky LCBZKSkKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKKysJICAgICAgICBlbHNlCisr CSAgICAJCXByaW50ZigiUmVzdWx0ID0gUFxuIik7CisrCQl9CisrCSAgICBCTl9mcmVlKFgpOwor KwkgICAgQk5fZnJlZShZKTsKKysJICAgIFggPSBOVUxMOworKwkgICAgWSA9IE5VTEw7CisrCSAg ICB9CisrCX0KKysJaWYgKHApCisrCSAgICBCTl9mcmVlKHApOworKwlpZiAocSkKKysJICAgIEJO X2ZyZWUocSk7CisrCWlmIChnKQorKwkgICAgQk5fZnJlZShnKTsKKysJaWYgKFkyKQorKwkgICAg Qk5fZnJlZShZMik7CisrICAgIH0KKysKKyt2b2lkIGtleXBhaXIoKQorKyAgICB7CisrICAgIGNo YXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQs ICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVv ZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAm dmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRp bnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRv aSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAg ICBEU0EgKmRzYTsKKysJICAgIGludCBuPWF0b2kodmFsdWUpOworKworKwkgICAgcHJpbnRmKCJb bW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAg IGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5V TEwsTlVMTCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9 CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBw Ym4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysKKysJICAgIHdoaWxl KG4tLSkKKysJCXsKKysJCWlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJCXsKKysJCQlk b19wcmludF9lcnJvcnMoKTsKKysJCQlleGl0KDEpOworKwkJCX0KKysKKysJCXBibigiWCIsZHNh LT5wcml2X2tleSk7CisrCQlwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCQlwdXRjKCdcbicsc3Rk b3V0KTsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBzaWdnZW4oKQorKyAg ICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNo YXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgRFNBICpkc2E9TlVM TDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisr CXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7 CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21w KGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAg ICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGlmIChkc2EpCisrCQlGSVBT X2RzYV9mcmVlKGRzYSk7CisrCSAgICBkc2EgPSBGSVBTX2RzYV9uZXcoKTsKKysJICAgIGlmICgh RFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLE5VTEwsMCxOVUxMLE5VTEwsTlVM TCkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAg ICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7CisrCSAgICBwYm4oIkci LGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAgIH0KKysJZWxzZSBpZigh c3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgdW5zaWduZWQgY2hhciBtc2db MTAyNF07CisrCSAgICB1bnNpZ25lZCBjaGFyIHNidWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50 IHNsZW47CisrCSAgICBpbnQgbjsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgRVZQX01EX0NU WCBtY3R4OworKwkgICAgRFNBX1NJRyAqc2lnOworKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4 KTsKKysKKysJICAgIG49aGV4MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIsbXNnLG4p OworKworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCQl7CisrCQlkb19wcmlu dF9lcnJvcnMoKTsKKysJCWV4aXQoMSk7CisrCQl9CisrCSAgICBway50eXBlID0gRVZQX1BLRVlf RFNBOworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBwYm4oIlkiLGRzYS0+cHViX2tl eSk7CisrCisrCSAgICBFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpOwor KwkgICAgRVZQX1NpZ25VcGRhdGUoJm1jdHgsIG1zZywgbik7CisrCSAgICBFVlBfU2lnbkZpbmFs KCZtY3R4LCBzYnVmLCAmc2xlbiwgJnBrKTsKKysKKysJICAgIHNpZyA9IERTQV9TSUdfbmV3KCk7 CisrCSAgICBGSVBTX2RzYV9zaWdfZGVjb2RlKHNpZywgc2J1Ziwgc2xlbik7CisrCisrCSAgICBw Ym4oIlIiLHNpZy0+cik7CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCSAgICBwdXRjKCdcbics c3Rkb3V0KTsKKysJICAgIERTQV9TSUdfZnJlZShzaWcpOworKwkgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKKysJICAgIH0KKysJfQorKwlpZiAoZHNhKQorKwkJRklQU19kc2FfZnJlZShk c2EpOworKyAgICB9CisrCisrdm9pZCBzaWd2ZXIoKQorKyAgICB7CisrICAgIERTQSAqZHNhPU5V TEw7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIHVu c2lnbmVkIGNoYXIgbXNnWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAg IGludCBubW9kPTAsIG49MDsKKysgICAgRFNBX1NJRyBzZywgKnNpZyA9ICZzZzsKKysKKysgICAg c2lnLT5yID0gTlVMTDsKKysgICAgc2lnLT5zID0gTlVMTDsKKysKKysgICAgd2hpbGUoZmdldHMo YnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZr ZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsK KysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAg IHsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICBpZihkc2EpCisrCQlGSVBTX2RzYV9m cmVlKGRzYSk7CisrCSAgICBkc2E9RklQU19kc2FfbmV3KCk7CisrCSAgICB9CisrCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBkc2EtPnA9aGV4MmJuKHZhbHVlKTsKKysJZWxz ZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIGRzYS0+cT1oZXgyYm4odmFsdWUpOwor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgeworKwkgICAgZHNhLT5nPWhl eDJibih2YWx1ZSk7CisrCisrCSAgICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJ ICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJICAgIHBibigi RyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICBuPWhleDJiaW4odmFsdWUs bXNnKTsKKysJICAgIHB2KCJNc2ciLG1zZyxuKTsKKysJICAgIH0KKysJZWxzZSBpZighc3RyY21w KGtleXdvcmQsIlkiKSkKKysJICAgIGRzYS0+cHViX2tleT1oZXgyYm4odmFsdWUpOworKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiUiIpKQorKwkgICAgc2lnLT5yPWhleDJibih2YWx1ZSk7Cisr CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTIikpCisrCSAgICB7CisrCSAgICBFVlBfTURfQ1RY IG1jdHg7CisrCSAgICBFVlBfUEtFWSBwazsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2lnYnVmWzYw XTsKKysJICAgIHVuc2lnbmVkIGludCBzbGVuOworKwkgICAgaW50IHI7CisrCSAgICBFVlBfTURf Q1RYX2luaXQoJm1jdHgpOworKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysJICAgIHBr LnBrZXkuZHNhID0gZHNhOworKwkgICAgc2lnLT5zPWhleDJibih2YWx1ZSk7CisrCQorKwkgICAg cGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkgICAgcGJuKCJSIixzaWctPnIpOworKwkgICAgcGJu KCJTIixzaWctPnMpOworKworKwkgICAgc2xlbiA9IEZJUFNfZHNhX3NpZ19lbmNvZGUoc2lnYnVm LCBzaWcpOworKwkgICAgRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwp OworKwkgICAgRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIHIgPSBFVlBf VmVyaWZ5RmluYWwoJm1jdHgsIHNpZ2J1Ziwgc2xlbiwgJnBrKTsKKysJICAgIEVWUF9NRF9DVFhf Y2xlYW51cCgmbWN0eCk7CisrCQorKwkgICAgcHJpbnRmKCJSZXN1bHQgPSAlY1xuIiwgciA9PSAx ID8gJ1AnIDogJ0YnKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQorKwl9Cisr ICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBp ZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFtwcmltZXxwcWd8cHFndmVy fGtleXBhaXJ8c2lnZ2VufHNpZ3Zlcl1cbiIsYXJndlswXSk7CisrCWV4aXQoMSk7CisrCX0KKysg ICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4 aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJwcmltZSIpKQorKwlwcmltZXMo KTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZyIpKQorKwlwcWcoKTsKKysgICAg ZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInBxZ3ZlciIpKQorKwlwcWd2ZXIoKTsKKysgICAgZWxz ZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXBhaXIiKSkKKysJa2V5cGFpcigpOworKyAgICBlbHNl IGlmKCFzdHJjbXAoYXJndlsxXSwia2V5dmVyIikpCisrCWtleXZlcigpOworKyAgICBlbHNlIGlm KCFzdHJjbXAoYXJndlsxXSwic2lnZ2VuIikpCisrCXNpZ2dlbigpOworKyAgICBlbHNlIGlmKCFz dHJjbXAoYXJndlsxXSwic2lndmVyIikpCisrCXNpZ3ZlcigpOworKyAgICBlbHNlCisrCXsKKysJ ZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKKysJZXhp dCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMKKy0tLSBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jLmZpcHMJMjAx MC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAw MDAwICswMTAwCitAQCAtMCwwICsxLDIzMCBAQAorKy8qCisrICogQ3J1ZGUgdGVzdCBkcml2ZXIg Zm9yIHByb2Nlc3NpbmcgdGhlIFZTVCBhbmQgTUNUIHRlc3R2ZWN0b3IgZmlsZXMKKysgKiBnZW5l cmF0ZWQgYnkgdGhlIENNVlAgUk5HVlMgcHJvZHVjdC4KKysgKgorKyAqIE5vdGUgdGhlIGlucHV0 IGZpbGVzIGFyZSBhc3N1bWVkIHRvIGhhdmUgYSBfdmVyeV8gc3BlY2lmaWMgZm9ybWF0CisrICog YXMgZGVzY3JpYmVkIGluIHRoZSBOSVNUIGRvY3VtZW50ICJUaGUgUmFuZG9tIE51bWJlciBHZW5l cmF0b3IKKysgKiBWYWxpZGF0aW9uIFN5c3RlbSAoUk5HVlMpIiwgTWF5IDI1LCAyMDA0LgorKyAq CisrICovCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9Q RU5TU0xfRklQUworKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSTkcgc3VwcG9ydFxuIik7Cisr ICAgIHJldHVybiAwOworK30KKysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4K KysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUg ImZpcHNfdXRsLmgiCisrCisrdm9pZCB2c3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIg KmtleSA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKnYgPSBOVUxMOworKyAgICB1bnNpZ25l ZCBjaGFyICpkdCA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgcmV0WzE2XTsKKysgICAgY2hh ciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOworKyAgICBsb25nIGksIGtleWxlbjsKKysKKysgICAga2V5bGVuID0gMDsKKysKKysg ICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1 dHMoYnVmLHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkK KysJCWtleWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIs IDEzKSkKKysJCWtleWxlbiA9IDI0OworKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYt S2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQs ICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVlOworKwlpZighc3RyY21wKGtleXdvcmQs IktleSIpKQorKwkgICAgeworKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBp ZiAoaSAhPSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxl bmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsKKysJCXJldHVybjsKKysJCX0KKysJICAg IH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRUIikpCisrCSAgICB7CisrCSAgICBkdD1o ZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysJICAg IH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYiKSkKKysJICAgIHsKKysJICAgIHY9aGV4 MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJCXJldHVybjsKKysJCX0KKysKKysJICAg IGlmICgha2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkg b3IgRFRcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgRklQU19yYW5kX3NldF9rZXko a2V5LCBrZXlsZW4pOworKwkgICAgRklQU19yYW5kX3NlZWQodiwxNik7CisrCSAgICBGSVBTX3Jh bmRfc2V0X2R0KGR0KTsKKysJICAgIGlmIChGSVBTX3JhbmRfYnl0ZXMocmV0LDE2KSA8PSAwKQor KwkJeworKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOwor KwkgICAgICAgIHJldHVybjsKKysJICAgICAgICB9CisrCisrCSAgICBwdigiUiIscmV0LDE2KTsK KysJICAgIE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAga2V5ID0gTlVMTDsKKysJICAgIE9QRU5T U0xfZnJlZShkdCk7CisrCSAgICBkdCA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUodik7Cisr CSAgICB2ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrdm9pZCBtY3QoKQorKyAg ICB7CisrICAgIHVuc2lnbmVkIGNoYXIgKmtleSA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIg KnYgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICpkdCA9IE5VTEw7CisrICAgIHVuc2lnbmVk IGNoYXIgcmV0WzE2XTsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBsb25nIGksIGtleWxlbjsKKysg ICAgaW50IGo7CisrCisrICAgIGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1Zixz aXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRvdXQpOworKwlp Zighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAxNjsKKysJ ZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlrZXlsZW4gPSAy NDsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykpCisrCQlrZXls ZW4gPSAzMjsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJICAgIHsKKysJ ICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5bGVuKQorKwkJ eworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRc biIsIGtleWxlbik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJEVCIpKQorKwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsK KysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERU IGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2UgaWYoIXN0cmNt cChrZXl3b3JkLCJWIikpCisrCSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Cisr CSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxl bmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8fCAhZHQpCisr CQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsKKysJCXJldHVy bjsKKysJCX0KKysKKysJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysJICAg IEZJUFNfcmFuZF9zZWVkKHYsMTYpOworKwkgICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKysp CisrCQl7CisrCQkgICAgRklQU19yYW5kX3NldF9kdChkdCk7CisrCQkgICAgaWYgKEZJUFNfcmFu ZF9ieXRlcyhyZXQsMTYpIDw9IDApCisrCQkJeworKwkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3Ig Z2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJCSAgICAgICAgcmV0dXJuOworKwkJICAgICAgICB9 CisrCQkgICAgLyogSW5jcmVtZW50IERUICovCisrCQkgICAgZm9yIChqID0gMTU7IGogPj0gMDsg ai0tKQorKwkJCXsKKysJCQlkdFtqXSsrOworKwkJCWlmIChkdFtqXSkKKysJCQkJYnJlYWs7Cisr CQkJfQorKwkJfQorKworKwkgICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVOU1NMX2ZyZWUo a2V5KTsKKysJICAgIGtleSA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQpOworKwkgICAg ZHQgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5VTEw7CisrCSAg ICB9CisrCX0KKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAg ICB7CisrICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW21jdHx2 c3RdXG4iLGFyZ3ZbMF0pOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFGSVBTX21vZGVfc2V0 KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAgIEZJ UFNfcmFuZF9yZXNldCgpOworKyAgICBpZiAoIUZJUFNfcmFuZF90ZXN0X21vZGUoKSkKKysJewor KwlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHNldHRpbmcgUFJORyB0ZXN0IG1vZGVcbiIpOworKwlk b19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighc3RyY21wKGFyZ3Zb MV0sIm1jdCIpKQorKwltY3QoKTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInZzdCIp KQorKwl2c3QoKTsKKysgICAgZWxzZQorKwl7CisrCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93 IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7CisrCWV4aXQoMSk7CisrCX0KKysKKysgICAgcmV0dXJu IDA7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcnNhZ3Rlc3QuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAs MCArMSwzOTAgQEAKKysvKiBmaXBzX3JzYWd0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBw cm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIw MDUsMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxj dHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysj aWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4o MCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisraW50IHJz YV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShG SUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0g KlhwLAorKwkJQklHTlVNICplKTsKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0 LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSk7Cisr CisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVM TCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3Nl dCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVu KGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJ ZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsK KysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIp OworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBl bmQ7CisrCQl9CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIFJTQUdURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQln b3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAo cmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4p KQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xv c2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1Rf TUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKQor Kwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3Jk LCAqdmFsdWU7CisrCVJTQSAqcnNhID0gTlVMTDsKKysJQklHTlVNICpYcDEgPSBOVUxMLCAqWHAy ID0gTlVMTCwgKlhwID0gTlVMTDsKKysJQklHTlVNICpYcTEgPSBOVUxMLCAqWHEyID0gTlVMTCwg KlhxID0gTlVMTDsKKysJQklHTlVNICplID0gTlVMTDsKKysJaW50IHJldCA9IDA7CisrCWludCBs bnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5F TEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwor KworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJd2hp bGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQls bnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVi dWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9 IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0g b3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLworKwkJ aWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJeworKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwg b3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGludWU7CisrCQkJfQorKworKwkJ cSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9IDA7 CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2 YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2 YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJ CXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJd2hpbGUgKCpwID09ICdcbicg fHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAo IXN0cmNtcChrZXl3b3JkLCAieHAxIikpCisrCQkJeworKwkJCWlmIChYcDEgfHwgIWRvX2hleDJi bigmWHAxLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJ4cDIiKSkKKysJCQl7CisrCQkJaWYgKFhwMiB8fCAhZG9faGV4 MmJuKCZYcDIsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIlhwIikpCisrCQkJeworKwkJCWlmIChYcCB8fCAhZG9faGV4 MmJuKCZYcCx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAieHExIikpCisrCQkJeworKwkJCWlmIChYcTEgfHwgIWRvX2hl eDJibigmWHExLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJ4cTIiKSkKKysJCQl7CisrCQkJaWYgKFhxMiB8fCAhZG9f aGV4MmJuKCZYcTIsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVs c2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlhxIikpCisrCQkJeworKwkJCWlmIChYcSB8fCAhZG9f aGV4MmJuKCZYcSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoZSB8fCAhZG9faGV4 MmJuKCZlLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJwMSIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAicDIiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgInAiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgInExIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJx MiIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicSIpKQor KwkJCWNvbnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCWNv bnRpbnVlOworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZCIpKQorKwkJCWNvbnRpbnVl OworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwg b3V0KTsKKysKKysJCWlmIChlICYmIFhwMSAmJiBYcDIgJiYgWHApCisrCQkJeworKwkJCXJzYSA9 IEZJUFNfcnNhX25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWlm ICghcnNhX3ByaW50a2V5MShvdXQsIHJzYSwgWHAxLCBYcDIsIFhwLCBlKSkKKysJCQkJZ290byBl cnJvcjsKKysJCQlCTl9mcmVlKFhwMSk7CisrCQkJWHAxID0gTlVMTDsKKysJCQlCTl9mcmVlKFhw Mik7CisrCQkJWHAyID0gTlVMTDsKKysJCQlCTl9mcmVlKFhwKTsKKysJCQlYcCA9IE5VTEw7Cisr CQkJQk5fZnJlZShlKTsKKysJCQllID0gTlVMTDsKKysJCQl9CisrCisrCQlpZiAocnNhICYmIFhx MSAmJiBYcTIgJiYgWHEpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50a2V5MihvdXQsIHJzYSwg WHExLCBYcTIsIFhxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlCTl9mcmVlKFhxMSk7CisrCQkJ WHExID0gTlVMTDsKKysJCQlCTl9mcmVlKFhxMik7CisrCQkJWHEyID0gTlVMTDsKKysJCQlCTl9m cmVlKFhxKTsKKysJCQlYcSA9IE5VTEw7CisrCQkJRklQU19yc2FfZnJlZShyc2EpOworKwkJCXJz YSA9IE5VTEw7CisrCQkJfQorKwkJfQorKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysKKysJ aWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYp CisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCisrCWlmIChYcDEpCisrCQlCTl9mcmVlKFhw MSk7CisrCWlmIChYcDIpCisrCQlCTl9mcmVlKFhwMik7CisrCWlmIChYcCkKKysJCUJOX2ZyZWUo WHApOworKwlpZiAoWHExKQorKwkJQk5fZnJlZShYcTEpOworKwlpZiAoWHExKQorKwkJQk5fZnJl ZShYcTEpOworKwlpZiAoWHEyKQorKwkJQk5fZnJlZShYcTIpOworKwlpZiAoWHEpCisrCQlCTl9m cmVlKFhxKTsKKysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKwlpZiAocnNhKQorKwkJRklQU19y c2FfZnJlZShyc2EpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJ ZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIs IGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJp bnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIs IEJJR05VTSAqWHAsCisrCQlCSUdOVU0gKmUpCisrCXsKKysJaW50IHJldCA9IDA7CisrCUJJR05V TSAqcDEgPSBOVUxMLCAqcDIgPSBOVUxMOworKwlwMSA9IEJOX25ldygpOworKwlwMiA9IEJOX25l dygpOworKwlpZiAoIXAxIHx8ICFwMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghUlNBX1g5 MzFfZGVyaXZlX2V4KHJzYSwgcDEsIHAyLCBOVUxMLCBOVUxMLCBYcDEsIFhwMiwgWHAsCisrCQkJ CQkJTlVMTCwgTlVMTCwgTlVMTCwgZSwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKworKwlkb19i bl9wcmludF9uYW1lKG91dCwgInAxIiwgcDEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAy IiwgcDIpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInAiLCByc2EtPnApOworKworKwlyZXQg PSAxOworKworKwllcnJvcjoKKysJaWYgKHAxKQorKwkJQk5fZnJlZShwMSk7CisrCWlmIChwMikK KysJCUJOX2ZyZWUocDIpOworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrc3RhdGljIGludCBy c2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhxMSwgQklHTlVN ICpYcTIsIEJJR05VTSAqWHEpCisrCXsKKysJaW50IHJldCA9IDA7CisrCUJJR05VTSAqcTEgPSBO VUxMLCAqcTIgPSBOVUxMOworKwlxMSA9IEJOX25ldygpOworKwlxMiA9IEJOX25ldygpOworKwlp ZiAoIXExIHx8ICFxMikKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghUlNBX1g5MzFfZGVyaXZl X2V4KHJzYSwgTlVMTCwgTlVMTCwgcTEsIHEyLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJCQkJCVhx MSwgWHEyLCBYcSwgTlVMTCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKworKwlkb19ibl9wcmlu dF9uYW1lKG91dCwgInExIiwgcTEpOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEyIiwgcTIp OworKwlkb19ibl9wcmludF9uYW1lKG91dCwgInEiLCByc2EtPnEpOworKwlkb19ibl9wcmludF9u YW1lKG91dCwgIm4iLCByc2EtPm4pOworKwlkb19ibl9wcmludF9uYW1lKG91dCwgImQiLCByc2Et PmQpOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYgKHExKQorKwkJQk5fZnJlZShx MSk7CisrCWlmIChxMikKKysJCUJOX2ZyZWUocTIpOworKworKwlyZXR1cm4gcmV0OworKwl9Cisr CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMv Zmlwc19yc2FzdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfcnNhc3Rlc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3JzYXN0ZXN0LmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0 LmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMzcwIEBA CisrLyogZmlwc19yc2FzdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVu c29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1 LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5n CisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisr ICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9G SVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50 ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vs c2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMgaW50IHJzYV9zdGVzdChG SUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbik7Cisrc3RhdGljIGludCByc2FfcHJpbnRz aWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5zaWduZWQg Y2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwor KworKwlpbnQgcmV0ID0gMSwgU2FsdGxlbiA9IC0xOworKworKwlpZighRklQU19tb2RlX3NldCgx KSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisr CWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCisrCQl7Cisr CQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChTYWx0bGVuIDwgMCkKKysJCQl7Cisr CQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7CisrCQkJ Z290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJYXJndiArPSAyOworKwkJfQorKwll bHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCisrCQl7Cisr CQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2Kys7CisrCQl9CisrCisrCWlmIChh cmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJZWxzZQorKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290 byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9 CisrCisrCWlmICghcnNhX3N0ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBSU0FTVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYg KHJldCkKKysJCWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGlu KSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNs b3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNU X01BWExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNhX3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4s IGludCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwor KwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCVJTQSAqcnNhID0gTlVMTDsKKysJY29uc3QgRVZQ X01EICpkZ3N0ID0gTlVMTDsKKysJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTDsKKysJbG9uZyBN c2dsZW4gPSAtMTsKKysJaW50IGtleWxlbiA9IC0xLCBjdXJyZW50X2tleWxlbiA9IC0xOworKwlp bnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNB X1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQln b3RvIGVycm9yOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVM RU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7 CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsK KysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScp OworKworKwkJLyogSWYgbm8gPSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJCQl7CisrCQkJ aWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250 aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0t ID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUg bGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisr CQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkq cC0tID0gMDsKKysKKysJCS8qIExvb2sgZm9yIFttb2QgPSBYWFhdIGZvciBrZXkgbGVuZ3RoICov CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAiW21vZCIpKQorKwkJCXsKKysJCQlwID0gdmFs dWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCQlpZiAoKnAgIT0gJ10nKQorKwkJCQlnb3RvIHBh cnNlX2Vycm9yOworKwkJCSpwID0gMDsKKysJCQlrZXlsZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlp ZiAoa2V5bGVuIDwgMCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlm ICghc3RyY21wKGtleXdvcmQsICJTSEFBbGciKSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFs dWUsICJTSEExIikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJj bXAodmFsdWUsICJTSEEyMjQiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNl IGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7 CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQ X3NoYTM4NCgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJ ZGdzdCA9IEVWUF9zaGE1MTIoKTsKKysJCQllbHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRl cnIsCisrCQkJCQkiRkFUQUw6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJ CQkJCQl2YWx1ZSk7CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJNc2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSoo LS12YWx1ZSkgPSAnMCc7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJ CQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCisrCQlmcHV0cyhv bGluZWJ1Ziwgb3V0KTsKKysKKysJCS8qIElmIGtleSBsZW5ndGggaGFzIGNoYW5nZWQsIGdlbmVy YXRlIGFuZCBvdXRwdXQgcHVibGljCisrCQkgKiBrZXkgY29tcG9uZW50cyBvZiBuZXcgUlNBIHBy aXZhdGUga2V5LgorKwkJICovCisrCisrCQlpZiAoa2V5bGVuICE9IGN1cnJlbnRfa2V5bGVuKQor KwkJCXsKKysJCQlCSUdOVU0gKmJuX2U7CisrCQkJaWYgKHJzYSkKKysJCQkJRklQU19yc2FfZnJl ZShyc2EpOworKwkJCXJzYSA9IEZJUFNfcnNhX25ldygpOworKwkJCWlmICghcnNhKQorKwkJCQln b3RvIGVycm9yOworKwkJCWJuX2UgPSBCTl9uZXcoKTsKKysJCQlpZiAoIWJuX2UgfHwgIUJOX3Nl dF93b3JkKGJuX2UsIDB4MTAwMSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJaWYgKCFSU0FfWDkz MV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBrZXlsZW4sIGJuX2UsIE5VTEwpKQorKwkJCQlnb3RvIGVy cm9yOworKwkJCUJOX2ZyZWUoYm5fZSk7CisrCQkJZnB1dHMoIm4gPSAiLCBvdXQpOworKwkJCWRv X2JuX3ByaW50KG91dCwgcnNhLT5uKTsKKysJCQlmcHV0cygiXG5lID0gIiwgb3V0KTsKKysJCQlk b19ibl9wcmludChvdXQsIHJzYS0+ZSk7CisrCQkJZnB1dHMoIlxuIiwgb3V0KTsKKysJCQljdXJy ZW50X2tleWxlbiA9IGtleWxlbjsKKysJCQl9CisrCisrCQlpZiAoTXNnICYmIGRnc3QpCisrCQkJ eworKwkJCWlmICghcnNhX3ByaW50c2lnKG91dCwgcnNhLCBkZ3N0LCBNc2csIE1zZ2xlbiwKKysJ CQkJCQkJCVNhbHRsZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cp OworKwkJCU1zZyA9IE5VTEw7CisrCQkJfQorKworKwkJfQorKworKwlyZXQgPSAxOworKworKwll cnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJ aWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChyc2EpCisrCQlG SVBTX3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgor KworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAl ZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJz YV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1 bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbikKKysJeworKwlpbnQg cmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciAqc2lnYnVmID0gTlVMTDsKKysJaW50IGksIHNpZ2xl bjsKKysJLyogRVZQX1BLRVkgc3RydWN0dXJlICovCisrCUVWUF9QS0VZIHBrOworKwlFVlBfTURf Q1RYIGN0eDsKKysJcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2E7 CisrCisrCXNpZ2xlbiA9IFJTQV9zaXplKHJzYSk7CisrCXNpZ2J1ZiA9IE9QRU5TU0xfbWFsbG9j KHNpZ2xlbik7CisrCWlmICghc2lnYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysJRVZQX01EX0NU WF9pbml0KCZjdHgpOworKworKwlpZiAoU2FsdGxlbiA+PSAwKQorKwkJeworKwkJTV9FVlBfTURf Q1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRs ZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKKysJCU1fRVZQX01E X0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKKysJaWYgKCFF VlBfU2lnbkluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAo IUVWUF9TaWduVXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCWlm ICghRVZQX1NpZ25GaW5hbCgmY3R4LCBzaWdidWYsICh1bnNpZ25lZCBpbnQgKikmc2lnbGVuLCAm cGspKQorKwkJZ290byBlcnJvcjsKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKwor KwlmcHV0cygiUyA9ICIsIG91dCk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBzaWdsZW47IGkrKykK KysJCWZwcmludGYob3V0LCAiJTAyWCIsIHNpZ2J1ZltpXSk7CisrCisrCWZwdXRzKCJcbiIsIG91 dCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKworKwlyZXR1cm4gcmV0OworKwl9Cisr I2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlw c19yc2F2dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfcnNhdnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3JzYXZ0ZXN0LmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMJ MjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMzc3IEBACisr LyogZmlwc19yc2F2dGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1Lgor KyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisr ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5v cmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisr ICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICov CisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBT CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50Zigi Tm8gRklQUyBSU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UK KysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBG SUxFICppbiwgaW50IHNhbHRsZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50dmVyKEZJTEUgKm91 dCwKKysJCUJJR05VTSAqbiwgQklHTlVNICplLAorKwkJY29uc3QgRVZQX01EICpkZ3N0LAorKwkJ dW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKKysJCXVuc2lnbmVkIGNoYXIgKlMsIGxv bmcgU2xlbiwgaW50IFNhbHRsZW4pOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKKysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0g MTsKKysJaW50IFNhbHRsZW4gPSAtMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7 CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoKGFy Z2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxl biA9IGF0b2koYXJndlsyXSk7CisrCQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdvdG8gZW5k OworKwkJCX0KKysJCWFyZ2MgLT0gMjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxzZSBpZiAo KGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJU2FsdGxl biA9IC0yOworKwkJYXJnYy0tOworKwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAx KQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwor KworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZv cGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOwor KwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0 cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoIXJzYV90ZXN0KG91dCwgaW4sIFNhbHRsZW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIs ICJGQVRBTCBSU0FWVEVTVCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7 CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJ CWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZj bG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7 CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVM RU4JMTAyNDAKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRs ZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtl eXdvcmQsICp2YWx1ZTsKKysJY29uc3QgRVZQX01EICpkZ3N0ID0gTlVMTDsKKysJQklHTlVNICpu ID0gTlVMTCwgKmUgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMLCAqUyA9IE5V TEw7CisrCWxvbmcgTXNnbGVuLCBTbGVuOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAw OworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwor KwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlm ICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKwl3aGlsZSAoZmdl dHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsK KysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJ CS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAq LworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFy dHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXAg fHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJaWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwg MCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAt IDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNl KCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZh bHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICov CisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7 CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZh bHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21w KGtleXdvcmQsICJuIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZuLHZhbHVlKSkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJlIikpCisrCQkJeworKwkJCWlmICghZG9faGV4MmJuKCZlLHZhbHVlKSkKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTSEFBbGci KSkKKysJCQl7CisrCQkJaWYgKCFzdHJjbXAodmFsdWUsICJTSEExIikpCisrCQkJCWRnc3QgPSBF VlBfc2hhMSgpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyMjQiKSkKKysJCQkJ ZGdzdCA9IEVWUF9zaGEyMjQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjU2 IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjU2KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1 ZSwgIlNIQTM4NCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTM4NCgpOworKwkJCWVsc2UgaWYgKCFz dHJjbXAodmFsdWUsICJTSEE1MTIiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGE1MTIoKTsKKysJCQll bHNlCisrCQkJCXsKKysJCQkJZnByaW50ZihzdGRlcnIsCisrCQkJCQkiRkFUQUw6IHVuc3VwcG9y dGVkIGFsZ29yaXRobSBcIiVzXCJcbiIsCisrCQkJCQkJCQl2YWx1ZSk7CisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJN c2ciKSkKKysJCQl7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlp ZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkgPSAnMCc7CisrCQkJTXNnID0g aGV4MmJpbl9tKHZhbHVlLCAmTXNnbGVuKTsKKysJCQlpZiAoIU1zZykKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJTIikpCisrCQkJ eworKwkJCWlmIChTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFs dWUpICYgMSkKKysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlTID0gaGV4MmJpbl9tKHZhbHVl LCAmU2xlbik7CisrCQkJaWYgKCFTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlJlc3VsdCIpKQorKwkJCWNvbnRpbnVlOworKwkJ ZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsK KysKKysJCWlmIChuICYmIGUgJiYgTXNnICYmIFMgJiYgZGdzdCkKKysJCQl7CisrCQkJaWYgKCFy c2FfcHJpbnR2ZXIob3V0LCBuLCBlLCBkZ3N0LAorKwkJCQkJTXNnLCBNc2dsZW4sIFMsIFNsZW4s IFNhbHRsZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJ CU1zZyA9IE5VTEw7CisrCQkJT1BFTlNTTF9mcmVlKFMpOworKwkJCVMgPSBOVUxMOworKwkJCX0K KysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGlu ZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BF TlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAobikKKysJCUJOX2ZyZWUobik7CisrCWlmIChlKQor KwkJQk5fZnJlZShlKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisr CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4i LCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3By aW50dmVyKEZJTEUgKm91dCwKKysJCUJJR05VTSAqbiwgQklHTlVNICplLAorKwkJY29uc3QgRVZQ X01EICpkZ3N0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwKKysJCXVuc2ln bmVkIGNoYXIgKlMsIGxvbmcgU2xlbiwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJldCA9IDAs IHI7CisrCS8qIFNldHVwIFJTQSBhbmQgRVZQX1BLRVkgc3RydWN0dXJlcyAqLworKwlSU0EgKnJz YV9wdWJrZXkgPSBOVUxMOworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NUWCBjdHg7CisrCXVu c2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisrCXJzYV9wdWJrZXkgPSBGSVBTX3JzYV9uZXcoKTsK KysJaWYgKCFyc2FfcHVia2V5KQorKwkJZ290byBlcnJvcjsKKysJcnNhX3B1YmtleS0+biA9IEJO X2R1cChuKTsKKysJcnNhX3B1YmtleS0+ZSA9IEJOX2R1cChlKTsKKysJaWYgKCFyc2FfcHVia2V5 LT5uIHx8ICFyc2FfcHVia2V5LT5lKQorKwkJZ290byBlcnJvcjsKKysJcGsudHlwZSA9IEVWUF9Q S0VZX1JTQTsKKysJcGsucGtleS5yc2EgPSByc2FfcHVia2V5OworKworKwlFVlBfTURfQ1RYX2lu aXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlNX0VWUF9NRF9DVFhf c2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8 PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJTV9FVlBfTURfQ1RY X3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOworKwlpZiAoIUVWUF9W ZXJpZnlJbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFF VlBfVmVyaWZ5VXBkYXRlKCZjdHgsIE1zZywgTXNnbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCisr CXIgPSBFVlBfVmVyaWZ5RmluYWwoJmN0eCwgUywgU2xlbiwgJnBrKTsKKysKKysKKysJRVZQX01E X0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlpZiAociA8IDApCisrCQlnb3RvIGVycm9yOworKwlF UlJfY2xlYXJfZXJyb3IoKTsKKysKKysJaWYgKHIgPT0gMCkKKysJCWZwdXRzKCJSZXN1bHQgPSBG XG4iLCBvdXQpOworKwllbHNlCisrCQlmcHV0cygiUmVzdWx0ID0gUFxuIiwgb3V0KTsKKysKKysJ cmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChyc2FfcHVia2V5KQorKwkJRklQU19yc2FfZnJl ZShyc2FfcHVia2V5KTsKKysJaWYgKGJ1ZikKKysJCU9QRU5TU0xfZnJlZShidWYpOworKworKwly ZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9maXBzL2NhdnMvZmlwc19zaGF0ZXN0LmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX3NoYXRlc3QuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAs MCArMSwzODggQEAKKysvKiBmaXBzX3NoYXRlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3Rl cGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHBy b2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw NSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisr ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAq IFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkg RXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29t KS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5o PgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKworKyNpZm5k ZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7 CisrICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFggc3VwcG9ydFxuIik7CisrICAgIHJldHVybigw KTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMg aW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKKytzdGF0aWMgaW50IHByaW50X2Rn c3QoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBp bnQgTXNnbGVuKTsKKytzdGF0aWMgaW50IHByaW50X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJ TEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGludCBTZWVkTGVuKTsKKysKKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0 ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQor KwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsx XSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisr CQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQln b3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJ CX0KKysKKysJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBpbikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVy ciwgIkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7 CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJ CWRvX3ByaW50X2Vycm9ycygpOworKworKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZj bG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7 CisrCisrCXJldHVybiByZXQ7CisrCisrCX0KKysKKysjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRT CTEwMjQwMAorKyNkZWZpbmUgU0hBX1RFU1RfTUFYTElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklU UyA+PiAzKSAqIDIpICsgMTAwKQorKworK2ludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICpp bikKKysJeworKwljb25zdCBFVlBfTUQgKm1kID0gTlVMTDsKKysJY2hhciAqbGluZWJ1ZiwgKm9s aW5lYnVmLCAqcCwgKnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJdW5zaWduZWQgY2hh ciAqTXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOworKwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAt MSwgU2VlZExlbiA9IC0xOworKwlpbnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlv bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVm ID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1 ZiB8fCAhb2xpbmVidWYpCisrCQlnb3RvIGVycm9yOworKworKworKwl3aGlsZSAoZmdldHMob2xp bmVidWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0 cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNr aXAgbGVhZGluZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtl eXdvcmQpKQorKwkJCWtleXdvcmQrKzsKKysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJ cCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0 aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsKKysJ CQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysJCQljb250aW51ZTsKKysJCQl9CisrCisrCQlxID0g cCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0tID0gMDsKKysKKysJCSpwID0gMDsKKysJ CXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVl ICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJCXZhbHVl Kys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9 IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsKKysKKysJCWlmICghc3RyY21w KGtleXdvcmQsIltMIikgJiYgKnA9PSddJykKKysJCQl7CisrCQkJc3dpdGNoIChhdG9pKHZhbHVl KSkKKysJCQkJeworKwkJCQljYXNlIDIwOiBtZD1FVlBfc2hhMSgpOyAgIGJyZWFrOworKwkJCQlj YXNlIDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFrOworKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hh MjU2KCk7IGJyZWFrOworKwkJCQljYXNlIDQ4OiBtZD1FVlBfc2hhMzg0KCk7IGJyZWFrOworKwkJ CQljYXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJyZWFrOworKwkJCQlkZWZhdWx0OiBnb3RvIHBh cnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi TGVuIikpCisrCQkJeworKwkJCWlmIChMZW4gIT0gLTEpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7 CisrCQkJTGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYgKExlbiA8IDApCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJLyogT25seSBoYW5kbGUgbXVsdGlwbGVzIG9mIDggYml0cyAqLworKwkJ CWlmIChMZW4gJiAweDcpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKExlbiA+IFNI QV9URVNUX01BWF9CSVRTKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCU1zZ0xlbiA9IExl biA+PiAzOworKwkJCX0KKysKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQor KwkJCXsKKysJCQlsb25nIHRtcGxlbjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJ CSooLS12YWx1ZSkgPSAnMCc7CisrCQkJaWYgKE1zZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0bXBsZW4pOworKwkJCWlmICghTXNnKQorKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlNlZWQiKSkKKysJCQl7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFs dWUpID0gJzAnOworKwkJCWlmIChTZWVkKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCVNl ZWQgPSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVuKTsKKysJCQlpZiAoIVNlZWQpCisrCQkJCWdv dG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQi KSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOworKworKwkJ ZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0g MCkpCisrCQkJeworKwkJCWlmICghcHJpbnRfZGdzdChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCisr CQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsK KysJCQlNc2dMZW4gPSAtMTsKKysJCQlMZW4gPSAtMTsKKysJCQl9CisrCQllbHNlIGlmIChtZCAm JiBTZWVkICYmIChTZWVkTGVuID4gMCkpCisrCQkJeworKwkJCWlmICghcHJpbnRfbW9udGUobWQs IG91dCwgU2VlZCwgU2VlZExlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVl KFNlZWQpOworKwkJCVNlZWQgPSBOVUxMOworKwkJCVNlZWRMZW4gPSAtMTsKKysJCQl9CisrCQor KworKwkJfQorKworKworKwlyZXQgPSAxOworKworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5l YnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVO U1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChNc2cpCisrCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJ aWYgKFNlZWQpCisrCQlPUEVOU1NMX2ZyZWUoU2VlZCk7CisrCisrCXJldHVybiByZXQ7CisrCisr CXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHBy b2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysK KytzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICplbWQsIEZJTEUgKm91dCwKKysJ CXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xlbikKKysJeworKwlpbnQgaSwgbWRsZW47Cisr CXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9TSVpFXTsKKysJaWYgKCFFVlBfRGlnZXN0KE1z ZywgTXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAqKSZtZGxlbiwgZW1kLCBOVUxMKSkKKysJCXsK KysJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBIQVNIXG4iLCBzdGRlcnIpOworKwkJcmV0dXJu IDA7CisrCQl9CisrCWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCWZvciAoaSA9IDA7IGkgPCBtZGxl bjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgbWRbaV0pOworKwlmcHV0cygiXG4iLCBv dXQpOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3Qg RVZQX01EICptZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRM ZW4pCisrCXsKKysJdW5zaWduZWQgaW50IGksIGosIGs7CisrCWludCByZXQgPSAwOworKwlFVlBf TURfQ1RYIGN0eDsKKysJdW5zaWduZWQgY2hhciAqbTEsICptMiwgKm0zLCAqcDsKKysJdW5zaWdu ZWQgaW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNsZW47CisrCisrCUVWUF9NRF9DVFhfaW5pdCgm Y3R4KTsKKysKKysJaWYgKFNlZWRMZW4gPiBFVlBfTUFYX01EX1NJWkUpCisrCQltbGVuID0gU2Vl ZExlbjsKKysJZWxzZQorKwkJbWxlbiA9IEVWUF9NQVhfTURfU0laRTsKKysKKysJbTEgPSBPUEVO U1NMX21hbGxvYyhtbGVuKTsKKysJbTIgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKKysJbTMgPSBP UEVOU1NMX21hbGxvYyhtbGVuKTsKKysKKysJaWYgKCFtMSB8fCAhbTIgfHwgIW0zKQorKwkJZ290 byBtY19lcnJvcjsKKysKKysJbTFsZW4gPSBtMmxlbiA9IG0zbGVuID0gU2VlZExlbjsKKysJbWVt Y3B5KG0xLCBTZWVkLCBTZWVkTGVuKTsKKysJbWVtY3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKKysJ bWVtY3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysKKysJ Zm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQorKwkJeworKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7 IGkrKykKKysJCQl7CisrCQkJRVZQX0RpZ2VzdEluaXRfZXgoJmN0eCwgbWQsIE5VTEwpOworKwkJ CUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0xbGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRl KCZjdHgsIG0yLCBtMmxlbik7CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4p OworKwkJCXAgPSBtMTsKKysJCQltMSA9IG0yOworKwkJCW0xbGVuID0gbTJsZW47CisrCQkJbTIg PSBtMzsKKysJCQltMmxlbiA9IG0zbGVuOworKwkJCW0zID0gcDsKKysJCQlFVlBfRGlnZXN0Rmlu YWxfZXgoJmN0eCwgbTMsICZtM2xlbik7CisrCQkJfQorKwkJZnByaW50ZihvdXQsICJDT1VOVCA9 ICVkXG4iLCBqKTsKKysJCWZwdXRzKCJNRCA9ICIsIG91dCk7CisrCQlmb3IgKGsgPSAwOyBrIDwg bTNsZW47IGsrKykKKysJCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtM1trXSk7CisrCQlmcHV0cygi XG5cbiIsIG91dCk7CisrCQltZW1jcHkobTEsIG0zLCBtM2xlbik7CisrCQltZW1jcHkobTIsIG0z LCBtM2xlbik7CisrCQltMWxlbiA9IG0ybGVuID0gbTNsZW47CisrCQl9CisrCisrCXJldCA9IDE7 CisrCisrCW1jX2Vycm9yOgorKwlpZiAobTEpCisrCQlPUEVOU1NMX2ZyZWUobTEpOworKwlpZiAo bTIpCisrCQlPUEVOU1NMX2ZyZWUobTIpOworKwlpZiAobTMpCisrCQlPUEVOU1NMX2ZyZWUobTMp OworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCXJldHVybiByZXQ7CisrCX0K KysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3V0bC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2Zp cHNfdXRsLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc191 dGwuaC5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmgJMjAxMC0wMS0yMCAxODox Mzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMzQzIEBACisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqCisrICovCisrCisrdm9pZCBkb19wcmludF9lcnJvcnModm9pZCkKKysJeworKwljb25zdCBj aGFyICpmaWxlLCAqZGF0YTsKKysJaW50IGxpbmUsIGZsYWdzOworKwl1bnNpZ25lZCBsb25nIGw7 CisrCXdoaWxlICgobCA9IEVSUl9nZXRfZXJyb3JfbGluZV9kYXRhKCZmaWxlLCAmbGluZSwgJmRh dGEsICZmbGFncykpKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJFUlJPUjolbHg6bGliPSVk LGZ1bmM9JWQscmVhc29uPSVkIgorKwkJCQkiOmZpbGU9JXM6bGluZT0lZDolc1xuIiwKKysJCQls LCBFUlJfR0VUX0xJQihsKSwgRVJSX0dFVF9GVU5DKGwpLCBFUlJfR0VUX1JFQVNPTihsKSwKKysJ CQlmaWxlLCBsaW5lLCBmbGFncyAmIEVSUl9UWFRfU1RSSU5HID8gZGF0YSA6ICIiKTsKKysJCX0K KysJfQorKworK2ludCBoZXgyYmluKGNvbnN0IGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQp CisrICAgIHsKKysgICAgaW50IG4xLCBuMjsKKysgICAgdW5zaWduZWQgY2hhciBjaDsKKysKKysg ICAgZm9yIChuMT0wLG4yPTAgOyBpbltuMV0gJiYgaW5bbjFdICE9ICdcbicgOyApCisrCXsgLyog Zmlyc3QgYnl0ZSAqLworKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkK KysJICAgIGNoID0gaW5bbjErK10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAm JiAoaW5bbjFdIDw9ICdGJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7CisrCWVs c2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAgICBjaCA9IGlu W24xKytdIC0gJ2EnICsgMTA7CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJaWYoIWluW24x XSkKKysJICAgIHsKKysJICAgIG91dFtuMisrXT1jaDsKKysJICAgIGJyZWFrOworKwkgICAgfQor KwlvdXRbbjJdID0gY2ggPDwgNDsKKysJLyogc2Vjb25kIGJ5dGUgKi8KKysJaWYgKChpbltuMV0g Pj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJzAnOwor KwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicpKQorKwkgICAgY2gg PSBpbltuMSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgoaW5bbjFdID49ICdhJykgJiYgKGlu W24xXSA8PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEwOworKwllbHNlCisr CSAgICByZXR1cm4gLTE7CisrCW91dFtuMisrXSB8PSBjaDsKKysJfQorKyAgICByZXR1cm4gbjI7 CisrICAgIH0KKysKKyt1bnNpZ25lZCBjaGFyICpoZXgyYmluX20oY29uc3QgY2hhciAqaW4sIGxv bmcgKnBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciAqcDsKKysJcCA9IE9QRU5TU0xfbWFsbG9j KChzdHJsZW4oaW4pICsgMSkvMik7CisrCSpwbGVuID0gaGV4MmJpbihpbiwgcCk7CisrCXJldHVy biBwOworKwl9CisrCisraW50IGRvX2hleDJibihCSUdOVU0gKipwciwgY29uc3QgY2hhciAqaW4p CisrCXsKKysJdW5zaWduZWQgY2hhciAqcDsKKysJbG9uZyBwbGVuOworKwlpbnQgciA9IDA7Cisr CXAgPSBoZXgyYmluX20oaW4sICZwbGVuKTsKKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCWlm ICghKnByKQorKwkJKnByID0gQk5fbmV3KCk7CisrCWlmICghKnByKQorKwkJcmV0dXJuIDA7Cisr CWlmIChCTl9iaW4yYm4ocCwgcGxlbiwgKnByKSkKKysJCXIgPSAxOworKwlPUEVOU1NMX2ZyZWUo cCk7CisrCXJldHVybiByOworKwl9CisrCisraW50IGRvX2JuX3ByaW50KEZJTEUgKm91dCwgQklH TlVNICpibikKKysJeworKwlpbnQgbGVuLCBpOworKwl1bnNpZ25lZCBjaGFyICp0bXA7CisrCWxl biA9IEJOX251bV9ieXRlcyhibik7CisrCWlmIChsZW4gPT0gMCkKKysJCXsKKysJCWZwdXRzKCIw MCIsIG91dCk7CisrCQlyZXR1cm4gMTsKKysJCX0KKysKKysJdG1wID0gT1BFTlNTTF9tYWxsb2Mo bGVuKTsKKysJaWYgKCF0bXApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSBhbGxv Y2F0aW9uIGVycm9yXG4iKTsKKysJCXJldHVybiAwOworKwkJfQorKwlCTl9ibjJiaW4oYm4sIHRt cCk7CisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAyeCIs IHRtcFtpXSk7CisrCU9QRU5TU0xfZnJlZSh0bXApOworKwlyZXR1cm4gMTsKKysJfQorKworK2lu dCBkb19ibl9wcmludF9uYW1lKEZJTEUgKm91dCwgY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpi bikKKysJeworKwlpbnQgcjsKKysJZnByaW50ZihvdXQsICIlcyA9ICIsIG5hbWUpOworKwlyID0g ZG9fYm5fcHJpbnQob3V0LCBibik7CisrCWlmICghcikKKysJCXJldHVybiAwOworKwlmcHV0cygi XG4iLCBvdXQpOworKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBwYXJzZV9saW5lKGNoYXIgKipw a3csIGNoYXIgKipwdmFsLCBjaGFyICpsaW5lYnVmLCBjaGFyICpvbGluZWJ1ZikKKysJeworKwlj aGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKKysJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVm KTsKKysJa2V5d29yZCA9IGxpbmVidWY7CisrCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwl3 aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQlrZXl3b3JkKys7Cisr CisrCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Cisr CisrCS8qIElmIG5vICc9JyBleGl0ICovCisrCWlmICghcCkKKysJCXJldHVybiAwOworKworKwlx ID0gcCAtIDE7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNz cGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkqcS0tID0gMDsKKysKKysJKnAgPSAwOworKwl2 YWx1ZSA9IHAgKyAxOworKworKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICov CisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQl2YWx1ZSsrOwor KworKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwlwID0gdmFsdWUg KyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgo dW5zaWduZWQgY2hhcikqcCkpCisrCQkqcC0tID0gMDsKKysKKysJKnBrdyA9IGtleXdvcmQ7Cisr CSpwdmFsID0gdmFsdWU7CisrCXJldHVybiAxOworKwl9CisrCisrQklHTlVNICpoZXgyYm4oY29u c3QgY2hhciAqaW4pCisrICAgIHsKKysgICAgQklHTlVNICpwPU5VTEw7CisrCisrICAgIGlmICgh ZG9faGV4MmJuKCZwLCBpbikpCisrCXJldHVybiBOVUxMOworKworKyAgICByZXR1cm4gcDsKKysg ICAgfQorKworK2ludCBiaW4yaGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hh ciAqb3V0KQorKyAgICB7CisrICAgIGludCBuMSwgbjI7CisrICAgIHVuc2lnbmVkIGNoYXIgY2g7 CisrCisrICAgIGZvciAobjE9MCxuMj0wIDsgbjEgPCBsZW4gOyArK24xKQorKwl7CisrCWNoPWlu W24xXSA+PiA0OworKwlpZiAoY2ggPD0gMHgwOSkKKysJICAgIG91dFtuMisrXT1jaCsnMCc7Cisr CWVsc2UKKysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7CisrCWNoPWluW24xXSAmIDB4MGY7Cisr CWlmKGNoIDw9IDB4MDkpCisrCSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBv dXRbbjIrK109Y2gtMTArJ2EnOworKwl9CisrICAgIG91dFtuMl09J1wwJzsKKysgICAgcmV0dXJu IG4yOworKyAgICB9CisrCisrdm9pZCBwdihjb25zdCBjaGFyICp0YWcsY29uc3QgdW5zaWduZWQg Y2hhciAqdmFsLGludCBsZW4pCisrICAgIHsKKysgICAgY2hhciBvYnVmWzIwNDhdOworKworKyAg ICBiaW4yaGV4KHZhbCxsZW4sb2J1Zik7CisrICAgIHByaW50ZigiJXMgPSAlc1xuIix0YWcsb2J1 Zik7CisrICAgIH0KKysKKysvKiBUbyBhdm9pZCBleHRlbnNpdmUgY2hhbmdlcyB0byB0ZXN0IHBy b2dyYW0gYXQgdGhpcyBzdGFnZSBqdXN0IGNvbnZlcnQKKysgKiB0aGUgaW5wdXQgbGluZSBpbnRv IGFuIGFjY2VwdGFibGUgZm9ybS4gS2V5d29yZCBsaW5lcyBjb252ZXJ0ZWQgdG8gZm9ybQorKyAq ICJrZXl3b3JkID0gdmFsdWVcbiIgbm8gbWF0dGVyIHdoYXQgd2hpdGUgc3BhY2UgcHJlc2VudCwg YWxsIG90aGVyIGxpbmVzCisrICoganVzdCBoYXZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNl IHJlbW92ZWQuCisrICovCisrCisraW50IHRpZHlfbGluZShjaGFyICpsaW5lYnVmLCBjaGFyICpv bGluZWJ1ZikKKysJeworKwljaGFyICprZXl3b3JkLCAqdmFsdWUsICpwLCAqcTsKKysJc3RyY3B5 KGxpbmVidWYsIG9saW5lYnVmKTsKKysJa2V5d29yZCA9IGxpbmVidWY7CisrCS8qIFNraXAgbGVh ZGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkp CisrCQlrZXl3b3JkKys7CisrCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwlwID0gc3RyY2hyKGxp bmVidWYsICc9Jyk7CisrCisrCS8qIElmIG5vICc9JyBqdXN0IGNob3AgbGVhZGluZywgdHJhaWxp bmcgd3MgKi8KKysJaWYgKCFwKQorKwkJeworKwkJcCA9IGtleXdvcmQgKyBzdHJsZW4oa2V5d29y ZCkgLSAxOworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikq cCkpCisrCQkJKnAtLSA9IDA7CisrCQlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOworKwkJc3Ry Y2F0KG9saW5lYnVmLCAiXG4iKTsKKysJCXJldHVybiAxOworKwkJfQorKworKwlxID0gcCAtIDE7 CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqcSkpCisrCQkqcS0tID0gMDsKKysKKysJKnAgPSAwOworKwl2YWx1ZSA9IHAg KyAxOworKworKwkvKiBSZW1vdmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXdoaWxl IChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQl2YWx1ZSsrOworKworKwkvKiBS ZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwlwID0gdmFsdWUgKyBzdHJsZW4o dmFsdWUpIC0gMTsKKysKKysJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqcCkpCisrCQkqcC0tID0gMDsKKysKKysJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsK KysJc3RyY2F0KG9saW5lYnVmLCAiID0gIik7CisrCXN0cmNhdChvbGluZWJ1ZiwgdmFsdWUpOwor KwlzdHJjYXQob2xpbmVidWYsICJcbiIpOworKworKwlyZXR1cm4gMTsKKysJfQorKworKy8qIE5C OiB0aGlzIHJldHVybiB0aGUgbnVtYmVyIG9mIF9iaXRzXyByZWFkICovCisraW50IGJpbnQyYmlu KGNvbnN0IGNoYXIgKmluLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCisrICAgIHsKKysg ICAgaW50IG47CisrCisrICAgIG1lbXNldChvdXQsMCxsZW4pOworKyAgICBmb3Iobj0wIDsgbiA8 IGxlbiA7ICsrbikKKysJaWYoaW5bbl0gPT0gJzEnKQorKwkgICAgb3V0W24vOF18PSgweDgwID4+ IChuJTgpKTsKKysgICAgcmV0dXJuIGxlbjsKKysgICAgfQorKworK2ludCBiaW4yYmludChjb25z dCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQg bjsKKysKKysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCisrCW91dFtuXT0oaW5bbi84XSYo MHg4MCA+PiAobiU4KSkpID8gJzEnIDogJzAnOworKyAgICByZXR1cm4gbjsKKysgICAgfQorKwor Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKwor K3ZvaWQgUHJpbnRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikK Kyt7CisrI2lmIFZFUkJPU0UKKysgIGNoYXIgb2J1ZlsyMDQ4XTsKKysgIGludCBvbGVuOworKyAg b2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOworKyAgcHJpbnRmKCIlcyA9ICUuKnNcbiIs IHRhZywgb2xlbiwgb2J1Zik7CisrI2VuZGlmCisrfQorKworK3ZvaWQgT3V0cHV0VmFsdWUoY2hh ciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4sIEZJTEUgKnJmcCxpbnQgYml0bW9k ZSkKKysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrICAgIGludCBvbGVuOworKworKyAg ICBpZihiaXRtb2RlKQorKwlvbGVuPWJpbjJiaW50KHZhbCxsZW4sb2J1Zik7CisrICAgIGVsc2UK KysJb2xlbj1iaW4yaGV4KHZhbCxsZW4sb2J1Zik7CisrCisrICAgIGZwcmludGYocmZwLCAiJXMg PSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNpZiBWRVJCT1NFCisrICAgIHByaW50Zigi JXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOworKyNlbmRpZgorKyAgICB9CisrCitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzX2Vyci5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vZmlwc19lcnIuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2ZpcHNfZXJyLmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHNfZXJyLmMJMjAxMC0wMS0yMCAxODox Mzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNyBAQAorKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2xjb25mLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSAiZmlw c19lcnIuaCIKKysjZWxzZQorK3N0YXRpYyB2b2lkICpkdW1teT0mZHVtbXk7CisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzX2Vyci5oLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwc19lcnIuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2ZpcHNfZXJyLmguZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHNfZXJyLmgJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogY3J5cHRvL2Zp cHNfZXJyLmggKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3 IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAg dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo ZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRl cmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJl IG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5k ICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAq ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxl YXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAT3BlblNTTC5vcmcuCisrICoKKysgKiA1 LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAi T3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMg d2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQ cm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2 ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBP UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK KysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBF WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF UzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9G IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisr ICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pLgorKyAqCisrICovCisrCisrLyogTk9URTogdGhpcyBmaWxlIHdhcyBhdXRvIGdlbmVyYXRl ZCBieSB0aGUgbWtlcnIucGwgc2NyaXB0OiBhbnkgY2hhbmdlcworKyAqIG1hZGUgdG8gaXQgd2ls bCBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgbmV4dCB1cGRhdGVzIHRoaXMgZmlsZSwK KysgKiBvbmx5IHJlYXNvbiBzdHJpbmdzIHdpbGwgYmUgcHJlc2VydmVkLgorKyAqLworKworKyNp bmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KKysKKysvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLworKyNpZm5kZWYgT1BF TlNTTF9OT19FUlIKKysKKysjZGVmaW5lIEVSUl9GVU5DKGZ1bmMpIEVSUl9QQUNLKEVSUl9MSUJf RklQUyxmdW5jLDApCisrI2RlZmluZSBFUlJfUkVBU09OKHJlYXNvbikgRVJSX1BBQ0soRVJSX0xJ Ql9GSVBTLDAscmVhc29uKQorKworK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19zdHJfZnVu Y3RzW109CisrCXsKKyt7RVJSX0ZVTkMoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRI X0JVSUxUSU5fR0VOUEFSQU1TIn0sCisre0VSUl9GVU5DKEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJB TUdFTiksCSJEU0FfQlVJTFRJTl9QQVJBTUdFTiJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RP X1NJR04pLAkiRFNBX2RvX3NpZ24ifSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19WRVJJRlkp LAkiRFNBX2RvX3ZlcmlmeSJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgp LAkiRVZQX0NpcGhlckluaXRfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX0VWUF9ESUdFU1RJTklU X0VYKSwJIkVWUF9EaWdlc3RJbml0X2V4In0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNL X0RTQSksCSJGSVBTX0NIRUNLX0RTQSJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19J TkNPUkVfRklOR0VSUFJJTlQpLAkiRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQifSwKKyt7 RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBKSwJIkZJUFNfQ0hFQ0tfUlNBIn0sCisre0VS Ul9GVU5DKEZJUFNfRl9GSVBTX0RTQV9DSEVDSyksCSJGSVBTX0RTQV9DSEVDSyJ9LAorK3tFUlJf RlVOQyhGSVBTX0ZfRklQU19NT0RFX1NFVCksCSJGSVBTX21vZGVfc2V0In0sCisre0VSUl9GVU5D KEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QpLAkiZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0In0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyksCSJGSVBTX3NlbGZ0 ZXN0X2FlcyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMpLAkiRklQU19z ZWxmdGVzdF9kZXMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBKSwJIkZJ UFNfc2VsZnRlc3RfZHNhIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMp LAkiRklQU19zZWxmdGVzdF9obWFjIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNU X1JORyksCSJGSVBTX3NlbGZ0ZXN0X3JuZyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxG VEVTVF9TSEExKSwJIkZJUFNfc2VsZnRlc3Rfc2hhMSJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfSEFT SF9GSU5BTCksCSJIQVNIX0ZJTkFMIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfQlVJTFRJTl9L RVlHRU4pLAkiUlNBX0JVSUxUSU5fS0VZR0VOIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZ X1BSSVZBVEVfREVDUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfREVDUllQVCJ9LAorK3tFUlJfRlVO QyhGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0VOQ1JZ UFQifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQpLAkiUlNBX0VB WV9QVUJMSUNfREVDUllQVCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5D UllQVCksCSJSU0FfRUFZX1BVQkxJQ19FTkNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0Ff WDkzMV9HRU5FUkFURV9LRVlfRVgpLAkiUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4In0sCisre0VS Ul9GVU5DKEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyksCSJTU0xFQVlfUkFORF9CWVRFUyJ9LAor K3swLE5VTEx9CisrCX07CisrCisrc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9yZWFz b25zW109CisrCXsKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFKSAgICAgICwi Y2Fubm90IHJlYWQgZXhlIn0sCisre0VSUl9SRUFTT04oRklQU19SX0NBTk5PVF9SRUFEX0VYRV9E SUdFU1QpLCJjYW5ub3QgcmVhZCBleGUgZGlnZXN0In0sCisre0VSUl9SRUFTT04oRklQU19SX0NP TlRSQURJQ1RJTkdfRVZJREVOQ0UpLCJjb250cmFkaWN0aW5nIGV2aWRlbmNlIn0sCisre0VSUl9S RUFTT04oRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gpLCJleGUgZGlnZXN0IGRvZXMg bm90IG1hdGNoIn0sCisre0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01B VENIKSwiZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2gifSwKKyt7RVJSX1JFQVNPTihGSVBTX1Jf RklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCksImZpbmdlcnByaW50 IGRvZXMgbm90IG1hdGNoIG5vbnBpYyByZWxvY2F0ZWQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1Jf RklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyksImZpbmdlcnByaW50 IGRvZXMgbm90IG1hdGNoIHNlZ21lbnQgYWxpYXNpbmcifSwKKyt7RVJSX1JFQVNPTihGSVBTX1Jf RklQU19NT0RFX0FMUkVBRFlfU0VUKSwiZmlwcyBtb2RlIGFscmVhZHkgc2V0In0sCisre0VSUl9S RUFTT04oRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKSAsImZpcHMgc2VsZnRlc3QgZmFpbGVk In0sCisre0VSUl9SRUFTT04oRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSCkgICAsImludmFsaWQg a2V5IGxlbmd0aCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9LRVlfVE9PX1NIT1JUKSAgICAgICAg LCJrZXkgdG9vIHNob3J0In0sCisre0VSUl9SRUFTT04oRklQU19SX05PTl9GSVBTX01FVEhPRCkg ICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9QQUlSV0lTRV9U RVNUX0ZBSUxFRCkgLCJwYWlyd2lzZSB0ZXN0IGZhaWxlZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNf Ul9SU0FfREVDUllQVF9FUlJPUikgICAgLCJyc2EgZGVjcnlwdCBlcnJvciJ9LAorK3tFUlJfUkVB U09OKEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUikgICAgLCJyc2EgZW5jcnlwdCBlcnJvciJ9LAor K3tFUlJfUkVBU09OKEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpICAgICAgLCJzZWxmdGVzdCBmYWls ZWQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfVEVTVF9GQUlMVVJFKSAgICAgICAgICwidGVzdCBm YWlsdXJlIn0sCisre0VSUl9SRUFTT04oRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKSAsInVu c3VwcG9ydGVkIHBsYXRmb3JtIn0sCisrezAsTlVMTH0KKysJfTsKKysKKysjZW5kaWYKKysKKyt2 b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKQorKwl7CisrI2lmbmRlZiBPUEVOU1NMX05P X0VSUgorKworKwlpZiAoRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nKEZJUFNfc3RyX2Z1bmN0c1swXS5l cnJvcikgPT0gTlVMTCkKKysJCXsKKysJCUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBTX3N0cl9mdW5j dHMpOworKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX3JlYXNvbnMpOworKwkJfQorKyNl bmRpZgorKwl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNf YWVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNf YWVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNf YWVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwky MDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMDMgQEAKKysv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRp b24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIHN0cnVjdAorKyAgICB7CisrICAgIHVuc2lnbmVkIGNo YXIga2V5WzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAgICB1bnNp Z25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworKyAgICB9IHRlc3RzW109CisrCXsKKysJeworKwl7 IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywKKysJICAweDA4LDB4MDks MHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKKysJeyAweDAwLDB4MTEsMHgyMiwweDMz LDB4NDQsMHg1NSwweDY2LDB4NzcsCisrCSAgMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQs MHhFRSwweEZGIH0sCisrCXsgMHg2OSwweEM0LDB4RTAsMHhEOCwweDZBLDB4N0IsMHgwNCwweDMw LAorKwkgIDB4RDgsMHhDRCwweEI3LDB4ODAsMHg3MCwweEI0LDB4QzUsMHg1QSB9LAorKwl9LAor Kwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X2FlcygpCisrICAgIHsKKysgICAgdGVzdHNbMF0u a2V5WzBdKys7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxmdGVzdF9hZXMoKQorKyAgICB7Cisr ICAgIGludCBuOworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4Owor KyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBmb3Iobj0wIDsgbiA8IDEg OyArK24pCisrCXsKKysJaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfZWNi KCksCisrCQkJCXRlc3RzW25dLmtleSwgTlVMTCwKKysJCQkJdGVzdHNbbl0ucGxhaW50ZXh0LAor KwkJCQl0ZXN0c1tuXS5jaXBoZXJ0ZXh0LAorKwkJCQkxNikgPD0gMCkKKysJCWdvdG8gZXJyOwor Kwl9CisrICAgIHJldCA9IDE7CisrICAgIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51 cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19T RUxGVEVTVF9BRVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiByZXQ7Cisr ICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMv Zmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzLmMKKy0tLSBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTAtMDEtMjAgMTg6 MTM6NDYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlw cy9maXBzLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEs NDE5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrCisrI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworKyNp Zm5kZWYgUEFUSF9NQVgKKysjZGVmaW5lIFBBVEhfTUFYIDEwMjQKKysjZW5kaWYKKysKKytzdGF0 aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbDsKKytzdGF0aWMgaW50IGZpcHNfbW9kZTsKKytzdGF0 aWMgY29uc3Qgdm9pZCAqZmlwc19yYW5kX2NoZWNrOworKworK3N0YXRpYyB2b2lkIGZpcHNfc2V0 X21vZGUoaW50IG9ub2ZmKQorKwl7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25p bmdfdGhyZWFkKCk7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKKysJCWZpcHNfbW9kZSA9IG9ub2ZmOworKwkJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7CisrCQl9CisrCX0KKysKKytzdGF0 aWMgdm9pZCBmaXBzX3NldF9yYW5kX2NoZWNrKGNvbnN0IHZvaWQgKnJhbmRfY2hlY2spCisrCXsK KysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYg KGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3df bG9jaygpOworKwkJZmlwc19yYW5kX2NoZWNrID0gcmFuZF9jaGVjazsKKysJCWlmICghb3duaW5n X3RocmVhZCkgZmlwc193X3VubG9jaygpOworKwkJfQorKwl9CisrCisraW50IEZJUFNfbW9kZSh2 b2lkKQorKwl7CisrCWludCByZXQgPSAwOworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNf b3duaW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlp ZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCQlyZXQgPSBmaXBzX21vZGU7Cisr CQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJCX0KKysJcmV0dXJuIHJl dDsKKysJfQorKworK2NvbnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKQorKwl7CisrCWNv bnN0IHZvaWQgKnJldCA9IDA7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdf dGhyZWFkKCk7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCWlmICghb3du aW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKKysJCXJldCA9IGZpcHNfcmFuZF9jaGVjazsKKysJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwkJfQorKwlyZXR1cm4gcmV0 OworKwl9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpCisrICAgIHsKKysgICAg aW50IHJldCA9IDA7CisrICAgIGlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJeworKwlpbnQgb3du aW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAoIW93bmluZ190 aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCXJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKKysJaWYg KCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7CisrCX0KKysgICAgcmV0dXJuIHJldDsK KysgICAgfQorKworKy8qIFNlbGZ0ZXN0IGZhaWx1cmUgZmF0YWwgZXhpdCByb3V0aW5lLiBUaGlz IHdpbGwgYmUgY2FsbGVkCisrICogZHVyaW5nICphbnkqIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9u LiBJdCBoYXMgdGhlIG1pbmltdW0KKysgKiBvdmVyaGVhZCBwb3NzaWJsZSB0byBhdm9pZCB0b28g YmlnIGEgcGVyZm9ybWFuY2UgaGl0LgorKyAqLworKworK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVj ayh2b2lkKQorKyAgICB7CisrICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2ZhaWwpCisrCXsKKysJT3Bl blNTTERpZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIp OworKwl9CisrICAgIH0KKysKKyt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCkKKysg ICAgeworKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKyAgICB9CisrCisraW50IEZJUFNf c2VsZnRlc3QoKQorKyAgICB7CisrCisrICAgIHJldHVybiBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQor KwkmJiBGSVBTX3NlbGZ0ZXN0X2htYWMoKQorKwkmJiBGSVBTX3NlbGZ0ZXN0X2FlcygpCisrCSYm IEZJUFNfc2VsZnRlc3RfZGVzKCkKKysJJiYgRklQU19zZWxmdGVzdF9yc2EoKQorKwkmJiBGSVBT X3NlbGZ0ZXN0X2RzYSgpOworKyAgICB9CisrCisraW50IEZJUFNfbW9kZV9zZXQoaW50IG9ub2Zm KQorKyAgICB7CisrICAgIGludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7CisrICAgIGludCBm aXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGZp cHNfd19sb2NrKCk7CisrICAgIGZpcHNfc2V0X3N0YXJ0ZWQoKTsKKysgICAgZmlwc19zZXRfb3du aW5nX3RocmVhZCgpOworKworKyAgICBpZihvbm9mZikKKysJeworKwl1bnNpZ25lZCBjaGFyIGJ1 Zls0OF07CisrCisrCWZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrCisrCS8qIERvbid0IGdvIGlu dG8gRklQUyBtb2RlIHR3aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKKysJICAgc2Vl ZGluZyAqLworKwlpZihGSVBTX21vZGUoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfTU9ERV9TRVQsRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCk7CisrCSAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkg ICAgfQorKworKyNpZmRlZiBPUEVOU1NMX0lBMzJfU1NFMgorKwlpZiAoKE9QRU5TU0xfaWEzMmNh cCAmICgxPDwyNXwxPDwyNikpICE9ICgxPDwyNXwxPDwyNikpCisrCSAgICB7CisrCSAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSk7Cisr CSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8g ZW5kOworKwkgICAgfQorKyNlbmRpZgorKworKwkvKiBQZXJmb3JtIFJORyBLQVQgYmVmb3JlIHNl ZWRpbmcgKi8KKysJaWYgKCFGSVBTX3NlbGZ0ZXN0X3JuZygpKQorKwkgICAgeworKwkgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJ ICAgIH0KKysKKysJLyogYXV0b21hZ2ljYWxseSBzZWVkIFBSTkcgaWYgbm90IGFscmVhZHkgc2Vl ZGVkICovCisrCWlmKCFGSVBTX3JhbmRfc3RhdHVzKCkpCisrCSAgICB7CisrCSAgICBpZihSQU5E X2J5dGVzKGJ1ZixzaXplb2YgYnVmKSA8PSAwKQorKwkJeworKwkJZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKKysJCXJldCA9IDA7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJICAgIEZJUFNfcmFuZF9z ZXRfa2V5KGJ1ZiwzMik7CisrCSAgICBGSVBTX3JhbmRfc2VlZChidWYrMzIsMTYpOworKwkgICAg fQorKworKwkvKiBub3cgc3dpdGNoIGludG8gRklQUyBtb2RlICovCisrCWZpcHNfc2V0X3JhbmRf Y2hlY2soRklQU19yYW5kX21ldGhvZCgpKTsKKysJUkFORF9zZXRfcmFuZF9tZXRob2QoRklQU19y YW5kX21ldGhvZCgpKTsKKysJaWYoRklQU19zZWxmdGVzdCgpKQorKwkgICAgZmlwc19zZXRfbW9k ZSgxKTsKKysJZWxzZQorKwkgICAgeworKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJ ICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJICAgIH0KKysJcmV0ID0gMTsKKysJZ290 byBlbmQ7CisrCX0KKysgICAgZmlwc19zZXRfbW9kZSgwKTsKKysgICAgZmlwc19zZWxmdGVzdF9m YWlsID0gMDsKKysgICAgcmV0ID0gMTsKKytlbmQ6CisrICAgIGZpcHNfY2xlYXJfb3duaW5nX3Ro cmVhZCgpOworKyAgICBmaXBzX3dfdW5sb2NrKCk7CisrICAgIHJldHVybiByZXQ7CisrICAgIH0K KysKKyt2b2lkIGZpcHNfd19sb2NrKHZvaWQpCQl7IENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tf RklQUyk7IH0KKyt2b2lkIGZpcHNfd191bmxvY2sodm9pZCkJeyBDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfRklQUyk7IH0KKyt2b2lkIGZpcHNfcl9sb2NrKHZvaWQpCQl7IENSWVBUT19yX2xv Y2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KKyt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCkJeyBDUllQ VE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KKysKKytzdGF0aWMgaW50IGZpcHNfc3Rh cnRlZCA9IDA7Cisrc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlwc190aHJlYWQgPSAwOworKworK3Zv aWQgZmlwc19zZXRfc3RhcnRlZCh2b2lkKQorKwl7CisrCWZpcHNfc3RhcnRlZCA9IDE7CisrCX0K KysKKytpbnQgZmlwc19pc19zdGFydGVkKHZvaWQpCisrCXsKKysJcmV0dXJuIGZpcHNfc3RhcnRl ZDsKKysJfQorKworK2ludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQg cmV0ID0gMDsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJQ1JZUFRPX3Jf bG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWQgIT0gMCAmJiBmaXBz X3RocmVhZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCisrCQkJcmV0ID0gMTsKKysJCUNSWVBUT19y X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiByZXQ7CisrCX0KKysK KytpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCByZXQgPSAwOwor KworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlDUllQVE9fd19sb2NrKENSWVBU T19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVhZCA9PSAwKQorKwkJCXsKKysJCQlmaXBz X3RocmVhZCA9IENSWVBUT190aHJlYWRfaWQoKTsKKysJCQlyZXQgPSAxOworKwkJCX0KKysJCUNS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVybiByZXQ7Cisr CX0KKysKKytpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJl dCA9IDA7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhyZWFkID09IENSWVBUT190aHJl YWRfaWQoKSkKKysJCQl7CisrCQkJZmlwc190aHJlYWQgPSAwOworKwkJCXJldCA9IDE7CisrCQkJ fQorKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJu IHJldDsKKysJfQorKworKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBT aWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKKysgKiBzdXBwbGllZCBpbiB0YnMgdXNpbmcgbWVz YWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0CisrICogZmxhZ3MgbWRfZmxh Z3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAorKyAqIGFkZGl0 aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5zd2VyIHRl c3QKKysgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmljYXRpb24g cHVycG9zZXMgaW4gY2FzZQorKyAqIG9mIGZhaWx1cmUuCisrICovCisrCisraW50IGZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFy ICp0YnMsIGludCB0YnNsZW4sCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25l ZCBpbnQga2F0bGVuLAorKwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRf ZmxhZ3MsCisrCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpCisrCXsJCisrCWludCByZXQgPSAwOwor Kwl1bnNpZ25lZCBjaGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOworKwl1bnNpZ25lZCBp bnQgc2lnbGVuOworKwlFVlBfTURfQ1RYIG1jdHg7CisrCUVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7 CisrCisrCWlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCisrCQkmJiAoUlNBX3NpemUo cGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKQorKwkJeworKwkJc2lnID0gT1BFTlNT TF9tYWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKKysJCWlmICghc2lnKQorKwkJCXsK KysJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRVJSX1JfTUFMTE9D X0ZBSUxVUkUpOworKwkJCXJldHVybiAwOworKwkJCX0KKysJCX0KKysKKysJaWYgKHRic2xlbiA9 PSAtMSkKKysJCXRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7CisrCisrCWlmIChtZF9mbGFn cykKKysJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFncyk7CisrCisrCWlmICgh RVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJ aWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290byBlcnJvcjsK KysJaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4sIHBrZXkpKQorKwkJZ290 byBlcnJvcjsKKysKKysJaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRsZW4pIHx8IG1lbWNtcChr YXQsIHNpZywga2F0bGVuKSkpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIUVWUF9WZXJpZnlJ bml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFFVlBf VmVyaWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisrCQlnb3RvIGVycm9yOworKwlyZXQg PSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5KTsKKysKKysJZXJyb3I6 CisrCWlmIChzaWcgIT0gc2lndG1wKQorKwkJT1BFTlNTTF9mcmVlKHNpZyk7CisrCUVWUF9NRF9D VFhfY2xlYW51cCgmbWN0eCk7CisrCWlmIChyZXQgIT0gMSkKKysJCXsKKysJCUZJUFNlcnIoRklQ U19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9GQUlMVVJFKTsKKysJCWlm IChmYWlsX3N0cikKKysJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5cGU9IiwgZmFpbF9zdHIp OworKwkJcmV0dXJuIDA7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrLyogR2VuZXJhbGl6 ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJl c3VsdAorKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGgg b3JpZ2luYWwgcGxhaW50ZXh0LgorKyAqLworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9D SVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKKysJCQljb25zdCB1bnNp Z25lZCBjaGFyICprZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhl cnRleHQsCisrCQkJaW50IGxlbikKKysJeworKwl1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFY X0NJUEhFUl9URVNUX1NJWkVdOworKwl1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJUEhF Ul9URVNUX1NJWkVdOworKwlPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RF U1RfU0laRSk7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5 LCBpdiwgMSkgPD0gMCkKKysJCXJldHVybiAwOworKwlFVlBfQ2lwaGVyKGN0eCwgY2l0bXAsIHBs YWludGV4dCwgbGVuKTsKKysJaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVydGV4dCwgbGVuKSkKKysJ CXJldHVybiAwOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtl eSwgaXYsIDApIDw9IDApCisrCQlyZXR1cm4gMDsKKysJRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBj aXRtcCwgbGVuKTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCBsZW4pKQorKwkJcmV0 dXJuIDA7CisrCXJldHVybiAxOworKwl9CisrCisrI2lmIDAKKysvKiBUaGUgcHVycG9zZSBvZiB0 aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5kIHRoZSBmdW5jdGlvbgor KyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2NyaXB0IHF1aWV0CisrICov Cisrdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCisrCXsKKysJRklQU2VycihGSVBTX0ZfSEFTSF9GSU5B TCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJfQorKyNlbmRpZgorKworKworKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVz dC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVz dC5jLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTM5IEBACisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIHN0cnVj dAorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysgICAgdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbOF07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKysgICAg fSB0ZXN0czJbXT0KKysJeworKwl7CisrCXsgMHg3YywweDRmLDB4NmUsMHhmNywweGEyLDB4MDQs MHgxNiwweGVjLAorKwkgIDB4MGIsMHg2YiwweDdjLDB4OWUsMHg1ZSwweDE5LDB4YTcsMHhjNCB9 LAorKwl7IDB4MDYsMHhhNywweGQ4LDB4NzksMHhhYSwweGNlLDB4NjksMHhlZiB9LAorKwl7IDB4 NGMsMHgxMSwweDE3LDB4NTUsMHhiZiwweGM0LDB4NGUsMHhmZCB9CisrCX0sCisrCXsKKysJeyAw eDVkLDB4OWUsMHgwMSwweGQzLDB4MjUsMHhjNywweDNlLDB4MzQsCisrCSAgMHgwMSwweDE2LDB4 N2MsMHg4NSwweDIzLDB4ZGYsMHhlMCwweDY4IH0sCisrCXsgMHg5YywweDUwLDB4MDksMHgwZiww eDVlLDB4N2QsMHg2OSwweDdlIH0sCisrCXsgMHhkMiwweDBiLDB4MTgsMHhkZiwweGQ5LDB4MGQs MHg5ZSwweGZmIH0sCisrCX0KKysJfTsKKysKKytzdGF0aWMgc3RydWN0CisrICAgIHsKKysgICAg dW5zaWduZWQgY2hhciBrZXlbMjRdOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsK KysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzM1tdPQorKwl7 CisrCXsKKysJeyAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCSAg MHhGRSwweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLAorKwkgIDB4MTIsMHgzNCww eDU2LDB4NzgsMHg5YSwweGJjLDB4ZGUsMHhmMCB9LAorKwl7IDB4OGYsMHg4ZiwweGJmLDB4OWIs MHg1ZCwweDQ4LDB4YjQsMHgxYyB9LAorKwl7IDB4NTksMHg4YywweGU1LDB4ZDMsMHg2YywweGEy LDB4ZWEsMHgxYiB9LAorKwl9LAorKwl7CisrCXsgMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4 MzIsMHgxMCwweEZFLAorKwkgIDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhF RiwKKysJICAweEVELDB4MzksMHhEOSwweDUwLDB4RkEsMHg3NCwweEJDLDB4QzQgfSwKKysJeyAw eDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYgfSwKKysJeyAweDExLDB4MjUs MHhiMCwweDM1LDB4YmUsMHhhMCwweDgyLDB4ODYgfSwKKysJfSwKKysJfTsKKysKKyt2b2lkIEZJ UFNfY29ycnVwdF9kZXMoKQorKyAgICB7CisrICAgIHRlc3RzMlswXS5wbGFpbnRleHRbMF0rKzsK KysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RlcygpCisrICAgIHsKKysgICAgaW50IG4s IHJldCA9IDA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQg Y29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikK KysJeworKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGVfZWNiKCksCisr CQkJCXRlc3RzMltuXS5rZXksIE5VTEwsCisrCQkJCXRlc3RzMltuXS5wbGFpbnRleHQsIHRlc3Rz MltuXS5jaXBoZXJ0ZXh0LCA4KSkKKysJCWdvdG8gZXJyOworKwl9CisrCisrICAgIC8qIEVuY3J5 cHQvZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLworKyAg ICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCisrCXsKKysJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZj dHgsIEVWUF9kZXNfZWRlM19lY2IoKSwKKysJCQkJdGVzdHMzW25dLmtleSwgTlVMTCwKKysJCQkJ dGVzdHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQorKwkJZ290byBl cnI7CisrCX0KKysgICAgcmV0ID0gMTsKKysgICAgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKCZjdHgpOworKyAgICBpZiAocmV0ID09IDApCisrCSAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0RFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysKKysgICAgcmV0dXJu IHJldDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfZHNh X3NlbGZ0ZXN0LmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAg KzEsMTg2IEBACisrLyogY3J5cHRvL2RzYS9kc2F0ZXN0LmMgKi8KKysvKiBDb3B5cmlnaHQgKEMp IDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlv biB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRo ZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2Nh cGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBh bmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBs eSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwg UlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4g IFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRp b24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhh dCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysg KiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmln aHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJ ZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJl IGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhl IGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwg bWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxp bmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQu Y29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlm IHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3Qg Y3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2lu ZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAg ICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUg YW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysg KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T U0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQg ZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBv cgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0 aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3Ro ZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExp Y2VuY2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIHNlZWQsIG91dF9wLCBvdXRf cSwgb3V0X2cgYXJlIHRha2VuIHRoZSBOSVNUIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyB1 bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0geworKwkweDc3LCAweDhmLCAweDQwLCAweDc0LCAweDZm LCAweDY2LCAweGJlLCAweDMzLCAweGNlLCAweGJlLCAweDk5LCAweDM0LAorKwkweDRjLCAweGZj LCAweGYzLCAweDI4LCAweGFhLCAweDcwLCAweDJkLCAweDNhCisrICAJfTsKKysKKytzdGF0aWMg dW5zaWduZWQgY2hhciBvdXRfcFtdID0geworKwkweGY3LCAweDdjLCAweDFiLCAweDgzLCAweGQ4 LCAweGU4LCAweDVjLCAweDdmLCAweDg1LCAweDMwLCAweDE3LCAweDU3LAorKwkweDIxLCAweDk1 LCAweGZlLCAweDI2LCAweDA0LCAweGViLCAweDQ3LCAweDRjLCAweDNhLCAweDRhLCAweDgxLCAw eDRiLAorKwkweDcxLCAweDJlLCAweGVkLCAweDZlLCAweDRmLCAweDNkLCAweDExLCAweDBmLCAw eDdjLCAweGZlLCAweDM2LCAweDQzLAorKwkweDUxLCAweGQ5LCAweDgxLCAweDM5LCAweDE3LCAw eGRmLCAweDYyLCAweGY2LCAweDljLCAweDAxLCAweGE4LCAweDY5LAorKwkweDcxLCAweGRkLCAw eDI5LCAweDdmLCAweDQ3LCAweGU2LCAweDY1LCAweGE2LCAweDIyLCAweGU4LCAweDZhLCAweDEy LAorKwkweDJiLCAweGMyLCAweDgxLCAweGZmLCAweDMyLCAweDcwLCAweDJmLCAweDllLCAweGNh LCAweDUzLCAweDI2LCAweDQ3LAorKwkweDBmLCAweDU5LCAweGQ3LCAweDllLCAweDJjLCAweGE1 LCAweDA3LCAweGM0LCAweDQ5LCAweDUyLCAweGEzLCAweGU0LAorKwkweDZiLCAweDA0LCAweDAw LCAweDI1LCAweDQ5LCAweGUyLCAweGU2LCAweDdmLCAweDI4LCAweDc4LCAweDk3LCAweGI4LAor KwkweDNhLCAweDMyLCAweDE0LCAweDM4LCAweGEyLCAweDUxLCAweDMzLCAweDIyLCAweDQ0LCAw eDdlLCAweGQ3LCAweGVmLAorKwkweDQ1LCAweGRiLCAweDA2LCAweDRhLCAweGQyLCAweDgyLCAw eDRhLCAweDgyLCAweDJjLCAweGIxLCAweGQ3LCAweGQ4LAorKwkweGI2LCAweDczLCAweDAwLCAw eDRkLCAweDk0LCAweDc3LCAweDk0LCAweGVmCisrCX07CisrCisrc3RhdGljIHVuc2lnbmVkIGNo YXIgb3V0X3FbXSA9IHsKKysJMHhkNCwgMHgwYSwgMHhhYywgMHg5ZiwgMHhiZCwgMHg4YywgMHg4 MCwgMHhjMiwgMHgzOCwgMHg3ZSwgMHgyZSwgMHgwYywKKysJMHg1MiwgMHg1YywgMHhlYSwgMHgz NCwgMHhhMSwgMHg4MywgMHgzMiwgMHhmMworKwl9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFy IG91dF9nW10gPSB7CisrCTB4MzQsIDB4NzMsIDB4OGIsIDB4NTcsIDB4ODQsIDB4OGUsIDB4NTUs IDB4YmYsIDB4NTcsIDB4Y2MsIDB4NDEsIDB4YmIsCisrCTB4NWUsIDB4MmIsIDB4ZDUsIDB4NDIs IDB4ZGQsIDB4MjQsIDB4MjIsIDB4MmEsIDB4MDksIDB4ZWEsIDB4MjYsIDB4MWUsCisrCTB4MTcs IDB4NjUsIDB4Y2IsIDB4MWEsIDB4YjMsIDB4MTIsIDB4NDQsIDB4YTMsIDB4OWUsIDB4OTksIDB4 ZTksIDB4NjMsCisrCTB4ZWIsIDB4MzAsIDB4YjEsIDB4NzgsIDB4N2IsIDB4MDksIDB4NDAsIDB4 MzAsIDB4ZmEsIDB4ODMsIDB4YzIsIDB4MzUsCisrCTB4ZTEsIDB4YzQsIDB4MmQsIDB4NzQsIDB4 MWEsIDB4YjEsIDB4ODMsIDB4NTQsIDB4ZDgsIDB4MjksIDB4ZjQsIDB4Y2YsCisrCTB4N2YsIDB4 NmYsIDB4NjcsIDB4MWMsIDB4MzYsIDB4NDksIDB4ZWUsIDB4NmMsIDB4YTIsIDB4M2MsIDB4MmQs IDB4NmEsCisrCTB4ZTksIDB4ZDMsIDB4OWEsIDB4ZjYsIDB4NTcsIDB4NzgsIDB4NmYsIDB4ZmQs IDB4MzMsIDB4Y2QsIDB4M2MsIDB4ZWQsCisrCTB4ZmQsIDB4ZDQsIDB4NDEsIDB4ZTYsIDB4NWMs IDB4OGIsIDB4ZTAsIDB4NjgsIDB4MzEsIDB4NDcsIDB4NDcsIDB4YWYsCisrCTB4MTIsIDB4YTcs IDB4ZjksIDB4MzIsIDB4MGQsIDB4OTQsIDB4MTUsIDB4NDgsIDB4ZDAsIDB4NTQsIDB4ODUsIDB4 YjIsCisrCTB4MDQsIDB4YjUsIDB4NGQsIDB4ZDQsIDB4OWQsIDB4MDUsIDB4MjIsIDB4MjUsIDB4 ZDksIDB4ZmQsIDB4NmMsIDB4MzYsCisrCTB4ZWYsIDB4YmUsIDB4NjksIDB4NmMsIDB4NTUsIDB4 ZjQsIDB4ZWUsIDB4ZWMKKysJfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzdHIx W109IjEyMzQ1Njc4OTAxMjM0NTY3ODkwIjsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQor KyAgICB7CisrICAgICsrc2VlZFswXTsKKysgICAgfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Rz YSgpCisrICAgIHsKKysgICAgRFNBICpkc2E7CisrICAgIGludCBjb3VudGVyLGksaiwgcmV0ID0g MDsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07 CisrICAgIHVuc2lnbmVkIGxvbmcgaDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBf UEtFWSAqcGsgPSBOVUxMOworKworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKworKyAg ICBkc2EgPSBEU0FfbmV3KCk7CisrCisrICAgIGlmKGRzYSA9PSBOVUxMKQorKwlnb3RvIGVycjsK KysgICAgaWYoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxzZWVkLDIwLCZj b3VudGVyLCZoLE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKGNvdW50ZXIgIT0gMzc4KSAK KysJZ290byBlcnI7CisrICAgIGlmIChoICE9IDIpCisrCWdvdG8gZXJyOworKyAgICBpPUJOX2Ju MmJpbihkc2EtPnEsYnVmKTsKKysgICAgaj1zaXplb2Yob3V0X3EpOworKyAgICBpZiAoaSAhPSBq IHx8IG1lbWNtcChidWYsb3V0X3EsaSkgIT0gMCkKKysJZ290byBlcnI7CisrCisrICAgIGk9Qk5f Ym4yYmluKGRzYS0+cCxidWYpOworKyAgICBqPXNpemVvZihvdXRfcCk7CisrICAgIGlmIChpICE9 IGogfHwgbWVtY21wKGJ1ZixvdXRfcCxpKSAhPSAwKQorKwlnb3RvIGVycjsKKysKKysgICAgaT1C Tl9ibjJiaW4oZHNhLT5nLGJ1Zik7CisrICAgIGo9c2l6ZW9mKG91dF9nKTsKKysgICAgaWYgKGkg IT0gaiB8fCBtZW1jbXAoYnVmLG91dF9nLGkpICE9IDApCisrCWdvdG8gZXJyOworKyAgICBEU0Ff Z2VuZXJhdGVfa2V5KGRzYSk7CisrCisrICAgIGlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5V TEwpCisrCWdvdG8gZXJyOworKyAgICBFVlBfUEtFWV9hc3NpZ25fRFNBKHBrLCBkc2EpOworKwor KyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdv dG8gZXJyOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBzdHIxLCAyMCkpCisrCWdv dG8gZXJyOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4sIHBrKSkK KysJZ290byBlcnI7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9k c3MxKCksIE5VTEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZt Y3R4LCBzdHIxLCAyMCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoRVZQX1ZlcmlmeUZpbmFsKCZt Y3R4LCBidWYsIHNsZW4sIHBrKSAhPSAxKQorKwlnb3RvIGVycjsKKysKKysgICAgcmV0ID0gMTsK KysKKysgICAgZXJyOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKyAgICBpZiAo cGspCisrCUVWUF9QS0VZX2ZyZWUocGspOworKyAgICBlbHNlIGlmIChkc2EpCisrCURTQV9mcmVl KGRzYSk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VM RlRFU1RfRFNBLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcmV0OworKyAg ICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2Zp cHMuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwcy5oCistLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwkyMDEwLTAxLTIwIDE4OjEz OjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMv Zmlwcy5oCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDE2 MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxvcGVuc3NsL29w ZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysjZXJyb3IgRklQUyBpcyBk aXNhYmxlZC4KKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2lmZGVmICBf X2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK3N0cnVjdCBkc2Ffc3Q7Cisr c3RydWN0IGV2cF9wa2V5X3N0OworK3N0cnVjdCBlbnZfbWRfc3Q7Cisrc3RydWN0IGV2cF9jaXBo ZXJfc3Q7Cisrc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0OworKworK2ludCBGSVBTX21vZGVfc2V0 KGludCBvbm9mZik7CisraW50IEZJUFNfbW9kZSh2b2lkKTsKKytjb25zdCB2b2lkICpGSVBTX3Jh bmRfY2hlY2sodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOworK3ZvaWQg RklQU19zZWxmdGVzdF9jaGVjayh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9zaGExKHZvaWQp OworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfYWVz KHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVw dF9kZXModm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOworK3ZvaWQgRklQU19j b3JydXB0X3JzYSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpOwor K2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9p ZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKKytpbnQgRklQU19zZWxm dGVzdF9kc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOworK3ZvaWQgRklQ U19ybmdfc3RpY2sodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOworK2ludCBG SVBTX3NlbGZ0ZXN0X2htYWModm9pZCk7CisrCisraW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJz LCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50 IGthdGxlbiwKKysJCQljb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVuc2lnbmVkIGlu dCBtZF9mbGFncywKKysJCQljb25zdCBjaGFyICpmYWlsX3N0cik7CisrCisraW50IGZpcHNfY2lw aGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCisrCQkJY29uc3Qgc3RydWN0 IGV2cF9jaXBoZXJfc3QgKmNpcGhlciwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisr CQkJY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxh aW50ZXh0LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCisrCQkJaW50IGxl bik7CisrCisrLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKysvKiBUaGUgZm9sbG93aW5nIGxpbmVz IGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwor KyAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2Ny aXB0IGlzIG5leHQgcnVuLgorKyAqLworK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQp OworKworKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCisrCisrLyog RnVuY3Rpb24gY29kZXMuICovCisrI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJ CQkgMTAwCisrI2RlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAxCisrI2Rl ZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04JCQkJIDEwMgorKyNkZWZpbmUgRklQU19GX0RTQV9ET19W RVJJRlkJCQkJIDEwMworKyNkZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VYCQkJIDEyNAor KyNkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYCQkJIDEyNQorKyNkZWZpbmUgRklQU19G X0ZJUFNfQ0hFQ0tfRFNBCQkJCSAxMDQKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09S RV9GSU5HRVJQUklOVAkJIDEwNQorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAx MDYKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9DSEVDSwkJCQkgMTA3CisrI2RlZmluZSBGSVBT X0ZfRklQU19NT0RFX1NFVAkJCQkgMTA4CisrI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05B VFVSRV9URVNUCQkJIDEwOQorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTCQkJIDEx MAorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQorKyNkZWZpbmUgRklQ U19GX0ZJUFNfU0VMRlRFU1RfRFNBCQkJIDExMgorKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfSE1BQwkJCSAxMTMKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORwkJCSAxMTQK KysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1CisrI2RlZmluZSBGSVBT X0ZfSEFTSF9GSU5BTAkJCQkgMTIzCisrI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VO CQkJIDExNgorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUCQkJIDExNwor KyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAorKyNkZWZpbmUg RklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQJCQkgMTE5CisrI2RlZmluZSBGSVBTX0ZfUlNB X0VBWV9QVUJMSUNfRU5DUllQVAkJCSAxMjAKKysjZGVmaW5lIEZJUFNfRl9SU0FfWDkzMV9HRU5F UkFURV9LRVlfRVgJCQkgMTIxCisrI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkg MTIyCisrCisrLyogUmVhc29uIGNvZGVzLiAqLworKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFE X0VYRQkJCQkgMTAzCisrI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVAkJCSAx MDQKKysjZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDExNAorKyNkZWZp bmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1RfTUFUQ0gJCSAxMDUKKysjZGVmaW5lIEZJUFNf Ul9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSAkJIDExMAorKyNkZWZpbmUgRklQU19SX0ZJTkdF UlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCisrI2RlZmluZSBGSVBT X1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAxMTIKKysjZGVm aW5lIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQJCQkgMTAyCisrI2RlZmluZSBGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQJCQkgMTA2CisrI2RlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlf TEVOR1RICQkJIDEwOQorKyNkZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJIDEwOAorKyNk ZWZpbmUgRklQU19SX05PTl9GSVBTX01FVEhPRAkJCQkgMTAwCisrI2RlZmluZSBGSVBTX1JfUEFJ UldJU0VfVEVTVF9GQUlMRUQJCQkgMTA3CisrI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJS T1IJCQkgMTE1CisrI2RlZmluZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJCQkgMTE2CisrI2Rl ZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJTEVECQkJCSAxMDEKKysjZGVmaW5lIEZJUFNfUl9URVNU X0ZBSUxVUkUJCQkJIDExNworKyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNCQkJ IDExMworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3Qu YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0 LmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrCWNvbnN0IEVWUF9NRCAqKCphbGcpKHZvaWQpOwor Kwljb25zdCBjaGFyICprZXksICppdjsKKysJdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01E X1NJWkVdOworK30gSE1BQ19LQVQ7CisrCisrc3RhdGljIGNvbnN0IEhNQUNfS0FUIHZlY3Rvcltd ID0geworKyAgICB7CUVWUF9zaGExLAorKwkvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1 YmxpY2F0aW9ucy9maXBzL2ZpcHMxOTgvZmlwcy0xOThhLnBkZiAqLworKwkiMDEyMzQ1Njc4OTo7 PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA5LDB4MjIsMHhkMywweDQwLDB4NWYs MHhhYSwweDNkLDB4MTksCisrCSAgMHg0ZiwweDgyLDB4YTQsMHg1OCwweDMwLDB4NzMsMHg3ZCww eDVjLAorKwkgIDB4YzYsMHhjNywweDVkLDB4MjQgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEy MjQsCisrCS8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCisrCSIwMTIzNDU2 Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ZGQsMHhlZiwweDBhLDB4NDAs MHhjYiwweDdkLDB4NTAsMHhmYiwKKysJICAweDZlLDB4ZTYsMHhjZSwweGExLDB4MjAsMHhiYSww eDI2LDB4YWEsCisrCSAgMHgwOCwweGYzLDB4MDcsMHg3NSwweDg3LDB4YjgsMHhhZCwweDFiLAor KwkgIDB4OGMsMHg4ZCwweDEyLDB4YzcgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEyNTYsCisr CSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4YjgsMHhmMiww eDBkLDB4YjUsMHg0MSwweGVhLDB4NDMsMHgwOSwKKysJICAweGNhLDB4NGUsMHhhOSwweDM4LDB4 MGMsMHhkMCwweGU4LDB4MzQsCisrCSAgMHhmNywweDFmLDB4YmUsMHg5MSwweDc0LDB4YTIsMHg2 MSwweDM4LAorKwkgIDB4MGQsMHhjMSwweDdlLDB4YWUsMHg2YSwweDM0LDB4NTEsMHhkOSB9Cisr ICAgIH0sCisrICAgIHsJRVZQX3NoYTM4NCwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJ IlNhbXBsZSAjMiIsCisrCXsgMHgwOCwweGJjLDB4YjAsMHhkYSwweDQ5LDB4MWUsMHg4NywweGFk LAorKwkgIDB4OWEsMHgxZCwweDZhLDB4Y2UsMHgyMywweGM1LDB4MGIsMHhmNiwKKysJICAweGI3 LDB4MTgsMHgwNiwweGE1LDB4NzcsMHhjZCwweDQ5LDB4MDQsCisrCSAgMHg4OSwweGYxLDB4ZTYs MHgyMywweDQ0LDB4NTEsMHg1MSwweDlmLAorKwkgIDB4ODUsMHg1NiwweDgwLDB4NzksMHgwYyww eGJkLDB4NGQsMHg1MCwKKysJICAweGE0LDB4NWYsMHgyOSwweGUzLDB4OTMsMHhmMCwweGU4LDB4 N2YgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGE1MTIsCisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFC QyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4ODAsMHg5ZCwweDQ0LDB4MDUsMHg3YywweDViLDB4 OTUsMHg0MSwKKysJICAweDA1LDB4YmQsMHgwNCwweDEzLDB4MTYsMHhkYiwweDBmLDB4YWMsCisr CSAgMHg0NCwweGQ1LDB4YTQsMHhkNSwweGQwLDB4ODksMHgyYiwweGQwLAorKwkgIDB4NGUsMHg4 NiwweDY0LDB4MTIsMHhjMCwweDkwLDB4NzcsMHg2OCwKKysJICAweGYxLDB4ODcsMHhiNywweDdj LDB4NGYsMHhhZSwweDJjLDB4MmYsCisrCSAgMHgyMSwweGE1LDB4YjUsMHg2NSwweDlhLDB4NGYs MHg0YiwweGE3LAorKwkgIDB4NDcsMHgwMiwweGEzLDB4ZGUsMHg5YiwweDUxLDB4ZjEsMHg0NSwK KysJICAweGJkLDB4NGYsMHgyNSwweDI3LDB4NDIsMHg5OCwweDk5LDB4MDUgfQorKyAgICB9LAor K307CisrCisraW50IEZJUFNfc2VsZnRlc3RfaG1hYygpCisrICAgIHsKKysgICAgaW50IG47Cisr ICAgIHVuc2lnbmVkIGludCAgICBvdXRsZW47CisrICAgIHVuc2lnbmVkIGNoYXIgICBvdXRbRVZQ X01BWF9NRF9TSVpFXTsKKysgICAgY29uc3QgRVZQX01EICAgKm1kOworKyAgICBjb25zdCBITUFD X0tBVCAqdDsKKysKKysgICAgZm9yKG49MCx0PXZlY3RvcjsgbjxzaXplb2YodmVjdG9yKS9zaXpl b2YodmVjdG9yWzBdKTsgbisrLHQrKykKKysJeworKwltZCA9ICgqdC0+YWxnKSgpOworKwlITUFD KG1kLHQtPmtleSxzdHJsZW4odC0+a2V5KSwKKysJCShjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+ aXYsc3RybGVuKHQtPml2KSwKKysJCW91dCwmb3V0bGVuKTsKKysKKysJaWYobWVtY21wKG91dCx0 LT5rYXZhbCxvdXRsZW4pKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxG VEVTVF9ITUFDLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7CisrCSAg ICB9CisrCX0KKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYwky MDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSw0MTIgQEAKKysv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRp b24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysvKgorKyAqIFRoaXMgaXMgYSBGSVBTIGFwcHJv dmVkIEFFUyBQUk5HIGJhc2VkIG9uIEFOU0kgWDkuMzEgQS4yLjQuCisrICovCisrCisrI2luY2x1 ZGUgImVfb3MuaCIKKysKKysvKiBJZiB3ZSBkb24ndCBkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRF TkRFRCwgc3RydWN0IHRpbWV2YWwgd29uJ3QKKysgICBiZSBkZWZpbmVkIGFuZCBnZXR0aW1lb2Zk YXkoKSB3b24ndCBiZSBkZWNsYXJlZCB3aXRoIHN0cmljdCBjb21waWxlcnMKKysgICBsaWtlIERF QyBDIGluIEFOU0kgQyBtb2RlLiAgKi8KKysjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQK KysjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgorKworKyNpbmNsdWRl IDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaWZuZGVm IE9QRU5TU0xfU1lTX1dJTjMyCisrI2luY2x1ZGUgPHN5cy90aW1lLmg+CisrI2VuZGlmCisrI2lu Y2x1ZGUgPGFzc2VydC5oPgorKyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysjIGlmZGVmIE9Q RU5TU0xfVU5JU1RECisrIyAgaW5jbHVkZSBPUEVOU1NMX1VOSVNURAorKyMgZWxzZQorKyMgIGlu Y2x1ZGUgPHVuaXN0ZC5oPgorKyMgZW5kaWYKKysjZW5kaWYKKysjaW5jbHVkZSA8c3RyaW5nLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5k aWYKKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwor K3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOworKworKyNkZWZpbmUgQUVTX0JMT0NLX0xFTkdU SAkxNgorKworKworKy8qIEFFUyBGSVBTIFBSTkcgaW1wbGVtZW50YXRpb24gKi8KKysKKyt0eXBl ZGVmIHN0cnVjdCAKKysJeworKwlpbnQgc2VlZGVkOworKwlpbnQga2V5ZWQ7CisrCWludCB0ZXN0 X21vZGU7CisrCWludCBzZWNvbmQ7CisrCWludCBlcnJvcjsKKysJdW5zaWduZWQgbG9uZyBjb3Vu dGVyOworKwlBRVNfS0VZIGtzOworKwlpbnQgdnBvczsKKysJLyogVGVtcG9yYXJ5IHN0b3JhZ2Ug Zm9yIGtleSBpZiBpdCBlcXVhbHMgc2VlZCBsZW5ndGggKi8KKysJdW5zaWduZWQgY2hhciB0bXBf a2V5W0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdU SF07CisrCXVuc2lnbmVkIGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNo YXIgbGFzdFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJfSBGSVBTX1BSTkdfQ1RYOworKworK3N0YXRp YyBGSVBTX1BSTkdfQ1RYIHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7 CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQorKwl7CisrCWZpcHNfcHJuZ19mYWlsID0g MTsKKysJfQorKworK3ZvaWQgZmlwc19yYW5kX3BybmdfcmVzZXQoRklQU19QUk5HX0NUWCAqY3R4 KQorKwl7CisrCWN0eC0+c2VlZGVkID0gMDsKKysJY3R4LT5rZXllZCA9IDA7CisrCWN0eC0+dGVz dF9tb2RlID0gMDsKKysJY3R4LT5jb3VudGVyID0gMDsKKysJY3R4LT5zZWNvbmQgPSAwOworKwlj dHgtPmVycm9yID0gMDsKKysJY3R4LT52cG9zID0gMDsKKysJT1BFTlNTTF9jbGVhbnNlKGN0eC0+ ViwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCU9QRU5TU0xfY2xlYW5zZSgmY3R4LT5rcywgc2l6ZW9m KEFFU19LRVkpKTsKKysJfQorKwkKKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJ UFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFO RF9TSVpFX1Qga2V5bGVuKQorKwl7CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysJaWYgKGtl eWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKQorKwkJeworKwkJLyog ZXJyb3I6IGludmFsaWQga2V5IHNpemUgKi8KKysJCXJldHVybiAwOworKwkJfQorKwlBRVNfc2V0 X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKKysJaWYgKGtleWxlbiA9 PSAxNikKKysJCXsKKysJCW1lbWNweShjdHgtPnRtcF9rZXksIGtleSwgMTYpOworKwkJY3R4LT5r ZXllZCA9IDI7CisrCQl9CisrCWVsc2UKKysJCWN0eC0+a2V5ZWQgPSAxOworKwljdHgtPnNlZWRl ZCA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMg aW50IGZpcHNfc2V0X3Bybmdfc2VlZChGSVBTX1BSTkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5z aWduZWQgY2hhciAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQorKwl7CisrCWludCBp OworKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQlyZXR1cm4gMDsKKysJLyogSW4gdGVzdCBtb2RlIHNl ZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCisrCWlmIChjdHgtPnRlc3RfbW9kZSkKKysJCXsK KysJCWlmIChzZWVkbGVuICE9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJcmV0dXJuIDA7CisrCQlt ZW1jcHkoY3R4LT5WLCBzZWVkLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCWN0eC0+c2VlZGVkID0g MTsKKysJCXJldHVybiAxOworKwkJfQorKwkvKiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Igc3VwcGxp ZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KKysJZm9yIChpID0gMDsgaSA8IHNlZWRsZW47 IGkrKykKKysJCXsKKysJCWN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtpXTsKKysJCWlmIChj dHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJY3R4LT52cG9zID0gMDsK KysJCQkvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qgc2VlZCBhbmQga2V5IGxlbmd0aCBlcXVhbHMK KysgCQkJICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgorKyAJ CQkgKi8gCisrCQkJaWYgKGN0eC0+a2V5ZWQgPT0gMikKKysJCQkJeworKwkJCQlpZiAoIW1lbWNt cChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKQorKwkJCQkJeworKwkJCQkJUkFORGVycihSQU5E X0ZfRklQU19TRVRfUFJOR19TRUVELAorKwkJCQkJCVJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1Rf TUFUQ0hfS0VZKTsKKysJCQkJCXJldHVybiAwOworKwkJCQkJfQorKwkJCQlPUEVOU1NMX2NsZWFu c2UoY3R4LT50bXBfa2V5LCAxNik7CisrCQkJCWN0eC0+a2V5ZWQgPSAxOworKwkJCQl9CisrCQkJ Y3R4LT5zZWVkZWQgPSAxOworKwkJCX0KKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQg Zmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKmN0eCkKKysJeworKwlpZiAoY3R4LT5r ZXllZCkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSxSQU5EX1Jf UFJOR19LRVlFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJY3R4LT50ZXN0X21vZGUgPSAxOwor KwlyZXR1cm4gMTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpCisrCXsK KysJcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7CisrCX0KKysKKytpbnQgRklQU19y YW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKKysJeworKwlpZiAoIXNjdHgudGVzdF9tb2Rl KQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCxSQU5EX1JfTk9UX0lO X1RFU1RfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJbWVtY3B5KHNjdHguRFQsIGR0LCBB RVNfQkxPQ0tfTEVOR1RIKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBz X2dldF9kdChGSVBTX1BSTkdfQ1RYICpjdHgpCisrICAgIHsKKysjaWZkZWYgT1BFTlNTTF9TWVNf V0lOMzIKKysJRklMRVRJTUUgZnQ7CisrI2Vsc2UKKysJc3RydWN0IHRpbWV2YWwgdHY7CisrI2Vu ZGlmCisrCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGN0eC0+RFQ7CisrCisrI2lmbmRlZiBHRVRQSURf SVNfTUVBTklOR0xFU1MKKysJdW5zaWduZWQgbG9uZyBwaWQ7CisrI2VuZGlmCisrCisrI2lmZGVm IE9QRU5TU0xfU1lTX1dJTjMyCisrCUdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZmdCk7CisrCWJ1 ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdIaWdoRGF0ZVRpbWUgJiAweGZmKTsKKysJYnVm WzFdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsK KysJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMTYpICYg MHhmZik7CisrCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+ IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKGZ0LmR3TG93RGF0ZVRp bWUgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGlt ZSA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0Rh dGVUaW1lID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQgY2hhcikgKChmdC5k d0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKyNlbHNlCisrCWdldHRpbWVvZmRheSgmdHYs TlVMTCk7CisrCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfc2VjICYgMHhmZik7Cisr CWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiA4KSAmIDB4ZmYpOworKwli dWZbMl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1 ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysJYnVm WzRdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl91c2VjICYgMHhmZik7CisrCWJ1Zls1XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVu c2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVu c2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiAyNCkgJiAweGZmKTsKKysjZW5kaWYKKysJYnVm WzhdID0gKHVuc2lnbmVkIGNoYXIpIChjdHgtPmNvdW50ZXIgJiAweGZmKTsKKysJYnVmWzldID0g KHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDgpICYgMHhmZik7CisrCWJ1ZlsxMF0g PSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMTYpICYgMHhmZik7CisrCWJ1Zlsx MV0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gMjQpICYgMHhmZik7CisrCisr CWN0eC0+Y291bnRlcisrOworKworKworKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisr CXBpZD0odW5zaWduZWQgbG9uZylnZXRwaWQoKTsKKysJYnVmWzEyXSA9ICh1bnNpZ25lZCBjaGFy KSAocGlkICYgMHhmZik7CisrCWJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gOCkg JiAweGZmKTsKKysJYnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAxNikgJiAweGZm KTsKKysJYnVmWzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiAyNCkgJiAweGZmKTsKKysj ZW5kaWYKKysgICAgfQorKworK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJOR19DVFggKmN0 eCwKKysJCQl1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKQorKwl7 CisrCXVuc2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RI XTsKKysJdW5zaWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07CisrCWludCBpOworKwlp ZiAoY3R4LT5lcnJvcikKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1Jf UFJOR19FUlJPUik7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFjdHgtPmtleWVkKQorKwkJ eworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9OT19LRVlfU0VUKTsKKysJCXJl dHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+c2VlZGVkKQorKwkJeworKwkJUkFORGVycihSQU5E X0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOworKwkJcmV0dXJuIDA7CisrCQl9 CisrCWZvciAoOzspCisrCQl7CisrCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQorKwkJCWZpcHNfZ2V0 X2R0KGN0eCk7CisrCQlBRVNfZW5jcnlwdChjdHgtPkRULCBJLCAmY3R4LT5rcyk7CisrCQlmb3Ig KGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJCXRtcFtpXSA9IElbaV0gXiBj dHgtPlZbaV07CisrCQlBRVNfZW5jcnlwdCh0bXAsIFIsICZjdHgtPmtzKTsKKysJCWZvciAoaSA9 IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0gUltpXSBeIElbaV07 CisrCQlBRVNfZW5jcnlwdCh0bXAsIGN0eC0+ViwgJmN0eC0+a3MpOworKwkJLyogQ29udGludW91 cyBQUk5HIHRlc3QgKi8KKysJCWlmIChjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJaWYgKGZpcHNf cHJuZ19mYWlsKQorKwkJCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsK KysJCQlpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5HVEgpKQorKwkJCQl7 CisrCSAgICAJCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfU1RVQ0spOwor KwkJCQljdHgtPmVycm9yID0gMTsKKysJCQkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKwkJ CQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19C TE9DS19MRU5HVEgpOworKwkJaWYgKCFjdHgtPnNlY29uZCkKKysJCQl7CisrCQkJY3R4LT5zZWNv bmQgPSAxOworKwkJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJCWNvbnRpbnVlOworKwkJCX0K KysKKysJCWlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQl7CisrCQkJbWVtY3B5 KG91dCwgUiwgb3V0bGVuKTsKKysJCQlicmVhazsKKysJCQl9CisrCisrCQltZW1jcHkob3V0LCBS LCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysJCW91dCArPSBBRVNfQkxPQ0tfTEVOR1RIOworKwkJb3V0 bGVuIC09IEFFU19CTE9DS19MRU5HVEg7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisrCisr aW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5E X1NJWkVfVCBrZXlsZW4pCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVu KTsKKysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0Owor Kwl9CisrCisraW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9T SVpFX1Qgc2VlZGxlbikKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19M T0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3NldF9wcm5nX3NlZWQoJnNjdHgsIHNlZWQsIHNlZWRs ZW4pOworKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7 CisrCX0KKysKKysKKytpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQ U19SQU5EX1NJWkVfVCBjb3VudCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENS WVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBmaXBzX3JhbmQoJnNjdHgsIG91dCwgY291bnQpOwor KwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0K KysKKytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBU T19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldCA9IHNjdHguc2VlZGVkOworKwlDUllQ VE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKyt2 b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKQorKwl7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfUkFORCk7CisrCWZpcHNfcmFuZF9wcm5nX3Jlc2V0KCZzY3R4KTsKKysJQ1JZUFRPX3dfdW5s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19kb19yYW5k X3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuKQorKwl7Cisr CUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRsZW4pOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlw c19kb19yYW5kX2FkZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4s CisrCQkJCQlkb3VibGUgYWRkX2VudHJvcHkpCisrCXsKKysJRklQU19yYW5kX3NlZWQoc2VlZCwg c2VlZGxlbik7CisrCX0KKysKKytzdGF0aWMgY29uc3QgUkFORF9NRVRIT0QgcmFuZF9maXBzX21l dGg9CisrICAgIHsKKysgICAgZmlwc19kb19yYW5kX3NlZWQsCisrICAgIEZJUFNfcmFuZF9ieXRl cywKKysgICAgRklQU19yYW5kX3Jlc2V0LAorKyAgICBmaXBzX2RvX3JhbmRfYWRkLAorKyAgICBG SVBTX3JhbmRfYnl0ZXMsCisrICAgIEZJUFNfcmFuZF9zdGF0dXMKKysgICAgfTsKKysKKytjb25z dCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKQorK3sKKysgIHJldHVybiAmcmFu ZF9maXBzX21ldGg7CisrfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2Zp cHNfcmFuZC5oLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oCTIwMTAtMDEtMjAgMTg6 MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDc3IEBACisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqCisrICovCisrCisrI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gKKysjZGVmaW5lIEhFQURF Ul9GSVBTX1JBTkRfSAorKworKyNpbmNsdWRlICJkZXMuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKwor K2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFO RF9TSVpFX1Qga2V5bGVuKTsKKytpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBG SVBTX1JBTkRfU0laRV9UIG51bSk7CisraW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFy ICpvdXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKKysKKytpbnQgRklQU19yYW5kX3Rlc3Rf bW9kZSh2b2lkKTsKKyt2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKKytpbnQgRklQU19yYW5k X3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7CisrCisraW50IEZJUFNfcmFuZF9zdGF0dXModm9p ZCk7CisrCisrY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCk7CisrCisr I2lmZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKKysjZW5kaWYKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5j CistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3Qu Yy5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYwkyMDEwLTAxLTIwIDE4 OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwzNzMgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKworKworK3R5cGVkZWYg c3RydWN0CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVuc2lnbmVkIGNoYXIgVlsx Nl07CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdfVFY7CisrCisrLyogVGhl IGZvbGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZT IHNwZWMgKi8KKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQorKwkJ ezB4ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKKysJCSAweGVkLDB4MDYs MHgxYywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBh ZXNfMTI4X3R2W10gPSB7CisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSww eDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4 ZTksMHgyMiwweGY5fSwKKysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAs MHhjMCwweDU1LAorKwkJIDB4ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0K KysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSww eDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4 ZmF9LAorKwkJCQkvKiBWICovCisrCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisr CQkJCS8qIFIgKi8KKysJCXsweDdjLDB4MjIsMHgyYywweGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMs CisrCQkgMHgxYywweDljLDB4YjYsMHg0MSwweGE5LDB4ZjMsMHgyMiwweDBkfQorKwl9LAorKwl7 CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSww eDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmYn0sCisrCQkJ CS8qIFYgKi8KKysJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisr CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAq LworKwkJezB4OGEsMHhhYSwweDAwLDB4MzksMHg2NiwweDY3LDB4NWIsMHhlNSwKKysJCSAweDI5 LDB4MTQsMHgyOCwweDgxLDB4YTksMHg0ZCwweDRlLDB4Yzd9CisrCX0sCisrCXsKKysJCQkJLyog RFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkg MHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZjfSwKKysJCQkJLyogViAqLwor KwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg4 OCwweGRkLDB4YTQsMHg1NiwweDMwLDB4MjQsMHgyMywweGU1LAorKwkJIDB4ZjYsMHg5ZCwweGE1 LDB4N2UsMHg3YiwweDk1LDB4YzcsMHgzYX0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJ ezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQs MHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmR9LAorKwkJCQkvKiBWICovCisrCQl7MHhmOCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDA1LDB4MjUsMHg5 MiwweDQ2LDB4NjEsMHg3OSwweGQyLDB4Y2IsCisrCQkgMHg3OCwweGM0LDB4MGIsMHgxNCwweDBh LDB4NWEsMHg5YSwweGM4fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIz LDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIs MHhiMCwweGU5LDB4MjMsMHg3N30sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZlfSwKKysJCQkJLyogUiAqLworKwkJezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3 YSwweDU5LDB4MjYsMHhiYywKKysJCSAweDQ4LDB4ZDksMHgzOCwweGJmLDB4ZjAsMHg4NSwweDhm LDB4ZWF9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4 LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTks MHgyMywweDc4fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmZ9LAorKwkJCQkvKiBSICovCisrCQl7MHhhZSwweDUzLDB4ODcsMHhlZSwweDhjLDB4ZDksMHgx MiwweGY1LAorKwkJIDB4NzMsMHg1MywweGFlLDB4MDMsMHhmOSwweGQ1LDB4MTMsMHgzM30KKysJ fSwKKyt9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9CisrCQl7 MHgxNSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSwweDZlLAorKwkJIDB4NDQsMHg2NCww eDEwLDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKKysJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4 NGMsMHg4YiwweDk5LDB4M2J9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2W10g PSB7CisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2 OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRi fSwKKysJCQkJLyogViAqLworKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJ CQkvKiBSICovCisrCQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAor KwkJIDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KKysJfSwKKysJewor KwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhj MSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGN9LAorKwkJCQkv KiBWICovCisrCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJ IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8K KysJCXsweDkyLDB4OGQsMHhiZSwweDA3LDB4ZGQsMHhjNywweDU4LDB4YzAsCisrCQkgMHg2Ziww eDM1LDB4NDEsMHg5YiwweDE3LDB4YzksMHhiZCwweDlifQorKwl9LAorKwl7CisrCQkJCS8qIERU ICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4 YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0ZH0sCisrCQkJCS8qIFYgKi8KKysJ CXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4ZDUs MHhkZSwweGY0LDB4NTAsMHhmMywweGI3LDB4MTAsMHg0ZSwKKysJCSAweGI4LDB4YzYsMHhmOCww eGNmLDB4ZTIsMHhiMSwweGNhLDB4YTJ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsw eDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4 N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRlfSwKKysJCQkJLyogViAqLworKwkJezB4ZjAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhjZSwweDI5LDB4MDgs MHg0MywweGZjLDB4MzQsMHg0MSwweGU3LAorKwkJIDB4NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiww eDQ2LDB4YjEsMHhiYn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCww eGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4 MjQsMHg3OCwweGYzLDB4NGZ9LAorKwkJCQkvKiBWICovCisrCQl7MHhmOCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYs MHhjYSwweGE4LDB4YmYsCisrCQkgMHg4OSwweGI4LDB4NWUsMHgyZiwweDIyLDB4NTYsMHg5Miww eDJmfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCww eDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4 ZjMsMHhjOX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZl fSwKKysJCQkJLyogUiAqLworKwkJezB4MDUsMHhlYiwweDE4LDB4NTIsMHgzNCwweDQzLDB4MDAs MHg0MywKKysJCSAweDZlLDB4NWEsMHhhNSwweGZlLDB4N2IsMHgzMiwweGM0LDB4MmR9CisrCX0s CisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSww eDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweGNhfSwK KysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAorKwkJCQkv KiBSICovCisrCQl7MHgxNSwweDNjLDB4ZTgsMHhkMSwweDA0LDB4YzcsMHhhZCwweDUwLAorKwkJ IDB4MGIsMHhmMCwweDA3LDB4MTYsMHhlNywweDU2LDB4N2EsMHhlYX0KKysJfSwKKyt9OworKwor K3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9CisrCQl7MHg2ZCwweDE0LDB4 MDYsMHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAorKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3 YSwweDAzLDB4YjcsMHg5ZiwKKysJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVl LDB4YjUsCisrCQkgMHgyMSwweDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKKysK KytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90dltdID0geworKwl7CisrCQkJCS8qIERUICov CisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIs MHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCisrCQkJCS8qIFYgKi8KKysJCXsw eDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MzUsMHhj NywweGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywKKysJCSAweDgyLDB4NzksMHg5OSwweGZi LDB4ZDAsMHhiMywweDNiLDB4NzJ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRh LDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUs MHgzNCwweDc0LDB4OGUsMHg5ZSwweDg5fSwKKysJCQkJLyogViAqLworKwkJezB4YzAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHg2YywweGY0LDB4NDIsMHg1 ZCwweGM3LDB4MDQsMHgxYSwweDQxLAorKwkJIDB4MjgsMHgyYSwweDc4LDB4YTksMHhiMCwweDEy LDB4YzQsMHg5NX0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQx LDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQs MHg4ZSwweDllLDB4OGF9LAorKwkJCQkvKiBWICovCisrCQl7MHhlMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDE2LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3 ZSwweGI5LDB4MzAsCisrCQkgMHhkYiwweDY3LDB4NGIsMHhhYywweDJkLDB4ZTEsMHhkMSwweDc1 fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFk LDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUs MHg4Yn0sCisrCQkJCS8qIFYgKi8KKysJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK KysJCQkJLyogUiAqLworKwkJezB4MTQsMHg2ZiwweGY1LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgz MCwKKysJCSAweGJjLDB4NTcsMHhlMiwweDRhLDB4ZjcsMHg0NSwweDYyLDB4MDV9CisrCX0sCisr CXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIw LDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhjfSwKKysJ CQkJLyogViAqLworKwkJezB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK KysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBS ICovCisrCQl7MHg5NiwweGUyLDB4YjQsMHgxZSwweDY2LDB4NWUsMHgwZiwweGE0LAorKwkJIDB4 YzUsMHhjZCwweGEyLDB4MDcsMHhjYywweGI3LDB4OTQsMHg0MH0KKysJfSwKKysJeworKwkJCQkv KiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJ CSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDlmLDB4MDZ9LAorKwkJCQkvKiBWICov CisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZX0sCisrCQkJCS8qIFIgKi8KKysJCXsw eDYxLDB4Y2UsMHgxZCwweDZhLDB4NDgsMHg3NSwweDk3LDB4MjgsCisrCQkgMHg0YiwweDQxLDB4 ZGUsMHgxOCwweDQ0LDB4NGYsMHg1NiwweGVjfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisr CQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhh OSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwN30sCisrCQkJCS8qIFYgKi8KKysJCXsweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKKysJCQkJLyogUiAqLworKwkJezB4NTIsMHg4OSww eDU5LDB4NzksMHgyZCwweGFhLDB4MjgsMHhiMywKKysJCSAweGIwLDB4OGEsMHgzZSwweDcwLDB4 ZmEsMHg3MSwweDU5LDB4ODR9CisrCX0sCisrfTsKKysKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9y bmcoKQorKyAgICB7CisrICAgIGFlc18xOTJfdHZbMF0uVlswXSsrOworKyAgICB9CisrCisrI2Rl ZmluZSBmaXBzX3JhbmRfdGVzdChrZXksIHR2KSBcCisrCWRvX3JhbmRfdGVzdChrZXksIHNpemVv ZiBrZXksIHR2LCBzaXplb2YodHYpL3NpemVvZihBRVNfUFJOR19UVikpCisrCisrc3RhdGljIGlu dCBkb19yYW5kX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAorKwkJCUFFU19Q Uk5HX1RWICp0diwgaW50IG50dikKKysJeworKwl1bnNpZ25lZCBjaGFyIFJbMTZdOworKwlpbnQg aTsKKysJaWYgKCFGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbikpCisrCQlyZXR1cm4gMDsK KysJZm9yIChpID0gMDsgaSA8IG50djsgaSsrKQorKwkJeworKwkJRklQU19yYW5kX3NlZWQodHZb aV0uViwgMTYpOworKwkJRklQU19yYW5kX3NldF9kdCh0dltpXS5EVCk7CisrCQlGSVBTX3JhbmRf Ynl0ZXMoUiwgMTYpOworKwkJaWYgKG1lbWNtcChSLCB0dltpXS5SLCAxNikpCisrCQkJcmV0dXJu IDA7CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3Ju ZygpCisrCXsKKysJRklQU19yYW5kX3Jlc2V0KCk7CisrCWlmICghRklQU19yYW5kX3Rlc3RfbW9k ZSgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJaWYgKCFmaXBzX3JhbmRfdGVz dChhZXNfMTI4X2tleSxhZXNfMTI4X3R2KQorKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18xOTJf a2V5LCBhZXNfMTkyX3R2KQorKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNf MjU2X3R2KSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCUZJUFNfcmFuZF9yZXNl dCgpOworKwlyZXR1cm4gMTsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFu ZHRlc3QuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwy NDggQEAKKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdl IGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5 QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBh cyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkg aXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMK KysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3Ry aWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7 IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1 ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmln aHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBj cnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3Ms IGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBu b3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1 Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1 dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBp biB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysg KiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUg cGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3Jh cGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysg KiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0 LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRp dmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9u IGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklD IFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisrICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICog TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysg KiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGlj YWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNh bm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNv cGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5j bHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorKyAqLworKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgImVf b3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUkFORCBzdXBwb3J0XG4iKTsKKysg ICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgor KworK3R5cGVkZWYgc3RydWN0CisrCXsKKysJdW5zaWduZWQgY2hhciBEVFsxNl07CisrCXVuc2ln bmVkIGNoYXIgVlsxNl07CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCX0gQUVTX1BSTkdfTUNU OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbWN0X2tleVsxNl0gPQorKwl7MHg5 ZiwweDViLDB4NTEsMHgyMCwweDBiLDB4ZjMsMHgzNCwweGI1LAorKwkgMHhkOCwweDJiLDB4ZTgs MHhjMywweDcyLDB4NTUsMHhjOCwweDQ4fTsKKysKKytzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18x MjhfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDYzLDB4NzYsMHhiYiwweGU1LDB4Mjks MHgwMiwweGJhLDB4M2IsCisrCSAweDY3LDB4YzksMHgyNSwweGZhLDB4NzAsMHgxZiwweDExLDB4 YWN9LAorKwkJCS8qIFYgKi8KKysJezB4NTcsMHgyYywweDhlLDB4NzYsMHg4NywweDI2LDB4NDcs MHg5NywKKysJIDB4N2UsMHg3NCwweGZiLDB4ZGQsMHhjNCwweDk1LDB4MDEsMHhkMX0sCisrCQkJ LyogUiAqLworKwl7MHg0OCwweGU5LDB4YmQsMHgwZCwweDA2LDB4ZWUsMHgxOCwweGZiLAorKwkg MHhlNCwweDU3LDB4OTAsMHhkNSwweGMzLDB4ZmMsMHg5YiwweDczfQorK307CisrCisrc3RhdGlj IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9tY3Rfa2V5WzI0XSA9CisrCXsweGI3LDB4NmMsMHgzNCww eGQxLDB4MDksMHg2NywweGFiLDB4NzMsCisrCSAweDRkLDB4NWEsMHhkNSwweDM0LDB4OTgsMHgx NiwweDBiLDB4OTEsCisrCSAweGJjLDB4MzUsMHg1MSwweDE2LDB4NmIsMHhhZSwweDkzLDB4OGF9 OworKworK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7CisrCQkJLyogRFQg Ki8KKysJezB4ODQsMHhjZSwweDIyLDB4N2QsMHg5MSwweDVhLDB4YTMsMHhjOSwKKysJIDB4ODQs MHgzYywweDBhLDB4YjMsMHhhOSwweDYzLDB4MTUsMHg1Mn0sCisrCQkJLyogViAqLworKwl7MHhi NiwweGFmLDB4ZTYsMHg4ZiwweDk5LDB4OWUsMHg5MCwweDY0LAorKwkgMHhkZCwweGM3LDB4N2Es MHhjMSwweGJiLDB4OTAsMHgzYSwweDZkfSwKKysJCQkvKiBSICovCisrCXsweGZjLDB4ODUsMHg2 MCwweDlhLDB4MjksMHg2ZiwweGVmLDB4MjEsCisrCSAweGRkLDB4ODYsMHgyMCwweDMyLDB4OGEs MHgyOSwweDZmLDB4NDd9CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X21j dF9rZXlbMzJdID0KKysJezB4OWIsMHgwNSwweGM4LDB4NjgsMHhmZiwweDQ3LDB4ZjgsMHgzYSwK KysJIDB4YTYsMHgzYSwweGE4LDB4Y2IsMHg0ZSwweDcxLDB4YjIsMHhlMCwKKysJIDB4YjgsMHg3 ZSwweGYxLDB4MzcsMHhiNiwweGI0LDB4ZjYsMHg2ZCwKKysJIDB4ODYsMHgzMiwweGZjLDB4MWYs MHg1ZSwweDFkLDB4MWUsMHg1MH07CisrCisrc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMjU2X21j dF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHgzMSwweDZlLDB4MzUsMHg5YSwweGIxLDB4NDQs MHhmMCwweGVlLAorKwkgMHg2MiwweDZkLDB4MDQsMHg0NiwweGUwLDB4YTMsMHg5MiwweDRjfSwK KysJCQkvKiBWICovCisrCXsweDRmLDB4Y2QsMHhjMSwweDg3LDB4ODIsMHgxZiwweDRkLDB4YTEs CisrCSAweDNlLDB4MGUsMHg1NiwweDQ0LDB4NTksMHhlOCwweDgzLDB4Y2F9LAorKwkJCS8qIFIg Ki8KKysJezB4YzgsMHg4NywweGMyLDB4NjEsMHg1YiwweGQwLDB4YjksMHhlMSwKKysJIDB4ZTcs MHhmMywweDhiLDB4ZDcsMHg1YiwweGQ1LDB4ZjEsMHg4ZH0KKyt9OworKworK3N0YXRpYyB2b2lk IGR1bXAoY29uc3QgdW5zaWduZWQgY2hhciAqYixpbnQgbikKKysgICAgeworKyAgICB3aGlsZShu LS0gPiAwKQorKwl7CisrCXByaW50ZigiICUwMngiLCpiKyspOworKwl9CisrICAgIH0KKysKKytz dGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCxjb25zdCB1bnNp Z25lZCBjaGFyICpleHBlY3RlZCwKKysJCSAgICBpbnQgbikKKysgICAgeworKyAgICBpbnQgaTsK KysKKysgICAgZm9yKGk9MCA7IGkgPCBuIDsgKytpKQorKwlpZihyZXN1bHRbaV0gIT0gZXhwZWN0 ZWRbaV0pCisrCSAgICB7CisrCSAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsK KysJICAgIGR1bXAocmVzdWx0LG4pOworKwkgICAgcHV0cygiXG4gICAgICAgICAgICAgICBleHBl Y3RlZDoiKTsKKysJICAgIGR1bXAoZXhwZWN0ZWQsbik7CisrCSAgICBwdXRjaGFyKCdcbicpOwor KwkgICAgRVhJVCgxKTsKKysJICAgIH0KKysgICAgfQorKworKworK3N0YXRpYyB2b2lkIHJ1bl90 ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgQUVTX1BSTkdfTUNUICp0dikKKysg ICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl0sIGR0WzE2XTsKKysgICAgaW50IGksIGo7 CisrICAgIEZJUFNfcmFuZF9yZXNldCgpOworKyAgICBGSVBTX3JhbmRfdGVzdF9tb2RlKCk7Cisr ICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKKysgICAgRklQU19yYW5kX3NlZWQo dHYtPlYsIDE2KTsKKysgICAgbWVtY3B5KGR0LCB0di0+RFQsIDE2KTsKKysgICAgZm9yIChpID0g MDsgaSA8IDEwMDAwOyBpKyspCisrCXsKKysgICAgCUZJUFNfcmFuZF9zZXRfZHQoZHQpOworKwlG SVBTX3JhbmRfYnl0ZXMoYnVmLCAxNik7CisrCS8qIEluY3JlbWVudCBEVCAqLworKwlmb3IgKGog PSAxNTsgaiA+PSAwOyBqLS0pCisrCQl7CisrCQlkdFtqXSsrOworKwkJaWYgKGR0W2pdKQorKwkJ CWJyZWFrOworKwkJfQorKwl9CisrCisrICAgIGNvbXBhcmUoYnVmLHR2LT5SLCAxNik7CisrICAg IH0KKysKKytpbnQgbWFpbigpCisrCXsKKysJcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwg JmFlc18xMjhfbWN0X3R2KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOwor KwlydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3RfdHYpOworKwlwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18yNTZfbWN0X2tl eSwgMzIsICZhZXNfMjU2X21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25l XG4iKTsKKysJcmV0dXJuIDA7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTAtMDEtMjAg MTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v Zmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICsw MTAwCitAQCAtMCwwICsxLDQ0MSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisr CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2lu Y2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBuW10gPQorKyJc eDAwXHhCQlx4RjhceDJGXHgwOVx4MDZceDgyXHhDRVx4OUNceDIzXHgzOFx4QUNceDJCXHg5RFx4 QThceDcxIgorKyJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4 QjZceEYwXHg3NFx4NTRceEY1IgorKyJceDFGXHhCOFx4REZceEJBXHhBRlx4MDNceDVDXHgwMlx4 QUJceDYxXHhFQVx4NDhceENFXHhFQlx4NkZceENEIgorKyJceDQ4XHg3Nlx4RURceDUyXHgwRFx4 NjBceEUxXHhFQ1x4NDZceDE5XHg3MVx4OURceDhBXHg1Qlx4OEJceDgwIgorKyJceDdGXHhBRlx4 QjhceEUwXHhBM1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1Igor KyJceDg0XHhFRVx4NkFceDY0XHg5RFx4MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0 NVx4OThceDM5IgorKyJceDRFXHhFMFx4QUFceEIxXHgyRFx4N0JceDYxXHhBNVx4MUZceDUyXHg3 QVx4OUFceDQxXHhGNlx4QzFceDY4IgorKyJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4 Rlx4NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIgorKyJceENCIjsKKysKKysKKytzdGF0 aWMgaW50IHNldHJzYWtleShSU0EgKmtleSkKKysgICAgeworKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBlW10gPSAiXHgxMSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGRbXSA9CisrIlx4MDBceEE1XHhEQVx4RkNceDUzXHg0MVx4RkFceEYyXHg4OVx4QzRceEI5 XHg4OFx4REJceDMwXHhDMVx4Q0QiCisrIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0 XHgyN1x4ODRceDgxXHgzOFx4MDFceDU3XHg5Nlx4NDEiCisrIlx4QjJceDk0XHgxMFx4QjNceEM3 XHg5OVx4OERceDZCXHhDNFx4NjVceDc0XHg1RVx4NUNceDM5XHgyNlx4NjkiCisrIlx4RDZceDg3 XHgwRFx4QTJceEMwXHg4Mlx4QTlceDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEi CisrIlx4QzlceDdGXHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFc eEE5XHg1Mlx4OTQiCisrIlx4NDRceEU1XHg2QVx4QUZceDY4XHhDNVx4NkNceDA5XHgyQ1x4RDNc eDhEXHhDM1x4QkVceEY1XHhEMlx4MEEiCisrIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4QTFc eDNFXHhERFx4RkJceEUxXHhBMVx4Q0VceENDXHg0OFx4OTQiCisrIlx4QUZceDk0XHgyOFx4QzJc eEI3XHhCOFx4ODhceDNGXHhFNFx4NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4QjMiCisrIlx4QzEi OworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPQorKyJceDAwXHhFRVx4 Q0ZceEFFXHg4MVx4QjFceEI5XHhCM1x4QzlceDA4XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgor KyJceDAxXHg5OVx4RUJceDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgz RFx4ODRceEY2IgorKyJceDMyXHgxMlx4NEVceEYwXHgyM1x4NkVceDVEXHgxRVx4M0JceDdFXHgy OFx4RkFceEU3XHhBQVx4MDRceDBBIgorKyJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgx Rlx4MzlceDc1XHg0MVx4QkFceDJBXHg1OFx4RkJceDY1IgorKyJceDk5IjsKKysKKysgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtdID0KKysiXHgwMFx4QzlceDdGXHhCMVx4RjBceDI3 XHhGNFx4NTNceEY2XHgzNFx4MTJceDMzXHhFQVx4QUFceEQxXHhEOSIKKysiXHgzNVx4M0ZceDZD XHg0Mlx4RDBceDg4XHg2Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgzNVx4MDJceDhCXHg5RCIKKysi XHg4Nlx4OThceDQwXHhCNFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJc eDA0XHhCNSIKKysiXHhDRlx4Q0VceDMzXHg1Mlx4NTJceDREXHgwNFx4MTZceEE1XHhBNFx4NDFc eEU3XHgwMFx4QUZceDQ2XHgxNSIKKysiXHgwMyI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGRtcDFbXSA9CisrIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhF NFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCisrIlx4RUJceDA3XHhERFx4RENceDAxXHg4 M1x4QTRceEQwXHhBQ1x4OUJceDU0XHhCMFx4NTFceEYyXHhCMVx4M0UiCisrIlx4RDlceDQ5XHgw OVx4NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5QVx4MkUiCisr Ilx4MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3 XHhDOVx4ODEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQor KyJceDQ3XHgxRVx4MDJceDkwXHhGRlx4MEFceEYwXHg3NVx4MDNceDUxXHhCN1x4RjhceDc4XHg4 Nlx4NENceEE5IgorKyJceDYxXHhBRFx4QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1 Nlx4QTlceDRDXHgzMVx4NDZceEE3IgorKyJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0 Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgorKyJceDFCXHg5OVx4QTRceDk1XHg4 NFx4OThceDA3XHhGRVx4MzlceEY5XHgyNFx4NUFceDk4XHgzNlx4REFceDNEIjsKKysgICAgCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9CisrIlx4MDBceEIwXHg2Q1x4 NEZceERBXHhCQlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCisrIlx4 QjNceDgwXHhGMlx4NzFceEY3XHgzNFx4NTNceDg4XHg1MFx4OTNceDA3XHg3Rlx4Q0RceDM5XHhF Mlx4MTEiCisrIlx4OUZceEM5XHg4Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhCMVx4NjdceEE5XHg2 N1x4QkZceDQwXHgyQlx4NEUiCisrIlx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgz Nlx4NjZceEVEXHhGQlx4MjVceDc5XHg4MFx4MzkiCisrIlx4RjciOworKworKyAgICBrZXktPm4g PSBCTl9iaW4yYm4obiwgc2l6ZW9mKG4pLTEsIGtleS0+bik7CisrICAgIGtleS0+ZSA9IEJOX2Jp bjJibihlLCBzaXplb2YoZSktMSwga2V5LT5lKTsKKysgICAga2V5LT5kID0gQk5fYmluMmJuKGQs IHNpemVvZihkKS0xLCBrZXktPmQpOworKyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6ZW9m KHApLTEsIGtleS0+cCk7CisrICAgIGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSktMSwg a2V5LT5xKTsKKysgICAga2V5LT5kbXAxID0gQk5fYmluMmJuKGRtcDEsIHNpemVvZihkbXAxKS0x LCBrZXktPmRtcDEpOworKyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6ZW9mKGRt cTEpLTEsIGtleS0+ZG1xMSk7CisrICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBzaXpl b2YoaXFtcCktMSwga2V5LT5pcW1wKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lk IEZJUFNfY29ycnVwdF9yc2EoKQorKyAgICB7CisrICAgIG5bMF0rKzsKKysgICAgfQorKworKy8q IEtub3duIEFuc3dlciBUZXN0IChLQVQpIGRhdGEgZm9yIHRoZSBhYm92ZSBSU0EgcHJpdmF0ZSBr ZXkgc2lnbmluZworKyAqIGthdF90YnMuCisrICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X3Ric1tdID0gIk9wZW5TU0wgRklQUyAxNDAtMiBQdWJsaWMgS2V5IFJTQSBLQVQi OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTFbXSA9IHsK KysgIDB4MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4Qjks IDB4NDYsIDB4REEsIDB4MEYsCisrICAweDAxLCAweDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1 LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAorKyAgMHhGNCwgMHhCRiwgMHg0 QSwgMHg3NCwgMHgzOSwgMHg1MSwgMHhCQiwgMHhFOCwgMHgwQywgMHhCNywgMHhGOCwgMHhEMywK KysgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4Qzcs IDB4ODMsIDB4RDUsIDB4NEMsCisrICAweDdGLCAweDQ5LCAweEZCLCAweDNGLCAweDI5LCAweDlC LCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3LAorKyAgMHgwRCwgMHhBOSwgMHgy OCwgMHg1NiwgMHg3MywgMHhEOSwgMHgwNywgMHhFMywgMHg1RSwgMHgzRiwgMHg5QiwgMHhGNSwK KysgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4NzQsIDB4QzksIDB4ODMsIDB4ODEsIDB4NDcs IDB4RjAsIDB4QzUsIDB4NDUsCisrICAweDBBLCAweEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4 LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3LCAweDMxLAorKyAgMHhENiwgMHg1NSwgMHhF NCwgMHg2NiwgMHg3OCwgMHg4MSwgMHhENCwgMHhFNiwgMHhEQiwgMHg5RiwgMHhCQSwgMHhFOCwK KysgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4MDgsIDB4RUEsIDB4RDUsIDB4MjYsIDB4MUUs IDB4MjAsIDB4MjUsIDB4ODQsCisrICAweDI2LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNE LCAweDdFLCAweEE5CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1BTU19TSEEyMjRbXSA9IHsKKysgIDB4MzksIDB4NEEsIDB4NkEsIDB4MjAsIDB4QkMsIDB4RTks IDB4MzMsIDB4RUQsIDB4RUYsIDB4QzUsIDB4NTgsIDB4QTcsCisrICAweEZFLCAweDgxLCAweEM0 LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgyLCAweDk4LCAweDA4LCAweDk1LCAweEZBLAor KyAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4Nywg MHg3QiwgMHgxRiwgMHg1NywKKysgIDB4MzAsIDB4OUQsIDB4MEQsIDB4NEEsIDB4MDYsIDB4RUIs IDB4NTIsIDB4MzcsIDB4NTUsIDB4NTQsIDB4MUMsIDB4ODksCisrICAweDgzLCAweDc1LCAweDU5 LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2LCAweENDLCAweDg2LCAweDA1LCAweEVFLAor KyAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwg MHgwQiwgMHhBQiwgMHgyMiwKKysgIDB4MTUsIDB4NzgsIDB4NkIsIDB4NkYsIDB4QTQsIDB4RkIs IDB4NzcsIDB4NDAsIDB4NjQsIDB4NjIsIDB4RDEsIDB4QjUsCisrICAweDM3LCAweDFFLCAweEUw LCAweDNELCAweEE4LCAweEY5LCAweEQyLCAweEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAor KyAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwg MHgwMywgMHhFQSwgMHgyRCwKKysgIDB4QzgsIDB4NTIsIDB4RkEsIDB4Q0YsIDB4N0UsIDB4MzUs IDB4QjAsIDB4NkEsIDB4QUYsIDB4OTUsIDB4QzAsIDB4MDAsCisrICAweDU0LCAweDc2LCAweDNE LCAweDBDLCAweDlDLCAweEIyLCAweEVFLCAweEMwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyNTZbXSA9IHsKKysgIDB4NkQsIDB4M0QsIDB4QkUs IDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCisr ICAweDAwLCAweDk3LCAweEZBLCAweDk5LCAweDcxLCAweDI4LCAweEU1LCAweDEwLCAweDI1LCAw eDlBLCAweEYzLCAweDhGLAorKyAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwg MHgzNiwgMHhFMiwgMHg4RCwgMHg3RCwgMHg3MywgMHgyOCwKKysgIDB4QzEsIDB4NzcsIDB4QzYs IDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCisr ICAweDdELCAweDJFLCAweDJDLCAweDM0LCAweDY4LCAweDhDLCAweDhFLCAweERGLCAweDlELCAw eDQ5LCAweDQ3LCAweDA1LAorKyAgMHhBQiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0Nywg MHg3MCwgMHhGNSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKKysgIDB4MkYsIDB4N0EsIDB4NTQs IDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCisr ICAweDBCLCAweDQ3LCAweDM0LCAweEFGLCAweDkwLCAweERDLCAweEM4LCAweEQ5LCAweDZGLCAw eDU2LCAweENELCAweDlGLAorKyAgMHgyMSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwg MHg3NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKKysgIDB4NUYsIDB4QjcsIDB4MDEs IDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCisr ICAweDcyLCAweEY0LCAweEY2LCAweEVGLCAweDg4LCAweDFFLCAweDJELCAweDFDCisrfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEzODRbXSA9IHsKKysg IDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQsIDB4 MzEsIDB4QTgsIDB4RjIsCisrICAweEVDLCAweDFDLCAweEM0LCAweEM4LCAweDdDLCAweDIyLCAw eDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVFLAorKyAgMHg4NiwgMHgwMCwgMHhGNywg MHgyNSwgMHg3OCwgMHhERSwgMHhEQywgMHg3QSwgMHg3MSwgMHg0NCwgMHg5QSwgMHhDRCwKKysg IDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4NzUsIDB4RDksIDB4MkYsIDB4 NzgsIDB4MjMsIDB4N0YsCisrICAweDZGLCAweDAyLCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAw eDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAweDZDLAorKyAgMHhCMiwgMHg0NCwgMHhFNSwg MHg0RCwgMHg2NiwgMHhBMiwgMHhFNiwgMHg3MSwgMHhGMywgMHhBQywgMHg0RiwgMHhGQiwKKysg IDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQsIDB4QTQsIDB4RUYsIDB4 RDksIDB4M0QsIDB4MkYsCisrICAweDNBLCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAw eEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAweDg5LAorKyAgMHg5OCwgMHg4QiwgMHgzOSwg MHg0NCwgMHhGMCwgMHhGQywgMHgzOCwgMHhBQywgMHg4NywgMHgxRiwgMHhDQSwgMHg2RiwKKysg IDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUsIDB4QUUsIDB4ODgsIDB4MEUsIDB4 NjAsIDB4RjQsIDB4NTUsCisrICAweDQ4LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAw eDRCLCAweEYxCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BT U19TSEE1MTJbXSA9IHsKKysgIDB4MDcsIDB4MUUsIDB4RDgsIDB4RDUsIDB4MDUsIDB4RTgsIDB4 RTYsIDB4RTYsIDB4NTcsIDB4QUUsIDB4NjMsIDB4OEMsCisrICAweEM2LCAweDgzLCAweEI3LCAw eEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAweDhGLCAweDEyLCAweDUzLCAweDlBLAorKyAg MHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhF RCwgMHg5RSwgMHhERCwKKysgIDB4NEIsIDB4RjMsIDB4NDYsIDB4OUIsIDB4NkIsIDB4RjYsIDB4 N0MsIDB4MjQsIDB4NjAsIDB4NzksIDB4MjMsIDB4MzksCisrICAweDAxLCAweDFDLCAweDUxLCAw eENCLCAweEQ4LCAweEU5LCAweDlBLCAweDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAorKyAg MHg3QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3 OCwgMHg1NSwgMHg2MSwKKysgIDB4NTcsIDB4RTMsIDB4MEYsIDB4RTMsIDB4RDIsIDB4OUQsIDB4 MEMsIDB4MkEsIDB4MjAsIDB4QjAsIDB4ODUsIDB4MTMsCisrICAweEM1LCAweDQ3LCAweDM0LCAw eDBELCAweDMyLCAweDE1LCAweEM4LCAweEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYzLAorKyAg MHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhG NCwgMHhBOCwgMHhGRSwKKysgIDB4NzYsIDB4RjIsIDB4MzIsIDB4MUIsIDB4OUMsIDB4N0MsIDB4 Q0EsIDB4RkUsIDB4N0YsIDB4ODAsIDB4QzIsIDB4ODgsCisrICAweDVDLCAweDk3LCAweDcwLCAw eEI0LCAweDI2LCAweEM5LCAweDE0LCAweDhCCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1NIQTFbXSA9IHsKKysgIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4 RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCisrICAweDRBLCAw eEZELCAweDFBLCAweDA1LCAweDhGLCAweDY0LCAweEIxLCAweDZELCAweDYxLCAweDMzLCAweDhE LCAweDlCLAorKyAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1 MSwgMHg1NSwgMHg3NywgMHg5MCwgMHhDRiwKKysgIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4 RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4RjgsCisrICAweDgwLCAw eEQxLCAweDhCLCAweEMyLCAweEVDLCAweDBBLCAweEQ3LCAweDZCLCAweDg4LCAweDhCLCAweDhC LCAweEExLAorKyAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgy NCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKKysgIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEsIDB4 OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCisrICAweEJDLCAw eDI5LCAweEE4LCAweDY3LCAweDEzLCAweEI3LCAweDlGLCAweDFELCAweDA0LCAweDQ0LCAweEU1 LCAweDVGLAorKyAgMHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgzNywgMHgy MSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKKysgIDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4 RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4OTUsCisrICAweERGLCAw eEYxLCAweDVGLCAweDg0LCAweDgwLCAweEQ5LCAweDQ2LCAweEI0CisrfTsKKysKKytzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NIQTIyNFtdID0geworKyAgMHg2MiwgMHhBQSwg MHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1RiwgMHg4QywgMHhCQiwgMHhCNywgMHgxNSwgMHhG OSwKKysgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4 QTAsIDB4QTksIDB4MTgsIDB4OEQsCisrICAweDVCLCAweDU1LCAweDlBLCAweDdFLCAweDFFLCAw eDA4LCAweDA4LCAweDYwLCAweEM1LCAweDFBLCAweEM1LCAweDg5LAorKyAgMHgwOCwgMHhFMiwg MHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgzMCwgMHgyQywgMHg5RSwgMHhD RCwKKysgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4 QzYsIDB4NDUsIDB4NDEsIDB4RTUsCisrICAweEVFLCAweDFGLCAweDhELCAweDdFLCAweDA4LCAw eDE2LCAweEE2LCAweEUxLCAweDVFLCAweDBCLCAweEE5LCAweENDLAorKyAgMHhEQiwgMHg1OSwg MHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgz QiwKKysgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4 OTEsIDB4MjgsIDB4M0UsIDB4QjIsCisrICAweDU4LCAweDJFLCAweDA2LCAweDQ1LCAweDQ5LCAw eEUwLCAweDkyLCAweEUyLCAweEMwLCAweDY2LCAweEU2LCAweDM1LAorKyAgMHhEOSwgMHg3OSwg MHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhE QywKKysgIDB4NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKKyt9 OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7Cisr ICAweDBELCAweDU1LCAweEUyLCAweEFBLCAweDgxLCAweERCLCAweDhFLCAweDgyLCAweDA1LCAw eDE3LCAweEE1LCAweDIzLAorKyAgMHhFNywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4Qywg MHhEMCwgMHg4MSwgMHgyMCwgMHg3QiwgMHhBQSwgMHgyMywKKysgIDB4OTIsIDB4ODcsIDB4OEMs IDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCisr ICAweDk4LCAweDJELCAweDY5LCAweDg0LCAweEJGLCAweEQ5LCAweDhBLCAweDAxLCAweDE3LCAw eDU4LCAweEIyLCAweDZFLAorKyAgMHgyQywgMHg0NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwg MHg1MSwgMHhFOCwgMHg2QSwgMHg5MCwgMHgyRCwgMHgxOCwKKysgIDB4MEUsIDB4QzAsIDB4OTAs IDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCisr ICAweEJFLCAweDIyLCAweEM3LCAweEQzLCAweEVDLCAweEMzLCAweDA5LCAweDVELCAweEJGLCAw eEUyLCAweDgwLCAweDNBLAorKyAgMHg3QywgMHg4NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwg MHhGMCwgMHg1QywgMHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKKysgIDB4QjgsIDB4NDIsIDB4QkIs IDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCisr ICAweDI3LCAweDQ4LCAweDJCLCAweEY1LCAweEFCLCAweEI5LCAweEY3LCAweDgwLCAweEQxLCAw eDkwLCAweDI3LCAweDkwLAorKyAgMHhCRCwgMHg0NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1Nywg MHhDMCwgMHg3QQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9T SEEzODRbXSA9IHsKKysgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAs IDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCisrICAweEQyLCAweDkxLCAweDY4LCAweDU5 LCAweDA0LCAweEFFLCAweEJELCAweDk5LCAweDYzLCAweDU2LCAweDQ3LCAweEM3LAorKyAgMHg2 RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhGQSwg MHg1RCwgMHg1QywKKysgIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQsIDB4N0Us IDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCisrICAweDY1LCAweDNFLCAweEQ5LCAweDJE LCAweDAyLCAweDM4LCAweEE4LCAweDc5LCAweDI4LCAweDdGLCAweEI2LCAweENGLAorKyAgMHg4 MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhFMiwgMHgxOSwgMHgyQiwg MHgzMCwgMHhDMiwKKysgIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIs IDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMsCisrICAweEZGLCAweDk1LCAweEU5LCAweDZB LCAweDFDLCAweDNELCAweDRELCAweEJGLCAweDhGLCAweDhCLCAweDlDLCAweENELAorKyAgMHhF QSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhFQiwgMHhEMCwgMHg4Riwg MHg5OSwgMHhGMSwKKysgIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQs IDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQsCisrICAweEJELCAweDMxLCAweEEyLCAweDJG LCAweEIzLCAweDM1LCAweDU2LCAweEJGCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1NIQTUxMltdID0geworKyAgMHg2OSwgMHg1MiwgMHgxQiwgMHg1MSwgMHg1 RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1RCwgMHhDRiwKKysgIDB4NDksIDB4 MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIs IDB4OUEsCisrICAweDE1LCAweEVBLCAweDVDLCAweEU1LCAweEU2LCAweDgyLCAweEUwLCAweDg2 LCAweDgyLCAweDZCLCAweDMyLCAweEYxLAorKyAgMHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhF RCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1NCwgMHg5RiwgMHhEOCwKKysgIDB4OEQsIDB4 Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIs IDB4QjUsCisrICAweDgwLCAweEUyLCAweEJDLCAweERELCAweDY3LCAweDJCLCAweEQ5LCAweDNG LCAweEU0LCAweDc1LCAweDkyLCAweDZCLAorKyAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhG MCwgMHhFRSwgMHgzMywgMHhERiwgMHgxQiwgMHgxRCwgMHg0NywgMHhFNiwKKysgIDB4NTksIDB4 NTYsIDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQs IDB4MDUsCisrICAweDZGLCAweDBFLCAweDJCLCAweDMxLCAweDlELCAweEY3LCAweDdGLCAweEIy LCAweDY0LCAweDcxLCAweEUwLCAweDJELAorKyAgMHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgz RiwgMHg4OCwgMHhERiwgMHgyRCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5MSwKKysgIDB4REYsIDB4 NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7CisrICAweDg2LCAweEI0 LCAweDE4LCAweEJBLCAweEQxLCAweDgwLCAweEI2LCAweDdDLCAweDQyLCAweDQ1LCAweDRELCAw eERGLAorKyAgMHhFOSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwg MHhDRCwgMHhDNCwgMHhCMiwgMHg3NSwKKysgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcs IDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMsCisrICAweDM1LCAweEUy LCAweEFBLCAweDBCLCAweDVDLCAweEY4LCAweDM4LCAweDRELCAweDA0LCAweEVFLCAweEE5LCAw eDk3LAorKyAgMHg3MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywg MHg0QiwgMHgzOCwgMHhCRSwgMHhENiwKKysgIDB4NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcs IDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTksCisrICAweEVFLCAweDUx LCAweENDLCAweDkyLCAweERELCAweEJDLCAweDYzLCAweDI5LCAweDYzLCAweDBDLCAweDU5LCAw eEQ3LAorKyAgMHg2RiwgMHg0QywgMHgzQywgMHgzNywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwg MHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKKysgIDB4NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4MzIs IDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4NzYsCisrICAweDhFLCAweDZF LCAweENBLCAweDdFLCAweDRFLCAweDE0LCAweEJBLCAweDMwLCAweDg0LCAweDFDLCAweEIzLCAw eDY3LAorKyAgMHhBMywgMHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwgMHg0OQor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTI1Nltd ID0geworKyAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywg MHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKKysgIDB4RTUsIDB4NTIsIDB4MTUsIDB4OEUsIDB4NTIs IDB4OTYsIDB4NEUsIDB4QTYsIDB4NTgsIDB4OTIsIDB4MUMsIDB4REQsCisrICAweEVBLCAweEEy LCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1LCAweDk1LCAweDczLCAw eENGLAorKyAgMHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwg MHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKKysgIDB4QzYsIDB4NTMsIDB4ODgsIDB4MjYsIDB4MjAs IDB4ODgsIDB4NzMsIDB4QjYsIDB4MTMsIDB4QjgsIDB4RjAsIDB4NEIsCisrICAweDAwLCAweDg1 LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAweEM0LCAweDM4LCAweDBFLCAw eDk4LAorKyAgMHhBRCwgMHg0RSwgMHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwg MHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKKysgIDB4N0UsIDB4NzUsIDB4ODksIDB4NjksIDB4MkUs IDB4NjMsIDB4NzYsIDB4ODUsIDB4NDYsIDB4OEQsIDB4QTAsIDB4OEMsCisrICAweDMzLCAweDFE LCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5LCAweDg4LCAweDM1LCAweEExLCAweDQyLCAw eEJELAorKyAgMHgyMSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwg MHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKKysgIDB4RTMsIDB4RTIsIDB4RTgsIDB4MEEsIDB4MEEs IDB4MjksIDB4OTQsIDB4ODAKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfWDkzMV9TSEEzODRbXSA9IHsKKysgIDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMs IDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4N0IsIDB4RUMsIDB4N0IsCisrICAweEYyLCAweDgy LCAweDhFLCAweDk5LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAw eENCLAorKyAgMHhFNiwgMHg0RiwgMHg1RSwgMHgwQSwgMHgxMywgMHhFNCwgMHgyRSwgMHg0MCwg MHhCOSwgMHhCRSwgMHgyRSwgMHhFMywKKysgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQs IDB4MzUsIDB4OUMsIDB4OEUsIDB4RDcsIDB4NEEsIDB4NjMsIDB4RjYsCisrICAweDU3LCAweEMy LCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAw eDMxLAorKyAgMHhEOCwgMHg2OSwgMHhFOSwgMHhBQiwgMHgxMywgMHgyNywgMHg3QiwgMHg0MSwg MHgxRSwgMHg2RCwgMHg4RCwgMHhGMSwKKysgIDB4M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgs IDB4REQsIDB4MkIsIDB4RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4NzksCisrICAweDI0LCAweDIy LCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAw eEZGLAorKyAgMHgwRSwgMHgwOSwgMHhFRSwgMHgyRSwgMHhFMiwgMHgzNywgMHhCOSwgMHhERSwg MHhDNSwgMHgxMiwgMHg0NCwgMHgzNSwKKysgIDB4RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4Mzks IDB4MzEsIDB4MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQsCisrICAweEUyLCAweENE LCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1LCAweDI4CisrfTsKKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7CisrICAweEE2LCAweDY1 LCAweEEyLCAweDc3LCAweDRGLCAweEIzLCAweDg2LCAweENCLCAweDY0LCAweDNBLCAweEMxLCAw eDYzLAorKyAgMHhGQywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0Qiwg MHhFMSwgMHhEOSwgMHhEQSwgMHhBQywKKysgIDB4RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEs IDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcsCisrICAweDNBLCAweEJE LCAweDVFLCAweDUzLCAweDA5LCAweDRBLCAweEU2LCAweDBGLCAweDVFLCAweEY5LCAweDE0LCAw eDI4LAorKyAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhFMywg MHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKKysgIDB4NkUsIDB4MkIsIDB4NzksIDB4OTYsIDB4MEQs IDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4QUYsCisrICAweDE3LCAweDBF LCAweEUwLCAweEJGLCAweDc5LCAweEY2LCAweDA0LCAweDcyLCAweDEwLCAweEUwLCAweEY2LCAw eEQwLAorKyAgMHhDRSwgMHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhCRiwgMHg1OCwg MHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKKysgIDB4OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUs IDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4N0MsCisrICAweDM2LCAweDM1 LCAweDIxLCAweDMxLCAweEMzLCAweEZELCAweDkyLCAweDQyLCAweDExLCAweDMwLCAweDcxLCAw eDFCLAorKyAgMHg2MCwgMHg4MywgMHgxOCwgMHg4OCwgMHhBMywgMHhGNSwgMHg1OSwgMHhDMwor K307CisrCisrCisraW50IEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJeworKwlpbnQgcmV0ID0gMDsK KysJUlNBICprZXk7CisrCUVWUF9QS0VZICpwayA9IE5VTEw7CisrCisrCWlmICgoa2V5PVJTQV9u ZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlzZXRyc2FrZXkoa2V5KTsKKysJaWYgKChw az1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKworKwlFVlBfUEtFWV9h c3NpZ25fUlNBKHBrLCBrZXkpOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEExLCBzaXpl b2Yoa2F0X1JTQV9TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Q S0NTMSwKKysJCQkJIlJTQSBTSEExIFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAor KwkJCQlrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hBMjI0KSwKKysJCQkJRVZQX3No YTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTIyNCBQS0NT IzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyNTYsIHNpemVv ZihrYXRfUlNBX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9QS0NTMSwKKysJCQkJIlJTQSBTSEEyNTYgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCisrCQkJCWthdF9SU0FfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAorKwkJCQlF VlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMzg0 IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTUxMiwg c2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTUxMiBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOwor KworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMSwgc2l6ZW9mKGthdF9SU0FfUFNTX1NI QTEpLAorKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJT QSBTSEExIFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19T SEEyMjQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEyMjQpLAorKwkJCQlFVlBfc2hhMjI0KCksIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTIyNCBQU1MiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9Q U1NfU0hBMjU2KSwKKysJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywK KysJCQkJIlJTQSBTSEEyNTYgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWth dF9SU0FfUFNTX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTM4NCksCisrCQkJCUVWUF9z aGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMzg0IFBTUyIp KQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEE1MTIsIHNpemVv ZihrYXRfUlNBX1BTU19TSEE1MTIpLAorKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTUxMiBQU1MiKSkKKysJCWdvdG8gZXJyOworKworKwor KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90 YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMSwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEx KSwKKysJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBT SEExIFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwkvKiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQg aW4gWDkuMzEgKi8KKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTI1Niwgc2l6ZW9mKGth dF9SU0FfWDkzMV9TSEEyNTYpLAorKwkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9YOTMxLAorKwkJCSJSU0EgU0hBMjU2IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK KysJCQlrYXRfUlNBX1g5MzFfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTM4NCksCisr CQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEEz ODQgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEE1 MTIsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBNTEyKSwKKysJCQlFVlBfc2hhNTEyKCksIEVWUF9N RF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTUxMiBYOTMxIikpCisrCQlnb3RvIGVy cjsKKysKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKwlpZiAocGspCisrCQlFVlBfUEtFWV9m cmVlKHBrKTsKKysJZWxzZSBpZiAoa2V5KQorKwkJUlNBX2ZyZWUoa2V5KTsKKysJcmV0dXJuIHJl dDsKKysJfQorKworKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCitkaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcwkyMDEwLTAxLTIwIDE4 OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Zp cHMvZmlwc19yc2FfeDkzMWcuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor QEAgLTAsMCArMSwyODEgQEAKKysvKiBjcnlwdG8vcnNhL3JzYV9nZW4uYyAqLworKy8qIENvcHly aWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxl bWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSku CisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0 aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21t ZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0 aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNT TCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRp c3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4 Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgor KyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55 IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVk LgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBz aG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0 cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEg dGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRp b24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlw dG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNy eXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVm dCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQg YXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRl IGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9t IAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3Qg aW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysg KiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycn IEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ CisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNl bmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2 ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQu ICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5k ZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQ dWJsaWMgTGljZW5jZS5dCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2V4dGVy biBpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpOworKyNlbmRpZgorKworKy8qIFg5LjMxIFJT QSBrZXkgZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLworKworK2ludCBSU0FfWDkzMV9kZXJp dmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsIEJJR05V TSAqcTIsCisrCQkJY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLCBjb25zdCBC SUdOVU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqWHExLCBjb25zdCBCSUdOVU0gKlhxMiwgY29u c3QgQklHTlVNICpYcSwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJewor KwlCSUdOVU0gKnIwPU5VTEwsKnIxPU5VTEwsKnIyPU5VTEwsKnIzPU5VTEw7CisrCUJOX0NUWCAq Y3R4PU5VTEwsKmN0eDI9TlVMTDsKKysKKysJaWYgKCFyc2EpIAorKwkJZ290byBlcnI7CisrCisr CWN0eCA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgpIAorKwkJZ290byBlcnI7CisrCUJOX0NU WF9zdGFydChjdHgpOworKworKwlyMCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjEgPSBCTl9DVFhf Z2V0KGN0eCk7CisrCXIyID0gQk5fQ1RYX2dldChjdHgpOworKwlyMyA9IEJOX0NUWF9nZXQoY3R4 KTsKKysKKysJaWYgKHIzID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFyc2EtPmUpCisr CQl7CisrCQlyc2EtPmUgPSBCTl9kdXAoZSk7CisrCQlpZiAoIXJzYS0+ZSkKKysJCQlnb3RvIGVy cjsKKysJCX0KKysJZWxzZQorKwkJZSA9IHJzYS0+ZTsKKysKKysJLyogSWYgbm90IGFsbCBwYXJh bWV0ZXJzIHByZXNlbnQgb25seSBjYWxjdWxhdGUgd2hhdCB3ZSBjYW4uCisrCSAqIFRoaXMgYWxs b3dzIHRlc3QgcHJvZ3JhbXMgdG8gb3V0cHV0IHNlbGVjdGl2ZSBwYXJhbWV0ZXJzLgorKwkgKi8K KysKKysJaWYgKFhwICYmICFyc2EtPnApCisrCQl7CisrCQlyc2EtPnAgPSBCTl9uZXcoKTsKKysJ CWlmICghcnNhLT5wKQorKwkJCWdvdG8gZXJyOworKworKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9w cmltZV9leChyc2EtPnAsIHAxLCBwMiwKKysJCQkJCVhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikp CisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmIChYcSAmJiAhcnNhLT5xKQorKwkJeworKwkJ cnNhLT5xID0gQk5fbmV3KCk7CisrCQlpZiAoIXJzYS0+cSkKKysJCQlnb3RvIGVycjsKKysJCWlm ICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIsCisrCQkJCQlYcSwgWHEx LCBYcTIsIGUsIGN0eCwgY2IpKQorKwkJCWdvdG8gZXJyOworKwkJfQorKworKwlpZiAoIXJzYS0+ cCB8fCAhcnNhLT5xKQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUo Y3R4KTsKKysJCXJldHVybiAyOworKwkJfQorKworKwkvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUg c2V0IHdlIGNhbiBub3cgY2FsY3VsYXRlIGFsbCByZW1haW5pbmcgCisrCSAqIGNvbXBvbmVudHMu CisrCSAqLworKworKwkvKiBjYWxjdWxhdGUgbiAqLworKwlyc2EtPm49Qk5fbmV3KCk7CisrCWlm IChyc2EtPm4gPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIUJOX211bChyc2EtPm4scnNh LT5wLHJzYS0+cSxjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBkICovCisr CWlmICghQk5fc3ViKHIxLHJzYS0+cCxCTl92YWx1ZV9vbmUoKSkpCisrCQlnb3RvIGVycjsJLyog cC0xICovCisrCWlmICghQk5fc3ViKHIyLHJzYS0+cSxCTl92YWx1ZV9vbmUoKSkpCisrCQlnb3Rv IGVycjsJLyogcS0xICovCisrCWlmICghQk5fbXVsKHIwLHIxLHIyLGN0eCkpCisrCQlnb3RvIGVy cjsJLyogKHAtMSkocS0xKSAqLworKworKwlpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQor KwkJZ290byBlcnI7CisrCisrCWlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCisr CQlnb3RvIGVycjsJLyogTENNKChwLTEpKHEtMSkpICovCisrCisrCWN0eDIgPSBCTl9DVFhfbmV3 KCk7CisrCWlmICghY3R4MikKKysJCWdvdG8gZXJyOworKworKwlyc2EtPmQ9Qk5fbW9kX2ludmVy c2UoTlVMTCxyc2EtPmUscjAsY3R4Mik7CS8qIGQgKi8KKysJaWYgKHJzYS0+ZCA9PSBOVUxMKQor KwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBkIG1vZCAocC0xKSAqLworKwlyc2EtPmRt cDE9Qk5fbmV3KCk7CisrCWlmIChyc2EtPmRtcDEgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlp ZiAoIUJOX21vZChyc2EtPmRtcDEscnNhLT5kLHIxLGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJ LyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCisrCXJzYS0+ZG1xMT1CTl9uZXcoKTsKKysJaWYg KHJzYS0+ZG1xMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbW9kKHJzYS0+ZG1x MSxyc2EtPmQscjIsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgaW52ZXJz ZSBvZiBxIG1vZCBwICovCisrCXJzYS0+aXFtcD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+cSxy c2EtPnAsY3R4Mik7CisrCisrCWVycjoKKysJaWYgKGN0eCkKKysJCXsKKysJCUJOX0NUWF9lbmQo Y3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCWlmIChjdHgyKQorKwkJQk5fQ1RY X2ZyZWUoY3R4Mik7CisrCS8qIElmIHRoaXMgaXMgc2V0IGFsbCBjYWxscyBzdWNjZXNzZnVsICov CisrCWlmIChyc2EgJiYgcnNhLT5pcW1wICE9IE5VTEwpCisrCQlyZXR1cm4gMTsKKysKKysJcmV0 dXJuIDA7CisrCisrCX0KKysKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNh LCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IG9r ID0gMDsKKysJQklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7CisrCUJOX0NUWCAqY3R4ID0g TlVMTDsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChiaXRzIDwgT1BFTlNTTF9SU0Ff RklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNB X1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJICAgIHJldHVy biAwOworKwkgICAgfQorKworKwlpZiAoYml0cyAmIDB4ZmYpCisrCSAgICB7CisrCSAgICBGSVBT ZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0lOVkFMSURfS0VZX0xF TkdUSCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysKKysJaWYoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRF X0tFWV9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIDA7Cisr CSAgICB9CisrI2VuZGlmCisrCisrCWN0eCA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFjdHgpCisr CQlnb3RvIGVycm9yOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJWHAgPSBCTl9DVFhfZ2V0 KGN0eCk7CisrCVhxID0gQk5fQ1RYX2dldChjdHgpOworKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVf WHBxKFhwLCBYcSwgYml0cywgY3R4KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCXJzYS0+cCA9IEJO X25ldygpOworKwlyc2EtPnEgPSBCTl9uZXcoKTsKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkK KysJCWdvdG8gZXJyb3I7CisrCisrCS8qIEdlbmVyYXRlIHR3byBwcmltZXMgZnJvbSBYcCwgWHEg Ki8KKysKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgWHAsCisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7Cisr CisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwsIFhxLAorKwkJCQkJZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwkv KiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBk ZXJpdmUKKysJICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgorKwkgKi8KKysKKysJaWYgKCFS U0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorKwkJCQlOVUxM LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCisrCQlnb3RvIGVycm9yOwor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCSAg ICBnb3RvIGVycm9yOworKyNlbmRpZgorKworKwlvayA9IDE7CisrCisrCWVycm9yOgorKwlpZiAo Y3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKKysJ CX0KKysKKysJaWYgKG9rKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworKworKwl9Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVz dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRl c3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0 ZXN0LmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMJMjAxMC0wMS0y MCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsOTkgQEAKKysvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFy ZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoK KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK KysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK KysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9zaGEuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIGNoYXIgdGVzdFtdWzYw XT0KKysgICAgeworKyAgICAiIiwKKysgICAgImFiYyIsCisrICAgICJhYmNkYmNkZWNkZWZkZWZn ZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIKKysgICAgfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF09CisrICAg IHsKKysgICAgeyAweGRhLDB4MzksMHhhMywweGVlLDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiww eDU1LAorKyAgICAgIDB4YmYsMHhlZiwweDk1LDB4NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3 LDB4MDkgfSwKKysgICAgeyAweGE5LDB4OTksMHgzZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEs MHhiYSwweDNlLAorKyAgICAgIDB4MjUsMHg3MSwweDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhk MCwweGQ4LDB4OWQgfSwKKysgICAgeyAweDg0LDB4OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQy LDB4NmUsMHhiYSwweGFlLAorKyAgICAgIDB4NGEsMHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4 ZTUsMHg0NiwweDcwLDB4ZjEgfSwKKysgICAgfTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9zaGEx KCkKKysgICAgeworKyAgICB0ZXN0WzJdWzBdKys7CisrICAgIH0KKysKKytpbnQgRklQU19zZWxm dGVzdF9zaGExKCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgZm9yKG49MCA7IG48c2l6 ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsrbikKKysJeworKwl1bnNpZ25lZCBjaGFyIG1k W1NIQV9ESUdFU1RfTEVOR1RIXTsKKysKKysJRVZQX0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0 W25dKSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCk7CisrCWlmKG1lbWNtcChtZCxyZXRbbl0s c2l6ZW9mIG1kKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1Rf U0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQor Kwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMKKy0tLSBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMuZmlw cwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYwkyMDEwLTAxLTIwIDE4OjEz OjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxNzMgQEAKKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+Cisr I2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKwor KyNpZm5kZWYgRklQU0NBTklTVEVSX08KKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQoKSB7IHJl dHVybiAwOyB9Cisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCkge30KKyt2b2lkIE9QRU5TU0xf Y2xlYW5zZSh2b2lkICpwLHNpemVfdCBsZW4pIHt9CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKworK3N0YXRpYyB2b2lkIGhtYWNfaW5pdChTSEFfQ1RYICptZF9jdHgsU0hBX0NU WCAqb19jdHgsCisrCQkgICAgICBjb25zdCBjaGFyICprZXkpCisrICAgIHsKKysgICAgc2l6ZV90 IGxlbj1zdHJsZW4oa2V5KTsKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5bWRb SE1BQ19NQVhfTURfQ0JMT0NLXTsKKysgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURf Q0JMT0NLXTsKKysKKysgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spCisrCXsKKysJU0hBMV9Jbml0 KG1kX2N0eCk7CisrCVNIQTFfVXBkYXRlKG1kX2N0eCxrZXksbGVuKTsKKysJU0hBMV9GaW5hbChr ZXltZCxtZF9jdHgpOworKwlsZW49MjA7CisrCX0KKysgICAgZWxzZQorKwltZW1jcHkoa2V5bWQs a2V5LGxlbik7CisrICAgIG1lbXNldCgma2V5bWRbbGVuXSwnXDAnLEhNQUNfTUFYX01EX0NCTE9D Sy1sZW4pOworKworKyAgICBmb3IoaT0wIDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykK KysJcGFkW2ldPTB4MzZea2V5bWRbaV07CisrICAgIFNIQTFfSW5pdChtZF9jdHgpOworKyAgICBT SEExX1VwZGF0ZShtZF9jdHgscGFkLFNIQV9DQkxPQ0spOworKworKyAgICBmb3IoaT0wIDsgaSA8 IEhNQUNfTUFYX01EX0NCTE9DSyA7IGkrKykKKysJcGFkW2ldPTB4NWNea2V5bWRbaV07CisrICAg IFNIQTFfSW5pdChvX2N0eCk7CisrICAgIFNIQTFfVXBkYXRlKG9fY3R4LHBhZCxTSEFfQ0JMT0NL KTsKKysgICAgfQorKworK3N0YXRpYyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAqbWQs U0hBX0NUWCAqbWRfY3R4LFNIQV9DVFggKm9fY3R4KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNo YXIgYnVmWzIwXTsKKysKKysgICAgU0hBMV9GaW5hbChidWYsbWRfY3R4KTsKKysgICAgU0hBMV9V cGRhdGUob19jdHgsYnVmLHNpemVvZiBidWYpOworKyAgICBTSEExX0ZpbmFsKG1kLG9fY3R4KTsK KysgICAgfQorKworKyNlbmRpZgorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQor KyAgICB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBzdGF0aWMgY2hhciBrZXlbXT0iZXRh b25yaXNoZGxjdXBmbSI7CisrICAgIGludCBuLGJpbmFyeT0wOworKworKyAgICBpZihhcmdjIDwg MikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgWzxmaWxlPl0rXG4iLGFyZ3ZbMF0pOworKwll eGl0KDEpOworKwl9CisrCisrICAgIG49MTsKKysgICAgaWYgKCFzdHJjbXAoYXJndltuXSwiLWJp bmFyeSIpKQorKwl7CisrCW4rKzsKKysJYmluYXJ5PTE7CS8qIGVtaXQgYmluYXJ5IGZpbmdlcnBy aW50Li4uICovCisrCX0KKysKKysgICAgZm9yKDsgbiA8IGFyZ2MgOyArK24pCisrCXsKKysJRklM RSAqZj1mb3Blbihhcmd2W25dLCJyYiIpOworKwlTSEFfQ1RYIG1kX2N0eCxvX2N0eDsKKysJdW5z aWduZWQgY2hhciBtZFsyMF07CisrCWludCBpOworKworKwlpZighZikKKysJICAgIHsKKysJICAg IHBlcnJvcihhcmd2W25dKTsKKysJICAgIGV4aXQoMik7CisrCSAgICB9CisrCisrCWhtYWNfaW5p dCgmbWRfY3R4LCZvX2N0eCxrZXkpOworKwlmb3IoIDsgOyApCisrCSAgICB7CisrCSAgICBjaGFy IGJ1ZlsxMDI0XTsKKysJICAgIHNpemVfdCBsPWZyZWFkKGJ1ZiwxLHNpemVvZiBidWYsZik7Cisr CisrCSAgICBpZihsID09IDApCisrCQl7CisrCQlpZihmZXJyb3IoZikpCisrCQkgICAgeworKwkJ ICAgIHBlcnJvcihhcmd2W25dKTsKKysJCSAgICBleGl0KDMpOworKwkJICAgIH0KKysJCWVsc2UK KysJCSAgICBicmVhazsKKysJCX0KKysJICAgIFNIQTFfVXBkYXRlKCZtZF9jdHgsYnVmLGwpOwor KwkgICAgfQorKwlobWFjX2ZpbmFsKG1kLCZtZF9jdHgsJm9fY3R4KTsKKysKKysJaWYgKGJpbmFy eSkKKysJICAgIHsKKysJICAgIGZ3cml0ZShtZCwyMCwxLHN0ZG91dCk7CisrCSAgICBicmVhazsJ LyogLi4uIGZvciBzaW5nbGUoISkgZmlsZSAqLworKwkgICAgfQorKworKwlwcmludGYoIkhNQUMt U0hBMSglcyk9ICIsYXJndltuXSk7CisrCWZvcihpPTAgOyBpIDwgMjAgOyArK2kpCisrCSAgICBw cmludGYoIiUwMngiLG1kW2ldKTsKKysJcHJpbnRmKCJcbiIpOworKwl9CisrI2VuZGlmCisrICAg IHJldHVybiAwOworKyAgICB9CisrCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1 aXRlLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNTg4 IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKgorKyAqIFRoaXMgY29tbWFu ZCBpcyBpbnRlbmRlZCBhcyBhIHRlc3QgZHJpdmVyIGZvciB0aGUgRklQUy0xNDAgdGVzdGluZwor KyAqIGxhYiBwZXJmb3JtaW5nIEZJUFMtMTQwIHZhbGlkYXRpb24uICBJdCBkZW1vbnN0cmF0ZXMg dGhlIHVzZSBvZiB0aGUKKysgKiBPcGVuU1NMIGxpYnJhcnkgaXRvIHBlcmZvcm0gYSB2YXJpZXR5 IG9mIGNvbW1vbiBjcnlwdG9ncmFwaGljCisrICogZnVuY3Rpb25zLiAgQSBwb3dlci11cCBzZWxm IHRlc3QgaXMgZGVtb25zdHJhdGVkIGJ5IGRlbGliZXJhdGVseQorKyAqIHBvaW50aW5nIHRvIGFu IGludmFsaWQgZXhlY3V0YWJsZSBoYXNoCisrICoKKysgKiBDb250cmlidXRlZCBieSBTdGV2ZSBN YXJxdWVzcy4KKysgKgorKyAqLworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxhc3Nl cnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1 ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5o PgorKworKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKKysgICAgeworKyAgICBwcmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7CisrICAg IHJldHVybigwKTsKKysgICAgfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlw dCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRl eHQKKysqLworK3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQorKwl7CisrCWludCByZXQg PSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzE2XTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFsx Nl07CisrCXVuc2lnbmVkIGNoYXIga2V5WzE2XSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEs MTIsMTMsMTQsMTUsMTZ9OworKwl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25y aXNoZGxjdSI7CisrCUVWUF9DSVBIRVJfQ1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLE5V TEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZjdHgs IGNpdG1wLCBwbGFpbnRleHQsIDE2KTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVW UF9hZXNfMTI4X2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysJCWdvdG8gZXJyOwor KwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYpOworKwlpZiAobWVtY21wKHBsdG1w LCBwbGFpbnRleHQsIDE2KSkKKysJCWdvdG8gZXJyOworKwlyZXQgPSAxOworKwllcnI6CisrCUVW UF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrCXJldHVybiByZXQ7CisrCX0KKysKKytzdGF0 aWMgaW50IEZJUFNfZGVzM190ZXN0KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2ln bmVkIGNoYXIgcGx0bXBbOF07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbOF07CisrICAgIAl1bnNp Z25lZCBjaGFyIGtleVtdID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwx NiwxNywxOCwKKysJCSAgICAgICAgICAgICAgMTksMjAsMjEsMjIsMjMsMjR9OworKyAgICAJdW5z aWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdyJywg J2knLCAncycgfTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0 KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigp LE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKKysJCWdvdG8gZXJyOworKwlFVlBfQ2lwaGVyKCZj dHgsIGNpdG1wLCBwbGFpbnRleHQsIDgpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwg RVZQX2Rlc19lZGUzX2VjYigpLE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysJCWdvdG8gZXJy OworKwlFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgOCk7CisrCWlmIChtZW1jbXAocGx0 bXAsIHBsYWludGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJcmV0ID0gMTsKKysJZXJyOgorKwlF VlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrLyoK KysgKiBEU0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQu CisrICovCisrc3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGludCBiYWQpCisrICAgIHsKKysgICAg RFNBICpkc2EgPSBOVUxMOworKyAgICBFVlBfUEtFWSBwazsKKysgICAgdW5zaWduZWQgY2hhciBk Z3N0W10gPSAiZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOworKyAg ICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgaW50IHIgPSAwOworKyAgICBFVlBfTURfQ1RYIG1j dHg7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1j dHgpOworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrICAgIGlmICghZHNhKQorKwlnb3RvIGVuZDsK KysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsTlVMTCwwLE5V TEwsTlVMTCxOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShk c2EpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93b3JkKGRzYS0+ cHViX2tleSwgMSk7CisrCisrICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7CisrICAgIHBrLnBr ZXkuZHNhID0gZHNhOworKworKyAgICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2Rz czEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4 LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1Np Z25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJZ290byBlbmQ7CisrCisrICAgIGlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVu ZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkg LSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwg c2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwor KyAgICBpZiAoZHNhKQorKyAgCSAgRFNBX2ZyZWUoZHNhKTsKKysgICAgaWYgKHIgIT0gMSkKKysJ cmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyoKKysgKiBSU0E6IGdlbmVy YXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCisrICovCisrc3RhdGlj IGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCisrICAgIHsKKysgICAgUlNBICprZXk7CisrICAg IHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNp Z25lZCBjaGFyIGJ1ZlsyNTZdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgQklHTlVN ICpibjsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSBwazsKKysgICAgaW50 IHIgPSAwOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgRVZQX01EX0NUWF9pbml0 KCZtY3R4KTsKKysgICAga2V5ID0gUlNBX25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAg ICBpZiAoIWtleSB8fCAhYm4pCisrCXJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1 MzcpOworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQor KwlyZXR1cm4gMDsKKysgICAgQk5fZnJlZShibik7CisrICAgIGlmIChiYWQpCisrCSAgICBCTl9h ZGRfd29yZChrZXktPm4sIDEpOworKworKyAgICBway50eXBlID0gRVZQX1BLRVlfUlNBOworKyAg ICBway5wa2V5LnJzYSA9IGtleTsKKysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgs IEVWUF9zaGExKCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnblVwZGF0 ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKKysJZ290byBl bmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysJ Z290byBlbmQ7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGEx KCksIE5VTEwpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4 LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysg ICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6 CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChrZXkpCisrICAJICAg IFJTQV9mcmVlKGtleSk7CisrICAgIGlmIChyICE9IDEpCisrCXJldHVybiAwOworKyAgICByZXR1 cm4gMTsKKysgICAgfQorKworKy8qIFNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0 IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNo CisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25l ZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQorKyAgICAgICAgeyAweDExLCAweGYx LCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLCAw eDM4LCAweDBjLCAweDhiLCAweDFlLCAweDJjLCAweGU4LCAweGIzLCAweGM1LCAweDE4IH07Cisr ICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVk IGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9z aGExKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9m KG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysv KiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJl IHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50 IEZJUFNfc2hhMjU2X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NI QTI1Nl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweGY1LCAweDUzLCAweGNkLCAweGI4LCAweGNmLCAw eDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMsIDB4YzksIDB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAs IDB4OTEsCisrCSAweDYsIDB4ZWMsIDB4OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMs IDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsIDB4NTAsIDB4NGYsIDB4NDcsIDB4NTd9OworKyAgICB1 bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFy IG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7Cisr ICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hh MjU2KCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9m KG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysv KiBTSEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJl IHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50 IEZJUFNfc2hhNTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NI QTUxMl9ESUdFU1RfTEVOR1RIXSA9CisrCXsweDk5LCAweGM5LCAweGU5LCAweDViLCAweDg4LCAw eGQ0LCAweDc4LCAweDg4LCAweGRmLCAweDg4LCAweDVmLCAweDk0LCAweDcxLCAweDY0LCAweDI4 LCAweGNhLAorKwkgMHgxNiwgMHgxZiwgMHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhj NSwgMHgwMywgMHg5OSwgMHhiMiwgMHhkMCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKKysJIDB4 NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUs IDB4N2YsIDB4MjQsIDB4YjEsIDB4ZDksIDB4NDAsIDB4MjIsCisrCSAweDQ5LCAweDU0LCAweDEw LCAweGMyLCAweDIyLCAweDlkLCAweDI3LCAweGZlLCAweGJkLCAweGQ2LCAweGQ2LCAweGViLCAw eDJkLCAweDQyLCAweDFkLCAweGEzfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFv bnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEE1MTJfRElHRVNUX0xFTkdUSF07 CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNp emVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKSkgcmV0dXJuIDA7Cisr ICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNo IG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1 dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkK KysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1 bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGth dmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3MywgMHhmNywgMHhhMCwgMHg0OCwgMHhmOCwg MHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhlYSwgMHhlYSwgMHg1NiwgMHgxYiwgMHg2MSwgMHgy ZSwgMHg3MCwKKysJIDB4YjIsIDB4ZmIsIDB4ZWMsIDB4YzZ9OworKworKyAgICB1bnNpZ25lZCBj aGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKwor KyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGExKCksa2V5LHNp emVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAg cmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBr bm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBj b3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0KCkKKysg ICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNp Z25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFs W0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwgMHg1NSwgMHg2 ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhmZiwgMHhiZSwgMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwg MHgzNSwKKysJIDB4ZTUsIDB4NjIsIDB4NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUs IDB4MzQsIDB4MzMsIDB4M2EsIDB4MTl9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBf TUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xl YXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGEyMjQoKSxrZXksc2l6ZW9mKGtleSkt MSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNt cChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsK KysgICAgfQorKworKy8qIEhNQUMtU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2Vz dCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFz aAorKyovCisrc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKQorKyAgICB7CisrICAg IHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIg aXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9N RF9TSVpFXSA9CisrCXsweGU5LCAweDE3LCAweGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAw eGRhLCAweGQyLCAweDMwLCAweDM2LCAweDAyLCAweGY1LCAweDcyLCAweDMzLCAweDg3LAorKwkg MHg5ZiwgMHhjNiwgMHg2ZSwgMHg3YiwgMHg3ZSwgMHhhOCwgMHhlYSwgMHhhYSwgMHg5ZiwgMHhi YSwgMHhlZSwgMHg1MSwgMHhmZiwgMHhkYSwgMHgyNCwgMHhmNH07CisrCisrICAgIHVuc2lnbmVk IGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47Cisr CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTI1NigpLGtl eSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwor KyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2gg b2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0 ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgp CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAg dW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBr YXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIs IDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMsIDB4MDgsIDB4MjYsIDB4OTksIDB4ZWYsIDB4 M2IsIDB4MTAsCisrCSAweGUyLCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAw eDI5LCAweDgxLCAweDJhLCAweDFiLCAweGFjLCAweGIwLCAweDA3LCAweDM5LCAweDA4LAorKwkg MHhmMywgMHg5MSwgMHgzNSwgMHgxMSwgMHg3NiwgMHhkNiwgMHg0YywgMHgyMCwgMHhmYiwgMHg0 ZCwgMHhjMywgMHhmMywgMHhiOCwgMHg5YiwgMHg4OCwgMHgxY307CisrCisrICAgIHVuc2lnbmVk IGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVkIGludCBvdXRsZW47Cisr CisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMoRVZQX3NoYTM4NCgpLGtl eSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwor KyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhhc2gg b2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0 ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVzdCgp CisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAg dW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBr YXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4Y2QsIDB4M2UsIDB4YjksIDB4NTEsIDB4Yjgs IDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4YWYsIDB4ZjMsIDB4NzcsIDB4NTksIDB4ODUsIDB4 YTksIDB4ZTYsCisrCSAweGY3LCAweGQxLCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAw eGQ4LCAweGE2LCAweDNiLCAweGMxLCAweGFkLCAweDdlLCAweDI0LCAweGNhLCAweGIxLAorKwkg MHhkNywgMHg3OSwgMHgwYSwgMHhhNSwgMHhlYSwgMHgyYywgMHgwMiwgMHg1OCwgMHgwYiwgMHhh NiwgMHg1MiwgMHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5YywKKysJIDB4NDcsIDB4ODYsIDB4 NWQsIDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsIDB4M2Qs IDB4YTYsIDB4ZDksIDB4MmEsIDB4NTN9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBf TUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xl YXJfZXJyb3IoKTsKKysgICAgaWYgKCFITUFDKEVWUF9zaGE1MTIoKSxrZXksc2l6ZW9mKGtleSkt MSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNt cChvdXQsa2F2YWwsb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsK KysgICAgfQorKworKworKy8qIERIOiBnZW5lcmF0ZSBzaGFyZWQgcGFyYW1ldGVycworKyovCisr c3RhdGljIGludCBkaF90ZXN0KCkKKysgICAgeworKyAgICBESCAqZGg7CisrICAgIEVSUl9jbGVh cl9lcnJvcigpOworKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7CisrICAgIGlmICghZGgpCisrCXJl dHVybiAwOworKyAgICBpZiAoIURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZGgsIDEwMjQsIDIs IE5VTEwpKQorKwlyZXR1cm4gMDsKKysgICAgRklQU19kaF9mcmVlKGRoKTsKKysgICAgcmV0dXJu IDE7CisrICAgIH0KKysKKysvKiBaZXJvaXplCisrKi8KKytzdGF0aWMgaW50IFplcm9pemUoKQor KyAgICB7CisrICAgIFJTQSAqa2V5OworKyAgICBCSUdOVU0gKmJuOworKyAgICB1bnNpZ25lZCBj aGFyIHVzZXJrZXlbMTZdID0gCisrCXsgMHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgzYSwgMHhl ZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0NywgMHg3ZiwgMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwg MHg2OCB9OworKyAgICBpbnQgaSwgbjsKKysKKysgICAga2V5ID0gRklQU19yc2FfbmV3KCk7Cisr ICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysJcmV0dXJuIDA7Cisr ICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9l eChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVybiAwOworKyAgICBCTl9mcmVlKGJuKTsKKysg ICAgCisrICAgIG4gPSBCTl9udW1fYnl0ZXMoa2V5LT5kKTsKKysgICAgcHJpbnRmKCIgR2VuZXJh dGVkICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5XG4iLCBuKTsKKysgICAgcHJpbnRmKCJcdEJOIGtl eSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXkt PmQpOworKyAgICBCTl9yYW5kKGtleS0+ZCxuKjgsLTEsMCk7CisrICAgIHByaW50ZigiXHRCTiBr ZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXkt PmQpOworKworKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGJlZm9yZSBvdmVyd3JpdGlu ZzogXG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBw cmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysgICAg UkFORF9ieXRlcyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7CisrICAgIHByaW50ZigiXHRjaGFy IGJ1ZmZlciBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IoaSA9IDA7 IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Cisr ICAgICAgICBwcmludGYoIlxuIik7CisrCisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrc3Rh dGljIGludCBFcnJvcjsKKytjb25zdCBjaGFyICogRmFpbChjb25zdCBjaGFyICptc2cpCisrICAg IHsKKysgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgIEVycm9yKys7CisrICAgIHJldHVybiBt c2c7IAorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsK KysKKysgICAgaW50IGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDAsIGRvX2NvcnJ1cHRfZHNhX2tl eWdlbiA9IDA7CisrICAgIGludCBiYWRfcnNhID0gMCwgYmFkX2RzYSA9IDA7CisrICAgIGludCBk b19ybmdfc3RpY2sgPSAwOworKyAgICBpbnQgbm9fZXhpdCA9IDA7CisrCisrICAgIHByaW50Zigi XHRGSVBTLW1vZGUgdGVzdCBhcHBsaWNhdGlvblxuXG4iKTsKKysKKysgICAgLyogTG9hZCBlbnRy b3B5IGZyb20gZXh0ZXJuYWwgZmlsZSwgaWYgYW55ICovCisrICAgIFJBTkRfbG9hZF9maWxlKCIu cm5kIiwgMTAyNCk7CisrCisrICAgIGlmIChhcmd2WzFdKSB7CisrICAgICAgICAvKiBDb3JydXB0 ZWQgS0FUIHRlc3RzICovCisrICAgICAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYWVzIikpIHsK KysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfYWVzKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJB RVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAg ICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRlcyIpKSB7CisrICAgICAgICAgICAg RklQU19jb3JydXB0X2RlcygpOworKyAgICAgICAgICAgIHByaW50ZigiREVTMy1FQ0IgZW5jcnlw dGlvbi9kZWNyeXB0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3Jy dXB0X2RzYSgpOworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkgeworKyAgICAgICAgICAgIEZJUFNf Y29ycnVwdF9yc2EoKTsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBh bmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5IikpIHsKKysgICAgICAgICAg ICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0 aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9yc2EgPSAxOworKwkgICAgbm9fZXhp dCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIp KSB7CisrCSAgICBkb19jb3JydXB0X3JzYV9rZXlnZW4gPSAxOworKwkgICAgbm9fZXhpdCA9IDE7 CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2 YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7CisrICAgICAgICB9IGVsc2Ug aWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmKCJE U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVk IGtleS4uLlxuIik7CisrCSAgICBiYWRfZHNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAg ICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgeworKwkgICAg ZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAg ICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3 aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGFyZ3ZbMV0sICJzaGExIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfc2hhMSgpOwor KyAgICAgICAgICAgIHByaW50ZigiU0hBLTEgaGFzaCB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIp OworKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZyIpKSB7CisrCSAgICBGSVBTX2Nv cnJ1cHRfcm5nKCk7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkg eworKwkgICAgZG9fcm5nX3N0aWNrID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKwkgICAgcHJp bnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7CisrICAgICAg ICB9IGVsc2UgeworKyAgICAgICAgICAgIHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNcIlxuIiwg YXJndlsxXSk7CisrICAgICAgICAgICAgZXhpdCgxKTsKKysgICAgICAgIH0KKysJaWYgKCFub19l eGl0KSB7CisrICAgICAgICAJaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7CisrIAkJICAgIGRvX3By aW50X2Vycm9ycygpOworKyAgICAgICAgCSAgICBwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBm YWlsZWRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrICAgICAgICAJcHJpbnRmKCJQb3dl ci11cCBzZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7CisrICAgICAgICAJZXhpdCgwKTsKKysJfQor KyAgICB9CisrCisrICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgor KyAgICAqLworKyAgICBwcmludGYoIjEuIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJh dGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAo RC1IKS4uLiIpOworKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFBvd2VyLXVwIHNlbGYgdGVzdAorKyAgICAq LworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMgcG93 ZXItdXAgc2VsZiB0ZXN0Li4uIik7CisrICAgIGlmICghRklQU19tb2RlX3NldCgxKSkKKysJewor Kwlkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQhXG4iKSk7 CisrCWV4aXQoMSk7CisrCX0KKysgICAgcHJpbnRmKCJzdWNjZXNzZnVsXG4iKTsKKysgICAgaWYg KGRvX2NvcnJ1cHRfZHNhX2tleWdlbikKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhX2tl eWdlbigpOworKyAgICBpZiAoZG9fY29ycnVwdF9yc2Ffa2V5Z2VuKQorKyAgICAgICAgICAgIEZJ UFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19ybmdfc3RpY2spCisrICAgICAg ICAgICAgRklQU19ybmdfc3RpY2soKTsKKysKKysgICAgLyogQUVTIGVuY3J5cHRpb24vZGVjcnlw dGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24u Li4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2Flc190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVu Y3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjQuIFJTQSBrZXkgZ2Vu ZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQ U19yc2FfdGVzdChiYWRfcnNhKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisr ICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAg cHJpbnRmKCBGSVBTX2RlczNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVE IVxuIikgKTsKKysKKysgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFs aWRhdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2RzYV90ZXN0KGJh ZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAg LyogU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdhLiBTSEEtMSBoYXNoLi4uIik7 CisrICAgIHByaW50ZiggRklQU19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwo IkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS0yNTYgaGFzaAorKyAgICAqLworKyAgICBw cmludGYoIjdiLiBTSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTI1Nl90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAv KiBTSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Yy4gU0hBLTUxMiBoYXNoLi4u Iik7CisrICAgIHByaW50ZiggRklQU19zaGE1MTJfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMSBoYXNoCisrICAgICov CisrICAgIHByaW50ZigiN2QuIEhNQUMtU0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJ UFNfaG1hY19zaGExX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIp ICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTIyNCBoYXNoCisrICAgICovCisrICAgIHByaW50Zigi N2UuIEhNQUMtU0hBLTIyNCBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTIy NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBITUFDLVNIQS0yNTYgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdmLiBITUFDLVNI QS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpID8g InN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1T SEEtMzg0IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Zy4gSE1BQy1TSEEtMzg0IGhhc2gu Li4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNo CisrICAgICovCisrICAgIHByaW50ZigiN2guIEhNQUMtU0hBLTUxMiBoYXNoLi4uIik7CisrICAg IHByaW50ZiggRklQU19obWFjX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBv cGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI4LiBOb24tQXBwcm92ZWQgY3J5cHRvZ3Jh cGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7CisrICAgIHByaW50ZigiXHRhLiBJbmNsdWRlZCBh bGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBkaF90ZXN0KCkgPyAic3VjY2Vzc2Z1 bCBhcyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSAp OworKworKyAgICAvKiBaZXJvaXphdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjkuIFplcm8t aXphdGlvbi4uLlxuIik7CisrICAgIHByaW50ZiggWmVyb2l6ZSgpID8gIlx0c3VjY2Vzc2Z1bCBh cyBleHBlY3RlZFxuIgorKwkgICAgOiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7 CisrCisrICAgIHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4i LCBFcnJvcik7CisrICAgIHJldHVybiBFcnJvciA/IDEgOiAwOworKyAgICB9CisrCisrI2VuZGlm CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzX2xvY2wuaC5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHNfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZmlwc19sb2NsLmguZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHNfbG9jbC5oCTIwMTAt MDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDcyIEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAg X19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKyt2b2lkIGZpcHNfd19sb2Nr KHZvaWQpOworK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKTsKKyt2b2lkIGZpcHNfcl9sb2NrKHZv aWQpOworK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKTsKKytpbnQgZmlwc19pc19zdGFydGVkKHZv aWQpOworK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lkKTsKKytpbnQgZmlwc19pc19vd25pbmdf dGhyZWFkKHZvaWQpOworK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOworK3ZvaWQg Zmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKytpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhy ZWFkKHZvaWQpOworKworKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkxNgorKwor KyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZmlwcy9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2ZpcHMvTWFrZWZpbGUuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsODEgQEAKKysjCisrIyBPcGVuU1NM L2NyeXB0by9maXBzL01ha2VmaWxlCisrIworKworK0RJUj0JZmlwcworK1RPUD0JLi4vLi4KKytD Qz0JY2MKKytJTkNMVURFUz0KKytDRkxBRz0tZworK01BS0VGSUxFPQlNYWtlZmlsZQorK0FSPQkJ YXIgcgorKworK0NGTEFHUz0gJChJTkNMVURFUykgJChDRkxBRykKKysKKytHRU5FUkFMPU1ha2Vm aWxlCisrVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBmaXBzX3JhbmR0ZXN0LmMKKytBUFBTPQorKwor K0xJQj0kKFRPUCkvbGliY3J5cHRvLmEKKytMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBz X2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5j IFwKKysgICAgZmlwc19yc2Ffc2VsZnRlc3QuYyBmaXBzX3NoYTFfc2VsZnRlc3QuYyBmaXBzLmMg Zmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAorKyAgICBmaXBzX3JzYV94OTMxZy5j CisrCisrTElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBz X2htYWNfc2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCisrICAgIGZpcHNfcnNhX3Nl bGZ0ZXN0Lm8gZmlwc19zaGExX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8g IGZpcHNfcmFuZC5vIFwKKysgICAgZmlwc19yc2FfeDkzMWcubworKworK1NSQz0gJChMSUJTUkMp IGZpcHNfc3RhbmRhbG9uZV9zaGExLmMKKysKKytFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFuZC5o CisrSEVBREVSPQkkKEVYSEVBREVSKQorKworK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChI RUFERVIpCisrCisrdG9wOgorKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9 JChESVIpIHN1Yl9hbGwpCisrCisrYWxsOglsaWIKKysKKytsaWI6CSQoTElCT0JKKQorKwkkKEFS KSAkKExJQikgJChMSUJPQkopCisrCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5k LgorKwlAdG91Y2ggbGliCisrCisrZmlsZXM6CisrCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMu cGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCisrCisrbGlua3M6CisrCUAkKFBFUkwpICQoVE9Q KS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKKysJQCQo UEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQorKwlAJChQRVJM KSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCisrCisraW5zdGFsbDoK KysJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmls ZS4uLgorKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3Qg OyBcCisrCWRvICBcCisrCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2lu Y2x1ZGUvb3BlbnNzbC8kJGk7IFwKKysJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNU QUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKKysJZG9uZTsKKysKKyt0YWdzOgorKwlj dGFncyAkKFNSQykKKysKKyt0ZXN0czoKKysKKytsaW50OgorKwlsaW50IC1ETElOVCAkKElOQ0xV REVTKSAkKFNSQyk+Zmx1ZmYKKysKKytkZXBlbmQ6CisrCUBbIC1uICIkKE1BS0VERVBFTkQpIiBd ICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgorKwkkKE1BS0VERVBFTkQpIC0t ICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCisr CisrZGNsZWFuOgorKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElO RS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3CisrCW12IC1m IE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQorKworK2NsZWFuOgorKwlybSAtZiAqLm8gKi5vYmog bGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgorKworKyMgRE8gTk9U IERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KKysKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vaG1hYy9obWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9obWFjL2htYWMuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDIuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vaG1hYy9obWFjLmMJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC03Nyw2ICs3NywxMyBAQCBpbnQgSE1BQ19Jbml0 X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCisgCisgCWlmIChrZXkgIT0gTlVMTCkKKyAJCXsK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3Mg JiBFVlBfTURfRkxBR19GSVBTKQorKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURf Q1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwgIShjdHgtPmlfY3R4LmZsYWdzICYgRVZQ X01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQorKwkJCWdvdG8gZXJyOworKyNlbmRp ZgorIAkJcmVzZXQ9MTsKKyAJCWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOworIAkJT1BFTlNTTF9h c3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOworQEAgLTIwOSwzICsyMTYsMTAgQEAg dW5zaWduZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZAorIAlyZXR1cm4gTlVMTDsK KyAJfQorIAorK3ZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVk IGxvbmcgZmxhZ3MpCisrCXsKKysJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+aV9jdHgsIGZs YWdzKTsKKysJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+b19jdHgsIGZsYWdzKTsKKysJRVZQ X01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+bWRfY3R4LCBmbGFncyk7CisrCX0KKysKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2htYWMvaG1hYy5oLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vaG1hYy9obWFjLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9obWFjL2htYWMuaC5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vaG1hYy9obWFjLmgJMjAxMC0wMS0yMCAxODox Mzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDEsNiArMTAxLDcgQEAgdW5zaWduZWQgY2hhciAq SE1BQyhjb25zdCBFVlBfTUQgKmV2cF9tZAorIAkJICAgIHVuc2lnbmVkIGludCAqbWRfbGVuKTsK KyBpbnQgSE1BQ19DVFhfY29weShITUFDX0NUWCAqZGN0eCwgSE1BQ19DVFggKnNjdHgpOworIAor K3ZvaWQgSE1BQ19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGxvbmcgZmxh Z3MpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL01h a2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vTWFrZWZpbGUuZmlwcwkyMDA5 LTA0LTA2IDE2OjMxOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL01ha2VmaWxlCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAt MzQsMTQgKzM0LDE0IEBAIEdFTkVSQUw9TWFrZWZpbGUgUkVBRE1FIGNyeXB0by1saWIuY29tIGkK KyAKKyBMSUI9ICQoVE9QKS9saWJjcnlwdG8uYQorIFNIQVJFRF9MSUI9IGxpYmNyeXB0byQoU0hM SUJfRVhUKQorLUxJQlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2 ZXJzaW9uLmMgZXhfZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0 ci5jIG9fZGlyLmMKKy1MSUJPQko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9u Lm8gZXhfZGF0YS5vIGNwdF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9f ZGlyLm8gJChDUFVJRF9PQkopCisrTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBt ZW1fZGJnLmMgY3ZlcnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9f dGltZS5jIG9fc3RyLmMgb19kaXIuYyBvX2luaXQuYyBmaXBzX2Vyci5jCisrTElCT0JKPSBjcnlw dGxpYi5vIG1lbS5vIG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJj ZGljLm8gdWlkLm8gb190aW1lLm8gb19zdHIubyBvX2Rpci5vIG9faW5pdC5vIGZpcHNfZXJyLm8g JChDUFVJRF9PQkopCisgCisgU1JDPSAkKExJQlNSQykKKyAKKyBFWEhFQURFUj0gY3J5cHRvLmgg b3BlbnNzbHYuaCBvcGVuc3NsY29uZi5oIGViY2RpYy5oIHN5bWhhY2tzLmggXAorIAlvc3NsX3R5 cC5oCistSEVBREVSPQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggbWQzMl9jb21tb24uaCBvX3RpbWUu aCBvX3N0ci5oIG9fZGlyLmggJChFWEhFQURFUikKKytIRUFERVI9CWNyeXB0bGliLmggYnVpbGRp bmYuaCBmaXBzX2xvY2wuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAk KEVYSEVBREVSKQorIAorIEFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCisgCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcwkyMDA0LTA3LTI1IDIxOjEwOjQx LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kYzIvbWRj MmRnc3QuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTYxLDYgKzYx LDExIEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KworIAorICN1bmRlZiBjMmwKKyAjZGVmaW5lIGMybChjLGwpCShsID0oKERFU19MT05HKSgqKChj KSsrKSkpICAgICwgXAorQEAgLTc1LDcgKzgwLDcgQEAKKyAJCQkqKChjKSsrKT0odW5zaWduZWQg Y2hhcikoKChsKT4+MjRMKSYweGZmKSkKKyAKKyBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9D VFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKKy1pbnQgTURDMl9J bml0KE1EQzJfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNREMyKQorIAl7CisgCWMt Pm51bT0wOworIAljLT5wYWRfdHlwZT0xOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vbWRjMi9tZGMyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZGMyL21k YzIuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kYzIvbWRjMi5oLmZpcHMJMjAx MC0wMS0yMCAxODoxMzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9tZGMyL21kYzIuaAkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor QEAgLTgwLDcgKzgwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKKyAJaW50IHBhZF90 eXBlOyAvKiBlaXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KKyAJfSBNREMyX0NUWDsKKyAKKy0K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfTURDMl9Jbml0KE1EQzJfQ1RYICpj KTsKKysjZW5kaWYKKyBpbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKKyBpbnQgTURDMl9VcGRh dGUoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwor IGludCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL21kMi9tZDJfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMuZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIw MTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtNjIsNiArNjIsMTEgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisgCisgY29uc3QgY2hhciBNRDJfdmVyc2lvbltdPSJNRDIiIE9QRU5TU0xfVkVSU0lPTl9Q VEVYVDsKKyAKK0BAIC0xMTYsNyArMTIxLDcgQEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9p ZCkKKyAJCXJldHVybigibWQyKGludCkiKTsKKyAJfQorIAorLWludCBNRDJfSW5pdChNRDJfQ1RY ICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDIpCisgCXsKKyAJYy0+bnVtPTA7CisgCW1l bXNldChjLT5zdGF0ZSwwLHNpemVvZiBjLT5zdGF0ZSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9tZDIvbWQyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9t ZDIvbWQyLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZDIvbWQyLmguZmlwcwky MDEwLTAxLTIwIDE4OjEzOjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL21kMi9tZDIuaAkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAor QEAgLTgxLDYgKzgxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKKyAJfSBNRDJfQ1RY OworIAorIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpOworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKytpbnQgcHJpdmF0ZV9NRDJfSW5pdChNRDJfQ1RYICpjKTsKKysjZW5kaWYKKyBpbnQgTUQy X0luaXQoTUQyX0NUWCAqYyk7CisgaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IE1EMl9GaW5hbCh1bnNpZ25lZCBj aGFyICptZCwgTUQyX0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kNC9tZDRf ZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlw cwkyMDA3LTAxLTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAw ICswMTAwCitAQCAtNTksNiArNTksMTEgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVk ZSAibWQ0X2xvY2wuaCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgY29uc3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQi IE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIg TUQ0X3ZlcnNpb25bXT0iTUQ0IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNp Z25lZCBsb25nKTB4OThiYWRjZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9u ZykweDEwMzI1NDc2TAorIAorLWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJ UFNfTURfSW5pdChNRDQpCisgCXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9 SU5JVF9EQVRBX0E7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZDQvbWQ0 LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZDQvbWQ0LmgKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9tZDQvbWQ0LmguZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ1LjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kNC9tZDQuaAky MDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEwNSw2ICsxMDUsOSBAQCB0 eXBlZGVmIHN0cnVjdCBNRDRzdGF0ZV9zdAorIAl1bnNpZ25lZCBpbnQgbnVtOworIAl9IE1ENF9D VFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX01ENF9Jbml0KE1ENF9D VFggKmMpOworKyNlbmRpZgorIGludCBNRDRfSW5pdChNRDRfQ1RYICpjKTsKKyBpbnQgTUQ0X1Vw ZGF0ZShNRDRfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgTUQ0 X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw2ICs1OSwxMSBAQAorICNpbmNsdWRlIDxz dGRpby5oPgorICNpbmNsdWRlICJtZDVfbG9jbC5oIgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIE1E NV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTcwLDcgKzc1 LDcgQEAgY29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgorICNkZWZpbmUg SU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyAjZGVmaW5lIElOSVRfREFU QV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisgCistaW50IE1ENV9Jbml0KE1ENV9DVFgg KmMpCisrRklQU19OT05fRklQU19NRF9Jbml0KE1ENSkKKyAJeworIAltZW1zZXQgKGMsMCxzaXpl b2YoKmMpKTsKKyAJYy0+QT1JTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL21kNS9tZDUuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kNS9t ZDUuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kNS9tZDUuaC5maXBzCTIwMTAt MDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vbWQ1L21kNS5oCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAt MTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0CisgCXVuc2lnbmVkIGlu dCBudW07CisgCX0gTUQ1X0NUWDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZh dGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CisrI2VuZGlmCisgaW50IE1ENV9Jbml0KE1ENV9DVFgg KmMpOworIGludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVf dCBsZW4pOworIGludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWVtLmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9tZW0uYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21l bS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9tZW0uYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCAr MDEwMAorQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgdm9pZCAoKmZyZWVfbG9ja2VkX2Z1bmMp KHZvaWQgKikgCisgCisgLyogbWF5IGJlIGNoYW5nZWQgYXMgbG9uZyBhcyAnYWxsb3dfY3VzdG9t aXplX2RlYnVnJyBpcyBzZXQgKi8KKyAvKiBYWFggdXNlIGNvcnJlY3QgZnVuY3Rpb24gcG9pbnRl ciB0eXBlcyAqLworLSNpZmRlZiBDUllQVE9fTURFQlVHCisrI2lmIGRlZmluZWQoQ1JZUFRPX01E RUJVRykgJiYgIWRlZmluZWQoT1BFTlNTTF9GSVBTKQorIC8qIHVzZSBkZWZhdWx0IGZ1bmN0aW9u cyBmcm9tIG1lbV9kYmcuYyAqLworIHN0YXRpYyB2b2lkICgqbWFsbG9jX2RlYnVnX2Z1bmMpKHZv aWQgKixpbnQsY29uc3QgY2hhciAqLGludCxpbnQpCisgCT0gQ1JZUFRPX2RiZ19tYWxsb2M7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vb19pbml0LmMuZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL29faW5pdC5jCTIwMTAtMDEtMjAgMTg6MTM6NDYu MDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDgwIEBACisrLyogb19pbml0LmMgKi8KKysvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPGVfb3MuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysKKysvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNT TCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zLgorKyAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQ UyBjYWxsYmFja3MKKysgKi8KKysKKyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCisr CXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCXN0YXRpYyBpbnQgZG9uZSA9IDA7CisrCWlmICgh ZG9uZSkKKysJCXsKKysjaWZkZWYgQ1JZUFRPX01ERUJVRworKwkJQ1JZUFRPX21hbGxvY19kZWJ1 Z19pbml0KCk7CisrI2VuZGlmCisrCQlkb25lID0gMTsKKysJCX0KKysjZW5kaWYKKysJfQorKwkJ CisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9vcGVuc3NsY29uZi5oLmlu LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgorLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDA1LTEyLTE2 IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L29wZW5zc2xjb25mLmguaW4JMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BA IC0xLDUgKzEsMjAgQEAKKyAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAqLworIAorKyNpZmRl ZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKysKKysvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhl cmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKKysg KiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1ha2VkZXBlbmQuCisrICoKKysgKiBbT3VyICJt YWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwg YnVpbGQgc2V0dGluZ3MKKysgKiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byBy ZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1zLl0KKysgKi8KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNkZWZpbmUgT1BFTlNTTF9GSVBTCisrI2VuZGlmCisr CisrI2VuZGlmCisrCisgLyogR2VuZXJhdGUgODAzODYgY29kZT8gKi8KKyAjdW5kZWYgSTM4Nl9P TkxZCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9wa2NzMTIvcDEyX2Ny dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYworLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAz LTA5IDE0OjA4OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL3BrY3MxMi9wMTJfY3J0LmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAK K0BAIC01OSw2ICs1OSwxMCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJjcnlw dGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgCisgc3RhdGlj IGludCBwa2NzMTJfYWRkX2JhZyhTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtD UzEyX1NBRkVCQUcgKmJhZyk7CitAQCAtOTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3Jl YXRlKGNoYXIgKnBhc3MsIGNoYXIgKgorIAorIAkvKiBTZXQgZGVmYXVsdHMgKi8KKyAJaWYgKCFu aWRfY2VydCkKKysJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkp CisrCQkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsK KysJCWVsc2UKKysjZW5kaWYKKyAJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0 UkMyX0NCQzsKKysJCX0KKyAJaWYgKCFuaWRfa2V5KQorIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0 aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOworIAlpZiAoIWl0ZXIpCitkaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDA5LTAxLTAzIDEwOjI1OjMyLjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCTIwMTAtMDEt MjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMTI2LDYgKzEyNiwxMCBAQAorIAorICNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisr CisgCisgI2lmZGVmIEJOX0RFQlVHCisgIyBkZWZpbmUgUFJFRElDVAorQEAgLTM0Miw2ICszNDYs MTQgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaAorICNlbmRpZgor IAlpbnQgZG9fc3Rpcl9wb29sID0gMDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJ UFNfbW9kZSgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfU1NMRUFZX1JBTkRfQllU RVMsRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysj ZW5kaWYKKysKKyAjaWZkZWYgUFJFRElDVAorIAlpZiAocmFuZF9wcmVkaWN0YWJsZSkKKyAJCXsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYworLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBzCTIwMDYtMTEtMjEgMjI6Mjk6 NDEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9y YW5kX2Vyci5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtNzAsNiAr NzAsMTMgQEAKKyAKKyBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0c1tdPQor IAl7Cisre0VSUl9GVU5DKFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QpLAkiRU5HX1JB TkRfR0VUX1JBTkRfTUVUSE9EIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkQpLAkiRklQ U19SQU5EIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfQllURVMpLAkiRklQU19SQU5E X0JZVEVTIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUKSwJIkZJUFNfUkFO RF9TRVRfRFQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX0RUKSwJIkZJUFNfU0VUX0RU In0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQpLAkiRklQU19TRVRfUFJO R19TRUVEIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUpLAkiRklQU19T RVRfVEVTVF9NT0RFIn0sCisge0VSUl9GVU5DKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCks CSJSQU5EX2dldF9yYW5kX21ldGhvZCJ9LAorIHtFUlJfRlVOQyhSQU5EX0ZfU1NMRUFZX1JBTkRf QllURVMpLAkiU1NMRUFZX1JBTkRfQllURVMifSwKKyB7MCxOVUxMfQorQEAgLTc3LDcgKzg0LDE3 IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW10KKyAKKyBzdGF0aWMg RVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX3JlYXNvbnNbXT0KKyAJeworK3tFUlJfUkVBU09OKFJB TkRfUl9OT05fRklQU19NRVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKKyt7RVJSX1JF QVNPTihSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSkgICAgICwibm90IGluIHRlc3QgbW9kZSJ9LAor K3tFUlJfUkVBU09OKFJBTkRfUl9OT19LRVlfU0VUKSAgICAgICAgICAgLCJubyBrZXkgc2V0In0s Cisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSCksInBybmcgYXNr aW5nIGZvciB0b28gbXVjaCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0VSUk9SKSAgICAg ICAgICAgLCJwcm5nIGVycm9yIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfS0VZRUQpICAg ICAgICAgICAsInBybmcga2V5ZWQifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVL RVlFRCkgICAgICwicHJuZyBub3QgcmVrZXllZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5H X05PVF9SRVNFRURFRCkgICAgLCJwcm5nIG5vdCByZXNlZWRlZCJ9LAorIHtFUlJfUkVBU09OKFJB TkRfUl9QUk5HX05PVF9TRUVERUQpICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKKyt7RVJSX1JF QVNPTihSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSksInBybmcgc2VlZCBtdXN0 IG5vdCBtYXRjaCBrZXkifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TVFVDSykgICAgICAg ICAgICwicHJuZyBzdHVjayJ9LAorIHswLE5VTEx9CisgCX07CisgCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL3JhbmQvcmFuZC5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9y YW5kLmguZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JhbmQvcmFuZC5oCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAw MDAwMDAwICswMTAwCitAQCAtMTI4LDExICsxMjgsMjggQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0 cmluZ3Modm9pZCk7CisgLyogRXJyb3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8K KyAKKyAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRf UkFORF9NRVRIT0QJCQkgMTA4CisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5ECQkJCSAxMDMKKysj ZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfQllURVMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX0ZJ UFNfUkFORF9TRVRfRFQJCQkJIDEwNgorKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX0RUCQkJCSAx MDQKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQJCQkgMTA3CisrI2RlZmluZSBS QU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJIDEwNQorICNkZWZpbmUgUkFORF9GX1JBTkRfR0VU X1JBTkRfTUVUSE9ECQkJIDEwMQorICNkZWZpbmUgUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTCQkJ IDEwMAorIAorIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIFJBTkRfUl9OT05fRklQU19N RVRIT0QJCQkJIDEwNQorKyNkZWZpbmUgUkFORF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgor KyNkZWZpbmUgUkFORF9SX05PX0tFWV9TRVQJCQkJIDEwNworKyNkZWZpbmUgUkFORF9SX1BSTkdf QVNLSU5HX0ZPUl9UT09fTVVDSAkJCSAxMDEKKysjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJ CSAxMDgKKysjZGVmaW5lIFJBTkRfUl9QUk5HX0tFWUVECQkJCSAxMDkKKysjZGVmaW5lIFJBTkRf Ul9QUk5HX05PVF9SRUtFWUVECQkJCSAxMDIKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNF RURFRAkJCSAxMDMKKyAjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAorKyNk ZWZpbmUgUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9LRVkJCSAxMTAKKysjZGVmaW5l IFJBTkRfUl9QUk5HX1NUVUNLCQkJCSAxMDQKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCistLS0gb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODow NC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYW5kL3Jh bmRfbGliLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC02MCw2ICs2 MCwxMiBAQAorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlICJyYW5kX2xjbC5oIgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+CisrI2VuZGlmCisrCisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQor ICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgorICNlbmRpZgorQEAgLTEwMiw4ICsxMDgsMTkg QEAgY29uc3QgUkFORF9NRVRIT0QgKlJBTkRfZ2V0X3JhbmRfbWV0aG9kKAorIAkJCWZ1bmN0X3Jl ZiA9IGU7CisgCQllbHNlCisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJCWRlZmF1 bHRfUkFORF9tZXRoID0gRklQU19tb2RlKCkgPyBGSVBTX3JhbmRfbWV0aG9kKCkgOiBSQU5EX1NT TGVheSgpOworKwkJfQorKwlpZiAoRklQU19tb2RlKCkKKysJCSYmIGRlZmF1bHRfUkFORF9tZXRo ICE9IEZJUFNfcmFuZF9jaGVjaygpKQorKwkgICAgeworKwkgICAgUkFORGVycihSQU5EX0ZfUkFO RF9HRVRfUkFORF9NRVRIT0QsUkFORF9SX05PTl9GSVBTX01FVEhPRCk7CisrCSAgICByZXR1cm4g MDsKKysJICAgIH0KKysjZWxzZQorIAkJCWRlZmF1bHRfUkFORF9tZXRoID0gUkFORF9TU0xlYXko KTsKKyAJCX0KKysjZW5kaWYKKyAJcmV0dXJuIGRlZmF1bHRfUkFORF9tZXRoOworIAl9CisgCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzIvcmMyLmguZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9yYzIvcmMyLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9yYzIvcmMyLmguZmlwcwkyMDEwLTAxLTIwIDE4OjEzOjQ1LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjMi9yYzIuaAkyMDEwLTAxLTIwIDE4OjEz OjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTc5LDcgKzc5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcmMy X2tleV9zdAorIAlSQzJfSU5UIGRhdGFbNjRdOworIAl9IFJDMl9LRVk7CisgCistIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMgCisrdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwg aW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7CisrI2VuZGlmCisg dm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmRhdGEsaW50IGJpdHMpOworIHZvaWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxSQzJfS0VZICprZXksCisgCQkgICAgIGludCBl bmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmMyL3JjMl9za2V5LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzIvcmMyX3NrZXkuYworLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZpcHMJMjAwNy0wOS0xOCAyMzox MDozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzIv cmMyX3NrZXkuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTU3LDYg KzU3LDExIEBACisgICovCisgCisgI2luY2x1ZGUgPG9wZW5zc2wvcmMyLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAicmMyX2xvY2wuaCIKKyAKKyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2XT17CitAQCAtOTQsOCArOTksMjAg QEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1NgorICAqIEJTQUZFIHVz ZXMgdGhlICdyZXRhcmRlZCcgdmVyc2lvbi4gIFdoYXQgSSBwcmV2aW91c2x5IHNoaXBwZWQgaXMK KyAgKiB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIDEwMjQgZm9yIHRoZSAnYml0cycgcGFyYW1ldGVy LiAgQnNhZmUgdXNlcworICAqIGEgdmVyc2lvbiB3aGVyZSB0aGUgYml0cyBwYXJhbWV0ZXIgaXMg dGhlIHNhbWUgYXMgbGVuKjggKi8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisgdm9pZCBSQzJf c2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEs IGludCBiaXRzKQorIAl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFEX0FCT1JUKFJD MikKKysJcHJpdmF0ZV9SQzJfc2V0X2tleShrZXksIGxlbiwgZGF0YSwgYml0cyk7CisrCX0KKyt2 b2lkIHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhLAorKwkJCQkJCQkJaW50IGJpdHMpCisrI2Vsc2UKKyt2b2lkIFJDMl9z ZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwg aW50IGJpdHMpCisrI2VuZGlmCisrCXsKKyAJaW50IGksajsKKyAJdW5zaWduZWQgY2hhciAqazsK KyAJUkMyX0lOVCAqa2k7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQv YXNtL3JjNC1zMzkweC5wbC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9hc20v cmM0LXMzOTB4LnBsCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L2FzbS9yYzQt czM5MHgucGwuZmlwcwkyMDA5LTAyLTEyIDE1OjQ4OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCTIwMTAtMDEtMjAg MTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMjAyLDQgKzIwMiw2IEBAIFJDNF9vcHRpb25z OgorIC5zdHJpbmcJInJjNCg4eCxjaGFyKSIKKyBfX18KKyAKKyskY29kZSA9fiBzL1JDNF9zZXRf a2V5L3ByaXZhdGVfUkM0X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7CisrCisgcHJp bnQgJGNvZGU7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvYXNtL3Jj NC14ODZfNjQucGwuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvYXNtL3JjNC14 ODZfNjQucGwKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvYXNtL3JjNC14ODZf NjQucGwuZmlwcwkyMDA5LTA0LTI3IDIxOjMxOjA0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAkyMDEwLTAxLTIwIDE4 OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTQ5OSw2ICs0OTksOCBAQCBfX18KKyAKKyAkY29k ZSA9fiBzLyMoW2J3ZF0pLyQxL2dtOworIAorKyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0 ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBwcmludCAkY29kZTsK KyAKKyBjbG9zZSBTVERPVVQ7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9y YzQvYXNtL3JjNC01ODYucGwuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvYXNt L3JjNC01ODYucGwKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvYXNtL3JjNC01 ODYucGwuZmlwcwkyMDA3LTEyLTAyIDIyOjMyOjAzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAkyMDEwLTAxLTIwIDE4OjEz OjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE2Niw4ICsxNjYsMTIgQEAgJGlkeD0iZWR4IjsKKyAK KyAmZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7CisgCisrJHNldGtleWZ1bmMg PSAiUkM0X3NldF9rZXkiOworKyRzZXRrZXlmdW5jID0gInByaXZhdGVfUkM0X3NldF9rZXkiIGlm ICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKysKKyAjIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAq a2V5LGludCBsZW4sY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CistJmZ1bmN0aW9uX2JlZ2lu KCJSQzRfc2V0X2tleSIpOworKyZmdW5jdGlvbl9iZWdpbigkc2V0a2V5ZnVuYyk7CisgCSZtb3YJ KCRvdXQsJndwYXJhbSgwKSk7CQkjIGxvYWQga2V5CisgCSZtb3YJKCRpZGksJndwYXJhbSgxKSk7 CQkjIGxvYWQgbGVuCisgCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CQkjIGxvYWQgZGF0YQorQEAg LTI0NSw3ICsyNDksNyBAQCAkaWR4PSJlZHgiOworIAkmeG9yCSgiZWF4IiwiZWF4Iik7CisgCSZt b3YJKCZEV1AoLTgsJG91dCksImVheCIpOwkJIyBrZXktPng9MDsKKyAJJm1vdgkoJkRXUCgtNCwk b3V0KSwiZWF4Iik7CQkjIGtleS0+eT0wOworLSZmdW5jdGlvbl9lbmQoIlJDNF9zZXRfa2V5Iik7 CisrJmZ1bmN0aW9uX2VuZCgkc2V0a2V5ZnVuYyk7CisgCisgIyBjb25zdCBjaGFyICpSQzRfb3B0 aW9ucyh2b2lkKTsKKyAmZnVuY3Rpb25fYmVnaW5fQigiUkM0X29wdGlvbnMiKTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL3JjNC9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL3JjNC9NYWtlZmlsZS5maXBzCTIwMDktMDItMTEgMTE6MDE6MzYuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L01ha2VmaWxlCTIwMTAtMDEtMjAg MTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMjEsOCArMjEsOCBAQCBURVNUPXJjNHRlc3Qu YworIEFQUFM9CisgCisgTElCPSQoVE9QKS9saWJjcnlwdG8uYQorLUxJQlNSQz1yYzRfc2tleS5j IHJjNF9lbmMuYworLUxJQk9CSj0kKFJDNF9FTkMpCisrTElCU1JDPXJjNF9za2V5LmMgcmM0X2Vu Yy5jIHJjNF9mYmxrLmMKKytMSUJPQko9JChSQzRfRU5DKSByYzRfZmJsay5vCisgCisgU1JDPSAk KExJQlNSQykKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9yYzRf ZmJsay5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L3JjNF9mYmxrLmMKKy0t LSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvcmM0X2ZibGsuYy5maXBzCTIwMTAtMDEt MjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vcmM0L3JjNF9mYmxrLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BA IC0wLDAgKzEsNzUgQEAKKysvKiBjcnlwdG8vcmM0L3JjNF9mYmxrLmMgKi8KKysvKiBXcml0dGVu IGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5T U0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq LworKworKworKyNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorKyNpbmNsdWRlICJyYzRfbG9jbC5o IgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysKKysvKiBGSVBTIG1vZGUgYmxvY2tpbmcgZm9yIFJDNCBoYXMgdG8gYmUgZG9u ZSBzZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5CisrICogbWF5IGJlIGltcGxlbWVudGVkIGlu IGFuIGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCisrICovCisrCisrI2lmZGVmIE9QRU5TU0xfRklQ UworK3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhKQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFEX0FCT1JU KFJDNCkKKysJcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7CisrCX0KKysjZW5k aWYKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9yYzQuaC5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9yYzQuaAorLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3JjNC9yYzQuaC5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L3JjNC5oCTIwMTAtMDEt MjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtNzgsNiArNzgsOSBAQCB0eXBlZGVmIHN0 cnVjdCByYzRfa2V5X3N0CisgCisgIAorIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOwor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lk IFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAq ZGF0YSk7Cisgdm9pZCBSQzQoUkM0X0tFWSAqa2V5LCBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICppbmRhdGEsCisgCQl1bnNpZ25lZCBjaGFyICpvdXRkYXRhKTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vcmM0L3JjNF9za2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9yYzQvcmM0X3NrZXkuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L3JjNF9za2V5LmMJMjAxMC0w MS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC01OSw2ICs1OSwxMSBAQAorICNpbmNs dWRlIDxvcGVuc3NsL3JjNC5oPgorICNpbmNsdWRlICJyYzRfbG9jbC5oIgorICNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAK KyBjb25zdCBjaGFyIFJDNF92ZXJzaW9uW109IlJDNCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwor IAorQEAgLTg1LDcgKzkwLDExIEBAIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpCisgICog RGF0ZTogV2VkLCAxNCBTZXAgMTk5NCAwNjozNTozMSBHTVQKKyAgKi8KKyAKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxl biwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysjZWxzZQorIHZvaWQgUkM0X3NldF9rZXko UkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKyNlbmRp ZgorIAl7CisgICAgICAgICByZWdpc3RlciBSQzRfSU5UIHRtcDsKKyAgICAgICAgIHJlZ2lzdGVy IGludCBpZDEsaWQyOworQEAgLTEyNiw3ICsxMzUsMTIgQEAgdm9pZCBSQzRfc2V0X2tleShSQzRf S0VZICprZXksIGludCBsZW4sIAorIAkJICogbW9kdWxlLi4uCisgCQkgKgkJCQk8YXBwcm9AZnku Y2hhbG1lcnMuc2U+CisgCQkgKi8KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQl1bnNpZ25lZCBs b25nICppYTMyY2FwX3B0ciA9IE9QRU5TU0xfaWEzMmNhcF9sb2MoKTsKKysJCWlmIChpYTMyY2Fw X3B0ciAmJiAoKmlhMzJjYXBfcHRyICYgKDE8PDI4KSkpIHsKKysjZWxzZQorIAkJaWYgKE9QRU5T U0xfaWEzMmNhcF9QICYgKDE8PDI4KSkgeworKyNlbmRpZgorIAkJCXVuc2lnbmVkIGNoYXIgKmNw PSh1bnNpZ25lZCBjaGFyICopZDsKKyAKKyAJCQlmb3IgKGk9MDtpPDI1NjtpKyspIGNwW2ldPWk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yaXBlbWQvcmlwZW1kLmgKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcwkyMDEwLTAxLTIwIDE4OjEz OjQ1LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JpcGVt ZC9yaXBlbWQuaAkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTkxLDYg KzkxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUklQRU1EMTYwc3RhdGVfc3QKKyAJdW5zaWduZWQgaW50 ICAgbnVtOworIAl9IFJJUEVNRDE2MF9DVFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2lu dCBwcml2YXRlX1JJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOworKyNlbmRpZgorIGlu dCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKKyBpbnQgUklQRU1EMTYwX1VwZGF0 ZShSSVBFTUQxNjBfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQg UklQRU1EMTYwX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBSSVBFTUQxNjBfQ1RYICpjKTsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6 MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmlw ZW1kL3JtZF9kZ3N0LmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC01 OSw2ICs1OSwxMSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJybWRfbG9jbC5o IgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFJNRDE2MF92ZXJzaW9uW109IlJJUEUtTUQxNjAiIE9Q RU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC02OSw3ICs3NCw3IEBAIGNvbnN0IGNoYXIgUk1E MTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKKyAgICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJ UEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsc2l6ZV90IG51bSk7CisgIyAgZW5kaWYK KyAKKy1pbnQgUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYykKKytGSVBTX05PTl9GSVBT X01EX0luaXQoUklQRU1EMTYwKQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAlj LT5BPVJJUEVNRDE2MF9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNh L3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2FfZWF5LmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMJMjAwOC0w OS0xNCAxNTo1MTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9yc2EvcnNhX2VheS5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitA QCAtMTE0LDYgKzExNCwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvcnNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisgCisgI2lmbmRlZiBSU0FfTlVMTAorIAorQEAgLTEzOCw3ICsxNDIs NyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9eworIAlCTl9tb2RfZXhw X21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250Z29tZXJ5IGlmICBl ID09IDMgKi8KKyAJUlNBX2VheV9pbml0LAorIAlSU0FfZWF5X2ZpbmlzaCwKKy0JMCwgLyogZmxh Z3MgKi8KKysJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCisgCU5VTEwsCisgCTAs IC8qIHJzYV9zaWduICovCisgCTAsIC8qIHJzYV92ZXJpZnkgKi8KK0BAIC0xNTAsNiArMTU0LDE2 IEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9QS0NTMV9TU0xlYXkodm9pZCkKKyAJcmV0dXJuKCZy c2FfcGtjczFfZWF5X21ldGgpOworIAl9CisgCisrLyogVXNhZ2UgZXhhbXBsZTsKKysgKiAgICBN T05UX0hFTFBFUihyc2EsIGJuX2N0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BS SVZBVEUsIGdvdG8gZXJyKTsKKysgKi8KKysjZGVmaW5lIE1PTlRfSEVMUEVSKHJzYSwgY3R4LCBt LCBwcmVfY29uZCwgZXJyX2luc3RyKSBcCisrCWlmKChwcmVfY29uZCkgJiYgKChyc2EpLT5fbWV0 aG9kX21vZF8jI20gPT0gTlVMTCkgJiYgXAorKwkJCSFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCYo KHJzYSktPl9tZXRob2RfbW9kXyMjbSksIFwKKysJCQkJQ1JZUFRPX0xPQ0tfUlNBLCBcCisrCQkJ CShyc2EpLT5tLCAoY3R4KSkpIFwKKysJCWVycl9pbnN0cgorKworIHN0YXRpYyBpbnQgUlNBX2Vh eV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKKyAJ ICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CitAQCAt MTU4LDYgKzE3MiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZs CisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZiAoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJyOwor KwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNf RU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xf UlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTIyMyw5ICsyNTQsNyBA QCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCisgCQlnb3RvIGVycjsK KyAJCX0KKyAKKy0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCistCQlp ZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xP Q0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJZ290byBlcnI7CisrCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Cisg CisgCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAor IAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7CitAQCAtMzU1LDYgKzM4NCwyMyBAQCBz dGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCisgCWludCBsb2NhbF9ibGlu ZGluZyA9IDA7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7CisgCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0 X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5D UllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJyOworKwkJCX0K KysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9E VUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZ UFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJ CX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVy cjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKK0BAIC00 MzIsOSArNDc4LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgor IAkJZWxzZQorIAkJCWQ9IHJzYS0+ZDsKKyAKKy0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFVCTElDKQorLQkJCWlmKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRo b2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJCQlnb3RvIGVycjsK KysJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVf UFVCTElDLCBnb3RvIGVycik7CisgCisgCQlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQs ZixkLHJzYS0+bixjdHgsCisgCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOworQEAg LTQ4OCw2ICs1MzIsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQg ZgorIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOworIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBO VUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJewor KwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0Zf UlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJ CQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5T U0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9GX1JT QV9FQVlfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJl dHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKChjdHggPSBCTl9DVFhfbmV3 KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJZiAgID0gQk5f Q1RYX2dldChjdHgpOworQEAgLTU1NSw5ICs2MTYsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJp dmF0ZV9kZWNyeXB0KGludCBmCisgCQllbHNlCisgCQkJZCA9IHJzYS0+ZDsKKyAKKy0JCWlmIChy c2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJCWlmICghQk5fTU9OVF9DVFhf c2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwg Y3R4KSkKKy0JCQkJZ290byBlcnI7CisrCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5m bGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOworIAkJaWYgKCFyc2EtPm1l dGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAorIAkJCQlyc2EtPl9tZXRob2RfbW9k X24pKQorIAkJICBnb3RvIGVycjsKK0BAIC02MTcsNiArNjc2LDIzIEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Cisg CUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19t b2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlG SVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNU X0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKEJOX251bV9iaXRzKHJz YS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJCVJT QWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9u dW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJ CVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19M QVJHRSk7CitAQCAtNjY3LDkgKzc0Myw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVj cnlwdChpbnQgZmwKKyAJCWdvdG8gZXJyOworIAkJfQorIAorLQlpZiAocnNhLT5mbGFncyAmIFJT QV9GTEFHX0NBQ0hFX1BVQkxJQykKKy0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNh LT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQlnb3Rv IGVycjsKKysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19D QUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAKKyAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAo cmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCisgCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVy cjsKK0BAIC03MTcsNiArNzkxLDcgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVN ICpyMCwgYworIAlCSUdOVU0gKnIxLCptMSwqdnJmeTsKKyAJQklHTlVNIGxvY2FsX2RtcDEsbG9j YWxfZG1xMSxsb2NhbF9jLGxvY2FsX3IxOworIAlCSUdOVU0gKmRtcDEsKmRtcTEsKmMsKnByMTsK KysJaW50IGJuX2ZsYWdzOworIAlpbnQgcmV0PTA7CisgCisgCUJOX0NUWF9zdGFydChjdHgpOwor QEAgLTcyNCw0MSArNzk5LDMxIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAq cjAsIGMKKyAJbTEgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCXZyZnkgPSBCTl9DVFhfZ2V0KGN0eCk7 CisgCistCXsKKy0JCUJJR05VTSBsb2NhbF9wLCBsb2NhbF9xOworLQkJQklHTlVNICpwID0gTlVM TCwgKnEgPSBOVUxMOworLQorLQkJLyogTWFrZSBzdXJlIEJOX21vZF9pbnZlcnNlIGluIE1vbnRn b21lcnkgaW50aWFsaXphdGlvbiB1c2VzIHRoZQorLQkJICogQk5fRkxHX0NPTlNUVElNRSBmbGFn ICh1bmxlc3MgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FIGlzIHNldCkKKy0JCSAqLworLQkJaWYgKCEo cnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCistCQkJeworLQkJCUJOX2luaXQo JmxvY2FsX3ApOworLQkJCXAgPSAmbG9jYWxfcDsKKy0JCQlCTl93aXRoX2ZsYWdzKHAsIHJzYS0+ cCwgQk5fRkxHX0NPTlNUVElNRSk7CistCistCQkJQk5faW5pdCgmbG9jYWxfcSk7CistCQkJcSA9 ICZsb2NhbF9xOworLQkJCUJOX3dpdGhfZmxhZ3MocSwgcnNhLT5xLCBCTl9GTEdfQ09OU1RUSU1F KTsKKy0JCQl9CistCQllbHNlCistCQkJeworLQkJCXAgPSByc2EtPnA7CistCQkJcSA9IHJzYS0+ cTsKKy0JCQl9CisrCS8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBtb250Z29tZXJleSBpbnRp YWxpemF0aW9uIHVzZSBjb3JyZWN0IAorKwkgKiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcuCisrCSAq LworKwlibl9mbGFncyA9IHJzYS0+cC0+ZmxhZ3M7CisrCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19OT19DT05TVFRJTUUpKQorKwkJeworKwkJcnNhLT5wLT5mbGFncyB8PSBCTl9GTEdfQ09O U1RUSU1FOworKwkJfQorKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcCwgcnNhLT5mbGFncyAmIFJT QV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKKysJLyogV2UgcmVzdG9yZSBibl9mbGFn cyBiYWNrICovCisrCXJzYS0+cC0+ZmxhZ3MgPSBibl9mbGFnczsKKyAKKy0JCWlmIChyc2EtPmZs YWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSkKKy0JCQl7CistCQkJaWYgKCFCTl9NT05UX0NU WF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3AsIENSWVBUT19MT0NLX1JTQSwgcCwgY3R4 KSkKKy0JCQkJZ290byBlcnI7CistCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2Et Pl9tZXRob2RfbW9kX3EsIENSWVBUT19MT0NLX1JTQSwgcSwgY3R4KSkKKy0JCQkJZ290byBlcnI7 CistCQkJfQorLQl9CisrICAgICAgICAvKiBNYWtlIHN1cmUgbW9kX2ludmVyc2UgaW4gbW9udGdv bWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdAorKyAgICAgICAgICogQk5fRkxHX0NPTlNU VElNRSBmbGFnLgorKyAgICAgICAgICovCisrCWJuX2ZsYWdzID0gcnNhLT5xLT5mbGFnczsKKysJ aWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCisrCQl7CisrCQlyc2Et PnEtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7CisrCQl9CisrCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBxLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOwor KwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sgKi8KKysJcnNhLT5xLT5mbGFncyA9IGJuX2Zs YWdzOwkKKyAKKy0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCistCQlp ZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xP Q0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJZ290byBlcnI7CisrCU1PTlRfSEVMUEVSKHJzYSwg Y3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Cisg CisgCS8qIGNvbXB1dGUgSSBtb2QgcSAqLworIAlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Tk9fQ09OU1RUSU1FKSkKK0BAIC04NzUsNiArOTQwLDkgQEAgZXJyOgorIAorIHN0YXRpYyBpbnQg UlNBX2VheV9pbml0KFJTQSAqcnNhKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBT X3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hF X1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOworIAlyZXR1cm4oMSk7CisgCX0KK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6NTYuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDEw LTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTExMSw4ICsxMTEsMTIgQEAgc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhSU0FfRl9S U0FfUFJJTlRfRlApLAkiUlNBX3ByaW50X2ZwIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklW X0RFQ09ERSksCSJSU0FfUFJJVl9ERUNPREUifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZf RU5DT0RFKSwJIlJTQV9QUklWX0VOQ09ERSJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVkFU RV9FTkNSWVBUKSwJIlJTQV9wcml2YXRlX2VuY3J5cHQifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNB X1BVQl9ERUNPREUpLAkiUlNBX1BVQl9ERUNPREUifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BV QkxJQ19ERUNSWVBUKSwJIlJTQV9wdWJsaWNfZGVjcnlwdCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9S U0FfU0VUVVBfQkxJTkRJTkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCisre0VSUl9GVU5DKFJT QV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9LAor K3tFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAorIHtF UlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAorIHtFUlJfRlVOQyhSU0FfRl9S U0FfU0lHTl9BU04xX09DVEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9 LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKK0BAIC0xNTUs MTAgKzE1OSwxMiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfcmVhc29uc1tdCisg e0VSUl9SRUFTT04oUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBz bWFsbCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRCkgICAgLCJsYXN0 IG9jdGV0IGludmFsaWQifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkg ICAgICwibW9kdWx1cyB0b28gbGFyZ2UifSwKKyt7RVJSX1JFQVNPTihSU0FfUl9OT05fRklQU19N RVRIT0QpICAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCisge0VSUl9SRUFTT04oUlNBX1JfTk9f UFVCTElDX0VYUE9ORU5UKSAgICAsIm5vIHB1YmxpYyBleHBvbmVudCJ9LAorIHtFUlJfUkVBU09O KFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcpLCJudWxsIGJlZm9yZSBibG9jayBtaXNz aW5nIn0sCisge0VSUl9SRUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4gZG9l cyBub3QgZXF1YWwgcCBxIn0sCisge0VSUl9SRUFTT04oUlNBX1JfT0FFUF9ERUNPRElOR19FUlJP UikgICAsIm9hZXAgZGVjb2RpbmcgZXJyb3IifSwKKyt7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJ T05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKSwib3BlcmF0aW9uIG5vdCBhbGxvd2VkIGluIGZp cHMgbW9kZSJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZP Ul9USElTX0tFWVRZUEUpLCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBl In0sCisge0VSUl9SRUFTT04oUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQpICAsInBhZGRpbmcg Y2hlY2sgZmFpbGVkIn0sCisge0VSUl9SRUFTT04oUlNBX1JfUF9OT1RfUFJJTUUpICAgICAgICAg ICAsInAgbm90IHByaW1lIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9y c2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9nZW4u YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcwkyMDA3 LTAzLTI4IDAyOjE1OjI3LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAK K0BAIC02Nyw2ICs2Nyw4MiBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisr Cisrc3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysKKyt2b2lkIEZJUFNf Y29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9 IDE7CisrCX0KKysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisrCXsKKysJY29uc3Qg dW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7CisrCXVuc2ln bmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50IGxlbiwgcmV0ID0g MDsKKysJRVZQX1BLRVkgKnBrOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxM KQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOworKworKwkv KiBQZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCisrCWlmICgh Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9z aGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrCQl8fCAhZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVW UF9NRF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKKysJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCS8qIE5vdyBwZXJmb3JtIHBhaXJ3 aXNlIGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrCWN0YnVmID0gT1BFTlNT TF9tYWxsb2MoUlNBX3NpemUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQlnb3RvIGVycjsKKysK KysJbGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1Ziwg cnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gPD0gMCkKKysJCWdvdG8gZXJyOwor KwkvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCisrCWlmICgo bGVuID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCisr CQlnb3RvIGVycjsKKysJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysK KysJaWYgKCFwdGJ1ZikKKysJCWdvdG8gZXJyOworKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0 KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiAh PSAoc2l6ZW9mKHRicykgLSAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVtY21wKHB0YnVmLCB0 YnMsIGxlbikpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJaWYgKCFwdGJ1ZikK KysJCWdvdG8gZXJyOworKwkKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBz X3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxG SVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAoY3RidWYpCisrCQlP UEVOU1NMX2ZyZWUoY3RidWYpOworKwlpZiAocHRidWYpCisrCQlPUEVOU1NMX2ZyZWUocHRidWYp OworKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJ fQorKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBp bnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOworIAorQEAgLTkwLDYgKzE2 NiwyMyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgCisgCWludCBi aXRzcCxiaXRzcSxvaz0gLTEsbj0wOworIAlCTl9DVFggKmN0eD1OVUxMOworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYoRklQU19zZWxmdGVz dF9mYWlsZWQoKSkKKysJICAgIAl7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5f S0VZR0VOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICAJcmV0dXJuIDA7Cisr CSAgICAJfQorKworKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpCisrCQkgICAgeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixG SVBTX1JfS0VZX1RPT19TSE9SVCk7CisrCQkgICAgcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKyNl bmRpZgorKworIAljdHg9Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJy OworIAlCTl9DVFhfc3RhcnQoY3R4KTsKK0BAIC0yMDEsNiArMjk0LDE3IEBAIHN0YXRpYyBpbnQg cnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCAKKyAJCXAgPSByc2EtPnA7CisgCWlmICghQk5f bW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJyOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYgKGZpcHNfcnNh X3BhaXJ3aXNlX2ZhaWwpCisrCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsKKysKKysJCWlmKCFm aXBzX2NoZWNrX3JzYShyc2EpKQorKwkJICAgIGdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKwor IAlvaz0xOworIGVycjoKKyAJaWYgKG9rID09IC0xKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNh L3JzYS5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAx MC0wMS0yMCAxODoxMzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9yc2EvcnNhLmgJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BA IC03NCw2ICs3NCwyMSBAQAorICNlcnJvciBSU0EgaXMgZGlzYWJsZWQuCisgI2VuZGlmCisgCisr LyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBh bmQgY2FuIGJlIHVzZWQKKysgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxp ZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KKysgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxh ZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQorKyAqIHRvIGVuc3Vy ZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KKysgKi8KKysKKysjZGVmaW5lIFJTQV9GTEFHX0ZJ UFNfTUVUSE9ECQkJMHgwNDAwCisrCisrLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0 aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCisrICogcGVybWl0dGVkIGl0 IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0 aGUKKysgKiB1c2FnZSBpcyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBSU0FfRkxBR19O T05fRklQU19BTExPVwkJCTB4MDQwMAorKworICNpZmRlZiAgX19jcGx1c3BsdXMKKyBleHRlcm4g IkMiIHsKKyAjZW5kaWYKK0BAIC0xNjQsNiArMTc5LDggQEAgc3RydWN0IHJzYV9zdAorICMgZGVm aW5lIE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMJMTYzODQKKyAjZW5kaWYKKyAKKysjZGVm aW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2lmbmRlZiBP UEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFM TF9NT0RVTFVTX0JJVFMJMzA3MgorICNlbmRpZgorQEAgLTI2Nyw2ICsyODQsMTEgQEAgUlNBICoJ UlNBX2dlbmVyYXRlX2tleShpbnQgYml0cywgdW5zaWduZQorIAorIC8qIE5ldyB2ZXJzaW9uICov CisgaW50CVJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUs IEJOX0dFTkNCICpjYik7CisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVN ICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBCSUdO VU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3Qg QklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJCWNv bnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5 X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwor IAorIGludAlSU0FfY2hlY2tfa2V5KGNvbnN0IFJTQSAqKTsKKyAJLyogbmV4dCA0IHJldHVybiAt MSBvbiBlcnJvciAqLworQEAgLTQzOCw4ICs0NjAsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3Ry aW5ncyh2b2lkKTsKKyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2CisgI2RlZmlu ZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUJCQkJIDEzNworICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZf RU5DT0RFCQkJCSAxMzgKKysjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4 CisgI2RlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5CisrI2RlZmluZSBSU0FfRl9S U0FfUFVCTElDX0RFQ1JZUFQJCQkgMTQ5CisgI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJ TkcJCQkgMTM2CisrI2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1MAor KyNkZWZpbmUgUlNBX0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQorICNkZWZpbmUgUlNBX0ZfUlNB X1NJR04JCQkJCSAxMTcKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5H CQkgMTE4CisgI2RlZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKK0BAIC00NzksMTAgKzUw NSwxMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgUlNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMCQkJIDEyMAorICNkZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZB TElECQkJIDEzNAorICNkZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwNQorKyNk ZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKKyAjZGVmaW5lIFJTQV9SX05PX1BV QkxJQ19FWFBPTkVOVAkJCSAxNDAKKyAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01J U1NJTkcJCQkgMTEzCisgI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcK KyAjZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCisrI2RlZmluZSBSU0Ff Ul9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKKyAjZGVmaW5lIFJTQV9S X09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAorICNkZWZpbmUg UlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQJCQkgMTE0CisgI2RlZmluZSBSU0FfUl9QX05PVF9Q UklNRQkJCQkgMTI4CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNh X2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9saWIuYworLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDA5LTEyLTA5 IDE0OjM4OjIwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L3JzYS9yc2FfbGliLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC04 MCw2ICs4MCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVmYXVs dF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01F VEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNB X1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybjsKKysJCX0KKysjZW5kaWYKKyAJZGVmYXVs dF9SU0FfbWV0aCA9IG1ldGg7CisgCX0KKyAKK0BAIC0xMTEsNiArMTE4LDEzIEBAIGludCBSU0Ff c2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KKyAJLyogTkI6IFRoZSBjYWxsZXIgaXMg c3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCisgCSAq IHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8KKyAJY29uc3QgUlNB X01FVEhPRCAqbXRtcDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAm JiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJy KFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJu IDA7CisrCQl9CisrI2VuZGlmCisgCW10bXAgPSByc2EtPm1ldGg7CisgCWlmIChtdG1wLT5maW5p c2gpIG10bXAtPmZpbmlzaChyc2EpOworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKK0BAIC0x NjMsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCisgCQkJ fQorIAkJfQorICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgp ICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJ CVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisrCQlpZiAocmV0LT5lbmdpbmUpCisrCQkJRU5HSU5F X2ZpbmlzaChyZXQtPmVuZ2luZSk7CisrI2VuZGlmCisrCQlPUEVOU1NMX2ZyZWUocmV0KTsKKysJ CXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorIAorIAlyZXQtPnBhZD0wOworIAlyZXQtPnZl cnNpb249MDsKK0BAIC0yOTQsNiArMzIwLDEzIEBAIGludCBSU0FfcHVibGljX2VuY3J5cHQoaW50 IGZsZW4sIGNvbnN0IHUKKyBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQgZmxlbiwgY29uc3Qg dW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCisgCSAgICAgUlNBICpyc2Es IGludCBwYWRkaW5nKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX21vZGUo KSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCisrCQl7CisrCQlS U0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExP V0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAJcmV0dXJu KHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsK KyAJfQorIAorQEAgLTMwNiw2ICszMzksMTMgQEAgaW50IFJTQV9wcml2YXRlX2RlY3J5cHQoaW50 IGZsZW4sIGNvbnN0IAorIGludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRvLAorIAkgICAgIFJTQSAqcnNhLCBp bnQgcGFkZGluZykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkg JiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJeworKwkJUlNB ZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VE X0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAJcmV0dXJuKHJz YS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOworIAl9 CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhX3NpZ24uYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCistLS0gb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDA3LTA0LTI0IDAzOjA1 OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9y c2Ffc2lnbi5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMTMwLDcg KzEzMCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWky ZF9YNTA5X1NJRygmc2lnLCZwKTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2Vu Y3J5cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1 bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkg PSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxz aWdyZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9 MDsKKyAJZWxzZQorQEAgLTE2MSw4ICsxNjIsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0 eXBlLCBjb25zdCB1bnNpCisgCisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQor IAkJeworLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1 ZixybSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9k ZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJt LHJzYSxSU0FfUEtDUzFfUEFERElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4g MDsKKyAJCSpwcm1fbGVuID0gaTsKK0BAIC0xNzksNyArMTgwLDggQEAgaW50IGludF9yc2FfdmVy aWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklG WSxSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlp PVJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BB RERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9p ZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5t ZXRoLT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpIDogMDsKKyAKKyAJaWYgKGkgPD0gMCkgZ290byBlcnI7CisgCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v c2hhL3NoYV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCTIwMTAtMDEtMjAg MTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtNTcsNiArNTcsMTIgQEAKKyAgKi8KKyAKKyAj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2lmICFkZWZpbmVkKE9QRU5T U0xfTk9fU0hBMCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpCisgCisgI3VuZGVmICBTSEFf MQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYS5oCistLS0gb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAxMC0wMS0yMCAxODoxMzo0NS4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhLmgJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDYsNiArMTA2LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgU0hBc3RhdGVfc3QKKyAJfSBTSEFfQ1RYOworIAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEEw CisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX1NIQV9Jbml0KFNIQV9DVFggKmMp OworKyNlbmRpZgorIGludCBTSEFfSW5pdChTSEFfQ1RYICpjKTsKKyBpbnQgU0hBX1VwZGF0ZShT SEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBX0ZpbmFs KHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vc2hhL3NoYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hh X2xvY2wuaC5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAxMC0wMS0yMCAxODoxMzo0 Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMjIsOCArMTIyLDE1IEBAIHZvaWQgc2hhMV9ibG9ja19k YXRhX29yZGVyIChTSEFfQ1RYICpjLCAKKyAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1NDc2 VUwKKyAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKKyAKKysjaWYgZGVmaW5lZChT SEFfMCkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrRklQU19OT05fRklQU19NRF9Jbml0KFNI QSkKKysjZWxzZQorIGludCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCisrI2VuZGlmCisgCXsKKysj aWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrCUZJUFNfc2VsZnRl c3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPmgw PUlOSVRfREFUQV9oMDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gxOworZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9zaGEvc2hhMWRnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3No YS9zaGExZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhMWRnc3QuYwkyMDEwLTAxLTIwIDE4 OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTYzLDYgKzYzLDEwIEBACisgI2RlZmluZSBTSEFf MQorIAorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFy IFNIQTFfdmVyc2lvbltdPSJTSEExIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9zaGEvc2hhMjU2LmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDEwLTAxLTIw IDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyLDEyICsxMiwxOSBAQAorIAorICNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisg I2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAKKyBjb25zdCBjaGFyIFNIQTI1Nl92ZXJz aW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKyBpbnQgU0hBMjI0X0lu aXQgKFNIQTI1Nl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMt PmhbMF09MHhjMTA1OWVkOFVMOwljLT5oWzFdPTB4MzY3Y2Q1MDdVTDsKKyAJYy0+aFsyXT0weDMw NzBkZDE3VUw7CWMtPmhbM109MHhmNzBlNTkzOVVMOworQEAgLTI5LDYgKzM2LDkgQEAgaW50IFNI QTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQorIAorIGludCBTSEEyNTZfSW5pdCAoU0hBMjU2X0NU WCAqYykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygp OworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+aFswXT0weDZhMDll NjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOworIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+ aFszXT0weGE1NGZmNTNhVUw7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9z aGEvc2hhNTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhNTEyLmMK Ky0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDA5LTEy LTMwIDEyOjUzOjMzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL3NoYS9zaGE1MTIuYwkyMDEwLTAxLTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAg LTUsNiArNSwxMCBAQAorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICovCisgI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorKworICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEE1MTIpCisgLyoKKyAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4K K0BAIC02MSw2ICs2NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIg T1AKKyAKKyBpbnQgU0hBMzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAjaWYgZGVmaW5l ZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKKyAJ LyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLwor IAl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKK0BAIC05MCw2ICs5Nyw5 IEBAIGludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKKyAKKyBpbnQgU0hBNTEyX0luaXQg KFNIQTUxMl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRl c3RfY2hlY2soKTsKKysjZW5kaWYKKyAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5l ZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKKyAJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIg cmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLworIAl1bnNpZ25lZCBpbnQgKmggPSAodW5z aWduZWQgaW50ICopYy0+aDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvTWFrZWZpbGUu b3JnLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9NYWtlZmlsZS5vcmcKKy0tLSBvcGVuc3NsLTEu MC4wLWJldGE1L01ha2VmaWxlLm9yZy5maXBzCTIwMTAtMDEtMjAgMTg6MTM6NDUuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9NYWtlZmlsZS5vcmcJMjAxMC0wMS0yMCAx ODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMTAsNiArMTEwLDkgQEAgTElCS1JCNT0KKyBa TElCX0lOQ0xVREU9CisgTElCWkxJQj0KKyAKKysjIE5vbi1lbXB0eSBpZiBGSVBTIGVuYWJsZWQK KytGSVBTPQorKworIERJUlM9ICAgY3J5cHRvIHNzbCBlbmdpbmVzIGFwcHMgdGVzdCB0b29scwor IEVOR0RJUlM9IGNjZ29zdAorIFNITElCRElSUz0gY3J5cHRvIHNzbAorQEAgLTEyMiw3ICsxMjUs NyBAQCBTRElSUz0gIFwKKyAJYm4gZWMgcnNhIGRzYSBlY2RzYSBkaCBlY2RoIGRzbyBlbmdpbmUg XAorIAlidWZmZXIgYmlvIHN0YWNrIGxoYXNoIHJhbmQgZXJyIFwKKyAJZXZwIGFzbjEgcGVtIHg1 MDkgeDUwOXYzIGNvbmYgdHh0X2RiIHBrY3M3IHBrY3MxMiBjb21wIG9jc3AgdWkga3JiNSBcCist CWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUKKysJY21zIHBxdWV1ZSB0cyBqcGFrZSBzdG9yZSBm aXBzCisgIyBrZWVwIGluIG1pbmQgdGhhdCB0aGUgYWJvdmUgbGlzdCBpcyBhZGp1c3RlZCBieSAu L0NvbmZpZ3VyZQorICMgYWNjb3JkaW5nIHRvIG5vLXh4eCBhcmd1bWVudHMuLi4KKyAKK0BAIC0y MDYsNiArMjA5LDcgQEAgQlVJTERFTlY9CVBMQVRGT1JNPSckKFBMQVRGT1JNKScgUFJPQ0VTUwor IAkJUk1EMTYwX0FTTV9PQko9JyQoUk1EMTYwX0FTTV9PQkopJwkJXAorIAkJV1BfQVNNX09CSj0n JChXUF9BU01fT0JKKScJCQlcCisgCQlQRVJMQVNNX1NDSEVNRT0nJChQRVJMQVNNX1NDSEVNRSkn CQlcCisrCQlGSVBTPSIkJHtGSVBTOi0kKEZJUFMpfSIJXAorIAkJVEhJUz0kJHtUSElTOi0kQH0g TUFLRUZJTEU9TWFrZWZpbGUgTUFLRU9WRVJSSURFUz0KKyAjIE1BS0VPVkVSUklERVM9IGVmZmVj dGl2ZWx5ICJlcXVhbGl6ZXMiIEdOVS1pc2ggYW5kIFN5c1YtaXNoIG1ha2UgZmxhdm9ycywKKyAj IHdoaWNoIGluIHR1cm4gZWxpbWluYXRlcyBhbWJpZ3VpdGllcyBpbiB2YXJpYWJsZSB0cmVhdG1l bnQgd2l0aCAtZS4KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3NzbF9jaXBoLmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2xfY2lwaC5jCistLS0gb3BlbnNzbC0xLjAu MC1iZXRhNS9zc2wvc3NsX2NpcGguYy5maXBzCTIwMDktMDktMTMgMDE6MTg6MDkuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvc3NsX2NpcGguYwkyMDEwLTAxLTIw IDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTcyNyw2ICs3MjcsOSBAQCBzdGF0aWMgdm9p ZCBzc2xfY2lwaGVyX2NvbGxlY3RfY2lwaGVycyhjCisgCQkgICAgIShjLT5hbGdvcml0aG1fYXV0 aCAmIGRpc2FibGVkX2F1dGgpICYmCisgCQkgICAgIShjLT5hbGdvcml0aG1fZW5jICYgZGlzYWJs ZWRfZW5jKSAmJgorIAkJICAgICEoYy0+YWxnb3JpdGhtX21hYyAmIGRpc2FibGVkX21hYykgJiYK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJKCFGSVBTX21vZGUoKSB8fCAoYy0+YWxnb19zdHJl bmd0aCAmIFNTTF9GSVBTKSkgJiYKKysjZW5kaWYKKyAJCSAgICAhKGMtPmFsZ29yaXRobV9zc2wg JiBkaXNhYmxlZF9zc2wpKQorIAkJCXsKKyAJCQljb19saXN0W2NvX2xpc3RfbnVtXS5jaXBoZXIg PSBjOworQEAgLTE0MjMsNyArMTQyNiwxMSBAQCBTVEFDS19PRihTU0xfQ0lQSEVSKSAqc3NsX2Ny ZWF0ZV9jaXBoZXJfCisgCSAqLworIAlmb3IgKGN1cnIgPSBoZWFkOyBjdXJyICE9IE5VTEw7IGN1 cnIgPSBjdXJyLT5uZXh0KQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChjdXJy LT5hY3RpdmUgJiYgKCFGSVBTX21vZGUoKSB8fCBjdXJyLT5jaXBoZXItPmFsZ29fc3RyZW5ndGgg JiBTU0xfRklQUykpCisrI2Vsc2UKKyAJCWlmIChjdXJyLT5hY3RpdmUpCisrI2VuZGlmCisgCQkJ eworIAkJCXNrX1NTTF9DSVBIRVJfcHVzaChjaXBoZXJzdGFjaywgY3Vyci0+Y2lwaGVyKTsKKyAj aWZkZWYgQ0lQSEVSX0RFQlVHCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2xf bGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2xfbGliLmMKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L3NzbC9zc2xfbGliLmMuZmlwcwkyMDEwLTAxLTA3IDIwOjA1OjAzLjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3NzbF9saWIuYwkyMDEwLTAx LTIwIDE4OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1MjEsNiArMTUyMSwxNCBAQCBTU0xf Q1RYICpTU0xfQ1RYX25ldyhjb25zdCBTU0xfTUVUSE9EICptCisgCQlyZXR1cm4oTlVMTCk7Cisg CQl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKG1ldGgt PnZlcnNpb24gPCBUTFMxX1ZFUlNJT04pKQkKKysJCXsKKysJCVNTTGVycihTU0xfRl9TU0xfQ1RY X05FVywgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOworKwkJcmV0dXJuIE5V TEw7CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9D VFhfaWR4KCkgPCAwKQorIAkJeworIAkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVXLFNTTF9SX1g1 MDlfVkVSSUZJQ0FUSU9OX1NFVFVQX1BST0JMRU1TKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTUvc3NsL3NzbHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3NzbHRlc3Qu YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3NzbHRlc3QuYy5maXBzCTIwMTAtMDEtMjAg MTg6MTM6NDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvc3Ns dGVzdC5jCTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMjY2LDYgKzI2 Niw5IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZvaWQpCisgCXsKKyAJZnByaW50ZihzdGRlcnIs InVzYWdlOiBzc2x0ZXN0IFthcmdzIC4uLl1cbiIpOworIAlmcHJpbnRmKHN0ZGVyciwiXG4iKTsK KysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWZwcmludGYoc3RkZXJyLCItRiAgICAgICAgICAgICAt IHJ1biB0ZXN0IGluIEZJUFMgbW9kZVxuIik7CisrI2VuZGlmCisgCWZwcmludGYoc3RkZXJyLCIg LXNlcnZlcl9hdXRoICAtIGNoZWNrIHNlcnZlciBjZXJ0aWZpY2F0ZVxuIik7CisgCWZwcmludGYo c3RkZXJyLCIgLWNsaWVudF9hdXRoICAtIGRvIGNsaWVudCBhdXRoZW50aWNhdGlvblxuIik7Cisg CWZwcmludGYoc3RkZXJyLCIgLXByb3h5ICAgICAgICAtIGFsbG93IHByb3h5IGNlcnRpZmljYXRl c1xuIik7CitAQCAtNDg1LDYgKzQ4OCw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCisgI2VuZGlmCisgCVNUQUNLX09GKFNTTF9DT01QKSAqc3NsX2NvbXBfbWV0aG9kcyA9IE5V TEw7CisgCWludCB0ZXN0X2NpcGhlcmxpc3QgPSAwOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ aW50IGZpcHNfbW9kZT0wOworKyNlbmRpZgorIAorIAl2ZXJib3NlID0gMDsKKyAJZGVidWcgPSAw OworQEAgLTUxNiw3ICs1MjIsMTYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK KyAKKyAJd2hpbGUgKGFyZ2MgPj0gMSkKKyAJCXsKKy0JCWlmCShzdHJjbXAoKmFyZ3YsIi1zZXJ2 ZXJfYXV0aCIpID09IDApCisrCQlpZighc3RyY21wKCphcmd2LCItRiIpKQorKwkJCXsKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCQkJZmlwc19tb2RlPTE7CisrI2Vsc2UKKysJCQlmcHJpbnRmKHN0 ZGVyciwibm90IGNvbXBpbGVkIHdpdGggRklQUyBzdXBwb3J0LCBzbyBleGl0dGluZyB3aXRob3V0 IHJ1bm5pbmcuXG4iKTsKKysJCQlFWElUKDApOworKyNlbmRpZgorKwkJCX0KKysJCWVsc2UgaWYJ KHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKKyAJCQlzZXJ2ZXJfYXV0aD0xOwor IAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItY2xpZW50X2F1dGgiKSA9PSAwKQorIAkJCWNsaWVu dF9hdXRoPTE7CitAQCAtNzEyLDYgKzcyNywyMCBAQCBiYWQ6CisgCQlFWElUKDEpOworIAkJfQor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoZmlwc19tb2RlKQorKwkJeworKwkJaWYoIUZJ UFNfbW9kZV9zZXQoMSkpCisrCQkJeworKwkJCUVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7Cisr CQkJRVJSX3ByaW50X2Vycm9ycyhCSU9fbmV3X2ZwKHN0ZGVycixCSU9fTk9DTE9TRSkpOworKwkJ CUVYSVQoMSk7CisrCQkJfQorKwkJZWxzZQorKwkJCWZwcmludGYoc3RkZXJyLCIqKiogSU4gRklQ UyBNT0RFICoqKlxuIik7CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChwcmludF90aW1lKQorIAkJ eworIAkJaWYgKCFiaW9fcGFpcikKK0BAIC0yMTU0LDEyICsyMTgzLDEyIEBAIHN0YXRpYyBpbnQg TVNfQ0FMTEJBQ0sgYXBwX3ZlcmlmeV9jYWxsYmEKKyAJCX0KKyAKKyAjaWZuZGVmIE9QRU5TU0xf Tk9fWDUwOV9WRVJJRlkKKy0jIGlmZGVmIE9QRU5TU0xfRklQUworKyMgaWYgMAorIAlpZihzLT52 ZXJzaW9uID09IFRMUzFfVkVSU0lPTikKKyAJCUZJUFNfYWxsb3dfbWQ1KDEpOworICMgZW5kaWYK KyAJb2sgPSBYNTA5X3ZlcmlmeV9jZXJ0KGN0eCk7CistIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysj IGlmIDAKKyAJaWYocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCisgCQlGSVBTX2FsbG93X21k NSgwKTsKKyAjIGVuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zMjNfY2xu dC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczIzX2NsbnQuYworLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTUvc3NsL3MyM19jbG50LmMuZmlwcwkyMDA5LTExLTE4IDE1OjQ1OjMyLjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MyM19jbG50LmMJMjAxMC0w MS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zMzcsNiArMzM3LDE0IEBAIHN0YXRp YyBpbnQgc3NsMjNfY2xpZW50X2hlbGxvKFNTTCAqcykKKyAJCQl2ZXJzaW9uX21ham9yID0gVExT MV9WRVJTSU9OX01BSk9SOworIAkJCXZlcnNpb25fbWlub3IgPSBUTFMxX1ZFUlNJT05fTUlOT1I7 CisgCQkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWVsc2UgaWYoRklQU19tb2RlKCkpCisr CQkJeworKwkJCVNTTGVycihTU0xfRl9TU0wyM19DTElFTlRfSEVMTE8sCisrCQkJCQlTU0xfUl9P TkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysj ZW5kaWYKKyAJCWVsc2UgaWYgKHZlcnNpb24gPT0gU1NMM19WRVJTSU9OKQorIAkJCXsKKyAJCQl2 ZXJzaW9uX21ham9yID0gU1NMM19WRVJTSU9OX01BSk9SOworQEAgLTYyMCw2ICs2MjgsMTQgQEAg c3RhdGljIGludCBzc2wyM19nZXRfc2VydmVyX2hlbGxvKFNTTCAqcworIAkJaWYgKChwWzJdID09 IFNTTDNfVkVSU0lPTl9NSU5PUikgJiYKKyAJCQkhKHMtPm9wdGlvbnMgJiBTU0xfT1BfTk9fU1NM djMpKQorIAkJCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQkJaWYoRklQU19tb2RlKCkpCisr CQkJCXsKKysJCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9TRVJWRVJfSEVMTE8sCisrCQkJCQlT U0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQkJCWdvdG8gZXJyOworKwkJ CQl9CisrI2VuZGlmCisgCQkJcy0+dmVyc2lvbj1TU0wzX1ZFUlNJT047CisgCQkJcy0+bWV0aG9k PVNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAJCQl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE1L3NzbC9zMjNfc3J2ci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczIzX3NydnIu YworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MyM19zcnZyLmMuZmlwcwkyMDEwLTAxLTEz IDIwOjA4OjI5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3My M19zcnZyLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTMsNiAr MzkzLDE1IEBAIGludCBzc2wyM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcykKKyAJCQl9CisgCQl9 CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKHMtPnZlcnNp b24gPCBUTFMxX1ZFUlNJT04pKQorKwkJeworKwkJU1NMZXJyKFNTTF9GX1NTTDIzX0dFVF9DTElF TlRfSEVMTE8sCisrCQkJCQlTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Cisr CQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKHMtPnN0YXRlID09IFNTTDIzX1NU X1NSX0NMTlRfSEVMTE9fQikKKyAJCXsKKyAJCS8qIHdlIGhhdmUgU1NMdjMvVExTdjEgaW4gYW4g U1NMdjIgaGVhZGVyCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zM19jbG50LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zM19jbG50LmMKKy0tLSBvcGVuc3NsLTEuMC4w LWJldGE1L3NzbC9zM19jbG50LmMuZmlwcwkyMDEwLTAxLTA1IDE3OjQ2OjM5LjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MzX2NsbnQuYwkyMDEwLTAxLTIwIDE4 OjEzOjQ2LjAwMDAwMDAwMCArMDEwMAorQEAgLTE1Niw2ICsxNTYsMTAgQEAKKyAjaW5jbHVkZSA8 b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvbWQ1Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREgKKyAjaW5jbHVkZSA8 b3BlbnNzbC9kaC5oPgorICNlbmRpZgorQEAgLTE1NDgsNiArMTU1Miw4IEBAIGludCBzc2wzX2dl dF9rZXlfZXhjaGFuZ2UoU1NMICpzKQorIAkJCXE9bWRfYnVmOworIAkJCWZvciAobnVtPTI7IG51 bSA+IDA7IG51bS0tKQorIAkJCQl7CisrCQkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgs CisrCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAkJCQlFVlBfRGlnZXN0 SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKKyAJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNo YTEsIE5VTEwpOworIAkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50 X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE1L3NzbC9zM19lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MzX2VuYy5jCist LS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczNfZW5jLmMuZmlwcwkyMDA5LTA0LTE2IDE5OjIy OjUwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MzX2VuYy5j CTIwMTAtMDEtMjAgMTg6MTM6NDYuMDAwMDAwMDAwICswMTAwCitAQCAtMTcwLDYgKzE3MCw3IEBA IHN0YXRpYyBpbnQgc3NsM19nZW5lcmF0ZV9rZXlfYmxvY2soU1NMICoKKyAjZW5kaWYKKyAJaz0w OworIAlFVlBfTURfQ1RYX2luaXQoJm01KTsKKysJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm01LCBF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAlFVlBfTURfQ1RYX2luaXQoJnMxKTsK KyAJZm9yIChpPTA7IChpbnQpaTxudW07IGkrPU1ENV9ESUdFU1RfTEVOR1RIKQorIAkJeworQEAg LTYxNCw2ICs2MTUsOCBAQCBpbnQgc3NsM19kaWdlc3RfY2FjaGVkX3JlY29yZHMoU1NMICpzKQor IAkJaWYgKChtYXNrICYgcy0+czMtPnRtcC5uZXdfY2lwaGVyLT5hbGdvcml0aG0yKSAmJiBtZCkg CisgCQkJeworIAkJCXMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXT1FVlBfTURfQ1RYX2NyZWF0ZSgp OworKwkJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKHMtPnMzLT5oYW5kc2hha2VfZGdzdFtpXSwKKysJ CQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJCQlFVlBfRGlnZXN0SW5pdF9l eChzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sbWQsTlVMTCk7CisgCQkJRVZQX0RpZ2VzdFVwZGF0 ZShzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0saGRhdGEsaGRhdGFsZW4pOworIAkJCX0gCitAQCAt NjcwLDYgKzY3Myw3IEBAIHN0YXRpYyBpbnQgc3NsM19oYW5kc2hha2VfbWFjKFNTTCAqcywgaW4K KyAJCXJldHVybiAwOworIAl9CQorIAlFVlBfTURfQ1RYX2luaXQoJmN0eCk7CisrCUVWUF9NRF9D VFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCUVW UF9NRF9DVFhfY29weV9leCgmY3R4LGQpOworIAluPUVWUF9NRF9DVFhfc2l6ZSgmY3R4KTsKKyAJ aWYgKG4gPCAwKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczNfc3J2ci5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczNfc3J2ci5jCistLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9zc2wvczNfc3J2ci5jLmZpcHMJMjAxMC0wMS0wMSAxNTozOTo1MS4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zM19zcnZyLmMJMjAxMC0wMS0yMCAxODox Mzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNzMyLDYgKzE3MzIsOCBAQCBpbnQgc3NsM19zZW5k X3NlcnZlcl9rZXlfZXhjaGFuZ2UoU1NMICpzCisgCQkJCWo9MDsKKyAJCQkJZm9yIChudW09Mjsg bnVtID4gMDsgbnVtLS0pCisgCQkJCQl7CisrCQkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRf Y3R4LAorKwkJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCQkJCQlFVlBf RGlnZXN0SW5pdF9leCgmbWRfY3R4LChudW0gPT0gMikKKyAJCQkJCQk/cy0+Y3R4LT5tZDU6cy0+ Y3R4LT5zaGExLCBOVUxMKTsKKyAJCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwmKHMtPnMz LT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTUvc3NsL3QxX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvdDFf ZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC90MV9lbmMuYy5maXBzCTIwMDktMDQt MTkgMjA6MDM6MTMuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wv dDFfZW5jLmMJMjAxMC0wMS0yMCAxODoxMzo0Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjksNiAr MTY5LDggQEAgc3RhdGljIHZvaWQgdGxzMV9QX2hhc2goY29uc3QgRVZQX01EICptZAorIAorIAlI TUFDX0NUWF9pbml0KCZjdHgpOworIAlITUFDX0NUWF9pbml0KCZjdHhfdG1wKTsKKysJSE1BQ19D VFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisrCUhN QUNfQ1RYX3NldF9mbGFncygmY3R4X3RtcCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9X KTsKKyAJSE1BQ19Jbml0X2V4KCZjdHgsc2VjLHNlY19sZW4sbWQsIE5VTEwpOworIAlITUFDX0lu aXRfZXgoJmN0eF90bXAsc2VjLHNlY19sZW4sbWQsIE5VTEwpOworIAlpZiAoc2VlZDEgIT0gTlVM TCkgSE1BQ19VcGRhdGUoJmN0eCxzZWVkMSxzZWVkMV9sZW4pOwoKZGlmZiAtLWdpdCBhL29wZW5z c2wtMS4wLjAtYmV0YTUtcmVhZG1lLXdhcm5pbmcucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE1 LXJlYWRtZS13YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjBkODk3MjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4wLWJldGE1LXJlYWRtZS13 YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTUvUkVBRE1FLndhcm5pbmcgb3BlbnNzbC0xLjAuMC1iZXRhNS9SRUFETUUKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L1JFQURNRS53YXJuaW5nCTIwMTAtMDEtMjAgMTY6MDA6NDcuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9SRUFETUUJMjAxMC0wMS0yMSAwOTowNjox MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC01LDYgKzUsMzUgQEAKKyAgQ29weXJpZ2h0IChjKSAxOTk1 LTE5OTggRXJpYyBBLiBZb3VuZywgVGltIEouIEh1ZHNvbgorICBBbGwgcmlnaHRzIHJlc2VydmVk LgorIAorKyBXQVJOSU5HCisrIC0tLS0tLS0KKysKKysgVGhpcyB2ZXJzaW9uIG9mIE9wZW5TU0wg aXMgYnVpbHQgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBvcGVyYXRpb24gaW4KKysgdGhlIHNvIGNh bGxlZCBGSVBTIG1vZGUuIE5vdGUgdGhvdWdoIHRoYXQgdGhlIGxpYnJhcnkgYXMgd2UgYnVpbGQg aXQKKysgaXMgbm90IEZJUFMgdmFsaWRhdGVkIGFuZCB0aGUgRklQUyBtb2RlIGlzIHByZXNlbnQg Zm9yIHRlc3RpbmcgcHVycG9zZXMKKysgb25seS4KKysgCisrIFRoaXMgdmVyc2lvbiBhbHNvIGNv bnRhaW5zIGEgZmV3IGRpZmZlcmVuY2VzIGZyb20gdGhlIHVwc3RyZWFtIGNvZGUKKysgc29tZSBv ZiB3aGljaCBhcmU6CisrICAgKiBUaGVyZSBhcmUgYWRkZWQgY2hhbmdlcyBmb3J3YXJkIHBvcnRl ZCBmcm9tIHRoZSB1cHN0cmVhbSBPcGVuU1NMCisrICAgICAwLjkuOCBGSVBTIGJyYW5jaCBob3dl dmVyIHRoZSBGSVBTIGludGVncml0eSB2ZXJpZmljYXRpb24gY2hlY2sKKysgICAgIGlzIGltcGxl bWVudGVkIGRpZmZlcmVudGx5IGZyb20gdGhlIHVwc3RyZWFtIEZJUFMgdmFsaWRhdGVkIE9wZW5T U0wKKysgICAgIG1vZHVsZS4gSXQgdmVyaWZpZXMgSE1BQy1TSEEyNTYgY2hlY2tzdW0gb2YgdGhl IHdob2xlIHNoYXJlZAorKyAgICAgbGlicmFyaWVzLiBGb3IgdGhpcyByZWFzb24gdGhlIGNoYW5n ZXMgYXJlIHBvcnRlZCB0byBmaWxlcyBpbiB0aGUKKysgICAgIGNyeXB0byBkaXJlY3RvcnkgYW5k IG5vdCBpbiBhIHNlcGFyYXRlIGZpcHMgc3ViZGlyZWN0b3J5LiBBbHNvCisrICAgICBub3RlIHRo YXQgdGhlIEZJUFMgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiBjaGVjayByZXF1aXJlcyB1bm1vZGlm aWVkCisrICAgICBsaWJjcnlwdG8gYW5kIGxpYnNzbCBzaGFyZWQgbGlicmFyeSBmaWxlcyB3aGlj aCBtZWFucyB0aGF0IGl0IHdpbGwKKysgICAgIGZhaWwgaWYgdGhlc2UgZmlsZXMgYXJlIG1vZGlm aWVkIGZvciBleGFtcGxlIGJ5IHByZWxpbmsuCisrICAgKiBUaGUgbW9kdWxlIHJlc3BlY3RzIHRo ZSBrZXJuZWwgRklQUyBmbGFnIC9wcm9jL3N5cy9jcnlwdG8vZmlwcyBhbmQKKysgICAgIHRyaWVz IHRvIGluaXRpYWxpemUgdGhlIEZJUFMgbW9kZSBpZiBpdCBpcyBzZXQgdG8gMSBhYm9ydGluZyBp ZiB0aGUKKysgICAgIEZJUFMgbW9kZSBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIGFs c28gcG9zc2libGUgdG8gZm9yY2UgdGhlCisrICAgICBPcGVuU1NMIGxpYnJhcnkgdG8gRklQUyBt b2RlIGVzcGVjaWFsbHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBieQorKyAgICAgc2V0dGluZyB0 aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgT1BFTlNTTF9GT1JDRV9GSVBTX01PREUuCisrICAgKiBJ ZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgT1BFTlNTTF9OT19ERUZBVUxUX1pMSUIgaXMgc2V0 IHRoZSBtb2R1bGUKKysgICAgIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgYnVpbHQg aW4gY29tcHJlc3Npb24gbWV0aG9kIFpMSUIKKysgICAgIHdoZW4gaW5pdGlhbGl6ZWQuIEFwcGxp Y2F0aW9ucyBjYW4gc3RpbGwgZXhwbGljaXRlbHkgYXNrIGZvciBaTElCCisrICAgICBjb21wcmVz c2lvbiBtZXRob2QuCisrCisgIERFU0NSSVBUSU9OCisgIC0tLS0tLS0tLS0tCisgCgpkaWZmIC0t Z2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhNS12ZXJzaW9uLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1i ZXRhNS12ZXJzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNm M2JjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4wLWJldGE1LXZlcnNpb24ucGF0 Y2gKQEAgLTAsMCArMSwxNCBAQAorV2UgaGF2ZSB0byBrZWVwIHRoZSBiZXRhIHN0YXR1cyBvbiAz IGFzIHNvbWUgYXBwbGljYXRpb25zIChPcGVuU1NIKSBpbmNvcnJlY3RseSBpbnNpc3QKK29uIGhh dmluZyB0aGUgc2FtZSBiZXRhIHN0YXR1cyBvZiBPcGVuU1NMIGxpYnJhcnkgYXMgdGhleSB3ZXJl IGJ1aWx0IGFnYWluc3QuCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9vcGVu c3Nsdi5oLnZlcnNpb24gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vb3BlbnNzbHYuaAorLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL29wZW5zc2x2LmgudmVyc2lvbgkyMDEwLTAxLTIw IDE4OjE2OjQzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L29wZW5zc2x2LmgJMjAxMC0wMS0yMCAyMDoyMDoyMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNSw3 ICsyNSw3IEBACisgICogKFByaW9yIHRvIDAuOS41YSBiZXRhMSwgYSBkaWZmZXJlbnQgc2NoZW1l IHdhcyB1c2VkOiBNTU5ORkZSQkIgZm9yCisgICogIG1ham9yIG1pbm9yIGZpeCBmaW5hbCBwYXRj aC9iZXRhKQorICAqLworLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDA1 TAorKyNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDAzTAorICNpZmRlZiBP UEVOU1NMX0ZJUFMKKyAjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4w LWZpcHMtYmV0YTUgMjAgSmFuIDIwMTAiCisgI2Vsc2UKCmRpZmYgLS1naXQgYS9vcGVuc3NsLnNw ZWMgYi9vcGVuc3NsLnNwZWMKaW5kZXggNWFmYjdhNy4uN2NjZWMzNCAxMDA2NDQKLS0tIGEvb3Bl bnNzbC5zcGVjCisrKyBiL29wZW5zc2wuc3BlYwpAQCAtMTEsNyArMTEsNyBAQAogIyAxLjAuMCBz b3ZlcnNpb24gPSAxMAogJWRlZmluZSBzb3ZlcnNpb24gMTAKIAotJWRlZmluZSBiZXRhIGJldGE0 CislZGVmaW5lIGJldGEgYmV0YTUKIAogIyBOdW1iZXIgb2YgdGhyZWFkcyB0byBzcGF3biB3aGVu IHRlc3Rpbmcgc29tZSB0aHJlYWRpbmcgZml4ZXMuCiAlZGVmaW5lIHRocmVhZF90ZXN0X3RocmVh ZHMgJXs/dGhyZWFkczole3RocmVhZHN9fSV7IT90aHJlYWRzOjF9CkBAIC0yMyw3ICsyMyw3IEBA CiBTdW1tYXJ5OiBBIGdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaHkgbGlicmFyeSB3aXRoIFRM UyBpbXBsZW1lbnRhdGlvbgogTmFtZTogb3BlbnNzbAogVmVyc2lvbjogMS4wLjAKLVJlbGVhc2U6 IDAuMTkuJXtiZXRhfSV7P2Rpc3R9CitSZWxlYXNlOiAwLjIwLiV7YmV0YX0lez9kaXN0fQogIyBX ZSByZW1vdmUgY2VydGFpbiBwYXRlbnRlZCBhbGdvcml0aG1zIGZyb20gdGhlIG9wZW5zc2wgc291 cmNlIHRhcmJhbGwKICMgd2l0aCB0aGUgaG9iYmxlLW9wZW5zc2wgc2NyaXB0IHdoaWNoIGlzIGlu Y2x1ZGVkIGJlbG93LgogU291cmNlOiBvcGVuc3NsLSV7dmVyc2lvbn0tJXtiZXRhfS11c2EudGFy LmJ6MgpAQCAtMzgsNDMgKzM4LDMwIEBAIFNvdXJjZTExOiBSRUFETUUuRklQUwogUGF0Y2gwOiBv cGVuc3NsLTEuMC4wLWJldGE0LXJlZGhhdC5wYXRjaAogUGF0Y2gxOiBvcGVuc3NsLTEuMC4wLWJl dGEzLWRlZmF1bHRzLnBhdGNoCiBQYXRjaDM6IG9wZW5zc2wtMS4wLjAtYmV0YTMtc292ZXJzaW9u LnBhdGNoCi1QYXRjaDQ6IG9wZW5zc2wtMS4wLjAtYmV0YTQtZW5naW5lc2Rpci5wYXRjaAorUGF0 Y2g0OiBvcGVuc3NsLTEuMC4wLWJldGE1LWVuZ2luZXNkaXIucGF0Y2gKIFBhdGNoNTogb3BlbnNz bC0wLjkuOGEtbm8tcnBhdGgucGF0Y2gKIFBhdGNoNjogb3BlbnNzbC0wLjkuOGItdGVzdC11c2Ut bG9jYWxob3N0LnBhdGNoCiAjIEJ1ZyBmaXhlcwogUGF0Y2gyMzogb3BlbnNzbC0xLjAuMC1iZXRh NC1kZWZhdWx0LXBhdGhzLnBhdGNoCi1QYXRjaDI0OiBvcGVuc3NsLTEuMC4wLWJldGE0LWJpbnV0 aWxzLnBhdGNoCitQYXRjaDI0OiBvcGVuc3NsLTAuOS44ai1iYWQtbWltZS5wYXRjaAogIyBGdW5j dGlvbmFsaXR5IGNoYW5nZXMKIFBhdGNoMzI6IG9wZW5zc2wtMC45LjhnLWlhNjQucGF0Y2gKIFBh dGNoMzM6IG9wZW5zc2wtMS4wLjAtYmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVuc3Ns LTAuOS42LXg1MDkucGF0Y2gKIFBhdGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRkLWVu Z2luZXMucGF0Y2gKLVBhdGNoMzg6IG9wZW5zc2wtMS4wLjAtYmV0YTMtY2lwaGVyLWNoYW5nZS5w YXRjaAorUGF0Y2gzODogb3BlbnNzbC0xLjAuMC1iZXRhNS1jaXBoZXItY2hhbmdlLnBhdGNoCiBQ YXRjaDM5OiBvcGVuc3NsLTEuMC4wLWJldGEzLWlwdjYtYXBwcy5wYXRjaAotUGF0Y2g0MDogb3Bl bnNzbC0xLjAuMC1iZXRhNC1maXBzLnBhdGNoCitQYXRjaDQwOiBvcGVuc3NsLTEuMC4wLWJldGE1 LWZpcHMucGF0Y2gKIFBhdGNoNDE6IG9wZW5zc2wtMS4wLjAtYmV0YTMtZmlwc2NoZWNrLnBhdGNo CiBQYXRjaDQzOiBvcGVuc3NsLTEuMC4wLWJldGEzLWZpcHNtb2RlLnBhdGNoCiBQYXRjaDQ0OiBv cGVuc3NsLTEuMC4wLWJldGEzLWZpcHNybmcucGF0Y2gKIFBhdGNoNDU6IG9wZW5zc2wtMC45Ljhq LWVudi1ub3psaWIucGF0Y2gKLVBhdGNoNDc6IG9wZW5zc2wtMC45LjhqLXJlYWRtZS13YXJuaW5n LnBhdGNoCi1QYXRjaDQ4OiBvcGVuc3NsLTAuOS44ai1iYWQtbWltZS5wYXRjaAorUGF0Y2g0Nzog b3BlbnNzbC0xLjAuMC1iZXRhNS1yZWFkbWUtd2FybmluZy5wYXRjaAogUGF0Y2g0OTogb3BlbnNz bC0xLjAuMC1iZXRhNC1hbGdvLWRvYy5wYXRjaAogUGF0Y2g1MDogb3BlbnNzbC0xLjAuMC1iZXRh NC1kdGxzMS1hYmkucGF0Y2gKLVBhdGNoNTE6IG9wZW5zc2wtMS4wLjAtYmV0YTQtdmVyc2lvbi5w YXRjaAorUGF0Y2g1MTogb3BlbnNzbC0xLjAuMC1iZXRhNS12ZXJzaW9uLnBhdGNoCitQYXRjaDUy OiBvcGVuc3NsLTEuMC4wLWJldGE0LWFlc25pLnBhdGNoCiAjIEJhY2twb3J0ZWQgZml4ZXMgaW5j bHVkaW5nIHNlY3VyaXR5IGZpeGVzCi1QYXRjaDYwOiBvcGVuc3NsLTEuMC4wLWJldGE0LXJlbmVn LnBhdGNoCi0jIFRoaXMgb25lIGlzIG5vdCBiYWNrcG9ydGVkIGJ1dCBoYXMgdG8gYmUgYXBwbGll ZCBhZnRlciByZW5lZyBwYXRjaAotUGF0Y2g2MTogb3BlbnNzbC0xLjAuMC1iZXRhNC1jbGllbnQt cmVuZWcucGF0Y2gKLVBhdGNoNjI6IG9wZW5zc2wtMS4wLjAtYmV0YTQtYmFja3BvcnRzLnBhdGNo Ci1QYXRjaDYzOiBvcGVuc3NsLTEuMC4wLWJldGE0LXJlbmVnLWVyci5wYXRjaAotUGF0Y2g2NDog b3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzLWlwdjYucGF0Y2gKLVBhdGNoNjU6IG9wZW5zc2wtMS4w LjAtYmV0YTQtZHRscy1yZW5lZy5wYXRjaAotUGF0Y2g2Njogb3BlbnNzbC0xLjAuMC1iZXRhNC1i YWNrcG9ydHMyLnBhdGNoCi1QYXRjaDY3OiBvcGVuc3NsLTEuMC4wLWJldGE0LXJlbmVnLXNjc3Yu cGF0Y2gKLVBhdGNoNjg6IG9wZW5zc2wtMS4wLjAtYmV0YTQtdGxzLWNvbXAucGF0Y2gKLVBhdGNo Njk6IG9wZW5zc2wtMS4wLjAtYmV0YTQtYWVzbmkucGF0Y2gKLVBhdGNoNzA6IG9wZW5zc2wtMS4w LjAtYmV0YTQtdGxzdmVyLnBhdGNoCi1QYXRjaDcxOiBvcGVuc3NsLTEuMC4wLWJldGE0LWN2ZS0y MDA5LTQzNTUucGF0Y2gKIAogTGljZW5zZTogT3BlblNTTAogR3JvdXA6IFN5c3RlbSBFbnZpcm9u bWVudC9MaWJyYXJpZXMKQEAgLTEzNSw3ICsxMjIsNyBAQCBmcm9tIG90aGVyIGZvcm1hdHMgdG8g dGhlIGZvcm1hdHMgdXNlZCBieSB0aGUgT3BlblNTTCB0b29sa2l0LgogJXBhdGNoNiAtcDEgLWIg LnVzZS1sb2NhbGhvc3QKIAogJXBhdGNoMjMgLXAxIC1iIC5kZWZhdWx0LXBhdGhzCi0lcGF0Y2gy NCAtcDEgLWIgLmJpbnV0aWxzCislcGF0Y2gyNCAtcDEgLWIgLmJhZC1taW1lCiAKICVwYXRjaDMy IC1wMSAtYiAuaWE2NAogJXBhdGNoMzMgLXAxIC1iIC5jYS1kaXIKQEAgLTE0OSwyMyArMTM2LDEw IEBAIGZyb20gb3RoZXIgZm9ybWF0cyB0byB0aGUgZm9ybWF0cyB1c2VkIGJ5IHRoZSBPcGVuU1NM IHRvb2xraXQuCiAlcGF0Y2g0NCAtcDEgLWIgLmZpcHNybmcKICVwYXRjaDQ1IC1wMSAtYiAuZW52 LW5vemxpYgogJXBhdGNoNDcgLXAxIC1iIC53YXJuaW5nCi0lcGF0Y2g0OCAtcDEgLWIgLmJhZC1t aW1lCiAlcGF0Y2g0OSAtcDEgLWIgLmFsZ28tZG9jCiAlcGF0Y2g1MCAtcDEgLWIgLmR0bHMxLWFi aQogJXBhdGNoNTEgLXAxIC1iIC52ZXJzaW9uCi0KLSVwYXRjaDYwIC1wMSAtYiAucmVuZWcKLSVw YXRjaDYxIC1wMSAtYiAuY2xpZW50LXJlbmVnCi0lcGF0Y2g2MiAtcDEgLWIgLmJhY2twb3J0cwot JXBhdGNoNjMgLXAxIC1iIC5yZW5lZy1lcnIKLSVwYXRjaDY0IC1wMSAtYiAuZHRscy1pcHY2Ci0l cGF0Y2g2NSAtcDEgLWIgLmR0bHMtcmVuZWcKLSVwYXRjaDY2IC1wMSAtYiAuYmFja3BvcnRzMgot JXBhdGNoNjcgLXAxIC1iIC5zY3N2Ci0lcGF0Y2g2OCAtcDEgLWIgLnRscy1jb21wCi0lcGF0Y2g2 OSAtcDEgLWIgLmFlc25pCi0lcGF0Y2g3MCAtcDEgLWIgLnRsc3ZlcgotJXBhdGNoNzEgLXAxIC1i IC5jb21wbGVhaworJXBhdGNoNTIgLXAxIC1iIC5hZXNuaQogCiAjIE1vZGlmeSB0aGUgdmFyaW91 cyBwZXJsIHNjcmlwdHMgdG8gcmVmZXJlbmNlIHBlcmwgaW4gdGhlIHJpZ2h0IGxvY2F0aW9uLgog cGVybCB1dGlsL3BlcmxwYXRoLnBsIGBkaXJuYW1lICV7X19wZXJsfWAKQEAgLTI2NCwxMiArMjM4 LDkgQEAgbWFrZSAtQyB0ZXN0IGFwcHMgdGVzdHMKIGluc3RhbGwgLWQgJFJQTV9CVUlMRF9ST09U eyV7X2JpbmRpcn0sJXtfaW5jbHVkZWRpcn0sJXtfbGliZGlyfSwle19tYW5kaXJ9LCV7X2xpYmRp cn0vb3BlbnNzbH0KIG1ha2UgSU5TVEFMTF9QUkVGSVg9JFJQTV9CVUlMRF9ST09UIGluc3RhbGwK IG1ha2UgSU5TVEFMTF9QUkVGSVg9JFJQTV9CVUlMRF9ST09UIGluc3RhbGxfZG9jcwotIyBPcGVu U1NMIGluc3RhbGwgZG9lc24ndCB1c2UgY29ycmVjdCBfbGliZGlyIG9uIDY0IGJpdCBhcmNocwot WyAiJXtfbGliZGlyfSIgIT0gL3Vzci9saWIgXSAmJiBtdiAkUlBNX0JVSUxEX1JPT1QvdXNyL2xp Yi9saWIqLnNvLiV7c292ZXJzaW9ufSAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9LwotbXYgJFJQ TV9CVUlMRF9ST09UL3Vzci9saWIvZW5naW5lcyAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9L29w ZW5zc2wKK212ICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vZW5naW5lcyAkUlBNX0JVSUxEX1JP T1Qle19saWJkaXJ9L29wZW5zc2wKIG12ICRSUE1fQlVJTERfUk9PVCV7X3N5c2NvbmZkaXJ9L3Br aS90bHMvbWFuLyogJFJQTV9CVUlMRF9ST09UJXtfbWFuZGlyfS8KIHJtZGlyICRSUE1fQlVJTERf Uk9PVCV7X3N5c2NvbmZkaXJ9L3BraS90bHMvbWFuCi1tdiAkUlBNX0JVSUxEX1JPT1QvdXNyL2xp Yi8qICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vIHx8IDoKIHJlbmFtZSBzby4le3NvdmVyc2lv bn0gc28uJXt2ZXJzaW9ufSAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9Lyouc28uJXtzb3ZlcnNp b259CiBmb3IgbGliIGluICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vKi5zby4le3ZlcnNpb259 IDsgZG8KIAljaG1vZCA3NTUgJHtsaWJ9CkBAIC00MTQsNiArMzg1LDkgQEAgcm0gLXJmICRSUE1f QlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAlcG9zdHVuIC1wIC9zYmluL2xk Y29uZmlnCiAKICVjaGFuZ2Vsb2cKKyogV2VkIEphbiAyMCAyMDEwIFRvbWFzIE1yYXogPHRtcmF6 QHJlZGhhdC5jb20+IDEuMC4wLTAuMjAuYmV0YTUKKy0gbmV3IHVwc3RyZWFtIHJlbGVhc2UKKwog KiBUaHUgSmFuIDE0IDIwMTAgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjAtMC4x OS5iZXRhNAogLSBmaXggQ1ZFLTIwMDktNDM1NSAtIGxlYWsgaW4gYXBwbGljYXRpb25zIGluY29y cmVjdGx5IGNhbGxpbmcKICAgQ1JZUFRPX2ZyZWVfYWxsX2V4X2RhdGEoKSBiZWZvcmUgYXBwbGlj YXRpb24gZXhpdCAoIzU0NjcwNykKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRl eCA4YTJjNjQ4Li5hY2IxMTliIDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAg LTEgKzEgQEAKLTFmYzBlNDFjMjMwZDA2OThmODM0NDEzZGZiYTg2NGFkICBvcGVuc3NsLTEuMC4w LWJldGE0LXVzYS50YXIuYnoyCis1MzExNjBkODQwMTdjYjUyZTNjMjNiNTJjY2EwZDVjZiAgb3Bl bnNzbC0xLjAuMC1iZXRhNS11c2EudGFyLmJ6Mgo=