ALTER COLUMN ... SET NOT NULL ... in order to mark the NOT NULL constraint as local. You suggested using ALTER TABLE ... RENAME CONSTRAINT, but renaming an inherited constraint is not allowed. #alter table notnull_tbl4_cld3 rename constraint notnull_tbl4_a_not_null to a_nn; ERROR: cannot rename inherited constraint "notnull_tbl4_a_not_null" ... that goes back 13 years. commit 39d74e346c083aa371ba64c4edb1332c40b56530 Author: Peter Eisentraut Date: Sat Mar 10 20:19:13 2012 +0200 Add support for renaming constraints reviewed by Josh Berkus and Dimitri Fontaine So I don't think we should change that behaviour. Instead I chose to fix both the problems by 1. In AdjustNotNullInheritance(), if a NOT NULL constraint is converted to local and the user has specified a name for it (ALTER TABLE ... ADD CONSTRAINT ... NOT NULL ..), change the name alongwith setting conislocal. The user who specified a non-default name in ADD CONSTRAINT would expect the "local" constraint to be named accordingly. If a local constraint is ADDed again with a different name, right now the patch ignores the new name but that could be changed to throw an error similar to ALTER TABLE ... RENAME CONSTAINT. 2. In determineNotNullFlags(), if a NOT NULL constraint is both inherited and local, preserve its name even if it's default. That way, it will be dumped as ALTER TABLE ... ADD CONSTRAINT ... NOT NULL ... instead of ALTER TABLE ... ALTER COLUMN ... SET NOT NULL. An exception to this is a local NOT NULL column with default name for NOT NULL constraint. Such NOT NULL constraints are specified in the CREATE TABLE ... INHERITS .. command itself. That way they preserve their default name. The first change will preserve the given name of the child constraint. Both changes together will preserve the default name of the child constraint. See the patch. I have also added some tests. Alternate approach which I haven't tried, but did consider and left aside. 1. Allow RENAME CONSTAINT on a local constaint even if it's inherited. Given that the behaviour is 13 years old, I am hesitant to change it. 2. Allow local and inherited NOT NULL constraints to co-exist separately (similar to primary key constraint). I am not sure why we don't allow this behaviour. AdjustNotNullInheritance() doesn't explain the reason. -- Best Wishes, Ashutosh Bapat --0000000000006d75d70627e367cf Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Dump-and-restore-of-inherited-and-local-chi-20241127.patch" Content-Disposition: attachment; filename="0001-Dump-and-restore-of-inherited-and-local-chi-20241127.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m3zt8wob0 RnJvbSAxMTZjZjUwMTdjYTc0NTNkNzVlODNjMmQ0MjRhOGMwYjYwMDgzODg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBc2h1dG9zaCBCYXBhdCA8YXNodXRvc2guYmFwYXQub3NzQGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAyNyBOb3YgMjAyNCAxNjoyMjo0NCArMDUzMApTdWJqZWN0OiBb UEFUQ0hdIER1bXAgYW5kIHJlc3RvcmUgb2YgaW5oZXJpdGVkIGFuZCBsb2NhbCBjaGlsZCBOT1Qg TlVMTAogY29uc3RyYWludHMKCkZpeGVzIHR3byBpc3N1ZXMgZGVzY3JpYmVkIGJlbG93OiAxLiBB IGNoaWxkIHRhYmxlIHdpbGwgaW5oZXJpdCBOT1QgTlVMTApjb25zdHJhaW50cyBmcm9tIHRoZSBw YXJlbnQuIEJ1dCBpdCdzIGFsbG93ZWQgdG8gYWRkIGxvY2FsIE5PVCBOVUxMIGNvbnN0cmFpbnRz Cm9uIHRoZSBzYW1lIGNvbHVtbi4gIElmIGEgdXNlciBzcGVjaWZpZXMgYSBuYW1lIHdoaWxlIGFk ZGluZyBzdWNoIGEgY29uc3RyYWludAppdCB3aWxsIGJlIGlnbm9yZWQuIFRoYXQgbWF5IG5vdCBi ZSBpbnRlbmRlZC4gQnV0IGlnbm9yaW5nIHRoZSBnaXZlbiBuYW1lIGhhcyBhbgppbGwtZWZmZWN0 IG9uIGR1bXAgYW5kIHJlc3RvcmUgb2Ygc3VjaCBhIGNvbnN0cmFpbnQuICBBIG5hbWVkIE5PVCBO VUxMCmNvbnN0cmFpbnQgd2hpY2ggaXMgaW5oZXJpdGVkIGFuZCBpcyBhbHNvIGxvY2FsIHdpbGwg YmUgZHVtcGVkIGFzIEFMVEVSIFRBQkxFCi4uLiBBREQgQ09OU1RSQUlOVCAuLi4gY29tbWFuZCBz cGVjaWZ5aW5nIGl0cyBuYW1lLiBJZiB3ZSBpZ25vcmUgdGhpcyBuYW1lLCBpdAp3aWxsIG5vdCBi ZSByZXN0b3JlZCBhbmQgdGh1cyBsb3N0LiBIZW5jZSB3aGlsZSBBRERpbmcgYSBsb2NhbCBOT1Qg TlVMTApjb25zdHJhaW50IG9uIHRoZSBjaGlsZCB0YWJsZSwgY2hhbmdlIHRoZSBuYW1lIG9mIHRo ZSBpbmhlcml0ZWQgY29uc3RyYWludCwgaWYKb25lIGV4aXN0cy4KCjIuIENvbnNpZGVyIGEgcGFy ZW50IHdpdGggTk9UIE5VTEwgY29sMS4gSWYgYSBjaGlsZCBpcyBjcmVhdGVkIHdpdGggQ1JFQVRF IFRBQkxFCmNoaWxkIChOT1QgTlVMTCBjb2wxKSBJTkhFUklUUyAocGFyZW50KSwgY29sMSB3b3Vs ZCBiZSBhbiBpbmhlcml0ZWQgY29sdW1uIHdpdGgKYSBsb2NhbCBhcyB3ZWxsIGFzIGluaGVyaXRl ZCBOT1QgTlVMTCBjb25zdHJhaW50IHdpdGggdGhlIGRlZmF1bHQgbmFtZQpjb250YWluaW5nIHRo ZSBuYW1lIG9mIHRoZSBjaGlsZCB0YWJsZSBpbiBpdC4gIFdlIHdpbGwgZHVtcCAiQ1JFQVRFIFRB QkxFCmNoaWxkKCkgSU5IRVJJVFMgcGFyZW50IiB0byBjcmVhdGUgdGhlIGNoaWxkIHRhYmxlLiBU aGlzIHdpbGwgYWRkIHRoZSBpbmhlcml0ZWQKY29uc3RyYWludCBvbiBjaGlsZCB3aXRoIG5hbWUg b2YgdGhlIHBhcmVudCBjb25zdHJhaW50LiBUbyB0dXJuIGl0IGludG8gYSBsb2NhbApjb25zdHJh aW50IHdlIHdpbGwgZHVtcCAiQUxURVIgVEFCTEUgY2hpbGQgQUxURVIgQ09MVU1OIGNvbDEgU0VU IE5PVCBOVUxMIi4gVGhpcwp3aWxsIG5vdCByZXN0b3JlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRo ZSBjb25zdHJhaW50LiBIZW5jZSBpbnN0ZWFkIG9mIGR1bXBpbmcKQUxURVIgVEFCTEUgLi4uIEFM VEVSIENPTFVNTiwgd2UgZHVtcCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgd2l0aCB0 aGUKY2hpbGQncyBkZWZhdWx0IG5hbWUuIFRoaXMgd291bGQgcHJlc2VydmUgdGhlIGNoaWxkJ3Mg ZGVmYXVsdCBuYW1lIGFjcm9zcyBkdW1wCmFuZCByZXN0b3JlLgoKQXV0aG9yOiBBc2h1dG9zaCBC YXBhdApEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2Zs YXQvQ0FFeEhXNXRiZGdBS0RmcWpESi03Rms2UEp0SGc4RDR6VUY2RlE0SDJQcTh6SzM4Tnl3JTQw bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYyAgICAgICAgICAg ICAgICB8IDEyICsrLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYyAgICAgICAgICAgICAg IHwgIDQgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29uc3RyYWludC5jICAgICAgIHwgNzYg KysrKysrKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j ICAgICAgICAgIHwgMTIgKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdHlwZWNtZHMuYyAgICAg ICAgICAgfCAxMiArKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAg ICB8IDYxICsrKysrKysrKysrKy0tLS0tLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jb25zdHJh aW50LmggICAgICAgfCAgNSArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50 cy5vdXQgfCA0MSArKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRz LnNxbCAgICAgIHwgMTcgKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMTg4IGluc2VydGlvbnMoKyks IDUyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5j IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKaW5kZXggMDAzYWY0YmYyMWMuLjEyZDQ0MDIw MGI4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYworKysgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL2hlYXAuYwpAQCAtMjU2MywxMCArMjU2MywxMiBAQCBBZGRSZWxhdGlvbk5l d0NvbnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwKIAogCQkJLyoKIAkJCSAqIElmIHRoZSBjb2x1bW4g YWxyZWFkeSBoYXMgYSBub3QtbnVsbCBjb25zdHJhaW50LCB3ZSBkb24ndCB3YW50Ci0JCQkgKiB0 byBhZGQgYW5vdGhlciBvbmU7IGp1c3QgYWRqdXN0IGluaGVyaXRhbmNlIHN0YXR1cyBhcyBuZWVk ZWQuCisJCQkgKiB0byBhZGQgYW5vdGhlciBvbmU7IGp1c3QgYWRqdXN0IGluaGVyaXRhbmNlIHN0 YXR1cyBhbmQgdGhlCisJCQkgKiBjb25zdHJhaW50IG5hbWUgYXMgbmVlZGVkLgogCQkJICovCiAJ CQlpZiAoQWRqdXN0Tm90TnVsbEluaGVyaXRhbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgY29s bnVtLAotCQkJCQkJCQkJCSBpc19sb2NhbCwgY2RlZi0+aXNfbm9faW5oZXJpdCkpCisJCQkJCQkJ CQkJIGlzX2xvY2FsLCBjZGVmLT5pc19ub19pbmhlcml0LAorCQkJCQkJCQkJCSBjZGVmLT5jb25u YW1lLCAmbm5uYW1lcykpCiAJCQkJY29udGludWU7CiAKIAkJCS8qCkBAIC0yNTc1LDkgKzI1Nzcs OSBAQCBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwKIAkJCSAqLwogCQkJ aWYgKGNkZWYtPmNvbm5hbWUpCiAJCQl7Ci0JCQkJaWYgKENvbnN0cmFpbnROYW1lSXNVc2VkKENP TlNUUkFJTlRfUkVMQVRJT04sCi0JCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsaWQocmVsKSwKLQkJ CQkJCQkJCQkgY2RlZi0+Y29ubmFtZSkpCisJCQkJaWYgKE9pZElzVmFsaWQoQ29uc3RyYWludE5h bWVJc1VzZWQoQ09OU1RSQUlOVF9SRUxBVElPTiwKKwkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJl bGlkKHJlbCksCisJCQkJCQkJCQkJCQkJY2RlZi0+Y29ubmFtZSkpKQogCQkJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkJCWVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfT0JKRUNUKSwKIAkJCQkJCQll cnJtc2coImNvbnN0cmFpbnQgXCIlc1wiIGZvciByZWxhdGlvbiBcIiVzXCIgYWxyZWFkeSBleGlz dHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9pbmRleC5jCmluZGV4IGY5YmI3MjFjNWZlLi45YTJhOGVhZWYyNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5kZXguYwpAQCAtOTAxLDggKzkwMSw4IEBAIGluZGV4X2NyZWF0ZShSZWxhdGlvbiBoZWFw UmVsYXRpb24sCiAJfQogCiAJaWYgKChmbGFncyAmIElOREVYX0NSRUFURV9BRERfQ09OU1RSQUlO VCkgIT0gMCAmJgotCQlDb25zdHJhaW50TmFtZUlzVXNlZChDT05TVFJBSU5UX1JFTEFUSU9OLCBo ZWFwUmVsYXRpb25JZCwKLQkJCQkJCQkgaW5kZXhSZWxhdGlvbk5hbWUpKQorCQlPaWRJc1ZhbGlk KENvbnN0cmFpbnROYW1lSXNVc2VkKENPTlNUUkFJTlRfUkVMQVRJT04sIGhlYXBSZWxhdGlvbklk LAorCQkJCQkJCQkJCWluZGV4UmVsYXRpb25OYW1lKSkpCiAJewogCQkvKgogCQkgKiBJTkRFWF9D UkVBVEVfSUZfTk9UX0VYSVNUUyBkb2VzIG5vdCBhcHBseSBoZXJlLCBzaW5jZSB0aGUKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfY29uc3RyYWludC5jIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19jb25zdHJhaW50LmMKaW5kZXggOWMwNWE5OGQyOGMuLjA1OGM0ZDVhYjI4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuYworKysgYi9zcmMv YmFja2VuZC9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuYwpAQCAtMzk2LDE3ICszOTYsMjAgQEAgQ3Jl YXRlQ29uc3RyYWludEVudHJ5KGNvbnN0IGNoYXIgKmNvbnN0cmFpbnROYW1lLAogICogd2hldGhl ciBhbiBhdXRvLWdlbmVyYXRlZCBuYW1lIGlzIE9LOiBoZXJlLCB3ZSB3aWxsIGFsbG93IGl0IHVu bGVzcyB0aGVyZQogICogaXMgYW4gaWRlbnRpY2FsIGNvbnN0cmFpbnQgbmFtZSBpbiB1c2UgKm9u IHRoZSBzYW1lIG9iamVjdCouCiAgKgorICogUmV0dXJucyB0aGUgT2lkIG9mIGNvbnN0cmFpbnQg d2l0aCBtYXRjaGluZyBuYW1lLiBJbnZhbGlkT2lkIGlmIG5vbmUgZXhpc3RzLgorICoKICAqIE5C OiBDYWxsZXIgc2hvdWxkIGhvbGQgZXhjbHVzaXZlIGxvY2sgb24gdGhlIGdpdmVuIG9iamVjdCwg ZWxzZQogICogdGhpcyB0ZXN0IGNhbiBiZSBmb29sZWQgYnkgY29uY3VycmVudCBhZGRpdGlvbnMu CiAgKi8KLWJvb2wKK09pZAogQ29uc3RyYWludE5hbWVJc1VzZWQoQ29uc3RyYWludENhdGVnb3J5 IGNvbkNhdCwgT2lkIG9iaklkLAogCQkJCQkgY29uc3QgY2hhciAqY29ubmFtZSkKIHsKLQlib29s CQlmb3VuZDsKKwlPaWQJCQlyZXN1bHQgPSBJbnZhbGlkT2lkOwogCVJlbGF0aW9uCWNvbkRlc2M7 CiAJU3lzU2NhbkRlc2MgY29uc2NhbjsKIAlTY2FuS2V5RGF0YSBza2V5WzNdOworCUhlYXBUdXBs ZQl0dXA7CiAKIAljb25EZXNjID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNj ZXNzU2hhcmVMb2NrKTsKIApAQCAtNDI5LDEyICs0MzIsMTQgQEAgQ29uc3RyYWludE5hbWVJc1Vz ZWQoQ29uc3RyYWludENhdGVnb3J5IGNvbkNhdCwgT2lkIG9iaklkLAogCQkJCQkJCQkgdHJ1ZSwg TlVMTCwgMywgc2tleSk7CiAKIAkvKiBUaGVyZSBjYW4gYmUgYXQgbW9zdCBvbmUgbWF0Y2hpbmcg cm93ICovCi0JZm91bmQgPSAoSGVhcFR1cGxlSXNWYWxpZChzeXN0YWJsZV9nZXRuZXh0KGNvbnNj YW4pKSk7CisJdHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25zY2FuKTsKKwlpZiAoSGVhcFR1cGxl SXNWYWxpZCh0dXApKQorCQlyZXN1bHQgPSAoKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNU KHR1cCkpLT5vaWQ7CiAKIAlzeXN0YWJsZV9lbmRzY2FuKGNvbnNjYW4pOwogCXRhYmxlX2Nsb3Nl KGNvbkRlc2MsIEFjY2Vzc1NoYXJlTG9jayk7CiAKLQlyZXR1cm4gZm91bmQ7CisJcmV0dXJuIHJl c3VsdDsKIH0KIAogLyoKQEAgLTcxOSwxMCArNzI0LDE2IEBAIGV4dHJhY3ROb3ROdWxsQ29sdW1u KEhlYXBUdXBsZSBjb25zdHJUdXApCiAgKiBjb25pc2xvY2FsL2NvbmluaGNvdW50IGFuZCByZXR1 cm4gdHJ1ZS4KICAqIEluIHRoZSBsYXR0ZXIgY2FzZSwgaWYgaXNfbG9jYWwgaXMgdHJ1ZSB3ZSBm bGlwIGNvbmlzbG9jYWwgdHJ1ZSwgb3IgZG8KICAqIG5vdGhpbmcgaWYgaXQncyBhbHJlYWR5IHRy dWU7IG90aGVyd2lzZSB3ZSBpbmNyZW1lbnQgY29uaW5oY291bnQgYnkgMS4KKyAqCisgKiBBIHVz ZXIgd291bGQgZXhwZWN0IHRoZSBub3ctZmxpcHBlZC10by1sb2NhbCBjb25zdHJhaW50IHRvIGJl IHJlbmFtZWQgaWYgdGhleQorICogaGF2ZSBwcm92aWRlZCBhIG5hbWUgd2hpbGUgQUREaW5nIHRo ZSBjb25zdHJhaW50LiBUaGlzIGlzIHNpbWlsYXIgdG8gaG93CisgKiBDUkVBVEUgVEFCTEUgLi4u IElOSEVSSVQgd291bGQgYmVoYXZlLCBpZiB1c2VyIHByb3ZpZGVkIGEgbmFtZSBmb3IgYSBsb2Nh bAorICogY29uc3RyYWludCwgYmVpbmcgY3JlYXRlZCwgd2hpY2ggd2lsbCBhbHNvIGJlIGluaGVy aXRlZC4KICAqLwogYm9vbAogQWRqdXN0Tm90TnVsbEluaGVyaXRhbmNlKE9pZCByZWxpZCwgQXR0 ck51bWJlciBhdHRudW0sCi0JCQkJCQkgYm9vbCBpc19sb2NhbCwgYm9vbCBpc19ub19pbmhlcml0 KQorCQkJCQkJIGJvb2wgaXNfbG9jYWwsIGJvb2wgaXNfbm9faW5oZXJpdCwKKwkJCQkJCSBjaGFy ICpjb25uYW1lLCBMaXN0ICoqbm5uYW1lcykKIHsKIAlIZWFwVHVwbGUJdHVwOwogCkBAIC03MzIs NiArNzQzLDggQEAgQWRqdXN0Tm90TnVsbEluaGVyaXRhbmNlKE9pZCByZWxpZCwgQXR0ck51bWJl ciBhdHRudW0sCiAJCVJlbGF0aW9uCXBnX2NvbnN0cmFpbnQ7CiAJCUZvcm1fcGdfY29uc3RyYWlu dCBjb25mb3JtOwogCQlib29sCQljaGFuZ2VkID0gZmFsc2U7CisJCU5hbWVEYXRhCW9sZG5hbWU7 CisJCWJvb2wJCXJlbmFtZWQgPSBmYWxzZTsKIAogCQlwZ19jb25zdHJhaW50ID0gdGFibGVfb3Bl bihDb25zdHJhaW50UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAJCWNvbmZvcm0gPSAo Rm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QodHVwKTsKQEAgLTc1OCwxMiArNzcxLDUzIEBA IEFkanVzdE5vdE51bGxJbmhlcml0YW5jZShPaWQgcmVsaWQsIEF0dHJOdW1iZXIgYXR0bnVtLAog CQllbHNlIGlmICghY29uZm9ybS0+Y29uaXNsb2NhbCkKIAkJewogCQkJY29uZm9ybS0+Y29uaXNs b2NhbCA9IHRydWU7CisKKwkJCWlmIChjb25uYW1lKQorCQkJeworCQkJCU9pZAkJCXVzZWRfY29u ID0gQ29uc3RyYWludE5hbWVJc1VzZWQoQ09OU1RSQUlOVF9SRUxBVElPTiwKKwkJCQkJCQkJCQkJ CQkJCXJlbGlkLCBjb25uYW1lKTsKKworCQkJCWlmICghT2lkSXNWYWxpZCh1c2VkX2NvbikpCisJ CQkJeworCQkJCQkvKgorCQkJCQkgKiBObyBjb25zdHJhaW50IHdpdGggdGhlIHNhbWUgbmFtZSBl eGlzdHMsIG5vdCBldmVuIHRoaXMKKwkJCQkJICogb25lLiBTYWZlIHRvIHJlbmFtZSBpdCB0byB0 aGUgZ2l2ZW4gbmFtZS4KKwkJCQkJICovCisJCQkJCUFzc2VydChuYW1lc3RyY21wKCZjb25mb3Jt LT5jb25uYW1lLCBjb25uYW1lKSAhPSAwKTsKKwkJCQkJbmFtZXN0cmNweSgmb2xkbmFtZSwgTmFt ZVN0cihjb25mb3JtLT5jb25uYW1lKSk7CisJCQkJCW5hbWVzdHJjcHkoJmNvbmZvcm0tPmNvbm5h bWUsIGNvbm5hbWUpOworCQkJCQlyZW5hbWVkID0gdHJ1ZTsKKwkJCQkJKm5ubmFtZXMgPSBsYXBw ZW5kKCpubm5hbWVzLCBjb25uYW1lKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAodXNlZF9jb24gIT0g Y29uZm9ybS0+b2lkKQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCWVycmNvZGUoRVJSQ09E RV9EVVBMSUNBVEVfT0JKRUNUKSwKKwkJCQkJCQllcnJtc2coImNvbnN0cmFpbnQgXCIlc1wiIGZv ciByZWxhdGlvbiBcIiVzXCIgYWxyZWFkeSBleGlzdHMiLAorCQkJCQkJCQkgICBjb25uYW1lLCBn ZXRfcmVsX25hbWUocmVsaWQpKSk7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog VGhlIGdpdmVuIG5hbWUgaXMgc2FtZSBhcyB0aGUgZXhpc3RpbmcgbmFtZSBvZiB0aGUKKwkJCQkJ ICogY29uc3RyYWludC4gTm90aGluZyB0byBkby4KKwkJCQkJICovCisJCQkJCUFzc2VydChuYW1l c3RyY21wKCZjb25mb3JtLT5jb25uYW1lLCBjb25uYW1lKSA9PSAwKTsKKwkJCQl9CisJCQl9CisK IAkJCWNoYW5nZWQgPSB0cnVlOwogCQl9CiAKIAkJaWYgKGNoYW5nZWQpCisJCXsKIAkJCUNhdGFs b2dUdXBsZVVwZGF0ZShwZ19jb25zdHJhaW50LCAmdHVwLT50X3NlbGYsIHR1cCk7CiAKKwkJCWlm IChyZW5hbWVkKQorCQkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9E VVBMSUNBVEVfT0JKRUNUKSwKKwkJCQkJCWVycm1zZygicmVuYW1lZCBleGlzdGluZyBub24tbnVs bCBjb25zdHJhaW50IFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgdG8gXCIlc1wiIiwKKwkJCQkJ CQkgICBOYW1lU3RyKG9sZG5hbWUpLCBnZXRfcmVsX25hbWUocmVsaWQpLCBOYW1lU3RyKGNvbmZv cm0tPmNvbm5hbWUpKSk7CisJCX0KKwogCQl0YWJsZV9jbG9zZShwZ19jb25zdHJhaW50LCBSb3dF eGNsdXNpdmVMb2NrKTsKIAogCQlyZXR1cm4gdHJ1ZTsKQEAgLTk2NywxNyArMTAyMSwxNyBAQCBS ZW5hbWVDb25zdHJhaW50QnlJZChPaWQgY29uSWQsIGNvbnN0IGNoYXIgKm5ld25hbWUpCiAJICog Rm9yIHVzZXItZnJpZW5kbGluZXNzLCBjaGVjayB3aGV0aGVyIHRoZSBuYW1lIGlzIGFscmVhZHkg aW4gdXNlLgogCSAqLwogCWlmIChPaWRJc1ZhbGlkKGNvbi0+Y29ucmVsaWQpICYmCi0JCUNvbnN0 cmFpbnROYW1lSXNVc2VkKENPTlNUUkFJTlRfUkVMQVRJT04sCi0JCQkJCQkJIGNvbi0+Y29ucmVs aWQsCi0JCQkJCQkJIG5ld25hbWUpKQorCQlPaWRJc1ZhbGlkKENvbnN0cmFpbnROYW1lSXNVc2Vk KENPTlNUUkFJTlRfUkVMQVRJT04sCisJCQkJCQkJCQkJY29uLT5jb25yZWxpZCwKKwkJCQkJCQkJ CQluZXduYW1lKSkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBM SUNBVEVfT0JKRUNUKSwKIAkJCQkgZXJybXNnKCJjb25zdHJhaW50IFwiJXNcIiBmb3IgcmVsYXRp b24gXCIlc1wiIGFscmVhZHkgZXhpc3RzIiwKIAkJCQkJCW5ld25hbWUsIGdldF9yZWxfbmFtZShj b24tPmNvbnJlbGlkKSkpKTsKIAlpZiAoT2lkSXNWYWxpZChjb24tPmNvbnR5cGlkKSAmJgotCQlD b25zdHJhaW50TmFtZUlzVXNlZChDT05TVFJBSU5UX0RPTUFJTiwKLQkJCQkJCQkgY29uLT5jb250 eXBpZCwKLQkJCQkJCQkgbmV3bmFtZSkpCisJCU9pZElzVmFsaWQoQ29uc3RyYWludE5hbWVJc1Vz ZWQoQ09OU1RSQUlOVF9ET01BSU4sCisJCQkJCQkJCQkJY29uLT5jb250eXBpZCwKKwkJCQkJCQkJ CQluZXduYW1lKSkpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBM SUNBVEVfT0JKRUNUKSwKIAkJCQkgZXJybXNnKCJjb25zdHJhaW50IFwiJXNcIiBmb3IgZG9tYWlu ICVzIGFscmVhZHkgZXhpc3RzIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Rh YmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMWFmMmUy YmZmYjIuLjFiNDNiYTUwMGVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtOTQ1OSw5 ICs5NDU5LDkgQEAgQVRFeGVjQWRkQ29uc3RyYWludChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFi bGVJbmZvICp0YWIsIFJlbGF0aW9uIHJlbCwKIAkJCSAqLwogCQkJaWYgKG5ld0NvbnN0cmFpbnQt PmNvbm5hbWUpCiAJCQl7Ci0JCQkJaWYgKENvbnN0cmFpbnROYW1lSXNVc2VkKENPTlNUUkFJTlRf UkVMQVRJT04sCi0JCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsaWQocmVsKSwKLQkJCQkJCQkJCQkg bmV3Q29uc3RyYWludC0+Y29ubmFtZSkpCisJCQkJaWYgKE9pZElzVmFsaWQoQ29uc3RyYWludE5h bWVJc1VzZWQoQ09OU1RSQUlOVF9SRUxBVElPTiwKKwkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJl bGlkKHJlbCksCisJCQkJCQkJCQkJCQkJbmV3Q29uc3RyYWludC0+Y29ubmFtZSkpKQogCQkJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCks CiAJCQkJCQkJIGVycm1zZygiY29uc3RyYWludCBcIiVzXCIgZm9yIHJlbGF0aW9uIFwiJXNcIiBh bHJlYWR5IGV4aXN0cyIsCkBAIC0xMDM4MCw5ICsxMDM4MCw5IEBAIGFkZEZrQ29uc3RyYWludChh ZGRGa0NvbnN0cmFpbnRTaWRlcyBma3NpZGUsCiAJICogQ2FsbGVyIHN1cHBsaWVzIHVzIHdpdGgg YSBjb25zdHJhaW50IG5hbWU7IGhvd2V2ZXIsIGl0IG1heSBiZSB1c2VkIGluCiAJICogdGhpcyBw YXJ0aXRpb24sIHNvIGNvbWUgdXAgd2l0aCBhIGRpZmZlcmVudCBvbmUgaW4gdGhhdCBjYXNlLgog CSAqLwotCWlmIChDb25zdHJhaW50TmFtZUlzVXNlZChDT05TVFJBSU5UX1JFTEFUSU9OLAotCQkJ CQkJCSBSZWxhdGlvbkdldFJlbGlkKHJlbCksCi0JCQkJCQkJIGNvbnN0cmFpbnRuYW1lKSkKKwlp ZiAoT2lkSXNWYWxpZChDb25zdHJhaW50TmFtZUlzVXNlZChDT05TVFJBSU5UX1JFTEFUSU9OLAor CQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSwKKwkJCQkJCQkJCQljb25zdHJhaW50bmFt ZSkpKQogCQljb25uYW1lID0gQ2hvb3NlQ29uc3RyYWludE5hbWUoUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsKSwKIAkJCQkJCQkJCSAgIENob29zZUZvcmVpZ25LZXlDb25zdHJhaW50TmFtZUFk ZGl0aW9uKGZrY29uc3RyYWludC0+ZmtfYXR0cnMpLAogCQkJCQkJCQkJICAgImZrZXkiLApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHlwZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3R5cGVjbWRzLmMKaW5kZXggODU5ZTIxOTFmMDguLmY0NWVjOTBmMjVlIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90eXBlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3R5cGVjbWRzLmMKQEAgLTM1MjgsOSArMzUyOCw5IEBAIGRvbWFpbkFkZENoZWNrQ29u c3RyYWludChPaWQgZG9tYWluT2lkLCBPaWQgZG9tYWluTmFtZXNwYWNlLCBPaWQgYmFzZVR5cGVP aWQsCiAJICovCiAJaWYgKGNvbnN0ci0+Y29ubmFtZSkKIAl7Ci0JCWlmIChDb25zdHJhaW50TmFt ZUlzVXNlZChDT05TVFJBSU5UX0RPTUFJTiwKLQkJCQkJCQkJIGRvbWFpbk9pZCwKLQkJCQkJCQkJ IGNvbnN0ci0+Y29ubmFtZSkpCisJCWlmIChPaWRJc1ZhbGlkKENvbnN0cmFpbnROYW1lSXNVc2Vk KENPTlNUUkFJTlRfRE9NQUlOLAorCQkJCQkJCQkJCQlkb21haW5PaWQsCisJCQkJCQkJCQkJCWNv bnN0ci0+Y29ubmFtZSkpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09E RV9EVVBMSUNBVEVfT0JKRUNUKSwKIAkJCQkJIGVycm1zZygiY29uc3RyYWludCBcIiVzXCIgZm9y IGRvbWFpbiBcIiVzXCIgYWxyZWFkeSBleGlzdHMiLApAQCAtMzY4Myw5ICszNjgzLDkgQEAgZG9t YWluQWRkTm90TnVsbENvbnN0cmFpbnQoT2lkIGRvbWFpbk9pZCwgT2lkIGRvbWFpbk5hbWVzcGFj ZSwgT2lkIGJhc2VUeXBlT2lkLAogCSAqLwogCWlmIChjb25zdHItPmNvbm5hbWUpCiAJewotCQlp ZiAoQ29uc3RyYWludE5hbWVJc1VzZWQoQ09OU1RSQUlOVF9ET01BSU4sCi0JCQkJCQkJCSBkb21h aW5PaWQsCi0JCQkJCQkJCSBjb25zdHItPmNvbm5hbWUpKQorCQlpZiAoT2lkSXNWYWxpZChDb25z dHJhaW50TmFtZUlzVXNlZChDT05TVFJBSU5UX0RPTUFJTiwKKwkJCQkJCQkJCQkJZG9tYWluT2lk LAorCQkJCQkJCQkJCQljb25zdHItPmNvbm5hbWUpKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJ CShlcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCksCiAJCQkJCSBlcnJtc2coImNvbnN0 cmFpbnQgXCIlc1wiIGZvciBkb21haW4gXCIlc1wiIGFscmVhZHkgZXhpc3RzIiwKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CmluZGV4IGFkZDdmMTZjOTAyLi44ZGYwNmM3Y2JjZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zNDYsNyAr MzQ2LDcgQEAgc3RhdGljIHZvaWQgZ2V0VGFibGVEYXRhRktDb25zdHJhaW50cyh2b2lkKTsKIHN0 YXRpYyB2b2lkIGRldGVybWluZU5vdE51bGxGbGFncyhBcmNoaXZlICpmb3V0LCBQR3Jlc3VsdCAq cmVzLCBpbnQgciwKIAkJCQkJCQkJICBUYWJsZUluZm8gKnRiaW5mbywgaW50IGosCiAJCQkJCQkJ CSAgaW50IGlfbm90bnVsbF9uYW1lLCBpbnQgaV9ub3RudWxsX25vaW5oZXJpdCwKLQkJCQkJCQkJ ICBpbnQgaV9ub3RudWxsX2lzbG9jYWwpOworCQkJCQkJCQkgIGludCBpX25vdG51bGxfaXNsb2Nh bCwgaW50IGlfbm90bnVsbF9pbmhjb3VudCk7CiBzdGF0aWMgY2hhciAqZm9ybWF0X2Z1bmN0aW9u X2FyZ3VtZW50cyhjb25zdCBGdW5jSW5mbyAqZmluZm8sIGNvbnN0IGNoYXIgKmZ1bmNhcmdzLAog CQkJCQkJCQkJICAgYm9vbCBpc19hZ2cpOwogc3RhdGljIGNoYXIgKmZvcm1hdF9mdW5jdGlvbl9z aWduYXR1cmUoQXJjaGl2ZSAqZm91dCwKQEAgLTg3NjQsNiArODc2NCw3IEBAIGdldFRhYmxlQXR0 cnMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvICp0YmxpbmZvLCBpbnQgbnVtVGFibGVzKQogCWlu dAkJCWlfbm90bnVsbF9uYW1lOwogCWludAkJCWlfbm90bnVsbF9ub2luaGVyaXQ7CiAJaW50CQkJ aV9ub3RudWxsX2lzbG9jYWw7CisJaW50CQkJaV9ub3RudWxsX2luaGNvdW50OwogCWludAkJCWlf YXR0b3B0aW9uczsKIAlpbnQJCQlpX2F0dGNvbGxhdGlvbjsKIAlpbnQJCQlpX2F0dGNvbXByZXNz aW9uOwpAQCAtODg1MSwyMCArODg1MiwyMyBAQCBnZXRUYWJsZUF0dHJzKEFyY2hpdmUgKmZvdXQs IFRhYmxlSW5mbyAqdGJsaW5mbywgaW50IG51bVRhYmxlcykKIAkgKiB3aXRob3V0IGEgbmFtZSk7 IGFsc28sIHN1Y2ggY2FzZXMgYXJlIG5ldmVyIE5PIElOSEVSSVQuCiAJICoKIAkgKiBXZSB0cmFj ayBpbiBub3RudWxsX2lzbG9jYWwgd2hldGhlciB0aGUgY29uc3RyYWludCB3YXMgZGVmaW5lZCBk aXJlY3RseQotCSAqIGluIHRoaXMgdGFibGUgb3IgdmlhIGFuIGFuY2VzdG9yLCBmb3IgYmluYXJ5 IHVwZ3JhZGUuICBmbGFnSW5oQXR0cnMKLQkgKiBtaWdodCBtb2RpZnkgdGhpcyBsYXRlciBmb3Ig c2VydmVycyBvbGRlciB0aGFuIDE4OyBpdCdzIGFsc28gaW4gY2hhcmdlCi0JICogb2YgZGV0ZXJt aW5pbmcgdGhlIGNvcnJlY3QgaW5oY291bnQuCisJICogaW4gdGhpcyB0YWJsZSBvciB2aWEgYW4g YW5jZXN0b3IsIGZvciBiaW5hcnkgdXBncmFkZS4gV2UgdHJhY2sKKwkgKiBub3RfbnVsbGluaGNv dW50IHRvIGRlY2lkZSB3aGV0aGVyIHRvIHJldGFpbiB0aGUgY29uc3RyYWludCBuYW1lIGZvcgor CSAqIG5vbi1iaW5hcnkgZHVtcC4gRm9yIHNlcnZlcnMgb2xkZXIgdGhhbiAxOCBmbGFnSW5oQXR0 cnMgbWlnaHQgbW9kaWZ5CisJICogbm90bnVsbF9pc2xvY2FsIGxhdGVyIGFuZCBhbHNvIGRldGVy bWluZSB0aGUgY29ycmVjdCBub3RfaW5oY291bnQuCiAJICovCiAJaWYgKGZvdXQtPnJlbW90ZVZl cnNpb24gPj0gMTgwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxLAogCQkJCQkJCSAiY28u Y29ubmFtZSBBUyBub3RudWxsX25hbWUsXG4iCiAJCQkJCQkJICJjby5jb25ub2luaGVyaXQgQVMg bm90bnVsbF9ub2luaGVyaXQsXG4iCi0JCQkJCQkJICJjby5jb25pc2xvY2FsIEFTIG5vdG51bGxf aXNsb2NhbCxcbiIpOworCQkJCQkJCSAiY28uY29uaXNsb2NhbCBBUyBub3RudWxsX2lzbG9jYWws XG4iCisJCQkJCQkJICJjby5jb25pbmhjb3VudCBBUyBub3RudWxsX2luaGNvdW50LFxuIik7CiAJ ZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxLAogCQkJCQkJCSAiQ0FTRSBXSEVOIGEuYXR0 bm90bnVsbCBUSEVOICcnIEVMU0UgTlVMTCBFTkQgQVMgbm90bnVsbF9uYW1lLFxuIgogCQkJCQkJ CSAiZmFsc2UgQVMgbm90bnVsbF9ub2luaGVyaXQsXG4iCi0JCQkJCQkJICJhLmF0dGlzbG9jYWwg QVMgbm90bnVsbF9pc2xvY2FsLFxuIik7CisJCQkJCQkJICJhLmF0dGlzbG9jYWwgQVMgbm90bnVs bF9pc2xvY2FsLFxuIgorCQkJCQkJCSAiMCBBUyBub3RudWxsX2luaGNvdW50LFxuIik7CiAKIAlp ZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNDAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHEsCkBAIC04OTM5LDYgKzg5NDMsNyBAQCBnZXRUYWJsZUF0dHJzKEFyY2hpdmUgKmZvdXQsIFRh YmxlSW5mbyAqdGJsaW5mbywgaW50IG51bVRhYmxlcykKIAlpX25vdG51bGxfbmFtZSA9IFBRZm51 bWJlcihyZXMsICJub3RudWxsX25hbWUiKTsKIAlpX25vdG51bGxfbm9pbmhlcml0ID0gUFFmbnVt YmVyKHJlcywgIm5vdG51bGxfbm9pbmhlcml0Iik7CiAJaV9ub3RudWxsX2lzbG9jYWwgPSBQUWZu dW1iZXIocmVzLCAibm90bnVsbF9pc2xvY2FsIik7CisJaV9ub3RudWxsX2luaGNvdW50ID0gUFFm bnVtYmVyKHJlcywgIm5vdG51bGxfaW5oY291bnQiKTsKIAlpX2F0dG9wdGlvbnMgPSBQUWZudW1i ZXIocmVzLCAiYXR0b3B0aW9ucyIpOwogCWlfYXR0Y29sbGF0aW9uID0gUFFmbnVtYmVyKHJlcywg ImF0dGNvbGxhdGlvbiIpOwogCWlfYXR0Y29tcHJlc3Npb24gPSBQUWZudW1iZXIocmVzLCAiYXR0 Y29tcHJlc3Npb24iKTsKQEAgLTkwMzQsNyArOTAzOSw3IEBAIGdldFRhYmxlQXR0cnMoQXJjaGl2 ZSAqZm91dCwgVGFibGVJbmZvICp0YmxpbmZvLCBpbnQgbnVtVGFibGVzKQogCQkJZGV0ZXJtaW5l Tm90TnVsbEZsYWdzKGZvdXQsIHJlcywgciwKIAkJCQkJCQkJICB0YmluZm8sIGosCiAJCQkJCQkJ CSAgaV9ub3RudWxsX25hbWUsIGlfbm90bnVsbF9ub2luaGVyaXQsCi0JCQkJCQkJCSAgaV9ub3Ru dWxsX2lzbG9jYWwpOworCQkJCQkJCQkgIGlfbm90bnVsbF9pc2xvY2FsLCBpX25vdG51bGxfaW5o Y291bnQpOwogCiAJCQl0YmluZm8tPmF0dG9wdGlvbnNbal0gPSBwZ19zdHJkdXAoUFFnZXR2YWx1 ZShyZXMsIHIsIGlfYXR0b3B0aW9ucykpOwogCQkJdGJpbmZvLT5hdHRjb2xsYXRpb25bal0gPSBh dG9vaWQoUFFnZXR2YWx1ZShyZXMsIHIsIGlfYXR0Y29sbGF0aW9uKSk7CkBAIC05MzM3LDE5ICs5 MzQyLDMxIEBAIGdldFRhYmxlQXR0cnMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvICp0YmxpbmZv LCBpbnQgbnVtVGFibGVzKQogICogMikgVGhlIGNvbHVtbiBoYXMgYSBjb25zdHJhaW50IHdpdGgg bm8gbmFtZSAodGhpcyBpcyB0aGUgY2FzZSB3aGVuCiAgKiAgICBjb25zdHJhaW50cyBjb21lIGZy b20gcHJlLTE4IHNlcnZlcnMpLiAgSW4gdGhpcyBjYXNlLCAtPm5vdG51bGxfY29uc3RycwogICog ICAgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmc7IGR1bXBUYWJsZVNjaGVtYSB3aWxsIHByaW50 IGp1c3QgIk5PVCBOVUxMIi4KLSAqIDMpIFRoZSBjb2x1bW4gaGFzIGEgY29uc3RyYWludCB3aXRo IGEga25vd24gbmFtZTsgaW4gdGhhdCBjYXNlCisgKiAzKSBUaGUgY29sdW1uIGhhcyBhIGNvbnN0 cmFpbnQgd2l0aCBkZWZhdWx0ICh0YWJsZV9jb2x1bW5fbm90X251bGwpIG5hbWU7CisgKiAgICB0 aGVyZSdzIG5vIG5lZWQgdG8gcHJpbnQgdGhhdCBuYW1lIGluIHRoZSBkdW1wLCBzbyBub3RudWxs X2NvbnN0cnMgaXMKKyAqICAgIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGFuZCBpdCBiZWhhdmVz IGFzIHRoZSBjYXNlIDIgYWJvdmUuCisgKiA0KSBUaGUgY29sdW1uIGhhcyBhIGNvbnN0cmFpbnQg d2l0aCBhIG5vbi1kZWZhdWx0IG5hbWU7IGluIHRoYXQgY2FzZQogICogICAgbm90bnVsbF9jb25z dHJzIGNhcnJpZXMgdGhhdCBuYW1lIGFuZCBkdW1wVGFibGVTY2hlbWEgd2lsbCBwcmludAotICog ICAgIkNPTlNUUkFJTlQgdGhlX25hbWUgTk9UIE5VTEwiLiAgSG93ZXZlciwgaWYgdGhlIG5hbWUg aXMgdGhlIGRlZmF1bHQKLSAqICAgICh0YWJsZV9jb2x1bW5fbm90X251bGwpLCB0aGVyZSdzIG5v IG5lZWQgdG8gcHJpbnQgdGhhdCBuYW1lIGluIHRoZSBkdW1wLAotICogICAgc28gbm90bnVsbF9j b25zdHJzIGlzIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGFuZCBpdCBiZWhhdmVzIGFzIHRoZSBj YXNlCi0gKiAgICBhYm92ZS4KKyAqICAgICJDT05TVFJBSU5UIHRoZV9uYW1lIE5PVCBOVUxMIi4K ICAqCi0gKiBJbiBhIGNoaWxkIHRhYmxlIHRoYXQgaW5oZXJpdHMgZnJvbSBhIHBhcmVudCBhbHJl YWR5IGNvbnRhaW5pbmcgTk9UIE5VTEwKLSAqIGNvbnN0cmFpbnRzIGFuZCB0aGUgY29sdW1ucyBp biB0aGUgY2hpbGQgZG9uJ3QgaGF2ZSB0aGVpciBvd24gTk9UIE5VTEwKLSAqIGRlY2xhcmF0aW9u cywgd2Ugc3VwcHJlc3MgcHJpbnRpbmcgY29uc3RyYWludHMgaW4gdGhlIGNoaWxkOiB0aGUKLSAq IGNvbnN0cmFpbnRzIGFyZSBhY3F1aXJlZCBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGNoaWxkIGlz IGF0dGFjaGVkIHRvIHRoZQotICogcGFyZW50LiAgVGhpcyBpcyB0cmFja2VkIGluIC0+bm90bnVs bF9pbmggKHdoaWNoIGlzIHNldCBpbiBmbGFnSW5oQXR0cnMgZm9yCi0gKiBzZXJ2ZXJzIHByZS0x OCkuCisgKiBOT1QgTlVMTCBjb25zdHJhaW50cyBvbiB0aGUgY2hpbGQgdGFibGUgcmVxdWlyZSBh ZGRpdGlvbmFsIHJ1bGVzIGFzIGJlbG93OgorICogQSkgSW4gYSBjaGlsZCB0YWJsZSB0aGF0IGlu aGVyaXRzIGZyb20gYSBwYXJlbnQgYWxyZWFkeSBjb250YWluaW5nIE5PVCBOVUxMCisgKiAgICBj b25zdHJhaW50cyBhbmQgdGhlIGNvbHVtbnMgaW4gdGhlIGNoaWxkIGRvbid0IGhhdmUgdGhlaXIg b3duIE5PVCBOVUxMCisgKiAgICBkZWNsYXJhdGlvbnMsIHdlIHN1cHByZXNzIHByaW50aW5nIGNv bnN0cmFpbnRzIGluIHRoZSBjaGlsZDogdGhlCisgKiAgICBjb25zdHJhaW50cyBhcmUgYWNxdWly ZWQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBjaGlsZCBpcyBhdHRhY2hlZCB0byB0aGUKKyAqICAg IHBhcmVudC4gVGhpcyBpcyB0cmFja2VkIGluIC0+bm90bnVsbF9sb2NhbCAod2hpY2ggaXMgc2V0 IGluIGZsYWdJbmhBdHRycworICogICAgZm9yIHNlcnZlcnMgcHJlLTE4KS4KKyAqIEIpIEEgY29s dW1uIGhhcyBhIGxvY2FsIE5PVCBOVUxMIGNvbnN0cmFpbnQsIHdpdGggbm9uLWRlZmF1bHQgbmFt ZSwgd2hpY2ggaXMKKyAqICAgIGFsc28gaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudC4gVGhpcyBj YXNlIGlzIHRyZWF0ZWQgc2FtZSBhcyB0aGUgY2FzZSA0CisgKiAgICBhYm92ZS4gQnV0IGlmIHRo ZSBjb2x1bW4gd2lsbCBub3QgYmUgcHJpbnRlZCBpbiBDUkVBVEUgVEFCTEUgY29tbWFuZCwgd2UK KyAqICAgIHdpbGwgcHJpbnQgYSBzZXBhcmF0ZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJ TlQgLi4uIGNvbW1hbmQgdG8KKyAqICAgIHJlbmFtZSB0aGUgY29uc3RyYWludCBhbmQgY29udmVy dCBpdCB0byBsb2NhbCBjb25zdHJhaW50LgorICogQykgQSBjb2x1bW4gaGFzIGEgbG9jYWwgTk9U IE5VTEwgY29uc3RyYWludCwgd2l0aCB0aGUgZGVmYXVsdCBuYW1lLCB3aGljaCBpcworICogICAg YWxzbyBpbmhlcml0ZWQgZnJvbSBhIHBhcmVudC4gVGhpcyBjYXNlIGlzIHRyZWF0ZWQgYXMgY2Fz ZSBCIGluc3RlYWQgb2YKKyAqICAgIGNhc2UgMyBpZiB0aGUgY29sdW1uIHdpbGwgbm90IGJlIHBy aW50ZWQgaW4gQ1JFQVRFIFRBQkxFIGNvbW1hbmQuIFRoZQorICogICAgY2hpbGQgd291bGQgaW5o ZXJpdCB0aGUgY29uc3RyYWludCB3aXRoIHBhcmVudCBjb25zdHJhaW50IG5hbWUgd2hlbgorICog ICAgYXR0YWNoZWQuIEl0IG5lZWRzIHRvIGJlIHJlbmFtZWQgYW5kIGNvbnZlcnRlZCB0byBhIGxv Y2FsIGNvbnN0cmFpbnQKKyAqICAgIGxhdGVyIHVzaW5nIHNhbWUgRERMIGFzIGNhc2UgQi4KICAq CiAgKiBBbnkgb2YgdGhlc2UgY29uc3RyYWludHMgbWlnaHQgaGF2ZSB0aGUgTk8gSU5IRVJJVCBi aXQuICBJZiBzbyB3ZSBzZXQKICAqIC0+bm90bnVsbF9ub2luaCBhbmQgTk8gSU5IRVJJVCB3aWxs IGJlIHByaW50ZWQgYnkgZHVtcFRhYmxlU2NoZW1hLgpAQCAtOTM2Myw5ICs5MzgwLDEwIEBAIHN0 YXRpYyB2b2lkCiBkZXRlcm1pbmVOb3ROdWxsRmxhZ3MoQXJjaGl2ZSAqZm91dCwgUEdyZXN1bHQg KnJlcywgaW50IHIsCiAJCQkJCSAgVGFibGVJbmZvICp0YmluZm8sIGludCBqLAogCQkJCQkgIGlu dCBpX25vdG51bGxfbmFtZSwgaW50IGlfbm90bnVsbF9ub2luaGVyaXQsCi0JCQkJCSAgaW50IGlf bm90bnVsbF9pc2xvY2FsKQorCQkJCQkgIGludCBpX25vdG51bGxfaXNsb2NhbCwgaW50IGlfbm90 bnVsbF9pbmhjb3VudCkKIHsKIAlEdW1wT3B0aW9ucyAqZG9wdCA9IGZvdXQtPmRvcHQ7CisJaW50 CQkJaW5oY291bnQ7CiAKIAkvKgogCSAqIG5vdG51bGxfbm9pbmggaXMgc3RyYWlnaHQgZnJvbSB0 aGUgcXVlcnkgcmVzdWx0LiBub3RudWxsX2lzbG9jYWwgYWxzbywKQEAgLTkzNzMsNiArOTM5MSw3 IEBAIGRldGVybWluZU5vdE51bGxGbGFncyhBcmNoaXZlICpmb3V0LCBQR3Jlc3VsdCAqcmVzLCBp bnQgciwKIAkgKi8KIAl0YmluZm8tPm5vdG51bGxfbm9pbmhbal0gPSBQUWdldHZhbHVlKHJlcywg ciwgaV9ub3RudWxsX25vaW5oZXJpdClbMF0gPT0gJ3QnOwogCXRiaW5mby0+bm90bnVsbF9pc2xv Y2FsW2pdID0gUFFnZXR2YWx1ZShyZXMsIHIsIGlfbm90bnVsbF9pc2xvY2FsKVswXSA9PSAndCc7 CisJaW5oY291bnQgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCByLCBpX25vdG51bGxfaW5oY291bnQp KTsKIAogCS8qCiAJICogRGV0ZXJtaW5lIGEgY29uc3RyYWludCBuYW1lIHRvIHVzZS4gIElmIHRo ZSBjb2x1bW4gaXMgbm90IG1hcmtlZCBub3QtCkBAIC05NDE1LDcgKzk0MzQsOSBAQCBkZXRlcm1p bmVOb3ROdWxsRmxhZ3MoQXJjaGl2ZSAqZm91dCwgUEdyZXN1bHQgKnJlcywgaW50IHIsCiAJCQkJ LyogWFhYIHNob3VsZCBtYXRjaCBDaG9vc2VDb25zdHJhaW50TmFtZSBiZXR0ZXIgKi8KIAkJCQlk ZWZhdWx0X25hbWUgPSBwc3ByaW50ZigiJXNfJXNfbm90X251bGwiLCB0YmluZm8tPmRvYmoubmFt ZSwKIAkJCQkJCQkJCQl0YmluZm8tPmF0dG5hbWVzW2pdKTsKLQkJCQlpZiAoc3RyY21wKGRlZmF1 bHRfbmFtZSwKKworCQkJCWlmICgoaW5oY291bnQgPD0gMCB8fCBzaG91bGRQcmludENvbHVtbihk b3B0LCB0YmluZm8sIGopKSAmJgorCQkJCQlzdHJjbXAoZGVmYXVsdF9uYW1lLAogCQkJCQkJICAg UFFnZXR2YWx1ZShyZXMsIHIsIGlfbm90bnVsbF9uYW1lKSkgPT0gMCkKIAkJCQkJdGJpbmZvLT5u b3RudWxsX2NvbnN0cnNbal0gPSAiIjsKIAkJCQllbHNlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfY29uc3Ry YWludC5oCmluZGV4IDRiNDQ3NjczOGEyLi4zYTg0MjQwMjQ1MiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19jb25zdHJhaW50LmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19jb25zdHJhaW50LmgKQEAgLTI1MCw3ICsyNTAsNyBAQCBleHRlcm4gT2lkCUNyZWF0ZUNvbnN0 cmFpbnRFbnRyeShjb25zdCBjaGFyICpjb25zdHJhaW50TmFtZSwKIAkJCQkJCQkJICBib29sIGNv blBlcmlvZCwKIAkJCQkJCQkJICBib29sIGlzX2ludGVybmFsKTsKIAotZXh0ZXJuIGJvb2wgQ29u c3RyYWludE5hbWVJc1VzZWQoQ29uc3RyYWludENhdGVnb3J5IGNvbkNhdCwgT2lkIG9iaklkLAor ZXh0ZXJuIE9pZAlDb25zdHJhaW50TmFtZUlzVXNlZChDb25zdHJhaW50Q2F0ZWdvcnkgY29uQ2F0 LCBPaWQgb2JqSWQsCiAJCQkJCQkJCSBjb25zdCBjaGFyICpjb25uYW1lKTsKIGV4dGVybiBib29s IENvbnN0cmFpbnROYW1lRXhpc3RzKGNvbnN0IGNoYXIgKmNvbm5hbWUsIE9pZCBuYW1lc3BhY2Vp ZCk7CiBleHRlcm4gY2hhciAqQ2hvb3NlQ29uc3RyYWludE5hbWUoY29uc3QgY2hhciAqbmFtZTEs IGNvbnN0IGNoYXIgKm5hbWUyLApAQCAtMjYyLDcgKzI2Miw4IEBAIGV4dGVybiBIZWFwVHVwbGUg ZmluZE5vdE51bGxDb25zdHJhaW50KE9pZCByZWxpZCwgY29uc3QgY2hhciAqY29sbmFtZSk7CiBl eHRlcm4gSGVhcFR1cGxlIGZpbmREb21haW5Ob3ROdWxsQ29uc3RyYWludChPaWQgdHlwaWQpOwog ZXh0ZXJuIEF0dHJOdW1iZXIgZXh0cmFjdE5vdE51bGxDb2x1bW4oSGVhcFR1cGxlIGNvbnN0clR1 cCk7CiBleHRlcm4gYm9vbCBBZGp1c3ROb3ROdWxsSW5oZXJpdGFuY2UoT2lkIHJlbGlkLCBBdHRy TnVtYmVyIGF0dG51bSwKLQkJCQkJCQkJCSBib29sIGlzX2xvY2FsLCBib29sIGlzX25vX2luaGVy aXQpOworCQkJCQkJCQkJIGJvb2wgaXNfbG9jYWwsIGJvb2wgaXNfbm9faW5oZXJpdCwKKwkJCQkJ CQkJCSBjaGFyICpjb25uYW1lLCBMaXN0ICoqbm5uYW1lcyk7CiBleHRlcm4gTGlzdCAqUmVsYXRp b25HZXROb3ROdWxsQ29uc3RyYWludHMoT2lkIHJlbGlkLCBib29sIGNvb2tlZCwKIAkJCQkJCQkJ CQkgICBib29sIGluY2x1ZGVfbm9pbmgpOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2NvbnN0cmFpbnRzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29u c3RyYWludHMub3V0CmluZGV4IDcxMjAwYzkwZWQzLi5kNTdiMWU3OWI2ZiAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5vdXQKKysrIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9jb25zdHJhaW50cy5vdXQKQEAgLTEyODUsNiArMTI4NSw0NyBAQCBO b3QtbnVsbCBjb25zdHJhaW50czoKICAgICAiYV9ubiIgTk9UIE5VTEwgImEiIChsb2NhbCwgaW5o ZXJpdGVkKQogSW5oZXJpdHM6IG5vdG51bGxfdGJsNAogCistLSBuYW1lZCBsb2NhbCBOT1QgTlVM TCBjb25zdHJhaW50cyBvbiBjaGlsZCB0YWJsZQorQ1JFQVRFIFRBQkxFIG5vdG51bGxfdGJsNF9j bGQ0ICgpIElOSEVSSVRTIChub3RudWxsX3RibDQpOworQUxURVIgVEFCTEUgbm90bnVsbF90Ymw0 X2NsZDQgQUREIENPTlNUUkFJTlQgZHVwX25hbWUgQ0hFQ0sgKGEgPiAyKTsKK0FMVEVSIFRBQkxF IG5vdG51bGxfdGJsNF9jbGQ0IEFERCBDT05TVFJBSU5UIGR1cF9uYW1lIE5PVCBOVUxMIGE7CitF UlJPUjogIGNvbnN0cmFpbnQgImR1cF9uYW1lIiBmb3IgcmVsYXRpb24gIm5vdG51bGxfdGJsNF9j bGQ0IiBhbHJlYWR5IGV4aXN0cworQUxURVIgVEFCTEUgbm90bnVsbF90Ymw0X2NsZDQgRFJPUCBD T05TVFJBSU5UIGR1cF9uYW1lOworQUxURVIgVEFCTEUgbm90bnVsbF90Ymw0X2NsZDQgQUREIENP TlNUUkFJTlQgdGJsNF9jbGQ0X2Ffbm4gTk9UIE5VTEwgYTsKK1dBUk5JTkc6ICByZW5hbWVkIGV4 aXN0aW5nIG5vbi1udWxsIGNvbnN0cmFpbnQgIm5vdG51bGxfdGJsNF9hX25vdF9udWxsIiBvZiBy ZWxhdGlvbiAibm90bnVsbF90Ymw0X2NsZDQiIHRvICJ0Ymw0X2NsZDRfYV9ubiIKK0FMVEVSIFRB QkxFIG5vdG51bGxfdGJsNF9jbGQ0IEFERCBDT05TVFJBSU5UIHRibDRfY2xkNF9hX25uMiBOT1Qg TlVMTCBhOworXGQrIG5vdG51bGxfdGJsNF9jbGQ0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRhYmxlICJwdWJsaWMubm90bnVsbF90Ymw0X2NsZDQiCisgQ29sdW1uIHwgIFR5cGUgICB8 IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgfCBTdGF0cyB0YXJnZXQg fCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGEgICAg ICB8IGludGVnZXIgfCAgICAgICAgICAgfCBub3QgbnVsbCB8ICAgICAgICAgfCBwbGFpbiAgIHwg ICAgICAgICAgICAgIHwgCitOb3QtbnVsbCBjb25zdHJhaW50czoKKyAgICAidGJsNF9jbGQ0X2Ff bm4iIE5PVCBOVUxMICJhIiAobG9jYWwsIGluaGVyaXRlZCkKK0luaGVyaXRzOiBub3RudWxsX3Ri bDQKKworLS0gYWRkaW5nIE5PVCBOVUxMIGNvbnN0cmFpbnQgd2l0aCB0aGUgc2FtZSBuYW1lIGFz IHRoZSBleGlzdGluZyBvbmUgaXMgbm9vcAorQUxURVIgVEFCTEUgbm90bnVsbF90Ymw0X2NsZDQg QUREIENPTlNUUkFJTlQgdGJsNF9jbGQ0X2Ffbm4gTk9UIE5VTEwgYTsKK1xkKyBub3RudWxsX3Ri bDRfY2xkNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAicHVibGljLm5vdG51 bGxfdGJsNF9jbGQ0IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRpb24gfCBOdWxsYWJsZSB8 IERlZmF1bHQgfCBTdG9yYWdlIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAg IHwgbm90IG51bGwgfCAgICAgICAgIHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAorTm90LW51 bGwgY29uc3RyYWludHM6CisgICAgInRibDRfY2xkNF9hX25uIiBOT1QgTlVMTCAiYSIgKGxvY2Fs LCBpbmhlcml0ZWQpCitJbmhlcml0czogbm90bnVsbF90Ymw0CisKKy0tIHVubmFtZWQgbG9jYWwg Tk9UIE5VTEwgY29uc3RyYWludCBvbiBjaGlsZCB0YWJsZQorQ1JFQVRFIFRBQkxFIG5vdG51bGxf dGJsNF9jbGQ1ICgpIElOSEVSSVRTIChub3RudWxsX3RibDQpOworQUxURVIgVEFCTEUgbm90bnVs bF90Ymw0X2NsZDUgQUxURVIgQ09MVU1OIGEgU0VUIE5PVCBOVUxMOworXGQrIG5vdG51bGxfdGJs NF9jbGQ1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlICJwdWJsaWMubm90bnVs bF90Ymw0X2NsZDUiCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwg RGVmYXVsdCB8IFN0b3JhZ2UgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAgICAg fCBub3QgbnVsbCB8ICAgICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwgCitOb3QtbnVs bCBjb25zdHJhaW50czoKKyAgICAibm90bnVsbF90Ymw0X2Ffbm90X251bGwiIE5PVCBOVUxMICJh IiAobG9jYWwsIGluaGVyaXRlZCkKK0luaGVyaXRzOiBub3RudWxsX3RibDQKKwogLS0gbGVhdmUg dGhlc2UgdGFibGVzIGFyb3VuZCBmb3IgcGdfdXBncmFkZSB0ZXN0aW5nCiAtLSBJdCdzIHBvc3Np YmxlIHRvIHJlbW92ZSBhIGNvbnN0cmFpbnQgZnJvbSBwYXJlbnRzIHdpdGhvdXQgYWZmZWN0aW5n IGNoaWxkcmVuCiBDUkVBVEUgVEFCTEUgbm90bnVsbF90Ymw1IChhIGludCBDT05TVFJBSU5UIGFu biBOT1QgTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRz LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0cmFpbnRzLnNxbAppbmRleCBlNjA3ZWIx ZmRkYi4uMTdmMGMxMWM4NTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NvbnN0 cmFpbnRzLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jb25zdHJhaW50cy5zcWwKQEAg LTc2Niw2ICs3NjYsMjMgQEAgQ1JFQVRFIFRBQkxFIG5vdG51bGxfdGJsNF9jbGQzIChQUklNQVJZ IEtFWSAoYSkgREVGRVJSQUJMRSwgQ09OU1RSQUlOVCBhX25uIE5PVAogXGQrIG5vdG51bGxfdGJs NF9jbGQKIFxkKyBub3RudWxsX3RibDRfY2xkMgogXGQrIG5vdG51bGxfdGJsNF9jbGQzCisKKy0t IG5hbWVkIGxvY2FsIE5PVCBOVUxMIGNvbnN0cmFpbnRzIG9uIGNoaWxkIHRhYmxlCitDUkVBVEUg VEFCTEUgbm90bnVsbF90Ymw0X2NsZDQgKCkgSU5IRVJJVFMgKG5vdG51bGxfdGJsNCk7CitBTFRF UiBUQUJMRSBub3RudWxsX3RibDRfY2xkNCBBREQgQ09OU1RSQUlOVCBkdXBfbmFtZSBDSEVDSyAo YSA+IDIpOworQUxURVIgVEFCTEUgbm90bnVsbF90Ymw0X2NsZDQgQUREIENPTlNUUkFJTlQgZHVw X25hbWUgTk9UIE5VTEwgYTsKK0FMVEVSIFRBQkxFIG5vdG51bGxfdGJsNF9jbGQ0IERST1AgQ09O U1RSQUlOVCBkdXBfbmFtZTsKK0FMVEVSIFRBQkxFIG5vdG51bGxfdGJsNF9jbGQ0IEFERCBDT05T VFJBSU5UIHRibDRfY2xkNF9hX25uIE5PVCBOVUxMIGE7CitBTFRFUiBUQUJMRSBub3RudWxsX3Ri bDRfY2xkNCBBREQgQ09OU1RSQUlOVCB0Ymw0X2NsZDRfYV9ubjIgTk9UIE5VTEwgYTsKK1xkKyBu b3RudWxsX3RibDRfY2xkNAorLS0gYWRkaW5nIE5PVCBOVUxMIGNvbnN0cmFpbnQgd2l0aCB0aGUg c2FtZSBuYW1lIGFzIHRoZSBleGlzdGluZyBvbmUgaXMgbm9vcAorQUxURVIgVEFCTEUgbm90bnVs bF90Ymw0X2NsZDQgQUREIENPTlNUUkFJTlQgdGJsNF9jbGQ0X2Ffbm4gTk9UIE5VTEwgYTsKK1xk KyBub3RudWxsX3RibDRfY2xkNAorLS0gdW5uYW1lZCBsb2NhbCBOT1QgTlVMTCBjb25zdHJhaW50 IG9uIGNoaWxkIHRhYmxlCitDUkVBVEUgVEFCTEUgbm90bnVsbF90Ymw0X2NsZDUgKCkgSU5IRVJJ VFMgKG5vdG51bGxfdGJsNCk7CitBTFRFUiBUQUJMRSBub3RudWxsX3RibDRfY2xkNSBBTFRFUiBD T0xVTU4gYSBTRVQgTk9UIE5VTEw7CitcZCsgbm90bnVsbF90Ymw0X2NsZDUKKwogLS0gbGVhdmUg dGhlc2UgdGFibGVzIGFyb3VuZCBmb3IgcGdfdXBncmFkZSB0ZXN0aW5nCiAKIC0tIEl0J3MgcG9z c2libGUgdG8gcmVtb3ZlIGEgY29uc3RyYWludCBmcm9tIHBhcmVudHMgd2l0aG91dCBhZmZlY3Rp bmcgY2hpbGRyZW4KLS0gCjIuMzQuMQoK --0000000000006d75d70627e367cf--