From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: [PATCH 8/9] docs: Provide parse-support-md Date: Wed, 11 Apr 2018 16:35:38 +0100 Message-ID: <1523460939-15013-9-git-send-email-ian.jackson@eu.citrix.com> References: <1523460939-15013-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1f6HnA-0001se-5P for xen-devel@lists.xenproject.org; Wed, 11 Apr 2018 15:36:12 +0000 In-Reply-To: <1523460939-15013-1-git-send-email-ian.jackson@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Lars Kurth , Ian Jackson , Wei Liu , George Dunlap List-Id: xen-devel@lists.xenproject.org VGhpcyB1dGlsaXR5IHJlYWRzIGpzb24gZm9ybWF0IHBhbmRvYyBvdXRwdXQsIGZyb20gcGFyc2lu ZyBvbmUgb3IgbW9yZQpTVVBQT1JULm1kIGZpbGVzLCBhbmQgZ2VuZXJhdGVzIGFuIEhUTUwgdGFi bGUgZWxlbWVudCBjb250YWluaW5nIHRoZQpwcmluY2lwYWwgdmVyc2lvbiBhbmQgZmVhdHVyZSBp bmZvcm1hdGlvbi4KClRoaXMgaXMgcmF0aGVyIGhhaXJpZXIgdGhhbiBJIGFudGljaXBhdGVkIHdo ZW4gSSBzdGFydGVkIG91dDsgaGVuY2UKdGhlIDQwMC1vZGQtbGluZSBQZXJsIHNjcmlwdC4KCk1h Y2hpbmVyeSB0byBhc3NlbWJsZSB0aGUgYXBwcm9wcmlhdGUgaW5wdXRzIGZvciBwYXJzZS1zdXBw b3J0LW1kCndpbGwgYmUgaW4gdGhlIG5leHQgY29tbWl0LgoKU2lnbmVkLW9mZi1ieTogSWFuIEph Y2tzb24gPElhbi5KYWNrc29uQGV1LmNpdHJpeC5jb20+Ci0tLQp2MjogTmV3IGluIHRoaXMgdmVy c2lvbiBvZiB0aGUgc2VyaWVzLgotLS0KIGRvY3MvcGFyc2Utc3VwcG9ydC1tZCB8IDQxMCArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNo YW5nZWQsIDQxMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA3NTUgZG9jcy9wYXJzZS1z dXBwb3J0LW1kCgpkaWZmIC0tZ2l0IGEvZG9jcy9wYXJzZS1zdXBwb3J0LW1kIGIvZG9jcy9wYXJz ZS1zdXBwb3J0LW1kCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4ODI3MDUK LS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3BhcnNlLXN1cHBvcnQtbWQKQEAgLTAsMCArMSw0MTAg QEAKKyMhL3Vzci9iaW4vcGVybCAtdworIworIyBXcml0dGVuIHdpdGggcmVmZXJlbmNlIHRvIHBh bmRvY19tYXJrZG93biBmcm9tIERlYmlhbiBqZXNzaWUKKyMgV2UgcmVxdWlyZSBhdHgtc3R5bGUg aGVhZGVycworIworIyB1c2FnZToKKyMgICBwYW5kb2MgLXQganNvbiBTVVBQT1JULm1kID5qLXVu c3RhYmxlCisjICAgZ2l0LWNhdC1maWxlIC4uLiB8IHBhbmRvYyAtdCBqc29uID5qLTQuMTAKKyMg ICBkb2NzL3BhcnNlLXN1cHBvcnQtbWQgXAorIyAgICAgICAgICAgIGotdW5zdGFibGUgaHR0cHM6 Ly94ZW5iaXRzL3Vuc3RhYmxlL1NVUFBPUlQuaHRtbAorIyAgICAgICAgICAgIGotNC4xMCBodHRw czovL3hlbmJpdHMvNC4xMC9TVVBQT1JULmh0bWwKKyMgb3IgZXF1aXZhbGVudAorCit1c2Ugc3Ry aWN0OwordXNlIEpTT047Cit1c2UgVGllOjpJeEhhc2g7Cit1c2UgSU86OkZpbGU7Cit1c2UgQ0dJ IHF3KGVzY2FwZUhUTUwpOwordXNlIERhdGE6OkR1bXBlcjsKKworIy0tLS0tLS0tLS0gYWNjdW11 bGF0aW5nIGlucHV0L291dHB1dCAtLS0tLS0tLS0tCisKKyMgVGhpcyBjb21iaW5lcyBpbmZvcm1h dGlvbiBmcm9tIGFsbCBvZiB0aGUgaW5wdXQgZmlsZXMuCisKK3N1YiBuZXdfc2VjdGxpc3QgKCkg eyB7IH0gfTsKK291ciAkdG9wbGV2ZWxfc2VjdGxpc3QgPSBuZXdfc2VjdGxpc3QoKTsKKyMgYW4g JHNlY3RsaXN0IGlzCisjICAgeyB9ICAgICAgICAgICAgICAgICBub3RoaW5nIHNlZW4geWV0Cisj ICAgYSB0aWVkIGhhc2hyZWYgICAgICBzb21ldGhpbmcgc2VlbgorIyAodGllZCAkc2VjdGxpc3Qp ICAgIGlzIGFuIG9iamVjdCBvZiB0eXBlIFRpZTo6SXhIYXNoCisjICRzZWN0bGlzdC0+e0tFWX0g YSAkc2VjdG5vZGU6CisjICRzZWN0bGlzdC0+e0tFWX17U3RhdHVzfVtWSV0gPSBhYnNlbnQgb3Ig bWFya2Rvd24gY29udGVudAorIyAkc2VjdGxpc3QtPntLRVl9e0hhc1RleHR9W1ZJXSA9IHRydWVp c2ggaWZmIHRoZXJlIHdhcyBhIFBhcmEKKyMgJHNlY3RsaXN0LT57S0VZfXtDaGlsZHJlbn0gPSBh IGZ1cnRoZXIgJHNlY3RsaXN0CisjICRzZWN0bGlzdC0+e0tFWX17S2V5fSA9IEtFWQorIyAkc2Vj dGxpc3QtPntLRVl9e0FuY2hvcn0gPSB2YWx1ZSBmb3IgPCBpZD0iIiA+IGluIHRoZSBwYW5kb2Mg aHRtbAorIworIyBBICRzZWN0bm9kZSByZXByZXNlbnRzIGEgc2luZ2xlIHNlY3Rpb24gZnJvbSB0 aGUgb3JpZ2luYWwgbWFya2Rvd24KKyMgZG9jdW1lbnQuICBJdHMgc3Vic2VjdGlvbnMgYXJlIGlu IENoaWxkcmVuLgorIworIyBBbHNvLCB0aGUgaW5wdXQgc3ludGF4OgorIyAgICBTdGF0dXMsIHNv bWV0aGluZyBvciBvdGhlcjogU3VwcG9ydGVkCisjIGlzIHRyZWF0ZWQgYXMgYSAkc2VjdG5vZGUs IGlzIGFzIGlmIGl0IHdlcmUgYSBzdWJzZWN0aW9uIC0KKyMgb25lIGNhbGxlZCBgc29tZXRoaW5n IG9yIG90aGVyJy4KKyMKKyMgS0VZIGlzIHRoZSBBbmNob3IsIG9yIGRlcml2ZWQgZnJvbSB0aGUg YHNvbWV0aGluZyBvciBvdGhlcicuCisjIEl0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgaWRlbnRpY2Fs IGZlYXR1cmVzIGluIGRpZmZlcmVudCB2ZXJzaW9ucy4KKworIy0tLS0tLS0tLS0gc3RhdGUgZm9y IHRoaXMgaW5wdXQgZmlsZSAtLS0tLS0tLS0tCisKK291ciAkdmVyc2lvbl9pbmRleDsKK291ciBA dmVyc2lvbl91cmxzOworCitvdXIgQGluc2VjdGlvbnM7CisjICRpbnNlY3Rpb25zW117S2V5fSA9 IHN0cmluZworIyAkaW5zZWN0aW9uc1tde0FuY2hvcn0gPSBzdHJpbmcgb3IgdW5kZWYKKyMgJGlu c2VjdGlvbnNbXXtIZWFkbGluZX0gPSBtYXJrZG93biBjb250ZW50CisKK291ciAkaGFkX3Vua25v d247CitvdXIgJGN1cnJlbnRfc2VjdG5vZGU7CisjIGFkZGluZyBuZXcgdmFyaWFibGUgPyAgaXQg bXVzdCBiZSByZXNldCBpbiByX3RvcGxldmVsCisKKyMtLS0tLS0tLS0tIHBhcnNpbmcgLS0tLS0t LS0tLQorCitzdWIgcmlfSGVhZGVyIHsKKyAgICBteSAoJGMpID0gQF87CisgICAgbXkgKCRsZXZl bCwgJGluZm9zLCAkaGwpID0gQCRjOworI3ByaW50IFNUREVSUiAnUklfSEVBREVSICcsIER1bXBl cigkYywgXEBjKTsKKyAgICBteSAoJGlkKSA9IEAkaW5mb3M7CisgICAgZGllIHVubGVzcyAkbGV2 ZWwgPj0gMTsKKyAgICBkaWUgdW5sZXNzICRsZXZlbC0yIDw9ICQjaW5zZWN0aW9uczsKKyAgICAk I2luc2VjdGlvbnMgPSAkbGV2ZWwtMjsKKyAgICBwdXNoIEBpbnNlY3Rpb25zLAorICAgICAgICB7 CisgICAgICAgICBLZXkgPT4gJGlkLAorICAgICAgICAgQW5jaG9yID0+ICRpZCwKKyAgICAgICAg IEhlYWRsaW5lID0+ICRobCwKKyAgICAgICAgfTsKKyNwcmludCBTVERFUlIgRHVtcGVyKFxAaW5z ZWN0aW9ucyk7CisgICAgJGN1cnJlbnRfc2VjdG5vZGUgPSB1bmRlZjsKK30KKworc3ViIHJpX1Bh cmEgeworICAgIGlmICgkY3VycmVudF9zZWN0bm9kZSkgeworICAgICAgICAkY3VycmVudF9zZWN0 bm9kZS0+e0hhc1RleHR9WyR2ZXJzaW9uX2luZGV4XSA9IDE7CisgICAgfQorfTsKKworc3ViIHBh cnNlX2ZlYXR1cmVfZW50cnkgKCQpIHsKKyAgICBteSAoJHZhbHVlKSA9IEBfOworICAgIGRpZSB1 bmxlc3MgQGluc2VjdGlvbnM7CisKKyAgICBteSAkc2VjdG5vZGU7CisgICAgbXkgJGFuY2hvciA9 ICcnOworICAgIGZvcmVhY2ggbXkgJHMgKEBpbnNlY3Rpb25zKSB7CisgICAgICAgIG15ICRzZWN0 bGlzdCA9ICRzZWN0bm9kZQorICAgICAgICAgICAgPyAkc2VjdG5vZGUtPntDaGlsZHJlbn0gOiAk dG9wbGV2ZWxfc2VjdGxpc3Q7CisgICAgICAgIG15ICRrZXkgPSAkcy0+e0tleX07CisgICAgICAg ICRhbmNob3IgPSAkcy0+e0FuY2hvcn0gaWYgJHMtPntBbmNob3J9OworICAgICAgICB0aWUgJSRz ZWN0bGlzdCwgJ1RpZTo6SXhIYXNoJyB1bmxlc3MgdGllZCAlJHNlY3RsaXN0OworI3ByaW50IFNU REVSUiAiUEFSU0VfRkVBVFVSRV9FTlRSWSAiLCBEdW1wZXIoJHMpOworICAgICAgICAkc2VjdGxp c3QtPnska2V5fSAvLz0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICBDaGlsZHJlbiA9PiBu ZXdfc2VjdGxpc3QoKSwKKyAgICAgICAgICAgICBIZWFkbGluZSA9PiAkcy0+e0hlYWRsaW5lfSwK KyAgICAgICAgICAgICBLZXkgPT4gJGtleSwKKyAgICAgICAgICAgICBBbmNob3IgPT4gJGFuY2hv ciwKKyAgICAgICAgICAgIH07CisgICAgICAgICRzZWN0bm9kZSA9ICRzZWN0bGlzdC0+eyRrZXl9 OworICAgIH0KKyAgICBkaWUgdW5sZXNzICRzZWN0bm9kZTsKKyAgICAkc2VjdG5vZGUtPntTdGF0 dXN9WyR2ZXJzaW9uX2luZGV4XSA9ICR2YWx1ZTsKKyAgICAkY3VycmVudF9zZWN0bm9kZSA9ICRz ZWN0bm9kZTsKK30KKworc3ViIHJpX0NvZGVCbG9jayB7CisgICAgbXkgKCRjKSA9IEBfOworICAg IG15ICgkaW5mb3MsICR0ZXh0KSA9IEAkYzsKKworICAgIGlmICgkdGV4dCA9fiBte14oPzogRnVu Y3Rpb25hbFwgY29tcGxldGVuZXNzIAorICAgICAgICAgICAgICAgICAgIHwgRnVuY3Rpb25hbFwg c3RhYmlsaXR5CisgICAgICAgICAgICAgICAgICAgfCBJbnRlcmZhY2VcIHN0YWJpbGl0eQorICAg ICAgICAgICAgICAgICAgIHwgU2VjdXJpdHlcIHN1cHBvcnRlZCApIFw6fXgpIHsKKyAgICAgICAg IyBpZ25vcmUgdGhpcworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRpZSAiJGhhZF91bmtu b3duIC8gJHRleHQgPyIgaWYgJGhhZF91bmtub3duOworCisgICAgbXkgJHRvcGxldmVsID0gJHRl eHQgPX4gbXteWGVuLVZlcnNpb246fTsKKworICAgIGZvcmVhY2ggbXkgJGwgKHNwbGl0IC9cbi8s ICR0ZXh0KSB7CisgICAgICAgICRsID1+IHMvXHMqJC8vOworICAgICAgICBuZXh0IHVubGVzcyAk bCA9fiBtL1xTLzsKKworICAgICAgICBteSAoJGRlc2NyLCAkdmFsdWUpID0KKyAgICAgICAgICAg ICR0b3BsZXZlbAorICAgICAgICAgICAgPyAkbCA9fiBte14oW0EtWl1bLUEtWjAtOWEtel0rKVw6 XHMrKFxTLiopJH0KKyAgICAgICAgICAgIDogJGwgPX4gbXteKD86U3RhdHVzfFN1cHBvcnRlZCko PzpcLFxzKihbXjpdKykpP1w6XHMrKFxTLiopJH0KKyAgICAgICAgICAgIG9yIGRpZSAoIiR0ZXh0 XG5eIGNhbm5vdCBwYXJzZSBzdGF0dXMgY29kZWJsb2NrIGxpbmU6Ii4KKyAgICAgICAgICAgICAg ICAgICAgKCR0b3BsZXZlbCBhbmQgJ3RvcCcpLgorICAgICAgICAgICAgICAgICAgICAiXG4kbFxu ID8iKTsKKyAgICAgICAgaWYgKGxlbmd0aCAkZGVzY3IpIHsKKyAgICAgICAgICAgIGRpZSB1bmxl c3MgQGluc2VjdGlvbnM7CisgICAgICAgICAgICBteSAka2V5ID0gbGMgJGRlc2NyOworICAgICAg ICAgICAgJGtleSA9fiB5LyAvLS87CisgICAgICAgICAgICAka2V5ID1+IHkvLTAtOUEtWmEtei8v Y2Q7CisgICAgICAgICAgICAka2V5ID0gJGluc2VjdGlvbnNbJCNpbnNlY3Rpb25zXXtBbmNob3J9 LictLScuJGtleTsKKyAgICAgICAgICAgIHB1c2ggQGluc2VjdGlvbnMsCisgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICBLZXkgPT4gJGtleSwKKyAgICAgICAgICAgICAgICAgSGVh ZGxpbmUgPT4gW3sgdCA9PiAnU3RyJywgYyA9PiAkZGVzY3IgfV0sCisgICAgICAgICAgICAgICAg fTsKKyAgICAgICAgfQorICAgICAgICBwYXJzZV9mZWF0dXJlX2VudHJ5ICR2YWx1ZTsKKyAgICAg ICAgaWYgKGxlbmd0aCAkZGVzY3IpIHsKKyAgICAgICAgICAgIHBvcCBAaW5zZWN0aW9uczsKKyAg ICAgICAgfQorICAgIH0KK30KKworc3ViIHByb2Nlc3NfdW5rbm93biB7CisgICAgbXkgKCRjLCAk ZSkgPSBAXzsKKyAgICAkaGFkX3Vua25vd24gPSBEdW1wZXIoJGUpOworfQorCitzdWIgcl9jb250 ZW50ICgkKSB7CisgICAgbXkgKCRpKSA9IEBfOworICAgIGZvcmVhY2ggbXkgJGUgKEAkaSkgewor ICAgICAgICBteSAkZiA9ICR7Kjo6fXsicmlfJGUtPnt0fSJ9OworICAgICAgICAkZiAvLz0gXCZw cm9jZXNzX3Vua25vd247CisgICAgICAgICRmLT4oJGUtPntjfSwgJGUpOworICAgIH0KK30KKwor c3ViIHJfdG9wbGV2ZWwgKCQpIHsKKyAgICBteSAoJGkpID0gQF87CisKKyAgICBkaWUgdW5sZXNz IGRlZmluZWQgJHZlcnNpb25faW5kZXg7CisKKyAgICBAaW5zZWN0aW9ucyA9ICgpOworICAgICRo YWRfdW5rbm93biA9IHVuZGVmOworICAgICRjdXJyZW50X3NlY3Rub2RlID0gdW5kZWY7CisKKyAg ICBmb3JlYWNoIG15ICRlIChAJGkpIHsKKyAgICAgICAgbmV4dCB1bmxlc3MgcmVmICRlIGVxICdB UlJBWSc7CisgICAgICAgIHJfY29udGVudCAkZTsKKyAgICB9Cit9CisKK3N1YiByZWFkX2lucHV0 cyAoKSB7CisgICAgJHZlcnNpb25faW5kZXggPSAwOworCisgICAgbG9jYWwgJC87CisgICAgdW5k ZWYgJC87CisKKyAgICB3aGlsZSAobXkgJGYgPSBzaGlmdCBAQVJHVikgeworICAgICAgICBwdXNo IEB2ZXJzaW9uX3VybHMsIHNoaWZ0IEBBUkdWOworICAgICAgICBldmFsIHsKKyAgICAgICAgICAg IG9wZW4gRiwgJzwnLCAkZiBvciBkaWUgJCE7CisgICAgICAgICAgICBteSAkaW5wdXRfdG9wbGV2 ZWwgPSBkZWNvZGVfanNvbiA8Rj47CisgICAgICAgICAgICByX3RvcGxldmVsICRpbnB1dF90b3Bs ZXZlbDsKKyAgICAgICAgfTsKKyAgICAgICAgZGllICIkQFxud2hpbGUgcHJvY2Vzc2luZyBpbnB1 dCBmaWxlICRmXG4iIGlmICRAOworICAgICAgICAkdmVyc2lvbl9pbmRleCsrOworICAgIH0KK30K KworIy0tLS0tLS0tLS0gcmVwcm9jZXNzaW5nIC0tLS0tLS0tLS0KKworIyB2YXJpYWJsZXMgZ2Vu ZXJhdGVkIGJ5IGFuYWx5c2VfcmVwcm9jZXNzOgorb3VyICRtYXhkZXB0aDsKKworc3ViIHBhbmRv YzJodG1sX2lubGluZSAoJCkgeworICAgIG15ICgkY29udGVudCkgPSBAXzsKKworICAgIG15ICRq c29uX2ZoID0gSU86OkZpbGU6Om5ld190bXBmaWxlIG9yIGRpZSAkITsKKyAgICBwcmludCAkanNv bl9maCB0b19qc29uKFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHVuTWV0YSA9PiB7 IH0gfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyB0ID0+ICdQYXJhJywgYyA9PiAk Y29udGVudCB9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIG9yIGRpZSAkITsKKyAg ICBmbHVzaCAkanNvbl9maCBvciBkaWUgJCE7CisgICAgc2VlayAkanNvbl9maCwwLDAgb3IgZGll ICQhOworCisgICAgbXkgJGMgPSBvcGVuIFBELCAiLXwiIC8vIGRpZSAkITsKKyAgICBpZiAoISRj KSB7CisgICAgICAgIG9wZW4gU1RESU4sICI8JiIsICRqc29uX2ZoOworICAgICAgICBleGVjIHF3 KHBhbmRvYyAtZiBqc29uKSBvciBkaWUgJCE7CisgICAgfQorCisgICAgbG9jYWwgJC87CisgICAg dW5kZWYgJC87CisgICAgbXkgJGh0bWwgPSA8UEQ+OworICAgICQ/PSQhPTA7CisgICAgaWYgKCFj bG9zZSBQRCkgeworICAgICAgICBldmFsIHsKKyAgICAgICAgICAgIHNlZWsgJGpzb25fZmgsMCww IG9yIGRpZSAkITsKKyAgICAgICAgICAgIG9wZW4gU1RESU4sICc8JicsICRqc29uX2ZoIG9yIGRp ZSAkITsKKyAgICAgICAgICAgIHN5c3RlbSAnanNvbl9wcCc7CisgICAgICAgIH07CisgICAgICAg IGRpZSAiXG4gJD8gJCEiOworICAgIH0KKworICAgICRodG1sID1+IHN7Xlw8cFw+fXt9IG9yIGRp ZSAiJGh0bWwgPyI7CisgICAgJGh0bWwgPX4gc3tcPC9wXD4kfXt9IG9yIGRpZSAiJGh0bWwgPyI7 CisgICAgJGh0bWwgPX4gc3tcbiR9e307CisgICAgcmV0dXJuICRodG1sOworfQorCitzdWIgcmVw cm9jZXNzX3NlY3RsaXN0ICgkJCk7CisKK3N1YiByZXByb2Nlc3Nfc2VjdG5vZGUgKCQkKSB7Cisg ICAgbXkgKCRzZWN0bm9kZSwgJGQpID0gQF87CisKKyAgICAkc2VjdG5vZGUtPntEZXB0aH0gPSAk ZDsKKworICAgIGlmICgkc2VjdG5vZGUtPntTdGF0dXN9KSB7CisgICAgICAgICRtYXhkZXB0aCA9 ICRkIGlmICRkID4gJG1heGRlcHRoOworICAgIH0KKworICAgIGlmICgkc2VjdG5vZGUtPntIZWFk bGluZX0pIHsKKyMgICAgICAgICAgICBwcmludCBTVERFUlIgRHVtcGVyKCRzZWN0bm9kZSk7Cisg ICAgICAgICRzZWN0bm9kZS0+e0hlYWRsaW5lfSA9CisgICAgICAgICAgICBwYW5kb2MyaHRtbF9p bmxpbmUgJHNlY3Rub2RlLT57SGVhZGxpbmV9OworICAgIH0KKworICAgIHJlcHJvY2Vzc19zZWN0 bGlzdCAkc2VjdG5vZGUtPntDaGlsZHJlbn0sICRkOworfQorCitzdWIgcmVwcm9jZXNzX3NlY3Rs aXN0ICgkJCkgeworICAgIG15ICgkc2VjdGxpc3QsICRkKSA9IEBfOworICAgICRkKys7CisKKyAg ICBmb3JlYWNoIG15ICRzZWN0bm9kZSAodmFsdWVzICUkc2VjdGxpc3QpIHsKKyAgICAgICAgcmVw cm9jZXNzX3NlY3Rub2RlICRzZWN0bm9kZSwgJGQ7CisgICAgfQorfQorCitzdWIgY291bnRfcm93 c19zZWN0bGlzdCAoJCk7CisKK3N1YiBjb3VudF9yb3dzX3NlY3Rub2RlICgkKSB7CisgICAgbXkg KCRzZWN0bm9kZSkgPSBAXzsKKyAgICBteSAkcm93cyA9IDA7CisgICAgJHJvd3MrKyBpZiAkc2Vj dG5vZGUtPntTdGF0dXN9OworICAgICRyb3dzICs9IGNvdW50X3Jvd3Nfc2VjdGxpc3QgJHNlY3Ru b2RlLT57Q2hpbGRyZW59OworICAgICRzZWN0bm9kZS0+e1Jvd3N9ID0gJHJvd3M7CisgICAgcmV0 dXJuICRyb3dzOworfQorCitzdWIgY291bnRfcm93c19zZWN0bGlzdCAoJCkgeworICAgIG15ICgk c2VjdGxpc3QpID0gQF87CisgICAgbXkgJHJvd3MgPSAwOworICAgIGZvcmVhY2ggbXkgJHNlY3Ru b2RlICh2YWx1ZXMgJSRzZWN0bGlzdCkgeworICAgICAgICAkcm93cyArPSBjb3VudF9yb3dzX3Nl Y3Rub2RlICRzZWN0bm9kZTsKKyAgICB9CisgICAgcmV0dXJuICRyb3dzOworfQorCisjIEFmdGVy IHJlcHJvY2Vzc19zZWN0bGlzdCwKKyMgICAgLT57SGVhZGxpbmV9ICAgaXMgaW4gaHRtbAorIyAg ICAtPntTdGF0dXN9ICAgICBpcyBpbiBwbGFpbiB0ZXh0CisKK3N1YiBhbmFseXNlX3JlcHJvY2Vz cyAoKSB7CisgICAgJG1heGRlcHRoID0gMDsKKyAgICByZXByb2Nlc3Nfc2VjdGxpc3QgJHRvcGxl dmVsX3NlY3RsaXN0LCAwOworfQorCisjLS0tLS0tLS0tLSBvdXRwdXQgLS0tLS0tLS0tLQorCitz dWIgbyB7IHByaW50IEBfIG9yIGRpZSAkITsgfQorCitvdXIgQHBlbmRpbmdfaGVhZGluZ3M7CisK K3N1YiB3cml0ZV9vdXRwdXRfcm93ICgkKSB7CisgICAgbXkgKCRzZWN0bm9kZSkgPSBAXzsKKyMg ICAgcHJpbnQgU1RERVJSICdXT1IgJywgRHVtcGVyKCRkLCAkc2VjdG5vZGUpOworICAgIG8oJzx0 cj4nKTsKKyAgICBteSAkc3BhbiA9IHN1YiB7CisgICAgICAgIG15ICgkcm93Y29sLCAkbikgPSBA XzsKKyAgICAgICAgbyhzcHJpbnRmICcgJXNzcGFuPSIlZCInLCAkcm93Y29sLCAkbikgaWYgJG4g IT0gMTsKKyAgICB9OworICAgICMgVGhpcyBpcyBhbGwgYSBiaXQgdHJpY2t5IGJlY2F1c2UgKGkp IHRoZSBpbnB1dCBpcyBoaWVyYXJjaGljYWwKKyAgICAjIHdpdGggdmFyaWFibGUgZGVwdGgsIHdo ZXJlYXMgdGhlIG91dHB1dCBoYXMgdG8gaGF2ZSBhIGZpeGVkCisgICAgIyBudW1iZXIgb2YgaGVh ZGluZyBjb2x1bW5zIG9uIHRoZSBMSFM7IChpaSkgdGhlIEhUTUwKKyAgICAjIGNvbHNwYW4vcm93 c3BhbiBzeXN0ZW0gbWVhbnMgdGhhdCB3aGVuIHdlIGFyZSB3cml0aW5nIG91dCwgd2UKKyAgICAj IGhhdmUgdG8gbm90IHdyaXRlIHRhYmxlIGVsZW1lbnRzIGZvciB0YWJsZSBlbnRyaWVzIHdoaWNo IGhhdmUKKyAgICAjIGFscmVhZHkgYmVlbiB3cml0dGVuIHdpdGggYSBzcGFuIGluc3RydWN0aW9u IHRoYXQgY292ZXJzIHdoYXQgd2UKKyAgICAjIHdvdWxkIHdyaXRlIG5vdy4KKyAgICB3aGlsZSAo bXkgJGhlYWRpbmcgPSBzaGlmdCBAcGVuZGluZ19oZWFkaW5ncykgeworICAgICAgICBvKCc8dGgg dmFsaWduPSJ0b3AiJyk7CisgICAgICAgIG8oc3ByaW50ZiAnIGlkPSIlcyInLCAkaGVhZGluZy0+ e0tleX0pOworICAgICAgICAkc3Bhbi0+KCdyb3cnLCAkaGVhZGluZy0+e1Jvd3N9KTsKKyAgICAg ICAgJHNwYW4tPignY29sJywgJG1heGRlcHRoIC0gJGhlYWRpbmctPntEZXB0aH0gKyAxKQorICAg ICAgICAgICAgaWYgISV7ICRoZWFkaW5nLT57Q2hpbGRyZW59IH07CisgICAgICAgIG8oJyBhbGln bj0ibGVmdCI+Jyk7CisgICAgICAgIG8oJGhlYWRpbmctPntIZWFkbGluZX0pOworICAgICAgICBv KCc8L3RoPicpOworICAgIH0KKyAgICBpZiAoJXsgJHNlY3Rub2RlLT57Q2hpbGRyZW59IH0pIHsK KyAgICAgICAgIyB3ZSBzdXBwcmVzc2VkIHRoZSBjb2xzcGFuIGFib3ZlLCBidXQgd2UgZG8gbmVl ZCB0byBtYWtlIHRoZSBnYXAKKyAgICAgICAgbXkgJG4gPSAkbWF4ZGVwdGggLSAkc2VjdG5vZGUt PntEZXB0aH07CisgICAgICAgIGRpZSAnWFggJy4gRHVtcGVyKCRuLCAkc2VjdG5vZGUpIGlmICRu PDA7CisgICAgICAgIGlmICgkbikgeworICAgICAgICAgICAgbygnPHRkJyk7CisgICAgICAgICAg ICAkc3Bhbi0+KCdjb2wnLCAkbik7CisgICAgICAgICAgICBvKCc+PC90ZD4nKTsKKyAgICAgICAg fQorICAgIH0KKyAgICBmb3IgKG15ICRpPTA7ICRpPEB2ZXJzaW9uX3VybHM7ICRpKyspIHsKKyAg ICAgICAgbXkgJHN0ID0gJHNlY3Rub2RlLT57U3RhdHVzfVskaV07CisgICAgICAgICRzdCAvLz0g Jy0nOworICAgICAgICBvKCc8dGQ+Jyk7CisgICAgICAgIG15ICRlbmRfYSA9ICcnOworICAgICAg ICBpZiAoJHNlY3Rub2RlLT57S2V5fSBlcSAncmVsZWFzZS1zdXBwb3J0LS14ZW4tdmVyc2lvbicp IHsKKyAgICAgICAgICAgIG8oc3ByaW50ZiAnPGEgaHJlZj0iJXMiPicsICR2ZXJzaW9uX3VybHNb JGldKTsKKyAgICAgICAgICAgICRlbmRfYSA9ICc8L2E+JzsKKyAgICAgICAgfQorICAgICAgICBv KGVzY2FwZUhUTUwoJHN0KSk7CisgICAgICAgIGlmICgkc2VjdG5vZGUtPntIYXNUZXh0fVskaV0g JiYgJHNlY3Rub2RlLT57QW5jaG9yfSkgeworICAgICAgICAgICAgbyhzcHJpbnRmICc8YSBocmVm PSIlcyMlcyI+WypdPC9hPicsCisgICAgICAgICAgICAgICR2ZXJzaW9uX3VybHNbJGldLCAkc2Vj dG5vZGUtPntBbmNob3J9KTsKKyAgICAgICAgfQorICAgICAgICBvKCRlbmRfYSk7CisgICAgICAg IG8oJzwvdGQ+Jyk7CisgICAgfQorICAgIG8oIjwvdHI+XG4iKTsKK30gICAgICAKKworc3ViIHdy aXRlX291dHB1dF9zZWN0bGlzdCAoJCk7CitzdWIgd3JpdGVfb3V0cHV0X3NlY3RsaXN0ICgkKSB7 CisgICAgbXkgKCRzZWN0bGlzdCkgPSBAXzsKKyAgICBmb3JlYWNoIG15ICRrZXkgKGtleXMgJSRz ZWN0bGlzdCkgeworICAgICAgICBteSAkc2VjdG5vZGUgPSAkc2VjdGxpc3QtPnska2V5fTsKKyAg ICAgICAgcHVzaCBAcGVuZGluZ19oZWFkaW5ncywgJHNlY3Rub2RlOworICAgICAgICB3cml0ZV9v dXRwdXRfcm93ICRzZWN0bm9kZSBpZiAkc2VjdG5vZGUtPntTdGF0dXN9OworICAgICAgICB3cml0 ZV9vdXRwdXRfc2VjdGxpc3QgJHNlY3Rub2RlLT57Q2hpbGRyZW59OworICAgIH0KK30KKworc3Vi IHdyaXRlX291dHB1dCAoKSB7CisgICAgbygnPHRhYmxlIHJ1bGVzPSJhbGwiPicpOworICAgIHdy aXRlX291dHB1dF9zZWN0bGlzdCAkdG9wbGV2ZWxfc2VjdGxpc3Q7CisgICAgbygnPC90YWJsZT4n KTsKK30KKworIy0tLS0tLS0tLS0gbWFpbiBwcm9ncmFtIC0tLS0tLS0tLS0KKworb3BlbiBERUJV RywgJz4nLCAnL2Rldi9udWxsJyBvciBkaWUgJCE7CitpZiAoQEFSR1YgJiYgJEFSR1ZbMF0gZXEg Jy1EJykgeworICAgIHNoaWZ0IEBBUkdWOworICAgIG9wZW4gREVCVUcsICc+JjInIG9yIGRpZSAk ITsKK30KKworZGllIHVubGVzcyBAQVJHVjsKK2RpZSBpZiAkQVJHVlswXSA9fiBtL14tLzsKK2Rp ZSBpZiBAQVJHViAlIDI7CisKK3JlYWRfaW5wdXRzKCk7CisKKyN1c2UgRGF0YTo6RHVtcGVyOwor I3ByaW50IERFQlVHIER1bXBlcigkdG9wbGV2ZWxfc2VjdGxpc3QpOworCithbmFseXNlX3JlcHJv Y2VzcygpOworIyBOb3cgSGVhZGxpbmUgaXMgaW4gSFRNTAorCitjb3VudF9yb3dzX3NlY3RsaXN0 KCR0b3BsZXZlbF9zZWN0bGlzdCk7CisKKyN1c2UgRGF0YTo6RHVtcGVyOworcHJpbnQgREVCVUcg RHVtcGVyKCR0b3BsZXZlbF9zZWN0bGlzdCk7CisKK3dyaXRlX291dHB1dCgpOwotLSAKMi4xLjQK CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs