From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,T_PDS_PRO_TLD, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: from inbox.vuxu.org (inbox.vuxu.org [IPv6:::1]) by inbox.vuxu.org (Postfix) with ESMTP id 885C1220AC for ; Fri, 9 Feb 2024 21:41:07 +0100 (CET) Content-Type: multipart/mixed; boundary="===============1507464176749496668==" MIME-Version: 1.0 Subject: =?utf8?q?=5BPR_PATCH=5D_lazarus_update?= To: ml@inbox.vuxu.org From: mobinmob Reply-to: ml@inbox.vuxu.org Message-ID: Date: Fri, 09 Feb 2024 21:41:07 +0100 List-Id: GitHub notification mails are now in MIME to allow UTF8. --===============1507464176749496668== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYSBuZXcgcHVsbCByZXF1ZXN0IGJ5IG1vYmlubW9iIGFnYWluc3QgbWFzdGVyIG9u IHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNvbS9tb2Jpbm1v Yi92b2lkLXBhY2thZ2VzIGZwYytsYXphcnVzCmh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4 L3ZvaWQtcGFja2FnZXMvcHVsbC80ODYzMQoKbGF6YXJ1cyB1cGRhdGUKPCEtLSBVbmNvbW1lbnQg cmVsZXZhbnQgc2VjdGlvbnMgYW5kIGRlbGV0ZSBvcHRpb25zIHdoaWNoIGFyZSBub3QgYXBwbGlj YWJsZSAtLT4NCg0KIyMjIyBUZXN0aW5nIHRoZSBjaGFuZ2VzDQotIEkgdGVzdGVkIHRoZSBjaGFu Z2VzIGluIHRoaXMgUFI6ICoqWUVTKioNCjwhLS0NCiMjIyMgTmV3IHBhY2thZ2UNCi0gVGhpcyBu ZXcgcGFja2FnZSBjb25mb3JtcyB0byB0aGUgW3BhY2thZ2UgcmVxdWlyZW1lbnRzXShodHRwczov L2dpdGh1Yi5jb20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVyL0NPTlRSSUJV VElORy5tZCNwYWNrYWdlLXJlcXVpcmVtZW50cyk6ICoqWUVTKip8KipOTyoqDQotLT4NCg0KPCEt LSBOb3RlOiBJZiB0aGUgYnVpbGQgaXMgbGlrZWx5IHRvIHRha2UgbW9yZSB0aGFuIDIgaG91cnMs IHBsZWFzZSBhZGQgY2kgc2tpcCB0YWcgYXMgZGVzY3JpYmVkIGluDQpodHRwczovL2dpdGh1Yi5j b20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCNj b250aW51b3VzLWludGVncmF0aW9uDQphbmQgdGVzdCBhdCBsZWFzdCBvbmUgbmF0aXZlIGJ1aWxk IGFuZCwgaWYgc3VwcG9ydGVkLCBhdCBsZWFzdCBvbmUgY3Jvc3MgYnVpbGQuDQpJZ25vcmUgdGhp cyBzZWN0aW9uIGlmIHRoaXMgUFIgaXMgbm90IHNraXBwaW5nIENJLg0KLS0+DQo8IS0tDQojIyMj IExvY2FsIGJ1aWxkIHRlc3RpbmcNCi0gSSBidWlsdCB0aGlzIFBSIGxvY2FsbHkgZm9yIG15IG5h dGl2ZSBhcmNoaXRlY3R1cmUsIChBUkNILUxJQkMpDQotIEkgYnVpbHQgdGhpcyBQUiBsb2NhbGx5 IGZvciB0aGVzZSBhcmNoaXRlY3R1cmVzIChpZiBzdXBwb3J0ZWQuIG1hcmsgY3Jvc3NidWlsZHMp Og0KICAtIGFhcmNoNjQtbXVzbA0KICAtIGFybXY3bA0KICAtIGFybXY2bC1tdXNsDQotLT4NCgoK QSBwYXRjaCBmaWxlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3ZvaWQtbGludXgvdm9pZC1wYWNr YWdlcy9wdWxsLzQ4NjMxLnBhdGNoIGlzIGF0dGFjaGVk --===============1507464176749496668== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-fpc+lazarus-48631.patch" RnJvbSBmMjI1MDM5MWU4M2E2ZGJlZWMyNTVjYzFlMzI2YTZhYWM2OTg0MmMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBtb2Jpbm1vYiA8bW9iaW5tb2JAZGlzcm9vdC5vcmc+CkRhdGU6 IEZyaSwgOSBGZWIgMjAyNCAyMjoxMToxMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS80XSBmcGM6 IGJ1bXAgZm9yIHJlYnVpbGQuCgotLS0KIHNyY3BrZ3MvZnBjL3RlbXBsYXRlIHwgMiArLQogMSBm aWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEv c3JjcGtncy9mcGMvdGVtcGxhdGUgYi9zcmNwa2dzL2ZwYy90ZW1wbGF0ZQppbmRleCBjZTZhMGMw MWNiMTczLi5lY2UzYTg0OTc1MWUzIDEwMDY0NAotLS0gYS9zcmNwa2dzL2ZwYy90ZW1wbGF0ZQor KysgYi9zcmNwa2dzL2ZwYy90ZW1wbGF0ZQpAQCAtMSw3ICsxLDcgQEAKICMgVGVtcGxhdGUgZmls ZSBmb3IgJ2ZwYycKIHBrZ25hbWU9ZnBjCiB2ZXJzaW9uPTMuMi4wCi1yZXZpc2lvbj0xCityZXZp c2lvbj0yCiBhcmNocz0ieDg2XzY0KiBpNjg2KiBwcGM2NGxlIHBwYzY0IHBwYyIKIGJ1aWxkX3dy a3NyYz0iJHtwa2duYW1lfWJ1aWxkLSR7dmVyc2lvbn0iCiBjb25mX2ZpbGVzPSIvZXRjL2ZwYy5j ZmcgL2V0Yy9mcHBrZy5jZmciCgpGcm9tIGFiMzE1MDZiNWI5NTAyZWFjOGI0YTkyOGUyNDQyYmQ5 OGZiNGM3NjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IG1vYmlubW9iIDxtb2Jpbm1v YkBkaXNyb290Lm9yZz4KRGF0ZTogRnJpLCA5IEZlYiAyMDI0IDIyOjExOjIxICswMjAwClN1Ympl Y3Q6IFtQQVRDSCAyLzRdIGxhemFydXM6IHVwZGF0ZSB0byAzLjAuCgotLS0KIHNyY3BrZ3MvbGF6 YXJ1cy90ZW1wbGF0ZSB8IDQgKystLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmNwa2dzL2xhemFydXMvdGVtcGxhdGUgYi9z cmNwa2dzL2xhemFydXMvdGVtcGxhdGUKaW5kZXggZmM2ZDIyNmRkZGIxOS4uMzZhOGZiMDQ2NjQy YSAxMDA2NDQKLS0tIGEvc3JjcGtncy9sYXphcnVzL3RlbXBsYXRlCisrKyBiL3NyY3BrZ3MvbGF6 YXJ1cy90ZW1wbGF0ZQpAQCAtMSw2ICsxLDYgQEAKICMgVGVtcGxhdGUgZmlsZSBmb3IgJ2xhemFy dXMnCiBwa2duYW1lPWxhemFydXMKLXZlcnNpb249Mi4yLjAKK3ZlcnNpb249My4wCiByZXZpc2lv bj0xCiAjIEZvciBhZGRpbmcgYSByZXZpc2lvbiBzdWZmaXggdG8gdmVyc2lvbiBvbiB0aGUgc291 cmNlIHRhcmJhbGwgZmlsZQogX3ZlcnNpb25fcmV2aXNpb25fc3VmZml4PSItMCIKQEAgLTEzLDcg KzEzLDcgQEAgbWFpbnRhaW5lcj0iT3JwaGFuZWQgPG9ycGhhbkB2b2lkbGludXgub3JnPiIKIGxp Y2Vuc2U9IkdQTC0yLjAtb3ItbGF0ZXIsIE1QTC0yLjAsIExHUEwtMi4wLW9yLWxhdGVyIgogaG9t ZXBhZ2U9Imh0dHA6Ly93d3cubGF6YXJ1cy5mcmVlcGFzY2FsLm9yZyIKIGRpc3RmaWxlcz0iJHtT T1VSQ0VGT1JHRV9TSVRFfS9wcm9qZWN0L2xhemFydXMvTGF6YXJ1cyUyMFppcCUyMF8lMjBHWmlw L0xhemFydXMlMjAke3ZlcnNpb259L2xhemFydXMtJHt2ZXJzaW9ufSR7X3ZlcnNpb25fcmV2aXNp b25fc3VmZml4fS50YXIuZ3oiCi1jaGVja3N1bT1iNmI1ZDUxNjUxMWUzZGZiMzQ5MTBkNzY1NmRi MDY4ZDRiYmE4MGYwMDk2OTI1MDBhZWJiY2FlNzljYjEyMTYwCitjaGVja3N1bT1iNGI4YmE4OWEz NDRhYjdkOGQ4ZDJlY2I5YmY5ZTgyZTczNzEwMTA0OTg2NjE3MGU4Yzk2MThjMTNkNDkxZmJmCiBu b3BpZT15ZXMKIGxpYjMyZGlzYWJsZWQ9eWVzCiAKCkZyb20gOTdlNzlmYjVhMWQzZjI4MzUxM2Vl ODkwNWViNjNlNDk0NTU5Njg1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogbW9iaW5t b2IgPG1vYmlubW9iQGRpc3Jvb3Qub3JnPgpEYXRlOiBGcmksIDkgRmViIDIwMjQgMjI6MTE6MzEg KzAyMDAKU3ViamVjdDogW1BBVENIIDMvNF0gcXQ1cGFzOiB1cGRhdGUgdG8gMy4wLgoKLS0tCiBz cmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAyLWxhemFydXMtMi4wLjAucGF0Y2ggfCAyNTg3IC0tLS0t LS0tLS0tLS0tLS0tCiBzcmNwa2dzL3F0NXBhcy90ZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAg ICAgfCAgICA4ICstCiAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMjU5MSBkZWxl dGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAyLWxh emFydXMtMi4wLjAucGF0Y2gKCmRpZmYgLS1naXQgYS9zcmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAy LWxhemFydXMtMi4wLjAucGF0Y2ggYi9zcmNwa2dzL3F0NXBhcy9wYXRjaGVzLzAyLWxhemFydXMt Mi4wLjAucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmN2NhYWU3YWM2OGQu LjAwMDAwMDAwMDAwMDAKLS0tIGEvc3JjcGtncy9xdDVwYXMvcGF0Y2hlcy8wMi1sYXphcnVzLTIu MC4wLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMjU4NyArMCwwIEBACi1EZXNjcmlwdGlvbjog bmV3IHNvdXJjZSBpbmNsdWRlZCBpbiBsYXphcnVzLTEuOH5yYzIKLUluZGV4OiBRdDVQYXMucHJv Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLS0gYS9RdDVQYXMucHJvCi0rKysgYi9RdDVQYXMucHJvCi1AQCAtMTIx LDcgKzEyMSwxMCBAQCBIRUFERVJTICs9ICBcCi0gICAgICAgICAgICBxc2l6ZV9jLmggXAotICAg ICAgICAgICAgcXN0cmluZ19jLmggXAotICAgICAgICAgICAgcXN0cmluZ2xpc3RfYy5oIFwKLSsg ICAgICAgICAgIHFzdXJmYWNlX2MuaCBcICAgICAgICAgICAKLSsgICAgICAgICAgIHFzdXJmYWNl Zm9ybWF0X2MuaCBcCi0gICAgICAgICAgICBxcmVjdF9jLmggXAotKyAgICAgICAgICAgcW1hcmdp bnNfYy5oIFwgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBxZGF0ZXRpbWVfYy5o IFwKLSAgICAgICAgICAgIHFieXRlYXJyYXlfYy5oIFwKLSAgICAgICAgICAgIHFsb2NhbGVfYy5o IFwKLUBAIC0xNTMsNiArMTU2LDEwIEBAIEhFQURFUlMgKz0gIFwKLSAgICAgICAgICAgIHFhcHBs aWNhdGlvbl9ob29rLmggXAotICAgICAgICAgICAgcXdoYXRzdGhpc19jLmggXAotICAgICAgICAg ICAgcXNpemVwb2xpY3lfYy5oIFwKLSsgICAgICAgICAgIHFzY3JlZW5fYy5oIFwKLSsgICAgICAg ICAgIHFzY3JlZW5faG9vay5oIFwKLSsgICAgICAgICAgIHF3aW5kb3dfYy5oIFwKLSsgICAgICAg ICAgIHF3aW5kb3dfaG9vay5oIFwgICAgICAgICAgIAotICAgICAgICAgICAgcXdpZGdldF9jLmgg XAotICAgICAgICAgICAgcXdpZGdldF9ob29rLmggXAotICAgICAgICAgICAgcWxheW91dGl0ZW1f Yy5oIFwKLUBAIC0xNzksNiArMTg2LDcgQEAgSEVBREVSUyArPSAgXAotICAgICAgICAgICAgcWJy dXNoX2MuaCBcCi0gICAgICAgICAgICBxcGVuX2MuaCBcCi0gICAgICAgICAgICBxcG9seWdvbl9j LmggXAotKyAgICAgICAgICAgcWJhY2tpbmdzdG9yZV9jLmggXAotICAgICAgICAgICAgcXBhaW50 ZXJfYy5oIFwKLSAgICAgICAgICAgIHFwYWludGVuZ2luZV9jLmggXAotICAgICAgICAgICAgcXBh aW50ZGV2aWNlX2MuaCBcCi1AQCAtMzc1LDYgKzM4Myw4IEBAIEhFQURFUlMgKz0gIFwKLSAgICAg ICAgICAgIHFkcmFnX2hvb2tfYy5oIFwKLSAgICAgICAgICAgIHFndWlhcHBsaWNhdGlvbl9ob29r X2MuaCBcCi0gICAgICAgICAgICBxYXBwbGljYXRpb25faG9va19jLmggXAotKyAgICAgICAgICAg cXNjcmVlbl9ob29rX2MuaCBcICAgICAgICAgICAKLSsgICAgICAgICAgIHF3aW5kb3dfaG9va19j LmggXAotICAgICAgICAgICAgcXdpZGdldF9ob29rX2MuaCBcCi0gICAgICAgICAgICBxbGF5b3V0 X2hvb2tfYy5oIFwKLSAgICAgICAgICAgIHFzdGFja2VkbGF5b3V0X2hvb2tfYy5oIFwKLUBAIC00 NjgsNyArNDc4LDEwIEBAIFNPVVJDRVMgKz0gIFwKLSAgICAgICAgICAgIHFzaXplX2MuY3BwIFwK LSAgICAgICAgICAgIHFzdHJpbmdfYy5jcHAgXAotICAgICAgICAgICAgcXN0cmluZ2xpc3RfYy5j cHAgXAotKyAgICAgICAgICAgcXN1cmZhY2VfYy5jcHAgXAotKyAgICAgICAgICAgcXN1cmZhY2Vm b3JtYXRfYy5jcHAgXAotICAgICAgICAgICAgcXJlY3RfYy5jcHAgXAotKyAgICAgICAgICAgcW1h cmdpbnNfYy5jcHAgXCAgICAgICAgICAgCi0gICAgICAgICAgICBxZGF0ZXRpbWVfYy5jcHAgXAot ICAgICAgICAgICAgcWJ5dGVhcnJheV9jLmNwcCBcCi0gICAgICAgICAgICBxbG9jYWxlX2MuY3Bw IFwKLUBAIC00OTMsNiArNTA2LDggQEAgU09VUkNFUyArPSAgXAotICAgICAgICAgICAgcWFwcGxp Y2F0aW9uX2MuY3BwIFwKLSAgICAgICAgICAgIHF3aGF0c3RoaXNfYy5jcHAgXAotICAgICAgICAg ICAgcXNpemVwb2xpY3lfYy5jcHAgXAotKyAgICAgICAgICAgcXNjcmVlbl9jLmNwcCBcCi0rICAg ICAgICAgICBxd2luZG93X2MuY3BwIFwgICAgICAgICAgIAotICAgICAgICAgICAgcXdpZGdldF9j LmNwcCBcCi0gICAgICAgICAgICBxbGF5b3V0aXRlbV9jLmNwcCBcCi0gICAgICAgICAgICBxbGF5 b3V0X2MuY3BwIFwKLUBAIC01MTIsNiArNTI3LDcgQEAgU09VUkNFUyArPSAgXAotICAgICAgICAg ICAgcWJydXNoX2MuY3BwIFwKLSAgICAgICAgICAgIHFwZW5fYy5jcHAgXAotICAgICAgICAgICAg cXBvbHlnb25fYy5jcHAgXAotKyAgICAgICAgICAgcWJhY2tpbmdzdG9yZV9jLmNwcCBcCi0gICAg ICAgICAgICBxcGFpbnRlcl9jLmNwcCBcCi0gICAgICAgICAgICBxcGFpbnRlbmdpbmVfYy5jcHAg XAotICAgICAgICAgICAgcXBhaW50ZGV2aWNlX2MuY3BwIFwKLUBAIC02NDYsNiArNjYyLDggQEAg U09VUkNFUyArPSAgXAotICAgICAgICAgICAgcWRyYWdfaG9va19jLmNwcCBcCi0gICAgICAgICAg ICBxZ3VpYXBwbGljYXRpb25faG9va19jLmNwcCBcCi0gICAgICAgICAgICBxYXBwbGljYXRpb25f aG9va19jLmNwcCBcCi0rICAgICAgICAgICBxc2NyZWVuX2hvb2tfYy5jcHAgXCAgICAgICAgICAg Ci0rICAgICAgICAgICBxd2luZG93X2hvb2tfYy5jcHAgXAotICAgICAgICAgICAgcXdpZGdldF9o b29rX2MuY3BwIFwKLSAgICAgICAgICAgIHFsYXlvdXRfaG9va19jLmNwcCBcCi0gICAgICAgICAg ICBxc3RhY2tlZGxheW91dF9ob29rX2MuY3BwIFwKLUluZGV4OiBzcmMvY2hhbmRsZXMuaAotPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0tIGEvc3JjL2NoYW5kbGVzLmgKLSsrKyBiL3NyYy9jaGFuZGxlcy5oCi1AQCAt MjMsNiArMjMsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBQVFJVSU5UOwotIAotIHR5cGVkZWYg c3RydWN0IFFBYnN0cmFjdEJ1dHRvbl9fIHsgUFRSSU5UIGR1bW15OyB9ICpRQWJzdHJhY3RCdXR0 b25IOwotIHR5cGVkZWYgc3RydWN0IFFTaXplUG9saWN5X18geyBQVFJJTlQgZHVtbXk7IH0gKlFT aXplUG9saWN5SDsKLSt0eXBlZGVmIHN0cnVjdCBRU3VyZmFjZV9fIHsgUFRSSU5UIGR1bW15OyB9 ICpRU3VyZmFjZUg7Ci0rdHlwZWRlZiBzdHJ1Y3QgUVN1cmZhY2VGb3JtYXRfXyB7IFBUUklOVCBk dW1teTsgfSAqUVN1cmZhY2VGb3JtYXRIOwotIC8qIHR5cGVkZWYgc3RydWN0IFFXZWJIaXN0b3J5 SXRlbV9ob29rX18geyBQVFJJTlQgZHVtbXk7IH0gKlFXZWJIaXN0b3J5SXRlbV9ob29rSDsgKi8K LSB0eXBlZGVmIHN0cnVjdCBRU2xpZGVyX2hvb2tfXyB7IFBUUklOVCBkdW1teTsgfSAqUVNsaWRl cl9ob29rSDsKLSB0eXBlZGVmIHN0cnVjdCBRR3JhcGhpY3NTY2VuZV9ob29rX18geyBQVFJJTlQg ZHVtbXk7IH0gKlFHcmFwaGljc1NjZW5lX2hvb2tIOwotQEAgLTQ0Niw2ICs0NDgsOCBAQCB0eXBl ZGVmIHN0cnVjdCBRQnV0dG9uR3JvdXBfaG9va19fIHsgUFRSCi0gdHlwZWRlZiBzdHJ1Y3QgUUlu cHV0TWV0aG9kRXZlbnRfXyB7IFBUUklOVCBkdW1teTsgfSAqUUlucHV0TWV0aG9kRXZlbnRIOwot IHR5cGVkZWYgc3RydWN0IFFEYXRlX18geyBQVFJJTlQgZHVtbXk7IH0gKlFEYXRlSDsKLSB0eXBl ZGVmIHN0cnVjdCBRU3R5bGVPcHRpb25UaXRsZUJhcl9fIHsgUFRSSU5UIGR1bW15OyB9ICpRU3R5 bGVPcHRpb25UaXRsZUJhckg7Ci0rdHlwZWRlZiBzdHJ1Y3QgUVNjcmVlbl9ob29rX18geyBQVFJJ TlQgZHVtbXk7IH0gKlFTY3JlZW5faG9va0g7Ci0rdHlwZWRlZiBzdHJ1Y3QgUVdpbmRvd19ob29r X18geyBQVFJJTlQgZHVtbXk7IH0gKlFXaW5kb3dfaG9va0g7Ci0gdHlwZWRlZiBzdHJ1Y3QgUVdp ZGdldF9ob29rX18geyBQVFJJTlQgZHVtbXk7IH0gKlFXaWRnZXRfaG9va0g7Ci0gdHlwZWRlZiBz dHJ1Y3QgUURvY2tXaWRnZXRfXyB7IFBUUklOVCBkdW1teTsgfSAqUURvY2tXaWRnZXRIOwotIHR5 cGVkZWYgc3RydWN0IFFMaW5lX18geyBQVFJJTlQgZHVtbXk7IH0gKlFMaW5lSDsKLUluZGV4OiBz cmMvcWJhY2tpbmdzdG9yZV9jLmNwcAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGIv c3JjL3FiYWNraW5nc3RvcmVfYy5jcHAKLUBAIC0wLDAgKzEsNzggQEAKLSsvLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsv LwotKy8vICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJv dXQgdGhlIGNvcHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCi0rCi0rCi0rI2luY2x1ZGUgInFiYWNraW5nc3RvcmVfYy5oIgot KwotK1FCYWNraW5nU3RvcmVIIFFCYWNraW5nU3RvcmVfQ3JlYXRlKFFXaW5kb3dIIHdpbmRvdykK LSt7Ci0rICByZXR1cm4gKFFCYWNraW5nU3RvcmVIKSBuZXcgUUJhY2tpbmdTdG9yZSgoUVdpbmRv dyopd2luZG93KTsKLSt9Ci0rCi0rdm9pZCBRQmFja2luZ1N0b3JlX0Rlc3Ryb3koUUJhY2tpbmdT dG9yZUggaGFuZGxlKQotK3sKLSsgIGRlbGV0ZSAoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZTsKLSt9 Ci0rCi0rUVdpbmRvd0ggUUJhY2tpbmdTdG9yZV93aW5kb3coUUJhY2tpbmdTdG9yZUggaGFuZGxl KQotK3sKLSsgIHJldHVybiAoUVdpbmRvd0gpICgoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPndp bmRvdygpOwotK30KLSsKLStRUGFpbnREZXZpY2VIIFFCYWNraW5nU3RvcmVfcGFpbnREZXZpY2Uo UUJhY2tpbmdTdG9yZUggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoUVBhaW50RGV2aWNlSCkgKChR QmFja2luZ1N0b3JlICopaGFuZGxlKS0+cGFpbnREZXZpY2UoKTsKLSt9Ci0rCi0rdm9pZCBRQmFj a2luZ1N0b3JlX2ZsdXNoKFFCYWNraW5nU3RvcmVIIGhhbmRsZSwgY29uc3QgUVJlZ2lvbkggcmVn aW9uLCBRV2luZG93SCB3aW5kb3csIGNvbnN0IFFQb2ludEggb2Zmc2V0KQotK3sKLSsgICgoUUJh Y2tpbmdTdG9yZSAqKWhhbmRsZSktPmZsdXNoKCooY29uc3QgUVJlZ2lvbiopIHJlZ2lvbiwgKFFX aW5kb3cgKil3aW5kb3csICooY29uc3QgUVBvaW50Kikgb2Zmc2V0KTsKLSt9Ci0rCi0rdm9pZCBR QmFja2luZ1N0b3JlX3Jlc2l6ZShRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFTaXplSCBB bm9uUGFyYW0xKQotK3sKLSsgICgoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPnJlc2l6ZSgqKGNv bnN0IFFTaXplKilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRQmFja2luZ1N0b3JlX3NpemUo UUJhY2tpbmdTdG9yZUggaGFuZGxlLCBQU2l6ZSByZXR2YWwpCi0rewotKyAgKihRU2l6ZSAqKXJl dHZhbCA9ICgoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPnNpemUoKTsKLSt9Ci0rCi0rYm9vbCBR QmFja2luZ1N0b3JlX3Njcm9sbChRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFSZWdpb25I IGFyZWEsIGludCBkeCwgaW50IGR5KQotK3sKLSsgIHJldHVybiAoKFFCYWNraW5nU3RvcmUgKilo YW5kbGUpLT5zY3JvbGwoKihjb25zdCBRUmVnaW9uKilhcmVhLCBkeCwgZHkpOwotK30KLSsKLSt2 b2lkIFFCYWNraW5nU3RvcmVfYmVnaW5QYWludChRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0 IFFSZWdpb25IIEFub25QYXJhbTEpCi0rewotKyAgKChRQmFja2luZ1N0b3JlICopaGFuZGxlKS0+ YmVnaW5QYWludCgqKGNvbnN0IFFSZWdpb24qKUFub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFC YWNraW5nU3RvcmVfZW5kUGFpbnQoUUJhY2tpbmdTdG9yZUggaGFuZGxlKQotK3sKLSsgICgoUUJh Y2tpbmdTdG9yZSAqKWhhbmRsZSktPmVuZFBhaW50KCk7Ci0rfQotKwotK3ZvaWQgUUJhY2tpbmdT dG9yZV9zZXRTdGF0aWNDb250ZW50cyhRQmFja2luZ1N0b3JlSCBoYW5kbGUsIGNvbnN0IFFSZWdp b25IIEFub25QYXJhbTEpCi0rewotKyAgKChRQmFja2luZ1N0b3JlICopaGFuZGxlKS0+c2V0U3Rh dGljQ29udGVudHMoKihjb25zdCBRUmVnaW9uKilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBR QmFja2luZ1N0b3JlX3N0YXRpY0NvbnRlbnRzKFFCYWNraW5nU3RvcmVIIGhhbmRsZSwgUVJlZ2lv bkggcmV0dmFsKQotK3sKLSsJKihRUmVnaW9uICopcmV0dmFsID0gKChRQmFja2luZ1N0b3JlICop aGFuZGxlKS0+c3RhdGljQ29udGVudHMoKTsKLSt9Ci0rCi0rYm9vbCBRQmFja2luZ1N0b3JlX2hh c1N0YXRpY0NvbnRlbnRzKFFCYWNraW5nU3RvcmVIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGJv b2wpICgoUUJhY2tpbmdTdG9yZSAqKWhhbmRsZSktPmhhc1N0YXRpY0NvbnRlbnRzKCk7Ci0rfQot KwotSW5kZXg6IHNyYy9xYmFja2luZ3N0b3JlX2MuaAotPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVs bAotKysrIGIvc3JjL3FiYWNraW5nc3RvcmVfYy5oCi1AQCAtMCwwICsxLDMyIEBACi0rLy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKLSsvLyAgQ29weXJpZ2h0IChjKSAyMDE3IGJ5IMW9ZWxqYW4gUmlr YWxvCi0rLy8KLSsvLyAgU2VlIHRoZSBpbmNsdWRlZCBmaWxlIENPUFlJTkcuVFhUIGZvciBkZXRh aWxzIGFib3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8KLSsvLyAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0r Ly8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4K LSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgotKwotKwotKyNpZm5kZWYgUUJBQ0tJTkdTVE9SRV9D X0gKLSsjZGVmaW5lIFFCQUNLSU5HU1RPUkVfQ19ICi0rCi0rI2luY2x1ZGUgPFF0R3VpPgotKyNp bmNsdWRlICJwYXNjYWxiaW5kLmgiCi0rCi0rQ19FWFBPUlQgUUJhY2tpbmdTdG9yZUggUUJhY2tp bmdTdG9yZV9DcmVhdGUoUVdpbmRvd0ggd2luZG93KTsKLStDX0VYUE9SVCB2b2lkIFFCYWNraW5n U3RvcmVfRGVzdHJveShRQmFja2luZ1N0b3JlSCBoYW5kbGUpOwotK0NfRVhQT1JUIFFXaW5kb3dI IFFCYWNraW5nU3RvcmVfd2luZG93KFFCYWNraW5nU3RvcmVIIGhhbmRsZSk7Ci0rQ19FWFBPUlQg UVBhaW50RGV2aWNlSCBRQmFja2luZ1N0b3JlX3BhaW50RGV2aWNlKFFCYWNraW5nU3RvcmVIIGhh bmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRQmFja2luZ1N0b3JlX2ZsdXNoKFFCYWNraW5nU3RvcmVI IGhhbmRsZSwgY29uc3QgUVJlZ2lvbkggcmVnaW9uLCBRV2luZG93SCB3aW5kb3csIGNvbnN0IFFQ b2ludEggb2Zmc2V0KTsKLStDX0VYUE9SVCB2b2lkIFFCYWNraW5nU3RvcmVfcmVzaXplKFFCYWNr aW5nU3RvcmVIIGhhbmRsZSwgY29uc3QgUVNpemVIIEFub25QYXJhbTEpOwotK0NfRVhQT1JUIHZv aWQgUUJhY2tpbmdTdG9yZV9zaXplKFFCYWNraW5nU3RvcmVIIGhhbmRsZSwgUFNpemUgcmV0dmFs KTsKLStDX0VYUE9SVCBib29sIFFCYWNraW5nU3RvcmVfc2Nyb2xsKFFCYWNraW5nU3RvcmVIIGhh bmRsZSwgY29uc3QgUVJlZ2lvbkggYXJlYSwgaW50IGR4LCBpbnQgZHkpOwotK0NfRVhQT1JUIHZv aWQgUUJhY2tpbmdTdG9yZV9iZWdpblBhaW50KFFCYWNraW5nU3RvcmVIIGhhbmRsZSwgY29uc3Qg UVJlZ2lvbkggQW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQgdm9pZCBRQmFja2luZ1N0b3JlX2VuZFBh aW50KFFCYWNraW5nU3RvcmVIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRQmFja2luZ1N0b3Jl X3NldFN0YXRpY0NvbnRlbnRzKFFCYWNraW5nU3RvcmVIIGhhbmRsZSwgY29uc3QgUVJlZ2lvbkgg QW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQgdm9pZCBRQmFja2luZ1N0b3JlX3N0YXRpY0NvbnRlbnRz KFFCYWNraW5nU3RvcmVIIGhhbmRsZSwgUVJlZ2lvbkggcmV0dmFsKTsKLStDX0VYUE9SVCBib29s IFFCYWNraW5nU3RvcmVfaGFzU3RhdGljQ29udGVudHMoUUJhY2tpbmdTdG9yZUggaGFuZGxlKTsK LSsKLSsjZW5kaWYKLUluZGV4OiBzcmMvcW1hcmdpbnNfYy5jcHAKLT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSAv ZGV2L251bGwKLSsrKyBiL3NyYy9xbWFyZ2luc19jLmNwcAotQEAgLTAsMCArMSw3MyBAQAotKy8v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAxNyBieSDFvWVsamFu IFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3Ig ZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8vICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaW5jbHVkZSAicW1hcmdpbnNf Yy5oIgotKwotK1FNYXJnaW5zSCBRTWFyZ2luc19DcmVhdGUoKQotK3sKLSsJcmV0dXJuIChRTWFy Z2luc0gpIG5ldyBRTWFyZ2lucygpOwotK30KLSsKLStRTWFyZ2luc0ggUU1hcmdpbnNfQ3JlYXRl MihpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKQotK3sKLSsgIHJldHVy biAoUU1hcmdpbnNIKSBuZXcgUU1hcmdpbnMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKLSt9 Ci0rCi0rdm9pZCBRTWFyZ2luc19EZXN0cm95KFFNYXJnaW5zSCBoYW5kbGUpCi0rewotKwlkZWxl dGUgKFFNYXJnaW5zICopaGFuZGxlOwotK30KLSsKLStib29sIFFNYXJnaW5zX2lzTnVsbChRTWFy Z2luc0ggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoYm9vbCkgKChRTWFyZ2lucyAqKWhhbmRsZSkt PmlzTnVsbCgpOwotK30KLSsKLStpbnQgUU1hcmdpbnNfbGVmdChRTWFyZ2luc0ggaGFuZGxlKQot K3sKLSsgIHJldHVybiAoaW50KSAoKFFNYXJnaW5zICopaGFuZGxlKS0+bGVmdCgpOwotK30KLSsK LStpbnQgUU1hcmdpbnNfdG9wKFFNYXJnaW5zSCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChpbnQp ICgoUU1hcmdpbnMgKiloYW5kbGUpLT50b3AoKTsKLSt9Ci0rCi0raW50IFFNYXJnaW5zX3JpZ2h0 KFFNYXJnaW5zSCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChpbnQpICgoUU1hcmdpbnMgKiloYW5k bGUpLT5yaWdodCgpOwotK30KLSsKLStpbnQgUU1hcmdpbnNfYm90dG9tKFFNYXJnaW5zSCBoYW5k bGUpCi0rewotKyAgcmV0dXJuIChpbnQpICgoUU1hcmdpbnMgKiloYW5kbGUpLT5ib3R0b20oKTsK LSt9Ci0rCi0rdm9pZCBRTWFyZ2luc19zZXRMZWZ0KFFNYXJnaW5zSCBoYW5kbGUsIGludCBsZWZ0 KQotK3sKLSsgICgoUU1hcmdpbnMgKiloYW5kbGUpLT5zZXRMZWZ0KGxlZnQpOwotK30KLSsKLSt2 b2lkIFFNYXJnaW5zX3NldFRvcChRTWFyZ2luc0ggaGFuZGxlLCBpbnQgdG9wKQotK3sKLSsgICgo UU1hcmdpbnMgKiloYW5kbGUpLT5zZXRUb3AodG9wKTsKLSt9Ci0rCi0rdm9pZCBRTWFyZ2luc19z ZXRSaWdodChRTWFyZ2luc0ggaGFuZGxlLCBpbnQgcmlnaHQpCi0rewotKyAgKChRTWFyZ2lucyAq KWhhbmRsZSktPnNldFJpZ2h0KHJpZ2h0KTsKLSt9Ci0rCi0rdm9pZCBRTWFyZ2luc19zZXRCb3R0 b20oUU1hcmdpbnNIIGhhbmRsZSwgaW50IGJvdHRvbSkKLSt7Ci0rICAoKFFNYXJnaW5zICopaGFu ZGxlKS0+c2V0Qm90dG9tKGJvdHRvbSk7Ci0rfQotKwotSW5kZXg6IHNyYy9xbWFyZ2luc19jLmgK LT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xbWFyZ2luc19jLmgKLUBAIC0w LDAgKzEsMzEgQEAKLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKy8vICBDb3B5cmlnaHQgKGMp IDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsvLwotKy8vICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUg Q09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdodC4KLSsvLwotKy8vICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rCi0rCi0rI2lm bmRlZiBRTUFSR0lOU19DX0gKLSsjZGVmaW5lIFFNQVJHSU5TX0NfSAotKwotKyNpbmNsdWRlIDxR dENvcmU+Ci0rI2luY2x1ZGUgInBhc2NhbGJpbmQuaCIKLSsKLStDX0VYUE9SVCBRTWFyZ2luc0gg UU1hcmdpbnNfQ3JlYXRlKCk7Ci0rQ19FWFBPUlQgUU1hcmdpbnNIIFFNYXJnaW5zX0NyZWF0ZTIo aW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSk7Ci0rQ19FWFBPUlQgdm9p ZCBRTWFyZ2luc19EZXN0cm95KFFNYXJnaW5zSCBoYW5kbGUpOwotK0NfRVhQT1JUIGJvb2wgUU1h cmdpbnNfaXNOdWxsKFFNYXJnaW5zSCBoYW5kbGUpOwotK0NfRVhQT1JUIGludCBRTWFyZ2luc19s ZWZ0KFFNYXJnaW5zSCBoYW5kbGUpOwotK0NfRVhQT1JUIGludCBRTWFyZ2luc190b3AoUU1hcmdp bnNIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgaW50IFFNYXJnaW5zX3JpZ2h0KFFNYXJnaW5zSCBoYW5k bGUpOwotK0NfRVhQT1JUIGludCBRTWFyZ2luc19ib3R0b20oUU1hcmdpbnNIIGhhbmRsZSk7Ci0r Q19FWFBPUlQgdm9pZCBRTWFyZ2luc19zZXRMZWZ0KFFNYXJnaW5zSCBoYW5kbGUsIGludCBsZWZ0 KTsKLStDX0VYUE9SVCB2b2lkIFFNYXJnaW5zX3NldFRvcChRTWFyZ2luc0ggaGFuZGxlLCBpbnQg dG9wKTsKLStDX0VYUE9SVCB2b2lkIFFNYXJnaW5zX3NldFJpZ2h0KFFNYXJnaW5zSCBoYW5kbGUs IGludCByaWdodCk7Ci0rQ19FWFBPUlQgdm9pZCBRTWFyZ2luc19zZXRCb3R0b20oUU1hcmdpbnNI IGhhbmRsZSwgaW50IGJvdHRvbSk7Ci0rCi0rI2VuZGlmCi1JbmRleDogc3JjL3FvYmplY3RfYy5j cHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tLSBhL3NyYy9xb2JqZWN0X2MuY3BwCi0rKysgYi9zcmMvcW9iamVj dF9jLmNwcAotQEAgLTE3NywzICsxNzcsMTAgQEAgdm9pZCBRT2JqZWN0X2RlbGV0ZUxhdGVyKFFP YmplY3RIIGhhbmRsZQotIAkoKFFPYmplY3QgKiloYW5kbGUpLT5kZWxldGVMYXRlcigpOwotIH0K LSAKLStjb25zdCBRTWV0YU9iamVjdEggUU9iamVjdF9tZXRhT2JqZWN0KFFPYmplY3RIIGhhbmRs ZSkKLSt7Ci0rICBjb25zdCBRTWV0YU9iamVjdCAqbWV0YSA9ICgoUU9iamVjdCAqKWhhbmRsZSkt Pm1ldGFPYmplY3QoKTsKLSsgIGlmICghbWV0YSkKLSsgICAgcmV0dXJuIE5VTEw7Ci0rICByZXR1 cm4gKGNvbnN0IFFNZXRhT2JqZWN0SCkgbWV0YTsKLSt9Ci1JbmRleDogc3JjL3FvYmplY3RfYy5o Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLS0gYS9zcmMvcW9iamVjdF9jLmgKLSsrKyBiL3NyYy9xb2JqZWN0X2Mu aAotQEAgLTQ3LDUgKzQ3LDYgQEAgQ19FWFBPUlQgdWludCBRT2JqZWN0X3JlZ2lzdGVyVXNlckRh dGEoKQotIENfRVhQT1JUIFFPYmplY3RIIFFPYmplY3RfcGFyZW50KFFPYmplY3RIIGhhbmRsZSk7 Ci0gQ19FWFBPUlQgYm9vbCBRT2JqZWN0X2luaGVyaXRzKFFPYmplY3RIIGhhbmRsZSwgY29uc3Qg Y2hhciogY2xhc3NuYW1lKTsKLSBDX0VYUE9SVCB2b2lkIFFPYmplY3RfZGVsZXRlTGF0ZXIoUU9i amVjdEggaGFuZGxlKTsKLStDX0VYUE9SVCBjb25zdCBRTWV0YU9iamVjdEggUU9iamVjdF9tZXRh T2JqZWN0KFFPYmplY3RIIGhhbmRsZSk7Ci0gCi0gI2VuZGlmCi1JbmRleDogc3JjL3FzY3JlZW5f Yy5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xc2NyZWVuX2MuY3Bw Ci1AQCAtMCwwICsxLDE3OCBAQAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHly aWdodCAoYykgMjAxNyBieSDFvWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVk ZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8v Ci0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotKy8vICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsK LSsKLSsjaW5jbHVkZSAicXNjcmVlbl9jLmgiCi0rCi0rdm9pZCBRU2NyZWVuX0Rlc3Ryb3koUVNj cmVlbkggaGFuZGxlKQotK3sKLSsgIGRlbGV0ZSAoUVNjcmVlbiAqKWhhbmRsZTsKLSt9Ci0rCi0r dm9pZCBRU2NyZWVuX25hbWUoUVNjcmVlbkggaGFuZGxlLCBQV2lkZVN0cmluZyByZXR2YWwpCi0r ewotKwlRU3RyaW5nIHRfcmV0dmFsOwotKwl0X3JldHZhbCA9ICgoUVNjcmVlbiAqKWhhbmRsZSkt Pm5hbWUoKTsKLSsJY29weVFTdHJpbmdUb1BXaWRlU3RyaW5nKHRfcmV0dmFsLCByZXR2YWwpOwot K30KLSsKLStpbnQgUVNjcmVlbl9kZXB0aChRU2NyZWVuSCBoYW5kbGUpCi0rewotKyAgcmV0dXJu IChpbnQpICgoUVNjcmVlbiAqKWhhbmRsZSktPmRlcHRoKCk7Ci0rfQotKwotK3ZvaWQgUVNjcmVl bl9zaXplKFFTY3JlZW5IIGhhbmRsZSwgUFNpemUgcmV0dmFsKQotK3sKLSsJKihRU2l6ZSAqKXJl dHZhbCA9ICgoUVNjcmVlbiAqKWhhbmRsZSktPnNpemUoKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVu X2dlb21ldHJ5KFFTY3JlZW5IIGhhbmRsZSwgUFJlY3QgcmV0dmFsKQotK3sKLSsJUVJlY3QgdF9y ZXR2YWw7Ci0rCXRfcmV0dmFsID0gKChRU2NyZWVuICopaGFuZGxlKS0+Z2VvbWV0cnkoKTsKLSsJ Y29weVFSZWN0VG9QUmVjdCh0X3JldHZhbCwgcmV0dmFsKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVu X3BoeXNpY2FsU2l6ZShRU2NyZWVuSCBoYW5kbGUsIFFTaXplRkggcmV0dmFsKQotK3sKLSsJKihR U2l6ZUYgKilyZXR2YWwgPSAoKFFTY3JlZW4gKiloYW5kbGUpLT5waHlzaWNhbFNpemUoKTsKLSt9 Ci0rCi0rcXJlYWwgUVNjcmVlbl9waHlzaWNhbERvdHNQZXJJbmNoWChRU2NyZWVuSCBoYW5kbGUp Ci0rewotKyAgcmV0dXJuIChxcmVhbCkgKChRU2NyZWVuICopaGFuZGxlKS0+cGh5c2ljYWxEb3Rz UGVySW5jaFgoKTsKLSt9Ci0rCi0rcXJlYWwgUVNjcmVlbl9waHlzaWNhbERvdHNQZXJJbmNoWShR U2NyZWVuSCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChxcmVhbCkgKChRU2NyZWVuICopaGFuZGxl KS0+cGh5c2ljYWxEb3RzUGVySW5jaFkoKTsKLSt9Ci0rCi0rcXJlYWwgUVNjcmVlbl9waHlzaWNh bERvdHNQZXJJbmNoKFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKHFyZWFsKSAoKFFT Y3JlZW4gKiloYW5kbGUpLT5waHlzaWNhbERvdHNQZXJJbmNoKCk7Ci0rfQotKwotK3FyZWFsIFFT Y3JlZW5fbG9naWNhbERvdHNQZXJJbmNoWChRU2NyZWVuSCBoYW5kbGUpCi0rewotKyAgcmV0dXJu IChxcmVhbCkgKChRU2NyZWVuICopaGFuZGxlKS0+bG9naWNhbERvdHNQZXJJbmNoWCgpOwotK30K LSsKLStxcmVhbCBRU2NyZWVuX2xvZ2ljYWxEb3RzUGVySW5jaFkoUVNjcmVlbkggaGFuZGxlKQot K3sKLSsgIHJldHVybiAocXJlYWwpICgoUVNjcmVlbiAqKWhhbmRsZSktPmxvZ2ljYWxEb3RzUGVy SW5jaFkoKTsKLSt9Ci0rCi0rcXJlYWwgUVNjcmVlbl9sb2dpY2FsRG90c1BlckluY2goUVNjcmVl bkggaGFuZGxlKQotK3sKLSsgIHJldHVybiAocXJlYWwpICgoUVNjcmVlbiAqKWhhbmRsZSktPmxv Z2ljYWxEb3RzUGVySW5jaCgpOwotK30KLSsKLStxcmVhbCBRU2NyZWVuX2RldmljZVBpeGVsUmF0 aW8oUVNjcmVlbkggaGFuZGxlKQotK3sKLSsgIHJldHVybiAocXJlYWwpICgoUVNjcmVlbiAqKWhh bmRsZSktPmRldmljZVBpeGVsUmF0aW8oKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2F2YWlsYWJs ZVNpemUoUVNjcmVlbkggaGFuZGxlLCBQU2l6ZSByZXR2YWwpCi0rewotKwkqKFFTaXplICopcmV0 dmFsID0gKChRU2NyZWVuICopaGFuZGxlKS0+YXZhaWxhYmxlU2l6ZSgpOwotK30KLSsKLSt2b2lk IFFTY3JlZW5fYXZhaWxhYmxlR2VvbWV0cnkoUVNjcmVlbkggaGFuZGxlLCBQUmVjdCByZXR2YWwp Ci0rewotKwlRUmVjdCB0X3JldHZhbDsKLSsJdF9yZXR2YWwgPSAoKFFTY3JlZW4gKiloYW5kbGUp LT5hdmFpbGFibGVHZW9tZXRyeSgpOwotKwljb3B5UVJlY3RUb1BSZWN0KHRfcmV0dmFsLCByZXR2 YWwpOwotK30KLSsKLSt2b2lkIFFTY3JlZW5fdmlydHVhbFNpemUoUVNjcmVlbkggaGFuZGxlLCBQ U2l6ZSByZXR2YWwpCi0rewotKwkqKFFTaXplICopcmV0dmFsID0gKChRU2NyZWVuICopaGFuZGxl KS0+dmlydHVhbFNpemUoKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX3ZpcnR1YWxHZW9tZXRyeShR U2NyZWVuSCBoYW5kbGUsIFBSZWN0IHJldHZhbCkKLSt7Ci0rCVFSZWN0IHRfcmV0dmFsOwotKwl0 X3JldHZhbCA9ICgoUVNjcmVlbiAqKWhhbmRsZSktPnZpcnR1YWxHZW9tZXRyeSgpOwotKwljb3B5 UVJlY3RUb1BSZWN0KHRfcmV0dmFsLCByZXR2YWwpOwotK30KLSsKLStRdDo6U2NyZWVuT3JpZW50 YXRpb24gUVNjcmVlbl9wcmltYXJ5T3JpZW50YXRpb24oUVNjcmVlbkggaGFuZGxlKQotK3sKLSsg IHJldHVybiAoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSAoKFFTY3JlZW4gKiloYW5kbGUpLT5wcmlt YXJ5T3JpZW50YXRpb24oKTsKLSt9Ci0rCi0rUXQ6OlNjcmVlbk9yaWVudGF0aW9uIFFTY3JlZW5f b3JpZW50YXRpb24oUVNjcmVlbkggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoUXQ6OlNjcmVlbk9y aWVudGF0aW9uKSAoKFFTY3JlZW4gKiloYW5kbGUpLT5vcmllbnRhdGlvbigpOwotK30KLSsKLStR dDo6U2NyZWVuT3JpZW50YXRpb24gUVNjcmVlbl9uYXRpdmVPcmllbnRhdGlvbihRU2NyZWVuSCBo YW5kbGUpCi0rewotKyAgcmV0dXJuIChRdDo6U2NyZWVuT3JpZW50YXRpb24pICgoUVNjcmVlbiAq KWhhbmRsZSktPm5hdGl2ZU9yaWVudGF0aW9uKCk7Ci0rfQotKwotK1F0OjpTY3JlZW5PcmllbnRh dGlvbnMgUVNjcmVlbl9vcmllbnRhdGlvblVwZGF0ZU1hc2soUVNjcmVlbkggaGFuZGxlKQotK3sK LSsgIHJldHVybiAoUXQ6OlNjcmVlbk9yaWVudGF0aW9ucykgKChRU2NyZWVuICopaGFuZGxlKS0+ b3JpZW50YXRpb25VcGRhdGVNYXNrKCk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9zZXRPcmllbnRh dGlvblVwZGF0ZU1hc2soUVNjcmVlbkggaGFuZGxlLCBRdDo6U2NyZWVuT3JpZW50YXRpb25zIG1h c2spCi0rewotKyAgKChRU2NyZWVuICopaGFuZGxlKS0+c2V0T3JpZW50YXRpb25VcGRhdGVNYXNr KChRdDo6U2NyZWVuT3JpZW50YXRpb25zKSBtYXNrKTsKLSt9Ci0rCi0raW50IFFTY3JlZW5fYW5n bGVCZXR3ZWVuKFFTY3JlZW5IIGhhbmRsZSwgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIGEsIFF0OjpT Y3JlZW5PcmllbnRhdGlvbiBiKQotK3sKLSsgIHJldHVybiAoaW50KSAoKFFTY3JlZW4gKiloYW5k bGUpLT5hbmdsZUJldHdlZW4oKFF0OjpTY3JlZW5PcmllbnRhdGlvbikgYSwgKFF0OjpTY3JlZW5P cmllbnRhdGlvbikgYik7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl92aXJ0dWFsU2libGluZ3MoUVNj cmVlbkggaGFuZGxlLCBQUHRySW50QXJyYXkgcmV0dmFsKQotK3sKLSsJUUxpc3Q8UVNjcmVlbio+ IHRfcmV0dmFsOwotKwl0X3JldHZhbCA9ICgoUVNjcmVlbiAqKWhhbmRsZSktPnZpcnR1YWxTaWJs aW5ncygpOwotKwljb3B5UUxpc3RUZW1wbGF0ZVRvUHRySW50QXJyYXkodF9yZXR2YWwsIHJldHZh bCk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl90cmFuc2Zvcm1CZXR3ZWVuKFFTY3JlZW5IIGhhbmRs ZSwgUVRyYW5zZm9ybUggcmV0dmFsLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gYSwgUXQ6OlNjcmVl bk9yaWVudGF0aW9uIGIsIFBSZWN0IEFub25QYXJhbTEpCi0rewotKwlRUmVjdCB0X0Fub25QYXJh bTE7Ci0rCWNvcHlQUmVjdFRvUVJlY3QoQW5vblBhcmFtMSwgdF9Bbm9uUGFyYW0xKTsKLSsJKihR VHJhbnNmb3JtICopcmV0dmFsID0gKChRU2NyZWVuICopaGFuZGxlKS0+dHJhbnNmb3JtQmV0d2Vl bigoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSBhLCAoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSBiLCB0 X0Fub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFTY3JlZW5fbWFwQmV0d2VlbihRU2NyZWVuSCBo YW5kbGUsIFBSZWN0IHJldHZhbCwgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIGEsIFF0OjpTY3JlZW5P cmllbnRhdGlvbiBiLCBQUmVjdCBBbm9uUGFyYW0xKQotK3sKLSsJUVJlY3QgdF9Bbm9uUGFyYW0x OwotKyAgUVJlY3QgdF9yZXR2YWw7Ci0rCWNvcHlQUmVjdFRvUVJlY3QoQW5vblBhcmFtMSwgdF9B bm9uUGFyYW0xKTsKLSsgIHRfcmV0dmFsID0gKChRU2NyZWVuICopaGFuZGxlKS0+bWFwQmV0d2Vl bigoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSBhLCAoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSBiLCB0 X0Fub25QYXJhbTEpOwotKyAgY29weVFSZWN0VG9QUmVjdCh0X3JldHZhbCwgcmV0dmFsKTsKLSt9 Ci0rCi0rYm9vbCBRU2NyZWVuX2lzUG9ydHJhaXQoUVNjcmVlbkggaGFuZGxlLCBRdDo6U2NyZWVu T3JpZW50YXRpb24gb3JpZW50YXRpb24pCi0rewotKyAgcmV0dXJuIChib29sKSAoKFFTY3JlZW4g KiloYW5kbGUpLT5pc1BvcnRyYWl0KChRdDo6U2NyZWVuT3JpZW50YXRpb24pIG9yaWVudGF0aW9u KTsKLSt9Ci0rCi0rYm9vbCBRU2NyZWVuX2lzTGFuZHNjYXBlKFFTY3JlZW5IIGhhbmRsZSwgUXQ6 OlNjcmVlbk9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotK3sKLSsgIHJldHVybiAoYm9vbCkgKChR U2NyZWVuICopaGFuZGxlKS0+aXNMYW5kc2NhcGUoKFF0OjpTY3JlZW5PcmllbnRhdGlvbikgb3Jp ZW50YXRpb24pOwotK30KLSsKLSt2b2lkIFFTY3JlZW5fZ3JhYldpbmRvdyhRU2NyZWVuSCBoYW5k bGUsIFFQaXhtYXBIIHJldHZhbCx1bnNpZ25lZCBpbnQgd2luZG93LCBpbnQgeCxpbnQgeSxpbnQg dywgaW50IGgpCi0rewotKyAgKihRUGl4bWFwICopcmV0dmFsID0gKChRU2NyZWVuICopaGFuZGxl KS0+Z3JhYldpbmRvdygoV0lkKSB3aW5kb3csIHgsIHksIHcsIGgpOwotK30KLSsKLStxcmVhbCBR U2NyZWVuX3JlZnJlc2hSYXRlKFFTY3JlZW5IIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKHFyZWFs KSAoKFFTY3JlZW4gKiloYW5kbGUpLT5yZWZyZXNoUmF0ZSgpOwotK30KLUluZGV4OiBzcmMvcXNj cmVlbl9jLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xc2NyZWVuX2Mu aAotQEAgLTAsMCArMSw0OSBAQAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHly aWdodCAoYykgMjAwNyBieSDFvWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVk ZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8v Ci0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotKy8vICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsK LSsKLSsjaWZuZGVmIFFTQ1JFRU5fQ19ICi0rI2RlZmluZSBRU0NSRUVOX0NfSAotKwotKyNpbmNs dWRlIDxRdEd1aT4KLSsjaW5jbHVkZSAicGFzY2FsYmluZC5oIgotKwotK0NfRVhQT1JUIHZvaWQg UVNjcmVlbl9EZXN0cm95KFFTY3JlZW5IIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVu X25hbWUoUVNjcmVlbkggaGFuZGxlLCBQV2lkZVN0cmluZyByZXR2YWwpOwotK0NfRVhQT1JUIGlu dCBRU2NyZWVuX2RlcHRoKFFTY3JlZW5IIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVu X3NpemUoUVNjcmVlbkggaGFuZGxlLCBQU2l6ZSByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVNj cmVlbl9nZW9tZXRyeShRU2NyZWVuSCBoYW5kbGUsIFBSZWN0IHJldHZhbCk7Ci0rQ19FWFBPUlQg dm9pZCBRU2NyZWVuX3BoeXNpY2FsU2l6ZShRU2NyZWVuSCBoYW5kbGUsIFFTaXplRkggcmV0dmFs KTsKLStDX0VYUE9SVCBxcmVhbCBRU2NyZWVuX3BoeXNpY2FsRG90c1BlckluY2hYKFFTY3JlZW5I IGhhbmRsZSk7Ci0rQ19FWFBPUlQgcXJlYWwgUVNjcmVlbl9waHlzaWNhbERvdHNQZXJJbmNoWShR U2NyZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFsIFFTY3JlZW5fcGh5c2ljYWxEb3RzUGVy SW5jaChRU2NyZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFsIFFTY3JlZW5fbG9naWNhbERv dHNQZXJJbmNoWChRU2NyZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFsIFFTY3JlZW5fbG9n aWNhbERvdHNQZXJJbmNoWShRU2NyZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFsIFFTY3Jl ZW5fbG9naWNhbERvdHNQZXJJbmNoKFFTY3JlZW5IIGhhbmRsZSk7Ci0rQ19FWFBPUlQgcXJlYWwg UVNjcmVlbl9kZXZpY2VQaXhlbFJhdGlvKFFTY3JlZW5IIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9p ZCBRU2NyZWVuX2F2YWlsYWJsZVNpemUoUVNjcmVlbkggaGFuZGxlLCBQU2l6ZSByZXR2YWwpOwot K0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9hdmFpbGFibGVHZW9tZXRyeShRU2NyZWVuSCBoYW5kbGUs IFBSZWN0IHJldHZhbCk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX3ZpcnR1YWxTaXplKFFTY3Jl ZW5IIGhhbmRsZSwgUFNpemUgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5fdmlydHVh bEdlb21ldHJ5KFFTY3JlZW5IIGhhbmRsZSwgUFJlY3QgcmV0dmFsKTsKLStDX0VYUE9SVCBRdDo6 U2NyZWVuT3JpZW50YXRpb24gUVNjcmVlbl9wcmltYXJ5T3JpZW50YXRpb24oUVNjcmVlbkggaGFu ZGxlKTsKLStDX0VYUE9SVCBRdDo6U2NyZWVuT3JpZW50YXRpb24gUVNjcmVlbl9vcmllbnRhdGlv bihRU2NyZWVuSCBoYW5kbGUpOwotK0NfRVhQT1JUIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBRU2Ny ZWVuX25hdGl2ZU9yaWVudGF0aW9uKFFTY3JlZW5IIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUXQ6OlNj cmVlbk9yaWVudGF0aW9ucyBRU2NyZWVuX29yaWVudGF0aW9uVXBkYXRlTWFzayhRU2NyZWVuSCBo YW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9zZXRPcmllbnRhdGlvblVwZGF0ZU1hc2so UVNjcmVlbkggaGFuZGxlLCBRdDo6U2NyZWVuT3JpZW50YXRpb25zIG1hc2spOwotK0NfRVhQT1JU IGludCBRU2NyZWVuX2FuZ2xlQmV0d2VlbihRU2NyZWVuSCBoYW5kbGUsIFF0OjpTY3JlZW5Pcmll bnRhdGlvbiBhLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gYik7Ci0rQ19FWFBPUlQgdm9pZCBRU2Ny ZWVuX3ZpcnR1YWxTaWJsaW5ncyhRU2NyZWVuSCBoYW5kbGUsIFBQdHJJbnRBcnJheSByZXR2YWwp OwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl90cmFuc2Zvcm1CZXR3ZWVuKFFTY3JlZW5IIGhhbmRs ZSwgUVRyYW5zZm9ybUggcmV0dmFsLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gYSwgUXQ6OlNjcmVl bk9yaWVudGF0aW9uIGIsIFBSZWN0IEFub25QYXJhbTEpOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVl bl9tYXBCZXR3ZWVuKFFTY3JlZW5IIGhhbmRsZSwgUFJlY3QgcmV0dmFsLCBRdDo6U2NyZWVuT3Jp ZW50YXRpb24gYSwgUXQ6OlNjcmVlbk9yaWVudGF0aW9uIGIsIFBSZWN0IEFub25QYXJhbTEpOwot K0NfRVhQT1JUIGJvb2wgUVNjcmVlbl9pc1BvcnRyYWl0KFFTY3JlZW5IIGhhbmRsZSwgUXQ6OlNj cmVlbk9yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKLStDX0VYUE9SVCBib29sIFFTY3JlZW5faXNM YW5kc2NhcGUoUVNjcmVlbkggaGFuZGxlLCBRdDo6U2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRp b24pOwotK0NfRVhQT1JUIHZvaWQgUVNjcmVlbl9ncmFiV2luZG93KFFTY3JlZW5IIGhhbmRsZSwg UVBpeG1hcEggcmV0dmFsLHVuc2lnbmVkIGludCB3aW5kb3csIGludCB4ID0gMCxpbnQgeSA9IDAs aW50IHcgPSAtMSwgaW50IGggPSAtMSk7Ci0rQ19FWFBPUlQgcXJlYWwgUVNjcmVlbl9yZWZyZXNo UmF0ZShRU2NyZWVuSCBoYW5kbGUpOwotKwotKyNlbmRpZgotSW5kZXg6IHNyYy9xc2NyZWVuX2hv b2tfYy5jcHAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xc2NyZWVuX2hv b2tfYy5jcHAKLUBAIC0wLDAgKzEsNjggQEAKLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKy8v ICBDb3B5cmlnaHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsvLwotKy8vICBTZWUgdGhl IGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdo dC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCi0rCi0rCi0rI2luY2x1ZGUgInFzY3JlZW5faG9va19jLmgiCi0rCi0rUVNjcmVlbl9ob29r SCBRU2NyZWVuX2hvb2tfQ3JlYXRlKFFPYmplY3RIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAoUVNj cmVlbl9ob29rSCkgbmV3IFFTY3JlZW5faG9vaygoUU9iamVjdCopaGFuZGxlKTsKLSt9Ci0rCi0r dm9pZCBRU2NyZWVuX2hvb2tfRGVzdHJveShRU2NyZWVuX2hvb2tIIGhhbmRsZSkKLSt7Ci0rCWRl bGV0ZSAoUVNjcmVlbl9ob29rICopaGFuZGxlOwotK30KLSsKLSt2b2lkIFFTY3JlZW5faG9va19o b29rX2dlb21ldHJ5Q2hhbmdlZChRU2NyZWVuX2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0r ewotKyAgKChRU2NyZWVuX2hvb2sgKiloYW5kbGUpLT5ob29rX2dlb21ldHJ5Q2hhbmdlZChob29r KTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2hvb2tfaG9va19hdmFpbGFibGVHZW9tZXRyeUNoYW5n ZWQoUVNjcmVlbl9ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVNjcmVlbl9o b29rICopaGFuZGxlKS0+aG9va19hdmFpbGFibGVHZW9tZXRyeUNoYW5nZWQoaG9vayk7Ci0rfQot KwotK3ZvaWQgUVNjcmVlbl9ob29rX2hvb2tfcGh5c2ljYWxTaXplQ2hhbmdlZChRU2NyZWVuX2hv b2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRU2NyZWVuX2hvb2sgKiloYW5kbGUp LT5ob29rX3BoeXNpY2FsU2l6ZUNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVNjcmVlbl9o b29rX2hvb2tfcGh5c2ljYWxEb3RzUGVySW5jaENoYW5nZWQoUVNjcmVlbl9ob29rSCBoYW5kbGUs IFFIb29rSCBob29rKQotK3sKLSsgICgoUVNjcmVlbl9ob29rICopaGFuZGxlKS0+aG9va19waHlz aWNhbERvdHNQZXJJbmNoQ2hhbmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2hvb2tf aG9va19sb2dpY2FsRG90c1BlckluY2hDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9v a0ggaG9vaykKLSt7Ci0rICAoKFFTY3JlZW5faG9vayAqKWhhbmRsZSktPmhvb2tfbG9naWNhbERv dHNQZXJJbmNoQ2hhbmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2hvb2tfaG9va192 aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykK LSt7Ci0rICAoKFFTY3JlZW5faG9vayAqKWhhbmRsZSktPmhvb2tfdmlydHVhbEdlb21ldHJ5Q2hh bmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2hvb2tfaG9va19wcmltYXJ5T3JpZW50 YXRpb25DaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAo KFFTY3JlZW5faG9vayAqKWhhbmRsZSktPmhvb2tfcHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdlZCho b29rKTsKLSt9Ci0rCi0rdm9pZCBRU2NyZWVuX2hvb2tfaG9va19vcmllbnRhdGlvbkNoYW5nZWQo UVNjcmVlbl9ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVNjcmVlbl9ob29r ICopaGFuZGxlKS0+aG9va19vcmllbnRhdGlvbkNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQg UVNjcmVlbl9ob29rX2hvb2tfcmVmcmVzaFJhdGVDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxl LCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFTY3JlZW5faG9vayAqKWhhbmRsZSktPmhvb2tfcmVm cmVzaFJhdGVDaGFuZ2VkKGhvb2spOwotK30KLSsKLUluZGV4OiBzcmMvcXNjcmVlbl9ob29rX2Mu aAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL3FzY3JlZW5faG9va19jLmgK LUBAIC0wLDAgKzEsMzAgQEAKLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKy8vICBDb3B5cmln aHQgKGMpIDIwMTcgYnkgxb1lbGphbiBSaWthbG8KLSsvLwotKy8vICBTZWUgdGhlIGluY2x1ZGVk IGZpbGUgQ09QWUlORy5UWFQgZm9yIGRldGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdodC4KLSsvLwot Ky8vICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKLSsvLyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rCi0r Ci0rI2lmbmRlZiBRU0NSRUVOX0hPT0tfQ19ICi0rI2RlZmluZSBRU0NSRUVOX0hPT0tfQ19ICi0r Ci0rI2luY2x1ZGUgInFzY3JlZW5faG9vay5oIgotKwotK0NfRVhQT1JUIFFTY3JlZW5faG9va0gg UVNjcmVlbl9ob29rX0NyZWF0ZShRT2JqZWN0SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVNj cmVlbl9ob29rX0Rlc3Ryb3koUVNjcmVlbl9ob29rSCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQg UVNjcmVlbl9ob29rX2hvb2tfZ2VvbWV0cnlDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBR SG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX2hvb2tfaG9va19hdmFpbGFibGVH ZW9tZXRyeUNoYW5nZWQoUVNjcmVlbl9ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VY UE9SVCB2b2lkIFFTY3JlZW5faG9va19ob29rX3BoeXNpY2FsU2l6ZUNoYW5nZWQoUVNjcmVlbl9o b29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VYUE9SVCB2b2lkIFFTY3JlZW5faG9va19o b29rX3BoeXNpY2FsRG90c1BlckluY2hDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9v a0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX2hvb2tfaG9va19sb2dpY2FsRG90c1Bl ckluY2hDaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBP UlQgdm9pZCBRU2NyZWVuX2hvb2tfaG9va192aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkKFFTY3JlZW5f aG9va0ggaGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX2hvb2tf aG9va19wcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkKFFTY3JlZW5faG9va0ggaGFuZGxlLCBRSG9v a0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRU2NyZWVuX2hvb2tfaG9va19vcmllbnRhdGlvbkNo YW5nZWQoUVNjcmVlbl9ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VYUE9SVCB2b2lk IFFTY3JlZW5faG9va19ob29rX3JlZnJlc2hSYXRlQ2hhbmdlZChRU2NyZWVuX2hvb2tIIGhhbmRs ZSwgUUhvb2tIIGhvb2spOwotKwotKyNlbmRpZgotKwotSW5kZXg6IHNyYy9xc2NyZWVuX2hvb2su aAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL3FzY3JlZW5faG9vay5oCi1A QCAtMCwwICsxLDE5MCBAQAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdo dCAoYykgMjAxNyBieSDFvWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQg ZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0r Ly8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAotKy8vICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsK LSsjaWZuZGVmIFFTQ1JFRU5fSE9PS19ICi0rI2RlZmluZSBRU0NSRUVOX0hPT0tfSAotKwotKyNp bmNsdWRlIDxxc2NyZWVuLmg+Ci0rCi0rI2luY2x1ZGUgInFvYmplY3RfaG9vay5oIgotKwotK2Ns YXNzIFFTY3JlZW5faG9vayA6IHB1YmxpYyBRT2JqZWN0X2hvb2sgewotKyAgUV9PQkpFQ1QKLSsg IHB1YmxpYzoKLSsgICAgUVNjcmVlbl9ob29rKFFPYmplY3QgKmhhbmRsZSkgOiBRT2JqZWN0X2hv b2soaGFuZGxlKSB7Ci0rICAgICAgZ2VvbWV0cnlDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOwot KyAgICAgIGF2YWlsYWJsZUdlb21ldHJ5Q2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDsKLSsgICAg ICBwaHlzaWNhbFNpemVDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOwotKyAgICAgIHBoeXNpY2Fs RG90c1BlckluY2hDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOwotKyAgICAgIGxvZ2ljYWxEb3Rz UGVySW5jaENoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7Ci0rICAgICAgdmlydHVhbEdlb21ldHJ5 Q2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDsKLSsgICAgICBwcmltYXJ5T3JpZW50YXRpb25DaGFu Z2VkX2V2ZW50LmZ1bmMgPSBOVUxMOwotKyAgICAgIG9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5m dW5jID0gTlVMTDsKLSsgICAgICByZWZyZXNoUmF0ZUNoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7 Ci0rCi0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX2dlb21ldHJ5Q2hhbmdlZChRSG9vayAmaG9v aykgewotKyAgICAgIGlmICggIWdlb21ldHJ5Q2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAg IGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwoZ2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0JikpLCB0 aGlzLCBTTE9UKGdlb21ldHJ5Q2hhbmdlZF9ob29rKGNvbnN0IFFSZWN0JikpKTsKLSsgICAgICBn ZW9tZXRyeUNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0r ICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKGdlb21ldHJ5Q2hhbmdlZChjb25zdCBR UmVjdCYpKSwgdGhpcywgU0xPVChnZW9tZXRyeUNoYW5nZWRfaG9vayhjb25zdCBRUmVjdCYpKSk7 Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX2F2YWlsYWJsZUdlb21ldHJ5Q2hhbmdlZChRSG9v ayAmaG9vaykgewotKyAgICAgIGlmICggIWF2YWlsYWJsZUdlb21ldHJ5Q2hhbmdlZF9ldmVudC5m dW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwoYXZhaWxhYmxlR2VvbWV0cnlD aGFuZ2VkKGNvbnN0IFFSZWN0JikpLCB0aGlzLCBTTE9UKGF2YWlsYWJsZUdlb21ldHJ5Q2hhbmdl ZF9ob29rKGNvbnN0IFFSZWN0JikpKTsKLSsgICAgICBhdmFpbGFibGVHZW9tZXRyeUNoYW5nZWRf ZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25u ZWN0KGhhbmRsZSwgU0lHTkFMKGF2YWlsYWJsZUdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdCYp KSwgdGhpcywgU0xPVChhdmFpbGFibGVHZW9tZXRyeUNoYW5nZWRfaG9vayhjb25zdCBRUmVjdCYp KSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3BoeXNpY2FsU2l6ZUNoYW5nZWQoUUhvb2sg Jmhvb2spIHsKLSsgICAgICBpZiAoICFwaHlzaWNhbFNpemVDaGFuZ2VkX2V2ZW50LmZ1bmMgKQot KyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTChwaHlzaWNhbFNpemVDaGFuZ2VkKGNvbnN0 IFFTaXplRiYpKSwgdGhpcywgU0xPVChwaHlzaWNhbFNpemVDaGFuZ2VkX2hvb2soY29uc3QgUVNp emVGJikpKTsKLSsgICAgICBwaHlzaWNhbFNpemVDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAg ICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTChw aHlzaWNhbFNpemVDaGFuZ2VkKGNvbnN0IFFTaXplRiYpKSwgdGhpcywgU0xPVChwaHlzaWNhbFNp emVDaGFuZ2VkX2hvb2soY29uc3QgUVNpemVGJikpKTsKLSsgICAgfQotKwotKyAgICB2b2lkIGhv b2tfcGh5c2ljYWxEb3RzUGVySW5jaENoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAo ICFwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5l Y3QoaGFuZGxlLCBTSUdOQUwocGh5c2ljYWxEb3RzUGVySW5jaENoYW5nZWQocXJlYWwpKSwgdGhp cywgU0xPVChwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9ob29rKHFyZWFsKSkpOwotKyAgICAg IHBoeXNpY2FsRG90c1BlckluY2hDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAgICBpZiAoICFo b29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTChwaHlzaWNhbERv dHNQZXJJbmNoQ2hhbmdlZChxcmVhbCkpLCB0aGlzLCBTTE9UKHBoeXNpY2FsRG90c1BlckluY2hD aGFuZ2VkX2hvb2socXJlYWwpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX2xvZ2ljYWxE b3RzUGVySW5jaENoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFsb2dpY2FsRG90 c1BlckluY2hDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJ R05BTChsb2dpY2FsRG90c1BlckluY2hDaGFuZ2VkKHFyZWFsKSksIHRoaXMsIFNMT1QobG9naWNh bERvdHNQZXJJbmNoQ2hhbmdlZF9ob29rKHFyZWFsKSkpOwotKyAgICAgIGxvZ2ljYWxEb3RzUGVy SW5jaENoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAg ICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKGxvZ2ljYWxEb3RzUGVySW5jaENoYW5nZWQo cXJlYWwpKSwgdGhpcywgU0xPVChsb2dpY2FsRG90c1BlckluY2hDaGFuZ2VkX2hvb2socXJlYWwp KSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3ZpcnR1YWxHZW9tZXRyeUNoYW5nZWQoUUhv b2sgJmhvb2spIHsKLSsgICAgICBpZiAoICF2aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkX2V2ZW50LmZ1 bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTCh2aXJ0dWFsR2VvbWV0cnlDaGFu Z2VkKGNvbnN0IFFSZWN0JikpLCB0aGlzLCBTTE9UKHZpcnR1YWxHZW9tZXRyeUNoYW5nZWRfaG9v ayhjb25zdCBRUmVjdCYpKSk7Ci0rICAgICAgdmlydHVhbEdlb21ldHJ5Q2hhbmdlZF9ldmVudCA9 IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nvbm5lY3QoaGFu ZGxlLCBTSUdOQUwodmlydHVhbEdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdCYpKSwgdGhpcywg U0xPVCh2aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkX2hvb2soY29uc3QgUVJlY3QmKSkpOwotKyAgICB9 Ci0rCi0rICAgIHZvaWQgaG9va19wcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkKFFIb29rICZob29r KSB7Ci0rICAgICAgaWYgKCAhcHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5mdW5jICkK LSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwocHJpbWFyeU9yaWVudGF0aW9uQ2hhbmdl ZChRdDo6U2NyZWVuT3JpZW50YXRpb24pKSwgdGhpcywgU0xPVChwcmltYXJ5T3JpZW50YXRpb25D aGFuZ2VkX2hvb2soUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSkpOwotKyAgICAgIHByaW1hcnlPcmll bnRhdGlvbkNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0r ICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHByaW1hcnlPcmllbnRhdGlvbkNoYW5n ZWQoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSksIHRoaXMsIFNMT1QocHJpbWFyeU9yaWVudGF0aW9u Q2hhbmdlZF9ob29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbikpKTsKLSsgICAgfQotKwotKyAgICB2 b2lkIGhvb2tfb3JpZW50YXRpb25DaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAh b3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUs IFNJR05BTChvcmllbnRhdGlvbkNoYW5nZWQoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSksIHRoaXMs IFNMT1Qob3JpZW50YXRpb25DaGFuZ2VkX2hvb2soUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSkpOwot KyAgICAgIG9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9v ay5mdW5jICkKLSsgICAgICAgIGRpc2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwob3JpZW50YXRpb25D aGFuZ2VkKFF0OjpTY3JlZW5PcmllbnRhdGlvbikpLCB0aGlzLCBTTE9UKG9yaWVudGF0aW9uQ2hh bmdlZF9ob29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbikpKTsKLSsgICAgfQotKwotKyAgICB2b2lk IGhvb2tfcmVmcmVzaFJhdGVDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhcmVm cmVzaFJhdGVDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJ R05BTChyZWZyZXNoUmF0ZUNoYW5nZWQocXJlYWwpKSwgdGhpcywgU0xPVChyZWZyZXNoUmF0ZUNo YW5nZWRfaG9vayhxcmVhbCkpKTsKLSsgICAgICByZWZyZXNoUmF0ZUNoYW5nZWRfZXZlbnQgPSBo b29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRs ZSwgU0lHTkFMKHJlZnJlc2hSYXRlQ2hhbmdlZChxcmVhbCkpLCB0aGlzLCBTTE9UKHJlZnJlc2hS YXRlQ2hhbmdlZF9ob29rKHFyZWFsKSkpOwotKyAgICB9Ci0rCi0rICBwcml2YXRlIHNsb3RzOgot KyAgICB2b2lkIGdlb21ldHJ5Q2hhbmdlZF9ob29rKGNvbnN0IFFSZWN0JiBnZW9tKSB7Ci0rICAg ICAgaWYgKCBnZW9tZXRyeUNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYg dm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0YSwgUFJlY3QgZ2VvbSk7Ci0rCVBSZWN0IHRfZ2Vv bTsKLSsJY29weVFSZWN0VG9QUmVjdChnZW9tLCB0X2dlb20pOwotKwkoKihmdW5jX3R5cGUpZ2Vv bWV0cnlDaGFuZ2VkX2V2ZW50LmZ1bmMpKGdlb21ldHJ5Q2hhbmdlZF9ldmVudC5kYXRhLCB0X2dl b20pOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIGF2YWlsYWJsZUdlb21ldHJ5Q2hh bmdlZF9ob29rKGNvbnN0IFFSZWN0JiBnZW9tKSB7Ci0rICAgICAgaWYgKCBhdmFpbGFibGVHZW9t ZXRyeUNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNf dHlwZSkodm9pZCAqZGF0YSwgUFJlY3QgZ2VvbSk7Ci0rCVBSZWN0IHRfZ2VvbTsKLSsJY29weVFS ZWN0VG9QUmVjdChnZW9tLCB0X2dlb20pOwotKwkoKihmdW5jX3R5cGUpYXZhaWxhYmxlR2VvbWV0 cnlDaGFuZ2VkX2V2ZW50LmZ1bmMpKGF2YWlsYWJsZUdlb21ldHJ5Q2hhbmdlZF9ldmVudC5kYXRh LCB0X2dlb20pOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIHBoeXNpY2FsU2l6ZUNo YW5nZWRfaG9vayhjb25zdCBRU2l6ZUYmIHBvcykgewotKyAgICAgIGlmICggcGh5c2ljYWxTaXpl Q2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBl KSh2b2lkICpkYXRhLCBjb25zdCBRU2l6ZUZIIHBvcyk7Ci0rCSgqKGZ1bmNfdHlwZSlwaHlzaWNh bFNpemVDaGFuZ2VkX2V2ZW50LmZ1bmMpKHBoeXNpY2FsU2l6ZUNoYW5nZWRfZXZlbnQuZGF0YSwg KGNvbnN0IFFTaXplRkgpJnBvcyk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgcGh5 c2ljYWxEb3RzUGVySW5jaENoYW5nZWRfaG9vayhxcmVhbCBkcGkpIHsKLSsgICAgICBpZiAoIHBo eXNpY2FsRG90c1BlckluY2hDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVm IHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIHFyZWFsIGRwaSk7Ci0rCSgqKGZ1bmNfdHlw ZSlwaHlzaWNhbERvdHNQZXJJbmNoQ2hhbmdlZF9ldmVudC5mdW5jKShwaHlzaWNhbERvdHNQZXJJ bmNoQ2hhbmdlZF9ldmVudC5kYXRhLCBkcGkpOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2 b2lkIGxvZ2ljYWxEb3RzUGVySW5jaENoYW5nZWRfaG9vayhxcmVhbCBkcGkpIHsKLSsgICAgICBp ZiAoIGxvZ2ljYWxEb3RzUGVySW5jaENoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5 cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0YSwgcXJlYWwgZHBpKTsKLSsJKCooZnVu Y190eXBlKWxvZ2ljYWxEb3RzUGVySW5jaENoYW5nZWRfZXZlbnQuZnVuYykobG9naWNhbERvdHNQ ZXJJbmNoQ2hhbmdlZF9ldmVudC5kYXRhLCBkcGkpOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAg ICB2b2lkIHZpcnR1YWxHZW9tZXRyeUNoYW5nZWRfaG9vayhjb25zdCBRUmVjdCYgZ2VvbSkgewot KyAgICAgIGlmICggdmlydHVhbEdlb21ldHJ5Q2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAg ICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBQUmVjdCBnZW9tKTsKLSsJ UFJlY3QgdF9nZW9tOwotKwljb3B5UVJlY3RUb1BSZWN0KGdlb20sIHRfZ2VvbSk7Ci0rCSgqKGZ1 bmNfdHlwZSl2aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkX2V2ZW50LmZ1bmMpKHZpcnR1YWxHZW9tZXRy eUNoYW5nZWRfZXZlbnQuZGF0YSwgdF9nZW9tKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAg dm9pZCBwcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkX2hvb2soUXQ6OlNjcmVlbk9yaWVudGF0aW9u IG9yaWVudGF0aW9uKSB7Ci0rICAgICAgaWYgKCBwcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkX2V2 ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRh dGEsIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBvcmllbnRhdGlvbik7Ci0rCSgqKGZ1bmNfdHlwZSlw cmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50LmZ1bmMpKHByaW1hcnlPcmllbnRhdGlvbkNo YW5nZWRfZXZlbnQuZGF0YSwgb3JpZW50YXRpb24pOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAg ICB2b2lkIG9yaWVudGF0aW9uQ2hhbmdlZF9ob29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbiBvcmll bnRhdGlvbikgewotKyAgICAgIGlmICggb3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7 Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIFF0OjpTY3Jl ZW5PcmllbnRhdGlvbiBvcmllbnRhdGlvbik7Ci0rCSgqKGZ1bmNfdHlwZSlvcmllbnRhdGlvbkNo YW5nZWRfZXZlbnQuZnVuYykob3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50LmRhdGEsIG9yaWVudGF0 aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCByZWZyZXNoUmF0ZUNoYW5nZWRf aG9vayhxcmVhbCByZWZyZXNoUmF0ZSkgewotKyAgICAgIGlmICggcmVmcmVzaFJhdGVDaGFuZ2Vk X2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQg KmRhdGEsIHFyZWFsIHJlZnJlc2hSYXRlKTsKLSsJKCooZnVuY190eXBlKXJlZnJlc2hSYXRlQ2hh bmdlZF9ldmVudC5mdW5jKShyZWZyZXNoUmF0ZUNoYW5nZWRfZXZlbnQuZGF0YSwgcmVmcmVzaFJh dGUpOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgcHJpdmF0ZToKLSsgICAgUUhvb2sgZ2VvbWV0 cnlDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayBhdmFpbGFibGVHZW9tZXRyeUNoYW5nZWRfZXZl bnQ7Ci0rICAgIFFIb29rIHBoeXNpY2FsU2l6ZUNoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIHBo eXNpY2FsRG90c1BlckluY2hDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayBsb2dpY2FsRG90c1Bl ckluY2hDaGFuZ2VkX2V2ZW50OwotKyAgICBRSG9vayB2aXJ0dWFsR2VvbWV0cnlDaGFuZ2VkX2V2 ZW50OwotKyAgICBRSG9vayBwcmltYXJ5T3JpZW50YXRpb25DaGFuZ2VkX2V2ZW50OwotKyAgICBR SG9vayBvcmllbnRhdGlvbkNoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIHJlZnJlc2hSYXRlQ2hh bmdlZF9ldmVudDsKLSt9OwotKwotKyNlbmRpZgotKwotSW5kZXg6IHNyYy9xc3VyZmFjZV9jLmNw cAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL3FzdXJmYWNlX2MuY3BwCi1A QCAtMCwwICsxLDQ1IEBACi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsvLyAgQ29weXJpZ2h0 IChjKSAyMDE3IGJ5IMW9ZWxqYW4gUmlrYWxvCi0rLy8KLSsvLyAgU2VlIHRoZSBpbmNsdWRlZCBm aWxlIENPUFlJTkcuVFhUIGZvciBkZXRhaWxzIGFib3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8KLSsv LyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKwotKwot KyNpbmNsdWRlICJxc3VyZmFjZV9jLmgiCi0rCi0rdm9pZCBRU3VyZmFjZV9EZXN0cm95KFFTdXJm YWNlSCBoYW5kbGUpCi0rewotKwlkZWxldGUgKFFTdXJmYWNlICopaGFuZGxlOwotK30KLSsKLSt2 b2lkIFFTdXJmYWNlX3NpemUoUVN1cmZhY2VIIGhhbmRsZSwgUFNpemUgcmV0dmFsKQotK3sKLSsJ KihRU2l6ZSAqKXJldHZhbCA9ICgoUVN1cmZhY2UgKiloYW5kbGUpLT5zaXplKCk7Ci0rfQotKwot KwotK2Jvb2wgUVN1cmZhY2Vfc3VwcG9ydHNPcGVuR0woUVN1cmZhY2VIIGhhbmRsZSkKLSt7Ci0r ICByZXR1cm4gKGJvb2wpICgoUVN1cmZhY2UgKiloYW5kbGUpLT5zdXBwb3J0c09wZW5HTCgpOwot K30KLSsKLStRU3VyZmFjZTo6U3VyZmFjZUNsYXNzIFFTdXJmYWNlX3N1cmZhY2VDbGFzcyhRU3Vy ZmFjZUggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoUVN1cmZhY2U6OlN1cmZhY2VDbGFzcykgKChR U3VyZmFjZSAqKWhhbmRsZSktPnN1cmZhY2VDbGFzcygpOwotK30KLSsKLStRU3VyZmFjZTo6U3Vy ZmFjZVR5cGUgUVN1cmZhY2Vfc3VyZmFjZVR5cGUoUVN1cmZhY2VIIGhhbmRsZSkKLSt7Ci0rICBy ZXR1cm4gKFFTdXJmYWNlOjpTdXJmYWNlVHlwZSkgKChRU3VyZmFjZSAqKWhhbmRsZSktPnN1cmZh Y2VUeXBlKCk7Ci0rfQotKwotKwotK3ZvaWQgUVN1cmZhY2VfZm9ybWF0KFFTdXJmYWNlSCBoYW5k bGUsIFFTdXJmYWNlRm9ybWF0SCBhcmV0dXJuKQotK3sKLSsgICooUVN1cmZhY2VGb3JtYXQgKilh cmV0dXJuID0gKChRU3VyZmFjZSAqKWhhbmRsZSktPmZvcm1hdCgpOwotK30KLSsKLUluZGV4OiBz cmMvcXN1cmZhY2VfYy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gL2Rldi9udWxsCi0rKysgYi9zcmMvcXN1 cmZhY2VfYy5oCi1AQCAtMCwwICsxLDI1IEBACi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsv LyAgQ29weXJpZ2h0IChjKSAyMDA3IGJ5IMW9ZWxqYW4gUmlrYWxvCi0rLy8KLSsvLyAgU2VlIHRo ZSBpbmNsdWRlZCBmaWxlIENPUFlJTkcuVFhUIGZvciBkZXRhaWxzIGFib3V0IHRoZSBjb3B5cmln aHQuCi0rLy8KLSsvLyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSsvLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgotKwotKwotKyNpZm5kZWYgUVNVUkZBQ0VfQ19ICi0rI2RlZmluZSBRU1VSRkFDRV9DX0gK LSsKLSsjaW5jbHVkZSA8UXRHdWk+Ci0rI2luY2x1ZGUgInBhc2NhbGJpbmQuaCIKLSsKLStDX0VY UE9SVCB2b2lkIFFTdXJmYWNlX0Rlc3Ryb3koUVN1cmZhY2VIIGhhbmRsZSk7Ci0rQ19FWFBPUlQg dm9pZCBRU3VyZmFjZV9zaXplKFFTdXJmYWNlSCBoYW5kbGUsIFBTaXplIHJldHZhbCk7Ci0rQ19F WFBPUlQgYm9vbCBRU3VyZmFjZV9zdXBwb3J0c09wZW5HTChRU3VyZmFjZUggaGFuZGxlKTsKLStD X0VYUE9SVCBRU3VyZmFjZTo6U3VyZmFjZUNsYXNzIFFTdXJmYWNlX3N1cmZhY2VDbGFzcyhRU3Vy ZmFjZUggaGFuZGxlKTsKLStDX0VYUE9SVCBRU3VyZmFjZTo6U3VyZmFjZVR5cGUgUVN1cmZhY2Vf c3VyZmFjZVR5cGUoUVN1cmZhY2VIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZV9m b3JtYXQoUVN1cmZhY2VIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXRIIGFyZXR1cm4pOwotKwotKyNl bmRpZgotSW5kZXg6IHNyYy9xc3VyZmFjZWZvcm1hdF9jLmNwcAotPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIC9k ZXYvbnVsbAotKysrIGIvc3JjL3FzdXJmYWNlZm9ybWF0X2MuY3BwCi1AQCAtMCwwICsxLDIwMiBA QAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAxNyBieSDF vWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5HLlRY VCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8v ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaW5jbHVkZSAicXN1 cmZhY2Vmb3JtYXRfYy5oIgotKwotK1FTdXJmYWNlRm9ybWF0SCBRU3VyZmFjZUZvcm1hdF9DcmVh dGUoKQotK3sKLSsgIHJldHVybiAoUVN1cmZhY2VGb3JtYXRIKSBuZXcgUVN1cmZhY2VGb3JtYXQo KTsKLSt9Ci0rCi0rUVN1cmZhY2VGb3JtYXRIIFFTdXJmYWNlRm9ybWF0X0NyZWF0ZTIoUVN1cmZh Y2VGb3JtYXQ6OkZvcm1hdE9wdGlvbnMgb3B0aW9ucykKLSt7Ci0rICByZXR1cm4gKFFTdXJmYWNl Rm9ybWF0SCkgbmV3IFFTdXJmYWNlRm9ybWF0KChRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9u cykgb3B0aW9ucyk7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VGb3JtYXRfRGVzdHJveShRU3VyZmFj ZUZvcm1hdEggaGFuZGxlKQotK3sKLSsJZGVsZXRlIChRU3VyZmFjZUZvcm1hdCAqKWhhbmRsZTsK LSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXREZXB0aEJ1ZmZlclNpemUoUVN1cmZhY2VG b3JtYXRIIGhhbmRsZSwgaW50IHNpemUpCi0rewotKyAgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxl KS0+c2V0RGVwdGhCdWZmZXJTaXplKHNpemUpOwotK30KLSsKLStpbnQgUVN1cmZhY2VGb3JtYXRf ZGVwdGhCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChp bnQpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPmRlcHRoQnVmZmVyU2l6ZSgpOwotK30KLSsK LSt2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFN0ZW5jaWxCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0 SCBoYW5kbGUsIGludCBzaXplKQotK3sKLSsgICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnNl dFN0ZW5jaWxCdWZmZXJTaXplKHNpemUpOwotK30KLSsKLStpbnQgUVN1cmZhY2VGb3JtYXRfc3Rl bmNpbEJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGlu dCkgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c3RlbmNpbEJ1ZmZlclNpemUoKTsKLSt9Ci0r Ci0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRSZWRCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBo YW5kbGUsIGludCBzaXplKQotK3sKLSsgICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnNldFJl ZEJ1ZmZlclNpemUoc2l6ZSk7Ci0rfQotKwotK2ludCBRU3VyZmFjZUZvcm1hdF9yZWRCdWZmZXJT aXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChpbnQpICgoUVN1cmZh Y2VGb3JtYXQqKWhhbmRsZSktPnJlZEJ1ZmZlclNpemUoKTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFj ZUZvcm1hdF9zZXRHcmVlbkJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IHNp emUpCi0rewotKyAgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c2V0R3JlZW5CdWZmZXJTaXpl KHNpemUpOwotK30KLSsKLStpbnQgUVN1cmZhY2VGb3JtYXRfZ3JlZW5CdWZmZXJTaXplKFFTdXJm YWNlRm9ybWF0SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChpbnQpICgoUVN1cmZhY2VGb3JtYXQq KWhhbmRsZSktPmdyZWVuQnVmZmVyU2l6ZSgpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0 X3NldEJsdWVCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIGludCBzaXplKQotK3sK LSsgICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnNldEJsdWVCdWZmZXJTaXplKHNpemUpOwot K30KLSsKLStpbnQgUVN1cmZhY2VGb3JtYXRfYmx1ZUJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRI IGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGludCkgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+ Ymx1ZUJ1ZmZlclNpemUoKTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRBbHBoYUJ1 ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IHNpemUpCi0rewotKyAgKChRU3Vy ZmFjZUZvcm1hdCopaGFuZGxlKS0+c2V0QWxwaGFCdWZmZXJTaXplKHNpemUpOwotK30KLSsKLStp bnQgUVN1cmZhY2VGb3JtYXRfYWxwaGFCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUp Ci0rewotKyAgcmV0dXJuIChpbnQpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPmFscGhhQnVm ZmVyU2l6ZSgpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFNhbXBsZXMoUVN1cmZh Y2VGb3JtYXRIIGhhbmRsZSwgaW50IG51bVNhbXBsZXMpCi0rewotKyAgKChRU3VyZmFjZUZvcm1h dCopaGFuZGxlKS0+c2V0U2FtcGxlcyhudW1TYW1wbGVzKTsKLSt9Ci0rCi0raW50IFFTdXJmYWNl Rm9ybWF0X3NhbXBsZXMoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGlu dCkgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c2FtcGxlcygpOwotK30KLSsKLSt2b2lkIFFT dXJmYWNlRm9ybWF0X3NldFN3YXBCZWhhdmlvcihRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBRU3Vy ZmFjZUZvcm1hdDo6U3dhcEJlaGF2aW9yIGJlaGF2aW9yKQotK3sKLSsgICgoUVN1cmZhY2VGb3Jt YXQqKWhhbmRsZSktPnNldFN3YXBCZWhhdmlvcigoUVN1cmZhY2VGb3JtYXQ6OlN3YXBCZWhhdmlv cikgYmVoYXZpb3IpOwotK30KLSsKLStRU3VyZmFjZUZvcm1hdDo6U3dhcEJlaGF2aW9yIFFTdXJm YWNlRm9ybWF0X3N3YXBCZWhhdmlvcihRU3VyZmFjZUZvcm1hdEggaGFuZGxlKQotK3sKLSsgIHJl dHVybiAoUVN1cmZhY2VGb3JtYXQ6OlN3YXBCZWhhdmlvcikgKChRU3VyZmFjZUZvcm1hdCopaGFu ZGxlKS0+c3dhcEJlaGF2aW9yKCk7Ci0rfQotKwotK2Jvb2wgUVN1cmZhY2VGb3JtYXRfaGFzQWxw aGEoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGJvb2wpICgoUVN1cmZh Y2VGb3JtYXQqKWhhbmRsZSktPmhhc0FscGhhKCk7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VGb3Jt YXRfc2V0UHJvZmlsZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBRU3VyZmFjZUZvcm1hdDo6T3Bl bkdMQ29udGV4dFByb2ZpbGUgcHJvZmlsZSkKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5k bGUpLT5zZXRQcm9maWxlKChRU3VyZmFjZUZvcm1hdDo6T3BlbkdMQ29udGV4dFByb2ZpbGUpIHBy b2ZpbGUpOwotK30KLSsKLStRU3VyZmFjZUZvcm1hdDo6T3BlbkdMQ29udGV4dFByb2ZpbGUgUVN1 cmZhY2VGb3JtYXRfcHJvZmlsZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKQotK3sKLSsgIHJldHVy biAoUVN1cmZhY2VGb3JtYXQ6Ok9wZW5HTENvbnRleHRQcm9maWxlKSAoKFFTdXJmYWNlRm9ybWF0 KiloYW5kbGUpLT5wcm9maWxlKCk7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0UmVu ZGVyYWJsZVR5cGUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXQ6OlJlbmRl cmFibGVUeXBlIHR5cGUpCi0rewotKyAgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c2V0UmVu ZGVyYWJsZVR5cGUoKFFTdXJmYWNlRm9ybWF0OjpSZW5kZXJhYmxlVHlwZSkgdHlwZSk7Ci0rfQot KwotK1FTdXJmYWNlRm9ybWF0OjpSZW5kZXJhYmxlVHlwZSBRU3VyZmFjZUZvcm1hdF9yZW5kZXJh YmxlVHlwZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoUVN1cmZhY2VG b3JtYXQ6OlJlbmRlcmFibGVUeXBlKSAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5yZW5kZXJh YmxlVHlwZSgpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0X3NldE1ham9yVmVyc2lvbihR U3VyZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgbWFqb3JWZXJzaW9uKQotK3sKLSsgICgoUVN1cmZh Y2VGb3JtYXQqKWhhbmRsZSktPnNldE1ham9yVmVyc2lvbihtYWpvclZlcnNpb24pOwotK30KLSsK LStpbnQgUVN1cmZhY2VGb3JtYXRfbWFqb3JWZXJzaW9uKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUp Ci0rewotKyAgcmV0dXJuIChpbnQpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPm1ham9yVmVy c2lvbigpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0X3NldE1pbm9yVmVyc2lvbihRU3Vy ZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgbWlub3JWZXJzaW9uKQotK3sKLSsgICgoUVN1cmZhY2VG b3JtYXQqKWhhbmRsZSktPnNldE1pbm9yVmVyc2lvbihtaW5vclZlcnNpb24pOwotK30KLSsKLStp bnQgUVN1cmZhY2VGb3JtYXRfbWlub3JWZXJzaW9uKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpCi0r ewotKyAgcmV0dXJuIChpbnQpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPm1pbm9yVmVyc2lv bigpOwotK30KLSsKLStib29sIFFTdXJmYWNlRm9ybWF0X3N0ZXJlbyhRU3VyZmFjZUZvcm1hdEgg aGFuZGxlKQotK3sKLSsgIHJldHVybiAoYm9vbCkgKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+ c3RlcmVvKCk7Ci0rfQotKwotK3ZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0U3RlcmVvKFFTdXJmYWNl Rm9ybWF0SCBoYW5kbGUsIGJvb2wgZW5hYmxlKQotK3sKLSsgICgoUVN1cmZhY2VGb3JtYXQqKWhh bmRsZSktPnNldFN0ZXJlbyhlbmFibGUpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0X3Nl dE9wdGlvbnMoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXQ6OkZvcm1hdE9w dGlvbnMgb3B0aW9ucykKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5zZXRPcHRp b25zKChRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9ucykgb3B0aW9ucyk7Ci0rfQotKwotK3Zv aWQgUVN1cmZhY2VGb3JtYXRfc2V0T3B0aW9uKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIFFTdXJm YWNlRm9ybWF0OjpGb3JtYXRPcHRpb24gb3B0aW9uLCBib29sIG9uKQotK3sKLSsgICgoUVN1cmZh Y2VGb3JtYXQqKWhhbmRsZSktPnNldE9wdGlvbigoUVN1cmZhY2VGb3JtYXQ6OkZvcm1hdE9wdGlv bikgb3B0aW9uLCBvbik7Ci0rfQotKwotK2Jvb2wgUVN1cmZhY2VGb3JtYXRfdGVzdE9wdGlvbihR U3VyZmFjZUZvcm1hdEggaGFuZGxlLCBRU3VyZmFjZUZvcm1hdDo6Rm9ybWF0T3B0aW9uIG9wdGlv bikKLSt7Ci0rICByZXR1cm4gKGJvb2wpICgoUVN1cmZhY2VGb3JtYXQqKWhhbmRsZSktPnRlc3RP cHRpb24oKFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb24pIG9wdGlvbik7Ci0rfQotKwotK1FT dXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRpb25zIFFTdXJmYWNlRm9ybWF0X29wdGlvbnMoUVN1cmZh Y2VGb3JtYXRIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRP cHRpb25zKSAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUpLT5vcHRpb25zKCk7Ci0rfQotKwotK2lu dCBRU3VyZmFjZUZvcm1hdF9zd2FwSW50ZXJ2YWwoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSkKLSt7 Ci0rICByZXR1cm4gKChRU3VyZmFjZUZvcm1hdCopaGFuZGxlKS0+c3dhcEludGVydmFsKCk7Ci0r fQotKwotK3ZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0U3dhcEludGVydmFsKFFTdXJmYWNlRm9ybWF0 SCBoYW5kbGUsIGludCBpbnRlcnZhbCkKLSt7Ci0rICAoKFFTdXJmYWNlRm9ybWF0KiloYW5kbGUp LT5zZXRTd2FwSW50ZXJ2YWwoaW50ZXJ2YWwpOwotK30KLSsKLSt2b2lkIFFTdXJmYWNlRm9ybWF0 X3NldERlZmF1bHRGb3JtYXQoUVN1cmZhY2VGb3JtYXRIIGZvcm1hdCkKLSt7Ci0rICBRU3VyZmFj ZUZvcm1hdDo6c2V0RGVmYXVsdEZvcm1hdCgqKGNvbnN0IFFTdXJmYWNlRm9ybWF0KikgZm9ybWF0 KTsKLSt9Ci0rCi0rdm9pZCBRU3VyZmFjZUZvcm1hdF9kZWZhdWx0Rm9ybWF0KFFTdXJmYWNlRm9y bWF0SCByZXR2YWwpCi0rewotKyAgKihRU3VyZmFjZUZvcm1hdCopcmV0dmFsID0gUVN1cmZhY2VG b3JtYXQ6OmRlZmF1bHRGb3JtYXQoKTsKLSt9Ci1JbmRleDogc3JjL3FzdXJmYWNlZm9ybWF0X2Mu aAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL3FzdXJmYWNlZm9ybWF0X2Mu aAotQEAgLTAsMCArMSw1NyBAQAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHly aWdodCAoYykgMjAwNyBieSDFvWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVk ZWQgZmlsZSBDT1BZSU5HLlRYVCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8v Ci0rLy8gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotKy8vICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsK LSsKLSsjaWZuZGVmIFFTVVJGQUNFRk9STUFUX0NfSAotKyNkZWZpbmUgUVNVUkZBQ0VGT1JNQVRf Q19ICi0rCi0rI2luY2x1ZGUgPFF0R3VpPgotKyNpbmNsdWRlICJwYXNjYWxiaW5kLmgiCi0rCi0r Q19FWFBPUlQgUVN1cmZhY2VGb3JtYXRIIFFTdXJmYWNlRm9ybWF0X0NyZWF0ZSgpOwotK0NfRVhQ T1JUIFFTdXJmYWNlRm9ybWF0SCBRU3VyZmFjZUZvcm1hdF9DcmVhdGUyKFFTdXJmYWNlRm9ybWF0 OjpGb3JtYXRPcHRpb25zIG9wdGlvbnMpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VGb3JtYXRf RGVzdHJveShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNl Rm9ybWF0X3NldERlcHRoQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLGludCBzaXpl KTsKLStDX0VYUE9SVCBpbnQgUVN1cmZhY2VGb3JtYXRfZGVwdGhCdWZmZXJTaXplKFFTdXJmYWNl Rm9ybWF0SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0U3RlbmNp bEJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IHNpemUpOwotK0NfRVhQT1JU IGludCBRU3VyZmFjZUZvcm1hdF9zdGVuY2lsQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFu ZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFJlZEJ1ZmZlclNpemUoUVN1 cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IHNpemUpOwotK0NfRVhQT1JUIGludCBRU3VyZmFjZUZv cm1hdF9yZWRCdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZv aWQgUVN1cmZhY2VGb3JtYXRfc2V0R3JlZW5CdWZmZXJTaXplKFFTdXJmYWNlRm9ybWF0SCBoYW5k bGUsIGludCBzaXplKTsKLStDX0VYUE9SVCBpbnQgUVN1cmZhY2VGb3JtYXRfZ3JlZW5CdWZmZXJT aXplKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VGb3Jt YXRfc2V0Qmx1ZUJ1ZmZlclNpemUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IHNpemUpOwot K0NfRVhQT1JUIGludCBRU3VyZmFjZUZvcm1hdF9ibHVlQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1h dEggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldEFscGhhQnVmZmVy U2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgc2l6ZSk7Ci0rQ19FWFBPUlQgaW50IFFT dXJmYWNlRm9ybWF0X2FscGhhQnVmZmVyU2l6ZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKTsKLStD X0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFNhbXBsZXMoUVN1cmZhY2VGb3JtYXRIIGhh bmRsZSwgaW50IG51bVNhbXBsZXMpOwotK0NfRVhQT1JUIGludCBRU3VyZmFjZUZvcm1hdF9zYW1w bGVzKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VGb3Jt YXRfc2V0U3dhcEJlaGF2aW9yKFFTdXJmYWNlRm9ybWF0SCBoYW5kbGUsIFFTdXJmYWNlRm9ybWF0 OjpTd2FwQmVoYXZpb3IgYmVoYXZpb3IpOwotK0NfRVhQT1JUIFFTdXJmYWNlRm9ybWF0OjpTd2Fw QmVoYXZpb3IgUVN1cmZhY2VGb3JtYXRfc3dhcEJlaGF2aW9yKFFTdXJmYWNlRm9ybWF0SCBoYW5k bGUpOwotK0NfRVhQT1JUIGJvb2wgUVN1cmZhY2VGb3JtYXRfaGFzQWxwaGEoUVN1cmZhY2VGb3Jt YXRIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZvcm1hdF9zZXRQcm9maWxlKFFT dXJmYWNlRm9ybWF0SCBoYW5kbGUsIFFTdXJmYWNlRm9ybWF0OjpPcGVuR0xDb250ZXh0UHJvZmls ZSBwcm9maWxlKTsKLStDX0VYUE9SVCBRU3VyZmFjZUZvcm1hdDo6T3BlbkdMQ29udGV4dFByb2Zp bGUgUVN1cmZhY2VGb3JtYXRfcHJvZmlsZShRU3VyZmFjZUZvcm1hdEggaGFuZGxlKTsKLStDX0VY UE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFJlbmRlcmFibGVUeXBlKFFTdXJmYWNlRm9ybWF0 SCBoYW5kbGUsIFFTdXJmYWNlRm9ybWF0OjpSZW5kZXJhYmxlVHlwZSB0eXBlKTsKLStDX0VYUE9S VCBRU3VyZmFjZUZvcm1hdDo6UmVuZGVyYWJsZVR5cGUgUVN1cmZhY2VGb3JtYXRfcmVuZGVyYWJs ZVR5cGUoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZv cm1hdF9zZXRNYWpvclZlcnNpb24oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgaW50IG1ham9yVmVy c2lvbik7Ci0rQ19FWFBPUlQgaW50IFFTdXJmYWNlRm9ybWF0X21ham9yVmVyc2lvbihRU3VyZmFj ZUZvcm1hdEggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldE1pbm9y VmVyc2lvbihRU3VyZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgbWlub3JWZXJzaW9uKTsKLStDX0VY UE9SVCBpbnQgUVN1cmZhY2VGb3JtYXRfbWlub3JWZXJzaW9uKFFTdXJmYWNlRm9ybWF0SCBoYW5k bGUpOwotK0NfRVhQT1JUIGJvb2wgUVN1cmZhY2VGb3JtYXRfc3RlcmVvKFFTdXJmYWNlRm9ybWF0 SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZhY2VGb3JtYXRfc2V0U3RlcmVvKFFTdXJm YWNlRm9ybWF0SCBoYW5kbGUsIGJvb2wgZW5hYmxlKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNl Rm9ybWF0X3NldE9wdGlvbnMoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXQ6 OkZvcm1hdE9wdGlvbnMgb3B0aW9ucyk7Ci0rQ19FWFBPUlQgdm9pZCBRU3VyZmFjZUZvcm1hdF9z ZXRPcHRpb24oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXQ6OkZvcm1hdE9w dGlvbiBvcHRpb24sIGJvb2wgb24gPSB0cnVlKTsKLStDX0VYUE9SVCBib29sIFFTdXJmYWNlRm9y bWF0X3Rlc3RPcHRpb24oUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXQ6OkZv cm1hdE9wdGlvbiBvcHRpb24pOwotK0NfRVhQT1JUIFFTdXJmYWNlRm9ybWF0OjpGb3JtYXRPcHRp b25zIFFTdXJmYWNlRm9ybWF0X29wdGlvbnMoUVN1cmZhY2VGb3JtYXRIIGhhbmRsZSk7Ci0rQ19F WFBPUlQgaW50IFFTdXJmYWNlRm9ybWF0X3N3YXBJbnRlcnZhbChRU3VyZmFjZUZvcm1hdEggaGFu ZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X3NldFN3YXBJbnRlcnZhbChRU3Vy ZmFjZUZvcm1hdEggaGFuZGxlLCBpbnQgaW50ZXJ2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVN1cmZh Y2VGb3JtYXRfc2V0RGVmYXVsdEZvcm1hdChRU3VyZmFjZUZvcm1hdEggZm9ybWF0KTsKLStDX0VY UE9SVCB2b2lkIFFTdXJmYWNlRm9ybWF0X2RlZmF1bHRGb3JtYXQoUVN1cmZhY2VGb3JtYXRIIHJl dHZhbCk7Ci0rCi0rI2VuZGlmCi1JbmRleDogc3JjL3F3aW5kb3dfYy5jcHAKLT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xd2luZG93X2MuY3BwCi1AQCAtMCwwICsxLDU0OCBA QAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAxNyBieSDF vWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5HLlRY VCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKy8v ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaW5jbHVkZSAicXdp bmRvd19jLmgiCi0rCi0rUVdpbmRvd0ggUVdpbmRvd19DcmVhdGUoUVdpbmRvd0ggcGFyZW50KQot K3sKLSsgIHJldHVybiAoUVdpbmRvd0gpIG5ldyBRV2luZG93KChRV2luZG93KilwYXJlbnQpOwot K30KLSsKLStRV2luZG93SCBRV2luZG93X0NyZWF0ZTIoUVNjcmVlbkggc2NyZWVuKQotK3sKLSsg IHJldHVybiAoUVdpbmRvd0gpIG5ldyBRV2luZG93KChRU2NyZWVuKilzY3JlZW4pOwotK30KLSsK LSt2b2lkIFFXaW5kb3dfRGVzdHJveShRV2luZG93SCBoYW5kbGUpCi0rewotKyAgZGVsZXRlIChR V2luZG93ICopaGFuZGxlOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfc2V0U3VyZmFjZVR5cGUoUVdp bmRvd0ggaGFuZGxlLCBRU3VyZmFjZTo6U3VyZmFjZVR5cGUgc3VyZmFjZVR5cGUpCi0rewotKyAg KChRV2luZG93ICopaGFuZGxlKS0+c2V0U3VyZmFjZVR5cGUoKFFTdXJmYWNlOjpTdXJmYWNlVHlw ZSkgc3VyZmFjZVR5cGUpOwotK30KLSsKLStRU3VyZmFjZTo6U3VyZmFjZVR5cGUgUVdpbmRvd19z dXJmYWNlVHlwZShRV2luZG93SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChRU3VyZmFjZTo6U3Vy ZmFjZVR5cGUpICgoUVdpbmRvdyAqKWhhbmRsZSktPnN1cmZhY2VUeXBlKCk7Ci0rfQotKwotK2Jv b2wgUVdpbmRvd19pc1Zpc2libGUoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoYm9v bCkgKChRV2luZG93ICopaGFuZGxlKS0+aXNWaXNpYmxlKCk7Ci0rfQotKwotK1FXaW5kb3c6OlZp c2liaWxpdHkgUVdpbmRvd192aXNpYmlsaXR5KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1 cm4gKFFXaW5kb3c6OlZpc2liaWxpdHkpICgoUVdpbmRvdyAqKWhhbmRsZSktPnZpc2liaWxpdHko KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldFZpc2liaWxpdHkoUVdpbmRvd0ggaGFuZGxlLCBR V2luZG93OjpWaXNpYmlsaXR5IHYpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0Vmlz aWJpbGl0eSgoUVdpbmRvdzo6VmlzaWJpbGl0eSkgdik7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19j cmVhdGVQbGF0Zm9ybVJlc291cmNlcyhRV2luZG93SCBoYW5kbGUpIC8qIHZvaWQgY3JlYXRlKCk7 ICovCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+Y3JlYXRlKCk7Ci0rfQotKwotK3ZvaWQg UVdpbmRvd19kZXN0cm95UGxhdGZvcm1SZXNvdXJjZXMoUVdpbmRvd0ggaGFuZGxlKSAvKiB2b2lk IGRlc3Ryb3koKTsgKi8KLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5kZXN0cm95KCk7Ci0r fQotKwotK3Vuc2lnbmVkIGludCBRV2luZG93X3dpbklkKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0r ICByZXR1cm4gKHVuc2lnbmVkIGludCkgKChRV2luZG93ICopaGFuZGxlKS0+d2luSWQoKTsKLSt9 Ci0rCi0rUVdpbmRvd0ggUVdpbmRvd19wYXJlbnQoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgIHJl dHVybiAoUVdpbmRvd0gpICgoUVdpbmRvdyAqKWhhbmRsZSktPnBhcmVudCgpOwotK30KLSsKLSt2 b2lkIFFXaW5kb3dfc2V0UGFyZW50KFFXaW5kb3dIIGhhbmRsZSwgUVdpbmRvd0ggcGFyZW50KQot K3sKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0UGFyZW50KChRV2luZG93KilwYXJlbnQpOwot K30KLSsKLStib29sIFFXaW5kb3dfaXNUb3BMZXZlbChRV2luZG93SCBoYW5kbGUpCi0rewotKwly ZXR1cm4gKGJvb2wpICgoUVdpbmRvdyAqKWhhbmRsZSktPmlzVG9wTGV2ZWwoKTsKLSt9Ci0rCi0r Ci0rYm9vbCBRV2luZG93X2lzTW9kYWwoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsJcmV0dXJuIChi b29sKSAoKFFXaW5kb3cgKiloYW5kbGUpLT5pc01vZGFsKCk7Ci0rfQotKwotK1F0OjpXaW5kb3dN b2RhbGl0eSBRV2luZG93X21vZGFsaXR5KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAo UXQ6OldpbmRvd01vZGFsaXR5KSAoKFFXaW5kb3cgKiloYW5kbGUpLT5tb2RhbGl0eSgpOwotK30K LSsKLSt2b2lkIFFXaW5kb3dfc2V0TW9kYWxpdHkoUVdpbmRvd0ggaGFuZGxlLCBRdDo6V2luZG93 TW9kYWxpdHkgd2luZG93TW9kYWxpdHkpCi0rewotKwkoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRN b2RhbGl0eSgoUXQ6OldpbmRvd01vZGFsaXR5KXdpbmRvd01vZGFsaXR5KTsKLSt9Ci0rCi0rdm9p ZCBRV2luZG93X3NldEZvcm1hdChRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFTdXJmYWNlRm9ybWF0 SCBmb3JtYXQpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0Rm9ybWF0KCooY29uc3Qg UVN1cmZhY2VGb3JtYXQqKSBmb3JtYXQpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfZm9ybWF0KFFX aW5kb3dIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXRIIHJldHZhbCkKLSt7Ci0rICAqKFFTdXJmYWNl Rm9ybWF0KikgcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+Zm9ybWF0KCk7Ci0rfQotKwot K3ZvaWQgUVdpbmRvd19yZXF1ZXN0ZWRGb3JtYXQoUVdpbmRvd0ggaGFuZGxlLCBRU3VyZmFjZUZv cm1hdEggcmV0dmFsKQotK3sKLSsgICooUVN1cmZhY2VGb3JtYXQqKSByZXR2YWwgPSAoKFFXaW5k b3cgKiloYW5kbGUpLT5yZXF1ZXN0ZWRGb3JtYXQoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3Nl dEZsYWdzKFFXaW5kb3dIIGhhbmRsZSwgdW5zaWduZWQgaW50IGZsYWdzKQotK3sKLSsgICgoUVdp bmRvdyAqKWhhbmRsZSktPnNldEZsYWdzKChRdDo6V2luZG93RmxhZ3MpZmxhZ3MpOwotK30KLSsK LSt1bnNpZ25lZCBpbnQgUVdpbmRvd19mbGFncyhRV2luZG93SCBoYW5kbGUpCi0rewotKyAgcmV0 dXJuICh1bnNpZ25lZCBpbnQpICgoUVdpbmRvdyAqKWhhbmRsZSktPmZsYWdzKCk7Ci0rfQotKwot K1F0OjpXaW5kb3dUeXBlIFFXaW5kb3dfdHlwZShRV2luZG93SCBoYW5kbGUpCi0rewotKyAgcmV0 dXJuIChRdDo6V2luZG93VHlwZSkgKChRV2luZG93ICopaGFuZGxlKS0+dHlwZSgpOwotK30KLSsK LSt2b2lkIFFXaW5kb3dfdGl0bGUoUVdpbmRvd0ggaGFuZGxlLCBQV2lkZVN0cmluZyByZXR2YWwp Ci0rewotKwlRU3RyaW5nIHRfcmV0dmFsOwotKwl0X3JldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRs ZSktPnRpdGxlKCk7Ci0rCWNvcHlRU3RyaW5nVG9QV2lkZVN0cmluZyh0X3JldHZhbCwgcmV0dmFs KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldE9wYWNpdHkoUVdpbmRvd0ggaGFuZGxlLCBxcmVh bCBsZXZlbCkKLSt7Ci0rCSgoUVdpbmRvdyAqKWhhbmRsZSktPnNldE9wYWNpdHkobGV2ZWwpOwot K30KLSsKLStxcmVhbCBRV2luZG93X29wYWNpdHkoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgIHJl dHVybiAocXJlYWwpICgoUVdpbmRvdyAqKWhhbmRsZSktPm9wYWNpdHkoKTsKLSt9Ci0rCi0rdm9p ZCBRV2luZG93X3NldE1hc2soUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRUmVnaW9uSCBBbm9uUGFy YW0xKQotK3sKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0TWFzaygqKGNvbnN0IFFSZWdpb24q KUFub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfbWFzayhRV2luZG93SCBoYW5kbGUs IFFSZWdpb25IIHJldHZhbCkKLSt7Ci0rCSooUVJlZ2lvbiAqKXJldHZhbCA9ICgoUVdpbmRvdyAq KWhhbmRsZSktPm1hc2soKTsKLSt9Ci0rCi0rYm9vbCBRV2luZG93X2lzQWN0aXZlV2luZG93KFFX aW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAoYm9vbCkgKChRV2luZG93ICopaGFuZGxlKS0+ aXNBY3RpdmUoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3JlcG9ydENvbnRlbnRPcmllbnRhdGlv bkNoYW5nZShRV2luZG93SCBoYW5kbGUsIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBvcmllbnRhdGlv bikKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5yZXBvcnRDb250ZW50T3JpZW50YXRpb25D aGFuZ2UoKFF0OjpTY3JlZW5PcmllbnRhdGlvbikgb3JpZW50YXRpb24pOwotK30KLSsKLStRdDo6 U2NyZWVuT3JpZW50YXRpb24gUVdpbmRvd19jb250ZW50T3JpZW50YXRpb24oUVdpbmRvd0ggaGFu ZGxlKQotK3sKLSsgIHJldHVybiAoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSAoKFFXaW5kb3cgKilo YW5kbGUpLT5jb250ZW50T3JpZW50YXRpb24oKTsKLSt9Ci0rCi0rcXJlYWwgUVdpbmRvd19kZXZp Y2VQaXhlbFJhdGlvKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKHFyZWFsKSAoKFFX aW5kb3cgKiloYW5kbGUpLT5kZXZpY2VQaXhlbFJhdGlvKCk7Ci0rfQotKwotK3Vuc2lnbmVkIGlu dCBRV2luZG93X3dpbmRvd1N0YXRlKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAodW5z aWduZWQgaW50KSAoKFFXaW5kb3cgKiloYW5kbGUpLT53aW5kb3dTdGF0ZSgpOwotK30KLSsKLSt2 b2lkIFFXaW5kb3dfc2V0V2luZG93U3RhdGUoUVdpbmRvd0ggaGFuZGxlLCB1bnNpZ25lZCBpbnQg c3RhdGUpCi0rewotKwkoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRXaW5kb3dTdGF0ZSgoUXQ6Oldp bmRvd1N0YXRlKXN0YXRlKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldFRyYW5zaWVudFBhcmVu dChRV2luZG93SCBoYW5kbGUsIFFXaW5kb3dIIHBhcmVudCkKLSt7Ci0rICAoKFFXaW5kb3cgKilo YW5kbGUpLT5zZXRUcmFuc2llbnRQYXJlbnQoKFFXaW5kb3cqKXBhcmVudCk7Ci0rfQotKwotK1FX aW5kb3dIIFFXaW5kb3dfdHJhbnNpZW50UGFyZW50KFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJl dHVybiAoUVdpbmRvd0gpICgoUVdpbmRvdyAqKWhhbmRsZSktPnRyYW5zaWVudFBhcmVudCgpOwot K30KLSsKLStib29sIFFXaW5kb3dfaXNBbmNlc3Rvck9mKFFXaW5kb3dIIGhhbmRsZSwgY29uc3Qg UVdpbmRvd0ggY2hpbGQsIFFXaW5kb3c6OkFuY2VzdG9yTW9kZSBtb2RlKQotK3sKLSsgIHJldHVy biAoYm9vbCkgKChRV2luZG93ICopaGFuZGxlKS0+aXNBbmNlc3Rvck9mKChRV2luZG93ICopY2hp bGQsIChRV2luZG93OjpBbmNlc3Rvck1vZGUpIG1vZGUpOwotK30KLSsKLStib29sIFFXaW5kb3df aXNFeHBvc2VkKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rICByZXR1cm4gKGJvb2wpICgoUVdpbmRv dyAqKWhhbmRsZSktPmlzRXhwb3NlZCgpOwotK30KLSsKLStpbnQgUVdpbmRvd19taW5pbXVtV2lk dGgoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsJcmV0dXJuIChpbnQpICgoUVdpbmRvdyAqKWhhbmRs ZSktPm1pbmltdW1XaWR0aCgpOwotK30KLSsKLStpbnQgUVdpbmRvd19taW5pbXVtSGVpZ2h0KFFX aW5kb3dIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAoaW50KSAoKFFXaW5kb3cgKiloYW5kbGUpLT5t aW5pbXVtSGVpZ2h0KCk7Ci0rfQotKwotK2ludCBRV2luZG93X21heGltdW1XaWR0aChRV2luZG93 SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKGludCkgKChRV2luZG93ICopaGFuZGxlKS0+bWF4aW11 bVdpZHRoKCk7Ci0rfQotKwotK2ludCBRV2luZG93X21heGltdW1IZWlnaHQoUVdpbmRvd0ggaGFu ZGxlKQotK3sKLSsJcmV0dXJuIChpbnQpICgoUVdpbmRvdyAqKWhhbmRsZSktPm1heGltdW1IZWln aHQoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X21pbmltdW1TaXplKFFXaW5kb3dIIGhhbmRsZSwg UFNpemUgcmV0dmFsKQotK3sKLSsJKihRU2l6ZSAqKXJldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRs ZSktPm1pbmltdW1TaXplKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19tYXhpbXVtU2l6ZShRV2lu ZG93SCBoYW5kbGUsIFBTaXplIHJldHZhbCkKLSt7Ci0rCSooUVNpemUgKilyZXR2YWwgPSAoKFFX aW5kb3cgKiloYW5kbGUpLT5tYXhpbXVtU2l6ZSgpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfYmFz ZVNpemUoUVdpbmRvd0ggaGFuZGxlLCBQU2l6ZSByZXR2YWwpCi0rewotKwkqKFFTaXplICopcmV0 dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+YmFzZVNpemUoKTsKLSt9Ci0rCi0rdm9pZCBRV2lu ZG93X3NpemVJbmNyZW1lbnQoUVdpbmRvd0ggaGFuZGxlLCBQU2l6ZSByZXR2YWwpCi0rewotKwkq KFFTaXplICopcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+c2l6ZUluY3JlbWVudCgpOwot K30KLSsKLSt2b2lkIFFXaW5kb3dfc2V0TWluaW11bVNpemUoUVdpbmRvd0ggaGFuZGxlLCBjb25z dCBRU2l6ZUggQW5vblBhcmFtMSkKLSt7Ci0rCSgoUVdpbmRvdyAqKWhhbmRsZSktPnNldE1pbmlt dW1TaXplKCooY29uc3QgUVNpemUqKUFub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFXaW5kb3df c2V0TWF4aW11bVNpemUoUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRU2l6ZUggQW5vblBhcmFtMSkK LSt7Ci0rCSgoUVdpbmRvdyAqKWhhbmRsZSktPnNldE1heGltdW1TaXplKCooY29uc3QgUVNpemUq KUFub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfc2V0QmFzZVNpemUoUVdpbmRvd0gg aGFuZGxlLCBjb25zdCBRU2l6ZUggQW5vblBhcmFtMSkKLSt7Ci0rCSgoUVdpbmRvdyAqKWhhbmRs ZSktPnNldEJhc2VTaXplKCooY29uc3QgUVNpemUqKUFub25QYXJhbTEpOwotK30KLSsKLSt2b2lk IFFXaW5kb3dfc2V0U2l6ZUluY3JlbWVudChRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFTaXplSCBB bm9uUGFyYW0xKQotK3sKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0U2l6ZUluY3JlbWVudCgq KGNvbnN0IFFTaXplKilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldEdlb21l dHJ5KFFXaW5kb3dIIGhhbmRsZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCi0rewotKwko KFFXaW5kb3cgKiloYW5kbGUpLT5zZXRHZW9tZXRyeSh4LCB5LCB3LCBoKTsKLSt9Ci0rCi0rdm9p ZCBRV2luZG93X3NldEdlb21ldHJ5MihRV2luZG93SCBoYW5kbGUsIFBSZWN0IEFub25QYXJhbTEp Ci0rewotKwlRUmVjdCB0X0Fub25QYXJhbTE7Ci0rCWNvcHlQUmVjdFRvUVJlY3QoQW5vblBhcmFt MSwgdF9Bbm9uUGFyYW0xKTsKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0R2VvbWV0cnkodF9B bm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2dlb21ldHJ5KFFXaW5kb3dIIGhhbmRs ZSwgUFJlY3QgcmV0dmFsKQotK3sKLSsJUVJlY3QgdF9yZXR2YWw7Ci0rCXRfcmV0dmFsID0gKChR V2luZG93ICopaGFuZGxlKS0+Z2VvbWV0cnkoKTsKLSsJY29weVFSZWN0VG9QUmVjdCh0X3JldHZh bCwgcmV0dmFsKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2ZyYW1lTWFyZ2lucyhRV2luZG93SCBo YW5kbGUsIFFNYXJnaW5zSCByZXR2YWwpCi0rewotKwkqKFFNYXJnaW5zICopcmV0dmFsID0gKChR V2luZG93ICopaGFuZGxlKS0+ZnJhbWVNYXJnaW5zKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19m cmFtZUdlb21ldHJ5KFFXaW5kb3dIIGhhbmRsZSwgUFJlY3QgcmV0dmFsKQotK3sKLSsJUVJlY3Qg dF9yZXR2YWw7Ci0rCXRfcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+ZnJhbWVHZW9tZXRy eSgpOwotKwljb3B5UVJlY3RUb1BSZWN0KHRfcmV0dmFsLCByZXR2YWwpOwotK30KLSsKLSt2b2lk IFFXaW5kb3dfZnJhbWVQb3NpdGlvbihRV2luZG93SCBoYW5kbGUsIFBRdFBvaW50IHJldHZhbCkK LSt7Ci0rCSooUVBvaW50ICopcmV0dmFsID0gKChRV2luZG93ICopaGFuZGxlKS0+ZnJhbWVQb3Np dGlvbigpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfc2V0RnJhbWVQb3NpdGlvbihRV2luZG93SCBo YW5kbGUsIGNvbnN0IFFQb2ludEggQW5vblBhcmFtMSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5k bGUpLT5zZXRGcmFtZVBvc2l0aW9uKCooY29uc3QgUVBvaW50KilBbm9uUGFyYW0xKTsKLSt9Ci0r Ci0raW50IFFXaW5kb3dfd2lkdGgoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsJcmV0dXJuIChpbnQp ICgoUVdpbmRvdyAqKWhhbmRsZSktPndpZHRoKCk7Ci0rfQotKwotK2ludCBRV2luZG93X2hlaWdo dChRV2luZG93SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKGludCkgKChRV2luZG93ICopaGFuZGxl KS0+aGVpZ2h0KCk7Ci0rfQotKwotK2ludCBRV2luZG93X3goUVdpbmRvd0ggaGFuZGxlKQotK3sK LSsJcmV0dXJuIChpbnQpICgoUVdpbmRvdyAqKWhhbmRsZSktPngoKTsKLSt9Ci0rCi0raW50IFFX aW5kb3dfeShRV2luZG93SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKGludCkgKChRV2luZG93ICop aGFuZGxlKS0+eSgpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfc2l6ZShRV2luZG93SCBoYW5kbGUs IFBTaXplIHJldHZhbCkKLSt7Ci0rCSooUVNpemUgKilyZXR2YWwgPSAoKFFXaW5kb3cgKiloYW5k bGUpLT5zaXplKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19wb3NpdGlvbihRV2luZG93SCBoYW5k bGUsIFBRdFBvaW50IHJldHZhbCkKLSt7Ci0rCSooUVBvaW50ICopcmV0dmFsID0gKChRV2luZG93 ICopaGFuZGxlKS0+cG9zaXRpb24oKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldFBvc2l0aW9u KFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUVBvaW50SCBBbm9uUGFyYW0xKQotK3sKLSsgICgoUVdp bmRvdyAqKWhhbmRsZSktPnNldFBvc2l0aW9uKCooY29uc3QgUVBvaW50KilBbm9uUGFyYW0xKTsK LSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldFBvc2l0aW9uMihRV2luZG93SCBoYW5kbGUsIGludCBw b3N4LCBpbnQgcG9zeSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRQb3NpdGlvbihw b3N4LCBwb3N5KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3Jlc2l6ZShRV2luZG93SCBoYW5kbGUs IGNvbnN0IFFTaXplSCBBbm9uUGFyYW0xKQotK3sKLSsJKChRV2luZG93ICopaGFuZGxlKS0+cmVz aXplKCooY29uc3QgUVNpemUqKUFub25QYXJhbTEpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfcmVz aXplMihRV2luZG93SCBoYW5kbGUsIGludCB3LCBpbnQgaCkKLSt7Ci0rCSgoUVdpbmRvdyAqKWhh bmRsZSktPnJlc2l6ZSh3LCBoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldEZpbGVQYXRoKFFX aW5kb3dIIGhhbmRsZSwgUFdpZGVTdHJpbmcgQW5vblBhcmFtMSkKLSt7Ci0rCVFTdHJpbmcgdF9B bm9uUGFyYW0xOwotKwljb3B5UFdpZGVTdHJpbmdUb1FTdHJpbmcoQW5vblBhcmFtMSwgdF9Bbm9u UGFyYW0xKTsKLSsJKChRV2luZG93ICopaGFuZGxlKS0+c2V0RmlsZVBhdGgodF9Bbm9uUGFyYW0x KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2ZpbGVQYXRoKFFXaW5kb3dIIGhhbmRsZSwgUFdpZGVT dHJpbmcgcmV0dmFsKQotK3sKLSsJUVN0cmluZyB0X3JldHZhbDsKLSsJdF9yZXR2YWwgPSAoKFFX aW5kb3cgKiloYW5kbGUpLT5maWxlUGF0aCgpOwotKwljb3B5UVN0cmluZ1RvUFdpZGVTdHJpbmco dF9yZXR2YWwsIHJldHZhbCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRJY29uKFFXaW5kb3dI IGhhbmRsZSwgY29uc3QgUUljb25IIGljb24pCi0rewotKwkoKFFXaW5kb3cgKiloYW5kbGUpLT5z ZXRJY29uKCooY29uc3QgUUljb24qKWljb24pOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaWNvbihR V2luZG93SCBoYW5kbGUsIFFJY29uSCByZXR2YWwpCi0rewotKwkqKFFJY29uICopcmV0dmFsID0g KChRV2luZG93ICopaGFuZGxlKS0+aWNvbigpOwotK30KLSsKLStRU2NyZWVuSCBRV2luZG93X3Nj cmVlbihRV2luZG93SCBoYW5kbGUpCi0rewotKyAgcmV0dXJuIChRU2NyZWVuSCkgKChRV2luZG93 ICopaGFuZGxlKS0+c2NyZWVuKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRTY3JlZW4oUVdp bmRvd0ggaGFuZGxlLCBRU2NyZWVuSCBzY3JlZW4pCi0rewotKyAgKChRV2luZG93ICopaGFuZGxl KS0+c2V0U2NyZWVuKChRU2NyZWVuICopIHNjcmVlbik7Ci0rfQotKwotK2Jvb2wgUVdpbmRvd19z ZXRLZXlib2FyZEdyYWJFbmFibGVkKFFXaW5kb3dIIGhhbmRsZSwgYm9vbCBncmFiKQotK3sKLSsg IHJldHVybiAoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRLZXlib2FyZEdyYWJFbmFibGVkKGdyYWIp OwotK30KLSsKLStib29sIFFXaW5kb3dfc2V0TW91c2VHcmFiRW5hYmxlZChRV2luZG93SCBoYW5k bGUsIGJvb2wgZ3JhYikKLSt7Ci0rICByZXR1cm4gKChRV2luZG93ICopaGFuZGxlKS0+c2V0TW91 c2VHcmFiRW5hYmxlZChncmFiKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X21hcFRvR2xvYmFsKFFX aW5kb3dIIGhhbmRsZSwgUFF0UG9pbnQgcmV0dmFsLCBjb25zdCBRUG9pbnRIIEFub25QYXJhbTEp Ci0rewotKwkqKFFQb2ludCAqKXJldHZhbCA9ICgoUVdpbmRvdyAqKWhhbmRsZSktPm1hcFRvR2xv YmFsKCooY29uc3QgUVBvaW50KilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X21h cEZyb21HbG9iYWwoUVdpbmRvd0ggaGFuZGxlLCBQUXRQb2ludCByZXR2YWwsIGNvbnN0IFFQb2lu dEggQW5vblBhcmFtMSkKLSt7Ci0rCSooUVBvaW50ICopcmV0dmFsID0gKChRV2luZG93ICopaGFu ZGxlKS0+bWFwRnJvbUdsb2JhbCgqKGNvbnN0IFFQb2ludCopQW5vblBhcmFtMSk7Ci0rfQotKwot K3ZvaWQgUVdpbmRvd19jdXJzb3IoUVdpbmRvd0ggaGFuZGxlLCBRQ3Vyc29ySCByZXR2YWwpCi0r ewotKwkqKFFDdXJzb3IgKilyZXR2YWwgPSAoKFFXaW5kb3cgKiloYW5kbGUpLT5jdXJzb3IoKTsK LSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldEN1cnNvcihRV2luZG93SCBoYW5kbGUsIGNvbnN0IFFD dXJzb3JIIEFub25QYXJhbTEpCi0rewotKwkoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRDdXJzb3Io Kihjb25zdCBRQ3Vyc29yKilBbm9uUGFyYW0xKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3Vuc2V0 Q3Vyc29yKFFXaW5kb3dIIGhhbmRsZSkKLSt7Ci0rCSgoUVdpbmRvdyAqKWhhbmRsZSktPnVuc2V0 Q3Vyc29yKCk7Ci0rfQotKwotK1FPYmplY3RIIFFXaW5kb3dfZm9jdXNPYmplY3QoUVdpbmRvd0gg aGFuZGxlKQotK3sKLSsgIHJldHVybiAoUU9iamVjdEgpICgoUVdpbmRvdyAqKWhhbmRsZSktPmZv Y3VzT2JqZWN0KCk7Ci0rfQotKwotK1FXaW5kb3dIIFFXaW5kb3dfZnJvbVdpbklEKHVuc2lnbmVk IGludCBpZCkKLSt7Ci0rICByZXR1cm4gKFFXaW5kb3dIKSBRV2luZG93Ojpmcm9tV2luSWQoKFdJ ZCkgaWQpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfcmVxdWVzdEFjdGl2YXRlKFFXaW5kb3dIIGhh bmRsZSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5yZXF1ZXN0QWN0aXZhdGUoKTsKLSt9 Ci0rCi0rdm9pZCBRV2luZG93X3NldFZpc2libGUoUVdpbmRvd0ggaGFuZGxlLCBib29sIHZpc2li bGUpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKLSt9 Ci0rCi0rdm9pZCBRV2luZG93X3Nob3coUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgICgoUVdpbmRv dyAqKWhhbmRsZSktPnNob3coKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hpZGUoUVdpbmRvd0gg aGFuZGxlKQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPmhpZGUoKTsKLSt9Ci0rCi0rdm9p ZCBRV2luZG93X3Nob3dNaW5pbWl6ZWQoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgICgoUVdpbmRv dyAqKWhhbmRsZSktPnNob3dNaW5pbWl6ZWQoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3Nob3dN YXhpbWl6ZWQoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNo b3dNYXhpbWl6ZWQoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3Nob3dGdWxsU2NyZWVuKFFXaW5k b3dIIGhhbmRsZSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zaG93RnVsbFNjcmVlbigp OwotK30KLSsKLSt2b2lkIFFXaW5kb3dfc2hvd05vcm1hbChRV2luZG93SCBoYW5kbGUpCi0rewot KyAgKChRV2luZG93ICopaGFuZGxlKS0+c2hvd05vcm1hbCgpOwotK30KLSsKLStib29sIFFXaW5k b3dfY2xvc2UoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgIHJldHVybiAoYm9vbCkgKChRV2luZG93 ICopaGFuZGxlKS0+Y2xvc2UoKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3JhaXNlKFFXaW5kb3dI IGhhbmRsZSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5yYWlzZSgpOwotK30KLSsKLSt2 b2lkIFFXaW5kb3dfbG93ZXIoUVdpbmRvd0ggaGFuZGxlKQotK3sKLSsgICgoUVdpbmRvdyAqKWhh bmRsZSktPmxvd2VyKCk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19zZXRXaW5kb3dUaXRsZShRV2lu ZG93SCBoYW5kbGUsIFBXaWRlU3RyaW5nIEFub25QYXJhbTEpCi0rewotKwlRU3RyaW5nIHRfQW5v blBhcmFtMTsKLSsJY29weVBXaWRlU3RyaW5nVG9RU3RyaW5nKEFub25QYXJhbTEsIHRfQW5vblBh cmFtMSk7Ci0rCSgoUVdpbmRvdyAqKWhhbmRsZSktPnNldFRpdGxlKHRfQW5vblBhcmFtMSk7Ci0r fQotKwotK3ZvaWQgUVdpbmRvd19zZXRYKFFXaW5kb3dIIGhhbmRsZSwgaW50IGFyZ3gpCi0rewot KyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0WChhcmd4KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93 X3NldFkoUVdpbmRvd0ggaGFuZGxlLCBpbnQgYXJneSkKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5k bGUpLT5zZXRZKGFyZ3kpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfc2V0V2lkdGgoUVdpbmRvd0gg aGFuZGxlLCBpbnQgYXJndykKLSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRXaWR0aChh cmd3KTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X3NldEhlaWdodChRV2luZG93SCBoYW5kbGUsIGlu dCBhcmdoKQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNldEhlaWdodChhcmdoKTsKLSt9 Ci0rCi0rdm9pZCBRV2luZG93X3NldE1pbmltdW1XaWR0aChRV2luZG93SCBoYW5kbGUsIGludCB3 KQotK3sKLSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNldE1pbmltdW1XaWR0aCh3KTsKLSt9Ci0r Ci0rdm9pZCBRV2luZG93X3NldE1pbmltdW1IZWlnaHQoUVdpbmRvd0ggaGFuZGxlLCBpbnQgaCkK LSt7Ci0rICAoKFFXaW5kb3cgKiloYW5kbGUpLT5zZXRNaW5pbXVtSGVpZ2h0KGgpOwotK30KLSsK LSt2b2lkIFFXaW5kb3dfc2V0TWF4aW11bVdpZHRoKFFXaW5kb3dIIGhhbmRsZSwgaW50IHcpCi0r ewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+c2V0TWF4aW11bVdpZHRoKHcpOwotK30KLSsKLSt2 b2lkIFFXaW5kb3dfc2V0TWF4aW11bUhlaWdodChRV2luZG93SCBoYW5kbGUsIGludCBoKQotK3sK LSsgICgoUVdpbmRvdyAqKWhhbmRsZSktPnNldE1heGltdW1IZWlnaHQoaCk7Ci0rfQotKwotK3Zv aWQgUVdpbmRvd19hbGVydChRV2luZG93SCBoYW5kbGUsIGludCBtc2VjKQotK3sKLSsgICgoUVdp bmRvdyAqKWhhbmRsZSktPmFsZXJ0KG1zZWMpOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfcmVxdWVz dFVwZGF0ZShRV2luZG93SCBoYW5kbGUpCi0rewotKyAgKChRV2luZG93ICopaGFuZGxlKS0+cmVx dWVzdFVwZGF0ZSgpOwotK30KLSsKLUluZGV4OiBzcmMvcXdpbmRvd19jLmgKLT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xd2luZG93X2MuaAotQEAgLTAsMCArMSwxMjMgQEAK LSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgotKy8vICBDb3B5cmlnaHQgKGMpIDIwMDcgYnkgxb1l bGphbiBSaWthbG8KLSsvLwotKy8vICBTZWUgdGhlIGluY2x1ZGVkIGZpbGUgQ09QWUlORy5UWFQg Zm9yIGRldGFpbHMgYWJvdXQgdGhlIGNvcHlyaWdodC4KLSsvLwotKy8vICBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsvLyAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSsvLyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLgotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rCi0rCi0rI2lmbmRlZiBRV0lORE9X X0NfSAotKyNkZWZpbmUgUVdJTkRPV19DX0gKLSsKLSsjaW5jbHVkZSA8UXRHdWk+Ci0rI2luY2x1 ZGUgInBhc2NhbGJpbmQuaCIKLSsKLStDX0VYUE9SVCBRV2luZG93SCBRV2luZG93X0NyZWF0ZShR V2luZG93SCBwYXJlbnQpOwotK0NfRVhQT1JUIFFXaW5kb3dIIFFXaW5kb3dfQ3JlYXRlMihRU2Ny ZWVuSCBzY3JlZW4gPSBRX05VTExQVFIpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19EZXN0cm95 KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldFN1cmZhY2VUeXBl KFFXaW5kb3dIIGhhbmRsZSwgUVN1cmZhY2U6OlN1cmZhY2VUeXBlIHN1cmZhY2VUeXBlKTsKLStD X0VYUE9SVCBRU3VyZmFjZTo6U3VyZmFjZVR5cGUgUVdpbmRvd19zdXJmYWNlVHlwZShRV2luZG93 SCBoYW5kbGUpOwotK0NfRVhQT1JUIGJvb2wgUVdpbmRvd19pc1Zpc2libGUoUVdpbmRvd0ggaGFu ZGxlKTsKLStDX0VYUE9SVCBRV2luZG93OjpWaXNpYmlsaXR5IFFXaW5kb3dfdmlzaWJpbGl0eShR V2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRWaXNpYmlsaXR5KFFX aW5kb3dIIGhhbmRsZSwgUVdpbmRvdzo6VmlzaWJpbGl0eSB2KTsKLStDX0VYUE9SVCB2b2lkIFFX aW5kb3dfY3JlYXRlUGxhdGZvcm1SZXNvdXJjZXMoUVdpbmRvd0ggaGFuZGxlKTsgLyogdm9pZCBj cmVhdGUoKTsgKi8KLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfZGVzdHJveVBsYXRmb3JtUmVzb3Vy Y2VzKFFXaW5kb3dIIGhhbmRsZSk7IC8qIHZvaWQgZGVzdHJveSgpOyAqLwotK0NfRVhQT1JUIHVu c2lnbmVkIGludCBRV2luZG93X3dpbklkKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUVdp bmRvd0ggUVdpbmRvd19wYXJlbnQoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFX aW5kb3dfc2V0UGFyZW50KFFXaW5kb3dIIGhhbmRsZSwgUVdpbmRvd0ggcGFyZW50KTsKLStDX0VY UE9SVCBib29sIFFXaW5kb3dfaXNUb3BMZXZlbChRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JU IGJvb2wgUVdpbmRvd19pc01vZGFsKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUXQ6Oldp bmRvd01vZGFsaXR5IFFXaW5kb3dfbW9kYWxpdHkoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9S VCB2b2lkIFFXaW5kb3dfc2V0TW9kYWxpdHkoUVdpbmRvd0ggaGFuZGxlLCBRdDo6V2luZG93TW9k YWxpdHkgd2luZG93TW9kYWxpdHkpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRGb3JtYXQo UVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRU3VyZmFjZUZvcm1hdEggZm9ybWF0KTsKLStDX0VYUE9S VCB2b2lkIFFXaW5kb3dfZm9ybWF0KFFXaW5kb3dIIGhhbmRsZSwgUVN1cmZhY2VGb3JtYXRIIHJl dHZhbCk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3JlcXVlc3RlZEZvcm1hdChRV2luZG93SCBo YW5kbGUsIFFTdXJmYWNlRm9ybWF0SCByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19z ZXRGbGFncyhRV2luZG93SCBoYW5kbGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0rQ19FWFBPUlQg dW5zaWduZWQgaW50IFFXaW5kb3dfZmxhZ3MoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCBR dDo6V2luZG93VHlwZSBRV2luZG93X3R5cGUoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2 b2lkIFFXaW5kb3dfdGl0bGUoUVdpbmRvd0ggaGFuZGxlLCBQV2lkZVN0cmluZyByZXR2YWwpOwot K0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRPcGFjaXR5KFFXaW5kb3dIIGhhbmRsZSwgcXJlYWwg bGV2ZWwpOwotK0NfRVhQT1JUIHFyZWFsIFFXaW5kb3dfb3BhY2l0eShRV2luZG93SCBoYW5kbGUp OwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRNYXNrKFFXaW5kb3dIIGhhbmRsZSwgY29uc3Qg UVJlZ2lvbkggQW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X21hc2soUVdpbmRv d0ggaGFuZGxlLCBRUmVnaW9uSCByZXR2YWwpOwotK0NfRVhQT1JUIGJvb2wgUVdpbmRvd19pc0Fj dGl2ZShRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19yZXBvcnRDb250 ZW50T3JpZW50YXRpb25DaGFuZ2UoUVdpbmRvd0ggaGFuZGxlLCBRdDo6U2NyZWVuT3JpZW50YXRp b24gb3JpZW50YXRpb24pOwotK0NfRVhQT1JUIFF0OjpTY3JlZW5PcmllbnRhdGlvbiBRV2luZG93 X2NvbnRlbnRPcmllbnRhdGlvbihRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHFyZWFsIFFX aW5kb3dfZGV2aWNlUGl4ZWxSYXRpbyhRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHVuc2ln bmVkIGludCBRV2luZG93X3dpbmRvd1N0YXRlKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQg dm9pZCBRV2luZG93X3NldFdpbmRvd1N0YXRlKFFXaW5kb3dIIGhhbmRsZSwgdW5zaWduZWQgaW50 IHN0YXRlKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0VHJhbnNpZW50UGFyZW50KFFXaW5k b3dIIGhhbmRsZSwgUVdpbmRvd0ggcGFyZW50KTsKLStDX0VYUE9SVCBRV2luZG93SCBRV2luZG93 X3RyYW5zaWVudFBhcmVudChRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIGJvb2wgUVdpbmRv d19pc0FuY2VzdG9yT2YoUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRV2luZG93SCBjaGlsZCwgUVdp bmRvdzo6QW5jZXN0b3JNb2RlIG1vZGUgPSBRV2luZG93OjpBbmNlc3Rvck1vZGU6OkluY2x1ZGVU cmFuc2llbnRzKTsKLStDX0VYUE9SVCBib29sIFFXaW5kb3dfaXNFeHBvc2VkKFFXaW5kb3dIIGhh bmRsZSk7Ci0rQ19FWFBPUlQgaW50IFFXaW5kb3dfbWluaW11bVdpZHRoKFFXaW5kb3dIIGhhbmRs ZSk7Ci0rQ19FWFBPUlQgaW50IFFXaW5kb3dfbWluaW11bUhlaWdodChRV2luZG93SCBoYW5kbGUp OwotK0NfRVhQT1JUIGludCBRV2luZG93X21heGltdW1XaWR0aChRV2luZG93SCBoYW5kbGUpOwot K0NfRVhQT1JUIGludCBRV2luZG93X21heGltdW1IZWlnaHQoUVdpbmRvd0ggaGFuZGxlKTsKLStD X0VYUE9SVCB2b2lkIFFXaW5kb3dfbWluaW11bVNpemUoUVdpbmRvd0ggaGFuZGxlLCBQU2l6ZSBy ZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19tYXhpbXVtU2l6ZShRV2luZG93SCBoYW5k bGUsIFBTaXplIHJldHZhbCk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2Jhc2VTaXplKFFXaW5k b3dIIGhhbmRsZSwgUFNpemUgcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2l6ZUlu Y3JlbWVudChRV2luZG93SCBoYW5kbGUsIFBTaXplIHJldHZhbCk7Ci0rQ19FWFBPUlQgdm9pZCBR V2luZG93X3NldE1pbmltdW1TaXplKFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUVNpemVIIEFub25Q YXJhbTEpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRNYXhpbXVtU2l6ZShRV2luZG93SCBo YW5kbGUsIGNvbnN0IFFTaXplSCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3df c2V0QmFzZVNpemUoUVdpbmRvd0ggaGFuZGxlLCBjb25zdCBRU2l6ZUggQW5vblBhcmFtMSk7Ci0r Q19FWFBPUlQgdm9pZCBRV2luZG93X3NldFNpemVJbmNyZW1lbnQoUVdpbmRvd0ggaGFuZGxlLCBj b25zdCBRU2l6ZUggQW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldEdlb21l dHJ5KFFXaW5kb3dIIGhhbmRsZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwotK0NfRVhQ T1JUIHZvaWQgUVdpbmRvd19zZXRHZW9tZXRyeTIoUVdpbmRvd0ggaGFuZGxlLCBQUmVjdCBBbm9u UGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfZ2VvbWV0cnkoUVdpbmRvd0ggaGFuZGxl LCBQUmVjdCByZXR2YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19mcmFtZU1hcmdpbnMoUVdp bmRvd0ggaGFuZGxlLCBRTWFyZ2luc0ggcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3df ZnJhbWVHZW9tZXRyeShRV2luZG93SCBoYW5kbGUsIFBSZWN0IHJldHZhbCk7Ci0rQ19FWFBPUlQg dm9pZCBRV2luZG93X2ZyYW1lUG9zaXRpb24oUVdpbmRvd0ggaGFuZGxlLCBQUXRQb2ludCByZXR2 YWwpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRGcmFtZVBvc2l0aW9uKFFXaW5kb3dIIGhh bmRsZSwgY29uc3QgUVBvaW50SCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCBpbnQgUVdpbmRvd193 aWR0aChRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIGludCBRV2luZG93X2hlaWdodChRV2lu ZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIGludCBRV2luZG93X3goUVdpbmRvd0ggaGFuZGxlKTsK LStDX0VYUE9SVCBpbnQgUVdpbmRvd195KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9p ZCBRV2luZG93X3NpemUoUVdpbmRvd0ggaGFuZGxlLCBQU2l6ZSByZXR2YWwpOwotK0NfRVhQT1JU IHZvaWQgUVdpbmRvd19wb3NpdGlvbihRV2luZG93SCBoYW5kbGUsIFBRdFBvaW50IHJldHZhbCk7 Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldFBvc2l0aW9uKFFXaW5kb3dIIGhhbmRsZSwgY29u c3QgUVBvaW50SCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0UG9zaXRp b24yKFFXaW5kb3dIIGhhbmRsZSwgaW50IHBvc3gsIGludCBwb3N5KTsKLStDX0VYUE9SVCB2b2lk IFFXaW5kb3dfcmVzaXplKFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUVNpemVIIEFub25QYXJhbTEp OwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19yZXNpemUyKFFXaW5kb3dIIGhhbmRsZSwgaW50IHcs IGludCBoKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0RmlsZVBhdGgoUVdpbmRvd0ggaGFu ZGxlLCBQV2lkZVN0cmluZyBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfZmls ZVBhdGgoUVdpbmRvd0ggaGFuZGxlLCBQV2lkZVN0cmluZyByZXR2YWwpOwotK0NfRVhQT1JUIHZv aWQgUVdpbmRvd19zZXRJY29uKFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUUljb25IIGljb24pOwot K0NfRVhQT1JUIHZvaWQgUVdpbmRvd19pY29uKFFXaW5kb3dIIGhhbmRsZSwgUUljb25IIHJldHZh bCk7Ci0rQ19FWFBPUlQgUVNjcmVlbkggUVdpbmRvd19zY3JlZW4oUVdpbmRvd0ggaGFuZGxlKTsK LStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0U2NyZWVuKFFXaW5kb3dIIGhhbmRsZSwgUVNjcmVl bkggc2NyZWVuKTsKLStDX0VYUE9SVCBib29sIFFXaW5kb3dfc2V0S2V5Ym9hcmRHcmFiRW5hYmxl ZChRV2luZG93SCBoYW5kbGUsIGJvb2wgZ3JhYik7Ci0rQ19FWFBPUlQgYm9vbCBRV2luZG93X3Nl dE1vdXNlR3JhYkVuYWJsZWQoUVdpbmRvd0ggaGFuZGxlLCBib29sIGdyYWIpOwotK0NfRVhQT1JU IHZvaWQgUVdpbmRvd19tYXBUb0dsb2JhbChRV2luZG93SCBoYW5kbGUsIFBRdFBvaW50IHJldHZh bCwgY29uc3QgUVBvaW50SCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfbWFw RnJvbUdsb2JhbChRV2luZG93SCBoYW5kbGUsIFBRdFBvaW50IHJldHZhbCwgY29uc3QgUVBvaW50 SCBBbm9uUGFyYW0xKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfY3Vyc29yKFFXaW5kb3dIIGhh bmRsZSwgUUN1cnNvckggcmV0dmFsKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfc2V0Q3Vyc29y KFFXaW5kb3dIIGhhbmRsZSwgY29uc3QgUUN1cnNvckggQW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQg dm9pZCBRV2luZG93X3Vuc2V0Q3Vyc29yKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgUU9i amVjdEggUVdpbmRvd19mb2N1c09iamVjdChRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIFFX aW5kb3dIIFFXaW5kb3dfZnJvbVdpbklEKHVuc2lnbmVkIGludCBpZCk7Ci0rQ19FWFBPUlQgdm9p ZCBRV2luZG93X3JlcXVlc3RBY3RpdmF0ZShRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZv aWQgUVdpbmRvd19zZXRWaXNpYmxlKFFXaW5kb3dIIGhhbmRsZSwgYm9vbCB2aXNpYmxlKTsKLStD X0VYUE9SVCB2b2lkIFFXaW5kb3dfc2hvdyhRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZv aWQgUVdpbmRvd19oaWRlKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93 X3Nob3dNaW5pbWl6ZWQoUVdpbmRvd0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3df c2hvd01heGltaXplZChRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19z aG93RnVsbFNjcmVlbihRV2luZG93SCBoYW5kbGUpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19z aG93Tm9ybWFsKFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgYm9vbCBRV2luZG93X2Nsb3Nl KFFXaW5kb3dIIGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3JhaXNlKFFXaW5kb3dI IGhhbmRsZSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2xvd2VyKFFXaW5kb3dIIGhhbmRsZSk7 Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldFRpdGxlKFFXaW5kb3dIIGhhbmRsZSwgUFdpZGVT dHJpbmcgQW5vblBhcmFtMSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldFgoUVdpbmRvd0gg aGFuZGxlLCBpbnQgYXJneCk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldFkoUVdpbmRvd0gg aGFuZGxlLCBpbnQgYXJneSk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldFdpZHRoKFFXaW5k b3dIIGhhbmRsZSwgaW50IGFyZ3cpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19zZXRIZWlnaHQo UVdpbmRvd0ggaGFuZGxlLCBpbnQgYXJnaCk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X3NldE1p bmltdW1XaWR0aChRV2luZG93SCBoYW5kbGUsIGludCB3KTsKLStDX0VYUE9SVCB2b2lkIFFXaW5k b3dfc2V0TWluaW11bUhlaWdodChRV2luZG93SCBoYW5kbGUsIGludCBoKTsKLStDX0VYUE9SVCB2 b2lkIFFXaW5kb3dfc2V0TWF4aW11bVdpZHRoKFFXaW5kb3dIIGhhbmRsZSwgaW50IHcpOwotK0Nf RVhQT1JUIHZvaWQgUVdpbmRvd19zZXRNYXhpbXVtSGVpZ2h0KFFXaW5kb3dIIGhhbmRsZSwgaW50 IGgpOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19hbGVydChRV2luZG93SCBoYW5kbGUsIGludCBt c2VjKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfcmVxdWVzdFVwZGF0ZShRV2luZG93SCBoYW5k bGUpOwotKwotKyNlbmRpZgotSW5kZXg6IHNyYy9xd2luZG93X2hvb2tfYy5jcHAKLT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xd2luZG93X2hvb2tfYy5jcHAKLUBAIC0wLDAg KzEsMTEyIEBACi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsvLyAgQ29weXJpZ2h0IChjKSAy MDE3IGJ5IMW9ZWxqYW4gUmlrYWxvCi0rLy8KLSsvLyAgU2VlIHRoZSBpbmNsdWRlZCBmaWxlIENP UFlJTkcuVFhUIGZvciBkZXRhaWxzIGFib3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8KLSsvLyAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0rLy8gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCi0rLy8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4KLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKwotKwotKyNpbmNs dWRlICJxd2luZG93X2hvb2tfYy5oIgotKwotK1FXaW5kb3dfaG9va0ggUVdpbmRvd19ob29rX0Ny ZWF0ZShRT2JqZWN0SCBoYW5kbGUpCi0rewotKwlyZXR1cm4gKFFXaW5kb3dfaG9va0gpIG5ldyBR V2luZG93X2hvb2soKFFPYmplY3QqKWhhbmRsZSk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19ob29r X0Rlc3Ryb3koUVdpbmRvd19ob29rSCBoYW5kbGUpCi0rewotKwlkZWxldGUgKFFXaW5kb3dfaG9v ayAqKWhhbmRsZTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va19zY3JlZW5DaGFuZ2Vk KFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rCSgoUVdpbmRvd19ob29r ICopaGFuZGxlKS0+aG9va19zY3JlZW5DaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFXaW5k b3dfaG9va19ob29rX21vZGFsaXR5Q2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tI IGhvb2spCi0rewotKyAgKChRV2luZG93X2hvb2sgKiloYW5kbGUpLT5ob29rX21vZGFsaXR5Q2hh bmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va193aW5kb3dTdGF0ZUNo YW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVdpbmRv d19ob29rICopaGFuZGxlKS0+aG9va193aW5kb3dTdGF0ZUNoYW5nZWQoaG9vayk7Ci0rfQotKwot K3ZvaWQgUVdpbmRvd19ob29rX2hvb2tfd2luZG93VGl0bGVDaGFuZ2VkKFFXaW5kb3dfaG9va0gg aGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhv b2tfd2luZG93VGl0bGVDaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2b2lkIFFXaW5kb3dfaG9va19o b29rX3hDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAo KFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfeENoYW5nZWQoaG9vayk7Ci0rfQotKwotK3Zv aWQgUVdpbmRvd19ob29rX2hvb2tfeUNoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29r SCBob29rKQotK3sKLSsgICgoUVdpbmRvd19ob29rICopaGFuZGxlKS0+aG9va195Q2hhbmdlZCho b29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va193aWR0aENoYW5nZWQoUVdpbmRv d19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVdpbmRvd19ob29rICopaGFu ZGxlKS0+aG9va193aWR0aENoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19ob29r X2hvb2tfaGVpZ2h0Q2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0r ewotKyAgKChRV2luZG93X2hvb2sgKiloYW5kbGUpLT5ob29rX2hlaWdodENoYW5nZWQoaG9vayk7 Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19ob29rX2hvb2tfbWluaW11bVdpZHRoQ2hhbmdlZChRV2lu ZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRV2luZG93X2hvb2sgKilo YW5kbGUpLT5ob29rX21pbmltdW1XaWR0aENoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVdp bmRvd19ob29rX2hvb2tfbWluaW11bUhlaWdodENoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUs IFFIb29rSCBob29rKQotK3sKLSsgICgoUVdpbmRvd19ob29rICopaGFuZGxlKS0+aG9va19taW5p bXVtSGVpZ2h0Q2hhbmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va19t YXhpbXVtV2lkdGhDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vaykKLSt7 Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfbWF4aW11bVdpZHRoQ2hhbmdlZCho b29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va19tYXhpbXVtSGVpZ2h0Q2hhbmdl ZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spCi0rewotKyAgKChRV2luZG93X2hv b2sgKiloYW5kbGUpLT5ob29rX21heGltdW1IZWlnaHRDaGFuZ2VkKGhvb2spOwotK30KLSsKLSt2 b2lkIFFXaW5kb3dfaG9va19ob29rX3Zpc2libGVDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxl LCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfdmlz aWJsZUNoYW5nZWQoaG9vayk7Ci0rfQotKwotK3ZvaWQgUVdpbmRvd19ob29rX2hvb2tfdmlzaWJp bGl0eUNoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgo UVdpbmRvd19ob29rICopaGFuZGxlKS0+aG9va192aXNpYmlsaXR5Q2hhbmdlZChob29rKTsKLSt9 Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va19hY3RpdmVDaGFuZ2VkKFFXaW5kb3dfaG9va0gg aGFuZGxlLCBRSG9va0ggaG9vaykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhv b2tfYWN0aXZlQ2hhbmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va19j b250ZW50T3JpZW50YXRpb25DaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9v aykKLSt7Ci0rICAoKFFXaW5kb3dfaG9vayAqKWhhbmRsZSktPmhvb2tfY29udGVudE9yaWVudGF0 aW9uQ2hhbmdlZChob29rKTsKLSt9Ci0rCi0rdm9pZCBRV2luZG93X2hvb2tfaG9va19mb2N1c09i amVjdENoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgo UVdpbmRvd19ob29rICopaGFuZGxlKS0+aG9va19mb2N1c09iamVjdENoYW5nZWQoaG9vayk7Ci0r fQotKwotK3ZvaWQgUVdpbmRvd19ob29rX2hvb2tfb3BhY2l0eUNoYW5nZWQoUVdpbmRvd19ob29r SCBoYW5kbGUsIFFIb29rSCBob29rKQotK3sKLSsgICgoUVdpbmRvd19ob29rICopaGFuZGxlKS0+ aG9va19vcGFjaXR5Q2hhbmdlZChob29rKTsKLSt9Ci1JbmRleDogc3JjL3F3aW5kb3dfaG9va19j LmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tLSAvZGV2L251bGwKLSsrKyBiL3NyYy9xd2luZG93X2hvb2tfYy5o Ci1AQCAtMCwwICsxLDM4IEBACi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsvLyAgQ29weXJp Z2h0IChjKSAyMDE3IGJ5IMW9ZWxqYW4gUmlrYWxvCi0rLy8KLSsvLyAgU2VlIHRoZSBpbmNsdWRl ZCBmaWxlIENPUFlJTkcuVFhUIGZvciBkZXRhaWxzIGFib3V0IHRoZSBjb3B5cmlnaHQuCi0rLy8K LSsvLyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0rLy8gIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rLy8gIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSsvLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKwot KwotKyNpZm5kZWYgUVdJTkRPV19IT09LX0NfSAotKyNkZWZpbmUgUVdJTkRPV19IT09LX0NfSAot KwotKyNpbmNsdWRlICJxd2luZG93X2hvb2suaCIKLSsKLStDX0VYUE9SVCBRV2luZG93X2hvb2tI IFFXaW5kb3dfaG9va19DcmVhdGUoUU9iamVjdEggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lkIFFX aW5kb3dfaG9va19EZXN0cm95KFFXaW5kb3dfaG9va0ggaGFuZGxlKTsKLStDX0VYUE9SVCB2b2lk IFFXaW5kb3dfaG9va19ob29rX3NjcmVlbkNoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFI b29rSCBob29rKTsKLStDX0VYUE9SVCB2b2lkIFFXaW5kb3dfaG9va19ob29rX21vZGFsaXR5Q2hh bmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQg UVdpbmRvd19ob29rX2hvb2tfd2luZG93U3RhdGVDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxl LCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9va193aW5kb3dU aXRsZUNoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VYUE9S VCB2b2lkIFFXaW5kb3dfaG9va19ob29rX3hDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBR SG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9va195Q2hhbmdlZChR V2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRv d19ob29rX2hvb2tfd2lkdGhDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9v ayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9va19oZWlnaHRDaGFuZ2VkKFFXaW5k b3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hv b2tfaG9va19taW5pbXVtV2lkdGhDaGFuZ2VkKFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0gg aG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9va19taW5pbXVtSGVpZ2h0Q2hh bmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQg UVdpbmRvd19ob29rX2hvb2tfbWF4aW11bVdpZHRoQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRs ZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19ob29rX2hvb2tfbWF4aW11 bUhlaWdodENoYW5nZWQoUVdpbmRvd19ob29rSCBoYW5kbGUsIFFIb29rSCBob29rKTsKLStDX0VY UE9SVCB2b2lkIFFXaW5kb3dfaG9va19ob29rX3Zpc2libGVDaGFuZ2VkKFFXaW5kb3dfaG9va0gg aGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2luZG93X2hvb2tfaG9va192 aXNpYmlsaXR5Q2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0Nf RVhQT1JUIHZvaWQgUVdpbmRvd19ob29rX2hvb2tfYWN0aXZlQ2hhbmdlZChRV2luZG93X2hvb2tI IGhhbmRsZSwgUUhvb2tIIGhvb2spOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19ob29rX2hvb2tf Y29udGVudE9yaWVudGF0aW9uQ2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tIIGhv b2spOwotK0NfRVhQT1JUIHZvaWQgUVdpbmRvd19ob29rX2hvb2tfZm9jdXNPYmplY3RDaGFuZ2Vk KFFXaW5kb3dfaG9va0ggaGFuZGxlLCBRSG9va0ggaG9vayk7Ci0rQ19FWFBPUlQgdm9pZCBRV2lu ZG93X2hvb2tfaG9va19vcGFjaXR5Q2hhbmdlZChRV2luZG93X2hvb2tIIGhhbmRsZSwgUUhvb2tI IGhvb2spOwotKwotKyNlbmRpZgotSW5kZXg6IHNyYy9xd2luZG93X2hvb2suaAotPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0tIC9kZXYvbnVsbAotKysrIGIvc3JjL3F3aW5kb3dfaG9vay5oCi1AQCAtMCwwICsxLDM0 MSBAQAotKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0rLy8gIENvcHlyaWdodCAoYykgMjAxNyBi eSDFvWVsamFuIFJpa2FsbwotKy8vCi0rLy8gIFNlZSB0aGUgaW5jbHVkZWQgZmlsZSBDT1BZSU5H LlRYVCBmb3IgZGV0YWlscyBhYm91dCB0aGUgY29weXJpZ2h0LgotKy8vCi0rLy8gIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot Ky8vICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotKy8vICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuCi0rLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSsKLSsKLSsjaWZuZGVmIFFX SU5ET1dfSE9PS19ICi0rI2RlZmluZSBRV0lORE9XX0hPT0tfSAotKwotKyNpbmNsdWRlIDxxd2lu ZG93Lmg+Ci0rCi0rI2luY2x1ZGUgInFvYmplY3RfaG9vay5oIgotKwotK2NsYXNzIFFXaW5kb3df aG9vayA6IHB1YmxpYyBRT2JqZWN0X2hvb2sgewotKyAgUV9PQkpFQ1QKLSsgIHB1YmxpYzoKLSsg ICAgUVdpbmRvd19ob29rKFFPYmplY3QgKmhhbmRsZSkgOiBRT2JqZWN0X2hvb2soaGFuZGxlKSB7 Ci0rICAgICAgc2NyZWVuQ2hhbmdlZF9ldmVudC5mdW5jID0gTlVMTDs7Ci0rICAgICAgbW9kYWxp dHlDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICB3aW5kb3dTdGF0ZUNoYW5nZWRf ZXZlbnQuZnVuYyA9IE5VTEw7OwotKyAgICAgIHdpbmRvd1RpdGxlQ2hhbmdlZF9ldmVudC5mdW5j ID0gTlVMTDs7Ci0rICAgICAgeENoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7OwotKyAgICAgIHlD aGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICB3aWR0aENoYW5nZWRfZXZlbnQuZnVu YyA9IE5VTEw7OwotKyAgICAgIGhlaWdodENoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7OwotKyAg ICAgIG1pbmltdW1XaWR0aENoYW5nZWRfZXZlbnQuZnVuYyA9IE5VTEw7OwotKyAgICAgIG1pbmlt dW1IZWlnaHRDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICBtYXhpbXVtV2lkdGhD aGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICBtYXhpbXVtSGVpZ2h0Q2hhbmdlZF9l dmVudC5mdW5jID0gTlVMTDs7Ci0rICAgICAgdmlzaWJsZUNoYW5nZWRfZXZlbnQuZnVuYyA9IE5V TEw7OwotKyAgICAgIHZpc2liaWxpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAg ICBhY3RpdmVDaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICBjb250ZW50T3JpZW50 YXRpb25DaGFuZ2VkX2V2ZW50LmZ1bmMgPSBOVUxMOzsKLSsgICAgICBmb2N1c09iamVjdENoYW5n ZWRfZXZlbnQuZnVuYyA9IE5VTEw7OwotKyAgICAgIG9wYWNpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMg PSBOVUxMOzsKLSsKLSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tfc2NyZWVuQ2hhbmdlZChRSG9v ayAmaG9vaykgewotKyAgICAgIGlmICggIXNjcmVlbkNoYW5nZWRfZXZlbnQuZnVuYyApCi0rICAg ICAgICBjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHNjcmVlbkNoYW5nZWQoUVNjcmVlbiopKSwgdGhp cywgU0xPVChzY3JlZW5DaGFuZ2VkX2hvb2soUVNjcmVlbiopKSk7Ci0rICAgICAgc2NyZWVuQ2hh bmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRp c2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwoc2NyZWVuQ2hhbmdlZChRU2NyZWVuKikpLCB0aGlzLCBT TE9UKHNjcmVlbkNoYW5nZWRfaG9vayhRU2NyZWVuKikpKTsKLSsgICAgfQotKwotKyAgICB2b2lk IGhvb2tfbW9kYWxpdHlDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhbW9kYWxp dHlDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTCht b2RhbGl0eUNoYW5nZWQoUXQ6OldpbmRvd01vZGFsaXR5KSksIHRoaXMsIFNMT1QobW9kYWxpdHlD aGFuZ2VkX2hvb2soUXQ6OldpbmRvd01vZGFsaXR5KSkpOwotKyAgICAgIG1vZGFsaXR5Q2hhbmdl ZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nv bm5lY3QoaGFuZGxlLCBTSUdOQUwobW9kYWxpdHlDaGFuZ2VkKFF0OjpXaW5kb3dNb2RhbGl0eSkp LCB0aGlzLCBTTE9UKG1vZGFsaXR5Q2hhbmdlZF9ob29rKFF0OjpXaW5kb3dNb2RhbGl0eSkpKTsK LSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tfd2luZG93U3RhdGVDaGFuZ2VkKFFIb29rICZob29r KSB7Ci0rICAgICAgaWYgKCAhd2luZG93U3RhdGVDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAg ICAgY29ubmVjdChoYW5kbGUsIFNJR05BTCh3aW5kb3dTdGF0ZUNoYW5nZWQoUXQ6OldpbmRvd1N0 YXRlKSksIHRoaXMsIFNMT1Qod2luZG93U3RhdGVDaGFuZ2VkX2hvb2soUXQ6OldpbmRvd1N0YXRl KSkpOwotKyAgICAgIHdpbmRvd1N0YXRlQ2hhbmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYg KCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwod2luZG93 U3RhdGVDaGFuZ2VkKFF0OjpXaW5kb3dTdGF0ZSkpLCB0aGlzLCBTTE9UKHdpbmRvd1N0YXRlQ2hh bmdlZF9ob29rKFF0OjpXaW5kb3dTdGF0ZSkpKTsKLSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tf d2luZG93VGl0bGVDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhd2luZG93VGl0 bGVDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTCh3 aW5kb3dUaXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyYpKSwgdGhpcywgU0xPVCh3aW5kb3dUaXRs ZUNoYW5nZWRfaG9vayhjb25zdCBRU3RyaW5nJikpKTsKLSsgICAgICB3aW5kb3dUaXRsZUNoYW5n ZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNj b25uZWN0KGhhbmRsZSwgU0lHTkFMKHdpbmRvd1RpdGxlQ2hhbmdlZChjb25zdCBRU3RyaW5nJikp LCB0aGlzLCBTTE9UKHdpbmRvd1RpdGxlQ2hhbmdlZF9ob29rKGNvbnN0IFFTdHJpbmcmKSkpOwot KyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va194Q2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAg IGlmICggIXhDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJ R05BTCh4Q2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVCh4Q2hhbmdlZF9ob29rKGludCkpKTsKLSsg ICAgICB4Q2hhbmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsg ICAgICAgIGRpc2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwoeENoYW5nZWQoaW50KSksIHRoaXMsIFNM T1QoeENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3lDaGFu Z2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAheUNoYW5nZWRfZXZlbnQuZnVuYyApCi0r ICAgICAgICBjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHlDaGFuZ2VkKGludCkpLCB0aGlzLCBTTE9U KHlDaGFuZ2VkX2hvb2soaW50KSkpOwotKyAgICAgIHlDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsg ICAgICBpZiAoICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05B TCh5Q2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVCh5Q2hhbmdlZF9ob29rKGludCkpKTsKLSsgICAg fQotKwotKyAgICB2b2lkIGhvb2tfd2lkdGhDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAg aWYgKCAhd2lkdGhDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUs IFNJR05BTCh3aWR0aENoYW5nZWQoaW50KSksIHRoaXMsIFNMT1Qod2lkdGhDaGFuZ2VkX2hvb2so aW50KSkpOwotKyAgICAgIHdpZHRoQ2hhbmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAh aG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwod2lkdGhDaGFu Z2VkKGludCkpLCB0aGlzLCBTTE9UKHdpZHRoQ2hhbmdlZF9ob29rKGludCkpKTsKLSsgICAgfQot KwotKyAgICB2b2lkIGhvb2tfaGVpZ2h0Q2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAgIGlm ICggIWhlaWdodENoYW5nZWRfZXZlbnQuZnVuYyApCi0rICAgICAgICBjb25uZWN0KGhhbmRsZSwg U0lHTkFMKGhlaWdodENoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QoaGVpZ2h0Q2hhbmdlZF9ob29r KGludCkpKTsKLSsgICAgICBoZWlnaHRDaGFuZ2VkX2V2ZW50ID0gaG9vazsKLSsgICAgICBpZiAo ICFob29rLmZ1bmMgKQotKyAgICAgICAgZGlzY29ubmVjdChoYW5kbGUsIFNJR05BTChoZWlnaHRD aGFuZ2VkKGludCkpLCB0aGlzLCBTTE9UKGhlaWdodENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAg IH0KLSsKLSsgICAgdm9pZCBob29rX21pbmltdW1XaWR0aENoYW5nZWQoUUhvb2sgJmhvb2spIHsK LSsgICAgICBpZiAoICFtaW5pbXVtV2lkdGhDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAg Y29ubmVjdChoYW5kbGUsIFNJR05BTChtaW5pbXVtV2lkdGhDaGFuZ2VkKGludCkpLCB0aGlzLCBT TE9UKG1pbmltdW1XaWR0aENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgICAgbWluaW11bVdpZHRo Q2hhbmdlZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAg IGRpc2Nvbm5lY3QoaGFuZGxlLCBTSUdOQUwobWluaW11bVdpZHRoQ2hhbmdlZChpbnQpKSwgdGhp cywgU0xPVChtaW5pbXVtV2lkdGhDaGFuZ2VkX2hvb2soaW50KSkpOwotKyAgICB9Ci0rCi0rICAg IHZvaWQgaG9va19taW5pbXVtSGVpZ2h0Q2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAgIGlm ICggIW1pbmltdW1IZWlnaHRDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdCho YW5kbGUsIFNJR05BTChtaW5pbXVtSGVpZ2h0Q2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVChtaW5p bXVtSGVpZ2h0Q2hhbmdlZF9ob29rKGludCkpKTsKLSsgICAgICBtaW5pbXVtSGVpZ2h0Q2hhbmdl ZF9ldmVudCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nv bm5lY3QoaGFuZGxlLCBTSUdOQUwobWluaW11bUhlaWdodENoYW5nZWQoaW50KSksIHRoaXMsIFNM T1QobWluaW11bUhlaWdodENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9p ZCBob29rX21heGltdW1XaWR0aENoYW5nZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFt YXhpbXVtV2lkdGhDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUs IFNJR05BTChtYXhpbXVtV2lkdGhDaGFuZ2VkKGludCkpLCB0aGlzLCBTTE9UKG1heGltdW1XaWR0 aENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgICAgbWF4aW11bVdpZHRoQ2hhbmdlZF9ldmVudCA9 IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nvbm5lY3QoaGFu ZGxlLCBTSUdOQUwobWF4aW11bVdpZHRoQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVChtYXhpbXVt V2lkdGhDaGFuZ2VkX2hvb2soaW50KSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va19tYXhp bXVtSGVpZ2h0Q2hhbmdlZChRSG9vayAmaG9vaykgewotKyAgICAgIGlmICggIW1heGltdW1IZWln aHRDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTCht YXhpbXVtSGVpZ2h0Q2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVChtYXhpbXVtSGVpZ2h0Q2hhbmdl ZF9ob29rKGludCkpKTsKLSsgICAgICBtYXhpbXVtSGVpZ2h0Q2hhbmdlZF9ldmVudCA9IGhvb2s7 Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nvbm5lY3QoaGFuZGxlLCBT SUdOQUwobWF4aW11bUhlaWdodENoYW5nZWQoaW50KSksIHRoaXMsIFNMT1QobWF4aW11bUhlaWdo dENoYW5nZWRfaG9vayhpbnQpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX3Zpc2libGVD aGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhdmlzaWJsZUNoYW5nZWRfZXZlbnQu ZnVuYyApCi0rICAgICAgICBjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHZpc2libGVDaGFuZ2VkKGJv b2wpKSwgdGhpcywgU0xPVCh2aXNpYmxlQ2hhbmdlZF9ob29rKGJvb2wpKSk7Ci0rICAgICAgdmlz aWJsZUNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAg ICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHZpc2libGVDaGFuZ2VkKGJvb2wpKSwgdGhp cywgU0xPVCh2aXNpYmxlQ2hhbmdlZF9ob29rKGJvb2wpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9p ZCBob29rX3Zpc2liaWxpdHlDaGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhdmlz aWJpbGl0eUNoYW5nZWRfZXZlbnQuZnVuYyApCi0rICAgICAgICBjb25uZWN0KGhhbmRsZSwgU0lH TkFMKHZpc2liaWxpdHlDaGFuZ2VkKFFXaW5kb3c6OlZpc2liaWxpdHkpKSwgdGhpcywgU0xPVCh2 aXNpYmlsaXR5Q2hhbmdlZF9ob29rKFFXaW5kb3c6OlZpc2liaWxpdHkpKSk7Ci0rICAgICAgdmlz aWJpbGl0eUNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0r ICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKHZpc2liaWxpdHlDaGFuZ2VkKFFXaW5k b3c6OlZpc2liaWxpdHkpKSwgdGhpcywgU0xPVCh2aXNpYmlsaXR5Q2hhbmdlZF9ob29rKFFXaW5k b3c6OlZpc2liaWxpdHkpKSk7Ci0rICAgIH0KLSsKLSsgICAgdm9pZCBob29rX2FjdGl2ZUNoYW5n ZWQoUUhvb2sgJmhvb2spIHsKLSsgICAgICBpZiAoICFhY3RpdmVDaGFuZ2VkX2V2ZW50LmZ1bmMg KQotKyAgICAgICAgY29ubmVjdChoYW5kbGUsIFNJR05BTChhY3RpdmVDaGFuZ2VkKCkpLCB0aGlz LCBTTE9UKGFjdGl2ZUNoYW5nZWRfaG9vaygpKSk7Ci0rICAgICAgYWN0aXZlQ2hhbmdlZF9ldmVu dCA9IGhvb2s7Ci0rICAgICAgaWYgKCAhaG9vay5mdW5jICkKLSsgICAgICAgIGRpc2Nvbm5lY3Qo aGFuZGxlLCBTSUdOQUwoYWN0aXZlQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChhY3RpdmVDaGFuZ2Vk X2hvb2soKSkpOwotKyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va19jb250ZW50T3JpZW50YXRpb25D aGFuZ2VkKFFIb29rICZob29rKSB7Ci0rICAgICAgaWYgKCAhY29udGVudE9yaWVudGF0aW9uQ2hh bmdlZF9ldmVudC5mdW5jICkKLSsgICAgICAgIGNvbm5lY3QoaGFuZGxlLCBTSUdOQUwoY29udGVu dE9yaWVudGF0aW9uQ2hhbmdlZChRdDo6U2NyZWVuT3JpZW50YXRpb24pKSwgdGhpcywgU0xPVChj b250ZW50T3JpZW50YXRpb25DaGFuZ2VkX2hvb2soUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSkpOwot KyAgICAgIGNvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlm ICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKGNvbnRl bnRPcmllbnRhdGlvbkNoYW5nZWQoUXQ6OlNjcmVlbk9yaWVudGF0aW9uKSksIHRoaXMsIFNMT1Qo Y29udGVudE9yaWVudGF0aW9uQ2hhbmdlZF9ob29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbikpKTsK LSsgICAgfQotKwotKyAgICB2b2lkIGhvb2tfZm9jdXNPYmplY3RDaGFuZ2VkKFFIb29rICZob29r KSB7Ci0rICAgICAgaWYgKCAhZm9jdXNPYmplY3RDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAg ICAgY29ubmVjdChoYW5kbGUsIFNJR05BTChmb2N1c09iamVjdENoYW5nZWQoUU9iamVjdCopKSwg dGhpcywgU0xPVChmb2N1c09iamVjdENoYW5nZWRfaG9vayhRT2JqZWN0KikpKTsKLSsgICAgICBm b2N1c09iamVjdENoYW5nZWRfZXZlbnQgPSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyAp Ci0rICAgICAgICBkaXNjb25uZWN0KGhhbmRsZSwgU0lHTkFMKGZvY3VzT2JqZWN0Q2hhbmdlZChR T2JqZWN0KikpLCB0aGlzLCBTTE9UKGZvY3VzT2JqZWN0Q2hhbmdlZF9ob29rKFFPYmplY3QqKSkp OwotKyAgICB9Ci0rCi0rICAgIHZvaWQgaG9va19vcGFjaXR5Q2hhbmdlZChRSG9vayAmaG9vaykg ewotKyAgICAgIGlmICggIW9wYWNpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMgKQotKyAgICAgICAgY29u bmVjdChoYW5kbGUsIFNJR05BTChvcGFjaXR5Q2hhbmdlZChxcmVhbCkpLCB0aGlzLCBTTE9UKG9w YWNpdHlDaGFuZ2VkX2hvb2socXJlYWwpKSk7Ci0rICAgICAgb3BhY2l0eUNoYW5nZWRfZXZlbnQg PSBob29rOwotKyAgICAgIGlmICggIWhvb2suZnVuYyApCi0rICAgICAgICBkaXNjb25uZWN0KGhh bmRsZSwgU0lHTkFMKG9wYWNpdHlDaGFuZ2VkKHFyZWFsKSksIHRoaXMsIFNMT1Qob3BhY2l0eUNo YW5nZWRfaG9vayhxcmVhbCkpKTsKLSsgICAgfQotKwotKyAgcHJpdmF0ZSBzbG90czoKLSsgICAg dm9pZCBzY3JlZW5DaGFuZ2VkX2hvb2soUVNjcmVlbiogc2NyZWVuKSB7Ci0rICAgICAgaWYgKCBz Y3JlZW5DaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5j X3R5cGUpKHZvaWQgKmRhdGEsIFFTY3JlZW5IIHNjcmVlbik7Ci0rCSgqKGZ1bmNfdHlwZSlzY3Jl ZW5DaGFuZ2VkX2V2ZW50LmZ1bmMpKHNjcmVlbkNoYW5nZWRfZXZlbnQuZGF0YSwgKFFTY3JlZW5I KXNjcmVlbik7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgbW9kYWxpdHlDaGFuZ2Vk X2hvb2soUXQ6OldpbmRvd01vZGFsaXR5IG1vZGFsaXR5KSB7Ci0rICAgICAgaWYgKCBtb2RhbGl0 eUNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlw ZSkodm9pZCAqZGF0YSwgUXQ6OldpbmRvd01vZGFsaXR5IG1vZGFsaXR5KTsKLSsJKCooZnVuY190 eXBlKW1vZGFsaXR5Q2hhbmdlZF9ldmVudC5mdW5jKShtb2RhbGl0eUNoYW5nZWRfZXZlbnQuZGF0 YSwgbW9kYWxpdHkpOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIHdpbmRvd1N0YXRl Q2hhbmdlZF9ob29rKFF0OjpXaW5kb3dTdGF0ZSB3aW5kb3dTdGF0ZSkgewotKyAgICAgIGlmICgg d2luZG93U3RhdGVDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQg KCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIFF0OjpXaW5kb3dTdGF0ZSB3aW5kb3dTdGF0ZSk7Ci0r CSgqKGZ1bmNfdHlwZSl3aW5kb3dTdGF0ZUNoYW5nZWRfZXZlbnQuZnVuYykod2luZG93U3RhdGVD aGFuZ2VkX2V2ZW50LmRhdGEsIHdpbmRvd1N0YXRlKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsg ICAgdm9pZCB3aW5kb3dUaXRsZUNoYW5nZWRfaG9vayhjb25zdCBRU3RyaW5nJiB0aXRsZSkgewot KyAgICAgIGlmICggd2luZG93VGl0bGVDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0 eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIFBXaWRlU3RyaW5nIHRpdGxlKTsK LSsJUFdpZGVTdHJpbmcgdF90aXRsZTsKLSsJaW5pdGlhbGl6ZVBXaWRlU3RyaW5nKHRfdGl0bGUp OwotKwljb3B5UVN0cmluZ1RvUFdpZGVTdHJpbmcodGl0bGUsIHRfdGl0bGUpOwotKwkoKihmdW5j X3R5cGUpd2luZG93VGl0bGVDaGFuZ2VkX2V2ZW50LmZ1bmMpKHdpbmRvd1RpdGxlQ2hhbmdlZF9l dmVudC5kYXRhLCB0X3RpdGxlKTsKLSsJZmluYWxpemVQV2lkZVN0cmluZyh0X3RpdGxlKTsKLSsg ICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCB4Q2hhbmdlZF9ob29rKGludCBhcmcpIHsKLSsg ICAgICBpZiAoIHhDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQg KCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIGludCBhcmcpOwotKwkoKihmdW5jX3R5cGUpeENoYW5n ZWRfZXZlbnQuZnVuYykoeENoYW5nZWRfZXZlbnQuZGF0YSwgYXJnKTsKLSsgICAgICB9Ci0rICAg IH0KLSsKLSsgICAgdm9pZCB5Q2hhbmdlZF9ob29rKGludCBhcmcpIHsKLSsgICAgICBpZiAoIHlD aGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUp KHZvaWQgKmRhdGEsIGludCBhcmcpOwotKwkoKihmdW5jX3R5cGUpeUNoYW5nZWRfZXZlbnQuZnVu YykoeUNoYW5nZWRfZXZlbnQuZGF0YSwgYXJnKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAg dm9pZCB3aWR0aENoYW5nZWRfaG9vayhpbnQgYXJnKSB7Ci0rICAgICAgaWYgKCB3aWR0aENoYW5n ZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9p ZCAqZGF0YSwgaW50IGFyZyk7Ci0rCSgqKGZ1bmNfdHlwZSl3aWR0aENoYW5nZWRfZXZlbnQuZnVu Yykod2lkdGhDaGFuZ2VkX2V2ZW50LmRhdGEsIGFyZyk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0r ICAgIHZvaWQgaGVpZ2h0Q2hhbmdlZF9ob29rKGludCBhcmcpIHsKLSsgICAgICBpZiAoIGhlaWdo dENoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlw ZSkodm9pZCAqZGF0YSwgaW50IGFyZyk7Ci0rCSgqKGZ1bmNfdHlwZSloZWlnaHRDaGFuZ2VkX2V2 ZW50LmZ1bmMpKGhlaWdodENoYW5nZWRfZXZlbnQuZGF0YSwgYXJnKTsKLSsgICAgICB9Ci0rICAg IH0KLSsKLSsgICAgdm9pZCBtaW5pbXVtV2lkdGhDaGFuZ2VkX2hvb2soaW50IGFyZykgewotKyAg ICAgIGlmICggbWluaW11bVdpZHRoQ2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlw ZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBpbnQgYXJnKTsKLSsJKCooZnVuY190 eXBlKW1pbmltdW1XaWR0aENoYW5nZWRfZXZlbnQuZnVuYykobWluaW11bVdpZHRoQ2hhbmdlZF9l dmVudC5kYXRhLCBhcmcpOwotKyAgICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIG1pbmltdW1I ZWlnaHRDaGFuZ2VkX2hvb2soaW50IGFyZykgewotKyAgICAgIGlmICggbWluaW11bUhlaWdodENo YW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSko dm9pZCAqZGF0YSwgaW50IGFyZyk7Ci0rCSgqKGZ1bmNfdHlwZSltaW5pbXVtSGVpZ2h0Q2hhbmdl ZF9ldmVudC5mdW5jKShtaW5pbXVtSGVpZ2h0Q2hhbmdlZF9ldmVudC5kYXRhLCBhcmcpOwotKyAg ICAgIH0KLSsgICAgfQotKwotKyAgICB2b2lkIG1heGltdW1XaWR0aENoYW5nZWRfaG9vayhpbnQg YXJnKSB7Ci0rICAgICAgaWYgKCBtYXhpbXVtV2lkdGhDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0r ICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5jX3R5cGUpKHZvaWQgKmRhdGEsIGludCBhcmcpOwot KwkoKihmdW5jX3R5cGUpbWF4aW11bVdpZHRoQ2hhbmdlZF9ldmVudC5mdW5jKShtYXhpbXVtV2lk dGhDaGFuZ2VkX2V2ZW50LmRhdGEsIGFyZyk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZv aWQgbWF4aW11bUhlaWdodENoYW5nZWRfaG9vayhpbnQgYXJnKSB7Ci0rICAgICAgaWYgKCBtYXhp bXVtSGVpZ2h0Q2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgq ZnVuY190eXBlKSh2b2lkICpkYXRhLCBpbnQgYXJnKTsKLSsJKCooZnVuY190eXBlKW1heGltdW1I ZWlnaHRDaGFuZ2VkX2V2ZW50LmZ1bmMpKG1heGltdW1IZWlnaHRDaGFuZ2VkX2V2ZW50LmRhdGEs IGFyZyk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZvaWQgdmlzaWJsZUNoYW5nZWRfaG9v ayhib29sIGFyZykgewotKyAgICAgIGlmICggdmlzaWJsZUNoYW5nZWRfZXZlbnQuZnVuYyApIHsK LSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0YSwgYm9vbCBhcmcp OwotKwkoKihmdW5jX3R5cGUpdmlzaWJsZUNoYW5nZWRfZXZlbnQuZnVuYykodmlzaWJsZUNoYW5n ZWRfZXZlbnQuZGF0YSwgYXJnKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgdm9pZCB2aXNp YmlsaXR5Q2hhbmdlZF9ob29rKFFXaW5kb3c6OlZpc2liaWxpdHkgdmlzaWJpbGl0eSkgewotKyAg ICAgIGlmICggdmlzaWJpbGl0eUNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVk ZWYgdm9pZCAoKmZ1bmNfdHlwZSkodm9pZCAqZGF0YSwgUVdpbmRvdzo6VmlzaWJpbGl0eSB2aXNp YmlsaXR5KTsKLSsJKCooZnVuY190eXBlKXZpc2liaWxpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMpKHZp c2liaWxpdHlDaGFuZ2VkX2V2ZW50LmRhdGEsIHZpc2liaWxpdHkpOwotKyAgICAgIH0KLSsgICAg fQotKwotKyAgICB2b2lkIGFjdGl2ZUNoYW5nZWRfaG9vaygpIHsKLSsgICAgICBpZiAoIGFjdGl2 ZUNoYW5nZWRfZXZlbnQuZnVuYyApIHsKLSsgICAgICAgIHR5cGVkZWYgdm9pZCAoKmZ1bmNfdHlw ZSkodm9pZCAqZGF0YSk7Ci0rCSgqKGZ1bmNfdHlwZSlhY3RpdmVDaGFuZ2VkX2V2ZW50LmZ1bmMp KGFjdGl2ZUNoYW5nZWRfZXZlbnQuZGF0YSk7Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHZv aWQgY29udGVudE9yaWVudGF0aW9uQ2hhbmdlZF9ob29rKFF0OjpTY3JlZW5PcmllbnRhdGlvbiBv cmllbnRhdGlvbikgewotKyAgICAgIGlmICggY29udGVudE9yaWVudGF0aW9uQ2hhbmdlZF9ldmVu dC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRh LCBRdDo6U2NyZWVuT3JpZW50YXRpb24gb3JpZW50YXRpb24pOwotKwkoKihmdW5jX3R5cGUpY29u dGVudE9yaWVudGF0aW9uQ2hhbmdlZF9ldmVudC5mdW5jKShjb250ZW50T3JpZW50YXRpb25DaGFu Z2VkX2V2ZW50LmRhdGEsIG9yaWVudGF0aW9uKTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAg dm9pZCBmb2N1c09iamVjdENoYW5nZWRfaG9vayhRT2JqZWN0KiBvYmplY3QpIHsKLSsgICAgICBp ZiAoIGZvY3VzT2JqZWN0Q2hhbmdlZF9ldmVudC5mdW5jICkgewotKyAgICAgICAgdHlwZWRlZiB2 b2lkICgqZnVuY190eXBlKSh2b2lkICpkYXRhLCBRT2JqZWN0SCBvYmplY3QpOwotKwkoKihmdW5j X3R5cGUpZm9jdXNPYmplY3RDaGFuZ2VkX2V2ZW50LmZ1bmMpKGZvY3VzT2JqZWN0Q2hhbmdlZF9l dmVudC5kYXRhLCAoUU9iamVjdEgpb2JqZWN0KTsKLSsgICAgICB9Ci0rICAgIH0KLSsKLSsgICAg dm9pZCBvcGFjaXR5Q2hhbmdlZF9ob29rKHFyZWFsIG9wYWNpdHkpIHsKLSsgICAgICBpZiAoIG9w YWNpdHlDaGFuZ2VkX2V2ZW50LmZ1bmMgKSB7Ci0rICAgICAgICB0eXBlZGVmIHZvaWQgKCpmdW5j X3R5cGUpKHZvaWQgKmRhdGEsIHFyZWFsIG9wYWNpdHkpOwotKwkoKihmdW5jX3R5cGUpb3BhY2l0 eUNoYW5nZWRfZXZlbnQuZnVuYykob3BhY2l0eUNoYW5nZWRfZXZlbnQuZGF0YSwgb3BhY2l0eSk7 Ci0rICAgICAgfQotKyAgICB9Ci0rCi0rICBwcml2YXRlOgotKyAgICBRSG9vayBzY3JlZW5DaGFu Z2VkX2V2ZW50OwotKyAgICBRSG9vayBtb2RhbGl0eUNoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29r IHdpbmRvd1N0YXRlQ2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgd2luZG93VGl0bGVDaGFuZ2Vk X2V2ZW50OwotKyAgICBRSG9vayB4Q2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgeUNoYW5nZWRf ZXZlbnQ7Ci0rICAgIFFIb29rIHdpZHRoQ2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgaGVpZ2h0 Q2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgbWluaW11bVdpZHRoQ2hhbmdlZF9ldmVudDsKLSsg ICAgUUhvb2sgbWluaW11bUhlaWdodENoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIG1heGltdW1X aWR0aENoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIG1heGltdW1IZWlnaHRDaGFuZ2VkX2V2ZW50 OwotKyAgICBRSG9vayB2aXNpYmxlQ2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgdmlzaWJpbGl0 eUNoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIGFjdGl2ZUNoYW5nZWRfZXZlbnQ7Ci0rICAgIFFI b29rIGNvbnRlbnRPcmllbnRhdGlvbkNoYW5nZWRfZXZlbnQ7Ci0rICAgIFFIb29rIGZvY3VzT2Jq ZWN0Q2hhbmdlZF9ldmVudDsKLSsgICAgUUhvb2sgb3BhY2l0eUNoYW5nZWRfZXZlbnQ7Ci0rfTsK LSsKLSsKLSsjZW5kaWYKLUluZGV4OiBxdDUucGFzCi09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYS9xdDUucGFz Ci0rKysgYi9xdDUucGFzCi1AQCAtNzgsMTEgKzc4LDcgQEAgdHlwZQotICAgUXRIYW5kbGUgPSBM b25nV29yZDsKLSAgIHskRU5ESUZ9Ci0gICBQUVJlYWwgPSBeUVJlYWw7Ci0tICB7JGlmZGVmIENQ VUFSTX0KLS0gICAgUVJlYWwgPSBzaW5nbGU7Ci0tICB7JGVsc2V9Ci0tICAgIFFSZWFsID0gZG91 YmxlOwotLSAgeyRlbmRpZn0KLSsgIFFSZWFsID0gZG91YmxlOwotIAotICAgUFFSZ2IgPSBeUVJn YjsKLSAgIFFSZ2IgPSBsb25nd29yZDsKLUluZGV4OiBzcmMvcXBhaW50ZGV2aWNlX2MuY3BwCi09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLS0gYS9zcmMvcXBhaW50ZGV2aWNlX2MuY3BwCi0rKysgYi9zcmMvcXBhaW50 ZGV2aWNlX2MuY3BwCi1AQCAtNzEsNiArNzEsMTIgQEAgaW50IFFQYWludERldmljZV9kZXZpY2VQ aXhlbFJhdGlvKFFQYWludAotIAlyZXR1cm4gKGludCkgKChRUGFpbnREZXZpY2UgKiloYW5kbGUp LT5kZXZpY2VQaXhlbFJhdGlvKCk7Ci0gfQotIAotK3FyZWFsIFFQYWludERldmljZV9kZXZpY2VQ aXhlbFJhdGlvRihRUGFpbnREZXZpY2VIIGhhbmRsZSkKLSt7Ci0rCXJldHVybiAocXJlYWwpICgo UVBhaW50RGV2aWNlICopaGFuZGxlKS0+ZGV2aWNlUGl4ZWxSYXRpb0YoKTsKLSt9Ci0rCi0rCi0g aW50IFFQYWludERldmljZV9jb2xvckNvdW50KFFQYWludERldmljZUggaGFuZGxlKQotIHsKLSAJ cmV0dXJuIChpbnQpICgoUVBhaW50RGV2aWNlICopaGFuZGxlKS0+Y29sb3JDb3VudCgpOwotSW5k ZXg6IHNyYy9xcGFpbnRkZXZpY2VfYy5oCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gYS9zcmMvcXBhaW50ZGV2 aWNlX2MuaAotKysrIGIvc3JjL3FwYWludGRldmljZV9jLmgKLUBAIC0yNyw2ICsyNyw3IEBAIENf RVhQT1JUIGludCBRUGFpbnREZXZpY2VfbG9naWNhbERwaVkoUVAKLSBDX0VYUE9SVCBpbnQgUVBh aW50RGV2aWNlX3BoeXNpY2FsRHBpWChRUGFpbnREZXZpY2VIIGhhbmRsZSk7Ci0gQ19FWFBPUlQg aW50IFFQYWludERldmljZV9waHlzaWNhbERwaVkoUVBhaW50RGV2aWNlSCBoYW5kbGUpOwotIENf RVhQT1JUIGludCBRUGFpbnREZXZpY2VfZGV2aWNlUGl4ZWxSYXRpbyhRUGFpbnREZXZpY2VIIGhh bmRsZSk7Ci0rQ19FWFBPUlQgcXJlYWwgUVBhaW50RGV2aWNlX2RldmljZVBpeGVsUmF0aW9GKFFQ YWludERldmljZUggaGFuZGxlKTsKLSBDX0VYUE9SVCBpbnQgUVBhaW50RGV2aWNlX2NvbG9yQ291 bnQoUVBhaW50RGV2aWNlSCBoYW5kbGUpOwotIENfRVhQT1JUIGludCBRUGFpbnREZXZpY2VfZGVw dGgoUVBhaW50RGV2aWNlSCBoYW5kbGUpOwotIAotSW5kZXg6IHNyYy9xcGxhaW50ZXh0ZWRpdF9j LmNwcAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0tIGEvc3JjL3FwbGFpbnRleHRlZGl0X2MuY3BwCi0rKysgYi9z cmMvcXBsYWludGV4dGVkaXRfYy5jcHAKLUBAIC0zNTUsNiArMzU1LDIxIEBAIHZvaWQgUVBsYWlu VGV4dEVkaXRfem9vbU91dChRUGxhaW5UZXh0RWQKLSAJKChRUGxhaW5UZXh0RWRpdCAqKWhhbmRs ZSktPnpvb21PdXQocmFuZ2UpOwotIH0KLSAKLSt2b2lkIFFQbGFpblRleHRFZGl0X3BsYWNlaG9s ZGVyVGV4dChRUGxhaW5UZXh0RWRpdEggaGFuZGxlLCBQV2lkZVN0cmluZyByZXR2YWwpCi0rewot KwlRU3RyaW5nIHRfcmV0dmFsOwotKwl0X3JldHZhbCA9ICgoUVBsYWluVGV4dEVkaXQgKiloYW5k bGUpLT5wbGFjZWhvbGRlclRleHQoKTsKLSsJY29weVFTdHJpbmdUb1BXaWRlU3RyaW5nKHRfcmV0 dmFsLCByZXR2YWwpOwotK30KLSsKLSt2b2lkIFFQbGFpblRleHRFZGl0X3NldFBsYWNlaG9sZGVy VGV4dChRUGxhaW5UZXh0RWRpdEggaGFuZGxlLCBQV2lkZVN0cmluZyB0ZXh0KQotK3sKLSsJUVN0 cmluZyB0X3RleHQ7Ci0rCWNvcHlQV2lkZVN0cmluZ1RvUVN0cmluZyh0ZXh0LCB0X3RleHQpOwot KwkoKFFQbGFpblRleHRFZGl0ICopaGFuZGxlKS0+c2V0UGxhY2Vob2xkZXJUZXh0KHRfdGV4dCk7 Ci0rfQotKwotKwotIFFQbGFpblRleHREb2N1bWVudExheW91dEggUVBsYWluVGV4dERvY3VtZW50 TGF5b3V0X0NyZWF0ZShRVGV4dERvY3VtZW50SCBkb2N1bWVudCkKLSB7Ci0gCXJldHVybiAoUVBs YWluVGV4dERvY3VtZW50TGF5b3V0SCkgbmV3IFFQbGFpblRleHREb2N1bWVudExheW91dCgoUVRl eHREb2N1bWVudCopZG9jdW1lbnQpOwotSW5kZXg6IHNyYy9xcGxhaW50ZXh0ZWRpdF9jLmgKLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tLSBhL3NyYy9xcGxhaW50ZXh0ZWRpdF9jLmgKLSsrKyBiL3NyYy9xcGxhaW50 ZXh0ZWRpdF9jLmgKLUBAIC03OSw2ICs3OSw5IEBAIENfRVhQT1JUIHZvaWQgUVBsYWluVGV4dEVk aXRfYXBwZW5kSHRtbCgKLSBDX0VYUE9SVCB2b2lkIFFQbGFpblRleHRFZGl0X2NlbnRlckN1cnNv cihRUGxhaW5UZXh0RWRpdEggaGFuZGxlKTsKLSBDX0VYUE9SVCB2b2lkIFFQbGFpblRleHRFZGl0 X3pvb21JbihRUGxhaW5UZXh0RWRpdEggaGFuZGxlLCBpbnQgcmFuZ2UpOwotIENfRVhQT1JUIHZv aWQgUVBsYWluVGV4dEVkaXRfem9vbU91dChRUGxhaW5UZXh0RWRpdEggaGFuZGxlLCBpbnQgcmFu Z2UpOwotK0NfRVhQT1JUIHZvaWQgUVBsYWluVGV4dEVkaXRfcGxhY2Vob2xkZXJUZXh0KFFQbGFp blRleHRFZGl0SCBoYW5kbGUsIFBXaWRlU3RyaW5nIHJldHZhbCk7Ci0rQ19FWFBPUlQgdm9pZCBR UGxhaW5UZXh0RWRpdF9zZXRQbGFjZWhvbGRlclRleHQoUVBsYWluVGV4dEVkaXRIIGhhbmRsZSwg UFdpZGVTdHJpbmcgdGV4dCk7Ci0rCi0gQ19FWFBPUlQgUVBsYWluVGV4dERvY3VtZW50TGF5b3V0 SCBRUGxhaW5UZXh0RG9jdW1lbnRMYXlvdXRfQ3JlYXRlKFFUZXh0RG9jdW1lbnRIIGRvY3VtZW50 KTsKLSBDX0VYUE9SVCB2b2lkIFFQbGFpblRleHREb2N1bWVudExheW91dF9EZXN0cm95KFFQbGFp blRleHREb2N1bWVudExheW91dEggaGFuZGxlKTsKLSBDX0VYUE9SVCBpbnQgUVBsYWluVGV4dERv Y3VtZW50TGF5b3V0X2hpdFRlc3QoUVBsYWluVGV4dERvY3VtZW50TGF5b3V0SCBoYW5kbGUsIGNv bnN0IFFQb2ludEZIIEFub25QYXJhbTEsIFF0OjpIaXRUZXN0QWNjdXJhY3kgQW5vblBhcmFtMik7 Ci1JbmRleDogc3JjL3FwcmludGVyaW5mb19jLmNwcAotPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGEvc3JjL3Fw cmludGVyaW5mb19jLmNwcAotKysrIGIvc3JjL3FwcmludGVyaW5mb19jLmNwcAotQEAgLTgzLDYg KzgzLDExIEBAIHZvaWQgUVByaW50ZXJJbmZvX2F2YWlsYWJsZVByaW50ZXJzKFBQdHIKLSAJY29w eVFMaXN0VGVtcGxhdGVUb1B0ckludEFycmF5V2l0aE5ldyh0X3JldHZhbCwgcmV0dmFsKTsKLSB9 Ci0gCi0rdm9pZCBRUHJpbnRlckluZm9fYXZhaWxhYmxlUHJpbnRlck5hbWVzKFFTdHJpbmdMaXN0 SCByZXR2YWwpCi0rewotKyAgKihRU3RyaW5nTGlzdCAqKXJldHZhbCA9IFFQcmludGVySW5mbzo6 YXZhaWxhYmxlUHJpbnRlck5hbWVzKCk7Ci0rfQotKwotIHZvaWQgUVByaW50ZXJJbmZvX2RlZmF1 bHRQcmludGVyKFFQcmludGVySW5mb0ggcmV0dmFsKQotIHsKLSAJKihRUHJpbnRlckluZm8gKily ZXR2YWwgPSBRUHJpbnRlckluZm86OmRlZmF1bHRQcmludGVyKCk7Ci1JbmRleDogc3JjL3Fwcmlu dGVyaW5mb19jLmgKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tLSBhL3NyYy9xcHJpbnRlcmluZm9fYy5oCi0rKysg Yi9zcmMvcXByaW50ZXJpbmZvX2MuaAotQEAgLTI3LDYgKzI3LDcgQEAgQ19FWFBPUlQgYm9vbCBR UHJpbnRlckluZm9faXNOdWxsKFFQcmludAotIENfRVhQT1JUIGJvb2wgUVByaW50ZXJJbmZvX2lz RGVmYXVsdChRUHJpbnRlckluZm9IIGhhbmRsZSk7Ci0gQ19FWFBPUlQgdm9pZCBRUHJpbnRlcklu Zm9fc3VwcG9ydGVkUGFwZXJTaXplcyhRUHJpbnRlckluZm9IIGhhbmRsZSwgUFB0ckludEFycmF5 IHJldHZhbCk7Ci0gQ19FWFBPUlQgdm9pZCBRUHJpbnRlckluZm9fYXZhaWxhYmxlUHJpbnRlcnMo UFB0ckludEFycmF5IHJldHZhbCk7Ci0rQ19FWFBPUlQgdm9pZCBRUHJpbnRlckluZm9fYXZhaWxh YmxlUHJpbnRlck5hbWVzKFFTdHJpbmdMaXN0SCByZXR2YWwpOwotIENfRVhQT1JUIHZvaWQgUVBy aW50ZXJJbmZvX2RlZmF1bHRQcmludGVyKFFQcmludGVySW5mb0ggcmV0dmFsKTsKLSBDX0VYUE9S VCB2b2lkIFFQcmludGVySW5mb19wcmludGVySW5mbyhRUHJpbnRlckluZm9IIHJldHZhbCwgUFdp ZGVTdHJpbmcgcHJpbnRlck5hbWUpOwotIAotSW5kZXg6IHNyYy9xdGV4dGVkaXRfYy5jcHAKLT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tLSBhL3NyYy9xdGV4dGVkaXRfYy5jcHAKLSsrKyBiL3NyYy9xdGV4dGVkaXRf Yy5jcHAKLUBAIC00NzIsMyArNDcyLDE3IEBAIHZvaWQgUVRleHRFZGl0X3pvb21PdXQoUVRleHRF ZGl0SCBoYW5kbGUKLSAJKChRVGV4dEVkaXQgKiloYW5kbGUpLT56b29tT3V0KHJhbmdlKTsKLSB9 Ci0gCi0rdm9pZCBRVGV4dEVkaXRfcGxhY2Vob2xkZXJUZXh0KFFUZXh0RWRpdEggaGFuZGxlLCBQ V2lkZVN0cmluZyByZXR2YWwpCi0rewotKwlRU3RyaW5nIHRfcmV0dmFsOwotKwl0X3JldHZhbCA9 ICgoUVRleHRFZGl0ICopaGFuZGxlKS0+cGxhY2Vob2xkZXJUZXh0KCk7Ci0rCWNvcHlRU3RyaW5n VG9QV2lkZVN0cmluZyh0X3JldHZhbCwgcmV0dmFsKTsKLSt9Ci0rCi0rdm9pZCBRVGV4dEVkaXRf c2V0UGxhY2Vob2xkZXJUZXh0KFFUZXh0RWRpdEggaGFuZGxlLCBQV2lkZVN0cmluZyB0ZXh0KQot K3sKLSsJUVN0cmluZyB0X3RleHQ7Ci0rCWNvcHlQV2lkZVN0cmluZ1RvUVN0cmluZyh0ZXh0LCB0 X3RleHQpOwotKwkoKFFUZXh0RWRpdCAqKWhhbmRsZSktPnNldFBsYWNlaG9sZGVyVGV4dCh0X3Rl eHQpOwotK30KLSsKLUluZGV4OiBzcmMvcXRleHRlZGl0X2MuaAotPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGEv c3JjL3F0ZXh0ZWRpdF9jLmgKLSsrKyBiL3NyYy9xdGV4dGVkaXRfYy5oCi1AQCAtMTAwLDUgKzEw MCw3IEBAIENfRVhQT1JUIHZvaWQgUVRleHRFZGl0X2FwcGVuZChRVGV4dEVkaXQKLSBDX0VYUE9S VCB2b2lkIFFUZXh0RWRpdF9zY3JvbGxUb0FuY2hvcihRVGV4dEVkaXRIIGhhbmRsZSwgUFdpZGVT dHJpbmcgbmFtZSk7Ci0gQ19FWFBPUlQgdm9pZCBRVGV4dEVkaXRfem9vbUluKFFUZXh0RWRpdEgg aGFuZGxlLCBpbnQgcmFuZ2UpOwotIENfRVhQT1JUIHZvaWQgUVRleHRFZGl0X3pvb21PdXQoUVRl eHRFZGl0SCBoYW5kbGUsIGludCByYW5nZSk7Ci0rQ19FWFBPUlQgdm9pZCBRVGV4dEVkaXRfcGxh Y2Vob2xkZXJUZXh0KFFUZXh0RWRpdEggaGFuZGxlLCBQV2lkZVN0cmluZyByZXR2YWwpOwotK0Nf RVhQT1JUIHZvaWQgUVRleHRFZGl0X3NldFBsYWNlaG9sZGVyVGV4dChRVGV4dEVkaXRIIGhhbmRs ZSwgUFdpZGVTdHJpbmcgdGV4dCk7Ci0gCi0gI2VuZGlmCmRpZmYgLS1naXQgYS9zcmNwa2dzL3F0 NXBhcy90ZW1wbGF0ZSBiL3NyY3BrZ3MvcXQ1cGFzL3RlbXBsYXRlCmluZGV4IDQwZTBlZjhhZDY5 NGEuLjhjNTU4OTQwYmQ5NTkgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvcXQ1cGFzL3RlbXBsYXRlCisr KyBiL3NyY3BrZ3MvcXQ1cGFzL3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBm aWxlIGZvciAncXQ1cGFzJwogcGtnbmFtZT1xdDVwYXMKLXZlcnNpb249Mi42fmJldGEKLXJldmlz aW9uPTIKK3ZlcnNpb249My4wCityZXZpc2lvbj0xCiBidWlsZF9zdHlsZT1xbWFrZQogaG9zdG1h a2VkZXBlbmRzPSJxdDUtcW1ha2UgcXQ1LWhvc3QtdG9vbHMiCiBtYWtlZGVwZW5kcz0icXQ1LWRl dmVsIHF0NS14MTFleHRyYXMtZGV2ZWwiCkBAIC05LDggKzksOCBAQCBzaG9ydF9kZXNjPSJRdDUg aW50ZXJmYWNlIGJpbmRpbmdzIGZvciBQYXNjYWwiCiBtYWludGFpbmVyPSJPcnBoYW5lZCA8b3Jw aGFuQHZvaWRsaW51eC5vcmc+IgogbGljZW5zZT0iTEdQTC0zLjAtb3ItbGF0ZXIiCiBob21lcGFn ZT0iaHR0cHM6Ly9zdm4uZnJlZXBhc2NhbC5vcmcvc3ZuL2xhemFydXMvdHJ1bmsvbGNsL2ludGVy ZmFjZXMvcXQ1L2NiaW5kaW5ncyIKLWRpc3RmaWxlcz0iJHtERUJJQU5fU0lURX0vbWFpbi9saWJx L2xpYnF0cGFzL2xpYnF0cGFzXyR7dmVyc2lvbn0ub3JpZy50YXIueHoiCi1jaGVja3N1bT1mY2M1 ZjY5NWQ2MGQ1ZjcyYmY1MDFiMmZhNzc5ZThhMWEyNjM2YzhkOTkxMjcwYjViM2ZlZjNkMGU5OTAz NjVjCitkaXN0ZmlsZXM9IiR7REVCSUFOX1NJVEV9L21haW4vbGlicS9saWJxdHBhcy9saWJxdHBh c18ke3ZlcnNpb259K2Rmc2cxLm9yaWcudGFyLnh6IgorY2hlY2tzdW09N2VjOGM5ZmJiYjMzMTBm NzVmNTM5MTU1M2UxZjE4MGFkZDQ1NzRkYWU0ZmMwNzhhYjM5M2JjZGEyNGQ2OGU0MgogCiBwb3N0 X2luc3RhbGwoKSB7CiAJdmluc3RhbGwgcXQ1LnBhcyAwNjQ0IHVzci9zaGFyZS9wYXNjYWwvcXQ1 CgpGcm9tIDQ1Mjg4NjIyZDU1NWQzODcwMjZjYzJlZjk4NTVhZjFkMWEzOGRjZWQgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCkZyb206IG1vYmlubW9iIDxtb2Jpbm1vYkBkaXNyb290Lm9yZz4KRGF0 ZTogRnJpLCA5IEZlYiAyMDI0IDIyOjI5OjMxICswMjAwClN1YmplY3Q6IFtQQVRDSCA0LzRdIGZw Yy1zcmM6IGJ1bXAsIGZpeCBkaXN0ZmlsZSBsb2NhdGlvbi4KCi0tLQogc3JjcGtncy9mcGMtc3Jj L3RlbXBsYXRlIHwgNCArKy0tCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvZnBjLXNyYy90ZW1wbGF0ZSBiL3NyY3Br Z3MvZnBjLXNyYy90ZW1wbGF0ZQppbmRleCA3YWM5N2JhNDM4ZjE5Li4wNGVjNmUzNjY5MGQ4IDEw MDY0NAotLS0gYS9zcmNwa2dzL2ZwYy1zcmMvdGVtcGxhdGUKKysrIGIvc3JjcGtncy9mcGMtc3Jj L3RlbXBsYXRlCkBAIC0xLDEyICsxLDEyIEBACiAjIFRlbXBsYXRlIGZpbGUgZm9yICdmcGMtc3Jj JwogcGtnbmFtZT1mcGMtc3JjCiB2ZXJzaW9uPTMuMi4wCi1yZXZpc2lvbj0xCityZXZpc2lvbj0y CiBzaG9ydF9kZXNjPSJTb3VyY2UgY29kZSBmb3IgRnJlZVBhc2NhbCBjb21waWxlciIKIG1haW50 YWluZXI9Ik9ycGhhbmVkIDxvcnBoYW5Adm9pZGxpbnV4Lm9yZz4iCiBsaWNlbnNlPSJMR1BMLTIu MC1vci1sYXRlciIKIGhvbWVwYWdlPSJodHRwczovL3d3dy5mcmVlcGFzY2FsLm9yZyIKLWRpc3Rm aWxlcz0iZnRwOi8vZnRwLmZyZWVwYXNjYWwub3JnL3B1Yi9mcGMvZGlzdC8ke3ZlcnNpb259L3Nv dXJjZS9mcGNidWlsZC0ke3ZlcnNpb259LnRhci5neiIKK2Rpc3RmaWxlcz0iJHtTT1VSQ0VGT1JH RV9TSVRFfS9mcmVlcGFzY2FsL1NvdXJjZS8ke3ZlcnNpb259L2ZwY2J1aWxkLSR7dmVyc2lvbn0u dGFyLmd6IgogY2hlY2tzdW09ZjliOTE0ZWFjZTk4OWEwMjNmYjk1M2RhMjAzZGMwZDk3M2I0NDQ4 NzU2OGI0MTM4YzdkNWI5NjEzZDdkNjgzOAogbm9zdHJpcD15ZXMKIAo= --===============1507464176749496668==--