Re: Spamitarium changes
Jonathan Kamens <[email protected]> Mon, 11 Sep 2017 20:57:33 -0400
| Newsgroups | gmane.mail.bogofilter.devel |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------8C6E894DEEE6226004BF8962 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit OK, I guess the mailing list doesn't allow zip attachments? Here is again as a text file (which, alas, means that this message is going to get blocked by mailman because it's more than 40k; it's a Catch-22!). jik On 09/11/2017 08:55 PM, Jonathan Kamens wrote: > Updated version of spamitarium.pl attached. Additional changes: > > * A --timeout option has been added for specifying how long the script > should wait for input, or 0 to disable the timeout completely. This > is primarily useful for debugging the script. > * The header parsing code has been refactored to be cleaner and more > robust. > * In particular, empty header fields are now handled correctly > (previously, they were appended to the previous header field!). > * Empty header fields are now included in the output, for more > accurate bogofilter'ing. > > jik > > On 09/11/2017 05:04 PM, Matthias Andree wrote: >> Am 11.09.2017 um 21:13 schrieb Jonathan Kamens: >>> That's fine with me. I've attached my current version. >>> >> Hi Jonathan, Tom, >> >> >> In the light of Tom's reply I have taken Jonathan's version and >> committed it to SVN, so that it will become part of the next release. >> (r7054 on the trunk). >> >> I have added jik to the AUTHORS section in the embedded perldoc. >> >> Let me know if you want something else changed. >> >> >> Best regards, >> >> Matthias >> _______________________________________________ >> bogofilter-dev mailing list >> [email protected] >> https://www.bogofilter.org/mailman/listinfo/bogofilter-dev >> > _______________________________________________ > bogofilter-dev mailing list > [email protected] > https://www.bogofilter.org/mailman/listinfo/bogofilter-dev > --------------8C6E894DEEE6226004BF8962 Content-Type: text/plain; charset=UTF-8; name="spamitarium.pl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="spamitarium.pl.txt" IyEvdXNyL2Jpbi9wZXJsIC1UdwpyZXF1aXJlIDUuMDA2XzAwMTsKdXNlIHN0cmljdDsKCiMg VGhpcyBpcyBhIGZvcmsgb2YgVG9tIEFuZGVyc29uJ3Mgc3BhbWl0YXJpdW0ucGwgYnkgSm9u YXRoYW4gS2FtZW5zCiMgPGppa0BrYW1lbnMudXM+LiBUaGUgY2hhbmdlcyBoZXJlIGhhdmUg YmVlbiBzdWJtaXR0ZWQgYmFjayB0byBUb20gQW5kZXJzb24KIyBmb3IgaW5jb3Jwb3JhdGlv biBpbnRvIGhpcyBtYXN0ZXIgdmVyc2lvbi4gSW4gdGhlIG1lYW50aW1lLCB5b3UgbWF5IHdp c2ggdG8KIyB1c2UgdGhpcyB2ZXJzaW9uIGluc3RlYWQuIEhlcmUgYXJlIHRoZSBjaGFuZ2Vz IGluIGl0OgojCiMgKiBDb21tYW5kLWxpbmUgcGFyc2luZyBoYXMgYmVlbiB1cGRhdGVkIHRv IHVzZSB0aGUgc3RhbmRhcmQgUGVybCBHZXRvcHQ6OkxvbmcKIyAgIHN5bnRheCwgd2hpbGUg Y29udGludWluZyB0byBzdXBwb3J0IHRoZSAiYnVuZGxlZCIgb3B0aW9ucyBzeW50YXggc3Vw cG9ydGVkCiMgICBieSBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgc2NyaXB0LgojICogT3B0 aW9ucyBoYXZlIGJlZW4gYWRkZWQgdG8gc3BlY2lmeSBpbmZvcm1hdGlvbiB0aGF0IG1heSBi ZSBtaXNzaW5nIGZyb20gdGhlCiMgICBtZXNzYWdlIGhlYWRlciwgc3BlY2lmaWNhbGx5IGZv ciB3aGVuIHNwYW1pdGFyaXVtIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGEKIyAgIE1pbHRlciBh bmQgdGhlcmVmb3JlIHRoZSBtZXNzYWdlIGRvZXMgbm90IHlldCBoYXZlIHRoZSBSZXR1cm4t UGF0aCBvciBsb2NhbAojICAgUmVjZWl2ZWQgbGluZXMgdGhhdCB3aWxsIGJlIGluc2VydGVk IGJ5IHRoZSBNVEEgYmVmb3JlIGZpbmFsIGRlbGl2ZXJ5LiBTZWUKIyAgIHRoZSBkb2N1bWVu dGF0aW9uIGJlbG93IGZvciB0aGUgb3B0aW9ucyAtLXJldHVybi1wYXRoLCAtLW5vLWxvY2Fs LXJlY2VpdmVkLAojICAgLS1yZW1vdGUtaXAsIC0tcmVtb3RlLW5hbWUsIC0taGVsbywgLS1s b2NhbC1pcCwgLS1sb2NhbC1uYW1lLCAtLXJjcHQsIGFuZAojICAgLS1hZGQtbG9jYWwtcmVj ZWl2ZWQuCiMgKiBBIC0tdGltZW91dCBvcHRpb24gaGFzIGJlZW4gYWRkZWQgZm9yIHNwZWNp ZnlpbmcgaG93IGxvbmcgdGhlIHNjcmlwdCBzaG91bGQKIyAgIHdhaXQgZm9yIGlucHV0LCBv ciAwIHRvIGRpc2FibGUgdGhlIHRpbWVvdXQgY29tcGxldGVseS4gVGhpcyBpcyBwcmltYXJp bHkKIyAgIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSBzY3JpcHQuCiMgKiBUaGUgaGVhZGVy IHBhcnNpbmcgY29kZSBoYXMgYmVlbiByZWZhY3RvcmVkIHRvIGJlIGNsZWFuZXIgYW5kIG1v cmUgcm9idXN0LgojICogSW4gcGFydGljdWxhciwgZW1wdHkgaGVhZGVyIGZpZWxkcyBhcmUg bm93IGhhbmRsZWQgY29ycmVjdGx5IChwcmV2aW91c2x5LAojICAgdGhleSB3ZXJlIGFwcGVu ZGVkIHRvIHRoZSBwcmV2aW91cyBoZWFkZXIgZmllbGQhKS4KIyAqIEVtcHR5IGhlYWRlciBm aWVsZHMgYXJlIG5vdyBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LCBmb3IgbW9yZSBhY2N1cmF0 ZQojICAgYm9nb2ZpbHRlcidpbmcuCiMgKiBUeXBvcyBhbmQgc3VjaCBoYXZlIGJlZW4gY2xl YW5lZCB1cCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KIyAqIEEgZGF0ZS1wYXJzaW5nIGJ1ZyB3 aGljaCB3YXMgY2F1c2luZyB0aGUgdGltZSB6b25lIHRvIGJlIGlnbm9yZWQsIHRodXMKIyAg IGNhdXNpbmcgdGhlIFgtRGF0ZS1DaGVjayBoZWFkZXIgdG8gcmVwb3J0IGFuIGluYWNjdXJh dGUgZGVsdGEsIGhhcyBiZWVuCiMgICBmaXhlZC4KIyAqIEEgYnVnIHdoaWNoIGNvdWxkIGNh dXNlIHNwYW1pdGFyaXVtIHRvIGNyYXNoIHVwb24gZW5jb3VudGVyaW5nIGEgZmFyIGludG8K IyAgIHRoZSBmdXR1cmUgZGF0ZSBpbiB0aGUgbWVzc2FnZSBoZWFkZXIgaGFzIGJlZW4gZml4 ZWQuCiMgKiBBIGJ1ZyB3aGljaCB3YXMgY2F1c2luZyBzb21lIGRvbWFpbiBuYW1lcyB0byBi ZSB0cnVuY2F0ZWQgKGUuZy4sCiMgICAib210YTAxLW1kcC53ZXN0Y2hlc3Rlci5wYS5iby5j b21jYXN0Lm5ldCIgYmVjYW1lICJvbXRhMDEtbWRwLndlc3QiKSBoYXMKIyAgIGJlZW4gZml4 ZWQuCiMgKiBBIGNvdXBsZSBvZiBQZXJsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2Fybmlu Z3MgaGF2ZSBiZWVuIGZpeGVkLgojICogTWFpbDo6U1BGIGlzIHVzZWQgbm93IGluc3RlYWQg b2YgTWFpbDo6U1BGOjpRdWVyeSwgZm9yIElQdjYgc3VwcG9ydC4KIyAqIENvZGUgaGFzIGJl ZW4gYWRkZWQgdG8gd29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBzb21lIGVtYWlscyBnZW5l cmF0ZWQgYnkKIyAgIENvbnN0YW50IENvbnRhY3QgaGF2ZSBDUiByYXRoZXIgdGhhbiBDUkxG IGF0IHRoZSBlbmQgb2YgdGhlaXIgRGF0ZTogaGVhZGVyCiMgICBsaW5lcyAodGhpcyBpcyBh IHZlcnkgc3BlY2lmaWMgd29ya2Fyb3VuZCBmb3IgYSB2ZXJ5IHNwZWNpZmljIHByb2JsZW0K IyAgIGJlY2F1c2UgdGVjaG5pY2FsbHkgdGhlIHdvcmthcm91bmQgaXMgYSB2aW9sYXRpb24g b2YgdGhlIFNNVFAgUkZDLCB0aG91Z2gKIyAgIG5vYm9keSBlbHNlIHNlZW1zIHRvIGNhcmUg YWJvdXQgdGhhdC4gOi0vKS4KCj1oZWFkMSBOQU1FCgpTcGFtaXRhcml1bSAtIGV2YWx1YXRl cyBhbmQgcmVwYWlycyB0aGUgc2FuaXR5IG9mIGVtYWlsIGhlYWRlcnMuLi4KCj1jdXQKCm15 ICR2ZXJzaW9uID0gIjAuNC4wIjsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMgQ29weWxlZnQgTm90aWNlICMjIyMj IyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCgojIENvcHlyaWdodCDCqSAyMDA0IE9yZGVyIGFtaWQgQ2hhb3MsIEluYy4KIyBB dXRob3I6IFRvbSBBbmRlcnNvbiAKIyBuZW8rc3BhbWl0YXJpdW1Ab3JkZXJhbWlkY2hhb3Mu Y29tCiMgCiMgVGhpcyBwcm9ncmFtIGlzIG9wZW4tc291cmNlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCAKIyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAojIExpY2Vuc2UsIHYyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAKIyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZiAKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlIAojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgCiMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0bzogCiMKIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gCiMgNTkg VGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAKIyBCb3N0b24sIE1BIDAyMTExLTEzMDcgIFVTQQoj CiMgaHR0cDovL3d3dy5nbnUub3JnLwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyBEb2N1bWVudGF0aW9uICMj IyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKCiMgdXNlICJwZXJsZG9jIHNwYW1pdGFyaXVtIiBvciAic3BhbWl0YXJp dW0gLWgiIHRvIHJlYWQgdGhpcwoKPWhlYWQxIFNZTk9QU0lTCgo9aGVhZDIgQ29tbWFuZCBs aW5lIHVzYWdlOgoKQjxzcGFtaXRhcml1bT4gW0k8b3B0aW9ucz5dIDwgW0k8cmZjODIyX2Vt YWlsPl0KCj1oZWFkMiBQcm9jbWFpbCB1c2FnZSAocmVjb21tZW5kZWQpOgoKQWRkIHRvIHlv dXIgLnByb2NtYWlscmMgdGhlIGZvbGxvd2luZyByZWNpcGU6CgogIDowCiAgewogICAgICAg IDowIGZodwogICAgICAgIHwgc3BhbWl0YXJpdW0gLXNyZWFkeHRwCiAgCiAgICAgICAgIyBm aWx0ZXIgdGhyb3VnaCBib2dvZmlsdGVyLCB0YWdnaW5nIGFzIHNwYW0gCgkjIG9yIG5vdCBh bmQgdXBkYXRpbmcgdGhlIHdvcmQgbGlzdHMKICAgICAgICA6MCBmdwogICAgICAgIHwgYm9n b2ZpbHRlciAtdWVwCgogICAgICAgICMgYWRkIGJhY2sgdGhlICJGcm9tIiBoZWFkZXIgZm9y IHByb3BlciBkZWxpdmVyeQogICAgICAgIDowIGZodwogICAgICAgIHwgZm9ybWFpbCAtSSAi RnJvbSAiIC1hICJGcm9tICIKICB9Cgo9aGVhZDIgQ29tbWFuZCBsaW5lIG9wdGlvbnM6Cgo9 b3ZlciA0Cgo9aXRlbSBCPC1oPgoKZGlzcGxheSB0aGlzIGhlbHAgZmlsZQoKPWl0ZW0gQjwt cz4gW0k8cGVybWl0dGVkX2hlYWRlcnM+XQoKQWxsb3cgc3RhbmRhcmQgZmllbGRzIG9ubHkg KFJGQyA4MjIvMjgyMi8xMDQ5LzEzNDEvMTUyMS8yMTgzLzE4NjQpIC4uLgphbGwgb3RoZXJz IGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBlbWFpbC4gIFRvIGV4Y2x1ZGUgc29tZSBoZWFkZXJz IGZyb20Kc3RyaXBwaW5nLCBzcGVjaWZ5IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QgYXMgYW4g YXJndW1lbnQgdG8gdGhpcwpvcHRpb24uCgo9aXRlbSBCPC1yPgoKaW5zZXJ0IG5ldyByZWNl aXZlZCBsaW5lIGNvbnRhaW5pbmcgdmVyaWZpZWQgcmVjZWl2ZWQtbGluZSB0b2tlbnMKCj1p dGVtIEI8LWU+CgppbmNsdWRlIGhlbG8gc3RyaW5nIGluIHJlY2VpdmVkIGxpbmUKCj1pdGVt IEI8LWQ+CgphbGxvdyBETlMgbG9va3VwcyAoZm9yd2FyZCBhbmQgcmV2ZXJzZSkgdG8gaGVs cCBmaWxsIGluIGFsbCAKbmVjZXNzYXJ5IHJlY2VpdmVkIGZpZWxkcwoKPWl0ZW0gQjwtZj4K CmZvcmNlIHJETlMgbG9va3VwcyBldmVuIHdoZW4gcHJvdmlkZWQgYWxyZWFkeSBieSB0aGUg TVRBCgo9aXRlbSBCPC1hPgoKcGVyZm9ybSBBU04gbG9va3VwcyBhbmQgaW5jbHVkZSBpbiBy ZWNlaXZlZCBsaW5lcwoKPWl0ZW0gQjwtcD4KCnBlcmZvcm0gU1BGIGxvb2t1cHMgYW5kIGlu Y2x1ZGUgaW4gcmVjZWl2ZWQgbGluZXMKCj1pdGVtIEI8LXg+CgppbmNsdWRlIGN1c3RvbSB4 LWhlYWRlcnMgZm9yIGFkZGl0aW9uYWwgaGVhZGVyIHZhbGlkYXRpb25zOgoKPWl0ZW0gQjwt dD4KCnZhbGlkYXRlIHRoYXQgdGhlIGRhdGUgaGVhZGVyIGlzIHdpdGhpbiBjbG9zZSBwcm94 aW1pdHkgdG8gdGhlIApyZWNlaXZlZCBkYXRlIChzZWUgJGRhdGVfbGltaXQgZ2xvYmFsIHZh cmlhYmxlIHRvIGNvbmZpZ3VyZSkKCj1pdGVtIEI8LXc+CgpwYXJzZSBhbmQgZGlzcGxheSB0 aGUgYm9keSBvZiB0aGUgZW1haWwgaW4gYWRkaXRpb24gdG8gdGhlIGhlYWRlcnMKCj1pdGVt IEI8LWI+CgpkaXNwbGF5IGJlbmNobWFya2luZyBpbmZvCgo9aXRlbSBCPC0tcmV0dXJuLXBh dGg+IEk8YWRkcj4KClNwZWNpZnkgdGhlIHNlbmRlciBvZiB0aGUgZW1haWwgZm9yIFNQRiBs b29rdXBzLCBvdmVycmlkaW5nIHRoZQoiUmV0dXJuLVBhdGgiIGZpZWxkLgoKPWl0ZW0gQjwt LW5vLWxvY2FsLXJlY2VpdmVkPgoKVGVsbCBzcGFtaXRhcml1bSB0aGF0IHRoZXJlIGlzIG5v IFJlY2VpdmVkIGxpbmUgaW4gdGhlIG1lc3NhZ2UgZnJvbQp0aGUgbG9jYWwgbWFpbGVyLCBl LmcuLCBiZWNhdXNlIHNwYW1pdGFyaXVtIGlzIGJlaW5nIGNhbGxlZCBmcm9tCmluc2lkZSBh IE1pbHRlci4KClRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgb25seSB1c2VkIHdoZW4gQjwt LW5vLWxvY2FsLXJlY2VpdmVkPiBpcwpzcGVjaWZpZWQuCgo9b3ZlciA0Cgo9aXRlbSBCPC0t cmVtb3RlLWlwPiBJPGlwLWFkZHJlc3M+CgpTcGVjaWZ5IHRoZSBJUCBhZGRyZXNzIG9mIHRo ZSByZW1vdGUgc2VydmVyIHNlbmRpbmcgdGhlIGVtYWlsLgoKPWl0ZW0gQjwtLXJlbW90ZS1u YW1lPiBJPGlwLWFkZHJlc3M+CgpTcGVjaWZ5IHRoZSBob3N0IG5hbWUgb2YgdGhlIHJlbW90 ZSBzZXJ2ZXIgc2VuZGluZyB0aGUgZW1haWwsIGFzCmRldGVybWluZWQgYnkgYSByZXZlcnNl IEROUyBsb29rdXAgb2YgaXRzIElQIGFkZHJlc3MuCgo9aXRlbSBCPC0taGVsbz4gSTxob3N0 LW5hbWU+CgpTcGVjaWZ5IHRoZSBob3N0IG5hbWUgc2VudCBieSB0aGUgcmVtb3RlIHNlcnZl ciBpbiB0aGUgU01UUCBIRUxPIChvcgpFSExPKSBjb21tYW5kLgoKPWl0ZW0gQjwtLWxvY2Fs LWlwPiBJPGlwLWFkZHJlc3M+CgpTcGVjaWZ5IHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBzZXJ2 ZXIgcmVjZWl2aW5nIHRoZSBlbWFpbC4KCj1pdGVtIEI8LS1sb2NhbC1uYW1lPiBJPGhvc3Qt bmFtZT4KClNwZWNpZnkgdGhlIGhvc3QgbmFtZSBvZiB0aGUgc2VydmVyIHJlY2VpdmluZyB0 aGUgZW1haWwuCgo9aXRlbSBCPC0tcmNwdD4gSTxlbWFpbC1hZGRyZXNzPgoKU3BlY2lmeSB0 aGUgZW52ZWxvcGUgYWRkcmVzcyBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBlbWFpbC4KCj1p dGVtIEI8LS1hZGQtbG9jYWwtcmVjZWl2ZWQ+CgpJbmRpY2F0ZSB0aGF0IHNwYW1pdGFyaXVt IHNob3VsZCBhZGQgYW4gYXV0by1nZW5lcmF0ZWQgbG9jYWwgUmVjZWl2ZWQKbGluZS4KCj1i YWNrCgo9aXRlbSBCPC0tdGltZW91dD4gSTxzZWNvbmRzPgoKSG93IGxvbmcgdG8gd2FpdCBm b3IgaW5wdXQgYmVmb3JlIGdpdmluZyB1cC4gU3BlY2lmeSAwIHRvIGRpc2FibGUgdGhlIHRp bWVvdXQKY29tcGxldGVseS4gUHJpbWFyaWx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCgo9 YmFjawoKCj1oZWFkMiBVc2VyLWRlZmluZWQgaGVhZGVyIGZpZWxkIGxpc3Q6CgpJZiB1c2lu ZyB0aGUgQjxzPiBvcHRpb24sIHlvdSBtYXkgd2FudCB0byBhbGxvdyBjZXJ0YWluIGhlYWRl ciBmaWVsZHMKb3RoZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQgYnkgUkZDcy4gIFRoZXNlIG1p Z2h0IGluY2x1ZGUgZmllbGRzIHNldApieSB5b3VyIG1haWxpbmcgbGlzdCBvciBwcm94eSBv ciBvdGhlciBjdXN0b20gYXBwbGljYXRpb24uICBZb3UgbWF5CnNwZWNpZnkgc3VjaCBhIGxp c3Qgb2YgZmllbGRzIGJ5IGFwcGVuZGluZyB0aGVtIGNvbW1hLWRlbGltaXRlZCBhdAp0aGUg ZW5kIG9mIHlvdXIgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50ZWQg dGhlIApJPGxpc3QtaWQ+IGFuZCBJPGVuY3J5cHRlZD4gZmllbGRzIHBhc3NlZCB0aHJvdWdo LCB5b3Ugd291bGQgY2hhbmdlCnlvdXIgcHJvY21haWwgcmVjaXBlIGFzIGZvbGxvd3M6Cgog IHwgc3BhbWl0YXJpdW0gLXJlYWR4dHAgLXMgbGlzdC1pZCxlbmNyeXB0ZWQKCgo9aGVhZDEg UkVRVUlSRVMKCj1vdmVyIDQKCj1pdGVtICoKClBlcmwgNS42LjEKTmV0OjpETlM6OlJlc29s dmVyCk1haWw6OlNQRgpOZXQ6OkNJRFIKREJfRmlsZQpQT1NJWApHZXRvcHQ6OkxvbmcKCj1i YWNrCgoKPWhlYWQxIERFU0NSSVBUSU9OCgpTcGFtaXRhcml1bSBoZWxwcyB0byByZW1vdmUg dW5uZWNlc3Nhcnkgbm9pc2UgZnJvbSBlbWFpbCBoZWFkZXJzIGFuZAp0byBoaWdobGlnaHQg anVzdCB0aGUgcG9ydGlvbnMgd2hpY2ggY29udHJpYnV0ZSBwb3NpdGl2ZWx5IHRvIHNwYW0K ZmlsdGVyaW5nIHVzaW5nIHN0YXRpc3RpY2FsIG1ldGhvZHMuCgpUaGUgb25seSBub24tc3Bv b2ZhYmxlLCAtZm9yZ2FibGUsIG9yIC10d2Vha2FibGUgcGFydCBvZgphbiBlbWFpbCBpcyB0 aGUgcmVjZWl2ZWQgbGluZSwgYXMgaXQgaXMgZ2VuZXJhdGVkIGJ5IHRoZSByZWNlaXZpbmcK bWFpbCBzZXJ2ZXIgd2hpY2ggb3VnaHQgdG8gaGF2ZSBubyByZWFzb24gdG8gbXVuZ2UgaXQu ICBFdmVyeSBvdGhlcgpwYXJ0IG9mIGFuIGVtYWlsIGNhbiBiZSBpbmZsdWVuY2VkIGRpcmVj dGx5IGJ5IHRoZSBzZW5kZXIuICBSZWNlaXZlZApsaW5lIHRva2Vucywgd2hlbiB2ZXJpZmll ZCBhdXRoZW50aWMsIGFyZSB0aGVyZWZvcmUgaGlnaGx5IGluZGljYXRpdmUKb2Ygd2hldGhl ciBvciBub3QgYSBnaXZlbiBtZXNzYWdlIGlzIHNwYW0uICAKClNwYW1pdGFyaXVtIHJlYWRz IHRoZSByZWNlaXZlZCBoZWFkZXJzLCBkZXRlcm1pbmVzIHdoaWNoIG9uZXMgYXJlCmF1dGhl bnRpYywgYW5kIHRoZW4gcHJpbnRzIHRva2VucyBpbnRvIHRoZSBoZWFkZXIgd2hpY2ggbWF5 IGJlIGtleWVkCm9uIGJ5IHN0YXRpc3RpY2FsIGZpbHRlcnMuICBUaGlzIHdvcmtzIG11Y2gg bGlrZSBhIGJsYWNrbGlzdC93aGl0ZWxpc3QsIApidXQgd2hlbiBjb3VwbGVkIHdpdGggYSBz dGF0aXN0aWNhbCBmaWx0ZXIgc3VjaCBhcyBib2dvZmlsdGVyLCB0aGVzZSAKbGlzdHMgYXJl IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCByZXF1aXJlIG5vIG1hbnVhbCBtYWludGVu YW5jZSAKb3RoZXIgdGhhbiBub3JtYWwgdHJhaW5pbmcuCgpNb3Jlb3ZlciwgaGVhZGVycyB3 aGljaCBkbyBub3QgZGlyZWN0bHkgaW5mbHVlbmNlIHRoZSBlbWFpbCBpbiBhbnkKZnVuY3Rp b25hbCB3YXksIG5vciBhcmUgdmlzaWJsZSB0byB0aGUgZW5kLXVzZXIgaW4gYSBzdGFuZGFy ZApncmFwaGljYWwgTVVBLCBhcmUgaGlnaGx5IGxpa2VseSB0byBjb250YWluIGluZm9ybWF0 aW9uIHdoaWNoIApzcGFtbWVycyB0aGluayB3aWxsIGRldHJhY3QgZnJvbSBub3JtYWwgc3Rh dGlzdGljYWwgZmlsdGVyaW5nLiBJdAppcyB0aGVyZWZvcmUgZGVzaXJlYWJsZSB0byByZW1v dmUgdGhlc2UgZWxlbWVudHMsIHNwZWNpZmljYWxseSAKWC1oZWFkZXJzLCBwcmlvciB0byBm aWx0ZXJpbmcuICBTcGFtaXRhcml1bSByZW1vdmVzIGFsbCBpbnZpc2libGUsCm5vbi1mdW5j dGlvbmFsIGhlYWRlciBsaW5lcy4KClNwYW1pdGFyaXVtIGFsc28gbG9va3MgdXAgYW55IElQ IGFkZHJlc3NlcyBvciByRE5TIGFkZHJlc3Nlcwp3aGljaCBhcmUgbm90IHByb3ZpZGVkIGlu IG9yZGVyIHRvIHByb3ZpZGUgdGhlIG1heGltdW0gdG9rZW5zIG9uCndoaWNoIHRvIGZpbHRl ci4gIE1vcmVvdmVyLCBpdCBsb29rcyB1cCB0aGUgYXV0b25vbW91cyBzeXN0ZW0gbnVtYmVy CihBU04pIGFzc29jaWF0ZWQgd2l0aCBlYWNoICJmcm9tIiBhZGRyZXNzIGluIG9yZGVyIHRv IHByb3ZpZGUKYSBzbWFsbCBzZXQgb2YgdG9rZW5zIHJlcHJlc2VudGluZyB0aGUgdmFyaW91 cyBtYWpvciBzdWJuZXRzIG9mIHRoZQppbnRlcm5ldC4gIEFuZCBpdCBjaGVja3MgdGhlIFNl bmRlciBQb2xpY3kgRnJhbWV3b3JrIChTUEYpIHJlY29yZHMgb2YKdGhlIHNlbmRlciB0byBl bnN1cmUgdGhhdCB0aGUgZ2l2ZW4gTVggaGFzIHBlcm1pc3Npb24gdG8gc2VuZCBvbgp0aGVp ciBiZWhhbGYuCgpGaW5hbGx5LCBTcGFtaXRhcml1bSBhc3Nlc3NlcyB0aGUgaGVhZGVycyBm b3IgbWlzc2luZyByZXF1aXJlZApoZWFkZXIgbGluZXMsIGluc2VydGluZyBrZXlhYmxlIHRv a2VucyBvciBzdXBwbHlpbmcgdGhlIG1pc3NpbmcKaW5mb3JtYXRpb24uICBBbmQgaXQgY29t cGFyZXMgdGhlIGRhdGUgZmllbGRzIHRvIGRldGVybWluZSBpZiB0aGUKZW1haWwgaGFzIGJl ZW4gcHJlLSBvciBwb3N0LWRhdGVkIGJ5IGEgbGFyZ2UgbWFyZ2luIGluIG9yZGVyIHRvCmlu Zmx1ZW5jZSB3aGVyZSBpdCBhcHBlYXJzIGluIHlvdXIgbWFpbCBjbGllbnQgYW5kIGluc2Vy dHMgYW4KeC1oZWFkZXIgd2l0aCBrZXlhYmxlIHJhbmdlIHRva2VucyB0byBjb21wZW5zYXRl IGZvciB0aGlzLgoKVG9nZXRoZXIsIGFsbCBvZiB0aGVzZSB0ZWNobmlxdWVzIGhlbHAgdG8g cmVtb3ZlIHRoZSBub2lzZSB3aGljaAphY2NvbXBhbmllcywgZWl0aGVyIGluY2lkZW50YWxs eSBvciBtYWxpY2lvdXNseSwgbW9zdCBlbWFpbCBtZXNzYWdlcy4KVGhpcyByZXN1bHRzIGlu IGEgY2xlYW5lciBoZWFkZXIgY29uc2lzdGluZyBvZiBtb3JlIGVhc2lseSBzY29yZWQKdG9r ZW5zLiAgVGhpcyBwZXJtaXRzIGJldHRlciBhY2N1cmFjeSB3aXRoIHN0YXRpc3RpY2FsIGZp bHRlcnMgYXMKd2VsbCBhcyBxdWlja2VyIHByb2Nlc3NpbmcgYW5kIGEgc21hbGxlciB0b2tl biBkYXRhYmFzZS4KCgo9aGVhZDEgRkFRCgo9aGVhZDIgQXNrIGEgcXVlc3Rpb24KClllIG1h eSByZWNlaXZlIGFuIGFuc3dlciBoZXJlIGlmIGl0IGlzIGFza2VkIGZyZXF1ZW50bHkKCgo9 aGVhZDEgQlVHUwoKPW92ZXIgNAoKPWl0ZW0gKgoKdGltZWdtKCRzZWMsJG1pbiwkaG91ciwk ZGF5LCRtb24sJHllYXIpIGFib3J0cyBpZiBQZXJsJ3MgdGltZV90IGlzIDMyIApiaXRzIGxh cmdlIGFuZCB0aGUgeWVhciBpcyB0b28gaGlnaCAoPjIwMzgpLgoKPWJhY2sKCj1oZWFkMSBU T0RPCgo9b3ZlciA0Cgo9aXRlbSAqCgpTdWdnZXN0aW9ucyB3ZWxjb21lLgoKPWJhY2sKCj1o ZWFkMSBTRUUgQUxTTwoKPW92ZXIgNAoKPWl0ZW0gKgoKTDxwcm9jbWFpbD4KCj1pdGVtICoK Ckw8Ym9nb2ZpbHRlcj4KCj1iYWNrCgoKPWhlYWQxIEFVVEhPUgoKVG9tIEFuZGVyc29uIDxu ZW8rc3BhbWl0YXJpdW1Ab3JkZXJhbWlkY2hhb3MuY29tPgoKPWN1dAoKIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMg VXNlciBWYXJpYWJsZXMgICMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgcGxlYXNlIGVkaXQgYWNjb3JkaW5n IHRvIHlvdXIgc2V0dXAKCiMgZGVmYXVsdCBwYXRoCm91ciAkcGF0aCA9ICIvYmluOi91c3Iv YmluOi91c3IvbG9jYWwvYmluIjsKCiMgZGVmYXVsdCBzaGVsbApvdXIgJHNoZWxsID0gIi9i aW4vc2giOwoKIyBzZWNvbmRzIGJlZm9yZSB3ZSBiYWlsIHdhaXRpbmcgb24gaW5wdXQKb3Vy ICR0aW1lb3V0ID0gMzsKCiMgc2VydmVyIHRvIHVzZSBmb3IgQVNOIGxvb2t1cHMKb3VyICRh c25fc2VydmVyID0gImFzbi5yb3V0ZXZpZXdzLm9yZyI7CgojIFdoaXRlbGlzdCBhbnkgSVAg YWRkcmVzc2VzIG9yIHJhbmdlcyBmcm9tIFNQRiBsb29rdXBzCm91ciBAd2hpdGVsaXN0ID0g KCIxMjcuMC4wLjEiLCIxOTIuMTY4LjAuMS0xOTIuMTY4LjAuMjU1Iik7CgojIElmIHlvdSB3 YW50IHRvIHdoaXRlbGlzdCBhbnkgYWRkcmVzc2VzIHdoaWNoIGhhdmUgYXV0aGVudGljYXRl ZAojIHZpYSBwb3ByZWxheWQgKGkuZS4gcmVtb3RlIHdvcmtzdGF0aW9ucyBvZiB1c2VycyBv biB5b3VyIHNlcnZlcikKIyBzZXQgJGRiZmlsZSB0byB5b3VyIHBvcGlwLmRiIGxvY2F0aW9u LCBlbHNlIHNldCBpdCB0byB1bmRlZgojb3VyICRkYmZpbGUgPSAiL2V0Yy9tYWlsL3BvcGlw LmRiIjsKb3VyICRkYmZpbGUgPSB1bmRlZjsKCiMgZGlzdGFuY2UgaW4gc2Vjb25kcyBmcm9t IHJpZ2h0IG5vdyB0byBjb25zaWRlciBhIHJlYXNvbmFibGUgKG5vbi1zcGFtKSByYW5nZSB0 byBkYXRlIGFuIGVtYWlsCm91ciAkZGF0ZV9saW1pdCA9IDYwKjYwKjI0KjI7ICAjIDIgZGF5 cwoKIyBFTUFJTCBIRUFERVIgRklFTERTCiMKIyBTZWUgUkZDIDIwNzYgLyAiQ29tbW9uIElu dGVybmV0IE1lc3NhZ2UgSGVhZGVyIEZpZWxkcyIgZm9yIGEgc3lub3BzaXMgb2YgY29tbW9u IG1haWwgaGVhZGVycwoKCSMgU1BFQ0lGSUVEIEZJRUxEUyAtLSBhbGwgb2YgdGhlIGZpZWxk cyBzcGVjaWZpZWQgaW4gUkZDIDgyMi8yODIyLCBjYXNlLWluc2Vuc2l0aXZlLCBpbiB0aGUg c3VnZ2VzdGVkIG9yZGVyCglvdXIgJHNwZWNfZmllbGRzID0gInJldHVybi1wYXRoLHJlY2Vp dmVkLHJlc2VudC1kYXRlLHJlc2VudC1mcm9tLHJlc2VudC1zZW5kZXIscmVzZW50LXJlcGx5 LXRvLCIuCgkgCQkgICAicmVzZW50LXRvLHJlc2VudC1jYyxyZXNlbnQtYmNjLHJlc2VudC1t ZXNzYWdlLWlkLGRhdGUsZnJvbSxzZW5kZXIscmVwbHktdG8sIi4KCQkJICAgInRvLGNjLGJj YyxtZXNzYWdlLWlkLGluLXJlcGx5LXRvLHJlZmVyZW5jZXMsc3ViamVjdCxjb21tZW50cyxr ZXl3b3JkcyxlbmNyeXB0ZWQiOwoKCSMgTUlNRSBoZWFkZXIgZmllbGRzIChSRkMgMTA0OS8x MzQxLzE1MjEvMjE4MykKCSRzcGVjX2ZpZWxkcyAuPSAiLG1pbWUtdmVyc2lvbixjb250ZW50 LXR5cGUsY29udGVudC10cmFuc2Zlci1lbmNvZGluZyxjb250ZW50LWlkLGNvbnRlbnQtZGVz Y3JpcHRpb24sY29udGVudC1kaXNwb3NpdGlvbiI7CgoJIyBzZWN1cml0eS9jaGVja3N1bSAo UkZDIDE4NjQpCgkkc3BlY19maWVsZHMgLj0gIixjb250ZW50LW1kNSI7CgoJIyBtYWlsaW5n IGxpc3QgaGVhZGVycyAoUkZDIDIzNjkvMjkxOSkgbWF5IGJlIGFkZGVkIGlmIHlvdSBsaWtl LCBidXQgZm9yIG5vdyBJJ20gY2hvb3NpbmcgdG8gbGVhdmUgdGhlbSBvdXQKCSMkc3BlY19m aWVsZHMgLj0gIixsaXN0LWlkLGxpc3QtaGVscCxsaXN0LXVuc3Vic2NyaWJlLGxpc3Qtc3Vi c2NyaWJlLGxpc3QtcG9zdCxsaXN0LW93bmVyLGxpc3QtYXJjaGl2ZSI7CgoJIyBNQVNLRUQg RklFTERTIC0tIHVubmVjZXNzYXJ5IGZpZWxkcyBvZnRlbiB1c2VkIGZvciBzcGFtIHdpbGwg YmUgZXhwdW5nZWQgZnJvbSB0aGUgc3BlYyBmaWVsZHMgbGlzdAoJIyAoaWYgeW91IGtub3cg b2YgYSB2YWxpZCwgbmVjZXNzYXJ5IHVzZSBmb3IgdGhlc2UsIGxldCBtZSBrbm93KQoJb3Vy ICRtYXNrZWRfZmllbGRzID0gImtleXdvcmRzLGNvbW1lbnRzLGVuY3J5cHRlZCxjb250ZW50 LWlkLGNvbnRlbnQtZGVzY3JpcHRpb24iOwoKCSMgY29udHJvdmVyc2lhbCBhbmQgbm90IHN0 cmljdGx5IG5lY2Vzc2FyeToKCSMkbWFza2VkX2ZpZWxkcyAuPSAgIixyZXBseS10byI7CgoJ IyBtZXNzYWdlLWlkIGZpZWxkcyBhcmUgb25seSBtYWNoaW5lLXJlYWRhYmxlIGFuZCBub3Qg dmlzaWJsZSB0byBub3IgcmVhZGFibGUgYnkgdGhlIHJlY2lwaWVudAoJIyBob3dldmVyLCB0 aGV5IGNhbiBiZSB1c2VmdWwgaWYgeW91ciBjbGllbnQgcHJvZHVjZXMgZGlzY3Vzc2lvbiB0 aHJlYWRpbmcKCSMgdW5jb21tZW50IHRoaXMgbGluZSBpZiB5b3UgZG9uJ3QgY2FyZSBhYm91 dCB0aHJlYWRpbmc6CgkjJG1hc2tlZF9maWVsZHMgLj0gICIsbWVzc2FnZS1pZCxyZXNlbnQt bWVzc2FnZS1pZCxpbi1yZXBseS10byxyZWZlcmVuY2VzIjsKCQoJIyByZXNlbnQgZmllbGRz IGFyZSBzdHJpY3RseSBpbmZvcm1hdGlvbmFsIChhbmQgbm90IGdlbmVyYWxseSB1c2VyLXZp c2libGUpLCB0aGVyZWZvcmUgYWxsb3dpbmcgdGhlbSB0aHJvdWdoIGlzIG9wdGlvbmFsOgoJ IyBNSU1FIHNwZWNpZmllcyBhIGRpZmZlcmVudCB3YXkgb2YgcmVzZW5kaW5nIG1lc3NhZ2Vz IHdpdGggdGhlICJNZXNzYWdlIiBjb250ZW50LXR5cGUsIHNvIHRoZXNlIG1heSBiZSBjb25z aWRlcmVkIGRlcHJlY2F0ZWQ6CgkkbWFza2VkX2ZpZWxkcyAuPSAiLHJlc2VudC1kYXRlLHJl c2VudC1mcm9tLHJlc2VudC1zZW5kZXIscmVzZW50LXJlcGx5LXRvLHJlc2VudC10byxyZXNl bnQtY2MscmVzZW50LWJjYyxyZXNlbnQtbWVzc2FnZS1pZCI7CgoJIyBVU0VSIEZJRUxEUyAt LSBVc2VyIGZpZWxkcyBhcmUgdGhvc2UgdGhhdCBhcmUgbmVpdGhlciBzcGVjaWZpZWQgbm9y IG1hc2tlZCB0aGF0IHlvdSB3YW50IHBlcm1pdHRlZC4gCgkjIFRoZXNlIG1heSBpbmNsdWRl IHNwZWNpYWwgZmllbGRzIGZvciB5b3VyIHBhcnRpY3VsYXIgbWFpbCBzZXJ2ZXIsIGZpbHRl ciwgb3IgbWFpbCB1c2VyIGFnZW50LgoJb3VyICR1c2VyX2ZpZWxkcyA9ICIiOwoKCSMgTkVX IEZJRUxEUyAtLSBOZXcgY3VzdG9tIHgtaGVhZGVycyBhZGRlZCBieSBTcGFtaXRhcml1bSAo aXQgaXMgcmVjb21tZW5kIHRoYXQgeW91IGRvbid0IGNoYW5nZSB0aGVzZSkuICAKCSMgVGhl c2UgYXJlIGRpc2FibGVkIHVubGVzcyB5b3UgcGFzcyB0aGUgJ3gnIG9wdGlvbi4KCW91ciAk bmV3X2ZpZWxkcyA9ICJ4LWRhdGUtY2hlY2sseC1zcGYiOwoKCSMgUkVRVUlSRUQgRklFTERT IC0tIEFueSBmaWVsZHMgdGhhdCBzaG91bGQgc2hvdyB1cCBpbiBhbiBlbWFpbCBldmVuIGlm IHRoZXkgYXJlIG5vdCBzZW50IC0tIGkuZS4gaWYgdGhlIGxhY2sgb2YKCSMgdGhlc2UgZmll bGRzIG1heSBiZSB1c2VmdWwgZm9yIHRoZSBmaWx0ZXIsIGEgbm8tcmVxLWZpZWxkIHRhZyB3 aWxsIGJlIGFkZGVkLiAgVGhlIG9ubHkgKnJlcXVpcmVkKiBmaWVsZHMgYWNjb3JkaW5nIHRv IAoJIyBSRkMgMjgyMiBhcmUgImZyb20iLCAic2VuZGVyIiwgInJlcGx5LXRvIiwgYW5kICJk YXRlIiwgb3RoZXJzIGFyZSBqdXN0IHN1Z2dlc3RlZC4gIEhvd2V2ZXIsICJzZW5kZXIiIGFu ZCAicmVwbHktdG8iIGFyZSAKCSMgY29tbW9ubHkgbm90IHN1cHBsaWVkLCBhbmQgc28gc2hv dWxkIHByb2JhYmx5IG5vdCBiZSBpbiB0aGlzIGxpc3QuICBPbiB0aGUgb3RoZXIgaGFuZCwg InN1YmplY3QiIGFuZCBhIGZldyBvdGhlcnMgbWF5IAoJIyBiZSBkZXNpcmVkIGluIHRoaXMg bGlzdC4KCW91ciAkcmVxX2ZpZWxkcyA9ICJyZWNlaXZlZCxmcm9tLHRvLGRhdGUsc3ViamVj dCI7CgojIG9mIGNvdXJzZSwgbW9kaWZ5IHRoZSBmaXJzdCBsaW5lIG9mIHRoaXMgZmlsZSwK IyB0aGUgc2hlYmFuZywgdG8gcG9pbnQgdG8geW91ciBwZXJsIGludGVycHJldGVyCgojIGRv IG5vdCBlZGl0IGJlbG93IHRoaXMgbGluZSB1bmxlc3MgeW91IHJlYWxseQojIGtub3cgd2hh dCB5b3UncmUgZG9pbmcKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMgSW5jbHVkZSBMaWJyYXJpZXMgIyMjIyMjIyMj IyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCgp1c2UgQmVuY2htYXJrOwp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBUaW1lOjpMb2Nh bDsKdXNlIE5ldDo6RE5TOjpSZXNvbHZlcjsKdXNlIE1haWw6OlNQRjsKdXNlIE5ldDo6Q0lE UjsKdXNlIERCX0ZpbGU7CnVzZSBQT1NJWDsKdXNlIEdldG9wdDo6TG9uZzsKdXNlIFN5czo6 U3lzbG9nOwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwojIyMjIyMjIyMjIyMjIyBEZWZhdWx0IEdsb2JhbHMgIyMjIyMjIyMjIyMjIyMjIyMj CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiQ+ ID0gJDw7ICMgc2V0IGVmZmVjdGl2ZSB1c2VyIElEIHRvIHJlYWwgVUlECiQpID0gJCg7ICMg c2V0IGVmZmVjdGl2ZSBncm91cCBJRCB0byByZWFsIEdJRAoKIyBNYWtlICVFTlYgc2FmZXIK ZGVsZXRlIEBFTlZ7cXcoSUZTIENEUEFUSCBFTlYgQkFTSF9FTlYgUEFUSCBTSEVMTCl9OwoK IyBTZXQgdGhlIGVudmlyb25tZW50IGV4cGxpY2l0bHkKJEVOVntQQVRIfSA9ICRwYXRoOwok RU5We1NIRUxMfSA9ICRzaGVsbDsKCiMgb3B0aW9ucyBmbGFncwpvdXIgJG9wdGlvbnMgPSAi IjsKb3VyICRyZXR1cm5fcGF0aCA9ICIiOwpvdXIgJG9wdF9yZW1vdGVfaXAgPSAiIjsKb3Vy ICRvcHRfcmVtb3RlX25hbWUgPSAiIjsKb3VyICRvcHRfbG9jYWxfaXAgPSAiIjsKb3VyICRv cHRfbG9jYWxfbmFtZSA9ICIiOwpvdXIgJG9wdF9oZWxvID0gIiI7Cm91ciAkb3B0X3JjcHQg PSAiIjsKb3VyICRub19sb2NhbF9yZWNlaXZlZCA9IHVuZGVmOwpvdXIgJGFkZF9sb2NhbF9y ZWNlaXZlZCA9IHVuZGVmOwoKIyBkZWZpbmUgdGhlIGNvbnRyb2wtbGluZWZlZWQgc3ludGF4 IGZvciB0aGlzIHN5c3RlbQpvdXIgJENSTEYgPSAKIlxuIjsKIygkXk89fi9WTVMvaSk/IAki XG4iOiAJCSMgVk1TCiMoIlx0IiBuZSAiXDAxMSIpPyAJIlxyXG4iOiAJIyBFQkNESUMKIwkJ CSJcMDE1XDAxMiI7IAkjIG90aGVycyAKCiMgRE5TIHF1ZXJ5IG9wdGlvbnMKb3VyICRyZXMg PSBOZXQ6OkROUzo6UmVzb2x2ZXItPm5ldygKCW5hbWVzZXJ2ZXJzICAgICA9PiBbcXcoMTI3 LjAuMC4xKV0sCgl1ZHBfdGltZW91dCAgICAgPT4gMiwKCXJldHJ5ICAgICAgICAgICA9PiAx LAoJI2RlYnVnICAgICAgICAgID0+IDEKKTsKCiMgY29udmVydCB3aGl0ZWxpc3QgaW50byBD SURSIG5vdGF0aW9uCm91ciBAY2lkcl9saXN0ID0gKCk7CmZvcmVhY2ggbXkgJElQIChAd2hp dGVsaXN0KSB7CiAgaWYgKG5vdCBldmFsIHtAY2lkcl9saXN0ID0gTmV0OjpDSURSOjpjaWRy YWRkICgkSVAsIEBjaWRyX2xpc3QpfSkgewogICAgZXJyb3IoIndhcm4iLCJFcnJvciBwcm9j ZXNzaW5nIHdoaXRlbGlzdDogXCIkSVBcIiBpcyBub3QgYSB2YWxpZCBJUCBhZGRyZXNzIG9y IHJhbmdlLiIpOwogIH0KfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNYWluICMjIyMjIyMjIyMjIyMj IyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKCm9wZW5sb2coYmFzZW5hbWUgJDAsICdtYWlsJyk7CgojIHByb2Nlc3Mgb3B0aW9ucwpz dWIgdXNhZ2UgewogICAgbXkgJHNwYW1pdGFyaXVtID0gJDEgaWYgJDAgPX4gL14oW1x3XC8u XC1+XSopJC87CiAgICBzeXN0ZW0oInBlcmxkb2MgJHNwYW1pdGFyaXVtIik7Cn0KCiMgQWxs b3cgYnVuZGxpbmcgb2YgZmlyc3Qgc2V0IG9mIG9wdGlvbnMsIGFzIHdlbGwgYXMgb3B0aW9u YWwgaHlwaGVuLgppZiAoQEFSR1YgYW5kICRBUkdWWzBdID1+IC9eLT9baHJkZmFzZWJ3eHRw XSskLykgewogICAgaWYgKCRBUkdWWzBdID1+IHMvcy8vKSB7CglzcGxpY2UoQEFSR1YsIDEs IDAsICItcyIpOwogICAgfQogICAgJEFSR1ZbMF0gPX4gcy9eKFteLV0pLy0kMS87CiAgICBH ZXRvcHQ6Okxvbmc6OkNvbmZpZ3VyZSgiYnVuZGxpbmciKTsKfQoKaWYgKCEgR2V0T3B0aW9u cygiaGVscHxoIiA9PiBzdWIgeyAmdXNhZ2U7IGV4aXQoMCk7IH0sCgkJICJyIiA9PiBzdWIg eyAkb3B0aW9ucyAuPSAiciI7IH0sICMgcHJvY2VzcyByZWNlaXZlZCBoZWFkZXJzCgkJICJk IiA9PiBzdWIgeyAkb3B0aW9ucyAuPSAiZCI7IH0sICMgcGVyZm9ybSBkb21haW4gbG9va3Vw cyB3aGVyZSBuZWVkZWQKCQkgImYiID0+IHN1YiB7ICRvcHRpb25zIC49ICJmIjsgfSwgIyBm b3JjZSBSRE5TIGxvb2t1cHMgZXZlbiB3aGVyZSBNVEEgcHJvdmlkZWQKCQkgImEiID0+IHN1 YiB7ICRvcHRpb25zIC49ICJhIjsgfSwgIyBwZXJmb3JtIEFTTiBsb29rdXBzCgkJICJzOnMi ID0+IHN1YiB7ICRvcHRpb25zIC49ICJzIjsgICMgc3RhbmRhcmQgZmllbGRzIG9ubHkgKHN0 cmlwIG90aGVycykKCQkJICR1c2VyX2ZpZWxkcyA9ICRfWzFdOyB9LAoJCSAiZSIgPT4gc3Vi IHsgJG9wdGlvbnMgLj0gImUiOyB9LCAjIGluY2x1ZGUgdGhlIGhlbG8gcmVjZWl2ZWQgZmll bGQgaW4gb3V0cHV0CgkJICJiIiA9PiBzdWIgeyAkb3B0aW9ucyAuPSAiYiI7IH0sICMgb3V0 cHV0IGJlbmNobWFya2luZyBpbmZvCgkJICJ3IiA9PiBzdWIgeyAkb3B0aW9ucyAuPSAidyI7 IH0sICMgcHJvY2VzcyB3aG9sZSBlbWFpbCAoaW5jbHVkaW5nIGJvZHkpCgkJICJ4IiA9PiBz dWIgeyAkb3B0aW9ucyAuPSAieCI7IH0sICMgaW5zZXJ0IGN1c3RvbSB4LWhlYWRlciBmaWVs ZHMKCQkgInQiID0+IHN1YiB7ICRvcHRpb25zIC49ICJ0IjsgfSwgIyBwZXJmb3JtIGRhdGUg cmFuZ2UgY2hlY2tzCgkJICJwIiA9PiBzdWIgeyAkb3B0aW9ucyAuPSAicCI7IH0sICMgcGVy Zm9ybSBTUEYgbG9va3VwcwoJCSAicmV0dXJuLXBhdGh8cmV0dXJucGF0aD1zIiA9PiBcJHJl dHVybl9wYXRoLAoJCSAicmVtb3RlLWlwfHJlbW90ZWlwPXMiID0+IFwkb3B0X3JlbW90ZV9p cCwKCQkgInJlbW90ZS1uYW1lfHJlbW90ZW5hbWU9cyIgPT4gXCRvcHRfcmVtb3RlX25hbWUs CgkJICJsb2NhbC1pcHxsb2NhbGlwPXMiID0+IFwkb3B0X2xvY2FsX2lwLAoJCSAibG9jYWwt bmFtZXxsb2NhbG5hbWU9cyIgPT4gXCRvcHRfbG9jYWxfbmFtZSwKCQkgImhlbG89cyIgPT4g XCRvcHRfaGVsbywKCQkgInJjcHQ9cyIgPT4gXCRvcHRfcmNwdCwKCQkgIm5vLWxvY2FsLXJl Y2VpdmVkfG5vbG9jYWxyZWNlaXZlZCIgPT4gXCRub19sb2NhbF9yZWNlaXZlZCwKCQkgImFk ZC1sb2NhbC1yZWNlaXZlZHxhZGRsb2NhbHJlY2VpdmVkIiA9PiBcJGFkZF9sb2NhbF9yZWNl aXZlZCwKICAgICAgICAgICAgICAgICAidGltZW91dD1pIiA9PiBcJHRpbWVvdXQsICAjIDAg dG8gZGlzYWJsZSB0aW1lb3V0CgkJICkpIHsKICAgICZ1c2FnZTsKICAgIGV4aXQoMSk7Cn0K CiMgb3BlbiBwb3BpcCBkYXRhYmFzZSBmb3IgcmVhZGluZwpvdXIgJWRiOwomb3BlbmRiX3Jl YWQgaWYgJGRiZmlsZTsKCiMgc3RhcnQgdGltaW5nIHRoZSBwcm9jZXNzCm15ICRzdGFydF90 aW1lID0gbmV3IEJlbmNobWFyayBpZiAkb3B0aW9ucyA9fiAvYi87Cm15ICgkc3RhcnRfcGFy c2UsICRlbmRfcGFyc2UsICRzdGFydF9yY3ZkLCAkZW5kX3JjdmQsICRzdGFydF9zZXQsICRl bmRfc2V0KTsKCiMgZ2V0IFNURElOIGFuZCBwcm9jZXNzIHRoZSBlbWFpbApldmFsIAp7Cgkj IHNldCBhbiBhbGFybSBzbyB0aGF0IHdlIGRvbid0IGhhbmcgb24gYW4gZW1wdHkgU1RESU4K CWxvY2FsICRTSUd7QUxSTX0gPSBzdWIgeyBkaWUgInRpbWVvdXQiIH07CiAgICAgICAgaWYg KCR0aW1lb3V0ID4gMCkgewogICAgICAgICAgICBhbGFybSAkdGltZW91dDsKICAgICAgICB9 CgoJIyBwYXJzZSB0aGUgaGVhZGVyCgkkc3RhcnRfcGFyc2UgPSBuZXcgQmVuY2htYXJrIGlm ICRvcHRpb25zID1+IC9iLzsKCW15ICgkaGVhZGVyLCRwYXJzZV9iZW5jaG1hcmspID0gcGFy c2VfaGVhZGVyKCk7CgkkZW5kX3BhcnNlID0gbmV3IEJlbmNobWFyayBpZiAkb3B0aW9ucyA9 fiAvYi87CgoJIyBjYW5jZWwgdGltZW91dCBpZiB3ZSBnb3QgdGhpcyBmYXIKCWFsYXJtIDA7 CgoJIyBkZWZhdWx0IGRhdGUgaWYgbm9uZSBwcm92aWRlZAoJdW5sZXNzIChkZWZpbmVkICRo ZWFkZXItPnsnZGF0ZSd9KQoJewoJCSRoZWFkZXItPnsnZGF0ZSd9LT5bMF0tPnsnbmFtZSd9 ID0gIkRhdGUiOwoJCSRoZWFkZXItPnsnZGF0ZSd9LT5bMF0tPnsndmFsdWUnfSA9IGdtdGlt ZSB0aW1lOwoJfQoJCgkjIHByb2Nlc3MgdGhlIHJlY2VpdmVkIGxpbmVzCglpZiAoJG9wdGlv bnMgPX4gL3IvKQoJewoJCSRzdGFydF9yY3ZkID0gbmV3IEJlbmNobWFyayBpZiAkb3B0aW9u cyA9fiAvYi87CgkJJGhlYWRlci0+eydyZWNlaXZlZCd9ID0gcHJvY2Vzc19yY3ZkKCRoZWFk ZXItPnsncmVjZWl2ZWQnfSwkcmV0dXJuX3BhdGggfHwgJGhlYWRlci0+eydyZXR1cm4tcGF0 aCd9LT5bMF0tPnsndmFsdWUnfSk7CgkJJGVuZF9yY3ZkID0gbmV3IEJlbmNobWFyayBpZiAk b3B0aW9ucyA9fiAvYi87Cgl9CgoJIyBhZGQgbmV3IGN1c3RvbSBoZWFkZXIgZmllbGRzCglp ZiAoJG9wdGlvbnMgPX4gL3gvKSAKCXsKCQlpZiAoJG9wdGlvbnMgPX4gL3QvKQoJCXsKCQkJ JGhlYWRlci0+eyd4LWRhdGUtY2hlY2snfS0+WzBdLT57J25hbWUnfSA9ICJYLURhdGUtQ2hl Y2siOyAKCQkJJGhlYWRlci0+eyd4LWRhdGUtY2hlY2snfS0+WzBdLT57J3ZhbHVlJ30gPSBk YXRlX2NoZWNrKCRoZWFkZXItPnsnZGF0ZSd9LT5bMF0tPnsndmFsdWUnfSwkaGVhZGVyLT57 J3JlY2VpdmVkJ30tPlswXS0+eydkYXRlJ30pOwoJCX0KCgkJaWYgKCRvcHRpb25zID1+IC9w LykKCQl7CgkgICAgICAgICAgICAgICAgZm9yIChteSAkeCA9IDA7ICR4IDwgc2NhbGFyIEB7 JGhlYWRlci0+eydyZWNlaXZlZCd9fTsgJHgrKykKCSAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgCSAgICAgICAgaWYgKGRlZmluZWQgJGhlYWRlci0+eydyZWNl aXZlZCd9LT5bJHhdLT57J3NwZid9ICYmICRoZWFkZXItPnsncmVjZWl2ZWQnfS0+WyR4XS0+ eydzcGYnfSA9fiAvXHcvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCXsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAeyRoZWFkZXItPnsneC1z cGYnfX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyduYW1l JyA9PiAiWC1TUEYiLCAndmFsdWUnID0+ICRoZWFkZXItPnsncmVjZWl2ZWQnfS0+WyR4XS0+ eydzcGYnfX0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCSAgICAgICAg ICAgICAgICB9CQkJCgkJfQoJfQoKCSMgVGhpcyBuZWVkcyB0byBiZSBkb25lIGFmdGVyIHRo ZSB4LXNwZiBoZWFkZXJzIGFyZSBnZW5lcmF0ZWQKCSMgYWJvdmUsIHNvIHRoYXQgYW4geC1z cGYgaGVhZGVyIGlzIGdlbmVyYXRlZCBmb3IgdGhlCgkjIGF1dG8tZ2VuZXJhdGVkIGxvY2Fs IFJlY2VpdmVkIGxpbmUuCglpZiAoJG5vX2xvY2FsX3JlY2VpdmVkIGFuZCBub3QgJGFkZF9s b2NhbF9yZWNlaXZlZCkgewoJICAgIHNwbGljZShAeyRoZWFkZXItPnsncmVjZWl2ZWQnfX0s IDAsIDEpOwoJfQoKCSMgb3V0cHV0IHRoZSBuZXcgaGVhZGVyIGNvbnRhaW5pbmcgdGhlIGNo YW5nZXMKCSRzdGFydF9zZXQgPSBuZXcgQmVuY2htYXJrIGlmICRvcHRpb25zID1+IC9iLzsK CXByaW50IHNldF9oZWFkZXIoJGhlYWRlcik7CgkkZW5kX3NldCA9IG5ldyBCZW5jaG1hcmsg aWYgJG9wdGlvbnMgPX4gL2IvOwoKCSMgYWRkIHRoZSBib2R5IGlmIGRlc2lyZWQKCXByaW50 IHBhcnNlX2JvZHkoKSBpZiAkb3B0aW9ucyA9fiAvdy87Cn07CgojIHByb3BhZ2F0ZSBlcnJv cnMKZGllIGlmICRAICYmICRAICF+IC90aW1lb3V0L2k7CgojIHByaW50IHRpbWVvdXQgbWVz c2FnZQppZiAoJEAgPX4gL3RpbWVvdXQvaSkgeyBlcnJvcigiZGllIiwiVGltZWQgb3V0Li4u IG1ha2Ugc3VyZSB0byBzdXBwbHkgYW4gZW1haWwgZm9yIHByb2Nlc3NpbmcuICBUcnkgJ3Nw YW1pdGFyaXVtIC1oJyBmb3IgZGV0YWlscy5cbiIpOyB9CgojIGNhbGN1bGF0ZSB0b3RhbCBy dW5uaW5nIHRpbWUKaWYgKCRvcHRpb25zID1+IC9iLykKewoJbXkgJGVuZF90aW1lID0gbmV3 IEJlbmNobWFyazsgIAoJbXkgJHRkID0gdGltZWRpZmYoJGVuZF90aW1lLCAkc3RhcnRfdGlt ZSk7CglteSAkdXNyID0gJHRkLT5bMV0rJHRkLT5bM107IG15ICRzeXMgPSAkdGQtPlsyXSsk dGQtPls0XTsKCW15ICRjcHUgPSAkdXNyKyRzeXM7IG15ICR3YWxsID0gJHRkLT5bMF07Cglw cmludCAiVG90YWwgcnVubmluZyB0aW1lIHdhcyAkd2FsbCB3YWxsY2xvY2sgc2VjczsgJHVz ciB1c3IgKyAkc3lzIHN5cyA9ICRjcHUgQ1BVIHNlY3MuJENSTEYiOwoKCSR0ZCA9IHRpbWVk aWZmKCRlbmRfcGFyc2UsICRzdGFydF9wYXJzZSk7CgkkdXNyID0gJHRkLT5bMV0rJHRkLT5b M107ICRzeXMgPSAkdGQtPlsyXSskdGQtPls0XTsKCSRjcHUgPSAkdXNyKyRzeXM7ICR3YWxs ID0gJHRkLT5bMF07CglwcmludCAiSW5wdXQgcGFyc2luZyB0aW1lIHdhcyAkd2FsbCB3YWxs Y2xvY2sgc2VjczsgJHVzciB1c3IgKyAkc3lzIHN5cyA9ICRjcHUgQ1BVIHNlY3MuJENSTEYi OwoKCWlmICgkb3B0aW9ucyA9fiAvci8pCgl7CgkJJHRkID0gdGltZWRpZmYoJGVuZF9yY3Zk LCAkc3RhcnRfcmN2ZCk7CgkJJHVzciA9ICR0ZC0+WzFdKyR0ZC0+WzNdOyAkc3lzID0gJHRk LT5bMl0rJHRkLT5bNF07CgkJJGNwdSA9ICR1c3IrJHN5czsgJHdhbGwgPSAkdGQtPlswXTsK CQlwcmludCAiUmVjZWl2ZWQgbGluZSBwcm9jZXNzaW5nIHRpbWUgd2FzICR3YWxsIHdhbGxj bG9jayBzZWNzOyAkdXNyIHVzciArICRzeXMgc3lzID0gJGNwdSBDUFUgc2Vjcy4kQ1JMRiI7 Cgl9CgoJJHRkID0gdGltZWRpZmYoJGVuZF9zZXQsICRzdGFydF9zZXQpOwoJJHVzciA9ICR0 ZC0+WzFdKyR0ZC0+WzNdOyAkc3lzID0gJHRkLT5bMl0rJHRkLT5bNF07CgkkY3B1ID0gJHVz ciskc3lzOyAkd2FsbCA9ICR0ZC0+WzBdOwoJcHJpbnQgIlJlYnVpbGRpbmcgZW1haWwgdGlt ZSB3YXMgJHdhbGwgd2FsbGNsb2NrIHNlY3M7ICR1c3IgdXNyICsgJHN5cyBzeXMgPSAkY3B1 IENQVSBzZWNzLiRDUkxGIjsKfQoKIyBjbG9zZSBwb3BpcCBkYXRhYmFzZQomY2xvc2VkYiBp ZiAkZGJmaWxlOwoKZXhpdCgwKTsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIFBhcnNlIEhlYWRlciAgIyMjIyMj IyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCgpzdWIgcGFyc2VfaGVhZGVyCnsKICAgIGxvY2FsKCRfKTsKICAgIG15ICRoZWFk ZXJfdGV4dCA9ICIiOwoKICAgIHdoaWxlICg8U1RESU4+KSB7CiAgICAgICAgbGFzdCBpZiAo L15ccj9cbiQvKTsKICAgICAgICAkaGVhZGVyX3RleHQgLj0gJF87CiAgICB9CgogICAgIyBU aGlzIGlzIHJlYWxseSBncm9zcy4gVGhlcmUgaXMgYSBjZXJ0YWluIHByb21pbmVudCBlbWFp bCBtYXJrZXRpbmcKICAgICMgY29tcGFueSB3aG9zZSBzb2Z0d2FyZSBoYXMgYSBidWcgaW4g aXQgd2hpY2ggY2F1c2VzIERhdGU6IGhlYWRlcnMgdG8KICAgICMgc29tZXRpbWVzIGJlIHRl cm1pbmF0ZWQgd2l0aCBqdXN0IENSIHJhdGhlciB0aGFuIENSTEYuIElmIHdlIGludGVycHJl dAogICAgIyBSRkMgNTMyMSBzZWN0aW9uIDIuMy44IHN0cmljdGx5LCB0aGVuIHdlJ3JlIHJl cXVpcmVkIHRvIHRyZWF0IHN1Y2ggYQogICAgIyBEYXRlOiBoZWFkZXIgYW5kIHRoZSBvbmUg Zm9sbG93aW5nIGl0IGFzIGEgc2luZ2xlIGhlYWRlciBmaWVsZCwgYnV0CiAgICAjIHN0cmlj dCBhZGhlcmVuY2UgdG8gdGhlIFJGQyB3aGVuIHRoYXQgcmVzdWx0cyBpbiBvYnZpb3VzbHkg YnJva2VuCiAgICAjIGJlaGF2aW9yIGlzIG5vdCB0aGUgYmVzdCBhcHByb2FjaC4gT24gdGhl IG90aGVyIGhhbmQsIHdoZW4gd2UncmUgc3RyYXlpbmcKICAgICMgZnJvbSB0aGUgUkZDLCB3 ZSB3YW50IHRvIGRvIHNvIGFzIG1pbmltYWxseSBhcyBwb3NzaWJsZS4gVGhlcmVmb3JlLCB3 aGF0CiAgICAjIHdlIGFyZSBkb2luZyBoZXJlIGlzIGNoZWNraW5nIHNwZWNpZmljYWxseSBm b3IgdGhpcyBleGFjdCBwcm9ibGVtIC0tCiAgICAjIERhdGU6IGhlYWRlcnMgZW5kaW5nIHdp dGggQ1IgcmF0aGVyIHRoYW4gQ1JMRiAtLSBhbmQgY29ycmVjdGluZyBmb3IganVzdAogICAg IyB0aGF0IG9uZSwgbGltaXRlZCBjYXNlLgogICAgIyBUaGlzIGhhbmRsZXMgaW5wdXQgd2l0 aCBib3RoIENSTEYgYW5kIExGIGxpbmUgdGVybWluYXRvcnMuCiAgICAkaGVhZGVyX3RleHQg PX4gcy9eKERhdGU6LiopXHIoW15cbl0uKiguKVxuKS8kMSQzXG4kMi9tOwoKICAgIG15KEBo ZWFkZXJzKSA9IHNwbGl0KC9cblxiLywgJGhlYWRlcl90ZXh0KTsKICAgIAogICAgbXkgJGhl YWRlciA9IHt9OwogICAgbXkgJGxhc3RfaGVhZGVyID0gdW5kZWY7CgogICAgZm9yIChAaGVh ZGVycykgewogICAgICAgIHMvXHMrJC8vOwogICAgICAgIHMvXHMrLyAvZzsgICMgY29sbGFw c2Ugd2hpdGVzcGFjZQogICAgICAgIGlmIChzL14oXFMrKTpccyovLykgewogICAgICAgICAg ICBteSAkbmFtZSA9ICQxOwogICAgICAgICAgICBteSAkdGFnID0gJG5hbWU7CiAgICAgICAg ICAgICR0YWcgPX4gdHIvQS1aL2Etei87ICAjIGhlYWRlciBuYW1lcyBhcmUgY2FzZS1pbnNl bnNpdGl2ZQogICAgICAgICAgICBpZiAoISAkXyBhbmQgJGhlYWRlci0+eyR0YWd9IGFuZAog ICAgICAgICAgICAgICAgZ3JlcCghICRfLT57J3ZhbHVlJ30sIEB7JGhlYWRlci0+eyR0YWd9 fSkpIHsKICAgICAgICAgICAgICAgICMgSWYgYW4gZW1wdHkgaGVhZGVyIGZpZWxkIGlzIHJl cGVhdGVkIG11bHRpcGxlIHRpbWVzLCB3ZSBvbmx5CiAgICAgICAgICAgICAgICAjIG5lZWQg dG8gcHJlc2VydmUgb25lIG9mIHRoZW0uCiAgICAgICAgICAgICAgICBuZXh0OwogICAgICAg ICAgICB9CiAgICAgICAgICAgIHB1c2goQHskaGVhZGVyLT57JHRhZ319LCB7J25hbWUnID0+ ICRuYW1lLCAndmFsdWUnID0+ICRffSk7CiAgICAgICAgICAgICRsYXN0X2hlYWRlciA9ICRo ZWFkZXItPnskdGFnfS0+Wy0xXTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICAgICMgV2hhdCdzIHRoZSByaWdodCB0aGluZyB0byBkbyBoZXJlPyBFaXRoZXIgdGhlcmUn cyBubyBjb2xvbiBvcgogICAgICAgICAgICAjIHRoZXJlJ3Mgd2hpdGVzcGFjZSBiZWZvcmUg dGhlIGNvbG9uLCBib3RoIG9mIHdoaWNoIGFyZSBSRkMKICAgICAgICAgICAgIyB2aW9sYXRp b25zLiBPdXIgYmVzdCBndWVzcyBpcyB0byBhcHBlbmQgdGhpcyB0byB0aGUgcHJldmlvdXMK ICAgICAgICAgICAgIyBoZWFkZXIuCiAgICAgICAgICAgIGlmICghICRsYXN0X2hlYWRlcikg ewogICAgICAgICAgICAgICAgZXJyb3IoIndhcm4iLCAiQmFkIGluaXRpYWwgaGVhZGVyIGxp bmUgJyRfJyBpZ25vcmVkXG4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgICAgIGVycm9yKCJ3YXJuIiwgIkJhZCBoZWFkZXIgbGluZSAnJF8nIGFw cGVuZGVkIHRvIHByZWNlZGluZyAnIiAuCiAgICAgICAgICAgICAgICAgICAgICAkbGFzdF9o ZWFkZXItPnsnbmFtZSd9IC4gIicgaGVhZGVyIGZpZWxkIik7CiAgICAgICAgICAgICAgICAk bGFzdF9oZWFkZXItPnsndmFsdWUnfSAuPSAiICIgLiAkXzsKICAgICAgICAgICAgfQogICAg ICAgIH0gICAgICAgICAgICAgICAgICAgICAgCiAgICB9ICAgCiAgICAgICAgICAgICAgICAK ICAgIHJldHVybiAkaGVhZGVyOwp9CgpzdWIgZGF0ZV9jaGVjawp7CglteSAoJGRhdGUsJHJj dmQpID0gc2hpZnQ7CglteSAoJGRvdywgJGRheSwgJG1vbiwgJHllYXIsICRob3VyLCAkbWlu LCAkc2VjLCAkcm1kcikgPSAiPyI7CgoJaWYgKCRkYXRlID1+IC9ccyo/KFx3ezEsOX0pLD9c cys/KFxkKz8pXHMrPyhcd3szfSlccys/KFxkezR9KVxzKz8oXGR7MSwyfSk6KFxkezJ9KToo XGR7Mn0pKC4qKS9pKSAKCXsgCgkJJGRvdz0kMTsgJGRheT0kMjsgJG1vbj0kMzsgJHllYXI9 JDQ7ICRob3VyPSQ1OyAkbWluPSQ2OyAkc2VjPSQ3OyAkcm1kcj0kODsKCQkkbW9uID0gJG1v bj1+L0RlYy9pPzExOiRtb249fi9Ob3YvaT8xMDokbW9uPX4vT2N0L2k/OTokbW9uPX4vU2Vw L2k/ODokbW9uPX4vQXVnL2k/NzokbW9uPX4vSnVsL2k/NjokbW9uPX4vSnVuL2k/NTokbW9u PX4vTWF5L2k/NDokbW9uPX4vQXByL2k/MzokbW9uPX4vTWFyL2k/MjokbW9uPX4vRmViL2k/ MTowOwoKCQlldmFsIHsKCQkgICAgJGRhdGUgPSB0aW1lZ20oJHNlYywkbWluLCRob3VyLCRk YXksJG1vbiwkeWVhcik7CgkJfTsKCQlpZiAoJEApIHsKCQkgICAgcmV0dXJuICJkYXRlLW91 dC1vZi1yYW5nZSAob3ZlcmZsb3cpIjsKCQl9CgoJCSMgYWRqdXN0IGZvciBsb2NhbCB0aW1l CgkJaWYgKCRybWRyID1+IC9cK1xkKFxkKVxkXGQvKSB7ICRkYXRlIC09ICQxICogNjAgKiA2 MDsgfQoJCWlmICgkcm1kciA9fiAvXC1cZChcZClcZFxkLykgeyAkZGF0ZSArPSAkMSAqIDYw ICogNjA7IH0KCX0KCWVsc2UgeyByZXR1cm4gImRhdGUtZm9ybWF0LXVua25vd24iOyB9Cgog ICAgICAgIGlmICgkcmN2ZCAmJiAkcmN2ZCA9fiAvXHMqPyhcd3sxLDl9KSw/XHMrPyhcZCs/ KVxzKz8oXHd7M30pXHMrPyhcZHs0fSlccys/KFxkezEsMn0pOihcZHsyfSk6KFxkezJ9KSgu KikvaSkKICAgICAgICB7CiAgICAgICAgICAgICAgICAkZG93PSQxOyAkZGF5PSQyOyAkbW9u PSQzOyAkeWVhcj0kNDsgJGhvdXI9JDU7ICRtaW49JDY7ICRzZWM9JDc7ICRybWRyPSQ4OwoJ CSRtb24gPSAkbW9uPX4vRGVjL2k/MTE6JG1vbj1+L05vdi9pPzEwOiRtb249fi9PY3QvaT85 OiRtb249fi9TZXAvaT84OiRtb249fi9BdWcvaT83OiRtb249fi9KdWwvaT82OiRtb249fi9K dW4vaT81OiRtb249fi9NYXkvaT80OiRtb249fi9BcHIvaT8zOiRtb249fi9NYXIvaT8yOiRt b249fi9GZWIvaT8xOjA7CgoJCWV2YWwgewoJCSAgICAkcmN2ZCA9IHRpbWVnbSgkc2VjLCRt aW4sJGhvdXIsJGRheSwkbW9uLCR5ZWFyKTsKCQl9OwoJCWlmICgkQCkgewoJCSAgICByZXR1 cm4gImRhdGUtb3V0LW9mLXJhbmdlIChvdmVyZmxvdykiOwoJCX0KCiAgICAgICAgICAgICAg ICAjIGFkanVzdCBmb3IgbG9jYWwgdGltZQogICAgICAgICAgICAgICAgaWYgKCRybWRyID1+ IC9cK1xkKFxkKVxkXGQvKSB7ICRyY3ZkIC09ICQxICogNjAgKiA2MDsgfQogICAgICAgICAg ICAgICAgaWYgKCRybWRyID1+IC9cLVxkKFxkKVxkXGQvKSB7ICRyY3ZkICs9ICQxICogNjAg KiA2MDsgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsgJHJjdmQgPSB0aW1lOyB9CgoJIyBj aGVjayBmb3IgcmFuZ2UgKy8tCglteSAkZGlmZiA9ICRyY3ZkIC0gJGRhdGU7IG15ICRkaWZm X2RheXMgPSByb3VuZCgkZGlmZi8oNjAqNjAqMjQpKTsKCWlmICgoJGRpZmYgPCAkZGF0ZV9s aW1pdCkgYW5kICgkZGlmZiA+ICRkYXRlX2xpbWl0ICogLTEpKSB7IHJldHVybiAiZGF0ZS1p bi1yYW5nZSAoJGRpZmZfZGF5cyBkYXlzKSI7IH0KCWVsc2UgeyByZXR1cm4gImRhdGUtb3V0 LW9mLXJhbmdlICgkZGlmZl9kYXlzIGRheXMpIjsgfQp9CgpzdWIgcm91bmQgCnsKICAgIG15 ICRudW0gPSBzaGlmdDsKICAgIHJldHVybiBpbnQoKCRudW0qMTAwKSswLjUpLzEwMDsKfQoK IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMj IyMjIyMjIyMjIyMjIFBhcnNlIEJvZHkgICMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiBwYXJzZV9ib2R5 CnsKCSMgdGhpcyBmdW5jdGlvbiBpcyByZWFsbHkgb25seSB1c2VkIGZvcgoJIyBlbWFpbC10 by1lbWFpbCBjb21wYXJpc29ucywgd2hlcmUgcHJvY2Vzc2luZwoJIyB0aGUgZW50aXJlIGVt YWlsIGlzIHJlcXVpcmVkLi4uIHVzdWFsbHkKCSMgd2UnbGwganVzdCBwcm9jZXNzIHRoZSBo ZWFkZXIKCglteSAkYm9keSA9ICIiOwogICAgICAgIHdoaWxlICg8U1RESU4+KSB7ICRib2R5 IC49ICRfOyB9CglyZXR1cm4gJGJvZHk7Cn0JCQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIFByb2Nlc3MgUmVjZWl2ZWQg TGluZXMgICMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKCnN1YiBwcm9jZXNzX3JjdmQKewoJbXkgJHJjdmQgPSBzaGlmdDsK CW15ICRydHJuID0gc2hpZnQ7CgkKCSMgaGV1cmlzdGljcwoJbXkgJExVU0VSCT0gcXJ+KD86 XHd8LXxcLikrP347CglteSAkRE9NQUlOCT0gcXJ+KD86XHd8LXxcLikrXC5cd3syLDR9fjsK CW15ICRJUAkJPSBxcn4oPzpcZHsxLDN9XC4pezN9XGR7MSwzfX47CglteSAkRU1BSUwgCT0g cXJ+JExVU0VSXEAkRE9NQUlOfjsKCW15ICRIRUxPCT0gcXJ+W15cc1wwXC9cXFwjXSs/fjsK CW15ICRSRE5TCT0gcXJ+KD86JERPTUFJTnxcWz8kSVBcXT98dW5rbm93bnx1bnZlcmlmaWVk KX47CgkKCW15ICRlZGdlX2lwID0gIiI7CglteSAkdW50cnVzdGVkID0gMDsKCglpZiAoJG5v X2xvY2FsX3JlY2VpdmVkKSB7CgkgICAgbXkgJGxvY2FsX3JjdmQ7CgkgICAgJGxvY2FsX3Jj dmQtPnsndmFsdWUnfSA9ICJhdXRvLWdlbmVyYXRlZCI7CgkgICAgJGxvY2FsX3JjdmQtPnsn bmFtZSd9ID0gIlJlY2VpdmVkIjsKCSAgICAkbG9jYWxfcmN2ZC0+eydzYW5lJ30gPSAidHJ1 c3RlZCI7CgkgICAgJGxvY2FsX3JjdmQtPnsncmRucyd9ID0gJG9wdF9yZW1vdGVfbmFtZSB8 fCAiIjsKCSAgICAkbG9jYWxfcmN2ZC0+eydpcGFkJ30gPSAkb3B0X3JlbW90ZV9pcCB8fCAi IjsKCSAgICAkbG9jYWxfcmN2ZC0+eydtdGFuJ30gPSAkb3B0X2xvY2FsX25hbWUgfHwgIiI7 CgkgICAgJGxvY2FsX3JjdmQtPnsnbXRhaSd9ID0gJG9wdF9sb2NhbF9pcCB8fCAiIjsKCSAg ICAkbG9jYWxfcmN2ZC0+eydoZWxvJ30gPSAkb3B0X2hlbG8gfHwgIiI7CgkgICAgJGxvY2Fs X3JjdmQtPnsnZm9yZSd9ID0gJG9wdF9yY3B0IHx8ICIiOwoJICAgICRsb2NhbF9yY3ZkLT57 J2Zyb20nfSA9ICRyZXR1cm5fcGF0aCB8fCAiIjsKCgkgICAgc3BsaWNlKEB7JHJjdmR9LCAw LCAwLCAkbG9jYWxfcmN2ZCk7Cgl9CgkgICAgCgkjIGNoZWNrIGlmIHdlIHdlcmUgcGFzc2Vk IGEgdmFsaWQgYXJyYXkgb2YgcmVjZWl2ZWQgbGluZXMKCXVubGVzcyAoKGRlZmluZWQgJHJj dmQpICYmIChyZWYoJHJjdmQpIGVxICJBUlJBWSIpICYmICRyY3ZkLT5bMF0tPnsndmFsdWUn fSkKCXsKCQlubyBzdHJpY3QgJ3JlZnMnOwoJCW15ICVyY3ZkX2hhc2ggPSAoJ3ZhbHVlJyA9 PiAiZnJvbSBsb2NhbGhvc3Q7ICIgLiBnbXRpbWUgdGltZSwgJ25hbWUnID0+ICJSZWNlaXZl ZCIpOwoJCW15IEByY3ZkX2FycmF5OyAkcmN2ZF9hcnJheVswXSA9IFwlcmN2ZF9oYXNoOyAg JHJjdmQgPSBcQHJjdmRfYXJyYXk7Cgl9CgllbHNlIHsKCgkjIGl0ZXJhdGUgdGhyb3VnaCBl YWNoIHJlY2VpdmVkIGhlYWRlciwgcGFyc2luZyBhbmQgdmFsaWRhdGluZyB0aGUgaW5mbwoJ Zm9yIChteSAkeCA9IDA7ICR4IDwgc2NhbGFyIEAkcmN2ZDsgJHgrKykKCXsKCQkjIHNraXAg cHJvY2Vzc2luZyBpZiB3ZSBhbHJlYWR5IGxvc3QgY29uZmlkZW5jZSBpbiB0aGlzIHRyYWls IG9mIHJlY2VpdmVkIGxpbmVzCgkJI2lmICgkdW50cnVzdGVkKSB7ICRyY3ZkLT5bJHhdLT57 J3NhbmUnfSA9ICJ1bnRydXN0ZWQiOyBuZXh0OyB9CgkKCQlteSAkaGVsbyA9ICRyY3ZkLT5b JHhdLT57J2hlbG8nfSB8fCAiIjsKCQlteSAkaXBhZCA9ICRyY3ZkLT5bJHhdLT57J2lwYWQn fSB8fCAiIjsKCQlteSAkcmRucyA9ICRyY3ZkLT5bJHhdLT57J3JkbnMnfSB8fCAiIjsKCQlt eSAkZnJvbSA9ICRyY3ZkLT5bJHhdLT57J2Zyb20nfSB8fCAiIjsKCQlteSAkbXRhbiA9ICRy Y3ZkLT5bJHhdLT57J210YW4nfSB8fCAiIjsKCQlteSAkbXRhaSA9ICRyY3ZkLT5bJHhdLT57 J210YWknfSB8fCAiIjsKCQlteSAkZm9yZSA9ICRyY3ZkLT5bJHhdLT57J2ZvcmUnfSB8fCAi IjsKCgkJbXkgJGlkbnQ9IiI7IG15ICRtdGF2PSIiOyBteSAkd2l0aD0iIjsgbXkgJGRhdGU9 IiI7CgkJCgkJIyB0cnkgdG8gdGFrZSBpbnRvIGFjY291bnQgYWxsIGtub3duIE1UQSBmb3Jt YXRzCgkJCgkJaWYgICAgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9cKGVudmVsb3Bl LSg/OnNlbmRlcnxmcm9tKSA8KCRFTUFJTCk+XCkvL2dpcykgCQkJeyAkZnJvbT0kMTsgCQkJ CQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTAxOiBmcm9tPSRmcm9tLCByZW1haW5pbmc9JHJj dmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQlpZiAgICAoJHJjdmQtPlskeF0tPnsn dmFsdWUnfSA9fiBzLztccys/KFx3ezN9LCBcZHsxLDJ9IFx3ezN9IFxkezIsNH0uKj8pJC8v Z2lzKQkJCXsgJGRhdGU9JDE7IAkJCQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0wMjogZGF0 ZT0kZGF0ZSwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJ aWYgICAgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9mb3Jccys/PD8oJEVNQUlMKT4/ KD86IFwoc2luZ2xlLWRyb3BcKSk/Ly9naXMpIAkJCXsgJGZvcmU9JDE7IAkJCQkJfSMgcHJp bnQgIlgtJHgtbWF0Y2hlZC0wMzogZm9yZT0kZm9yZSwgcmVtYWluaW5nPSRyY3ZkLT5bJHhd LT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJaWYgICAgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30g PX4gcy9ieVxzKz8oXFMrPykgXCgoJElQKVwpIFwoKC4qPylcKS8vZ2lzKSAJCQkJeyAkbXRh bj0kMTsgJG10YWk9JDI7ICRtdGF2PSQzOyAJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMDQ6 IG10YW49JG10YW4sIG10YWk9JG10YWksIG10YXY9JG10YXYsIHJlbWFpbmluZz0kcmN2ZC0+ WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1 ZSd9ID1+IHMvYnlccys/KFxTKz8pIFxbKCRJUClcXS8vZ2lzKSAJCQkJCXsgJG10YW49JDE7 ICRtdGFpPSQyOyAJCQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0wNTogbXRhbj0kbXRhbiwg bXRhaT0kbXRhaSwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9 CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9ieVxzKz8oXFMrPykgXCgo Lis/KVwpLy9naXMpIAkJCQkJeyAkbXRhbj0kMTsgJG10YXY9JDI7IAkJCQl9IyBwcmludCAi WC0keC1tYXRjaGVkLTA2OiBtdGFuPSRtdGFuLCBtdGF2PSRtdGF2LCByZW1haW5pbmc9JHJj dmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJjdmQtPlskeF0tPnsn dmFsdWUnfSA9fiBzL2J5XHMrPygkSVApKD89XFd8O3wkKS8vZ2lzKSAJCQkJCQl7ICRtdGFp PSQxOyAJCQkJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMDc6IG10YWk9JG10YWksIHJlbWFp bmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+ WyR4XS0+eyd2YWx1ZSd9ID1+IHMvYnlccys/KCRET01BSU4pKD89XFd8O3wkKS8vZ2lzKSAJ CQkJCXsgJG10YW49JDE7IAkJCQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0wODogbXRhbj0k bXRhbiwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxz aWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9ieVxzKz8oXFMrPykoPz1cV3w7fCQp Ly9naXMpIAkJCQkJeyAkbXRhbj0kMTsgCQkJCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTA5 OiBtdGFuPSRtdGFuLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7 IH0KCQlpZiAgICAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzLyg/OndpdGgpXHMrPyhc Uys/KSBcKCguKj8pXCkvL2dpcykgCQkJCQl7ICR3aXRoPSQxOyAkbXRhdj0kMiBpZiAhJG10 YXY7IAkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0xMDogd2l0aD0kd2l0aCwgbXRhdj0kbXRh diwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiO30KCQllbHNpZiAo JHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzLyg/OndpdGgpXHMrPyhcUys/KSg/PVxXfDt8 JCkvL2dpcykgCQkJCQl7ICR3aXRoPSQxOyAJCQkJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQt MTE6IHdpdGg9JHdpdGgsIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxG IjsgfQoJCWlmICAgICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRS RE5TKSBcKEhFTE8gKCRIRUxPKVwpIFwoKCRMVVNFUilcQFxbPygkSVApXF0/Ly9naXMpIAl7 ICRyZG5zPSQxOyAkaGVsbz0kMjsgJGlkbnQ9JDM7ICRpcGFkPSQ0OyAJfSMgcHJpbnQgIlgt JHgtbWF0Y2hlZC0xMjogcmRucz0kcmRucywgaGVsbz0kaGVsbywgaWRudD0kaWRudCwgaXBh ZD0kaXBhZCwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJ ZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz8oJFJETlMpIFwo SEVMTyAoJEhFTE8pXCkgXChcWz8oJElQKVxdPy8vZ2lzKSAJCXsgJHJkbnM9JDE7ICRoZWxv PSQyOyAkaXBhZD0kMzsgCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTEzOiByZG5zPSRyZG5z LCBoZWxvPSRoZWxvLCBpcGFkPSRpcGFkLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFs dWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15m cm9tXHMrPygkUkROUykgXChcWygkSVApXF0gaGVsbz0oJEhFTE8pXCkvL2dpcykgCQkJeyAk cmRucz0kMTsgJGlwYWQ9JDI7ICRoZWxvPSQzOyAJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQt MTQ6IHJkbnM9JHJkbnMsIGlwYWQ9JGlwYWQsIGhlbG89JGhlbG8sIHJlbWFpbmluZz0kcmN2 ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2 YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRSRE5TKSBcKCgkTFVTRVIpXEBcWz8oJElQKVxdP1wp Ly9naXMpIAkJCXsgJHJkbnM9JDE7ICRpZG50PSQyOyAkaXBhZD0kMzsgCQl9IyBwcmludCAi WC0keC1tYXRjaGVkLTE1OiByZG5zPSRyZG5zLCBpZG50PSRpZG50LCBpcGFkPSRpcGFkLCBy ZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJj dmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkUkROUylcKCgkSVApXCkvL2dp cykgCQkJCQl7ICRyZG5zPSQxOyAkaXBhZD0kMjsgCQkJCX0jIHByaW50ICJYLSR4LW1hdGNo ZWQtMTY6IHJkbnM9JHJkbnMsIGlwYWQ9JGlwYWQsIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+ eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+ IHMvXmZyb21ccys/XFsoJElQKVxdIFwoaGVsbz0oJEhFTE8pIGlkZW50PSgkTFVTRVIpXCkv L2dpcykgCQl7ICRpcGFkPSQxOyAkaGVsbz0kMjsgJGlkbnQ9JDM7IAkJfSMgcHJpbnQgIlgt JHgtbWF0Y2hlZC0xNzogaXBhZD0kaXBhZCwgaGVsbz0kaGVsbywgaWRudD0kaWRudCwgcmVt YWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3Zk LT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz9cWygkSVApXF0gXChhY2NvdW50ICgk TFVTRVIpIEhFTE8gKCRIRUxPKVwpLy9naXMpIAkJeyAkaXBhZD0kMTsgJGlkbnQ9JDI7ICRo ZWxvPSQzOyAJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMTg6IGlwYWQ9JGlwYWQsIGlkbnQ9 JGlkbnQsIGhlbG89JGhlbG8sIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRD UkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/ XFsoJElQKVxdIFwoaGVsbz0oJEhFTE8pXCkvL2dpcykgCQkJCXsgJGlwYWQ9JDE7ICRoZWxv PSQyOyAJCQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0xOTogaXBhZD0kaXBhZCwgaGVsbz0k aGVsbywgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxz aWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz9cWz8oJElQKVxdPzo/ XGQqPyBcKEhFTE8gKCRIRUxPKVwpLy9naXMpIAkJCXsgJGlwYWQ9JDE7ICRoZWxvPSQyOyAJ CQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0yMDogaXBhZD0kaXBhZCwgaGVsbz0kaGVsbywg cmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRy Y3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz8oJEhFTE8pIFwoSURFTlQ6KCRM VVNFUilcQCgkUkROUykgXFsoJElQKVxdLy9naXMpIAkJeyAkaGVsbz0kMTsgJGlkbnQ9JDI7 ICRyZG5zPSQzOyAkaXBhZD0kNDsgCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMjE6IGhlbG89 JGhlbG8sIGlkbnQ9JGlkbnQsIHJkbnM9JHJkbnMsIGlwYWQ9JGlwYWQsIHJlbWFpbmluZz0k cmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4XS0+ eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRIRUxPKSBcKDw/KCRSRE5TKT4/XHM/XFsoJElQ KVxdLy9naXMpIAkJCXsgJGhlbG89JDE7ICRyZG5zPSQyOyAkaXBhZD0kMzsgCQl9IyBwcmlu dCAiWC0keC1tYXRjaGVkLTIyOiBoZWxvPSRoZWxvLCByZG5zPSRyZG5zLCBpcGFkPSRpcGFk LCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAo JHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkSEVMTykgXChcWygkSVAp XF0gaWRlbnQ9KCRMVVNFUilcKS8vZ2lzKSAJCQl7ICRoZWxvPSQxOyAkaXBhZD0kMjsgJGlk bnQ9JDM7IAkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0yMzogaGVsbz0kaGVsbywgaXBhZD0k aXBhZCwgaWRudD0kaWRudCwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENS TEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz8o JEhFTE8pIFwocHJveHlpbmcgZm9yICgkSVApXCkgXCguKj8gdXNlciAoJExVU0VSKVwpLy9n aXMpCXsgJGhlbG89JDE7ICRpcGFkPSQyOyAkaWRudD0kMzsgCQl9IyBwcmludCAiWC0keC1t YXRjaGVkLTI0OiBoZWxvPSRoZWxvLCBpcGFkPSRpcGFkLCBpZG50PSRpZG50LCByZW1haW5p bmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAoJHJjdmQtPlsk eF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkSEVMTykgXChhY2NvdW50ICgkTFVTRVIp IFxbKCRJUClcXSB2ZXJpZmllZFwpLy9naXMpIAl7ICRoZWxvPSQxOyAkaWRudD0kMjsgJGlw YWQ9JDM7IAkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0yNTogaGVsbz0kaGVsbywgaWRudD0k aWRudCwgaXBhZD0kaXBhZCwgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gJENS TEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9eZnJvbVxzKz9c KD8oJEhFTE8pIFwoP1xbPygkSVApXF0/XCk/Ly9naXMpIAkJCQl7ICRoZWxvPSQxOyAkaXBh ZD0kMjsgCQkJCX0jIHByaW50ICJYLSR4LW1hdGNoZWQtMjY6IGhlbG89JGhlbG8sIGlwYWQ9 JGlwYWQsIHJlbWFpbmluZz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVs c2lmICgkcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ID1+IHMvXmZyb21ccys/KCRIRUxPKSBcKGxv Y2FsaG9zdCBcWy4qPzooJElQKVxdXCkvL2dpcykgCQkJeyAkaGVsbz0kMTsgJGlwYWQ9JDI7 IAkJCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTI3OiBoZWxvPSRoZWxvLCBpcGFkPSRpcGFk LCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQllbHNpZiAo JHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkSEVMTykgXCgoJExVU0VS KVxAKCRSRE5TKVwpLy9naXMpIAkJCXsgJGhlbG89JDE7ICRpZG50PSQyOyAkcmRucz0kMzsg CQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTI4OiBoZWxvPSRoZWxvLCBpZG50PSRpZG50LCBy ZG5zPSRyZG5zLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0K CQllbHNpZiAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrPygkSEVMTykg XCgoJFJETlMpXCkvL2dpcykgCQkJCQl7ICRoZWxvPSQxOyAkcmRucz0kMjsgCQkJCX0jIHBy aW50ICJYLSR4LW1hdGNoZWQtMjk6IGhlbG89JGhlbG8sIHJkbnM9JHJkbnMsIHJlbWFpbmlu Zz0kcmN2ZC0+WyR4XS0+eyd2YWx1ZSd9ICRDUkxGIjsgfQoJCWVsc2lmICgkcmN2ZC0+WyR4 XS0+eyd2YWx1ZSd9ID1+IHMvXChmcm9tXHMrPygkTFVTRVIpXEAoJFJETlMpXCkvL2dpcykJ CQkJCXsgJGlkbnQ9JDE7ICRyZG5zPSQyOyAJCQkJfSMgcHJpbnQgIlgtJHgtbWF0Y2hlZC0z MDogaWRudD0kaWRudCwgcmRucz0kcmRucywgcmVtYWluaW5nPSRyY3ZkLT5bJHhdLT57J3Zh bHVlJ30gJENSTEYiOyB9CgkJZWxzaWYgKCRyY3ZkLT5bJHhdLT57J3ZhbHVlJ30gPX4gcy9c KGZyb21ccys/KCRMVVNFUilcQCgkSEVMTylcKS8vZ2lzKQkJCQkJeyAkaWRudD0kMTsgJGhl bG89JDI7IAkJCQl9IyBwcmludCAiWC0keC1tYXRjaGVkLTMxOiBpZG50PSRpZG50LCBoZWxv PSRoZWxvLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAkQ1JMRiI7IH0KCQll bHNpZiAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMrP1woP1xbPygkSVAp XF0/XCk/Ly9naXMpIAkJCQkJeyAkaXBhZD0kMTsgCQkJCQl9IyBwcmludCAiWC0keC1tYXRj aGVkLTMyOiBpcGFkPSRpcGFkLCByZW1haW5pbmc9JHJjdmQtPlskeF0tPnsndmFsdWUnfSAk Q1JMRiI7IH0KCQllbHNpZiAoJHJjdmQtPlskeF0tPnsndmFsdWUnfSA9fiBzL15mcm9tXHMr PygkSEVMTykoPz1cV3w7fCQpLy9naXMpIAkJCQkJeyAkaGVsbz0kMTsgCQkJCQl9IyBwcmlu dCAiWC0keC1tYXRjaGVkLTMzOiBoZWxvPSRoZWxvLCByZW1haW5pbmc9JHJjdmQtPlskeF0t PnsndmFsdWUnfSAkQ1JMRiI7IH0KCgkJIyBsb29rdXAgSVAgaWYgbm90IHByb3ZpZGVkCgkJ JGlwYWQgPSBob3N0KCRyZG5zKSBpZiAhJGlwYWQgJiYgJHJkbnMgJiYgJG9wdGlvbnMgPX4g L2QvOwoJCSRpcGFkID0gaG9zdCgkaGVsbykgaWYgISRpcGFkICYmICEkcmRucyAmJiAkaGVs byAmJiAkaGVsbyA9fiAvJERPTUFJTi8gJiYgJG9wdGlvbnMgPX4gL2QvOwoKCQkjIGV4Y2x1 ZGUgbGluZXMgd2l0aCBubyBJUAoJCSNuZXh0IGlmICEkaXBhZCAmJiAoKHNjYWxhciBAJHJj dmQpID4gMSk7CgoJCSMgZW5zdXJlIHRoZSBsb2NhbCByZWNlaXZlZCBsaW5lIGhhcyBhIGRh dGUgc3RhbXAKCQkkZGF0ZSA9IGdtdGltZSB0aW1lIHVubGVzcyAkZGF0ZSB8fCAkeDsKCgkJ IyBzYXZlICJmcm9tIiBpbmZvIGZvciBjb21wYXJpc29uIGluIG5leHQgaXRlcmF0aW9uCgkJ JHJjdmQtPlskeF0tPnsncmRucyd9CT0gJHJkbnM7CQkKCQkkcmN2ZC0+WyR4XS0+eydpcGFk J30JPSAkaXBhZDsKCQkkcmN2ZC0+WyR4XS0+eydkYXRlJ30JPSAkZGF0ZTsKCgkJIyBleGNs dWRlIGxpbmVzIGZyb20gbG9jYWwsIHByaXZhdGUgKFJGQyAxOTE4KSwgYW5kIGludmFsaWQg SVAgYWRkcmVzcyByYW5nZXMKCQlteSAkcmVzZXJ2ZWQgPSBxcn5eKCg/OjEyN1wuKXwoPzox MFwuKXwoPzoxNzJcLig/OjFbNi05XXwyWzAtOV18MzEpXC4pfCg/OjE5MlwuMTY4XC4pfCg/ OjE2OVwuMjU0XC4pKX47CgkJbXkgJHZhbGlkID0gcXJ+XigoPzowPzA/XGR8WzAxXT9cZFxk fDJbMC00XVxkfDI1WzAtNV0pXC4oPzowPzA/XGR8WzAxXT9cZFxkfDJbMC00XVxkfDI1WzAt NV0pXC4oPzowPzA/XGR8WzAxXT9cZFxkfDJbMC00XVxkfDI1WzAtNV0pXC4oPzowPzA/XGR8 WzAxXT9cZFxkfDJbMC00XVxkfDI1WzAtNV0pKSR+OwoJCW5leHQgaWYgKCgkcmRucyBhbmQg JHJkbnMgPX4gL2xvY2FsaG9zdC9pKSB8fCAoJGlwYWQgYW5kICgkaXBhZCA9fiAvJHJlc2Vy dmVkLyB8fCAkaXBhZCAhfiAvJHZhbGlkLykpKSAmJiAoKHNjYWxhciBAJHJjdmQpID4gMSk7 CgkJCgkJIyBsb29rdXAgTVRBIElQL3JETlMgaWYgbm90IHByb3ZpZGVkCgkJJG10YWkgPSBo b3N0KCRtdGFuKSBpZiAhJG10YWkgJiYgJG10YW4gJiYgJG9wdGlvbnMgPX4gL2QvOwoJCSRt dGFuID0gaG9zdCgkbXRhaSkgaWYgISRtdGFuICYmICRtdGFpICYmICRvcHRpb25zID1+IC9k LzsKCgkJIyBleGNsdWRlIGxpbmVzIGZyb20gd2l0aGluIG91ciBjbGFzcyBCICgvMTYpIG5l dHdvcmsKCQluZXh0IGlmICgoJGVkZ2VfaXAgJiYgJGlwYWQgJiYgaXNfc2FtZV9jbGFzc19C KCRlZGdlX2lwLCRpcGFkKSl8fCghJGVkZ2VfaXAgJiYgJG10YWkgJiYgJGlwYWQgJiYgaXNf c2FtZV9jbGFzc19CKCRtdGFpLCRpcGFkKSkpICYmICgoc2NhbGFyIEAkcmN2ZCkgPiAxKTsK CQkKCQkjIHBlcmZvcm0gcmV2ZXJzZSBETlMgbG9va3VwIGlmIG5vdCBwcm92aWRlZCBieSBN VEEKCQkkcmRucyA9IGhvc3QoJGlwYWQpIGlmICEkcmRucyAmJiAkaXBhZCAmJiAkb3B0aW9u cyA9fiAvZC87CgkJCgkJIyBmb3JjZSBhIHJldmVyc2UgRE5TIGxvb2t1cCBvbiBhbGwgSVBz LCBldmVuIHRob3NlIHdpdGggYW4gUkROUyBzZXQgYnkgdGhlIE1UQQoJCSRyZG5zID0gaG9z dCgkaXBhZCkgaWYgJGlwYWQgJiYgJG9wdGlvbnMgPX4gL2YvOwoJCQoJCSMgcGVyZm9ybSBB U04gbG9va3VwIChSRkMgMTkzMC8yMjcwKQoJCW15ICRhc24gPSAiIjsKCQkkYXNuID0gYXNu KCRpcGFkKSBpZiAkaXBhZCAmJiAkb3B0aW9ucyA9fiAvYS87CgoJCSMgcGVyZm9ybSBTUEYg bG9va3VwIChSRkMgNDQwOCkKCQlteSAkcmVzdWx0ID0gIiI7IG15ICRyZWNlaXZlZF9zcGYg PSAiIjsKCQlpZiAoJG9wdGlvbnMgPX4gL3AvKQoJCXsKCQkJaWYgKHNjYWxhciBAY2lkcl9s aXN0ICYmIGV2YWx7TmV0OjpDSURSOjpjaWRybG9va3VwKCRpcGFkLCBAY2lkcl9saXN0KX0p CgkJCXsKCQkJCSRyZXN1bHQgPSAicGFzcyI7CgkJCQkkcmVjZWl2ZWRfc3BmID0gInBhc3Mg KCRpcGFkIGlzIGxvY2FsbHkgd2hpdGVsaXN0ZWQpIjsKCQkJfQoKCQkJaWYgKCRkYmZpbGUg JiYgISRyZXN1bHQpCgkJCXsKCQkJCSZyZXRpZSB1bmxlc3MgdGllZCAlZGI7CgkJCQlpZiAo JGRieyRpcGFkfSkKCQkJCXsKCQkJCQkkcmVzdWx0ID0gInBhc3MiOwoJCQkJCSRyZWNlaXZl ZF9zcGYgPSAicGFzcyAoJGlwYWQgaXMgYXV0aGVudGljYXRlZCB2aWEgUE9QMykiOwoJCQkJ fQoJCQl9CgkJCQoJCQlpZiAoJHJ0cm4gJiYgJGlwYWQgJiYgISRyZXN1bHQpCgkJCXsKCQkJ ICAgIG15ICRzcnZyID0gJHJkbnM/JHJkbnM6KCRoZWxvPyRoZWxvOiRpcGFkKTsKCQkJICAg IGV2YWwgewoJCQkJbXkgJHNwZl9zZXJ2ZXIgPSBNYWlsOjpTUEY6OlNlcnZlci0+bmV3KCk7 CgkJCQlteSAkcmVxdWVzdCA9IE1haWw6OlNQRjo6UmVxdWVzdC0+bmV3KAoJCQkJICAgIGlk ZW50aXR5ID0+ICRydHJuLAoJCQkJICAgIGlwX2FkZHJlc3MgPT4gJGlwYWQsCgkJCQkgICAg aGVsb19pZGVudGl0eSA9PiAkc3J2cgoJCQkJICAgICk7CgkJCQlteSAkcmVzcG9uc2UgPSAk c3BmX3NlcnZlci0+cHJvY2VzcygkcmVxdWVzdCk7CgkJCQkkcmVzdWx0ID0gJHJlc3BvbnNl LT5jb2RlOwoJCQkJJHJlY2VpdmVkX3NwZiA9ICRyZXNwb25zZS0+cmVjZWl2ZWRfc3BmX2hl YWRlcjsKCQkJICAgIH07CgkJCSAgICBpZiAoJEApIHsKCQkJCXN5c2xvZygnd2FybmluZycs ICdTUEYgcXVlcnkgZXJyb3IgKGlwPSVzLCBzZW5kZXI9JXMsIGhlbG89JXMpOiAlcycsCgkJ CQkgICAgICAgJGlwYWQsICRydHJuLCAkc3J2ciwgJEApOwoJCQkJJEAgPSB1bmRlZjsKCQkJ CSRyZXN1bHQgPSB1bmRlZjsKCQkJICAgIH0KCQkJfQoJCQkKCQkJaWYgKCEkcmVzdWx0KQoJ CQl7CgkJCQkkcmVzdWx0ID0gImVycm9yIjsKCQkJCSRyZWNlaXZlZF9zcGYgPSAidW5hYmxl IHRvIGRldGVybWluZSBzZW5kZXIgaW5mbyI7CgkJCX0KCQl9CgoJCSMgd2UgaW1wbGljaXRl bHkgdHJ1c3QgdGhlIHJlY2VpdmVkIGxpbmUgc2V0ICJieSIgb3VyIG93biBzZXJ2ZXIgYXMg dmFsaWQgKGZpcnN0IHVudHJ1c3RlZCAiZnJvbSIpCgkJaWYgKCEkZWRnZV9pcCkgCgkJeyAK CQkJJGVkZ2VfaXAgPSAkbXRhaTsgCgkJCSRyY3ZkLT5bJHhdLT57J3NhbmUnfSA9IHNldF9y Y3ZkKCRoZWxvLCRpcGFkLCRpZG50LCRyZG5zLCRmcm9tLCRtdGFuLCRtdGFpLCRtdGF2LCRm b3JlLCR3aXRoLCRkYXRlLCRhc24sJHJlc3VsdCk7IAoJCQkkcmN2ZC0+WyR4XS0+eydzcGYn fSA9ICRyZWNlaXZlZF9zcGYgaWYgJG9wdGlvbnMgPX4gL3AvOwoJCX0KCgkJIyBub3cgd2Un bGwgdHJ5IHRvIGVzdGFibGlzaCB0aGUgdmFsaWRpdHkgb2YgZWFjaCByZWNlaXZlZCBsaW5l IGJ5IGNoZWNraW5nIAoJCSMgZm9yIGNvbnRpbnVpdHkgYW5kIHJlamVjdGluZyBsaW5lcyB0 aGF0IGRvbid0IGZpdCB0aGUgImZyb20vYnkiIGNoYWluCgkJZWxzZQoJCXsKCQkJI3ByaW50 ICIgYnkgIiAuICRtdGFuIC4gIiAvIHByZXYgZnJvbSAiIC4gJHJjdmQtPlskeC0xXS0+eydy ZG5zJ30gLiAiJENSTEYiOwoJCQkjcHJpbnQgIiBieSAiIC4gJG10YWkgLiAiIC8gcHJldiBm cm9tICIgLiAkcmN2ZC0+WyR4LTFdLT57J2lwYWQnfSAuICIkQ1JMRiI7CgkJCWlmICgKCQkJ CSgKCQkJCQkoJG10YW4gJiYgJHJjdmQtPlskeC0xXS0+eydyZG5zJ30gJiYgJG10YW4gPX4g LyRyY3ZkLT5bJHgtMV0tPnsncmRucyd9LykgfHwgCgkJCSAgICAgCQkoJG10YWkgJiYgJHJj dmQtPlskeC0xXS0+eydpcGFkJ30gJiYgJG10YWkgPX4gLyRyY3ZkLT5bJHgtMV0tPnsnaXBh ZCd9LykKCQkJCSkgJiYgCSghJHVudHJ1c3RlZCkKCQkJICAgKSAKCQkJICAgICB7IAoJCQkJ JHJjdmQtPlskeF0tPnsnc2FuZSd9ID0gc2V0X3JjdmQoJGhlbG8sJGlwYWQsJGlkbnQsJHJk bnMsJGZyb20sJG10YW4sJG10YWksJG10YXYsJGZvcmUsJHdpdGgsJGRhdGUsJGFzbiwkcmVz dWx0KTsgCgkJCQkkcmN2ZC0+WyR4XS0+eydzcGYnfSA9ICRyZWNlaXZlZF9zcGYgaWYgJG9w dGlvbnMgPX4gL3AvOwoJCQkgICAgIH0KCQkJZWxzZSAKCQkJeyAKCQkJCSRoZWxvID0gInVu dHJ1c3RlZC0iLiRoZWxvIGlmICRoZWxvOyAkaXBhZCA9ICJ1bnRydXN0ZWQtIi4kaXBhZCBp ZiAkaXBhZDsKCQkJCSRpZG50ID0gInVudHJ1c3RlZC0iLiRpZG50IGlmICRpZG50OyAkcmRu cyA9ICJ1bnRydXN0ZWQtIi4kcmRucyBpZiAkcmRuczsKCQkJCSRmcm9tID0gInVudHJ1c3Rl ZC0iLiRmcm9tIGlmICRmcm9tOyAkbXRhbiA9ICJ1bnRydXN0ZWQtIi4kbXRhbiBpZiAkbXRh bjsKCQkJCSRtdGFpID0gInVudHJ1c3RlZC0iLiRtdGFpIGlmICRtdGFpOyAkbXRhdiA9ICJ1 bnRydXN0ZWQtIi4kbXRhdiBpZiAkbXRhdjsKCQkJCSRmb3JlID0gInVudHJ1c3RlZC0iLiRm b3JlIGlmICRmb3JlOyAkd2l0aCA9ICJ1bnRydXN0ZWQtIi4kd2l0aCBpZiAkd2l0aDsKCQkJ CSRkYXRlID0gIiI7ICRhc24gPSAiIjsgJHJlc3VsdCA9ICIiOwoJCQkJJHJjdmQtPlskeF0t Pnsnc2FuZSd9ID0gc2V0X3JjdmQoJGhlbG8sJGlwYWQsJGlkbnQsJHJkbnMsJGZyb20sJG10 YW4sJG10YWksJG10YXYsJGZvcmUsJHdpdGgsJGRhdGUsJGFzbiwkcmVzdWx0KTsgCgkJCQkk dW50cnVzdGVkID0gMTsgCgkJCX0KCQl9Cgl9fQoJCglyZXR1cm4gJHJjdmQ7Cn0KCnN1YiBp c19zYW1lX2NsYXNzX0IKewoJbXkgKCRpcDEsJGlwMikgPSBAXzsKCSRpcDEgPX4gcy9eKFxk ezEsM31cLlxkezEsM31cLikuKj8kLyQxL2dpczsKCSRpcDIgPX4gcy9eKFxkezEsM31cLlxk ezEsM31cLikuKj8kLyQxL2dpczsKCQoJcmV0dXJuICgkaXAxIGVxICRpcDIpPyAxOjA7Cn0K CnN1YiBhc24KewoJbXkgJHRhcmdldCA9IHNoaWZ0OwoJbXkgJG91dHB1dCA9ICIiOwoKICAg ICAgICBteSAkSVAgICAgICAgICAgPSBxcn4oPzpcZHsxLDN9XC4pezN9XGR7MSwzfX47CiAg ICAgICAgbXkgJERPTUFJTiAgICAgID0gcXJ+KD86XHd8LXxcLikrP1wuXHd7Miw0fX47CgoJ aWYgKCAkdGFyZ2V0ID1+IHMvKFxkezEsM30pXC4oXGR7MSwzfSlcLihcZHsxLDN9KVwuKFxk ezEsM30pLyQ0LiQzLiQyLiQxLiRhc25fc2VydmVyLyApCgl7CgkJIyB1bmNvbW1lbnQgdGhp cyBjb2RlIGlmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgTmV0OjpETlM6OlJlc29sdmVyIGFu ZCB5b3UgaGF2ZSAnaG9zdCcgb24geW91ciBzeXN0ZW0KCQkjb3BlbiAoSE9TVCwgImhvc3Qg LXQgdHh0ICR0YXJnZXQgMj4vZGV2L251bGwgfCIpIG9yIGVycm9yKCJ3YXJuIiwiSG9zdCBs b29rdXAgZmFpbGVkOiAkISIpOwoJCSN3aGlsZSAoPEhPU1Q+KSB7ICRvdXRwdXQgPSAkMSBp ZiAvXFEkdGFyZ2V0XEUoPzogZGVzY3JpcHRpdmUpPyB0ZXh0ICIoXGQqPykiLiovOyB9CgkJ I2Nsb3NlIEhPU1Q7CgogICAgICAgICAgICAgICAgIyBmaW5kIEFTTiBpbmZvIHZpYSBOZXQ6 OkROUzo6UmVzb2x2ZXIKCSAgICAgICAgaWYgKG15ICRxdWVyeSA9ICRyZXMtPnNlbmQoJHRh cmdldCwiVFhUIikpIHsgZm9yZWFjaCAoJHF1ZXJ5LT5hbnN3ZXIpIHsgJG91dHB1dCA9ICQx IGlmICRfLT5zdHJpbmcgPX4gLyRET01BSU5cLlxzKz9cZCs/XHMrP0lOXHMrP1RYVFxzKz8i KFxkKz8pIlxzKz8iJElQIlxzKz8iXGQrPyIvOyB9fQogICAgICAgICAgICAgICAgI2Vsc2Ug eyBlcnJvcigid2FybiIsIkFTTiBsb29rdXAgZmFpbGVkOiAiIC4gJHJlcy0+ZXJyb3JzdHJp bmcpOyB9Cgl9IAoKCXJldHVybiAkb3V0cHV0Owp9CgpzdWIgaG9zdAp7CglteSAkdGFyZ2V0 ID0gc2hpZnQ7CglteSAkb3V0cHV0ID0gIiI7CgkKCW15ICRJUAkJPSBxcn4oPzpcZHsxLDN9 XC4pezN9XGR7MSwzfX47CQoJbXkgJERPTUFJTgk9IHFyfig/Olx3fC18XC4pKz9cLlx3ezIs NH1+OwoKCWlmICgkdGFyZ2V0ID1+IHMvKCRJUHwkRE9NQUlOKS8kMS8pCgl7CgkJIyB1bmNv bW1lbnQgdGhpcyBjb2RlIGlmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgTmV0OjpETlM6OlJl c29sdmVyIGFuZCB5b3UgaGF2ZSAnaG9zdCcgb24geW91ciBzeXN0ZW0KCQkjb3BlbiAoSE9T VCwgImhvc3QgJHRhcmdldCAyPi9kZXYvbnVsbCB8Iikgb3IgZXJyb3IoIndhcm4iLCJIb3N0 IGxvb2t1cCBmYWlsZWQ6ICQhIik7CgkJI3doaWxlICg8SE9TVD4pIHsgJG91dHB1dCA9ICQx IGlmIC8kRE9NQUlOICg/OmRvbWFpbiBuYW1lIHBvaW50ZXJ8aGFzIGFkZHJlc3MpICgkSVB8 JERPTUFJTilcLj8vOyB9CgkJI2Nsb3NlIEhPU1Q7CgoJCSMgZmluZCBETlMgaW5mbyB2aWEg TmV0OjpETlM6OlJlc29sdmVyCgkgICAgICAgIGlmIChteSAkcXVlcnkgPSAkcmVzLT5zZW5k KCR0YXJnZXQpKSB7IGZvcmVhY2ggKCRxdWVyeS0+YW5zd2VyKSB7ICRvdXRwdXQgPSAkMSBp ZiAkXy0+c3RyaW5nID1+IC8kRE9NQUlOXC5ccys/XGQrP1xzKz9JTlxzKz8oPzpQVFJ8QSlc cys/KCRJUHwkRE9NQUlOKVwuPy87IH19CiAgICAgICAgCSNlbHNlIHsgZXJyb3IoIndhcm4i LCJETlMgbG9va3VwIGZhaWxlZDogIiAuICRyZXMtPmVycm9yc3RyaW5nKTsgfQoJfQoJCgly ZXR1cm4gJG91dHB1dDsKfQoKc3ViIHNldF9yY3ZkCnsKCW15ICgkaGVsbywkaXBhZCwkaWRu dCwkcmRucywkZnJvbSwkbXRhbiwkbXRhaSwkbXRhdiwkZm9yZSwkd2l0aCwkZGF0ZSwkYXNu LCRzcGYpID0gQF87CgoJbXkgJG91dHB1dCA9ICJmcm9tIjsKCWlmICgkb3B0aW9ucyA9fiAv ZS8pIHsKCSRvdXRwdXQgLj0gKCRoZWxvKT8gCQkiIGhlbG8tJGhlbG8iIAk6ICIgbm8taGVs byI7fQkJIyBzZW5kZXIncyBzYWx1dGF0aW9uCgkkb3V0cHV0IC49ICgkcmRucyk/IAkJIiAk cmRucyIgCTogIiBuby1yZG5zIjsJCSMgc2VuZGVyJ3MgbmFtZQoJJG91dHB1dCAuPSAoJGlw YWQpPyAJCSIgJGlwYWQiIAk6ICIgbm8taXBhZCI7CQkjIHNlbmRlcidzIElQCiAgICAgICAg aWYgKCRvcHRpb25zID1+IC9wLykgewoJJG91dHB1dCAuPSAoJHNwZik/CQkiIHNwZi0kc3Bm Igk6ICIgbm8tc3BmIjt9CQkjIHNlbmRlcidzIHBvbGljeSByZXN1bHQKCSRvdXRwdXQgLj0g KCRhc24pPyAgCQkiIGFzJGFzbiIgCTogIiBuby1hc24iOwkJIyBzZW5kZXIncyBBU04KCSRv dXRwdXQgLj0gKCRtdGFufHwkbXRhaSk/IAkiICRDUkxGXHQgIGJ5Igk6ICIiOwoJJG91dHB1 dCAuPSAoJG10YW4pPyAJCSIgJG10YW4iIAk6ICIgbm8tbXRhLW5hbWUiOwkjIHJlY2Vpdmlu ZyBNVEEncyBuYW1lCgkkb3V0cHV0IC49ICgkbXRhaSk/IAkJIiAkbXRhaSIgCTogIiBuby1t dGEtaXAiOwkJIyByZWNlaXZpbmcgTVRBJ3MgSVAKCSRvdXRwdXQgLj0gKCRmb3JlKT8gCQki ICRDUkxGXHQgIGZvciIgOiAiIjsKCSRvdXRwdXQgLj0gKCRmb3JlKT8gCQkiIDwkZm9yZT4i IAk6ICIgbm8tdG8tYWRkciI7CSMgZW52ZWxvcGUgdG8gYWRkcmVzcwoJJG91dHB1dCAuPSAo JGRhdGUpPyAJCSI7ICRkYXRlIiAJOiAiIG5vLWRhdGUiOwkJIyByZWNlaXZlZCBkYXRlL3Rp bWUKCgkjcHJpbnQgIm91dHB1dHRpbmcgcmVjZWl2ZWQ6ICRvdXRwdXQiIC4gJENSTEY7Cgly ZXR1cm4gJG91dHB1dDsKfQoKc3ViIG9wZW5kYl9yZWFkIAp7CiAgICB0aWUoJWRiLCAiREJf RmlsZSIsICRkYmZpbGUsIE9fUkRPTkxZLCAwLCAkREJfSEFTSCkgb3IgZXJyb3IoIndhcm4i LCJDYW4ndCBvcGVuICRkYmZpbGU6ICQhIik7Cn0KCnN1YiBjbG9zZWRiIAp7CiAgICB1bnRp ZSAlZGI7CiAgICB1bmRlZiAlZGI7Cn0KCnN1YiByZXRpZSAKewogICAgJmNsb3NlZGI7CiAg ICAmb3BlbmRiX3JlYWQ7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIE91dHB1dCBIZWFkZXIgIyMjIyMjIyMj IyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCgpzdWIgc2V0X2hlYWRlcgp7CglteSAkaGVhZGVyID0gc2hpZnQ7CglteSAkb3V0cHV0 ID0gIiI7CglteSAkbmFtZSA9ICIiOwoJCgkjIGV4Y2x1ZGUgdGhlICJtYXNrZWQgZmllbGRz IiBmcm9tIGRpc3BsYXkKCWZvcmVhY2ggJG5hbWUgKHNwbGl0KC8sLywkbWFza2VkX2ZpZWxk cykpIHsgJHNwZWNfZmllbGRzID1+IHMvKD88PSwpJG5hbWUsPy8vOyB9CgoJIyBvdXRwdXQg dGhlIGZpZWxkcyBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IFJGQyAyODIyIC0gbWludXMg dGhlIG1hc2tlZCBmaWVsZHMKCWZvcmVhY2ggJG5hbWUgKHNwbGl0KC8sLywkc3BlY19maWVs ZHMpKSB7ICRvdXRwdXQgLj0gc2V0X2ZpZWxkKCRoZWFkZXIsJG5hbWUpOyBkZWxldGUgJGhl YWRlci0+eyRuYW1lfTsgfQoKCSMgc2V0IGFueSB1c2VyLXNwZWNpZmllZCBmaWVsZHMKCWZv cmVhY2ggJG5hbWUgKHNwbGl0KC8sLywkdXNlcl9maWVsZHMpKSB7ICRvdXRwdXQgLj0gc2V0 X2ZpZWxkKCRoZWFkZXIsJG5hbWUpOyBkZWxldGUgJGhlYWRlci0+eyRuYW1lfTsgfQoKCSMg c2V0IG5ldyBjdXN0b20geC1oZWFkZXIgZmllbGRzCglpZiAoJG9wdGlvbnMgPX4gL3gvKSB7 IGZvcmVhY2ggJG5hbWUgKHNwbGl0KC8sLywkbmV3X2ZpZWxkcykpIHsgJG91dHB1dCAuPSBz ZXRfZmllbGQoJGhlYWRlciwkbmFtZSk7IGRlbGV0ZSAkaGVhZGVyLT57JG5hbWV9OyB9IH0K CgkjIHRoZW4gc2V0IGFueSByZW1haW5pbmcgZmllbGRzIChpZiBhbGxvd2VkIHRvIHNldCBu b24tc3RhbmRhcmQgZmllbGRzKQoJaWYgKCRvcHRpb25zICF+IC9zLykgeyBmb3JlYWNoICRu YW1lIChrZXlzICV7JGhlYWRlcn0pIHsgJG91dHB1dCAuPSBzZXRfZmllbGQoJGhlYWRlciwk bmFtZSk7IH0gfQoKCSRvdXRwdXQgLj0gJENSTEY7CgkKCXJldHVybiAkb3V0cHV0Owp9Cgpz dWIgc2V0X2ZpZWxkCnsKCW15ICRoZWFkZXIgPSBzaGlmdDsKCW15ICRuYW1lID0gc2hpZnQ7 CglteSAkb3V0cHV0ID0gIiI7CgoJaWYgKChkZWZpbmVkICRoZWFkZXItPnskbmFtZX0pICYm IChyZWYoJGhlYWRlci0+eyRuYW1lfSkgZXEgIkFSUkFZIikpCgl7CgkJZm9yIChteSAkeCA9 IDA7ICR4IDwgc2NhbGFyIEB7JGhlYWRlci0+eyRuYW1lfX07ICR4KyspCgkJewoJCQlpZiAo KCRuYW1lIGVxICJyZWNlaXZlZCIpICYmICgkb3B0aW9ucyA9fiAvci8pKQoJCQl7CgkJCQlp ZiAoZGVmaW5lZCAkaGVhZGVyLT57JG5hbWV9LT5bJHhdLT57J3NhbmUnfSAmJiAkaGVhZGVy LT57JG5hbWV9LT5bJHhdLT57J3NhbmUnfSA9fiAvXHcvKSAKCQkJCXsJCgkJCQkJJG91dHB1 dCAuPSAkaGVhZGVyLT57JG5hbWV9LT5bJHhdLT57J25hbWUnfSAuICI6ICIgLiAkaGVhZGVy LT57JG5hbWV9LT5bJHhdLT57J3NhbmUnfSAuICRDUkxGOyAKCQkJCX0KCQkJCSNlbHNlIHsJ JG91dHB1dCAuPSAkaGVhZGVyLT57JG5hbWV9LT5bJHhdLT57J25hbWUnfSAuICI6IHNhbml0 eSBjaGVjayBmYWlsZWQiIC4gJENSTEY7IH0KCQkJfQoJCQllbHNlIHsKCQkJCSRvdXRwdXQg Lj0gJGhlYWRlci0+eyRuYW1lfS0+WyR4XS0+eyduYW1lJ30gLiAiOiAiIC4gJGhlYWRlci0+ eyRuYW1lfS0+WyR4XS0+eyd2YWx1ZSd9IC4gJENSTEY7IAoJCQl9CgkJfQoJfQoJZWxzaWYg KGRlZmluZWQgJGhlYWRlci0+eyRuYW1lfSkKCXsKCQkkb3V0cHV0IC49IHVjZmlyc3QoJG5h bWUpIC4gIjogIiAuICRoZWFkZXItPnskbmFtZX0gLiAkQ1JMRjsgCQoJfQoJZWxzaWYgKCRy ZXFfZmllbGRzID1+IC8oPzpefCwpJG5hbWUoPzosfCQpLykKCXsgIAoJCSRvdXRwdXQgLj0g dWNmaXJzdCgkbmFtZSkgLiAiOiBbbm8tJG5hbWVdICIgLiAkQ1JMRjsgCgl9CgkKCXJldHVy biAkb3V0cHV0Owp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyBFcnJvciBIYW5kbGluZyAjIyMjIyMjIyMjIyMj IyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoK c3ViIGVycm9yCnsKCW15ICgkYWN0aW9uLCRtc2cpID0gQF87CgoJZGllICRtc2cgaWYgJGFj dGlvbiBlcSAiZGllIjsKCXdhcm4gJG1zZyB1bmxlc3MgJGFjdGlvbiBlcSAiZGllIjsKCSMg YWRkIG90aGVyIGFjdGlvbnMgaWYgeW91IGxpa2UKfQoKc3ViIHNpZ190cmFwCnsKCW15ICRz aWcgPSBzaGlmdDsKCW15ICgkYWN0aW9uLCRtb3JlKSA9ICgid2FybiIsIiIpOwoKCXNpZzog Cgl7CiAgICAgICAgCSRhY3Rpb24gPSAiZGllIiwgIGxhc3Qgc2lnIGlmICRzaWcgPX4gL0FM Uk0vOwoJICAgICAgICAkYWN0aW9uID0gIndhcm4iLCBsYXN0IHNpZyBpZiAkc2lnID1+IC9Q SVBFLzsKCSAgICAgICAgJGFjdGlvbiA9ICJ3YXJuIiwgbGFzdCBzaWcgaWYgJHNpZyA9fiAv Q0hMRC87CiAgICAgICAgCSRhY3Rpb24gPSAiZGllIiAsIGxhc3Qgc2lnIGlmICRzaWcgPX4g L0lOVC87CgkgICAgICAgICRhY3Rpb24gPSAiZGllIiAsIGxhc3Qgc2lnIGlmICRzaWcgPX4g L0hVUC87CiAgICAgICAgCSRhY3Rpb24gPSAid2FybiI7Cgl9CgkKCW15ICR3YWl0ZWRwaWQg PSB3YWl0OwoJJG1vcmUgPSAiOyBSZWFwZWQgcGlkICR3YWl0ZWRwaWQsIGV4aXRlZCB3aXRo IHN0YXR1cyAiIC4gKCQ/ID4+IDgpIGlmICR3YWl0ZWRwaWQ7CgoJJFNJR3skc2lnfSA9IFwm c2lnX3RyYXA7CgoJZXJyb3IgKCRhY3Rpb24sIlRyYXBwZWQgc2lnbmFsIFNJRyRzaWckbW9y ZSIpOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo= --------------8C6E894DEEE6226004BF8962 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 --------------8C6E894DEEE6226004BF8962--