Re: Spamitarium changes
Jonathan Kamens <[email protected]> Mon, 11 Sep 2017 15:13:05 -0400
| Newsgroups | gmane.mail.bogofilter.devel |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------6BFAAE5395E3EC2315D7B035 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit That's fine with me. I've attached my current version. jik On 09/11/2017 12:23 PM, Matthias Andree wrote: > Am 11.09.2017 um 18:15 schrieb Jonathan Kamens: >> Hi, >> >> I've got a bunch of backward-compatible improvements and fixes that I've >> made to spamitarium over the years. I emailed Tom Anderson many years >> ago and asked him to incorporate them into his new version and put out a >> new release, but he never responded.. I emailed him again recently to >> ask if he's still maintaining spamitarium and would accept my patches, >> and again no response. >> >> Can I submit these changes to be included in the version of spamitarium >> shipped with bogofilter? I'd rather not have to keep maintaining my own >> fork of spamitarium rather than using the one that ships with bogofilter. >> >> jik > Hi Jonathan, > > I am Cc:ing Tom to see if he'll respond to me instead, in case there > were transmission issues. > > I don't have strong feelings either way, and propose to take a pragmatic > approach, and just offer your updated version > in addition to Tom's original one so people can see and choose, and we > solicit feedback. > > If people want the original version, both can be kept available, and > unless we have strong input that people want to keep both around, we can > drop the ancestral version at some point. > > What do you think? > > Regards, > Matthias > > _______________________________________________ > bogofilter-dev mailing list > [email protected] > https://www.bogofilter.org/mailman/listinfo/bogofilter-dev > --------------6BFAAE5395E3EC2315D7B035 Content-Type: text/plain; name="jiks-spamitarium.pl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="jiks-spamitarium.pl.txt" IyEvdXNyL2Jpbi9wZXJsIC1UdwpyZXF1aXJlIDUuMDA2XzAwMTsKdXNlIHN0cmljdDsKCiMg VGhpcyBpcyBhIGZvcmsgb2YgVG9tIEFuZGVyc29uJ3Mgc3BhbWl0YXJpdW0ucGwgYnkgSm9u YXRoYW4gS2FtZW5zCiMgPGppa0BrYW1lbnMudXM+LiBUaGUgY2hhbmdlcyBoZXJlIGhhdmUg YmVlbiBzdWJtaXR0ZWQgYmFjayB0byBUb20gQW5kZXJzb24KIyBmb3IgaW5jb3Jwb3JhdGlv biBpbnRvIGhpcyBtYXN0ZXIgdmVyc2lvbi4gSW4gdGhlIG1lYW50aW1lLCB5b3UgbWF5IHdp c2ggdG8KIyB1c2UgdGhpcyB2ZXJzaW9uIGluc3RlYWQuIEhlcmUgYXJlIHRoZSBjaGFuZ2Vz IGluIGl0OgojCiMgKiBDb21tYW5kLWxpbmUgcGFyc2luZyBoYXMgYmVlbiB1cGRhdGVkIHRv IHVzZSB0aGUgc3RhbmRhcmQgUGVybCBHZXRvcHQ6OkxvbmcKIyAgIHN5bnRheCwgd2hpbGUg Y29udGludWluZyB0byBzdXBwb3J0IHRoZSAiYnVuZGxlZCIgb3B0aW9ucyBzeW50YXggc3Vw cG9ydGVkCiMgICBieSBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgc2NyaXB0LgojICogT3B0 aW9ucyBoYXZlIGJlZW4gYWRkZWQgdG8gc3BlY2lmeSBpbmZvcm1hdGlvbiB0aGF0IG1heSBi ZSBtaXNzaW5nIGZyb20gdGhlCiMgICBtZXNzYWdlIGhlYWRlciwgc3BlY2lmaWNhbGx5IGZv ciB3aGVuIHNwYW1pdGFyaXVtIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGEKIyAgIE1pbHRlciBh bmQgdGhlcmVmb3JlIHRoZSBtZXNzYWdlIGRvZXMgbm90IHlldCBoYXZlIHRoZSBSZXR1cm4t UGF0aCBvciBsb2NhbAojICAgUmVjZWl2ZWQgbGluZXMgdGhhdCB3aWxsIGJlIGluc2VydGVk IGJ5IHRoZSBNVEEgYmVmb3JlIGZpbmFsIGRlbGl2ZXJ5LiBTZWUKIyAgIHRoZSBkb2N1bWVu dGF0aW9uIGJlbG93IGZvciB0aGUgb3B0aW9ucyAtLXJldHVybi1wYXRoLCAtLW5vLWxvY2Fs LXJlY2VpdmVkLAojICAgLS1yZW1vdGUtaXAsIC0tcmVtb3RlLW5hbWUsIC0taGVsbywgLS1s b2NhbC1pcCwgLS1sb2NhbC1uYW1lLCAtLXJjcHQsIGFuZAojICAgLS1hZGQtbG9jYWwtcmVj ZWl2ZWQuCiMgKiBUeXBvcyBhbmQgc3VjaCBoYXZlIGJlZW4gY2xlYW5lZCB1cCBpbiB0aGUg ZG9jdW1lbnRhdGlvbi4KIyAqIEEgZGF0ZS1wYXJzaW5nIGJ1ZyB3aGljaCB3YXMgY2F1c2lu ZyB0aGUgdGltZSB6b25lIHRvIGJlIGlnbm9yZWQsIHRodXMKIyAgIGNhdXNpbmcgdGhlIFgt RGF0ZS1DaGVjayBoZWFkZXIgdG8gcmVwb3J0IGFuIGluYWNjdXJhdGUgZGVsdGEsIGhhcyBi ZWVuCiMgICBmaXhlZC4KIyAqIEEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIHNwYW1pdGFyaXVt IHRvIGNyYXNoIHVwb24gZW5jb3VudGVyaW5nIGEgZmFyIGludG8KIyAgIHRoZSBmdXR1cmUg ZGF0ZSBpbiB0aGUgbWVzc2FnZSBoZWFkZXIgaGFzIGJlZW4gZml4ZWQuCiMgKiBBIGJ1ZyB3 aGljaCB3YXMgY2F1c2luZyBzb21lIGRvbWFpbiBuYW1lcyB0byBiZSB0cnVuY2F0ZWQgKGUu Zy4sCiMgICAib210YTAxLW1kcC53ZXN0Y2hlc3Rlci5wYS5iby5jb21jYXN0Lm5ldCIgYmVj YW1lICJvbXRhMDEtbWRwLndlc3QiKSBoYXMKIyAgIGJlZW4gZml4ZWQuCiMgKiBBIGNvdXBs ZSBvZiBQZXJsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3MgaGF2ZSBiZWVuIGZp eGVkLgojICogTWFpbDo6U1BGIGlzIHVzZWQgbm93IGluc3RlYWQgb2YgTWFpbDo6U1BGOjpR dWVyeSwgZm9yIElQdjYgc3VwcG9ydC4KIyAqIENvZGUgaGFzIGJlZW4gYWRkZWQgdG8gd29y ayBhcm91bmQgdGhlIGZhY3QgdGhhdCBzb21lIGVtYWlscyBnZW5lcmF0ZWQgYnkKIyAgIENv bnN0YW50IENvbnRhY3QgaGF2ZSBDUiByYXRoZXIgdGhhbiBDUkxGIGF0IHRoZSBlbmQgb2Yg dGhlaXIgRGF0ZTogaGVhZGVyCiMgICBsaW5lcyAodGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMg d29ya2Fyb3VuZCBmb3IgYSB2ZXJ5IHNwZWNpZmljIHByb2JsZW0KIyAgIGJlY2F1c2UgdGVj aG5pY2FsbHkgdGhlIHdvcmthcm91bmQgaXMgYSB2aW9sYXRpb24gb2YgdGhlIFNNVFAgUkZD LCB0aG91Z2gKIyAgIG5vYm9keSBlbHNlIHNlZW1zIHRvIGNhcmUgYWJvdXQgdGhhdC4gOi0v KS4KCj1oZWFkMSBOQU1FCgpTcGFtaXRhcml1bSAtIGV2YWx1YXRlcyBhbmQgcmVwYWlycyB0 aGUgc2FuaXR5IG9mIGVtYWlsIGhlYWRlcnMuLi4KCj1jdXQKCm15ICR2ZXJzaW9uID0gIjAu NC4wIjsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwojIyMjIyMjIyMjIyMjIyMgQ29weWxlZnQgTm90aWNlICMjIyMjIyMjIyMjIyMjIyMKIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIENvcHly aWdodCCpIDIwMDQgT3JkZXIgYW1pZCBDaGFvcywgSW5jLgojIEF1dGhvcjogVG9tIEFuZGVy c29uIAojIG5lbytzcGFtaXRhcml1bUBvcmRlcmFtaWRjaGFvcy5jb20KIyAKIyBUaGlzIHBy b2dyYW0gaXMgb3Blbi1zb3VyY2Ugc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IAojIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgCiMgTGljZW5zZSwgdjIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIAojIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg CiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIwojIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyAKIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv OiAKIwojIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAKIyA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMAojIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyAgVVNBCiMKIyBodHRwOi8vd3d3Lmdu dS5vcmcvCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiMjIyMjIyMjIyMjIyMjIyMjIERvY3VtZW50YXRpb24gIyMjIyMjIyMjIyMjIyMjIyMK IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyB1 c2UgInBlcmxkb2Mgc3BhbWl0YXJpdW0iIG9yICJzcGFtaXRhcml1bSAtaCIgdG8gcmVhZCB0 aGlzCgo9aGVhZDEgU1lOT1BTSVMKCj1oZWFkMiBDb21tYW5kIGxpbmUgdXNhZ2U6CgpCPHNw YW1pdGFyaXVtPiBbSTxvcHRpb25zPl0gPCBbSTxyZmM4MjJfZW1haWw+XQoKPWhlYWQyIFBy b2NtYWlsIHVzYWdlIChyZWNvbW1lbmRlZCk6CgpBZGQgdG8geW91ciAucHJvY21haWxyYyB0 aGUgZm9sbG93aW5nIHJlY2lwZToKCiAgOjAKICB7CiAgICAgICAgOjAgZmh3CiAgICAgICAg fCBzcGFtaXRhcml1bSAtc3JlYWR4dHAKICAKICAgICAgICAjIGZpbHRlciB0aHJvdWdoIGJv Z29maWx0ZXIsIHRhZ2dpbmcgYXMgc3BhbSAKCSMgb3Igbm90IGFuZCB1cGRhdGluZyB0aGUg d29yZCBsaXN0cwogICAgICAgIDowIGZ3CiAgICAgICAgfCBib2dvZmlsdGVyIC11ZXAKCiAg ICAgICAgIyBhZGQgYmFjayB0aGUgIkZyb20iIGhlYWRlciBmb3IgcHJvcGVyIGRlbGl2ZXJ5 CiAgICAgICAgOjAgZmh3CiAgICAgICAgfCBmb3JtYWlsIC1JICJGcm9tICIgLWEgIkZyb20g IgogIH0KCj1oZWFkMiBDb21tYW5kIGxpbmUgb3B0aW9uczoKCj1vdmVyIDQKCj1pdGVtIEI8 LWg+CgpkaXNwbGF5IHRoaXMgaGVscCBmaWxlCgo9aXRlbSBCPC1zPiBbSTxwZXJtaXR0ZWRf aGVhZGVycz5dCgpBbGxvdyBzdGFuZGFyZCBmaWVsZHMgb25seSAoUkZDIDgyMi8yODIyLzEw NDkvMTM0MS8xNTIxLzIxODMvMTg2NCkgLi4uCmFsbCBvdGhlcnMgYXJlIHN0cmlwcGVkIGZy b20gdGhlIGVtYWlsLiAgVG8gZXhjbHVkZSBzb21lIGhlYWRlcnMgZnJvbQpzdHJpcHBpbmcs IHNwZWNpZnkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBhcyBhbiBhcmd1bWVudCB0byB0aGlz Cm9wdGlvbi4KCj1pdGVtIEI8LXI+CgppbnNlcnQgbmV3IHJlY2VpdmVkIGxpbmUgY29udGFp bmluZyB2ZXJpZmllZCByZWNlaXZlZC1saW5lIHRva2VucwoKPWl0ZW0gQjwtZT4KCmluY2x1 ZGUgaGVsbyBzdHJpbmcgaW4gcmVjZWl2ZWQgbGluZQoKPWl0ZW0gQjwtZD4KCmFsbG93IERO UyBsb29rdXBzIChmb3J3YXJkIGFuZCByZXZlcnNlKSB0byBoZWxwIGZpbGwgaW4gYWxsIApu ZWNlc3NhcnkgcmVjZWl2ZWQgZmllbGRzCgo9aXRlbSBCPC1mPgoKZm9yY2UgckROUyBsb29r dXBzIGV2ZW4gd2hlbiBwcm92aWRlZCBhbHJlYWR5IGJ5IHRoZSBNVEEKCj1pdGVtIEI8LWE+ CgpwZXJmb3JtIEFTTiBsb29rdXBzIGFuZCBpbmNsdWRlIGluIHJlY2VpdmVkIGxpbmVzCgo9 aXRlbSBCPC1wPgoKcGVyZm9ybSBTUEYgbG9va3VwcyBhbmQgaW5jbHVkZSBpbiByZWNlaXZl ZCBsaW5lcwoKPWl0ZW0gQjwteD4KCmluY2x1ZGUgY3VzdG9tIHgtaGVhZGVycyBmb3IgYWRk aXRpb25hbCBoZWFkZXIgdmFsaWRhdGlvbnM6Cgo9aXRlbSBCPC10PgoKdmFsaWRhdGUgdGhh dCB0aGUgZGF0ZSBoZWFkZXIgaXMgd2l0aGluIGNsb3NlIHByb3hpbWl0eSB0byB0aGUgCnJl Y2VpdmVkIGRhdGUgKHNlZSAkZGF0ZV9saW1pdCBnbG9iYWwgdmFyaWFibGUgdG8gY29uZmln dXJlKQoKPWl0ZW0gQjwtdz4KCnBhcnNlIGFuZCBkaXNwbGF5IHRoZSBib2R5IG9mIHRoZSBl bWFpbCBpbiBhZGRpdGlvbiB0byB0aGUgaGVhZGVycwoKPWl0ZW0gQjwtYj4KCmRpc3BsYXkg YmVuY2htYXJraW5nIGluZm8KCj1pdGVtIEI8LS1yZXR1cm4tcGF0aD4gSTxhZGRyPgoKU3Bl Y2lmeSB0aGUgc2VuZGVyIG9mIHRoZSBlbWFpbCBmb3IgU1BGIGxvb2t1cHMsIG92ZXJyaWRp bmcgdGhlCiJSZXR1cm4tUGF0aCIgZmllbGQuCgo9aXRlbSBCPC0tbm8tbG9jYWwtcmVjZWl2 ZWQ+CgpUZWxsIHNwYW1pdGFyaXVtIHRoYXQgdGhlcmUgaXMgbm8gUmVjZWl2ZWQgbGluZSBp biB0aGUgbWVzc2FnZSBmcm9tCnRoZSBsb2NhbCBtYWlsZXIsIGUuZy4sIGJlY2F1c2Ugc3Bh bWl0YXJpdW0gaXMgYmVpbmcgY2FsbGVkIGZyb20KaW5zaWRlIGEgTWlsdGVyLgoKVGhlIGZv bGxvd2luZyBvcHRpb25zIGFyZSBvbmx5IHVzZWQgd2hlbiBCPC0tbm8tbG9jYWwtcmVjZWl2 ZWQ+IGlzCnNwZWNpZmllZC4KCj1vdmVyIDQKCj1pdGVtIEI8LS1yZW1vdGUtaXA+IEk8aXAt YWRkcmVzcz4KClNwZWNpZnkgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHJlbW90ZSBzZXJ2ZXIg c2VuZGluZyB0aGUgZW1haWwuCgo9aXRlbSBCPC0tcmVtb3RlLW5hbWU+IEk8aXAtYWRkcmVz cz4KClNwZWNpZnkgdGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVtb3RlIHNlcnZlciBzZW5kaW5n IHRoZSBlbWFpbCwgYXMKZGV0ZXJtaW5lZCBieSBhIHJldmVyc2UgRE5TIGxvb2t1cCBvZiBp dHMgSVAgYWRkcmVzcy4KCj1pdGVtIEI8LS1oZWxvPiBJPGhvc3QtbmFtZT4KClNwZWNpZnkg dGhlIGhvc3QgbmFtZSBzZW50IGJ5IHRoZSByZW1vdGUgc2VydmVyIGluIHRoZSBTTVRQIEhF TE8gKG9yCkVITE8pIGNvbW1hbmQuCgo9aXRlbSBCPC0tbG9jYWwtaXA+IEk8aXAtYWRkcmVz cz4KClNwZWNpZnkgdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHNlcnZlciByZWNlaXZpbmcgdGhl IGVtYWlsLgoKPWl0ZW0gQjwtLWxvY2FsLW5hbWU+IEk8aG9zdC1uYW1lPgoKU3BlY2lmeSB0 aGUgaG9zdCBuYW1lIG9mIHRoZSBzZXJ2ZXIgcmVjZWl2aW5nIHRoZSBlbWFpbC4KCj1pdGVt IEI8LS1yY3B0PiBJPGVtYWlsLWFkZHJlc3M+CgpTcGVjaWZ5IHRoZSBlbnZlbG9wZSBhZGRy ZXNzIG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIGVtYWlsLgoKPWl0ZW0gQjwtLWFkZC1sb2Nh bC1yZWNlaXZlZD4KCkluZGljYXRlIHRoYXQgc3BhbWl0YXJpdW0gc2hvdWxkIGFkZCBhbiBh dXRvLWdlbmVyYXRlZCBsb2NhbCBSZWNlaXZlZApsaW5lLgoKPWJhY2sKCj1iYWNrCgoKPWhl YWQyIFVzZXItZGVmaW5lZCBoZWFkZXIgZmllbGQgbGlzdDoKCklmIHVzaW5nIHRoZSBCPHM+ IG9wdGlvbiwgeW91IG1heSB3YW50IHRvIGFsbG93IGNlcnRhaW4gaGVhZGVyIGZpZWxkcwpv dGhlciB0aGFuIHRob3NlIHNwZWNpZmllZCBieSBSRkNzLiAgVGhlc2UgbWlnaHQgaW5jbHVk ZSBmaWVsZHMgc2V0CmJ5IHlvdXIgbWFpbGluZyBsaXN0IG9yIHByb3h5IG9yIG90aGVyIGN1 c3RvbSBhcHBsaWNhdGlvbi4gIFlvdSBtYXkKc3BlY2lmeSBzdWNoIGEgbGlzdCBvZiBmaWVs ZHMgYnkgYXBwZW5kaW5nIHRoZW0gY29tbWEtZGVsaW1pdGVkIGF0CnRoZSBlbmQgb2YgeW91 ciBjb21tYW5kIGxpbmUuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCB0aGUgCkk8bGlz dC1pZD4gYW5kIEk8ZW5jcnlwdGVkPiBmaWVsZHMgcGFzc2VkIHRocm91Z2gsIHlvdSB3b3Vs ZCBjaGFuZ2UKeW91ciBwcm9jbWFpbCByZWNpcGUgYXMgZm9sbG93czoKCiAgfCBzcGFtaXRh cml1bSAtcmVhZHh0cCAtcyBsaXN0LWlkLGVuY3J5cHRlZAoKCj1oZWFkMSBSRVFVSVJFUwoK PW92ZXIgNAoKPWl0ZW0gKgoKUGVybCA1LjYuMQpOZXQ6OkROUzo6UmVzb2x2ZXIKTWFpbDo6 U1BGCk5ldDo6Q0lEUgpEQl9GaWxlClBPU0lYCkdldG9wdDo6TG9uZwoKPWJhY2sKCgo9aGVh ZDEgREVTQ1JJUFRJT04KClNwYW1pdGFyaXVtIGhlbHBzIHRvIHJlbW92ZSB1bm5lY2Vzc2Fy eSBub2lzZSBmcm9tIGVtYWlsIGhlYWRlcnMgYW5kCnRvIGhpZ2hsaWdodCBqdXN0IHRoZSBw b3J0aW9ucyB3aGljaCBjb250cmlidXRlIHBvc2l0aXZlbHkgdG8gc3BhbQpmaWx0ZXJpbmcg dXNpbmcgc3RhdGlzdGljYWwgbWV0aG9kcy4KClRoZSBvbmx5IG5vbi1zcG9vZmFibGUsIC1m b3JnYWJsZSwgb3IgLXR3ZWFrYWJsZSBwYXJ0IG9mCmFuIGVtYWlsIGlzIHRoZSByZWNlaXZl ZCBsaW5lLCBhcyBpdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHJlY2VpdmluZwptYWlsIHNlcnZl ciB3aGljaCBvdWdodCB0byBoYXZlIG5vIHJlYXNvbiB0byBtdW5nZSBpdC4gIEV2ZXJ5IG90 aGVyCnBhcnQgb2YgYW4gZW1haWwgY2FuIGJlIGluZmx1ZW5jZWQgZGlyZWN0bHkgYnkgdGhl IHNlbmRlci4gIFJlY2VpdmVkCmxpbmUgdG9rZW5zLCB3aGVuIHZlcmlmaWVkIGF1dGhlbnRp YywgYXJlIHRoZXJlZm9yZSBoaWdobHkgaW5kaWNhdGl2ZQpvZiB3aGV0aGVyIG9yIG5vdCBh IGdpdmVuIG1lc3NhZ2UgaXMgc3BhbS4gIAoKU3BhbWl0YXJpdW0gcmVhZHMgdGhlIHJlY2Vp dmVkIGhlYWRlcnMsIGRldGVybWluZXMgd2hpY2ggb25lcyBhcmUKYXV0aGVudGljLCBhbmQg dGhlbiBwcmludHMgdG9rZW5zIGludG8gdGhlIGhlYWRlciB3aGljaCBtYXkgYmUga2V5ZWQK b24gYnkgc3RhdGlzdGljYWwgZmlsdGVycy4gIFRoaXMgd29ya3MgbXVjaCBsaWtlIGEgYmxh Y2tsaXN0L3doaXRlbGlzdCwgCmJ1dCB3aGVuIGNvdXBsZWQgd2l0aCBhIHN0YXRpc3RpY2Fs IGZpbHRlciBzdWNoIGFzIGJvZ29maWx0ZXIsIHRoZXNlIApsaXN0cyBhcmUgYXV0b21hdGlj YWxseSBnZW5lcmF0ZWQgYW5kIHJlcXVpcmUgbm8gbWFudWFsIG1haW50ZW5hbmNlIApvdGhl ciB0aGFuIG5vcm1hbCB0cmFpbmluZy4KCk1vcmVvdmVyLCBoZWFkZXJzIHdoaWNoIGRvIG5v dCBkaXJlY3RseSBpbmZsdWVuY2UgdGhlIGVtYWlsIGluIGFueQpmdW5jdGlvbmFsIHdheSwg bm9yIGFyZSB2aXNpYmxlIHRvIHRoZSBlbmQtdXNlciBpbiBhIHN0YW5kYXJkCmdyYXBoaWNh bCBNVUEsIGFyZSBoaWdobHkgbGlrZWx5IHRvIGNvbnRhaW4gaW5mb3JtYXRpb24gd2hpY2gg CnNwYW1tZXJzIHRoaW5rIHdpbGwgZGV0cmFjdCBmcm9tIG5vcm1hbCBzdGF0aXN0aWNhbCBm aWx0ZXJpbmcuIEl0CmlzIHRoZXJlZm9yZSBkZXNpcmVhYmxlIHRvIHJlbW92ZSB0aGVzZSBl bGVtZW50cywgc3BlY2lmaWNhbGx5IApYLWhlYWRlcnMsIHByaW9yIHRvIGZpbHRlcmluZy4g IFNwYW1pdGFyaXVtIHJlbW92ZXMgYWxsIGludmlzaWJsZSwKbm9uLWZ1bmN0aW9uYWwgaGVh ZGVyIGxpbmVzLgoKU3BhbWl0YXJpdW0gYWxzbyBsb29rcyB1cCBhbnkgSVAgYWRkcmVzc2Vz IG9yIHJETlMgYWRkcmVzc2VzCndoaWNoIGFyZSBub3QgcHJvdmlkZWQgaW4gb3JkZXIgdG8g cHJvdmlkZSB0aGUgbWF4aW11bSB0b2tlbnMgb24Kd2hpY2ggdG8gZmlsdGVyLiAgTW9yZW92 ZXIsIGl0IGxvb2tzIHVwIHRoZSBhdXRvbm9tb3VzIHN5c3RlbSBudW1iZXIKKEFTTikgYXNz b2NpYXRlZCB3aXRoIGVhY2ggImZyb20iIGFkZHJlc3MgaW4gb3JkZXIgdG8gcHJvdmlkZQph IHNtYWxsIHNldCBvZiB0b2tlbnMgcmVwcmVzZW50aW5nIHRoZSB2YXJpb3VzIG1ham9yIHN1 Ym5ldHMgb2YgdGhlCmludGVybmV0LiAgQW5kIGl0IGNoZWNrcyB0aGUgU2VuZGVyIFBvbGlj eSBGcmFtZXdvcmsgKFNQRikgcmVjb3JkcyBvZgp0aGUgc2VuZGVyIHRvIGVuc3VyZSB0aGF0 IHRoZSBnaXZlbiBNWCBoYXMgcGVybWlzc2lvbiB0byBzZW5kIG9uCnRoZWlyIGJlaGFsZi4K CkZpbmFsbHksIFNwYW1pdGFyaXVtIGFzc2Vzc2VzIHRoZSBoZWFkZXJzIGZvciBtaXNzaW5n IHJlcXVpcmVkCmhlYWRlciBsaW5lcywgaW5zZXJ0aW5nIGtleWFibGUgdG9rZW5zIG9yIHN1 cHBseWluZyB0aGUgbWlzc2luZwppbmZvcm1hdGlvbi4gIEFuZCBpdCBjb21wYXJlcyB0aGUg ZGF0ZSBmaWVsZHMgdG8gZGV0ZXJtaW5lIGlmIHRoZQplbWFpbCBoYXMgYmVlbiBwcmUtIG9y IHBvc3QtZGF0ZWQgYnkgYSBsYXJnZSBtYXJnaW4gaW4gb3JkZXIgdG8KaW5mbHVlbmNlIHdo ZXJlIGl0IGFwcGVhcnMgaW4geW91ciBtYWlsIGNsaWVudCBhbmQgaW5zZXJ0cyBhbgp4LWhl YWRlciB3aXRoIGtleWFibGUgcmFuZ2UgdG9rZW5zIHRvIGNvbXBlbnNhdGUgZm9yIHRoaXMu CgpUb2dldGhlciwgYWxsIG9mIHRoZXNlIHRlY2huaXF1ZXMgaGVscCB0byByZW1vdmUgdGhl IG5vaXNlIHdoaWNoCmFjY29tcGFuaWVzLCBlaXRoZXIgaW5jaWRlbnRhbGx5IG9yIG1hbGlj aW91c2x5LCBtb3N0IGVtYWlsIG1lc3NhZ2VzLgpUaGlzIHJlc3VsdHMgaW4gYSBjbGVhbmVy IGhlYWRlciBjb25zaXN0aW5nIG9mIG1vcmUgZWFzaWx5IHNjb3JlZAp0b2tlbnMuICBUaGlz IHBlcm1pdHMgYmV0dGVyIGFjY3VyYWN5IHdpdGggc3RhdGlzdGljYWwgZmlsdGVycyBhcwp3 ZWxsIGFzIHF1aWNrZXIgcHJvY2Vzc2luZyBhbmQgYSBzbWFsbGVyIHRva2VuIGRhdGFiYXNl LgoKCj1oZWFkMSBGQVEKCj1oZWFkMiBBc2sgYSBxdWVzdGlvbgoKWWUgbWF5IHJlY2VpdmUg YW4gYW5zd2VyIGhlcmUgaWYgaXQgaXMgYXNrZWQgZnJlcXVlbnRseQoKCj1oZWFkMSBCVUdT Cgo9b3ZlciA0Cgo9aXRlbSAqCgp0aW1lZ20oJHNlYywkbWluLCRob3VyLCRkYXksJG1vbiwk eWVhcikgYWJvcnRzIGlmIFBlcmwncyB0aW1lX3QgaXMgMzIgCmJpdHMgbGFyZ2UgYW5kIHRo ZSB5ZWFyIGlzIHRvbyBoaWdoICg+MjAzOCkuCgo9YmFjawoKPWhlYWQxIFRPRE8KCj1vdmVy IDQKCj1pdGVtICoKClN1Z2dlc3Rpb25zIHdlbGNvbWUuCgo9YmFjawoKPWhlYWQxIFNFRSBB TFNPCgo9b3ZlciA0Cgo9aXRlbSAqCgpMPHByb2NtYWlsPgoKPWl0ZW0gKgoKTDxib2dvZmls dGVyPgoKPWJhY2sKCgo9aGVhZDEgQVVUSE9SCgpUb20gQW5kZXJzb24gPG5lbytzcGFtaXRh cml1bUBvcmRlcmFtaWRjaGFvcy5jb20+Cgo9Y3V0CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyBVc2VyIFZhcmlh YmxlcyAgIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBwbGVhc2UgZWRpdCBhY2NvcmRpbmcgdG8geW91ciBz ZXR1cAoKIyBkZWZhdWx0IHBhdGgKb3VyICRwYXRoID0gIi9iaW46L3Vzci9iaW46L3Vzci9s b2NhbC9iaW4iOwoKIyBkZWZhdWx0IHNoZWxsCm91ciAkc2hlbGwgPSAiL2Jpbi9zaCI7Cgoj IHNlY29uZHMgYmVmb3JlIHdlIGJhaWwgd2FpdGluZyBvbiBpbnB1dApvdXIgJHRpbWVvdXQg PSAzOwoKIyBzZXJ2ZXIgdG8gdXNlIGZvciBBU04gbG9va3VwcwpvdXIgJGFzbl9zZXJ2ZXIg PSAiYXNuLnJvdXRldmlld3Mub3JnIjsKCiMgV2hpdGVsaXN0IGFueSBJUCBhZGRyZXNzZXMg b3IgcmFuZ2VzIGZyb20gU1BGIGxvb2t1cHMKb3VyIEB3aGl0ZWxpc3QgPSAoIjEyNy4wLjAu MSIsIjE5Mi4xNjguMC4xLTE5Mi4xNjguMC4yNTUiKTsKCiMgSWYgeW91IHdhbnQgdG8gd2hp dGVsaXN0IGFueSBhZGRyZXNzZXMgd2hpY2ggaGF2ZSBhdXRoZW50aWNhdGVkCiMgdmlhIHBv cHJlbGF5ZCAoaS5lLiByZW1vdGUgd29ya3N0YXRpb25zIG9mIHVzZXJzIG9uIHlvdXIgc2Vy dmVyKQojIHNldCAkZGJmaWxlIHRvIHlvdXIgcG9waXAuZGIgbG9jYXRpb24sIGVsc2Ugc2V0 IGl0IHRvIHVuZGVmCiNvdXIgJGRiZmlsZSA9ICIvZXRjL21haWwvcG9waXAuZGIiOwpvdXIg JGRiZmlsZSA9IHVuZGVmOwoKIyBkaXN0YW5jZSBpbiBzZWNvbmRzIGZyb20gcmlnaHQgbm93 IHRvIGNvbnNpZGVyIGEgcmVhc29uYWJsZSAobm9uLXNwYW0pIHJhbmdlIHRvIGRhdGUgYW4g ZW1haWwKb3VyICRkYXRlX2xpbWl0ID0gNjAqNjAqMjQqMjsgICMgMiBkYXlzCgojIEVNQUlM IEhFQURFUiBGSUVMRFMKIwojIFNlZSBSRkMgMjA3NiAvICJDb21tb24gSW50ZXJuZXQgTWVz c2FnZSBIZWFkZXIgRmllbGRzIiBmb3IgYSBzeW5vcHNpcyBvZiBjb21tb24gbWFpbCBoZWFk ZXJzCgoJIyBTUEVDSUZJRUQgRklFTERTIC0tIGFsbCBvZiB0aGUgZmllbGRzIHNwZWNpZmll ZCBpbiBSRkMgODIyLzI4MjIsIGNhc2UtaW5zZW5zaXRpdmUsIGluIHRoZSBzdWdnZXN0ZWQg b3JkZXIKCW91ciAkc3BlY19maWVsZHMgPSAicmV0dXJuLXBhdGgscmVjZWl2ZWQscmVzZW50 LWRhdGUscmVzZW50LWZyb20scmVzZW50LXNlbmRlcixyZXNlbnQtcmVwbHktdG8sIi4KCSAJ CSAgICJyZXNlbnQtdG8scmVzZW50LWNjLHJlc2VudC1iY2MscmVzZW50LW1lc3NhZ2UtaWQs ZGF0ZSxmcm9tLHNlbmRlcixyZXBseS10bywiLgoJCQkgICAidG8sY2MsYmNjLG1lc3NhZ2Ut aWQsaW4tcmVwbHktdG8scmVmZXJlbmNlcyxzdWJqZWN0LGNvbW1lbnRzLGtleXdvcmRzLGVu Y3J5cHRlZCI7CgoJIyBNSU1FIGhlYWRlciBmaWVsZHMgKFJGQyAxMDQ5LzEzNDEvMTUyMS8y MTgzKQoJJHNwZWNfZmllbGRzIC49ICIsbWltZS12ZXJzaW9uLGNvbnRlbnQtdHlwZSxjb250 ZW50LXRyYW5zZmVyLWVuY29kaW5nLGNvbnRlbnQtaWQsY29udGVudC1kZXNjcmlwdGlvbixj b250ZW50LWRpc3Bvc2l0aW9uIjsKCgkjIHNlY3VyaXR5L2NoZWNrc3VtIChSRkMgMTg2NCkK CSRzcGVjX2ZpZWxkcyAuPSAiLGNvbnRlbnQtbWQ1IjsKCgkjIG1haWxpbmcgbGlzdCBoZWFk ZXJzIChSRkMgMjM2OS8yOTE5KSBtYXkgYmUgYWRkZWQgaWYgeW91IGxpa2UsIGJ1dCBmb3Ig bm93IEknbSBjaG9vc2luZyB0byBsZWF2ZSB0aGVtIG91dAoJIyRzcGVjX2ZpZWxkcyAuPSAi LGxpc3QtaWQsbGlzdC1oZWxwLGxpc3QtdW5zdWJzY3JpYmUsbGlzdC1zdWJzY3JpYmUsbGlz dC1wb3N0LGxpc3Qtb3duZXIsbGlzdC1hcmNoaXZlIjsKCgkjIE1BU0tFRCBGSUVMRFMgLS0g dW5uZWNlc3NhcnkgZmllbGRzIG9mdGVuIHVzZWQgZm9yIHNwYW0gd2lsbCBiZSBleHB1bmdl ZCBmcm9tIHRoZSBzcGVjIGZpZWxkcyBsaXN0CgkjIChpZiB5b3Uga25vdyBvZiBhIHZhbGlk LCBuZWNlc3NhcnkgdXNlIGZvciB0aGVzZSwgbGV0IG1lIGtub3cpCglvdXIgJG1hc2tlZF9m aWVsZHMgPSAia2V5d29yZHMsY29tbWVudHMsZW5jcnlwdGVkLGNvbnRlbnQtaWQsY29udGVu dC1kZXNjcmlwdGlvbiI7CgoJIyBjb250cm92ZXJzaWFsIGFuZCBub3Qgc3RyaWN0bHkgbmVj ZXNzYXJ5OgoJIyRtYXNrZWRfZmllbGRzIC49ICAiLHJlcGx5LXRvIjsKCgkjIG1lc3NhZ2Ut aWQgZmllbGRzIGFyZSBvbmx5IG1hY2hpbmUtcmVhZGFibGUgYW5kIG5vdCB2aXNpYmxlIHRv IG5vciByZWFkYWJsZSBieSB0aGUgcmVjaXBpZW50CgkjIGhvd2V2ZXIsIHRoZXkgY2FuIGJl IHVzZWZ1bCBpZiB5b3VyIGNsaWVudCBwcm9kdWNlcyBkaXNjdXNzaW9uIHRocmVhZGluZwoJ IyB1bmNvbW1lbnQgdGhpcyBsaW5lIGlmIHlvdSBkb24ndCBjYXJlIGFib3V0IHRocmVhZGlu ZzoKCSMkbWFza2VkX2ZpZWxkcyAuPSAgIixtZXNzYWdlLWlkLHJlc2VudC1tZXNzYWdlLWlk LGluLXJlcGx5LXRvLHJlZmVyZW5jZXMiOwoJCgkjIHJlc2VudCBmaWVsZHMgYXJlIHN0cmlj dGx5IGluZm9ybWF0aW9uYWwgKGFuZCBub3QgZ2VuZXJhbGx5IHVzZXItdmlzaWJsZSksIHRo ZXJlZm9yZSBhbGxvd2luZyB0aGVtIHRocm91Z2ggaXMgb3B0aW9uYWw6CgkjIE1JTUUgc3Bl Y2lmaWVzIGEgZGlmZmVyZW50IHdheSBvZiByZXNlbmRpbmcgbWVzc2FnZXMgd2l0aCB0aGUg Ik1lc3NhZ2UiIGNvbnRlbnQtdHlwZSwgc28gdGhlc2UgbWF5IGJlIGNvbnNpZGVyZWQgZGVw cmVjYXRlZDoKCSRtYXNrZWRfZmllbGRzIC49ICIscmVzZW50LWRhdGUscmVzZW50LWZyb20s cmVzZW50LXNlbmRlcixyZXNlbnQtcmVwbHktdG8scmVzZW50LXRvLHJlc2VudC1jYyxyZXNl bnQtYmNjLHJlc2VudC1tZXNzYWdlLWlkIjsKCgkjIFVTRVIgRklFTERTIC0tIFVzZXIgZmll bGRzIGFyZSB0aG9zZSB0aGF0IGFyZSBuZWl0aGVyIHNwZWNpZmllZCBub3IgbWFza2VkIHRo YXQgeW91IHdhbnQgcGVybWl0dGVkLiAKCSMgVGhlc2UgbWF5IGluY2x1ZGUgc3BlY2lhbCBm aWVsZHMgZm9yIHlvdXIgcGFydGljdWxhciBtYWlsIHNlcnZlciwgZmlsdGVyLCBvciBtYWls IHVzZXIgYWdlbnQuCglvdXIgJHVzZXJfZmllbGRzID0gIiI7CgoJIyBORVcgRklFTERTIC0t IE5ldyBjdXN0b20geC1oZWFkZXJzIGFkZGVkIGJ5IFNwYW1pdGFyaXVtIChpdCBpcyByZWNv bW1lbmQgdGhhdCB5b3UgZG9uJ3QgY2hhbmdlIHRoZXNlKS4gIAoJIyBUaGVzZSBhcmUgZGlz YWJsZWQgdW5sZXNzIHlvdSBwYXNzIHRoZSAneCcgb3B0aW9uLgoJb3VyICRuZXdfZmllbGRz ID0gIngtZGF0ZS1jaGVjayx4LXNwZiI7CgoJIyBSRVFVSVJFRCBGSUVMRFMgLS0gQW55IGZp ZWxkcyB0aGF0IHNob3VsZCBzaG93IHVwIGluIGFuIGVtYWlsIGV2ZW4gaWYgdGhleSBhcmUg bm90IHNlbnQgLS0gaS5lLiBpZiB0aGUgbGFjayBvZgoJIyB0aGVzZSBmaWVsZHMgbWF5IGJl IHVzZWZ1bCBmb3IgdGhlIGZpbHRlciwgYSBuby1yZXEtZmllbGQgdGFnIHdpbGwgYmUgYWRk ZWQuICBUaGUgb25seSAqcmVxdWlyZWQqIGZpZWxkcyBhY2NvcmRpbmcgdG8gCgkjIFJGQyAy ODIyIGFyZSAiZnJvbSIsICJzZW5kZXIiLCAicmVwbHktdG8iLCBhbmQgImRhdGUiLCBvdGhl cnMgYXJlIGp1c3Qgc3VnZ2VzdGVkLiAgSG93ZXZlciwgInNlbmRlciIgYW5kICJyZXBseS10 byIgYXJlIAoJIyBjb21tb25seSBub3Qgc3VwcGxpZWQsIGFuZCBzbyBzaG91bGQgcHJvYmFi bHkgbm90IGJlIGluIHRoaXMgbGlzdC4gIE9uIHRoZSBvdGhlciBoYW5kLCAic3ViamVjdCIg YW5kIGEgZmV3IG90aGVycyBtYXkgCgkjIGJlIGRlc2lyZWQgaW4gdGhpcyBsaXN0LgoJb3Vy ICRyZXFfZmllbGRzID0gInJlY2VpdmVkLGZyb20sdG8sZGF0ZSxzdWJqZWN0IjsKCiMgb2Yg Y291cnNlLCBtb2RpZnkgdGhlIGZpcnN0IGxpbmUgb2YgdGhpcyBmaWxlLAojIHRoZSBzaGVi YW5nLCB0byBwb2ludCB0byB5b3VyIHBlcmwgaW50ZXJwcmV0ZXIKCiMgZG8gbm90IGVkaXQg YmVsb3cgdGhpcyBsaW5lIHVubGVzcyB5b3UgcmVhbGx5CiMga25vdyB3aGF0IHlvdSdyZSBk b2luZwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwojIyMjIyMjIyMjIyMjIyBJbmNsdWRlIExpYnJhcmllcyAjIyMjIyMjIyMjIyMjIyMjCiMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnVzZSBC ZW5jaG1hcms7CnVzZSBGaWxlOjpCYXNlbmFtZTsKdXNlIFRpbWU6OkxvY2FsOwp1c2UgTmV0 OjpETlM6OlJlc29sdmVyOwp1c2UgTWFpbDo6U1BGOwp1c2UgTmV0OjpDSURSOwp1c2UgREJf RmlsZTsKdXNlIFBPU0lYOwp1c2UgR2V0b3B0OjpMb25nOwp1c2UgU3lzOjpTeXNsb2c7Cgoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMj IyMjIyMjIyMjIERlZmF1bHQgR2xvYmFscyAjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKJD4gPSAkPDsgIyBz ZXQgZWZmZWN0aXZlIHVzZXIgSUQgdG8gcmVhbCBVSUQKJCkgPSAkKDsgIyBzZXQgZWZmZWN0 aXZlIGdyb3VwIElEIHRvIHJlYWwgR0lECgojIE1ha2UgJUVOViBzYWZlcgpkZWxldGUgQEVO VntxdyhJRlMgQ0RQQVRIIEVOViBCQVNIX0VOViBQQVRIIFNIRUxMKX07CgojIFNldCB0aGUg ZW52aXJvbm1lbnQgZXhwbGljaXRseQokRU5We1BBVEh9ID0gJHBhdGg7CiRFTlZ7U0hFTEx9 ID0gJHNoZWxsOwoKIyBvcHRpb25zIGZsYWdzCm91ciAkb3B0aW9ucyA9ICIiOwpvdXIgJHJl dHVybl9wYXRoID0gIiI7Cm91ciAkb3B0X3JlbW90ZV9pcCA9ICIiOwpvdXIgJG9wdF9yZW1v dGVfbmFtZSA9ICIiOwpvdXIgJG9wdF9sb2NhbF9pcCA9ICIiOwpvdXIgJG9wdF9sb2NhbF9u YW1lID0gIiI7Cm91ciAkb3B0X2hlbG8gPSAiIjsKb3VyICRvcHRfcmNwdCA9ICIiOwpvdXIg JG5vX2xvY2FsX3JlY2VpdmVkID0gdW5kZWY7Cm91ciAkYWRkX2xvY2FsX3JlY2VpdmVkID0g dW5kZWY7CgojIGRlZmluZSB0aGUgY29udHJvbC1saW5lZmVlZCBzeW50YXggZm9yIHRoaXMg c3lzdGVtCm91ciAkQ1JMRiA9IAoiXG4iOwojKCReTz1+L1ZNUy9pKT8gCSJcbiI6IAkJIyBW TVMKIygiXHQiIG5lICJcMDExIik/IAkiXHJcbiI6IAkjIEVCQ0RJQwojCQkJIlwwMTVcMDEy IjsgCSMgb3RoZXJzIAoKIyBETlMgcXVlcnkgb3B0aW9ucwpvdXIgJHJlcyA9IE5ldDo6RE5T OjpSZXNvbHZlci0+bmV3KAoJbmFtZXNlcnZlcnMgICAgID0+IFtxdygxMjcuMC4wLjEpXSwK CXVkcF90aW1lb3V0ICAgICA9PiAyLAoJcmV0cnkgICAgICAgICAgID0+IDEsCgkjZGVidWcg ICAgICAgICAgPT4gMQopOwoKIyBjb252ZXJ0IHdoaXRlbGlzdCBpbnRvIENJRFIgbm90YXRp b24Kb3VyIEBjaWRyX2xpc3QgPSAoKTsKZm9yZWFjaCBteSAkSVAgKEB3aGl0ZWxpc3QpIHsK ICBpZiAobm90IGV2YWwge0BjaWRyX2xpc3QgPSBOZXQ6OkNJRFI6OmNpZHJhZGQgKCRJUCwg QGNpZHJfbGlzdCl9KSB7CiAgICBlcnJvcigid2FybiIsIkVycm9yIHByb2Nlc3Npbmcgd2hp dGVsaXN0OiBcIiRJUFwiIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3Mgb3IgcmFuZ2UuIik7 CiAgfQp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1haW4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKb3Blbmxv ZyhiYXNlbmFtZSAkMCwgJ21haWwnKTsKCiMgcHJvY2VzcyBvcHRpb25zCnN1YiB1c2FnZSB7 CiAgICBteSAkc3BhbWl0YXJpdW0gPSAkMSBpZiAkMCA9fiAvXihbXHdcLy5cLX5dKikkLzsK ICAgIHN5c3RlbSgicGVybGRvYyAkc3BhbWl0YXJpdW0iKTsKfQoKIyBBbGxvdyBidW5kbGlu ZyBvZiBmaXJzdCBzZXQgb2Ygb3B0aW9ucywgYXMgd2VsbCBhcyBvcHRpb25hbCBoeXBoZW4u CmlmIChAQVJHViBhbmQgJEFSR1ZbMF0gPX4gL14tP1tocmRmYXNlYnd4dHBdKyQvKSB7CiAg ICBpZiAoJEFSR1ZbMF0gPX4gcy9zLy8pIHsKCXNwbGljZShAQVJHViwgMSwgMCwgIi1zIik7 CiAgICB9CiAgICAkQVJHVlswXSA9fiBzL14oW14tXSkvLSQxLzsKICAgIEdldG9wdDo6TG9u Zzo6Q29uZmlndXJlKCJidW5kbGluZyIpOwp9CgppZiAoISBHZXRPcHRpb25zKCJoZWxwfGgi ID0+IHN1YiB7ICZ1c2FnZTsgZXhpdCgwKTsgfSwKCQkgInIiID0+IHN1YiB7ICRvcHRpb25z IC49ICJyIjsgfSwgIyBwcm9jZXNzIHJlY2VpdmVkIGhlYWRlcnMKCQkgImQiID0+IHN1YiB7 ICRvcHRpb25zIC49ICJkIjsgfSwgIyBwZXJmb3JtIGRvbWFpbiBsb29rdXBzIHdoZXJlIG5l ZWRlZAoJCSAiZiIgPT4gc3ViIHsgJG9wdGlvbnMgLj0gImYiOyB9LCAjIGZvcmNlIFJETlMg bG9va3VwcyBldmVuIHdoZXJlIE1UQSBwcm92aWRlZAoJCSAiYSIgPT4gc3ViIHsgJG9wdGlv bnMgLj0gImEiOyB9LCAjIHBlcmZvcm0gQVNOIGxvb2t1cHMKCQkgInM6cyIgPT4gc3ViIHsg JG9wdGlvbnMgLj0gInMiOyAgIyBzdGFuZGFyZCBmaWVsZHMgb25seSAoc3RyaXAgb3RoZXJz KQoJCQkgJHVzZXJfZmllbGRzID0gJF9bMV07IH0sCgkJICJlIiA9PiBzdWIgeyAkb3B0aW9u cyAuPSAiZSI7IH0sICMgaW5jbHVkZSB0aGUgaGVsbyByZWNlaXZlZCBmaWVsZCBpbiBvdXRw dXQKCQkgImIiID0+IHN1YiB7ICRvcHRpb25zIC49ICJiIjsgfSwgIyBvdXRwdXQgYmVuY2ht YXJraW5nIGluZm8KCQkgInciID0+IHN1YiB7ICRvcHRpb25zIC49ICJ3IjsgfSwgIyBwcm9j ZXNzIHdob2xlIGVtYWlsIChpbmNsdWRpbmcgYm9keSkKCQkgIngiID0+IHN1YiB7ICRvcHRp b25zIC49ICJ4IjsgfSwgIyBpbnNlcnQgY3VzdG9tIHgtaGVhZGVyIGZpZWxkcwoJCSAidCIg PT4gc3ViIHsgJG9wdGlvbnMgLj0gInQiOyB9LCAjIHBlcmZvcm0gZGF0ZSByYW5nZSBjaGVj a3MKCQkgInAiID0+IHN1YiB7ICRvcHRpb25zIC49ICJwIjsgfSwgIyBwZXJmb3JtIFNQRiBs b29rdXBzCgkJICJyZXR1cm4tcGF0aHxyZXR1cm5wYXRoPXMiID0+IFwkcmV0dXJuX3BhdGgs CgkJICJyZW1vdGUtaXB8cmVtb3RlaXA9cyIgPT4gXCRvcHRfcmVtb3RlX2lwLAoJCSAicmVt b3RlLW5hbWV8cmVtb3RlbmFtZT1zIiA9PiBcJG9wdF9yZW1vdGVfbmFtZSwKCQkgImxvY2Fs LWlwfGxvY2FsaXA9cyIgPT4gXCRvcHRfbG9jYWxfaXAsCgkJICJsb2NhbC1uYW1lfGxvY2Fs bmFtZT1zIiA9PiBcJG9wdF9sb2NhbF9uYW1lLAoJCSAiaGVsbz1zIiA9PiBcJG9wdF9oZWxv LAoJCSAicmNwdD1zIiA9PiBcJG9wdF9yY3B0LAoJCSAibm8tbG9jYWwtcmVjZWl2ZWR8bm9s b2NhbHJlY2VpdmVkIiA9PiBcJG5vX2xvY2FsX3JlY2VpdmVkLAoJCSAiYWRkLWxvY2FsLXJl Y2VpdmVkfGFkZGxvY2FscmVjZWl2ZWQiID0+IFwkYWRkX2xvY2FsX3JlY2VpdmVkLAoJCSAp KSB7CiAgICAmdXNhZ2U7CiAgICBleGl0KDEpOwp9CgojIG9wZW4gcG9waXAgZGF0YWJhc2Ug Zm9yIHJlYWRpbmcKb3VyICVkYjsKJm9wZW5kYl9yZWFkIGlmICRkYmZpbGU7CgojIHN0YXJ0 IHRpbWluZyB0aGUgcHJvY2VzcwpteSAkc3RhcnRfdGltZSA9IG5ldyBCZW5jaG1hcmsgaWYg JG9wdGlvbnMgPX4gL2IvOwpteSAoJHN0YXJ0X3BhcnNlLCAkZW5kX3BhcnNlLCAkc3RhcnRf cmN2ZCwgJGVuZF9yY3ZkLCAkc3RhcnRfc2V0LCAkZW5kX3NldCk7CgojIGdldCBTVERJTiBh bmQgcHJvY2VzcyB0aGUgZW1haWwKZXZhbCAKewoJIyBzZXQgYW4gYWxhcm0gc28gdGhhdCB3 ZSBkb24ndCBoYW5nIG9uIGFuIGVtcHR5IFNURElOCglsb2NhbCAkU0lHe0FMUk19ID0gc3Vi IHsgZGllICJ0aW1lb3V0IiB9OwoJYWxhcm0gJHRpbWVvdXQ7CgoJIyBwYXJzZSB0aGUgaGVh ZGVyCgkkc3RhcnRfcGFyc2UgPSBuZXcgQmVuY2htYXJrIGlmICRvcHRpb25zID1+IC9iLzsK CW15ICgkaGVhZGVyLCRwYXJzZV9iZW5jaG1hcmspID0gcGFyc2VfaGVhZGVyKCk7CgkkZW5k X3BhcnNlID0gbmV3IEJlbmNobWFyayBpZiAkb3B0aW9ucyA9fiAvYi87CgoJIyBjYW5jZWwg dGltZW91dCBpZiB3ZSBnb3QgdGhpcyBmYXIKCWFsYXJtIDA7CgoJIyBkZWZhdWx0IGRhdGUg aWYgbm9uZSBwcm92aWRlZAoJdW5sZXNzIChkZWZpbmVkICRoZWFkZXItPnsnZGF0ZSd9KQoJ ewoJCSRoZWFkZXItPnsnZGF0ZSd9LT5bMF0tPnsnbmFtZSd9ID0gIkRhdGUiOwoJCSRoZWFk ZXItPnsnZGF0ZSd9LT5bMF0tPnsndmFsdWUnfSA9IGdtdGltZSB0aW1lOwoJfQoJCgkjIHBy b2Nlc3MgdGhlIHJlY2VpdmVkIGxpbmVzCglpZiAoJG9wdGlvbnMgPX4gL3IvKQoJewoJCSRz dGFydF9yY3ZkID0gbmV3IEJlbmNobWFyayBpZiAkb3B0aW9ucyA9fiAvYi87CgkJJGhlYWRl ci0+eydyZWNlaXZlZCd9ID0gcHJvY2Vzc19yY3ZkKCRoZWFkZXItPnsncmVjZWl2ZWQnfSwk cmV0dXJuX3BhdGggfHwgJGhlYWRlci0+eydyZXR1cm4tcGF0aCd9LT5bMF0tPnsndmFsdWUn fSk7CgkJJGVuZF9yY3ZkID0gbmV3IEJlbmNobWFyayBpZiAkb3B0aW9ucyA9fiAvYi87Cgl9 CgoJIyBhZGQgbmV3IGN1c3RvbSBoZWFkZXIgZmllbGRzCglpZiAoJG9wdGlvbnMgPX4gL3gv KSAKCXsKCQlpZiAoJG9wdGlvbnMgPX4gL3QvKQoJCXsKCQkJJGhlYWRlci0+eyd4LWRhdGUt Y2hlY2snfS0+WzBdLT57J25hbWUnfSA9ICJYLURhdGUtQ2hlY2siOyAKCQkJJGhlYWRlci0+ eyd4LWRhdGUtY2hlY2snfS0+WzBdLT57J3ZhbHVlJ30gPSBkYXRlX2NoZWNrKCRoZWFkZXIt PnsnZGF0ZSd9LT5bMF0tPnsndmFsdWUnfSwkaGVhZGVyLT57J3JlY2VpdmVkJ30tPlswXS0+ eydkYXRlJ30pOwoJCX0KCgkJaWYgKCRvcHRpb25zID1+IC9wLykKCQl7CgkgICAgICAgICAg ICAgICAgZm9yIChteSAkeCA9IDA7ICR4IDwgc2NhbGFyIEB7JGhlYWRlci0+eydyZWNlaXZl ZCd9fTsgJHgrKykKCSAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg CSAgICAgICAgaWYgKGRlZmluZWQgJGhlYWRlci0+eydyZWNlaXZlZCd9LT5bJHhdLT57J3Nw Zid9ICYmICRoZWFkZXItPnsncmVjZWl2ZWQnfS0+WyR4XS0+eydzcGYnfSA9fiAvXHcvKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCXsKCQkJICAgICAgICAgICAgICAgICRo ZWFkZXItPnsneC1zcGYnfS0+WyR4XS0+eyduYW1lJ30gPSAiWC1TUEYiOwoJCQkgICAgICAg ICAgICAgICAgJGhlYWRlci0+eyd4LXNwZid9LT5bJHhdLT57J3ZhbHVlJ30gPSAkaGVhZGVy LT57J3JlY2VpdmVkJ30tPlskeF0tPnsnc3BmJ307CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQoJICAgICAgICAgICAgICAgIH0JCQkKCQl9Cgl9CgoJIyBUaGlzIG5lZWRz IHRvIGJlIGRvbmUgYWZ0ZXIgdGhlIHgtc3BmIGhlYWRlcnMgYXJlIGdlbmVyYXRlZAoJIyBh Ym92ZSwgc28gdGhhdCBhbiB4LXNwZiBoZWFkZXIgaXMgZ2VuZXJhdGVkIGZvciB0aGUKCSMg YXV0by1nZW5lcmF0ZWQgbG9jYWwgUmVjZWl2ZWQgbGluZS4KCWlmICgkbm9fbG9jYWxfcmVj ZWl2ZWQgYW5kIG5vdCAkYWRkX2xvY2FsX3JlY2VpdmVkKSB7CgkgICAgc3BsaWNlKEB7JGhl YWRlci0+eydyZWNlaXZlZCd9fSwgMCwgMSk7Cgl9CgoJIyBvdXRwdXQgdGhlIG5ldyBoZWFk ZXIgY29udGFpbmluZyB0aGUgY2hhbmdlcwoJJHN0YXJ0X3NldCA9IG5ldyBCZW5jaG1hcmsg aWYgJG9wdGlvbnMgPX4gL2IvOwoJcHJpbnQgc2V0X2hlYWRlcigkaGVhZGVyKTsKCSRlbmRf c2V0ID0gbmV3IEJlbmNobWFyayBpZiAkb3B0aW9ucyA9fiAvYi87CgoJIyBhZGQgdGhlIGJv ZHkgaWYgZGVzaXJlZAoJcHJpbnQgcGFyc2VfYm9keSgpIGlmICRvcHRpb25zID1+IC93LzsK fTsKCiMgcHJvcGFnYXRlIGVycm9ycwpkaWUgaWYgJEAgJiYgJEAgIX4gL3RpbWVvdXQvaTsK CiMgcHJpbnQgdGltZW91dCBtZXNzYWdlCmlmICgkQCA9fiAvdGltZW91dC9pKSB7IGVycm9y KCJkaWUiLCJUaW1lZCBvdXQuLi4gbWFrZSBzdXJlIHRvIHN1cHBseSBhbiBlbWFpbCBmb3Ig cHJvY2Vzc2luZy4gIFRyeSAnc3BhbWl0YXJpdW0gLWgnIGZvciBkZXRhaWxzLlxuIik7IH0K CiMgY2FsY3VsYXRlIHRvdGFsIHJ1bm5pbmcgdGltZQppZiAoJG9wdGlvbnMgPX4gL2IvKQp7 CglteSAkZW5kX3RpbWUgPSBuZXcgQmVuY2htYXJrOyAgCglteSAkdGQgPSB0aW1lZGlmZigk ZW5kX3RpbWUsICRzdGFydF90aW1lKTsKCW15ICR1c3IgPSAkdGQtPlsxXSskdGQtPlszXTsg bXkgJHN5cyA9ICR0ZC0+WzJdKyR0ZC0+WzRdOwoJbXkgJGNwdSA9ICR1c3IrJHN5czsgbXkg JHdhbGwgPSAkdGQtPlswXTsKCXByaW50ICJUb3RhbCBydW5uaW5nIHRpbWUgd2FzICR3YWxs IHdhbGxjbG9jayBzZWNzOyAkdXNyIHVzciArICRzeXMgc3lzID0gJGNwdSBDUFUgc2Vjcy4k Q1JMRiI7CgoJJHRkID0gdGltZWRpZmYoJGVuZF9wYXJzZSwgJHN0YXJ0X3BhcnNlKTsKCSR1 c3IgPSAkdGQtPlsxXSskdGQtPlszXTsgJHN5cyA9ICR0ZC0+WzJdKyR0ZC0+WzRdOwoJJGNw dSA9ICR1c3IrJHN5czsgJHdhbGwgPSAkdGQtPlswXTsKCXByaW50ICJJbnB1dCBwYXJzaW5n IHRpbWUgd2FzICR3YWxsIHdhbGxjbG9jayBzZWNzOyAkdXNyIHVzciArICRzeXMgc3lzID0g JGNwdSBDUFUgc2Vjcy4kQ1JMRiI7CgoJaWYgKCRvcHRpb25zID1+IC9yLykKCXsKCQkkdGQg PSB0aW1lZGlmZigkZW5kX3JjdmQsICRzdGFydF9yY3ZkKTsKCQkkdXNyID0gJHRkLT5bMV0r JHRkLT5bM107ICRzeXMgPSAkdGQtPlsyXSskdGQtPls0XTsKCQkkY3B1ID0gJHVzciskc3lz OyAkd2FsbCA9ICR0ZC0+WzBdOwoJCXByaW50ICJSZWNlaXZlZCBsaW5lIHByb2Nlc3Npbmcg dGltZSB3YXMgJHdhbGwgd2FsbGNsb2NrIHNlY3M7ICR1c3IgdXNyICsgJHN5cyBzeXMgPSAk Y3B1IENQVSBzZWNzLiRDUkxGIjsKCX0KCgkkdGQgPSB0aW1lZGlmZigkZW5kX3NldCwgJHN0 YXJ0X3NldCk7CgkkdXNyID0gJHRkLT5bMV0rJHRkLT5bM107ICRzeXMgPSAkdGQtPlsyXSsk dGQtPls0XTsKCSRjcHUgPSAkdXNyKyRzeXM7ICR3YWxsID0gJHRkLT5bMF07CglwcmludCAi UmVidWlsZGluZyBlbWFpbCB0aW1lIHdhcyAkd2FsbCB3YWxsY2xvY2sgc2VjczsgJHVzciB1 c3IgKyAkc3lzIHN5cyA9ICRjcHUgQ1BVIHNlY3MuJENSTEYiOwp9CgojIGNsb3NlIHBvcGlw IGRhdGFiYXNlCiZjbG9zZWRiIGlmICRkYmZpbGU7CgpleGl0KDApOwoKIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMg UGFyc2UgSGVhZGVyICAjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBwYXJzZV9oZWFkZXIKewoJbXkgJGhl YWRlciA9IHt9OwoJbXkgJG5hbWUgPSAiIjsKCiAgICAgIGxpbmVpbjoKICAgICAgICB3aGls ZSAoPFNURElOPikKICAgICAgICB7CiAgICAgICAgICAgIGFsYXJtIDA7CiAgICAgICAgICAg ICMgVGhpcyBpcyByZWFsbHkgZ3Jvc3MuIFRoZXJlIGlzIGEgY2VydGFpbiBwcm9taW5lbnQg ZW1haWwKICAgICAgICAgICAgIyBtYXJrZXRpbmcgY29tcGFueSB3aG9zZSBzb2Z0d2FyZSBo YXMgYSBidWcgaW4gaXQgd2hpY2ggY2F1c2VzCiAgICAgICAgICAgICMgRGF0ZTogaGVhZGVy cyB0byBzb21ldGltZXMgYmUgdGVybWluYXRlZCB3aXRoIGp1c3QgQ1IgcmF0aGVyIHRoYW4K ICAgICAgICAgICAgIyBDUkxGLiBJZiB3ZSBpbnRlcnByZXQgUkZDIDUzMjEgc2VjdGlvbiAy LjMuOCBzdHJpY3RseSwgdGhlbiB3ZSdyZQogICAgICAgICAgICAjIHJlcXVpcmVkIHRvIHRy ZWF0IHN1Y2ggYSBEYXRlOiBoZWFkZXIgYW5kIHRoZSBvbmUgZm9sbG93aW5nIGl0IGFzCiAg ICAgICAgICAgICMgYSBzaW5nbGUgaGVhZGVyIGZpZWxkLCBidXQgc3RyaWN0IGFkaGVyZW5j ZSB0byB0aGUgUkZDIHdoZW4gdGhhdAogICAgICAgICAgICAjIHJlc3VsdHMgaW4gb2J2aW91 c2x5IGJyb2tlbiBiZWhhdmlvciBpcyBub3QgdGhlIGJlc3QgYXBwcm9hY2guIE9uCiAgICAg ICAgICAgICMgdGhlIG90aGVyIGhhbmQsIHdoZW4gd2UncmUgc3RyYXlpbmcgZnJvbSB0aGUg UkZDLCB3ZSB3YW50IHRvIGRvCiAgICAgICAgICAgICMgc28gYXMgbWluaW1hbGx5IGFzIHBv c3NpYmxlLiBUaGVyZWZvcmUsIHdoYXQgd2UgYXJlIGRvaW5nIGhlcmUgaXMKICAgICAgICAg ICAgIyBjaGVja2luZyBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgZXhhY3QgcHJvYmxlbSAtLSBE YXRlOiBoZWFkZXJzCiAgICAgICAgICAgICMgZW5kaW5nIHdpdGggQ1IgcmF0aGVyIHRoYW4g Q1JMRiAtLSBhbmQgY29ycmVjdGluZyBmb3IganVzdCB0aGF0CiAgICAgICAgICAgICMgb25l LCBsaW1pdGVkIGNhc2UuCiAgICAgICAgICAgIG15KEBsaW5lcyk7CiAgICAgICAgICAgICMg VGhpcyBoYW5kbGVzIGlucHV0IHdpdGggYm90aCBDUkxGIGFuZCBMRiBsaW5lIHRlcm1pbmF0 b3JzLgogICAgICAgICAgICBpZiAoL14oRGF0ZTouKilccihbXlxuXS4qKC4pXG4pLykgewog ICAgICAgICAgICAgICAgaWYgKCQzIGVxICJcciIpIHsKICAgICAgICAgICAgICAgICAgICBA bGluZXMgPSAoIiQxXHJcbiIsICQyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIEBsaW5lcyA9ICgiJDFcbiIsICQyKTsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAg ICAgICAgICAgICAgIEBsaW5lcyA9ICgkXyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAg IGZvcmVhY2ggbXkgJGxpbmUgKEBsaW5lcykgewoJCWNob21wKCRsaW5lKTsKCgkJIyB3ZSdy ZSBkb25lIHdpdGggdGhlIGhlYWRlciB3aGVuIHdlJ3ZlIGZvdW5kIGEgYmxhbmsgbGluZQoJ CSMgYW5kIHRoZSByZXF1aXJlZCBoZWFkZXJzIGhhdmUgYmVlbiBmb3VuZCBhbHJlYWR5CgkJ bGFzdCBsaW5laW4gaWYgKCFkZWZpbmVkICRsaW5lIHx8ICRsaW5lICF+IC9cUy8pOyAKCQkJ ICMmJiAoCgkJCSAjKGRlZmluZWQgJGhlYWRlci0+eydyZWNlaXZlZCd9ICYmICRoZWFkZXIt PnsncmVjZWl2ZWQnfS0+WzBdLT57J3ZhbHVlJ30gPX4gL1x3LykgJiYKCQkJICMoZGVmaW5l ZCAkaGVhZGVyLT57J3N1YmplY3QnfSAmJiAkaGVhZGVyLT57J3N1YmplY3QnfS0+WzBdLT57 J3ZhbHVlJ30gPX4gL1x3LykgJiYKCQkJICMoZGVmaW5lZCAkaGVhZGVyLT57J3RvJ30gJiYg JGhlYWRlci0+eyd0byd9LT5bMF0tPnsndmFsdWUnfSA9fiAvXHcvKSAmJgoJCQkgIyhkZWZp bmVkICRoZWFkZXItPnsnZnJvbSd9ICYmICRoZWFkZXItPnsnZnJvbSd9LT5bMF0tPnsndmFs dWUnfSA9fiAvXHcvKSkpOwoKCQkjIG1hdGNoIGhlYWRlciBsaW5lcwoJCWlmICgkbGluZSA9 fiAvXihcUys/KTpccyo/KFxTLio/KSQvKQoJCXsKCQkJbXkgJGhlYWQgPSAkMTsgbXkgJHZh bHVlID0gJDI7CgkJCSRuYW1lID0gJGhlYWQ7CgkJCQoJCQkkbmFtZSA9fiB0ci9BLVovYS16 LzsJIyBoZWFkZXIgbmFtZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUKCQkJY2hvbXAoJG5hbWUp OwoKCQkJJHZhbHVlID1+IHMvXHMrPy8gL2dpczsJIyBuaXggZXh0cmEgc3BhY2VzICYgdW5m b2xkIGhlYWRlciBsaW5lcyBieSByZW1vdmluZyBDUkxGCgkJCSR2YWx1ZSA9fiBzLyhcUykk LyQxIC87CgkJCWNob21wKCR2YWx1ZSk7CgkJCQoJCQkjIGlmIHRoaXMgaGVhZGVyIG5hbWUg aGFzIGFscmVhZHkgYmVlbiBmb3VuZCwgYXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5 CgkJCW15ICRjb3VudCA9ICgoZGVmaW5lZCAkaGVhZGVyLT57JG5hbWV9KSAmJiAocmVmKCRo ZWFkZXItPnskbmFtZX0pIGVxICJBUlJBWSIpKT8gc2NhbGFyIEB7JGhlYWRlci0+eyRuYW1l fX0gOiAwOwoJCQkKCQkJIyByZWNvcmQgdGhpcyBoZWFkZXIgbGluZQoJCQkkaGVhZGVyLT57 JG5hbWV9LT5bJGNvdW50XS0+eyd2YWx1ZSd9ID0gJHZhbHVlOwoJCQkkaGVhZGVyLT57JG5h bWV9LT5bJGNvdW50XS0+eyduYW1lJ30gPSAkaGVhZDsgIyBqdXN0IGZvciBjb25zaXN0ZW5j eSAoaS5lLiBwcmUgdHJhbnNmb3JtcykKCQkJCgkJCSNwcmludCAiZm91bmQgJGhlYWQgWyRj b3VudF0gPSAkdmFsdWUkQ1JMRiI7CgkJfQoJCQoJCSMgaWYgdGhpcyBsaW5lIGRvZXNuJ3Qg c3RhcnQgd2l0aCAiaGVhZGVyOiIsIGFwcGVuZCB0byBsYXN0IGxpbmUgZm91bmQgKGlmIGV4 aXN0cykKCQllbHNpZiAoJG5hbWUgJiYgJGxpbmUgPX4gL1x3LyAmJiAkbGluZSAhfiAvXjov KSB7ICRsaW5lID1+IHMvXHMrPy8gL2dpczsgJGxpbmUgPX4gcy9eXHMvLzsgJGhlYWRlci0+ eyRuYW1lfS0+WyhzY2FsYXIgQHskaGVhZGVyLT57JG5hbWV9fSAtIDEpXS0+eyd2YWx1ZSd9 IC49ICRsaW5lIGlmICgoZGVmaW5lZCAkaGVhZGVyLT57JG5hbWV9KSAmJiAocmVmKCRoZWFk ZXItPnskbmFtZX0pIGVxICJBUlJBWSIpKTsgfQogICAgICAgICAgICB9Cgl9CgoJcmV0dXJu ICRoZWFkZXI7Cn0KCnN1YiBkYXRlX2NoZWNrCnsKCW15ICgkZGF0ZSwkcmN2ZCkgPSBzaGlm dDsKCW15ICgkZG93LCAkZGF5LCAkbW9uLCAkeWVhciwgJGhvdXIsICRtaW4sICRzZWMsICRy bWRyKSA9ICI/IjsKCglpZiAoJGRhdGUgPX4gL1xzKj8oXHd7MSw5fSksP1xzKz8oXGQrPylc cys/KFx3ezN9KVxzKz8oXGR7NH0pXHMrPyhcZHsxLDJ9KTooXGR7Mn0pOihcZHsyfSkoLiop L2kpIAoJeyAKCQkkZG93PSQxOyAkZGF5PSQyOyAkbW9uPSQzOyAkeWVhcj0kNDsgJGhvdXI9 JDU7ICRtaW49JDY7ICRzZWM9JDc7ICRybWRyPSQ4OwoJCSRtb24gPSAkbW9uPX4vRGVjL2k/ MTE6JG1vbj1+L05vdi9pPzEwOiRtb249fi9PY3QvaT85OiRtb249fi9TZXAvaT84OiRtb249 fi9BdWcvaT83OiRtb249fi9KdWwvaT82OiRtb249fi9KdW4vaT81OiRtb249fi9NYXkvaT80 OiRtb249fi9BcHIvaT8zOiRtb249fi9NYXIvaT8yOiRtb249fi9GZWIvaT8xOjA7CgoJCWV2 YWwgewoJCSAgICAkZGF0ZSA9IHRpbWVnbSgkc2VjLCRtaW4sJGhvdXIsJGRheSwkbW9uLCR5 ZWFyKTsKCQl9OwoJCWlmICgkQCkgewoJCSAgICByZXR1cm4gImRhdGUtb3V0LW9mLXJhbmdl IChvdmVyZmxvdykiOwoJCX0KCgkJIyBhZGp1c3QgZm9yIGxvY2FsIHRpbWUKCQlpZiAoJHJt ZHIgPX4gL1wrXGQoXGQpXGRcZC8pIHsgJGRhdGUgLT0gJDEgKiA2MCAqIDYwOyB9CgkJaWYg KCRybWRyID1+IC9cLVxkKFxkKVxkXGQvKSB7ICRkYXRlICs9ICQxICogNjAgKiA2MDsgfQoJ fQoJZWxzZSB7IHJldHVybiAiZGF0ZS1mb3JtYXQtdW5rbm93biI7IH0KCiAgICAgICAgaWYg KCRyY3ZkICYmICRyY3ZkID1+IC9ccyo/KFx3ezEsOX0pLD9ccys/KFxkKz8pXHMrPyhcd3sz fSlccys/KFxkezR9KVxzKz8oXGR7MSwyfSk6KFxkezJ9KTooXGR7Mn0pKC4qKS9pKQogICAg ICAgIHsKICAgICAgICAgICAgICAgICRkb3c9JDE7ICRkYXk9JDI7ICRtb249JDM7ICR5ZWFy PSQ0OyAkaG91cj0kNTsgJG1pbj0kNjsgJHNlYz0kNzsgJHJtZHI9JDg7CgkJJG1vbiA9ICRt b249fi9EZWMvaT8xMTokbW9uPX4vTm92L2k/MTA6JG1vbj1+L09jdC9pPzk6JG1vbj1+L1Nl cC9pPzg6JG1vbj1+L0F1Zy9pPzc6JG1vbj1+L0p1bC9pPzY6JG1vbj1+L0p1bi9pPzU6JG1v bj1+L01heS9pPzQ6JG1vbj1+L0Fwci9pPzM6JG1vbj1+L01hci9pPzI6JG1vbj1+L0ZlYi9p PzE6MDsKCgkJZXZhbCB7CgkJICAgICRyY3ZkID0gdGltZWdtKCRzZWMsJG1pbiwkaG91ciwk ZGF5LCRtb24sJHllYXIpOwoJCX07CgkJaWYgKCRAKSB7CgkJICAgIHJldHVybiAiZGF0ZS1v dXQtb2YtcmFuZ2UgKG92ZXJmbG93KSI7CgkJfQoKICAgICAgICAgICAgICAgICMgYWRqdXN0 IGZvciBsb2NhbCB0aW1lCiAgICAgICAgICAgICAgICBpZiAoJHJtZHIgPX4gL1wrXGQoXGQp XGRcZC8pIHsgJHJjdmQgLT0gJDEgKiA2MCAqIDYwOyB9CiAgICAgICAgICAgICAgICBpZiAo JHJtZHIgPX4gL1wtXGQoXGQpXGRcZC8pIHsgJHJjdmQgKz0gJDEgKiA2MCAqIDYwOyB9CiAg ICAgICAgfQogICAgICAgIGVsc2UgeyAkcmN2ZCA9IHRpbWU7IH0KCgkjIGNoZWNrIGZvciBy YW5nZSArLy0KCW15ICRkaWZmID0gJHJjdmQgLSAkZGF0ZTsgbXkgJGRpZmZfZGF5cyA9IHJv dW5kKCRkaWZmLyg2MCo2MCoyNCkpOwoJaWYgKCgkZGlmZiA8ICRkYXRlX2xpbWl0KSBhbmQg KCRkaWZmID4gJGRhdGVfbGltaXQgKiAtMSkpIHsgcmV0dXJuICJkYXRlLWluLXJhbmdlICgk ZGlmZl9kYXlzIGRheXMpIjsgfQoJZWxzZSB7IHJldHVybiAiZGF0ZS1vdXQtb2YtcmFuZ2Ug KCRkaWZmX2RheXMgZGF5cykiOyB9Cn0KCnN1YiByb3VuZCAKewogICAgbXkgJG51bSA9IHNo aWZ0OwogICAgcmV0dXJuIGludCgoJG51bSoxMDApKzAuNSkvMTAwOwp9CgojIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMj IyMgUGFyc2UgQm9keSAgIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIHBhcnNlX2JvZHkKewoJIyB0aGlz IGZ1bmN0aW9uIGlzIHJlYWxseSBvbmx5IHVzZWQgZm9yCgkjIGVtYWlsLXRvLWVtYWlsIGNv bXBhcmlzb25zLCB3aGVyZSBwcm9jZXNzaW5nCgkjIHRoZSBlbnRpcmUgZW1haWwgaXMgcmVx dWlyZWQuLi4gdXN1YWxseQoJIyB3ZSdsbCBqdXN0IHByb2Nlc3MgdGhlIGhlYWRlcgoKCW15 ICRib2R5ID0gIiI7CiAgICAgICAgd2hpbGUgKDxTVERJTj4pIHsgJGJvZHkgLj0gJF87IH0K CXJldHVybiAkYm9keTsKfQkJCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMgUHJvY2VzcyBSZWNlaXZlZCBMaW5lcyAgIyMj IyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwoKc3ViIHByb2Nlc3NfcmN2ZAp7CglteSAkcmN2ZCA9IHNoaWZ0OwoJbXkgJHJ0cm4g PSBzaGlmdDsKCQoJIyBoZXVyaXN0aWNzCglteSAkTFVTRVIJPSBxcn4oPzpcd3wtfFwuKSs/ fjsKCW15ICRET01BSU4JPSBxcn4oPzpcd3wtfFwuKStcLlx3ezIsNH1+OwoJbXkgJElQCQk9 IHFyfig/OlxkezEsM31cLil7M31cZHsxLDN9fjsKCW15ICRFTUFJTCAJPSBxcn4kTFVTRVJc QCRET01BSU5+OwoJbXkgJEhFTE8JPSBxcn5bXlxzXDBcL1xcXCNdKz9+OwoJbXkgJFJETlMJ PSBxcn4oPzokRE9NQUlOfFxbPyRJUFxdP3x1bmtub3dufHVudmVyaWZpZWQpfjsKCQoJbXkg JGVkZ2VfaXAgPSAiIjsKCW15ICR1bnRydXN0ZWQgPSAwOwoKCWlmICgkbm9fbG9jYWxfcmVj ZWl2ZWQpIHsKCSAgICBteSAkbG9jYWxfcmN2ZDsKCSAgICAkbG9jYWxfcmN2ZC0+eyd2YWx1 ZSd9ID0gImF1dG8tZ2VuZXJhdGVkIjsKCSAgICAkbG9jYWxfcmN2ZC0+eyduYW1lJ30gPSAi UmVjZWl2ZWQiOwoJICAgICRsb2NhbF9yY3ZkLT57J3NhbmUnfSA9ICJ0cnVzdGVkIjsKCSAg ICAkbG9jYWxfcmN2ZC0+eydyZG5zJ30gPSAkb3B0X3JlbW90ZV9uYW1lIHx8ICIiOwoJICAg ICRsb2NhbF9yY3ZkLT57J2lwYWQnfSA9ICRvcHRfcmVtb3RlX2lwIHx8ICIiOwoJICAgICRs b2NhbF9yY3ZkLT57J210YW4nfSA9ICRvcHRfbG9jYWxfbmFtZSB8fCAiIjsKCSAgICAkbG9j YWxfcmN2ZC0+eydtdGFpJ30gPSAkb3B0X2xvY2FsX2lwIHx8ICIiOwoJICAgICRsb2NhbF9y Y3ZkLT57J2hlbG8nfSA9ICRvcHRfaGVsbyB8fCAiIjsKCSAgICAkbG9jYWxfcmN2ZC0+eydm b3JlJ30gPSAkb3B0X3JjcHQgfHwgIiI7CgkgICAgJGxvY2FsX3JjdmQtPnsnZnJvbSd9ID0g JHJldHVybl9wYXRoIHx8ICIiOwoKCSAgICBzcGxpY2UoQHskcmN2ZH0sIDAsIDAsICRsb2Nh bF9yY3ZkKTsKCX0KCSAgICAKCSMgY2hlY2sgaWYgd2Ugd2VyZSBwYXNzZWQgYSB2YWxpZCBh cnJheSBvZiByZWNlaXZlZCBsaW5lcwoJdW5sZXNzICgoZGVmaW5lZCAkcmN2ZCkgJiYgKHJl ZigkcmN2ZCkgZXEgIkFSUkFZIikgJiYgJHJjdmQtPlswXS0+eyd2YWx1ZSd9KQoJewoJCW5v IHN0cmljdCAncmVmcyc7CgkJbXkgJXJjdmRfaGFzaCA9ICgndmFsdWUnID0+ICJmcm9tIGxv Y2FsaG9zdDsgIiAuIGdtdGltZSB0aW1lLCAnbmFtZScgPT4gIlJlY2VpdmVkIik7CgkJbXkg QHJjdmRfYXJyYXk7ICRyY3ZkX2FycmF5WzBdID0gXCVyY3ZkX2hhc2g7ICAkcmN2ZCA9IFxA cmN2ZF9hcnJheTsKCX0KCWVsc2UgewoKCSMgaXRlcmF0ZSB0aHJvdWdoIGVhY2ggcmVjZWl2 ZWQgaGVhZGVyLCBwYXJzaW5nIGFuZCB2YWxpZGF0aW5nIHRoZSBpbmZvCglmb3IgKG15ICR4 ID0gMDsgJHggPCBzY2FsYXIgQCRyY3ZkOyAkeCsrKQoJewoJCSMgc2tpcCBwcm9jZXNzaW5n IGlmIHdlIGFscmVhZHkgbG9zdCBjb25maWRlbmNlIGluIHRoaXMgdHJhaWwgb2YgcmVjZWl2 ZWQgbGluZXMKCQkjaWYgKCR1bnRydXN0ZWQpIHsgJHJjdmQtPlskeF0tPnsnc2FuZSd9ID0g InVudHJ1c3RlZCI7IG5leHQ7IH0KCQoJCW15ICRoZWxvID0gJHJjdmQtPlskeF0tPnsnaGVs byd9IHx8ICIiOwoJCW15ICRpcGFkID0gJHJjdmQtPlskeF0tPnsnaXBhZCd9IHx8ICIiOwoJ CW15ICRyZG5zID0gJHJjdmQtPlskeF0tPnsncmRucyd9IHx8ICIiOwoJCW15ICRmcm9tID0g JHJjdmQtPlskeF0tPnsnZnJvbSd9IHx8ICIiOwoJCW15ICRtdGFuID0gJHJjdmQtPlskeF0t PnsnbXRhbid9IHx8ICIiOwoJCW15ICRtdGFpID0gJHJjdmQtPlskeF0tPnsnbXRhaSd9IHx8 ICIiOwoJCW15ICRmb3JlID0gJHJjdmQtPlskeF0tPnsnZm9yZSd9IHx8ICIiOwoKCQlteSAk aWRudD0iIjsgbXkgJG10YXY9IiI7IG15ICR3aXRoPSIiOyBteSAkZGF0ZT0iIjsKCQkKCQkj IHRyeSB0byB0YWtlIGludG8gYWNjb3VudCBhbGwga25vd24gTVRBIGZvcm1hdHMKCQkKCQlp ZiAgICAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL1woZW52ZWxvcGUtKD86c2VuZGVy fGZyb20pIDwoJEVNQUlMKT5cKS8vZ2lzKSAJCQl7ICRmcm9tPSQxOyAJCQkJCX0jIHByaW50 ICJYLSR4LW1hdGNoZWQtMDE6IGZyb209JGZyb20sIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+ eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWlmICAgICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+ IHMvO1xzKz8oXHd7M30sIFxkezEsMn0gXHd7M30gXGR7Miw0fS4qPykkLy9naXMpCQkJeyAk ZGF0ZT0kMTsgCQkJCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTAyOiBkYXRlPSRkYXRlLCBy ZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQlpZiAgICAoJHJj dmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL2ZvclxzKz88PygkRU1BSUwpPj8oPzogXChzaW5n bGUtZHJvcFwpKT8vL2dpcykgCQkJeyAkZm9yZT0kMTsgCQkJCQl9IyBwcmludCAiWC0keC1t YXRjaGVkLTAzOiBmb3JlPSRmb3JlLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUn fSAkQ1JMRiI7IH0KCQlpZiAgICAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL2J5XHMr PyhcUys/KSBcKCgkSVApXCkgXCgoLio/KVwpLy9naXMpIAkJCQl7ICRtdGFuPSQxOyAkbXRh aT0kMjsgJG10YXY9JDM7IAkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0wNDogbXRhbj0kbXRh biwgbXRhaT0kbXRhaSwgbXRhdj0kbXRhdiwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3Zh bHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9i eVxzKz8oXFMrPykgXFsoJElQKVxdLy9naXMpIAkJCQkJeyAkbXRhbj0kMTsgJG10YWk9JDI7 IAkJCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTA1OiBtdGFuPSRtdGFuLCBtdGFpPSRtdGFp LCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAo JHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL2J5XHMrPyhcUys/KSBcKCguKz8pXCkvL2dp cykgCQkJCQl7ICRtdGFuPSQxOyAkbXRhdj0kMjsgCQkJCX0jIHByaW50ICJYLSR4LW1hdGNo ZWQtMDY6IG10YW49JG10YW4sIG10YXY9JG10YXYsIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+ eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+ IHMvYnlccys/KCRJUCkoPz1cV3w7fCQpLy9naXMpIAkJCQkJCXsgJG10YWk9JDE7IAkJCQkJ fSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0wNzogbXRhaT0kbXRhaSwgcmVtYWluaW5nPSRyY3Zk LT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3Zh bHVlJ30gPX4gcy9ieVxzKz8oJERPTUFJTikoPz1cV3w7fCQpLy9naXMpIAkJCQkJeyAkbXRh bj0kMTsgCQkJCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTA4OiBtdGFuPSRtdGFuLCByZW1h aW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJjdmQt PlskeF0tPnsndmFsdWUnfSA9fiBzL2J5XHMrPyhcUys/KSg/PVxXfDt8JCkvL2dpcykgCQkJ CQl7ICRtdGFuPSQxOyAJCQkJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMDk6IG10YW49JG10 YW4sIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWlmICAg ICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvKD86d2l0aClccys/KFxTKz8pIFwoKC4q PylcKS8vZ2lzKSAJCQkJCXsgJHdpdGg9JDE7ICRtdGF2PSQyIGlmICEkbXRhdjsgCQl9IyBw cmludCAiWC0keC1tYXRjaGVkLTEwOiB3aXRoPSR3aXRoLCBtdGF2PSRtdGF2LCByZW1haW5p bmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7fQoJCWVsc2lmICgkcmN2ZC0+WyR4 XS0+eyd2YWx1ZSd9ID1+IHMvKD86d2l0aClccys/KFxTKz8pKD89XFd8O3wkKS8vZ2lzKSAJ CQkJCXsgJHdpdGg9JDE7IAkJCQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0xMTogd2l0aD0k d2l0aCwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJaWYg ICAgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz8oJFJETlMpIFwoSEVM TyAoJEhFTE8pXCkgXCgoJExVU0VSKVxAXFs/KCRJUClcXT8vL2dpcykgCXsgJHJkbnM9JDE7 ICRoZWxvPSQyOyAkaWRudD0kMzsgJGlwYWQ9JDQ7IAl9IyBwcmludCAiWC0keC1tYXRjaGVk LTEyOiByZG5zPSRyZG5zLCBoZWxvPSRoZWxvLCBpZG50PSRpZG50LCBpcGFkPSRpcGFkLCBy ZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJj dmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkUkROUykgXChIRUxPICgkSEVM TylcKSBcKFxbPygkSVApXF0/Ly9naXMpIAkJeyAkcmRucz0kMTsgJGhlbG89JDI7ICRpcGFk PSQzOyAJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMTM6IHJkbnM9JHJkbnMsIGhlbG89JGhl bG8sIGlwYWQ9JGlwYWQsIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxG IjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRS RE5TKSBcKFxbKCRJUClcXSBoZWxvPSgkSEVMTylcKS8vZ2lzKSAJCQl7ICRyZG5zPSQxOyAk aXBhZD0kMjsgJGhlbG89JDM7IAkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0xNDogcmRucz0k cmRucywgaXBhZD0kaXBhZCwgaGVsbz0kaGVsbywgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57 J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4g cy9eZnJvbVxzKz8oJFJETlMpIFwoKCRMVVNFUilcQFxbPygkSVApXF0/XCkvL2dpcykgCQkJ eyAkcmRucz0kMTsgJGlkbnQ9JDI7ICRpcGFkPSQzOyAJCX0jIHByaW50ICJYLSR4LW1hdGNo ZWQtMTU6IHJkbnM9JHJkbnMsIGlkbnQ9JGlkbnQsIGlwYWQ9JGlwYWQsIHJlbWFpbmluZz0k cmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+ eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRSRE5TKVwoKCRJUClcKS8vZ2lzKSAJCQkJCXsg JHJkbnM9JDE7ICRpcGFkPSQyOyAJCQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0xNjogcmRu cz0kcmRucywgaXBhZD0kaXBhZCwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30g JENSTEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxz Kz9cWygkSVApXF0gXChoZWxvPSgkSEVMTykgaWRlbnQ9KCRMVVNFUilcKS8vZ2lzKSAJCXsg JGlwYWQ9JDE7ICRoZWxvPSQyOyAkaWRudD0kMzsgCQl9IyBwcmludCAiWC0keC1tYXRjaGVk LTE3OiBpcGFkPSRpcGFkLCBoZWxvPSRoZWxvLCBpZG50PSRpZG50LCByZW1haW5pbmc9JHJj dmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJjdmQtPlskeF0tPnsn dmFsdWUnfSA9fiBzL15mcm9tXHMrP1xbKCRJUClcXSBcKGFjY291bnQgKCRMVVNFUikgSEVM TyAoJEhFTE8pXCkvL2dpcykgCQl7ICRpcGFkPSQxOyAkaWRudD0kMjsgJGhlbG89JDM7IAkJ fSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0xODogaXBhZD0kaXBhZCwgaWRudD0kaWRudCwgaGVs bz0kaGVsbywgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJ ZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz9cWygkSVApXF0g XChoZWxvPSgkSEVMTylcKS8vZ2lzKSAJCQkJeyAkaXBhZD0kMTsgJGhlbG89JDI7IAkJCQl9 IyBwcmludCAiWC0keC1tYXRjaGVkLTE5OiBpcGFkPSRpcGFkLCBoZWxvPSRoZWxvLCByZW1h aW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJjdmQt PlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrP1xbPygkSVApXF0/Oj9cZCo/IFwoSEVM TyAoJEhFTE8pXCkvL2dpcykgCQkJeyAkaXBhZD0kMTsgJGhlbG89JDI7IAkJCQl9IyBwcmlu dCAiWC0keC1tYXRjaGVkLTIwOiBpcGFkPSRpcGFkLCBoZWxvPSRoZWxvLCByZW1haW5pbmc9 JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJjdmQtPlskeF0t PnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkSEVMTykgXChJREVOVDooJExVU0VSKVxAKCRS RE5TKSBcWygkSVApXF0vL2dpcykgCQl7ICRoZWxvPSQxOyAkaWRudD0kMjsgJHJkbnM9JDM7 ICRpcGFkPSQ0OyAJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0yMTogaGVsbz0kaGVsbywgaWRu dD0kaWRudCwgcmRucz0kcmRucywgaXBhZD0kaXBhZCwgcmVtYWluaW5nPSRyY3ZkLT5bJHhd LT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30g PX4gcy9eZnJvbVxzKz8oJEhFTE8pIFwoPD8oJFJETlMpPj9ccz9cWygkSVApXF0vL2dpcykg CQkJeyAkaGVsbz0kMTsgJHJkbnM9JDI7ICRpcGFkPSQzOyAJCX0jIHByaW50ICJYLSR4LW1h dGNoZWQtMjI6IGhlbG89JGhlbG8sIHJkbnM9JHJkbnMsIGlwYWQ9JGlwYWQsIHJlbWFpbmlu Zz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4 XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRIRUxPKSBcKFxbKCRJUClcXSBpZGVudD0o JExVU0VSKVwpLy9naXMpIAkJCXsgJGhlbG89JDE7ICRpcGFkPSQyOyAkaWRudD0kMzsgCQl9 IyBwcmludCAiWC0keC1tYXRjaGVkLTIzOiBoZWxvPSRoZWxvLCBpcGFkPSRpcGFkLCBpZG50 PSRpZG50LCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQll bHNpZiAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkSEVMTykgXChw cm94eWluZyBmb3IgKCRJUClcKSBcKC4qPyB1c2VyICgkTFVTRVIpXCkvL2dpcykJeyAkaGVs bz0kMTsgJGlwYWQ9JDI7ICRpZG50PSQzOyAJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMjQ6 IGhlbG89JGhlbG8sIGlwYWQ9JGlwYWQsIGlkbnQ9JGlkbnQsIHJlbWFpbmluZz0kcmN2ZC0+ WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1 ZSd9ID1+IHMvXmZyb21ccys/KCRIRUxPKSBcKGFjY291bnQgKCRMVVNFUikgXFsoJElQKVxd IHZlcmlmaWVkXCkvL2dpcykgCXsgJGhlbG89JDE7ICRpZG50PSQyOyAkaXBhZD0kMzsgCQl9 IyBwcmludCAiWC0keC1tYXRjaGVkLTI1OiBoZWxvPSRoZWxvLCBpZG50PSRpZG50LCBpcGFk PSRpcGFkLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQll bHNpZiAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrP1woPygkSEVMTykg XCg/XFs/KCRJUClcXT9cKT8vL2dpcykgCQkJCXsgJGhlbG89JDE7ICRpcGFkPSQyOyAJCQkJ fSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0yNjogaGVsbz0kaGVsbywgaXBhZD0kaXBhZCwgcmVt YWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3Zk LT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz8oJEhFTE8pIFwobG9jYWxob3N0IFxb Lio/OigkSVApXF1cKS8vZ2lzKSAJCQl7ICRoZWxvPSQxOyAkaXBhZD0kMjsgCQkJCX0jIHBy aW50ICJYLSR4LW1hdGNoZWQtMjc6IGhlbG89JGhlbG8sIGlwYWQ9JGlwYWQsIHJlbWFpbmlu Zz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4 XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRIRUxPKSBcKCgkTFVTRVIpXEAoJFJETlMp XCkvL2dpcykgCQkJeyAkaGVsbz0kMTsgJGlkbnQ9JDI7ICRyZG5zPSQzOyAJCX0jIHByaW50 ICJYLSR4LW1hdGNoZWQtMjg6IGhlbG89JGhlbG8sIGlkbnQ9JGlkbnQsIHJkbnM9JHJkbnMs IHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgk cmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRIRUxPKSBcKCgkUkROUylc KS8vZ2lzKSAJCQkJCXsgJGhlbG89JDE7ICRyZG5zPSQyOyAJCQkJfSMgcHJpbnQgIlgtJHgt bWF0Y2hlZC0yOTogaGVsbz0kaGVsbywgcmRucz0kcmRucywgcmVtYWluaW5nPSRyY3ZkLT5b JHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVl J30gPX4gcy9cKGZyb21ccys/KCRMVVNFUilcQCgkUkROUylcKS8vZ2lzKQkJCQkJeyAkaWRu dD0kMTsgJHJkbnM9JDI7IAkJCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTMwOiBpZG50PSRp ZG50LCByZG5zPSRyZG5zLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JM RiI7IH0KCQllbHNpZiAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL1woZnJvbVxzKz8o JExVU0VSKVxAKCRIRUxPKVwpLy9naXMpCQkJCQl7ICRpZG50PSQxOyAkaGVsbz0kMjsgCQkJ CX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMzE6IGlkbnQ9JGlkbnQsIGhlbG89JGhlbG8sIHJl bWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2 ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/XCg/XFs/KCRJUClcXT9cKT8vL2dp cykgCQkJCQl7ICRpcGFkPSQxOyAJCQkJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMzI6IGlw YWQ9JGlwYWQsIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJ CWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRIRUxPKSg/ PVxXfDt8JCkvL2dpcykgCQkJCQl7ICRoZWxvPSQxOyAJCQkJCX0jIHByaW50ICJYLSR4LW1h dGNoZWQtMzM6IGhlbG89JGhlbG8sIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9 ICRDUkxGIjsgfQoKCQkjIGxvb2t1cCBJUCBpZiBub3QgcHJvdmlkZWQKCQkkaXBhZCA9IGhv c3QoJHJkbnMpIGlmICEkaXBhZCAmJiAkcmRucyAmJiAkb3B0aW9ucyA9fiAvZC87CgkJJGlw YWQgPSBob3N0KCRoZWxvKSBpZiAhJGlwYWQgJiYgISRyZG5zICYmICRoZWxvICYmICRoZWxv ID1+IC8kRE9NQUlOLyAmJiAkb3B0aW9ucyA9fiAvZC87CgoJCSMgZXhjbHVkZSBsaW5lcyB3 aXRoIG5vIElQCgkJI25leHQgaWYgISRpcGFkICYmICgoc2NhbGFyIEAkcmN2ZCkgPiAxKTsK CgkJIyBlbnN1cmUgdGhlIGxvY2FsIHJlY2VpdmVkIGxpbmUgaGFzIGEgZGF0ZSBzdGFtcAoJ CSRkYXRlID0gZ210aW1lIHRpbWUgdW5sZXNzICRkYXRlIHx8ICR4OwoKCQkjIHNhdmUgImZy b20iIGluZm8gZm9yIGNvbXBhcmlzb24gaW4gbmV4dCBpdGVyYXRpb24KCQkkcmN2ZC0+WyR4 XS0+eydyZG5zJ30JPSAkcmRuczsJCQoJCSRyY3ZkLT5bJHhdLT57J2lwYWQnfQk9ICRpcGFk OwoJCSRyY3ZkLT5bJHhdLT57J2RhdGUnfQk9ICRkYXRlOwoKCQkjIGV4Y2x1ZGUgbGluZXMg ZnJvbSBsb2NhbCwgcHJpdmF0ZSAoUkZDIDE5MTgpLCBhbmQgaW52YWxpZCBJUCBhZGRyZXNz IHJhbmdlcwoJCW15ICRyZXNlcnZlZCA9IHFyfl4oKD86MTI3XC4pfCg/OjEwXC4pfCg/OjE3 MlwuKD86MVs2LTldfDJbMC05XXwzMSlcLil8KD86MTkyXC4xNjhcLil8KD86MTY5XC4yNTRc LikpfjsKCQlteSAkdmFsaWQgPSBxcn5eKCg/OjA/MD9cZHxbMDFdP1xkXGR8MlswLTRdXGR8 MjVbMC01XSlcLig/OjA/MD9cZHxbMDFdP1xkXGR8MlswLTRdXGR8MjVbMC01XSlcLig/OjA/ MD9cZHxbMDFdP1xkXGR8MlswLTRdXGR8MjVbMC01XSlcLig/OjA/MD9cZHxbMDFdP1xkXGR8 MlswLTRdXGR8MjVbMC01XSkpJH47CgkJbmV4dCBpZiAoKCRyZG5zIGFuZCAkcmRucyA9fiAv bG9jYWxob3N0L2kpIHx8ICgkaXBhZCBhbmQgKCRpcGFkID1+IC8kcmVzZXJ2ZWQvIHx8ICRp cGFkICF+IC8kdmFsaWQvKSkpICYmICgoc2NhbGFyIEAkcmN2ZCkgPiAxKTsKCQkKCQkjIGxv b2t1cCBNVEEgSVAvckROUyBpZiBub3QgcHJvdmlkZWQKCQkkbXRhaSA9IGhvc3QoJG10YW4p IGlmICEkbXRhaSAmJiAkbXRhbiAmJiAkb3B0aW9ucyA9fiAvZC87CgkJJG10YW4gPSBob3N0 KCRtdGFpKSBpZiAhJG10YW4gJiYgJG10YWkgJiYgJG9wdGlvbnMgPX4gL2QvOwoKCQkjIGV4 Y2x1ZGUgbGluZXMgZnJvbSB3aXRoaW4gb3VyIGNsYXNzIEIgKC8xNikgbmV0d29yawoJCW5l eHQgaWYgKCgkZWRnZV9pcCAmJiAkaXBhZCAmJiBpc19zYW1lX2NsYXNzX0IoJGVkZ2VfaXAs JGlwYWQpKXx8KCEkZWRnZV9pcCAmJiAkbXRhaSAmJiAkaXBhZCAmJiBpc19zYW1lX2NsYXNz X0IoJG10YWksJGlwYWQpKSkgJiYgKChzY2FsYXIgQCRyY3ZkKSA+IDEpOwoJCQoJCSMgcGVy Zm9ybSByZXZlcnNlIEROUyBsb29rdXAgaWYgbm90IHByb3ZpZGVkIGJ5IE1UQQoJCSRyZG5z ID0gaG9zdCgkaXBhZCkgaWYgISRyZG5zICYmICRpcGFkICYmICRvcHRpb25zID1+IC9kLzsK CQkKCQkjIGZvcmNlIGEgcmV2ZXJzZSBETlMgbG9va3VwIG9uIGFsbCBJUHMsIGV2ZW4gdGhv c2Ugd2l0aCBhbiBSRE5TIHNldCBieSB0aGUgTVRBCgkJJHJkbnMgPSBob3N0KCRpcGFkKSBp ZiAkaXBhZCAmJiAkb3B0aW9ucyA9fiAvZi87CgkJCgkJIyBwZXJmb3JtIEFTTiBsb29rdXAg KFJGQyAxOTMwLzIyNzApCgkJbXkgJGFzbiA9ICIiOwoJCSRhc24gPSBhc24oJGlwYWQpIGlm ICRpcGFkICYmICRvcHRpb25zID1+IC9hLzsKCgkJIyBwZXJmb3JtIFNQRiBsb29rdXAgKFJG QyA0NDA4KQoJCW15ICRyZXN1bHQgPSAiIjsgbXkgJHJlY2VpdmVkX3NwZiA9ICIiOwoJCWlm ICgkb3B0aW9ucyA9fiAvcC8pCgkJewoJCQlpZiAoc2NhbGFyIEBjaWRyX2xpc3QgJiYgZXZh bHtOZXQ6OkNJRFI6OmNpZHJsb29rdXAoJGlwYWQsIEBjaWRyX2xpc3QpfSkKCQkJewoJCQkJ JHJlc3VsdCA9ICJwYXNzIjsKCQkJCSRyZWNlaXZlZF9zcGYgPSAicGFzcyAoJGlwYWQgaXMg bG9jYWxseSB3aGl0ZWxpc3RlZCkiOwoJCQl9CgoJCQlpZiAoJGRiZmlsZSAmJiAhJHJlc3Vs dCkKCQkJewoJCQkJJnJldGllIHVubGVzcyB0aWVkICVkYjsKCQkJCWlmICgkZGJ7JGlwYWR9 KQoJCQkJewoJCQkJCSRyZXN1bHQgPSAicGFzcyI7CgkJCQkJJHJlY2VpdmVkX3NwZiA9ICJw YXNzICgkaXBhZCBpcyBhdXRoZW50aWNhdGVkIHZpYSBQT1AzKSI7CgkJCQl9CgkJCX0KCQkJ CgkJCWlmICgkcnRybiAmJiAkaXBhZCAmJiAhJHJlc3VsdCkKCQkJewoJCQkgICAgbXkgJHNy dnIgPSAkcmRucz8kcmRuczooJGhlbG8/JGhlbG86JGlwYWQpOwoJCQkgICAgZXZhbCB7CgkJ CQlteSAkc3BmX3NlcnZlciA9IE1haWw6OlNQRjo6U2VydmVyLT5uZXcoKTsKCQkJCW15ICRy ZXF1ZXN0ID0gTWFpbDo6U1BGOjpSZXF1ZXN0LT5uZXcoCgkJCQkgICAgaWRlbnRpdHkgPT4g JHJ0cm4sCgkJCQkgICAgaXBfYWRkcmVzcyA9PiAkaXBhZCwKCQkJCSAgICBoZWxvX2lkZW50 aXR5ID0+ICRzcnZyCgkJCQkgICAgKTsKCQkJCW15ICRyZXNwb25zZSA9ICRzcGZfc2VydmVy LT5wcm9jZXNzKCRyZXF1ZXN0KTsKCQkJCSRyZXN1bHQgPSAkcmVzcG9uc2UtPmNvZGU7CgkJ CQkkcmVjZWl2ZWRfc3BmID0gJHJlc3BvbnNlLT5yZWNlaXZlZF9zcGZfaGVhZGVyOwoJCQkg ICAgfTsKCQkJICAgIGlmICgkQCkgewoJCQkJc3lzbG9nKCd3YXJuaW5nJywgJ1NQRiBxdWVy eSBlcnJvciAoaXA9JXMsIHNlbmRlcj0lcywgaGVsbz0lcyk6ICVzJywKCQkJCSAgICAgICAk aXBhZCwgJHJ0cm4sICRzcnZyLCAkQCk7CgkJCQkkQCA9IHVuZGVmOwoJCQkJJHJlc3VsdCA9 IHVuZGVmOwoJCQkgICAgfQoJCQl9CgkJCQoJCQlpZiAoISRyZXN1bHQpCgkJCXsKCQkJCSRy ZXN1bHQgPSAiZXJyb3IiOwoJCQkJJHJlY2VpdmVkX3NwZiA9ICJ1bmFibGUgdG8gZGV0ZXJt aW5lIHNlbmRlciBpbmZvIjsKCQkJfQoJCX0KCgkJIyB3ZSBpbXBsaWNpdGVseSB0cnVzdCB0 aGUgcmVjZWl2ZWQgbGluZSBzZXQgImJ5IiBvdXIgb3duIHNlcnZlciBhcyB2YWxpZCAoZmly c3QgdW50cnVzdGVkICJmcm9tIikKCQlpZiAoISRlZGdlX2lwKSAKCQl7IAoJCQkkZWRnZV9p cCA9ICRtdGFpOyAKCQkJJHJjdmQtPlskeF0tPnsnc2FuZSd9ID0gc2V0X3JjdmQoJGhlbG8s JGlwYWQsJGlkbnQsJHJkbnMsJGZyb20sJG10YW4sJG10YWksJG10YXYsJGZvcmUsJHdpdGgs JGRhdGUsJGFzbiwkcmVzdWx0KTsgCgkJCSRyY3ZkLT5bJHhdLT57J3NwZid9ID0gJHJlY2Vp dmVkX3NwZiBpZiAkb3B0aW9ucyA9fiAvcC87CgkJfQoKCQkjIG5vdyB3ZSdsbCB0cnkgdG8g ZXN0YWJsaXNoIHRoZSB2YWxpZGl0eSBvZiBlYWNoIHJlY2VpdmVkIGxpbmUgYnkgY2hlY2tp bmcgCgkJIyBmb3IgY29udGludWl0eSBhbmQgcmVqZWN0aW5nIGxpbmVzIHRoYXQgZG9uJ3Qg Zml0IHRoZSAiZnJvbS9ieSIgY2hhaW4KCQllbHNlCgkJewoJCQkjcHJpbnQgIiBieSAiIC4g JG10YW4gLiAiIC8gcHJldiBmcm9tICIgLiAkcmN2ZC0+WyR4LTFdLT57J3JkbnMnfSAuICIk Q1JMRiI7CgkJCSNwcmludCAiIGJ5ICIgLiAkbXRhaSAuICIgLyBwcmV2IGZyb20gIiAuICRy Y3ZkLT5bJHgtMV0tPnsnaXBhZCd9IC4gIiRDUkxGIjsKCQkJaWYgKAoJCQkJKAoJCQkJCSgk bXRhbiAmJiAkcmN2ZC0+WyR4LTFdLT57J3JkbnMnfSAmJiAkbXRhbiA9fiAvJHJjdmQtPlsk eC0xXS0+eydyZG5zJ30vKSB8fCAKCQkJICAgICAJCSgkbXRhaSAmJiAkcmN2ZC0+WyR4LTFd LT57J2lwYWQnfSAmJiAkbXRhaSA9fiAvJHJjdmQtPlskeC0xXS0+eydpcGFkJ30vKQoJCQkJ KSAmJiAJKCEkdW50cnVzdGVkKQoJCQkgICApIAoJCQkgICAgIHsgCgkJCQkkcmN2ZC0+WyR4 XS0+eydzYW5lJ30gPSBzZXRfcmN2ZCgkaGVsbywkaXBhZCwkaWRudCwkcmRucywkZnJvbSwk bXRhbiwkbXRhaSwkbXRhdiwkZm9yZSwkd2l0aCwkZGF0ZSwkYXNuLCRyZXN1bHQpOyAKCQkJ CSRyY3ZkLT5bJHhdLT57J3NwZid9ID0gJHJlY2VpdmVkX3NwZiBpZiAkb3B0aW9ucyA9fiAv cC87CgkJCSAgICAgfQoJCQllbHNlIAoJCQl7IAoJCQkJJGhlbG8gPSAidW50cnVzdGVkLSIu JGhlbG8gaWYgJGhlbG87ICRpcGFkID0gInVudHJ1c3RlZC0iLiRpcGFkIGlmICRpcGFkOwoJ CQkJJGlkbnQgPSAidW50cnVzdGVkLSIuJGlkbnQgaWYgJGlkbnQ7ICRyZG5zID0gInVudHJ1 c3RlZC0iLiRyZG5zIGlmICRyZG5zOwoJCQkJJGZyb20gPSAidW50cnVzdGVkLSIuJGZyb20g aWYgJGZyb207ICRtdGFuID0gInVudHJ1c3RlZC0iLiRtdGFuIGlmICRtdGFuOwoJCQkJJG10 YWkgPSAidW50cnVzdGVkLSIuJG10YWkgaWYgJG10YWk7ICRtdGF2ID0gInVudHJ1c3RlZC0i LiRtdGF2IGlmICRtdGF2OwoJCQkJJGZvcmUgPSAidW50cnVzdGVkLSIuJGZvcmUgaWYgJGZv cmU7ICR3aXRoID0gInVudHJ1c3RlZC0iLiR3aXRoIGlmICR3aXRoOwoJCQkJJGRhdGUgPSAi IjsgJGFzbiA9ICIiOyAkcmVzdWx0ID0gIiI7CgkJCQkkcmN2ZC0+WyR4XS0+eydzYW5lJ30g PSBzZXRfcmN2ZCgkaGVsbywkaXBhZCwkaWRudCwkcmRucywkZnJvbSwkbXRhbiwkbXRhaSwk bXRhdiwkZm9yZSwkd2l0aCwkZGF0ZSwkYXNuLCRyZXN1bHQpOyAKCQkJCSR1bnRydXN0ZWQg PSAxOyAKCQkJfQoJCX0KCX19CgkKCXJldHVybiAkcmN2ZDsKfQoKc3ViIGlzX3NhbWVfY2xh c3NfQgp7CglteSAoJGlwMSwkaXAyKSA9IEBfOwoJJGlwMSA9fiBzL14oXGR7MSwzfVwuXGR7 MSwzfVwuKS4qPyQvJDEvZ2lzOwoJJGlwMiA9fiBzL14oXGR7MSwzfVwuXGR7MSwzfVwuKS4q PyQvJDEvZ2lzOwoJCglyZXR1cm4gKCRpcDEgZXEgJGlwMik/IDE6MDsKfQoKc3ViIGFzbgp7 CglteSAkdGFyZ2V0ID0gc2hpZnQ7CglteSAkb3V0cHV0ID0gIiI7CgogICAgICAgIG15ICRJ UCAgICAgICAgICA9IHFyfig/OlxkezEsM31cLil7M31cZHsxLDN9fjsKICAgICAgICBteSAk RE9NQUlOICAgICAgPSBxcn4oPzpcd3wtfFwuKSs/XC5cd3syLDR9fjsKCglpZiAoICR0YXJn ZXQgPX4gcy8oXGR7MSwzfSlcLihcZHsxLDN9KVwuKFxkezEsM30pXC4oXGR7MSwzfSkvJDQu JDMuJDIuJDEuJGFzbl9zZXJ2ZXIvICkKCXsKCQkjIHVuY29tbWVudCB0aGlzIGNvZGUgaWYg eW91IGRvIG5vdCB3YW50IHRvIHVzZSBOZXQ6OkROUzo6UmVzb2x2ZXIgYW5kIHlvdSBoYXZl ICdob3N0JyBvbiB5b3VyIHN5c3RlbQoJCSNvcGVuIChIT1NULCAiaG9zdCAtdCB0eHQgJHRh cmdldCAyPi9kZXYvbnVsbCB8Iikgb3IgZXJyb3IoIndhcm4iLCJIb3N0IGxvb2t1cCBmYWls ZWQ6ICQhIik7CgkJI3doaWxlICg8SE9TVD4pIHsgJG91dHB1dCA9ICQxIGlmIC9cUSR0YXJn ZXRcRSg/OiBkZXNjcmlwdGl2ZSk/IHRleHQgIihcZCo/KSIuKi87IH0KCQkjY2xvc2UgSE9T VDsKCiAgICAgICAgICAgICAgICAjIGZpbmQgQVNOIGluZm8gdmlhIE5ldDo6RE5TOjpSZXNv bHZlcgoJICAgICAgICBpZiAobXkgJHF1ZXJ5ID0gJHJlcy0+c2VuZCgkdGFyZ2V0LCJUWFQi KSkgeyBmb3JlYWNoICgkcXVlcnktPmFuc3dlcikgeyAkb3V0cHV0ID0gJDEgaWYgJF8tPnN0 cmluZyA9fiAvJERPTUFJTlwuXHMrP1xkKz9ccys/SU5ccys/VFhUXHMrPyIoXGQrPykiXHMr PyIkSVAiXHMrPyJcZCs/Ii87IH19CiAgICAgICAgICAgICAgICAjZWxzZSB7IGVycm9yKCJ3 YXJuIiwiQVNOIGxvb2t1cCBmYWlsZWQ6ICIgLiAkcmVzLT5lcnJvcnN0cmluZyk7IH0KCX0g CgoJcmV0dXJuICRvdXRwdXQ7Cn0KCnN1YiBob3N0CnsKCW15ICR0YXJnZXQgPSBzaGlmdDsK CW15ICRvdXRwdXQgPSAiIjsKCQoJbXkgJElQCQk9IHFyfig/OlxkezEsM31cLil7M31cZHsx LDN9fjsJCglteSAkRE9NQUlOCT0gcXJ+KD86XHd8LXxcLikrP1wuXHd7Miw0fX47CgoJaWYg KCR0YXJnZXQgPX4gcy8oJElQfCRET01BSU4pLyQxLykKCXsKCQkjIHVuY29tbWVudCB0aGlz IGNvZGUgaWYgeW91IGRvIG5vdCB3YW50IHRvIHVzZSBOZXQ6OkROUzo6UmVzb2x2ZXIgYW5k IHlvdSBoYXZlICdob3N0JyBvbiB5b3VyIHN5c3RlbQoJCSNvcGVuIChIT1NULCAiaG9zdCAk dGFyZ2V0IDI+L2Rldi9udWxsIHwiKSBvciBlcnJvcigid2FybiIsIkhvc3QgbG9va3VwIGZh aWxlZDogJCEiKTsKCQkjd2hpbGUgKDxIT1NUPikgeyAkb3V0cHV0ID0gJDEgaWYgLyRET01B SU4gKD86ZG9tYWluIG5hbWUgcG9pbnRlcnxoYXMgYWRkcmVzcykgKCRJUHwkRE9NQUlOKVwu Py87IH0KCQkjY2xvc2UgSE9TVDsKCgkJIyBmaW5kIEROUyBpbmZvIHZpYSBOZXQ6OkROUzo6 UmVzb2x2ZXIKCSAgICAgICAgaWYgKG15ICRxdWVyeSA9ICRyZXMtPnNlbmQoJHRhcmdldCkp IHsgZm9yZWFjaCAoJHF1ZXJ5LT5hbnN3ZXIpIHsgJG91dHB1dCA9ICQxIGlmICRfLT5zdHJp bmcgPX4gLyRET01BSU5cLlxzKz9cZCs/XHMrP0lOXHMrPyg/OlBUUnxBKVxzKz8oJElQfCRE T01BSU4pXC4/LzsgfX0KICAgICAgICAJI2Vsc2UgeyBlcnJvcigid2FybiIsIkROUyBsb29r dXAgZmFpbGVkOiAiIC4gJHJlcy0+ZXJyb3JzdHJpbmcpOyB9Cgl9CgkKCXJldHVybiAkb3V0 cHV0Owp9CgpzdWIgc2V0X3JjdmQKewoJbXkgKCRoZWxvLCRpcGFkLCRpZG50LCRyZG5zLCRm cm9tLCRtdGFuLCRtdGFpLCRtdGF2LCRmb3JlLCR3aXRoLCRkYXRlLCRhc24sJHNwZikgPSBA XzsKCglteSAkb3V0cHV0ID0gImZyb20iOwoJaWYgKCRvcHRpb25zID1+IC9lLykgewoJJG91 dHB1dCAuPSAoJGhlbG8pPyAJCSIgaGVsby0kaGVsbyIgCTogIiBuby1oZWxvIjt9CQkjIHNl bmRlcidzIHNhbHV0YXRpb24KCSRvdXRwdXQgLj0gKCRyZG5zKT8gCQkiICRyZG5zIiAJOiAi IG5vLXJkbnMiOwkJIyBzZW5kZXIncyBuYW1lCgkkb3V0cHV0IC49ICgkaXBhZCk/IAkJIiAk aXBhZCIgCTogIiBuby1pcGFkIjsJCSMgc2VuZGVyJ3MgSVAKICAgICAgICBpZiAoJG9wdGlv bnMgPX4gL3AvKSB7Cgkkb3V0cHV0IC49ICgkc3BmKT8JCSIgc3BmLSRzcGYiCTogIiBuby1z cGYiO30JCSMgc2VuZGVyJ3MgcG9saWN5IHJlc3VsdAoJJG91dHB1dCAuPSAoJGFzbik/ICAJ CSIgYXMkYXNuIiAJOiAiIG5vLWFzbiI7CQkjIHNlbmRlcidzIEFTTgoJJG91dHB1dCAuPSAo JG10YW58fCRtdGFpKT8gCSIgJENSTEZcdCAgYnkiCTogIiI7Cgkkb3V0cHV0IC49ICgkbXRh bik/IAkJIiAkbXRhbiIgCTogIiBuby1tdGEtbmFtZSI7CSMgcmVjZWl2aW5nIE1UQSdzIG5h bWUKCSRvdXRwdXQgLj0gKCRtdGFpKT8gCQkiICRtdGFpIiAJOiAiIG5vLW10YS1pcCI7CQkj IHJlY2VpdmluZyBNVEEncyBJUAoJJG91dHB1dCAuPSAoJGZvcmUpPyAJCSIgJENSTEZcdCAg Zm9yIiA6ICIiOwoJJG91dHB1dCAuPSAoJGZvcmUpPyAJCSIgPCRmb3JlPiIgCTogIiBuby10 by1hZGRyIjsJIyBlbnZlbG9wZSB0byBhZGRyZXNzCgkkb3V0cHV0IC49ICgkZGF0ZSk/IAkJ IjsgJGRhdGUiIAk6ICIgbm8tZGF0ZSI7CQkjIHJlY2VpdmVkIGRhdGUvdGltZQoKCSNwcmlu dCAib3V0cHV0dGluZyByZWNlaXZlZDogJG91dHB1dCIgLiAkQ1JMRjsKCXJldHVybiAkb3V0 cHV0Owp9CgpzdWIgb3BlbmRiX3JlYWQgCnsKICAgIHRpZSglZGIsICJEQl9GaWxlIiwgJGRi ZmlsZSwgT19SRE9OTFksIDAsICREQl9IQVNIKSBvciBlcnJvcigid2FybiIsIkNhbid0IG9w ZW4gJGRiZmlsZTogJCEiKTsKfQoKc3ViIGNsb3NlZGIgCnsKICAgIHVudGllICVkYjsKICAg IHVuZGVmICVkYjsKfQoKc3ViIHJldGllIAp7CiAgICAmY2xvc2VkYjsKICAgICZvcGVuZGJf cmVhZDsKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiMjIyMjIyMjIyMjIyMjIyMgT3V0cHV0IEhlYWRlciAjIyMjIyMjIyMjIyMjIyMjIwoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBz ZXRfaGVhZGVyCnsKCW15ICRoZWFkZXIgPSBzaGlmdDsKCW15ICRvdXRwdXQgPSAiIjsKCW15 ICRuYW1lID0gIiI7CgkKCSMgZXhjbHVkZSB0aGUgIm1hc2tlZCBmaWVsZHMiIGZyb20gZGlz cGxheQoJZm9yZWFjaCAkbmFtZSAoc3BsaXQoLywvLCRtYXNrZWRfZmllbGRzKSkgeyAkc3Bl Y19maWVsZHMgPX4gcy8oPzw9LCkkbmFtZSw/Ly87IH0KCgkjIG91dHB1dCB0aGUgZmllbGRz IGluIHRoZSBvcmRlciBzcGVjaWZpZWQgYnkgUkZDIDI4MjIgLSBtaW51cyB0aGUgbWFza2Vk IGZpZWxkcwoJZm9yZWFjaCAkbmFtZSAoc3BsaXQoLywvLCRzcGVjX2ZpZWxkcykpIHsgJG91 dHB1dCAuPSBzZXRfZmllbGQoJGhlYWRlciwkbmFtZSk7IGRlbGV0ZSAkaGVhZGVyLT57JG5h bWV9OyB9CgoJIyBzZXQgYW55IHVzZXItc3BlY2lmaWVkIGZpZWxkcwoJZm9yZWFjaCAkbmFt ZSAoc3BsaXQoLywvLCR1c2VyX2ZpZWxkcykpIHsgJG91dHB1dCAuPSBzZXRfZmllbGQoJGhl YWRlciwkbmFtZSk7IGRlbGV0ZSAkaGVhZGVyLT57JG5hbWV9OyB9CgoJIyBzZXQgbmV3IGN1 c3RvbSB4LWhlYWRlciBmaWVsZHMKCWlmICgkb3B0aW9ucyA9fiAveC8pIHsgZm9yZWFjaCAk bmFtZSAoc3BsaXQoLywvLCRuZXdfZmllbGRzKSkgeyAkb3V0cHV0IC49IHNldF9maWVsZCgk aGVhZGVyLCRuYW1lKTsgZGVsZXRlICRoZWFkZXItPnskbmFtZX07IH0gfQoKCSMgdGhlbiBz ZXQgYW55IHJlbWFpbmluZyBmaWVsZHMgKGlmIGFsbG93ZWQgdG8gc2V0IG5vbi1zdGFuZGFy ZCBmaWVsZHMpCglpZiAoJG9wdGlvbnMgIX4gL3MvKSB7IGZvcmVhY2ggJG5hbWUgKGtleXMg JXskaGVhZGVyfSkgeyAkb3V0cHV0IC49IHNldF9maWVsZCgkaGVhZGVyLCRuYW1lKTsgfSB9 CgoJJG91dHB1dCAuPSAkQ1JMRjsKCQoJcmV0dXJuICRvdXRwdXQ7Cn0KCnN1YiBzZXRfZmll bGQKewoJbXkgJGhlYWRlciA9IHNoaWZ0OwoJbXkgJG5hbWUgPSBzaGlmdDsKCW15ICRvdXRw dXQgPSAiIjsKCglpZiAoKGRlZmluZWQgJGhlYWRlci0+eyRuYW1lfSkgJiYgKHJlZigkaGVh ZGVyLT57JG5hbWV9KSBlcSAiQVJSQVkiKSkKCXsKCQlmb3IgKG15ICR4ID0gMDsgJHggPCBz Y2FsYXIgQHskaGVhZGVyLT57JG5hbWV9fTsgJHgrKykKCQl7CgkJCWlmICgoJG5hbWUgZXEg InJlY2VpdmVkIikgJiYgKCRvcHRpb25zID1+IC9yLykpCgkJCXsKCQkJCWlmIChkZWZpbmVk ICRoZWFkZXItPnskbmFtZX0tPlskeF0tPnsnc2FuZSd9ICYmICRoZWFkZXItPnskbmFtZX0t PlskeF0tPnsnc2FuZSd9ID1+IC9cdy8pIAoJCQkJewkKCQkJCQkkb3V0cHV0IC49ICRoZWFk ZXItPnskbmFtZX0tPlskeF0tPnsnbmFtZSd9IC4gIjogIiAuICRoZWFkZXItPnskbmFtZX0t PlskeF0tPnsnc2FuZSd9IC4gJENSTEY7IAoJCQkJfQoJCQkJI2Vsc2Ugewkkb3V0cHV0IC49 ICRoZWFkZXItPnskbmFtZX0tPlskeF0tPnsnbmFtZSd9IC4gIjogc2FuaXR5IGNoZWNrIGZh aWxlZCIgLiAkQ1JMRjsgfQoJCQl9CgkJCWVsc2lmICgkaGVhZGVyLT57JG5hbWV9LT5bJHhd LT57J3ZhbHVlJ30gYW5kCgkJCSAgICAgICAkaGVhZGVyLT57JG5hbWV9LT5bJHhdLT57J3Zh bHVlJ30gPX4gL1x3LykKCQkJeyAgCgkJCQkkb3V0cHV0IC49ICRoZWFkZXItPnskbmFtZX0t PlskeF0tPnsnbmFtZSd9IC4gIjogIiAuICRoZWFkZXItPnskbmFtZX0tPlskeF0tPnsndmFs dWUnfSAuICRDUkxGOyAKCQkJfQoJCX0KCX0KCWVsc2lmIChkZWZpbmVkICRoZWFkZXItPnsk bmFtZX0pCgl7CgkJJG91dHB1dCAuPSB1Y2ZpcnN0KCRuYW1lKSAuICI6ICIgLiAkaGVhZGVy LT57JG5hbWV9IC4gJENSTEY7IAkKCX0KCWVsc2lmICgkcmVxX2ZpZWxkcyA9fiAvKD86Xnws KSRuYW1lKD86LHwkKS8pCgl7ICAKCQkkb3V0cHV0IC49IHVjZmlyc3QoJG5hbWUpIC4gIjog W25vLSRuYW1lXSAiIC4gJENSTEY7IAoJfQoJCglyZXR1cm4gJG91dHB1dDsKfQoKIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMj IyMjIyMgRXJyb3IgSGFuZGxpbmcgIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBlcnJvcgp7CglteSAoJGFj dGlvbiwkbXNnKSA9IEBfOwoKCWRpZSAkbXNnIGlmICRhY3Rpb24gZXEgImRpZSI7Cgl3YXJu ICRtc2cgdW5sZXNzICRhY3Rpb24gZXEgImRpZSI7CgkjIGFkZCBvdGhlciBhY3Rpb25zIGlm IHlvdSBsaWtlCn0KCnN1YiBzaWdfdHJhcAp7CglteSAkc2lnID0gc2hpZnQ7CglteSAoJGFj dGlvbiwkbW9yZSkgPSAoIndhcm4iLCIiKTsKCglzaWc6IAoJewogICAgICAgIAkkYWN0aW9u ID0gImRpZSIsICBsYXN0IHNpZyBpZiAkc2lnID1+IC9BTFJNLzsKCSAgICAgICAgJGFjdGlv biA9ICJ3YXJuIiwgbGFzdCBzaWcgaWYgJHNpZyA9fiAvUElQRS87CgkgICAgICAgICRhY3Rp b24gPSAid2FybiIsIGxhc3Qgc2lnIGlmICRzaWcgPX4gL0NITEQvOwogICAgICAgIAkkYWN0 aW9uID0gImRpZSIgLCBsYXN0IHNpZyBpZiAkc2lnID1+IC9JTlQvOwoJICAgICAgICAkYWN0 aW9uID0gImRpZSIgLCBsYXN0IHNpZyBpZiAkc2lnID1+IC9IVVAvOwogICAgICAgIAkkYWN0 aW9uID0gIndhcm4iOwoJfQoJCglteSAkd2FpdGVkcGlkID0gd2FpdDsKCSRtb3JlID0gIjsg UmVhcGVkIHBpZCAkd2FpdGVkcGlkLCBleGl0ZWQgd2l0aCBzdGF0dXMgIiAuICgkPyA+PiA4 KSBpZiAkd2FpdGVkcGlkOwoKCSRTSUd7JHNpZ30gPSBcJnNpZ190cmFwOwoKCWVycm9yICgk YWN0aW9uLCJUcmFwcGVkIHNpZ25hbCBTSUckc2lnJG1vcmUiKTsKfQoKIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK --------------6BFAAE5395E3EC2315D7B035 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ bogofilter-dev mailing list [email protected] https://www.bogofilter.org/mailman/listinfo/bogofilter-dev --------------6BFAAE5395E3EC2315D7B035--