--------------Boundary-00=_0ISLLHMP6MR2D0LS3C6S Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Attached is an updated firewall script that gets the order of things correct=20 (I hope) in the stop_firewall() function. -Tom --=20 Tom Eastep \ A Firewall for Linux 2.4.* AIM: tmeastep \ http://www.shorewall.net ICQ: #60745924 \ teastep@shorewall.net --------------Boundary-00=_0ISLLHMP6MR2D0LS3C6S Content-Type: application/x-shellscript; name="firewall" Content-Transfer-Encoding: base64 Content-Description: Firewall Script Content-Disposition: attachment; filename="firewall" IyEvYmluL3NoClJDRExJTktTPSIyLFM0MSAzLFM0MSA2LEs0MSIKIwojICAgICBUaGUgU2hvcmVs aW5lIEZpcmV3YWxsIChTaG9yZXdhbGwpIFBhY2tldCBGaWx0ZXJpbmcgRmlyZXdhbGwgLSBWMS4y IDEyLzIxLzIwMDEKIwojICAgICBUaGlzIHByb2dyYW0gaXMgdW5kZXIgR1BMIFtodHRwOi8vd3d3 LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bV0JICAgICAgCiMKIyAgICAgKGMpIDE5OTksMjAwMCwy MDAxLDIwMDIgLSBUb20gRWFzdGVwICh0ZWFzdGVwQHNob3Jld2FsbC5uZXQpCiMKIwlPbiBtb3N0 IGRpc3RyaWJ1dGlvbnMsIHRoaXMgZmlsZSBzaG91bGQgYmUgY2FsbGVkOgojCS9ldGMvcmMuZC9p bml0LmQvc2hvcmV3YWxsIG9yIC9ldGMvaW5pdC5kL3Nob3Jld2FsbAojCiMJQ29tcGxldGUgZG9j dW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3Nob3Jld2FsbC5zb3VyY2Vmb3JnZS5u ZXQKIwojCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CiMJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIFZlcnNpb24gMiBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCiMJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCiMKIwlUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIwlidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojCU1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQojCUdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIwlZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojCWFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMJ Rm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EK IwojCUlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBzdGFydGluZyBvciByZXN0YXJ0aW5nIHRoZSBm aXJld2FsbCwgdGhlCiMJZmlyZXdhbGwgaXMgYXV0b21hdGljYWxseSBzdG9wcGVkLgojCiMJQ29t bWFuZHMgYXJlOgojCiMJICAgc2hvcmV3YWxsIHN0YXJ0CQkJICBTdGFydHMgdGhlIGZpcmV3YWxs IAojCSAgIHNob3Jld2FsbCByZXN0YXJ0CQkJICBSZXN0YXJ0cyB0aGUgZmlyZXdhbGwKIwkgICBz aG9yZXdhbGwgc3RvcAkJCSAgU3RvcHMgdGhlIGZpcmV3YWxsCiMJICAgc2hvcmV3YWxsIHN0YXR1 cwkJCSAgRGlzcGxheXMgZmlyZXdhbGwgc3RhdHVzCiMJICAgc2hvcmV3YWxsIHJlc2V0CQkJICBS ZXNldHMgaXB0YWJsZXNzIHBhY2tldCBhbmQKIwkJCQkJCSAgYnl0ZSBjb3VudHMKIwkgICBzaG9y ZXdhbGwgY2xlYXIJCQkgIFJlbW92ZSBhbGwgU2hvcmV3YWxsIGNoYWlucyAKIwkJCQkJCSAgYW5k IHJ1bGVzL3BvbGljaWVzLgojCSAgIHNob3Jld2FsbCByZWZyZXNoCS4JCSAgUmVidWlsZCB0aGUg Y29tbW9uIGNoYWluCiMKIyBjaGtjb25maWc6IDIzNDUgMjUgOTAKIyBkZXNjcmlwdGlvbjogUGFj a2V0IGZpbHRlcmluZyBmaXJld2FsbAojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBNdXR1YWwg ZXhjbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCm15X211dGV4X29uKCkgewogICAg WyAtbiAiJG5vbG9jayIgXSB8fCBtdXRleF9vbgp9CgpteV9tdXRleF9vZmYoKSB7CiAgICBbIC1u ICIkbm9sb2NrIiBdIHx8IG11dGV4X29mZgp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBNZXNz YWdlIHRvIHN0ZGVyciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmVycm9yX21lc3NhZ2UoKSAj ICQqID0gRXJyb3IgTWVzc2FnZQp7CiAgIGVjaG8gIiRAIiA+JjIKfQojIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCiMgRmF0YWwgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmYXRh bF9lcnJvcigpICMgJCogPSBFcnJvciBNZXNzYWdlCnsKICAgIGVjaG8gIiRAIiA+JjIKICAgIHN0 b3BfZmlyZXdhbGwKICAgIGV4aXQgMgp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBGYXRhbCBl cnJvciBkdXJpbmcgc3RhcnR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnN0YXJ0dXBfZXJyb3IoKSAjICQq ID0gRXJyb3IgTWVzc2FnZQp7CiAgICBlY2hvICIkQCIgPiYyCiAgICBleGl0IDIKfQojIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCiMgUGVyZm9ybSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gb24gdGhlIHBh c3NlZCBhcmd1bWVudCBhbmQgZWNobyB0aGUgcmVzdWx0ICAgICMKIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpleHBhbmQoKSAjICQxID0gY29udGVudHMgb2YgdmFyaWFibGUgd2hpY2ggbWF5IGJlIHRo ZSBuYW1lIG9mIGFub3RoZXIgdmFyaWFibGUKewogICAgZXZhbCBlY2hvIFwiJDFcIgp9CiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKIyBQZXJmb3JtIHZhcmlhYmxlIHN1YnN0aXRpdGlvbiBvbiB0aGUg dmFsdWVzIG9mIHRoZSBwYXNzZWQgbGlzdCBvZiB2YXJpYWJsZXMgIwojIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCmV4cGFuZHYoKSAjICQqID0gbGlzdCBvZiB2YXJpYWJsZSBuYW1lcwp7CiAgICBsb2Nh bCB2YXJ2YWwKCiAgICB3aGlsZSBbICQjIC1ndCAwIF07IGRvCglldmFsIHZhcnZhbD1cJCR7MX0K CWV2YWwgJDE9XCIkdmFydmFsXCIKCXNoaWZ0CiAgICBkb25lCn0KIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKIyBSdW4gaXB0YWJsZXMgYW5kIGlmIGFuIGVycm9yIG9jY3Vycywgc3RvcCB0aGUgZmly ZXdhbGwgYW5kIHF1aXQJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcnVuX2lwdGFi bGVzKCkgewogICAgaWYgISBpcHRhYmxlcyBgZWNobyAkQCB8IHNlZCAncy8hLyEgL2cnYDsgdGhl bgogICAgICAgIFsgLXogIiRzdG9wcGluZyIgXSAmJiB7IHN0b3BfZmlyZXdhbGw7IGV4aXQgMjsg fQogICAgZmkKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFJ1biBpcCBhbmQgaWYgYW4gZXJy b3Igb2NjdXJzLCBzdG9wIHRoZSBmaXJld2FsbCBhbmQgcXVpdAkJICAgICAgICMKIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKcnVuX2lwKCkgewogICAgaWYgISBpcCAkQCA7IHRoZW4KCVsgLXogIiRz dG9wcGluZyIgXSAmJiB7IHN0b3BfZmlyZXdhbGw7IGV4aXQgMjsgfQogICAgZmkKfQojIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwojIFJ1biBhcnAgYW5kIGlmIGFuIGVycm9yIG9jY3Vycywgc3RvcCB0 aGUgZmlyZXdhbGwgYW5kIHF1aXQJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJ1 bl9hcnAoKSB7CiAgICBpZiAhIGFycCAkQCA7IHRoZW4KCVsgLXogIiRzdG9wcGluZyIgXSAmJiB7 IHN0b3BfZmlyZXdhbGw7IGV4aXQgMjsgfQogICAgZmkKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwojIFJ1biB0YyBhbmQgaWYgYW4gZXJyb3Igb2NjdXJzLCBzdG9wIHRoZSBmaXJld2FsbCBhbmQg cXVpdAkJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcnVuX3RjKCkgewogICAgaWYg ISB0YyAkQCA7IHRoZW4KCVsgLXogIiRzdG9wcGluZyIgXSAmJiB7IHN0b3BfZmlyZXdhbGw7IGV4 aXQgMjsgfQogICAgZmkKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIENyZWF0ZSBhIGZpbHRl ciBjaGFpbgkJCQkJCQkgICAgICAgIwojCQkJCQkJCQkJICAgICAgICMKIyBJZiB0aGUgY2hhaW4g aXNuJ3Qgb25lIG9mIHRoZSBjb21tb24gY2hhaW5zIHRoZW4JCQkgICAgICAgIwojIGFkZCBhIHJ1 bGUgdG8gdGhlIGNoYWluIGFsbG93aW5nIHBhY2tldHMgdGhhdCBhcmUgcGFydCBvZiBhbgkJICAg ICAgICMKIyBlc3RhYmxpc2hlZCBjb25uZWN0aW9uLiBDcmVhdGUgYSB2YXJpYWJsZSAkezF9X2V4 aXN0cyBhbmQgc2V0IGl0cyB2YWx1ZSAgICAgICMKIyB0byBZZXMgdG8gaW5kaWNhdGUgdGhhdCB0 aGUgY2hhaW4gbm93IGV4aXN0cy4JCQkJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Y3JlYXRlY2hhaW4oKSAjICQxID0gY2hhaW4gbmFtZSwgJDIgPSBJZiBub24tbnVsbCwgZG9uJ3Qg Y3JlYXRlIGRlZmF1bHQgcnVsZXMKewogICAgcnVuX2lwdGFibGVzIC1OICQxCgogICAgaWYgWyAk IyAtZXEgMSBdOyB0aGVuCglzdGF0ZT0iRVNUQUJMSVNIRUQiCglbIC1uICIkQUxMT1dSRUxBVEVE IiBdICYmIHN0YXRlPSIkc3RhdGUsUkVMQVRFRCIKCXJ1bl9pcHRhYmxlcyAtQSAkMSAtbSBzdGF0 ZSAtLXN0YXRlICRzdGF0ZSAtaiBBQ0NFUFQKICAgIGZpCgogICAgZXZhbCAkezF9X2V4aXN0cz1Z ZXMKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIERldGVybWluZSBpZiBhIGNoYWluIGV4aXN0 cwkJCQkJCSAgICAgICAjCiMJCQkJCQkJCQkgICAgICAgIwojIFdoZW4gd2UgY3JlYXRlIGEgY2hh aW4gImNoYWluIiwgd2UgY3JlYXRlIGEgdmFyaWFibGUgbmFtZWQgY2hhaW5fZXhpc3RzIGFuZCAg IwojIHNldCBpdHMgdmFsdWUgdG8gWWVzLiBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUgIl9l eGlzdHMiIHZhcmlhYmxlCSAgICAgICAjCiMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFzc2VkIGNo YWluIGhhdmluZyB0aGUgdmFsdWUgb2YgIlllcyIuCQkgICAgICAgIwojIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwpoYXZlY2hhaW4oKSAjICQxID0gbmFtZSBvZiBjaGFpbgp7CiAgICBldmFsIHRlc3Qg XCJcJCR7MX1fZXhpc3RzXCIgPSBZZXMKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEVuc3Vy ZSB0aGF0IGEgY2hhaW4gZXhpc3RzIChjcmVhdGUgaXQgaWYgaXQgZG9lc24ndCkJCQkgICAgICAg IwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwplbnN1cmVjaGFpbigpICMgJDEgPSBjaGFpbiBuYW1l CnsKICAgIGhhdmVjaGFpbiAkMSB8fCBjcmVhdGVjaGFpbiAkMQp9CiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCiMgQWRkIGEgcnVsZSB0byBhIGNoYWluIGNyZWF0aW5nIHRoZSBjaGFpbiBpZiBuZWNl c3NhcnkJCQkgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphZGRydWxlKCkgIyAkMSA9 IGNoYWluIG5hbWUsIHJlbWFpbmRlciBvZiBhcmd1bWVudHMgc3BlY2lmeSB0aGUgcnVsZQp7CiAg ICBlbnN1cmVjaGFpbiAkMQogICAgcnVuX2lwdGFibGVzIC1BICRACn0KIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKIyBEZWxldGUgYSBjaGFpbiBpZiBpdCBleGlzdHMJCQkJCQkgICAgICAgIwojIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwpkZWxldGVjaGFpbigpICMgJDEgPSBuYW1lIG9mIGNoYWluCnsK ICAgIHF0IGlwdGFibGVzIC1MICQxIC1uICYmIHF0IGlwdGFibGVzIC1GICQxICYmIHF0IGlwdGFi bGVzIC1YICQxCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTZXQgYSBzdGFuZGFyZCBjaGFp bidzIHBvbGljeQkJCQkJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnNldHBvbGlj eSgpICMgJDEgPSBuYW1lIG9mIGNoYWluLCAkMiA9IHBvbGljeQp7CiAgICBydW5faXB0YWJsZXMg LVAgJDEgJDIKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFNldCBhIHN0YW5kYXJkIGNoYWlu IHRvIGVuYWJsZSBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAg IwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzZXRjb250aW51ZSgpICMgJDEgPSBuYW1lIG9mIGNo YWluCnsKICAgIHJ1bl9pcHRhYmxlcyAtQSAkMSAtbSBzdGF0ZSAtLXN0YXRlIEVTVEFCTElTSEVE IC1qIEFDQ0VQVAp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRmx1c2ggb25lIG9mIHRoZSBO QVQgdGFibGUgY2hhaW5zCQkJCQkgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmbHVz aG5hdCgpICMgJDEgPSBuYW1lIG9mIGNoYWluCnsKICAgIHJ1bl9pcHRhYmxlcyAtdCBuYXQgLUYg JDEKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEZpbmQgaW50ZXJmYWNlcyB0byBhIGdpdmVu IHpvbmUJCQkJCSAgICAgICAjCiMJCQkJCQkJCQkgICAgICAgIwojIFJlYWQgdGhlIGludGVyZmFj ZXMgZmlsZSBhbmQgZm9yIGVhY2ggcmVjb3JkIG1hdGNoaW5nIHRoZSBwYXNzZWQgWk9ORSwgICAg ICAgIwojIGVjaG8gdGhlIGV4cGFuZGVkIGNvbnRlbnRzIG9mIHRoZSAiSU5URVJGQUNFIiBjb2x1 bW4JCQkgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmaW5kX2ludGVyZmFjZXMoKSAj ICQxID0gaW50ZXJmYWNlIHpvbmUKewogICAgbG9jYWwgem5lPSQxCgogICAgWyAkem5lID0gbXVs dGkgXSAmJiB6bmU9Ii0iCgogICAgd2hpbGUgcmVhZCB6IGludGVyZmFjZSBzdWJuZXQgb3B0aW9u czsgZG8KCVsgIngkeiIgPSAieCR6bmUiIF0gJiYgZWNobyBgZXhwYW5kICRpbnRlcmZhY2VgCiAg ICBkb25lIDwgJFRNUF9ESVIvaW50ZXJmYWNlcwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMg RmluZCBob3N0cyBpbiBhIGdpdmVuIHpvbmUJCQkJCQkgICAgICAgIwojCQkJCQkJCQkJICAgICAg ICMKIyBSZWFkIGhvc3RzIGZpbGUgYW5kIGZvciBlYWNoIHJlY29yZCBtYXRjaGluZyB0aGUgcGFz c2VkIFpPTkUsICAgICAgICAgICAgICAgICMKIyBlY2hvIHRoZSBleHBhbmRlZCBjb250ZW50cyBv ZiB0aGUgIkhPU1QoUykiIGNvbHVtbgkJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CmZpbmRfaG9zdHMoKSAjICQxID0gaG9zdCB6b25lCnsKICAgIGxvY2FsIGhvc3RzCgogICAgd2hp bGUgcmVhZCB6IGhvc3RzIG9wdGlvbnM7IGRvCglbICJ4JHoiID0gIngkMSIgXSAmJiBleHBhbmR2 IGhvc3RzICYmIGVjaG8gYHNlcGFyYXRlX2xpc3QgJGhvc3RzYAogICAgZG9uZSA8ICRUTVBfRElS L2hvc3RzCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBEZXRlcm1pbmUgdGhlIGludGVyZmFj ZXMgb24gdGhlIGZpcmV3YWxsCQkJCSAgICAgICAjCiMJCQkJCQkJCQkgICAgICAgIwojIEZvciBl YWNoIHpvbmUsIGNyZWF0ZSBhIHZhcmlhYmxlIGNhbGxlZCAke3pvbmV9X2ludGVyZmFjZXMuIFRo aXMJICAgICAgICMKIyB2YXJpYWJsZSBjb250YWlucyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9m IGludGVyZmFjZXMgdG8gdGhlIHpvbmUJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK ZGV0ZXJtaW5lX2ludGVyZmFjZXMoKSB7CiAgICBmb3Igem9uZSBpbiAkem9uZXMgbXVsdGk7IGRv CglpbnRlcmZhY2VzPWBmaW5kX2ludGVyZmFjZXMgJHpvbmVgCglpbnRlcmZhY2VzPWBlY2hvICRp bnRlcmZhY2VzYCAjIFJlbW92ZSBleHRyYSB0cmFzaAoJZXZhbCAke3pvbmV9X2ludGVyZmFjZXM9 IlwkaW50ZXJmYWNlcyIKICAgIGRvbmUKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIERldGVy bWluZSB0aGUgZGVmaW5lZCBob3N0cyBpbiBlYWNoIHpvbmUgYW5kIGdlbmVyYXRlIHJlcG9ydAkJ ICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGV0ZXJtaW5lX2hvc3RzKCkgewogICAg ZG9fYV96b25lKCkgIyAkMSA9IHpvbmUgbmFtZQogICAgewogICAgICAgIGV2YWwgaW50ZXJmYWNl cz1cJCR7em9uZX1faW50ZXJmYWNlcwoKCWZvciBpbnRlcmZhY2UgaW4gJGludGVyZmFjZXM7IGRv CgkgICAgaWYgWyAteiAiJGhvc3RzIiBdOyB0aGVuCgkJaG9zdHM9JGludGVyZmFjZTowLjAuMC4w LzAKCSAgICBlbHNlCgkJaG9zdHM9IiRob3N0cyAkaW50ZXJmYWNlOjAuMC4wLjAvMCIKCSAgICBm aQoJZG9uZQogICAgfQoKICAgIGZvciB6b25lIGluICR6b25lcyBtdWx0aTsgZG8KCWhvc3RzPWBm aW5kX2hvc3RzICR6b25lYAoJaG9zdHM9YGVjaG8gJGhvc3RzYCAjIFJlbW92ZSBleHRyYSB0cmFz aAoKCWlmIFsgLXogIiRob3N0cyIgXTsgdGhlbgoJICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkgICAgIyBJZiBu byBob3N0cyBhcmUgZGVmaW5lZCBmb3IgYSB6b25lIHRoZW4gdGhlIHpvbmUgY29uc2lzdHMgb2Yg YW55CgkgICAgIyBob3N0IHRoYXQgY2FuIHNlbmQgdXMgbWVzc2FnZXMgdmlhIHRoZSBpbnRlcmZh Y2VzIHRvIHRoZSB6b25lCgkgICAgIwoJICAgIGRvX2Ffem9uZSAkem9uZQoJZmkKCglldmFsICR7 em9uZX1faG9zdHM9IlwkaG9zdHMiCgoJWyAtbiAiJGhvc3RzIiBdICYmIHsKCSAgICBldmFsIGRp c3BsYXk9XCQke3pvbmV9X2Rpc3BsYXkKCSAgICBkaXNwbGF5X2xpc3QgIiRkaXNwbGF5IFpvbmU6 IiAkaG9zdHMKCX0KICAgIGRvbmUKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEVuc3VyZSB0 aGF0IHRoZSBwYXNzZWQgem9uZSBpcyBkZWZpbmVkIGluIHRoZSB6b25lcyBmaWxlIG9yIGlzIHRo ZSBmaXJld2FsbCAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp2YWxpZGF0ZV96b25lKCkgIyAk MSA9IHpvbmUKewogICAgbG9jYWwgem9uZQogICAgZm9yIHpvbmUgaW4gJHpvbmVzICRGVzsgZG8K CVsgIiR6b25lIiA9ICIkMSIgXSAmJiByZXR1cm4gMAogICAgZG9uZQogICAgcmV0dXJuIDEKfQoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEZpbmQgYnJvYWRjYXN0IGFkZHJlc3NlcyBjb3JyZXNw b25kaW5nIHRvIGludGVyZmFjZXMgdG8gYSBnaXZlbiB6b25lCSAgICAgICAjCiMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCmZpbmRfYnJvYWRjYXN0KCkgIyAkMSA9IHpvbmUKewogICAgbG9jYWwgem5l PSQxCgogICAgWyAkem5lID0gbXVsdGkgXSAmJiB6bmU9Ii0iCgogICAgd2hpbGUgcmVhZCB6IGlu dGVyZmFjZSBiY2FzdCBvcHRpb25zOyBkbwoJZXhwYW5kdiBpbnRlcmZhY2UgYmNhc3QKCWlmIFsg IngkeiIgPSAieCR6bmUiIC1hIC1uICIkYmNhc3QiIF07IHRoZW4KCSAgICBpZiBbICJ4JGJjYXN0 IiA9ICJ4ZGV0ZWN0IiBdOyB0aGVuCgkJYWRkcj0iYGlwIGFkZHIgc2hvdyAkaW50ZXJmYWNlIDI+ IC9kZXYvbnVsbGAiCgkJaWYgWyAtbiAiYGVjaG8gIiRhZGRyIiB8IGdyZXAgJ2luZXQuKmJyZCAn YCIgXTsgdGhlbgoJCSAgICBhZGRyPSJgZWNobyAiJGFkZHIiIHwgXAoJCQlteWdyZXAgImluZXQg IiB8IHNlZCAncy8gICBpbmV0LipicmQgLy87cy9zY29wZS4qLy8nYCIKCQkgICAgZWNobyAkYWRk ciB8IGN1dCAtZCcgJyAtZiAxCgkJZmkKCSAgICBlbGlmIFsgIngke2JjYXN0fSIgIT0gIngtIiBd OyB0aGVuCgkJZWNobyBgc2VwYXJhdGVfbGlzdCAkYmNhc3RgCgkgICAgZmkKCWZpCiAgICBkb25l IDwgJFRNUF9ESVIvaW50ZXJmYWNlcwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRmluZCBp bnRlcmZhY2VzIHRoYXQgaGF2ZSB0aGUgcGFzc2VkIG9wdGlvbiBzcGVjaWZpZWQJCQkgICAgICAg IwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmaW5kX2ludGVyZmFjZXNfYnlfb3B0aW9uKCkgIyAk MSA9IG9wdGlvbgp7CiAgICAjCiAgICAjIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgaW4gc3Rv cF9maXJld2FsbCBzbyB3ZSBtYXkgYmUgc3RvcHBpbmcgYmVmb3JlIHdlCiAgICAjIHByb2Nlc3Nl ZCB0aGUgem9uZXMgZmlsZQogICAgIwogICAgaWYgWyAtbiAiJHpvbmVwYXR0ZXJuIiBdOyB0aGVu CglteWdyZXAgIiR6b25lcGF0dGVyblx8Xi0iICRUTVBfRElSL2ludGVyZmFjZXMgfCBcCgl3aGls ZSByZWFkIGlnbm9yZSBpbnRlcmZhY2Ugc3VibmV0IG9wdGlvbnM7IGRvCgkgICAgZXhwYW5kdiBv cHRpb25zCgkgICAgZm9yIG9wdGlvbiBpbiBgc2VwYXJhdGVfbGlzdCAkb3B0aW9uc2A7IGRvCgkg ICAgICAgIFsgIiRvcHRpb24iID0gIiQxIiBdICYmIGVjaG8gYGV4cGFuZCAkaW50ZXJmYWNlYCAm JiBicmVhayAxCiAgICAgICAgICAgIGRvbmUKCglkb25lCiAgICBmaQp9CiMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCiMgRmluZCBob3N0cyB3aXRoIHRoZSBwYXNzZWQgb3B0aW9uCQkJCQkgICAgICAg IwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpmaW5kX2hvc3RzX2J5X29wdGlvbigpICMgJDEgPSBv cHRpb24KewogICAgIwogICAgIyBUaGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGluIHN0b3BfZmly ZXdhbGwgc28gd2UgbWF5IGJlIHN0b3BwaW5nIGJlZm9yZSB3ZQogICAgIyBwcm9jZXNzZWQgdGhl IHpvbmVzIGZpbGUKICAgICMKICAgIGlmIFsgLW4gIiR6b25lcGF0dGVybiIgXTsgdGhlbgoJbXln cmVwICIkem9uZXBhdHRlcm4iICRUTVBfRElSL2hvc3RzIHwgXAoJd2hpbGUgcmVhZCBpZ25vcmUg aG9zdHMgb3B0aW9uczsgZG8KCSAgICBleHBhbmR2IG9wdGlvbnMKCSAgICBmb3Igb3B0aW9uIGlu IGBzZXBhcmF0ZV9saXN0ICRvcHRpb25zYDsgZG8KCSAgICAgICAgWyAiJG9wdGlvbiIgPSAiJDEi IF0gJiYgZWNobyBgZXhwYW5kICRob3N0c2AKCSAgICBkb25lCglkb25lCgoJbXlncmVwICIkem9u ZXBhdHRlcm4iICRUTVBfRElSL2ludGVyZmFjZXMgfCBcCgkgICAgd2hpbGUgcmVhZCBpZ25vcmUg aW50ZXJmYWNlIGlnbm9yZTEgb3B0aW9uczsgZG8KCSAgICAgICAgZXhwYW5kdiBvcHRpb25zCgkg ICAgCWZvciBvcHRpb24gaW4gYHNlcGFyYXRlX2xpc3QgJG9wdGlvbnNgOyBkbwoJICAgICAgICAg ICAgWyAiJG9wdGlvbiIgPSAiJDEiIF0gJiYgXAoJCSAgICAgICAgZWNobyBgZXhwYW5kICRpbnRl cmZhY2VgOjAuMC4wLjAvMCAmJgoJCSAgICAgICAgYnJlYWsgMQogICAgICAgICAgICAJZG9uZQoJ ICAgIGRvbmUKICAgIGZpCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBEZXRlcm1pbmUgaWYg dGhlcmUgYXJlIGludGVyZmFjZXMgb2YgdGhlIGdpdmVuIHpvbmUgYW5kIG9wdGlvbgkgICAgICAg IwojCQkJCQkJCQkJICAgICAgICMKIyBSZXR1cm5zIHplcm8gaWYgYW55IHN1Y2ggaW50ZXJmYWNl cyBhcmUgZm91bmQgYW5kIHJldHVybnMgb25lIG90aGVyd2lzZS4gICAgICMKIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKaGF2ZV9pbnRlcmZhY2VzX2luX3pvbmVfd2l0aF9vcHRpb24oKSAjICQxID0g em9uZSwgJDIgPSBvcHRpb24KewogICAgbG9jYWwgem5lPSQxCgogICAgWyAkem5lID0gbXVsdGkg XSAmJiB6bmU9Ii0iCgogICAgd2hpbGUgcmVhZCB6IGludGVyZmFjZSBicm9hZGNhc3Qgb3B0aW9u czsgZG8KCVsgIngkeiIgPSAieCR6bmUiIF0gJiYgXAoJICAgIGV4cGFuZHYgb3B0aW9ucyAmJiBc CgkgICAgZm9yIG9wdGlvbiBpbiBgc2VwYXJhdGVfbGlzdCAkb3B0aW9uc2A7IGRvCgkgICAgCVsg IiRvcHRpb24iID0gIiQyIiBdICYmIHJldHVybiAwCgkgICAgZG9uZQogICAgZG9uZSA8ICRUTVBf RElSL2ludGVyZmFjZXMKICAgIHJldHVybiAxCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBG bHVzaCBhbmQgZGVsZXRlIGFsbCB1c2VyLWRlZmluZWQgY2hhaW5zIGluIHRoZSBmaWx0ZXIgdGFi bGUJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRlbGV0ZWFsbGNoYWlucygpIHsK ICAgIHJ1bl9pcHRhYmxlcyAtRgogICAgcnVuX2lwdGFibGVzIC1YCn0KIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKIyBTb3VyY2UgYSB1c2VyIGV4aXQgZmlsZSBpZiBpdCBleGlzdHMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK cnVuX3VzZXJfZXhpdCgpICMgJDEgPSBmaWxlIG5hbWUKewogICAgbG9jYWwgdXNlcl9leGl0PWBm aW5kX2ZpbGUgJDFgCgogICAgaWYgWyAtZiAkdXNlcl9leGl0IF07IHRoZW4KICAgICAgICBlY2hv ICJQcm9jZXNzaW5nICR1c2VyX2V4aXQgLi4uIgoJLiAkdXNlcl9leGl0CiAgICBmaQp9CiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiMgU3RvcCB0aGUgRmlyZXdhbGwgLQkJCQkJCQkgICAgICAgIwoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdG9wX2ZpcmV3YWxsKCkgewogICAgc3RvcHBpbmc9Illl cyIKCiAgICBkZWxldGVjaGFpbiBzaG9yZXdhbGwKCiAgICBydW5fdXNlcl9leGl0IHN0b3AKCiAg ICBbIC1uICIkTUFOR0xFX0VOQUJMRUQiIF0gJiYgXAoJcnVuX2lwdGFibGVzIC10IG1hbmdsZSAt RiAmJiBcCglydW5faXB0YWJsZXMgLXQgbWFuZ2xlIC1YCgogICAgWyAtbiAiJE5BVF9FTkFCTEVE IiBdICYmIGRlbGV0ZV9uYXQKICAgIGRlbGV0ZV9wcm94eV9hcnAKICAgIFsgLW4gIiRUQ19FTkFC TEVEIiBdICYmIGRlbGV0ZV90YwoKICAgIHNldHBvbGljeSBJTlBVVCBEUk9QCiAgICBzZXRwb2xp Y3kgT1VUUFVUIERST1AKICAgIHNldHBvbGljeSBGT1JXQVJEIERST1AKCiAgICBkZWxldGVhbGxj aGFpbnMKCiAgICBob3N0cz0iYGZpbmRfaG9zdHNfYnlfb3B0aW9uIHJvdXRlc3RvcHBlZGAiCgog ICAgZm9yIGhvc3QgaW4gJGhvc3RzOyBkbwoJaW50ZXJmYWNlPSR7aG9zdCU6Kn0KCXN1Ym5ldD0k e2hvc3QjKjp9CglpcHRhYmxlcyAtQSBJTlBVVCAgLWkgJGludGVyZmFjZSAtcyAkc3VibmV0IC1q IEFDQ0VQVAoJaXB0YWJsZXMgLUEgT1VUUFVUIC1vICRpbnRlcmZhY2UgLWQgJHN1Ym5ldCAtaiBB Q0NFUFQKCglmb3IgaG9zdDEgaW4gJGhvc3RzOyBkbwoJICAgIFsgIiRob3N0IiAhPSAiJGhvc3Qx IiBdICYmIFwKCQlpcHRhYmxlcyAtQSBGT1JXQVJEIC1pICRpbnRlcmZhY2UgLXMgJHN1Ym5ldCBc CgkJICAgIC1vICR7aG9zdDElOip9IC1kICR7aG9zdDEjKjp9IC1qIEFDQ0VQVAoJZG9uZQogICAg ZG9uZQoKICAgIGlwdGFibGVzIC1BIElOUFVUICAtaSBsbyAtaiBBQ0NFUFQKICAgIGlwdGFibGVz IC1BIE9VVFBVVCAtbyBsbyAtaiBBQ0NFUFQKCgogICAgZm9yIGludGVyZmFjZSBpbiBgZmluZF9p bnRlcmZhY2VzX2J5X29wdGlvbiBkaGNwYDsgZG8KCWlwdGFibGVzIC1BIElOUFVUICAtcCB1ZHAg LWkgJGludGVyZmFjZSAtLWRwb3J0IDY3OjY4IC1qIEFDQ0VQVAoJaXB0YWJsZXMgLUEgT1VUUFVU IC1wIHVkcCAtbyAkaW50ZXJmYWNlIC0tZHBvcnQgNjc6NjggLWogQUNDRVBUCiAgICBkb25lCgog ICAgY2FzZSAiJElQX0ZPUldBUkRJTkciIGluCiAgICBbT29dbikKICAgIAllY2hvIDEgPiAvcHJv Yy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZAoJOzsKICAgIFtPb11mZikKICAgICAgICBlY2hvIDAg PiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZAogICAgICAgIDs7CiAgICBlc2FjCgogICAg bG9nZ2VyICJTaG9yZXdhbGwgU3RvcHBlZCIKCiAgICBybSAtcmYgJFRNUF9ESVIKCiAgICBjYXNl ICRjb21tYW5kIGluCiAgICBzdG9wfGNsZWFyKQoJOzsKICAgICopCglteV9tdXRleF9vZmYKCSMK CSMgVGhlIGZpcmV3YWxsIGlzIGJlaW5nIHN0b3BwZWQgd2hlbiB3ZSB3ZXJlIHRyeWluZyB0byBk byBzb21ldGhpbmcKCSMgZWxzZS4gS2lsbCB0aGUgc2hlbGwgaW4gY2FzZSB3ZSdyZSBpbiBhIHN1 YnNoZWxsCgkjCiAgICAgICAga2lsbCAkJAogICAgICAgIDs7CiAgICBlc2FjCn0KIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIyBSZW1vdmUgYWxsIHJ1bGVzIGFuZCByZW1vdmUgYWxsIHVzZXItZGVm aW5lZCBjaGFpbnMJCQkgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjbGVhcl9maXJl d2FsbCgpIHsKICAgIHN0b3BfZmlyZXdhbGwKCiAgICBzZXRwb2xpY3kgSU5QVVQgQUNDRVBUCiAg ICBzZXRwb2xpY3kgRk9SV0FSRCBBQ0NFUFQKICAgIHNldHBvbGljeSBPVVRQVVQgQUNDRVBUCgog ICAgcnVuX3VzZXJfZXhpdCBjbGVhcgoKICAgIGxvZ2dlciAiU2hvcmV3YWxsIENsZWFyZWQiCn0K IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTZXQgdXAgaXBzZWMgdHVubmVscwkJCQkJCQkgICAg ICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzZXR1cF90dW5uZWxzKCkgIyAkMSA9IG5hbWUg b2YgdHVubmVscyBmaWxlCnsKICAgIGxvY2FsIGluY2hhaW4KICAgIGxvY2FsIG91dGNoYWluCgog ICAgc2V0dXBfb25lX2lwc2VjKCkgIyAkMSA9IHpvbmUsICQyID0gZ2F0ZXdheSAkMyA9IGdhdGV3 YXkgem9uZQogICAgewoJaWYgISB2YWxpZGF0ZV96b25lICQxOyB0aGVuCgoJICAgIGVycm9yX21l c3NhZ2UgIkludmFsaWQgZ2F0ZXdheSB6b25lICgkMykiIFwKCQkJICAiIC0tIFR1bm5lbCBcIiR0 dW5uZWxcIiBJZ25vcmVkIgoJICAgIHJldHVybiAxCglmaQoKCW9wdGlvbnM9Ii1tc3RhdGUgLS1z dGF0ZSBORVcgLWogQUNDRVBUIgoJaW5jaGFpbj0kezF9MiR7Rld9CglvdXRjaGFpbj0ke0ZXfTIk ezF9CglhZGRydWxlICRpbmNoYWluICAgICAgICAgIC1wIDUwICAtcyAkMiAkb3B0aW9ucwoJYWRk cnVsZSAkb3V0Y2hhaW4gICAgICAgICAtcCA1MCAgLWQgJDIgJG9wdGlvbnMKCXJ1bl9pcHRhYmxl cyAtQSAkaW5jaGFpbiAgLXAgNTEgIC1zICQyICRvcHRpb25zCglydW5faXB0YWJsZXMgLUEgJG91 dGNoYWluIC1wIDUxICAtZCAkMiAkb3B0aW9ucwoJcnVuX2lwdGFibGVzIC1BICRpbmNoYWluICAt cCB1ZHAgLXMgJDIgLS1zcG9ydCA1MDAgLS1kcG9ydCA1MDAgJG9wdGlvbnMKCXJ1bl9pcHRhYmxl cyAtQSAkb3V0Y2hhaW4gLXAgdWRwIC1kICQyIC0tZHBvcnQgNTAwIC0tc3BvcnQgNTAwICRvcHRp b25zCgoJaWYgWyAtbiAiJDMiIF07IHRoZW4KCSAgICBpZiB2YWxpZGF0ZV96b25lICQzOyB0aGVu CgkJYWRkcnVsZSAke0ZXfTIkezN9IC1wIHVkcCAtLXNwb3J0IDUwMCAtLWRwb3J0IDUwMCAkb3B0 aW9ucwoJICAgIGVsc2UKCQllcnJvcl9tZXNzYWdlICJXYXJuaW5nOiBJbnZhbGlkIGdhdGV3YXkg em9uZSAoJDMpIiBcCgkJIiAtLSBUdW5uZWwgXCIkdHVubmVsXCIgbWF5IGVuY291bnRlciBrZXlp bmcgcHJvYmxlbXMiCgkgICAgZmkKCWZpCgoJcmV0dXJuIDAKICAgIH0KCiAgICBzZXR1cF9vbmVf b3RoZXIoKSAjICQxID0gem9uZSwgJDIgPSBnYXRld2F5LCAkMyA9IHByb3RvY29sCiAgICB7Cglp ZiAhIHZhbGlkYXRlX3pvbmUgJDE7IHRoZW4KCSAgICBlcnJvcl9tZXNzYWdlICJJbnZhbGlkIGdh dGV3YXkgem9uZSAoJDMpIiBcCgkJIiAtLSBUdW5uZWwgXCIkdHVubmVsXCIgSWdub3JlZCIKCSAg ICByZXR1cm4gMQoJZmkKCglvcHRpb25zPSItbXN0YXRlIC0tc3RhdGUgTkVXIC1qIEFDQ0VQVCIK CWluY2hhaW49JHsxfTIke0ZXfQoJb3V0Y2hhaW49JHtGV30kezF9CglhZGRydWxlICRpbmNoYWlu ICAtcCAkMyAtcyAkMiAkb3B0aW9ucwoJYWRkcnVsZSAkb3V0Y2hhaW4gLXAgJDMgLWQgJDIgJG9w dGlvbnMKCglyZXR1cm4gMAogICAgfQoKICAgIHN0cmlwX2ZpbGUgdHVubmVscyAkMQoKICAgIHdo aWxlIHJlYWQga2luZCB6IGdhdGV3YXkgejE7IGRvCiAgICAgICAgZXhwYW5kdiBraW5kIHogZ2F0 ZXdheSB6MQoJdHVubmVsPSJgZWNobyAka2luZCAkeiAkZ2F0ZXdheSAkejFgIgoJY2FzZSAka2lu ZCBpbgoJICAgIGlwc2VjKQoJCXNldHVwX29uZV9pcHNlYyAkeiAkZ2F0ZXdheSAkejEgJiYgXAoJ CWVjaG8gIiAgIElQU0VDIHR1bm5lbCB0byAkZ2F0ZXdheSBkZWZpbmVkLiIKCQk7OwoJICAgIGlw aXApCgkJc2V0dXBfb25lX290aGVyICR6ICRnYXRld2F5IDQgJiYgXAoJCWVjaG8gIiAgIElQSVAg dHVubmVsIHRvICRnYXRld2F5IGRlZmluZWQuIgoJCTs7CgkgICAgZ3JlKQoJCXNldHVwX29uZV9v dGhlciAkeiAkZ2F0ZXdheSA0NyAkejEgXAogICAgICAgICAgICAgICAgZWNobyAiICAgR1JFIHR1 bm5lbCB0byAkZ2F0ZXdheSBkZWZpbmVkLiIKICAgICAgICAgICAgICAgIDs7CgkgICAgKikKCQlp ZiBbIC1uICIka2luZCIgXTsgdGhlbgoJCSAgICBlcnJvcl9tZXNzYWdlICJUdW5uZWxzIG9mIHR5 cGUgJGtpbmQgYXJlIG5vdCBzdXBwb3J0ZWQ6IiBcCgkJCSJUdW5uZWwgXCIkdHVubmVsXCIgSWdu b3JlZCIKCQlmaQoJOzsKCWVzYWMKICAgIGRvbmUgPCAkVE1QX0RJUi90dW5uZWxzCn0KIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKIyBTZXR1cCBQcm94eSBBUlAJCQkJCQkJICAgICAgICMKIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKc2V0dXBfcHJveHlfYXJwKCkgewoKICAgIHByaW50X2Vycm9yKCkg ewoJZXJyb3JfbWVzc2FnZSAiSW52YWxpZCB2YWx1ZSBmb3IgSEFWRVJPVVRFIC0gKCRoYXZlcm91 dGUpIgoJZXJyb3JfbWVzc2FnZSAiRW50cnkgXCIkYWRkcmVzcyAkaW50ZXJmYWNlICRleHRlcm5h bCAkaGF2ZXJvdXRlXCIgaWdub3JlZCIKICAgIH0KCiAgICBzZXR1cF9vbmVfcHJveHlfYXJwKCkg ewogICAgICAgIGNhc2UgJGhhdmVyb3V0ZSBpbgoJW05uXW8pCgkgICAgaGF2ZXJvdXRlPQoJICAg IDs7CiAgICAgICAgW1l5XWVzKQoJICAgIDs7CiAgICAgICAgKikKCSAgICBpZiBbIC1uICIkaGF2 ZXJvdXRlIiBdOyB0aGVuCgkgICAgICAgIHByaW50X2Vycm9yCgkJcmV0dXJuCiAgICAgICAgICAg IGZpCgkgICAgOzsKCWVzYWMKCglbIC16ICIkaGF2ZXJvdXRlIiBdICYmIHJ1bl9pcCByb3V0ZSBh ZGQgJGFkZHJlc3MgZGV2ICRpbnRlcmZhY2UKCglydW5fYXJwIC1EcyAkYWRkcmVzcyAkZXh0ZXJu YWwgcHViCgoJZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvJGludGVyZmFjZS9wcm94 eV9hcnAKCWVjaG8gMCA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyRleHRlcm5hbC9wcm94eV9h cnAKCgllY2hvICRhZGRyZXNzICRpbnRlcmZhY2UgJGV4dGVybmFsICRoYXZlcm91dGUgPj4gJHtT VEFURURJUn0vcHJveHlhcnAKCgllY2hvICIgICBIb3N0ICRhZGRyZXNzIGNvbm5lY3RlZCB0byAk aW50ZXJmYWNlIGFkZGVkIHRvIEFSUCBvbiAkZXh0ZXJuYWwiCiAgICB9CgogICAgPiAke1NUQVRF RElSfS9wcm94eWFycAoKICAgIHN0cmlwX2ZpbGUgcHJveHlhcnAKCiAgICB3aGlsZSByZWFkIGFk ZHJlc3MgaW50ZXJmYWNlIGV4dGVybmFsIGhhdmVyb3V0ZTsgZG8KCWlmIFsgLW4gIiRhZGRyZXNz IiBdOyB0aGVuCgkgICAgZXhwYW5kdiBhZGRyZXNzIGludGVyZmFjZSBleHRlcm5hbCBoYXZlcm91 dGUKCSAgICBzZXR1cF9vbmVfcHJveHlfYXJwCglmaQogICAgZG9uZSA8ICRUTVBfRElSL3Byb3h5 YXJwCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBEZWxldGUgZXhpc3RpbmcgUHJveHkgQVJQ CQkJCQkJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGVsZXRlX3Byb3h5X2FycCgp IHsKICAgIGlmIFsgLWYgJHtTVEFURURJUn0vcHJveHlhcnAgXTsgdGhlbgogICAgICAgIHdoaWxl IHJlYWQgYWRkcmVzcyBpbnRlcmZhY2UgZXh0ZXJuYWwgaGF2ZXJvdXRlOyBkbwoJICAgIHF0IGFy cCAtaSAkZXh0ZXJuYWwgLWQgJGFkZHJlc3MgcHViCgkgICAgWyAteiAiJGhhdmVyb3V0ZSIgXSAm JiBxdCBpcCByb3V0ZSBkZWwgJGFkZHJlc3MgZGV2ICRpbnRlcmZhY2UKCgkgICAgZWNobyAwID4g L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvJGV4dGVybmFsL3Byb3h5X2FycAoJICAgIGVjaG8gMCA+ IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mLyRpbnRlcmZhY2UvcHJveHlfYXJwCglkb25lIDwgJHtT VEFURURJUn0vcHJveHlhcnAKCglybSAtZiAke1NUQVRFRElSfS9wcm94eWFycAogICAgZmkKCiAg ICBbIC1kICR7U1RBVEVESVJ9IF0gJiYgdG91Y2ggJHtTVEFURURJUn0vcHJveHlhcnAKfQojIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwojIFNldHVwIFN0YXRpYyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNs YXRpb24gKE5BVCkJCQkgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzZXR1cF9uYXQo KSB7CiAgICBsb2NhbCBhbGxpbnRzCiAgICAjCiAgICAjIEF0IHRoaXMgcG9pbnQsIHdlJ3JlIGp1 c3QgaW50ZXJlc3RlZCBpbiB0aGUgbmV0d29yayB0cmFuc2xhdGlvbgogICAgIwogICAgPiAke1NU QVRFRElSfS9uYXQKCiAgICBzdHJpcF9maWxlIG5hdAoKICAgIHdoaWxlIHJlYWQgZXh0ZXJuYWwg aW50ZXJmYWNlIGludGVybmFsIGFsbGludHMgbG9jYWxuYXQ7IGRvCglpZiBbIC1uICIkZXh0ZXJu YWwiIF07IHRoZW4KCSAgICBleHBhbmR2IGV4dGVybmFsIGludGVyZmFjZSBpbnRlcm5hbCBhbGxp bnRzIGxvY2FsbmF0CgoJICAgIGlmIFsgLW4gIiRBRERfSVBfQUxJQVNFUyIgXTsgdGhlbgoJCXF0 IGlwIGFkZHIgZGVsICRleHRlcm5hbCBkZXYgJGludGVyZmFjZQoJICAgIGZpCgoJICAgIGlmIFsg LXogIiRhbGxpbnRzIiAtbyAiJGFsbGludHMiID0gIlllcyIgXAoJCS1vICIkYWxsaW50cyIgPSAi eWVzIiBdCgkgICAgdGhlbgoJCXJ1bl9pcHRhYmxlcyAtdCBuYXQgLUEgUFJFUk9VVElORyAtZCAk ZXh0ZXJuYWwgXAoJCSAgICAtaiBETkFUIC0tdG8tZGVzdGluYXRpb24gJGludGVybmFsCgkJcnVu X2lwdGFibGVzIC10IG5hdCAtQSBQT1NUUk9VVElORyAtcyAkaW50ZXJuYWwgXAoJCSAgICAtaiBT TkFUIC0tdG8tc291cmNlICRleHRlcm5hbAoJCWlmIFsgIiRsb2NhbG5hdCIgPSAiWWVzIiAtbyAi JGxvY2FsbmF0IiA9ICJ5ZXMiIF07IHRoZW4KCQkgICAgcnVuX2lwdGFibGVzIC10IG5hdCAtQSBP VVRQVVQgLWQgJGV4dGVybmFsIFwKCQkJLWogRE5BVCAtLXRvLWRlc3RpbmF0aW9uICRpbnRlcm5h bAoJCWZpCgkgICAgZWxzZQoJCXJ1bl9pcHRhYmxlcyAtdCBuYXQgLUEgUFJFUk9VVElORyAtaSAk aW50ZXJmYWNlIFwKCQkgICAgLWQgJGV4dGVybmFsIC1qIEROQVQgLS10by1kZXN0aW5hdGlvbiAk aW50ZXJuYWwKCQlydW5faXB0YWJsZXMgLXQgbmF0IC1BIFBPU1RST1VUSU5HIC1vICRpbnRlcmZh Y2UgXAoJCSAgICAtcyAkaW50ZXJuYWwgLWogU05BVCAtLXRvLXNvdXJjZSAkZXh0ZXJuYWwKCSAg ICBmaQoKCSAgICBpZiBbIC1uICIkQUREX0lQX0FMSUFTRVMiIF07IHRoZW4KCQlydW5faXAgYWRk ciBhZGQgJGV4dGVybmFsIGRldiAkaW50ZXJmYWNlCgkJZWNobyAiJGV4dGVybmFsICRpbnRlcmZh Y2UiID4+ICR7U1RBVEVESVJ9L25hdAoJICAgIGZpCgoJICAgIGVjaG8gIiAgIEhvc3QgJGludGVy bmFsIE5BVCAkZXh0ZXJuYWwgb24gJGludGVyZmFjZSIKCWZpCiAgICBkb25lIDwgJFRNUF9ESVIv bmF0Cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBEZWxldGUgZXhpc3RpbmcgU3RhdGljIE5B VCBhbmQgUG9ydCBGb3J3YXJkaW5nCQkJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK ZGVsZXRlX25hdCgpIHsKICAgIHJ1bl9pcHRhYmxlcyAtdCBuYXQgLUYgUFJFUk9VVElORwogICAg cnVuX2lwdGFibGVzIC10IG5hdCAtRiBQT1NUUk9VVElORwogICAgcnVuX2lwdGFibGVzIC10IG5h dCAtRiBPVVRQVVQKCiAgICBbIC1mICR7U1RBVEVESVJ9L25hdCBdICYmIHdoaWxlIHJlYWQgZXh0 ZXJuYWwgaW50ZXJmYWNlOyBkbwoJcXQgaXAgYWRkciBkZWwgJGV4dGVybmFsIGRldiAkaW50ZXJm YWNlCiAgICBkb25lIDwgJHtTVEFURURJUn0vbmF0Cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK IyBQcm9jZXNzIFRDIFJ1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcHJvY2Vzc190 Y19ydWxlKCkKewogICAgYWRkX2FfdGNfcnVsZSgpIHsKCXI9CgljaGFpbj10Y3ByZQoKCWlmIFsg Ingkc291cmNlIiAhPSAieC0iICBdOyB0aGVuCgkgICAgY2FzZSAkc291cmNlIGluCgkgICAgWzAt OV0qKQoJCXI9IiR7cn0tcyAkc291cmNlICIKCQk7OwoJICAgICRGVykKCSAgICAJY2hhaW49dGNv dXQKCQk7OwoJICAgICopCgkgICAgCXI9IiR7cn0taSAkc291cmNlICIKCQk7OwoJICAgIGVzYWMK CWZpCglbICJ4JGRlc3QiICAgPSAieC0iICBdIHx8IHI9IiR7cn0tZCAkZGVzdCAiCglbICIkcHJv dG8iICAgPSAiYWxsIiBdIHx8IHI9IiR7cn0tcCAkcHJvdG8gIgoJWyAieCRwb3J0IiAgID0gIngt IiAgXSB8fCByPSIke3J9LS1kcG9ydCAkcG9ydCAiCglbICJ4JHNwb3J0IiAgPSAieC0iICBdIHx8 IHI9IiR7cn0tLXNwb3J0ICRzcG9ydCAiCgoJcnVuX2lwdGFibGVzIC10IG1hbmdsZSAtQSAkY2hh aW4gJHIgLWogTUFSSyAtLXNldC1tYXJrICRtYXJrCgogICAgfQoKICAgIGZvciBzb3VyY2UgaW4g YHNlcGFyYXRlX2xpc3QgJHtzb3VyY2VzOj0tfWA7IGRvCglmb3IgZGVzdCBpbiBgc2VwYXJhdGVf bGlzdCAke2Rlc3RzOj0tfWA7IGRvCgkgICAgZm9yIHBvcnQgaW4gYHNlcGFyYXRlX2xpc3QgJHtw b3J0czo9LX1gOyBkbwoJCWZvciBzcG9ydCBpbiBgc2VwYXJhdGVfbGlzdCAke3Nwb3J0czo9LX1g OyBkbwoJCSAgICBhZGRfYV90Y19ydWxlCgkJZG9uZQoJICAgIGRvbmUKICAgICAgICBkb25lCiAg ICBkb25lCgogICAgZWNobyAiICAgVEMgUnVsZSBcIiRydWxlXCIgYWRkZWQiCn0KIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIyBTZXR1cCBxdWV1aW5nIGFuZCBjbGFzc2VzICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKc2V0dXBfdGMoKSB7CgogICAgZWNobyAiU2V0dGluZyB1cCBUcmFmZmljIENvbnRyb2wg UnVsZXMuLi4iCgogICAgIwogICAgIyBDcmVhdGUgdGhlIFRDIG1hbmdsZSBjaGFpbnMKICAgICMK ICAgIHJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLU4gdGNwcmUKICAgIHJ1bl9pcHRhYmxlcyAtdCBt YW5nbGUgLU4gdGNvdXQKICAgICMKICAgICMgUHJvY2VzcyB0aGUgVEMgUnVsZXMgRmlsZQogICAg IwogICAgc3RyaXBfZmlsZSB0Y3J1bGVzCgogICAgd2hpbGUgcmVhZCBtYXJrIHNvdXJjZXMgZGVz dHMgcHJvdG8gcG9ydHMgc3BvcnRzOyBkbwoJaWYgWyAtbiAiJG1hcmsiIF07IHRoZW4KCSAgICBy dWxlPWBlY2hvICIkbWFyayAkc291cmNlcyAkZGVzdHMgJHByb3RvICRwb3J0cyAkc3BvcnRzImAK CSAgICBwcm9jZXNzX3RjX3J1bGUKCWZpCiAgICBkb25lIDwgJFRNUF9ESVIvdGNydWxlcwogICAg IwogICAgIyBMaW5rIHRvIHRoZSBUQyBtYW5nbGUgY2hhaW5zIGZyb20gdGhlIG1haW4gY2hhaW5z CiAgICAjCiAgICBydW5faXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBSRVJPVVRJTkcgIC1qIHRjcHJl CiAgICBydW5faXB0YWJsZXMgLXQgbWFuZ2xlIC1BIE9VVFBVVCAgICAgIC1qIHRjb3V0CgogICAg cnVuX3VzZXJfZXhpdCB0Y3N0YXJ0Cgp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ2xlYXIg VHJhZmZpYyBTaGFwaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRlbGV0ZV90YygpCnsKICAg IGNsZWFyX29uZV90YygpIHsKICAgICAgICB0YyBxZGlzYyBkZWwgZGV2ICQxIHJvb3QgICAgMj4g L2Rldi9udWxsCgl0YyBxZGlzYyBkZWwgZGV2ICQxIGluZ3Jlc3MgMj4gL2Rldi9udWxsCiAgICB9 CgogICAgcnVuX3VzZXJfZXhpdCB0Y2NsZWFyCgogICAgcnVuX2lwIGxpbmsgbGlzdCB8IFwKICAg IHdoaWxlIHJlYWQgaW54IGludGVyZmFjZSBkZXRhaWxzOyBkbwoJY2FzZSAkaW54IGluCglbMC05 XSopCgkgICAgY2xlYXJfb25lX3RjICR7aW50ZXJmYWNlJTp9CgkgICAgOzsKCSopCgkgICAgOzsK CWVzYWMKICAgIGRvbmUKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFByb2Nlc3MgYSByZWNv cmQgZnJvbSB0aGUgcnVsZXMgZmlsZQkJCQkJICAgICAgICMKIwkJCQkJCQkJCSAgICAgICAjCiMg VGhlIGNhbGxlciBoYXMgbG9hZGVkIHRoZSBjb2x1bW4gY29udGVudHMgZnJvbSB0aGUgcmVjb3Jk IGludG8gdGhlIGZvbGxvd2luZyAjCiMgdmFyaWFibGVzOgkJCQkJCQkJICAgICAgICMKIwkJCQkJ CQkJCSAgICAgICAjCiMgICB0YXJnZXQgY2xpZW50cyBzZXJ2ZXJzIHByb3RvY29sIHBvcnRzIGNw b3J0cyBhZGRyZXNzCQkgICAgICAgIwojCQkJCQkJCQkJICAgICAgICMKIyBhbmQgaGFzIGxvYWRl ZCBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZWlyIHZhbHVlcyBpbiAicnVsZSIuCSAgICAg ICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnByb2Nlc3NfcnVsZSgpIHsKICAgICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKICAgICMgQWRkIG9uZSBydWxlCiAgICAjCiAgICBhZGRfYV9ydWxlKCkgewog ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJIyBEZXRlcm1pbmUgdGhlIGZvcm1hdCBvZiB0aGUgY2xp ZW50CgkjCgljbGk9CgoJWyAtbiAiJGNsaWVudCIgXSAmJiBjYXNlICIkY2xpZW50IiBpbgoJICAg IC0pCgkJOzsKCSAgICBbMC05XSp8IVswLTldKikKCQkjCgkJIyBJUCBBZGRyZXNzIG9yIHN1Ym5l dAoJCSMKCQljbGk9Ii1zICRjbGllbnQiCgkJOzsKCSAgICAqKQoJCSMKCQkjIEFzc3VtZSB0aGF0 IHRoaXMgaXMgYSBkZXZpY2UgbmFtZQoJCSMKCQljbGk9Ii1pICRjbGllbnQiCgkJOzsKICAgICAg ICBlc2FjCgogICAgCWRlc3RfaW50ZXJmYWNlPQoKCVsgLW4gIiRzZXJ2ZXIiIF0gJiYgY2FzZSAi JHNlcnZlciIgaW4KCSAgICAtKQoJICAgIAlzZXJ2PQoJCTs7CgkgICAgWzAtOV0qfCFbMC05XSop CgkgICAgCXNlcnY9JHNlcnZlcgoJCTs7CgkgICAgKikKCQlkZXN0X2ludGVyZmFjZT0iLW8gJHNl cnZlciIKCQlzZXJ2PQoJCTs7Cgllc2FjCgkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkjIFNldHVwIFBST1RPQ09MLCBQT1JU IGFuZCBTVEFURSB2YXJpYWJsZXMKCSMKCXNwb3J0cz0iIgoJZHBvcnRzPSIiCglzdGF0ZT0iLW0g c3RhdGUgLS1zdGF0ZSBORVciCglwcm90bz0kcHJvdG9jb2wKCWFkZHI9JGFkZHJlc3MKICAgICAg ICBzZXJ2cG9ydD0kc2VydmVycG9ydAoKICAgICAgICBjYXNlICRwcm90byBpbgoJICAgIHRjcHx1 ZHApCgkgICAgCVsgLW4gIiRwb3J0IiBdICYmIFsgIngke3BvcnR9IiAhPSAieC0iIF0gJiYgXAoJ CSAgICBkcG9ydHM9Ii0tZHBvcnQgJHBvcnQiCgkJWyAtbiAiJGNwb3J0IiBdICYmIFsgIngke2Nw b3J0fSIgIT0gIngtIiBdICYmIFwKCQkgICAgc3BvcnRzPSItLXNwb3J0ICRjcG9ydCIKCQk7OwoJ ICAgIGljbXApCgkJWyAtbiAiJHBvcnQiIF0gJiYgZHBvcnRzPSItLWljbXAtdHlwZSAkcG9ydCIK CQlzdGF0ZT0iIgoJCTs7CgkgICAgYWxsKQoJCXByb3RvPQoJCTs7CgkgICAgcmVsYXRlZCkKCQlw cm90bz0KCQlzdGF0ZT0iLW0gc3RhdGUgLS1zdGF0ZSBSRUxBVEVEIgoJCTs7CgkgICAgKikKCQk7 OwoJZXNhYwoKCXByb3RvPSIke3Byb3RvOistcCAkcHJvdG99IgoKCWlmIFsgLXogIiRwcm90byIg LWEgLXogIiRjbGkiIC1hIC16ICIkc2VydiIgLWEgLXogIiRzZXJ2cG9ydCIgXTsgdGhlbgoJICAg IGVycm9yX21lc3NhZ2UgIldhcm5pbmcgLS0gUnVsZSBcIiRydWxlXCIgaXMgYSBQT0xJQ1kiCiAg ICAgICAgICAgIGVycm9yX21lc3NhZ2UgIiAgICAgICAgLS0gYW5kIHNob3VsZCBiZSBtb3ZlZCB0 byB0aGUgcG9saWN5IGZpbGUiCiAgICAgICAgZmkKCglbICIkdGFyZ2V0IiA9IFJFSkVDVCBdICYm IHRhcmdldD1yZWplY3QKCglpZiBbIC1uICIke3NlcnZ9JHtzZXJ2cG9ydH0iIF07IHRoZW4KCSAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKCSAgICAjIERlc3RpbmF0aW9uIGlzIGEgU3BlY2lmaWMgU2VydmVyIG9yIHdl J3JlIHJlZGlyZWN0aW5nIGEgcG9ydAoJICAgICMKCSAgICBpZiBbIC1uICIkYWRkciIgLWEgIiRh ZGRyIiAhPSAiJHNlcnYiIF07IHRoZW4KCQkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCQkjIE11c3QgdXNlIFByZXJvdXRpbmcg RE5BVAoJCSMKCQlpZiBbIC16ICIkTkFUX0VOQUJMRUQiIF07IHRoZW4KCSAgICAJICAgIGVycm9y X21lc3NhZ2UgXAogICAgICAgICAgICAgICAgICAgICJXYXJuaW5nIC0gUnVsZSByZXF1aXJlcyBO QVQ7IHJ1bGUgXCIkcnVsZVwiIGlnbm9yZWQiCgkgICAgCSAgICByZXR1cm4KCQlmaQoKCQlpZiBb ICIkdGFyZ2V0IiAhPSAiQUNDRVBUIiBdOyB0aGVuCgkJICAgIGVycm9yX21lc3NhZ2UgIldhcm5p bmcgLSBPbmx5IEFDQ0VQVCBydWxlcyBtYXkgc3BlY2lmeSAiIFwKICAgICAgICAgICAgICAgICAg ICAgICAgInBvcnQgbWFwcGluZzsgcnVsZSBcIiRydWxlXCIgaWdub3JlZCIKCSAgICAJICAgIHJl dHVybgoJCWZpCgoJCWlmIFsgIiRhZGRyIiAhPSAiJHthZGRyJToqfSIgXTsgdGhlbgoJCSAgICBz bmF0PSIke2FkZHIjKjp9IgoJCSAgICBhZGRyPSIke2FkZHIlOip9IgoJCWVsc2UKCQkgICAgc25h dD0iIgoJCWZpCgoJCVsgIiRhZGRyIiA9ICJhbGwiIF0gJiYgYWRkcj0gfHwgYWRkcj0iLWQgJGFk ZHIiCgoJCWlmIFsgLW4gIiRzZXJ2IiBdOyB0aGVuCgkJICAgIHNlcnZwb3J0PSIke3NlcnZwb3J0 Ois6JHNlcnZwb3J0fSIKCQkgICAgdGFyZ2V0MT0iRE5BVCAtLXRvLWRlc3RpbmF0aW9uICR7c2Vy dn0ke3NlcnZwb3J0fSIKCQllbHNlCgkJICAgIHRhcmdldDE9IlJFRElSRUNUIC0tdG8tcG9ydCAk c2VydnBvcnQiCgkJZmkKCgkJaWYgWyAiJHNvdXJjZSIgPSAiJEZXIiBdOyB0aGVuCgkJICAgIHJ1 bl9pcHRhYmxlcyAtdCBuYXQgLUEgT1VUUFVUICRwcm90byAkc3BvcnRzICRhZGRyIFwKCQkJJGRw b3J0cyAtaiAkdGFyZ2V0MQoJCWVsaWYgWyAtbiAiJGNsaSIgXTsgdGhlbgoJCSAgICBydW5faXB0 YWJsZXMgLXQgbmF0IC1BIFBSRVJPVVRJTkcgJHByb3RvICRjbGkgJHNwb3J0cyBcCgkJCSRhZGRy ICRkcG9ydHMgLWogJHRhcmdldDEKCQllbHNlCgkJICAgIGZvciBzb3VyY2VfaG9zdCBpbiAkc291 cmNlX2hvc3RzOyBkbwoJCQlydW5faXB0YWJsZXMgLXQgbmF0IC1BIFBSRVJPVVRJTkcgXAoJCQkg ICAgLWkgJHtzb3VyY2VfaG9zdCU6Kn0gXAoJCQkgICAgLXMgJHtzb3VyY2VfaG9zdCMqOn0gJHBy b3RvICRzcG9ydHMgXAoJCQkgICAgJGFkZHIgJGRwb3J0cyAtaiAkdGFyZ2V0MQoJCSAgICBkb25l CgkJZmkKCgkJWyAtbiAiJHNlcnZwb3J0IiBdICYmIGRwb3J0cz0iLS1kcG9ydCAke3NlcnZwb3J0 Iyo6fSIKCgkJaWYgWyAtbiAiJHNuYXQiIF07IHRoZW4KCQkgICAgaWYgWyAtbiAiJGNsaSIgXTsg dGhlbgoJCQlydW5faXB0YWJsZXMgLXQgbmF0IC1BIFBPU1RST1VUSU5HICRwcm90byAkY2xpIFwK CQkJJHNwb3J0cyAtZCAkc2VydiAkZHBvcnRzIC1qIFNOQVQgLS10by1zb3VyY2UgJHNuYXQKCQkg ICAgZWxzZQoJCQlmb3Igc291cmNlX2hvc3QgaW4gJHNvdXJjZV9ob3N0czsgZG8KCQkJICAgIHJ1 bl9pcHRhYmxlcyAtdCBuYXQgLUEgUE9TVFJPVVRJTkcgXAoJCQkJLXMgJHtzb3VyY2VfaG9zdCMq On0gJHByb3RvICRzcG9ydHMgXAoJCQkJLWQgJHNlcnYgJGRwb3J0cyAtaiBTTkFUIC0tdG8tc291 cmNlICRzbmF0CgkJCWRvbmUKCQkgICAgZmkKCQlmaQoJICAgIGZpCgoJICAgIHNlcnY9IiR7c2Vy djorLWQgJHNlcnZ9IgoKCSAgICBbIC1uICIkbG9nbGV2ZWwiIF0gJiYgcnVuX2lwdGFibGVzIC1B ICRjaGFpbiAkcHJvdG8gJHN0YXRlICRjbGkgXAoJCSRzcG9ydHMgJHNlcnYgJGRwb3J0cyAtaiBM T0cgJExPR1BBUk1TIC0tbG9nLXByZWZpeCBcCgkJIlNob3Jld2FsbDokY2hhaW46JGxvZ3Rhcmdl dDoiIC0tbG9nLWxldmVsICRsb2dsZXZlbAoJICAgIHJ1bl9pcHRhYmxlcyAtQSAkY2hhaW4gJHBy b3RvICRzdGF0ZSAkY2xpICRzcG9ydHMgXAoJCSRzZXJ2ICRkcG9ydHMgLWogJHRhcmdldAoJZWxz ZQoJICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCgkgICAgIyBEZXN0aW5hdGlvbiBpcyBqdXN0IGEgem9uZSBvciBh biBpbnRlcmZhY2UKCSAgICAjCgkgICAgWyAtbiAiJGFkZHIiIF0gJiYgZXJyb3JfbWVzc2FnZSBc CgkgICAgICAgICAgIldhcm5pbmc6IEFERFJFU1MgKCRhZGRyKSBpZ25vcmVkIGluIHJ1bGUgXCIk cnVsZVwiIgoKCSAgICBbIC1uICIkbG9nbGV2ZWwiIF0gJiYgcnVuX2lwdGFibGVzIC1BICRjaGFp biAkcHJvdG8gXAoJCSRkZXN0X2ludGVyZmFjZSAkc3RhdGUgJGNsaSAkc3BvcnRzICRkcG9ydHMg LWogTE9HIFwKCQkkTE9HUEFSTVMgLS1sb2ctcHJlZml4ICJTaG9yZXdhbGw6JGNoYWluOiRsb2d0 YXJnZXQ6IiBcCgkJLS1sb2ctbGV2ZWwgJGxvZ2xldmVsCgkJCgkgICAgcnVuX2lwdGFibGVzIC1B ICRjaGFpbiAkcHJvdG8gJGRlc3RfaW50ZXJmYWNlICRzdGF0ZSBcCgkJJGNsaSAkc3BvcnRzICRk cG9ydHMgLWogJHRhcmdldAoJZmkKICAgIH0KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMg UCByIG8gYyBlIHMgcyBfIFIgdSBsIGUgICAgUyB0IGEgciB0IHMgICAgSCBlIHIgZQogICAgIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwogICAgIyBQYXJzZSB0aGUgVGFyZ2V0IGFuZCBDbGllbnRzIGNvbHVt bnMKICAgICMKICAgIGlmIFsgIiR0YXJnZXQiID0gIiR7dGFyZ2V0JToqfSIgXTsgdGhlbgoJbG9n bGV2ZWw9CiAgICBlbHNlCglsb2dsZXZlbD0iJHt0YXJnZXQjKjp9IgoJdGFyZ2V0PSIke3Rhcmdl dCU6Kn0iCglleHBhbmR2IGxvZ2xldmVsCiAgICBmaQoKICAgIGxvZ3RhcmdldD0iJHRhcmdldCIK CiAgICBpZiBbICIkY2xpZW50cyIgPSAiJHtjbGllbnRzJToqfSIgXTsgdGhlbgoJY2xpZW50em9u ZT0iJGNsaWVudHMiCgljbGllbnRzPQogICAgZWxzZQogICAgICAgIGNsaWVudHpvbmU9IiR7Y2xp ZW50cyU6Kn0iCiAgICAgICAgY2xpZW50cz0iJHtjbGllbnRzIyo6fSIKICAgIGZpCiAgICAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCiAgICAjIFZhbGlkYXRlIHRoZSBTb3VyY2UgWm9uZQoKICAgIGlmIHZh bGlkYXRlX3pvbmUgJGNsaWVudHpvbmU7IHRoZW4KCXNvdXJjZT0kY2xpZW50em9uZQogICAgZWxz ZQoJZXJyb3JfbWVzc2FnZSAiV2FybmluZzogVW5kZWZpbmVkIENsaWVudCBab25lIC0gcnVsZSBc IiRydWxlXCIgaWdub3JlZCIKCXJldHVybgogICAgZmkKCiAgICBbICRzb3VyY2UgPSAkRlcgXSAm JiBzb3VyY2VfaG9zdHM9IHx8IGV2YWwgc291cmNlX2hvc3RzPVwiXCQke3NvdXJjZX1faG9zdHNc IgoKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgUGFyc2UgdGhlIHNlcnZlcnMgY29sdW1u CiAgICAjCiAgICBpZiBbICIkc2VydmVycyIgPSAiJHtzZXJ2ZXJzJToqfSIgXSA7IHRoZW4KCXNl cnZlcnpvbmU9IiRzZXJ2ZXJzIgoJc2VydmVycz0KCXNlcnZlcnBvcnQ9CiAgICBlbHNlCglzZXJ2 ZXJ6b25lPSIke3NlcnZlcnMlJToqfSIKCXNlcnZlcnM9IiR7c2VydmVycyMqOn0iCglpZiBbICIk c2VydmVycyIgIT0gIiR7c2VydmVycyU6Kn0iIF0gOyB0aGVuCgkgICAgc2VydmVycG9ydD0iJHtz ZXJ2ZXJzIyo6fSIKCSAgICBzZXJ2ZXJzPSIke3NlcnZlcnMlOip9IgoJZWxzZQoJICAgIHNlcnZl cnBvcnQ9CglmaQogICAgZmkKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgVmFsaWRhdGUg dGhlIGRlc3RpbmF0aW9uIHpvbmUKICAgICMKICAgIGlmIHZhbGlkYXRlX3pvbmUgJHNlcnZlcnpv bmU7IHRoZW4KCWRlc3Q9JHNlcnZlcnpvbmUKICAgIGVsc2UKCWVycm9yX21lc3NhZ2UgIldhcm5p bmc6IFVuZGVmaW5lZCBTZXJ2ZXIgWm9uZSAtIHJ1bGUgXCIkcnVsZVwiIGlnbm9yZWQiCglyZXR1 cm4KICAgIGZpCgogICAgY2hhaW49JHtzb3VyY2V9MiR7ZGVzdH0KICAgICMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKICAgICMgQ3JlYXRlIHRoZSBjYW5vbmxjYWwgY2hhaW4gaWYgaXQgZG9lc24ndCBleGlz dAogICAgIwogICAgZW5zdXJlY2hhaW4gJGNoYWluCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAg ICAjIEl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFyaW91cyBsaXN0cyBjcmVhdGluZyBpbmRpdmlkdWFs IHJ1bGVzCiAgICAjCiAgICBbICIkcG9ydHMiICAgPSAibm9uZSIgLW8gIiRwb3J0cyIgICA9ICJO b25lIiAtbyBcCiAgICAgICIkY3BvcnRzIiAgPSAibm9uZSIgLW8gIiRjcG9ydHMiICA9ICJOb25l IiAtbyBcCiAgICAgICIkY2xpZW50cyIgPSAibm9uZSIgLW8gIiRjbGllbnRzIiA9ICJOb25lIiAt byBcCiAgICAgICIkc2VydmVycyIgPSAibm9uZSIgLW8gIiRzZXJ2ZXJzIiA9ICJOb25lIiBdIHx8 IFwKCXsKCSAgICBmb3IgY2xpZW50IGluIGBzZXBhcmF0ZV9saXN0ICR7Y2xpZW50czo9LX1gOyBk bwoJCWZvciBzZXJ2ZXIgaW4gYHNlcGFyYXRlX2xpc3QgJHtzZXJ2ZXJzOj0tfWA7IGRvCgkJICAg IGZvciBwb3J0IGluIGBzZXBhcmF0ZV9saXN0ICR7cG9ydHM6PS19YDsgZG8KCQkJZm9yIGNwb3J0 IGluIGBzZXBhcmF0ZV9saXN0ICR7Y3BvcnRzOj0tfWA7IGRvCgkJCSAgICBhZGRfYV9ydWxlCgkJ CWRvbmUKICAgICAgICAJICAgIGRvbmUKCQlkb25lCiAgCSAgICBkb25lCgogIAkgICAgZWNobyAi ICAgUnVsZSBcIiRydWxlXCIgYWRkZWQuIgogICAgICAgIH0KfQojIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwojIFByb2Nlc3MgdGhlIHJ1bGVzIGZpbGUJCQkJCQkgICAgICAgIwojIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwpwcm9jZXNzX3J1bGVzKCkgIyAkMSA9IG5hbWUgb2YgcnVsZXMgZmlsZQp7CiAg ICBzdHJpcF9maWxlIHJ1bGVzCgogICAgd2hpbGUgcmVhZCB0YXJnZXQgY2xpZW50cyBzZXJ2ZXJz IHByb3RvY29sIHBvcnRzIGNwb3J0cyBhZGRyZXNzOyBkbwoJWyAtbiAiJHRhcmdldCIgXSAmJiBj YXNlICIkdGFyZ2V0IiBpbgoKCUFDQ0VQVCp8RFJPUCp8UkVKRUNUKikKCSAgICBleHBhbmR2IGNs aWVudHMgc2VydmVycyBwcm90b2NvbCBwb3J0cyBjcG9ydHMgYWRkcmVzcwoJICAgIHJ1bGU9ImBl Y2hvICR0YXJnZXQgJGNsaWVudHMgJHNlcnZlcnMgJHByb3RvY29sICRwb3J0cyAkY3BvcnRzICRh ZGRyZXNzYCIKCSAgICBwcm9jZXNzX3J1bGUKCSAgICA7OwoJKikKCSAgICBleHBhbmR2IGNsaWVu dHMgc2VydmVycyBwcm90b2NvbCBwb3J0cyBjcG9ydHMgYWRkcmVzcwoJICAgIHJ1bGU9ImBlY2hv ICR0YXJnZXQgJGNsaWVudHMgJHNlcnZlcnMgJHByb3RvY29sICRwb3J0cyAkY3BvcnRzICRhZGRy ZXNzYCIKCSAgICBlcnJvcl9tZXNzYWdlICJXYXJuaW5nOiBJbnZhbGlkIFRhcmdldCAtIHJ1bGUg XCIkcnVsZVwiIGlnbm9yZWQiCgkgICAgOzsKCWVzYWMKICAgIGRvbmUgPCAkVE1QX0RJUi9ydWxl cwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUHJvY2VzcyBhIHJlY29yZCBmcm9tIHRoZSB0 b3MgZmlsZQkJCQkJICAgICAgICMKIwkJCQkJCQkJCSAgICAgICAjCiMgVGhlIGNhbGxlciBoYXMg bG9hZGVkIHRoZSBjb2x1bW4gY29udGVudHMgZnJvbSB0aGUgcmVjb3JkIGludG8gdGhlIGZvbGxv d2luZyAjCiMgdmFyaWFibGVzOgkJCQkJCQkJICAgICAgICMKIwkJCQkJCQkJCSAgICAgICAjCiMg ICAgc3JjIGRzdCBwcm90b2NvbCBzcG9ydCBkcG9ydCB0b3MJCQkJCSAgICAgICAjCiMJCQkJCQkJ CQkgICAgICAgIwojIGFuZCBoYXMgbG9hZGVkIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhl aXIgdmFsdWVzIGluICJydWxlIi4JICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcHJv Y2Vzc190b3NfcnVsZSgpIHsKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgUGFyc2UgdGhl IGNvbnRlbnRzIG9mIHRoZSAnc3JjJyB2YXJpYWJsZQogICAgIwogICAgaWYgWyAiJHNyYyIgPSAi JHtzcmMlOip9IiBdOyB0aGVuCglzcmN6b25lPSIkc3JjIgoJc3JjPQogICAgZWxzZQoJc3Jjem9u ZT0iJHtzcmMlOip9IgoJc3JjPSIke3NyYyMqOn0iCiAgICBmaQoKICAgIHNvdXJjZT0KICAgICMK ICAgICMgVmFsaWRhdGUgdGhlIHNvdXJjZSB6b25lCiAgICAjCiAgICBpZiB2YWxpZGF0ZV96b25l ICRzcmN6b25lOyB0aGVuCglzb3VyY2U9JHNyY3pvbmUKICAgIGVsaWYgWyAiJHNyY3pvbmUiID0g ImFsbCIgXTsgdGhlbgoJc291cmNlPSJhbGwiCiAgICBlbHNlCgllcnJvcl9tZXNzYWdlICJXYXJu aW5nOiBVbmRlZmluZWQgU291cmNlIFpvbmUgLSBydWxlIFwiJHJ1bGVcIiBpZ25vcmVkIgoJcmV0 dXJuCiAgICBmaQoKICAgIFsgLW4gIiRzcmMiIF0gJiYgY2FzZSAiJHNyYyIgaW4KCVswLTldKnwh WzAtOV0qKQoJICAgICMKCSAgICAjIElQIEFkZHJlc3Mgb3Igc3VibmV0CgkgICAgIwoJICAgIHNy Yz0iLXMgJHNyYyIKCSAgICA7OwoJKikKCSAgICAjCgkgICAgIyBBc3N1bWUgdGhhdCB0aGlzIGlz IGEgZGV2aWNlIG5hbWUKCSAgICAjCgkgICAgc3JjPSItaSAkc3JjIgoJICAgIDs7CiAgICBlc2Fj CgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBQYXJzZSB0aGUgY29udGVudHMgb2YgdGhl ICdkc3QnIHZhcmlhYmxlCiAgICAjCiAgICBpZiBbICIkZHN0IiA9ICIke2RzdCU6Kn0iIF07IHRo ZW4KCWRzdHpvbmU9IiRkc3QiCglkc3Q9CiAgICBlbHNlCglkc3R6b25lPSIke2RzdCU6Kn0iCglk c3Q9IiR7ZHN0Iyo6fSIKZmkKCiAgICBkZXN0PQogICAgIwogICAgIyBWYWxpZGF0ZSB0aGUgZGVz dGluYXRpb24gem9uZQogICAgIwogICAgaWYgdmFsaWRhdGVfem9uZSAkZHN0em9uZTsgdGhlbgoJ ZGVzdD0kZHN0em9uZQogICAgZWxpZiBbICIkZHN0em9uZSIgPSAiYWxsIiBdOyB0aGVuCglkZXN0 PSJhbGwiCiAgICBlbHNlCgllcnJvcl9tZXNzYWdlIFwKCSAiV2FybmluZzogVW5kZWZpbmVkIERl c3RpbmF0aW9uIFpvbmUgLSBydWxlIFwiJHJ1bGVcIiBpZ25vcmVkIgoJcmV0dXJuCiAgICBmaQoK ICAgIFsgLW4gIiRkc3QiIF0gJiYgY2FzZSAiJGRzdCIgaW4KCVswLTldKnwhWzAtOV0qKQoJICAg ICMKCSAgICAjIElQIEFkZHJlc3Mgb3Igc3VibmV0CgkgICAgIwoJICAgIDs7CgkqKQoJICAgICMK CSAgICAjIEFzc3VtZSB0aGF0IHRoaXMgaXMgYSBkZXZpY2UgbmFtZQoJICAgICMKCSAgICBlcnJv cl9tZXNzYWdlIFwKCSAgICAgIldhcm5pbmc6IEludmFsaWQgRGVzdGluYXRpb24gLSBydWxlIFwi JHJ1bGVcIiBpZ25vcmVkIgoJICAgIHJldHVybgoJICAgIDs7CiAgICBlc2FjCgogICAgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwogICAgIyBTZXR1cCBQUk9UT0NPTCBhbmQgUE9SVCB2YXJpYWJsZXMKICAg ICMKICAgIHNwb3J0cz0iIgogICAgZHBvcnRzPSIiCgogICAgY2FzZSAkcHJvdG9jb2wgaW4KCXRj cHx1ZHB8NnwxNykKCSAgICBbIC1uICIkc3BvcnQiIF0gJiYgWyAieCR7c3BvcnR9IiAhPSAieC0i IF0gJiYgXAoJCXNwb3J0cz0iLS1zcG9ydCAkc3BvcnQiCgkgICAgWyAtbiAiJGRwb3J0IiBdICYm IFsgIngke2Rwb3J0fSIgIT0gIngtIiBdICYmIFwKCQlkcG9ydHM9Ii0tZHBvcnQgJGRwb3J0IgoJ ICAgIDs7CglpY21wKQoJICAgIFsgLW4gIiRkcG9ydCIgXSAmJiBbICJ4JHtkcG9ydH0iICE9ICJ4 LSIgXSAmJiBcCgkJZHBvcnRzPSItLWljbXAtdHlwZSAkZHBvcnQiCgkgICAgOzsKCWFsbCkKCSAg ICBwcm90b2NvbD0KCSAgICA7OwoJKikKCSAgICA7OwogICAgZXNhYwoKICAgIHByb3RvY29sPSIk e3Byb3RvY29sOistcCAkcHJvdG9jb2x9IgoKICAgIHRvcz0iLWogVE9TIC0tc2V0LXRvcyAkdG9z IgoKICAgIGNhc2UgIiRkc3R6b25lIiBpbgogICAgYWxsKQoJZHN0PTAuMC4wLjAvMAoJOzsKICAg ICopCglbIC16ICIkZHN0IiBdICYmIGV2YWwgZHN0PVwkJHtkc3R6b25lfV9ob3N0cwoJOzsKICAg IGVzYWMKCiAgICBmb3IgZGVzdCBpbiAkZHN0OyBkbwoJZGVzdD0iLWQgJGRlc3QiCgoJY2FzZSAk c3Jjem9uZSBpbgoJJEZXKQoJICAgIHJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLUEgb3V0dG9zIFwK CQkkcHJvdG9jb2wgJGRlc3QgJGRwb3J0cyAkc3BvcnRzICR0b3MKCSAgICA7OwoJYWxsKQoJICAg IHJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLUEgb3V0dG9zIFwKCQkkcHJvdG9jb2wgJGRlc3QgJGRw b3J0cyAkc3BvcnRzICR0b3MKCSAgICBydW5faXB0YWJsZXMgLXQgbWFuZ2xlIC1BIHByZXRvcyBc CgkJJHByb3RvY29sICRkZXN0ICRkcG9ydHMgJHNwb3J0cyAkdG9zCgkgICAgOzsKCSopCgkgICAg aWYgWyAtbiAiJHNyYyIgXTsgdGhlbgoJCXJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLUEgcHJldG9z ICRzcmMgXAoJCSAgICAkcHJvdG9jb2wgJGRlc3QgJGRwb3J0cyAkc3BvcnRzICR0b3MKCSAgICBl bHNlCgkJZXZhbCBpbnRlcmZhY2VzPVwkJHtzcmN6b25lfV9pbnRlcmZhY2VzCgoJCWZvciBpbnRl cmZhY2UgaW4gJGludGVyZmFjZXM7IGRvCgkJICAgIHJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLUEg cHJldG9zIC1pICRpbnRlcmZhY2UgXAoJCQkkcHJvdG9jb2wgJGRlc3QgJGRwb3J0cyAkc3BvcnRz ICR0b3MKCQlkb25lCgkgICAgZmkKCSAgICA7OwoJZXNhYwogICAgZG9uZQoKICAgIGVjaG8gIiAg IFJ1bGUgXCIkcnVsZVwiIGFkZGVkLiIKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFByb2Nl c3MgdGhlIHRvcyBmaWxlCQkJCQkJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnBy b2Nlc3NfdG9zKCkgIyAkMSA9IG5hbWUgb2YgdG9zIGZpbGUKewogICAgZWNobyAiUHJvY2Vzc2lu ZyAkMS4uLiIKCiAgICBydW5faXB0YWJsZXMgLXQgbWFuZ2xlIC1OIHByZXRvcwogICAgcnVuX2lw dGFibGVzIC10IG1hbmdsZSAtTiBvdXR0b3MKCiAgICBzdHJpcF9maWxlIHRvcyAkMQoKICAgIG15 Z3JlcCAiJHpvbmVwYXR0ZXJuXHxeYWxsXHxeJEZXIiAkVE1QX0RJUi90b3MgfCBcCiAgICB3aGls ZSByZWFkIHNyYyBkc3QgcHJvdG9jb2wgc3BvcnQgZHBvcnQgdG9zOyBkbwoJcnVsZT0iYGVjaG8g JHNyYyAkZHN0ICRwcm90b2NvbCAkc3BvcnQgJGRwb3J0ICR0b3NgIgoJcHJvY2Vzc190b3NfcnVs ZQogICAgZG9uZQoKICAgIHJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLUEgUFJFUk9VVElORyAtaiBw cmV0b3MKICAgIHJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLUEgT1VUUFVUICAgICAtaiBvdXR0b3MK fQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIExvYWQgYSBLZXJuZWwgTW9kdWxlCQkJCQkJCSAg ICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmxvYWRtb2R1bGUoKSAjICQxID0gbW9kdWxl IG5hbWUsICQyIC0gKiBhcmd1bWVudHMKewogICAgbG9jYWwgbW9kdWxlbmFtZT0kMQogICAgbG9j YWwgbW9kdWxlZmlsZQoKICAgIGlmIFsgLXogImBsc21vZCB8IGdyZXAgJG1vZHVsZW5hbWVgIiBd OyB0aGVuCglzaGlmdAoJbW9kdWxlZmlsZT0kTU9EVUxFU0RJUi8ke21vZHVsZW5hbWV9Lm8KCglp ZiBbIC1mICRtb2R1bGVmaWxlIF07IHRoZW4KCSAgICBpbnNtb2QgJG1vZHVsZWZpbGUgJCoKCSAg ICByZXR1cm4KCWZpCgkjCgkjIElmIHRoZSBtb2R1bGVzIGRpcmVjdG9yeSBjb250YWlucyBjb21w cmVzc2VkIG1vZHVsZXMgdGhlbiB3ZSdsbAoJIyBhc3N1bWUgdGhhdCBpbnNtb2QgY2FuIGxvYWQg dGhlbQoJIwoJbW9kdWxlZmlsZT0ke21vZHVsZWZpbGV9Lmd6CgoJaWYgWyAtZiAkbW9kdWxlZmls ZSBdOyB0aGVuCgkgICAgaW5zbW9kICRtb2R1bGVmaWxlICQqCglmaQogICAgZmkKfQojIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwojIERpc3BsYXkgZWxlbWVudHMgb2YgYSBsaXN0IHdpdGggbGVhZGlu ZyB3aGl0ZSBzcGFjZQkJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpc3BsYXlf bGlzdCgpICMgJDEgPSBMaXN0IFRpdGxlLCByZXN0IG9mICQqID0gbGlzdCB0byBkaXNwbGF5CnsK ICAgIFsgJCMgLWd0IDEgXSAmJiBlY2hvICIgICAkKiIKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwojIEFkZCBydWxlcyB0byB0aGUgImNvbW1vbiIgY2hhaW4gdG8gc2lsZW50bHkgZHJvcCBwYWNr ZXRzIGFkZHJlc3NlZCB0byBhbnkgb2YgIwojIHRoZSBwYXNzZWQgYWRkcmVzc2VzCQkJCQkJCSAg ICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRyb3BfYnJvYWRjYXN0cygpICMgJCogPSBi cm9hZGNhc3QgYWRkcmVzc2VzCnsKICAgIHdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KCXJ1bl9pcHRh YmxlcyAtQSBjb21tb24gLWQgJDEgLWogRFJPUAoJc2hpZnQKICAgIGRvbmUKfQojIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwojIEFkZCBwb2xpY3kgcnVsZSAoIGFuZCBwb3NzaWJseSBsb2dnaW5nIHJ1 bGUpIHRvIHRoZSBwYXNzZWQgY2hhaW4JICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK cG9saWN5X3J1bGVzKCkgIyAkMSA9IGNoYWluIHRvIGFkZCBydWxlcyB0bwogICAgICAgICAgICAg ICAjICQyID0gcG9saWN5CgkgICAgICAgIyAkMyA9IGxvZ2xldmVsCnsKICAgIGxvY2FsIHRhcmdl dD0iJDIiCgogICAgY2FzZSAiJHRhcmdldCIgaW4KICAgIEFDQ0VQVCkKICAgIAk7OwoKICAgIERS T1ApCiAgICAJcnVuX2lwdGFibGVzIC1BICQxIC1qIGNvbW1vbgoJOzsKICAgIFJFSkVDVCkKICAg IAlydW5faXB0YWJsZXMgLUEgJDEgLWogY29tbW9uCgl0YXJnZXQ9cmVqZWN0Cgk7OwogICAgKikK CWZhdGFsX2Vycm9yICJJbnZhbGlkIHBvbGljeSAoJHBvbGljeSkgZm9yICQxIHRvICQyIgoJOzsK CiAgICBlc2FjCgogICAgWyAkIyAtZXEgMyBdICYmIHJ1bl9pcHRhYmxlcyAtQSAkMSAtaiBMT0cg JExPR1BBUk1TIFwKCS0tbG9nLXByZWZpeCAiU2hvcmV3YWxsOiRjaGFpbjokcG9saWN5OiIgLS1s b2ctbGV2ZWwgJDMKICAgIHJ1bl9pcHRhYmxlcyAtQSAkMSAtaiAkdGFyZ2V0Cn0KIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIyBHZW5lcmF0ZSBkZWZhdWx0IHBvbGljeSAmIGxvZyBsZXZlbCBydWxl cyBmb3IgdGhlIHBhc3NlZCBjbGllbnQgJiBzZXJ2ZXIgICAgICMKIyB6b25lcwkJCQkJCQkJCSAg ICAgICAjCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNh bGxlZCB3aGVuIHRoZSBjYW5vbmljYWwgY2hhaW4gZm9yIHRoaXMgY2xpZW50L3NlcnZlciAjCiMg cGFpciBpcyBrbm93biB0byBleGlzdC4gSWYgdGhlIGRlZmF1bHQgcG9saWN5IGZvciB0aGlzIHBh aXIgc3BlY2lmaWVzIHRoZSAgICAjCiMgc2FtZSBjaGFpbiB0aGVuIHdlIGFkZCB0aGUgcG9saWN5 IChhbmQgbG9nZ2luZykgcnVsZSB0byB0aGUgY2Fub25pY2FsIGNoYWluOyAjCiMgb3RoZXJ3aXNl IGFkZCBhIHJ1bGUgdG8gdGhlIGNhbm9uaWNhbCBjaGFpbiB0byBqdW1wIHRvIHRoZSBhcHByb3By aWF0ZSAgICAgICAjCiMgcG9saWN5IGNoYWluLgkJCQkJCQkJICAgICAgICMKIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKZGVmYXVsdF9wb2xpY3koKSAjICQxID0gY2xpZW50ICQyID0gc2VydmVyCnsK ICAgIGxvY2FsIGNoYWluPSIkezF9MiR7Mn0iCiAgICBsb2NhbCBwb2xpY3k9CiAgICBsb2NhbCBs b2dsZXZlbD0KCiAgICBhcHBseV9kZWZhdWx0KCkKICAgIHsKCSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJIyBD b25zdHJ1Y3QgcG9saWN5IGNoYWluIG5hbWUKCSMKCWNoYWluMT0ke2NsaWVudH0yJHtzZXJ2ZXJ9 CgoJaWYgWyAiJHBvbGljeSIgPSBDT05USU5VRSBdOyB0aGVuCgkgICAgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCSAg ICAjIFRoZSBwb2xpY3kgaXMgQ09OVElOVUUgLS0gc2ltcGx5IGFkZCBhbnkgbG9nZ2luZyBydWxl IHRvIHRoZQoJICAgICMgY2Fub25pY2FsIGNoYWluCgkgICAgIwoJICAgIFsgLW4gIiRsb2dsZXZl bCIgXSAmJiBydW5faXB0YWJsZXMgLUEgJGNoYWluIC1qIExPRyAkTE9HUEFSTVMgXAoJICAgICAg ICAtLWxvZy1wcmVmaXggIlNob3Jld2FsbDokY2hhaW46JHBvbGljeToiIC0tbG9nLWxldmVsICRs b2dsZXZlbAoJZWxpZiBbICIkY2hhaW4iID0gIiRjaGFpbjEiIF07IHRoZW4KCSAgICAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwoJICAgICMgVGhlIHBvbGljeSBjaGFpbiBpcyB0aGUgY2Fub25pY2FsIGNoYWluOyBhZGQg cG9saWN5IHJ1bGUgdG8gaXQKCSAgICAjCgkgICAgcG9saWN5X3J1bGVzICRjaGFpbiAkcG9saWN5 IGBleHBhbmQgJGxvZ2xldmVsYAoJZWxzZQoJICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkgICAgIyBQb2xpY3kg Y2hhaW4gaXMgZGlmZmVyZW50OyBhZGQgYSBydWxlIHRvIGp1bXAgZnJvbSB0aGUgY2Fub25pY2Fs CgkgICAgIyBjaGFpbiB0byB0aGUgcG9saWN5IGNoYWluCgkgICAgIwoJICAgIHJ1bl9pcHRhYmxl cyAtQSAkY2hhaW4gLWogJGNoYWluMQoJZmkKCgllY2hvICIgICBQb2xpY3kgJHBvbGljeSBmb3Ig JDEgdG8gJDIuIgogICAgfQoKICAgIHdoaWxlIHJlYWQgY2xpZW50IHNlcnZlciBwb2xpY3kgbG9n bGV2ZWw7IGRvCgljYXNlICIkY2xpZW50IiBpbgoJYWxsKQoJICAgIGlmIFsgIiRzZXJ2ZXIiID0g IiQyIiAtbyAiJHNlcnZlciIgPSAiYWxsIiBdOyB0aGVuCgkJYXBwbHlfZGVmYXVsdCAkMSAkMgoJ CXJldHVybgoJICAgIGZpCgkgICAgOzsKCSopCgkgICAgaWYgIFsgIiRjbGllbnQiID0gIiQxIiBd ICYmIFwKCQlbICIkc2VydmVyIiA9ICJhbGwiIC1vICIkc2VydmVyIiA9ICIkMiIgXQoJICAgIHRo ZW4KCQlhcHBseV9kZWZhdWx0ICQxICQyCgkJcmV0dXJuCgkgICAgZmkKCSAgICA7OwoJZXNhYwog ICAgZG9uZSA8ICRUTVBfRElSL3BvbGljeQoKICAgIGZhdGFsX2Vycm9yICJFcnJvcjogTm8gZGVm YXVsdCBwb2xpY3kgZm9yIHpvbmUgJDEgdG8gem9uZSAkMiIKfQojIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwojIENvbXBsZXRlIGEgc3RhbmRhcmQgY2hhaW4KIwojCS0gcnVuIGFueSBzdXBwbGllZCB1 c2VyIGV4aXQKIwktIHNlYXJjaCB0aGUgcG9saWN5IGZpbGUgZm9yIGFuIGFwcGxpY2FibGUgcG9s aWN5IGFuZCBhZGQgcnVsZXMgYXMKIwkgIGFwcHJvcHJpYXRlCiMgICAgICAgLSBJZiBubyBhcHBs aWNhYmxlIHBvbGljeSBpcyBmb3VuZCwgYWRkIHJ1bGVzIGZvciBhbiBhc3N1bW1lZAojCSAgcG9s aWN5IG9mIERST1AgSU5GTwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpjb21wbGV0ZV9zdGFuZGFy ZF9jaGFpbigpICMgJDEgPSBjaGFpbiwgJDIgPSBzb3VyY2Ugem9uZSwgJDMgPSBkZXN0aW5hdGlv biB6b25lCnsKICAgIGxvY2FsIHBvbGljeT0KICAgIGxvY2FsIGxvZ2xldmVsPQoKICAgIHJ1bl91 c2VyX2V4aXQgJDEKCiAgICB3aGlsZSByZWFkIGNsaWVudCBzZXJ2ZXIgcG9saWN5IGxvZ2xldmVs OyBkbwoJY2FzZSAiJGNsaWVudCIgaW4KCWFsbCkKCSAgICBpZiBbICIkc2VydmVyIiA9ICIkMyIg LW8gIiRzZXJ2ZXIiID0gImFsbCIgXTsgdGhlbgoJCXBvbGljeV9ydWxlcyAkMSAkcG9saWN5ICRs b2dsZXZlbAoJCXJldHVybgoJICAgIGZpCgkgICAgOzsKCSopCgkgICAgaWYgIFsgIiRjbGllbnQi ID0gIiQyIiBdICYmIFwKCQlbICIkc2VydmVyIiA9ICJhbGwiIC1vICIkc2VydmVyIiA9ICIkMyIg XQoJICAgIHRoZW4KCQlwb2xpY3lfcnVsZXMgJDEgJHBvbGljeSAkbG9nbGV2ZWwKCQlyZXR1cm4K CSAgICBmaQoJICAgIDs7Cgllc2FjCiAgICBkb25lIDwgJFRNUF9ESVIvcG9saWN5CgogICAgcG9s aWN5X3J1bGVzICQxIERST1AgSU5GTwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgRmluZCB0 aGUgYXBwcm9wcmlhdGUgY2hhaW4gdG8gcGFzcyBwYWNrZXRzIGZyb20gYSBzb3VyY2Ugem9uZSB0 byBhCSAgICAgICAjCiMgZGVzdGluYXRpb24gem9uZQkJCQkJCQkgICAgICAgIwojCQkJCQkJCQkJ ICAgICAgICMKIyBJZiB0aGUgY2Fub25pY2FsIGNoYWluIGZvciB0aGlzIHpvbmUgcGFpciBleGlz dHMsIGVjaG8gaXQncyBuYW1lOyBvdGhlcndpc2UgICMKIyBsb2NhdGUgYW5kIGVjaG8gdGhlIG5h bWUgb2YgdGhlIGFwcHJvcHJpYXRlIHBvbGljeSBjaGFpbiAgICAgICAgICAgICAgICAgICAgICMK IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMKIyBUaGUgcm91dGluZSBza2lwcyBwb2xpY3kgY2hhaW5z IHRoYXQgZG9uJ3QgZXhpc3QuIFRoZXNlIGNoYWlucyBjb3JyZXNwb25kICAgICMKIyB0byB3aWxk LWNhcmQgQ09OVElOVUUgcG9saWNpZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcnVsZXNfY2hhaW4oKSAjICQx ID0gc291cmNlIHpvbmUsICQyID0gZGVzdGluYXRpb24gem9uZQp7CiAgICBsb2NhbCBjaGFpbj0k ezF9MiR7Mn0KCiAgICBoYXZlY2hhaW4gJGNoYWluICYmIHsgZWNobyAkY2hhaW47IHJldHVybjsg fQoKICAgIHdoaWxlIHJlYWQgY2xpZW50IHNlcnZlciBwb2xpY3kgbG9nbGV2ZWwgOyBkbwoJY2Fz ZSAiJGNsaWVudCIgaW4KCWFsbCkKCSAgICBpZiBbICIkc2VydmVyIiA9ICIkMiIgLW8gIiRzZXJ2 ZXIiID0gImFsbCIgXTsgdGhlbgoJICAgICAgICBjaGFpbj1hbGwyJHtzZXJ2ZXJ9CgkJaWYgaGF2 ZWNoYWluICRjaGFpbjsgdGhlbgoJCSAgICBlY2hvICRjaGFpbgoJCSAgICByZXR1cm4KCQlmaQoJ ICAgIGZpCgkgICAgOzsKCSopCgkgICAgaWYgIFsgIiRjbGllbnQiID0gIiQxIiBdICYmIFwKCQlb ICIkc2VydmVyIiA9ICJhbGwiIC1vICIkc2VydmVyIiA9ICIkMiIgXTsgdGhlbgoJCSAgICBjaGFp bj0ke2NsaWVudH0yJHtzZXJ2ZXJ9CgkJICAgIGlmIGhhdmVjaGFpbiAkY2hhaW47IHRoZW4KCQkJ ZWNobyAkY2hhaW4KCQkJcmV0dXJuCgkJICAgIGZpCgkgICAgZmkKCSAgICA7OwoJZXNhYwogICAg ZG9uZSA8ICRUTVBfRElSL3BvbGljeQoKICAgIGZhdGFsX2Vycm9yICJFcnJvcjogTm8gYXBwcm9w cmlhdGUgY2hhaW4gZm9yIHpvbmUgJDEgdG8gem9uZSAkMiIKfQojIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwojIFNldCB1cCBEeW5hbWljIE5BVCAoTWFzcXVlcmFkaW5nKQkJCQkJICAgICAgICMKIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKc2V0dXBfbWFzcSgpICMgJDEgPSBuYW1lIG9mIG1hc3EgZmls ZQp7CiAgICBzZXR1cF9vbmUoKSB7CgoJaWYgWyAiJGludGVyZmFjZSIgPSAiJHtpbnRlcmZhY2Ul Oip9IiBdOyB0aGVuCgkgICAgZGVzdG5ldD0iMC4wLjAuMC8wIgoJZWxzZQoJICAgIGRlc3RuZXQ9 IiR7aW50ZXJmYWNlIyo6fSIKCSAgICBpbnRlcmZhY2U9IiR7aW50ZXJmYWNlJToqfSIKCWZpCgoJ Y2FzZSAkc3VibmV0IGluCglbMC05XSp8IVswLTldKikKCSAgICA7OwoJKikKCSAgICBpcGFkZHI9 ImBydW5faXAgYWRkciBzaG93ICRzdWJuZXQgfCBteWdyZXAgJ2luZXQgJ2AiCgoJICAgIGlmIFsg LXogIiRpcGFkZHIiIF07IHRoZW4KCQlmYXRhbF9lcnJvciBcCgkJICAiSW50ZXJmYWNlICRzdWJu ZXQgbXVzdCBiZSB1cCBiZWZvcmUgU2hvcmV3YWxsIHN0YXJ0cyIKCSAgICBmaQoKCSAgICBzdWJu ZXQ9ImBlY2hvICRpcGFkZHIgfCBzZWQgcy8iICAgICIvLyB8IGN1dCAtZCcgJyAtZjJgIgoJICAg IFsgLXogImBlY2hvICIkc3VibmV0IiB8IGdyZXAgJy8nYCIgXSAmJiBzdWJuZXQ9IiR7c3VibmV0 fS8zMiIKCSAgICA7OwoJZXNhYwoKCXJ1bl9pcHRhYmxlcyAtdCBuYXQgLUEgUE9TVFJPVVRJTkcg LXMgJHN1Ym5ldCAtZCAkZGVzdG5ldCAtbyAkaW50ZXJmYWNlIFwKCSAgICAtaiBNQVNRVUVSQURF CgllY2hvICIgICBUbyAkZGVzdG5ldCBmcm9tICRzdWJuZXQgdGhyb3VnaCBpbnRlcmZhY2UgJGlu dGVyZmFjZSIKICAgIH0KCiAgICBzdHJpcF9maWxlIG1hc3EgJDEKCiAgICBbIC1uICIkTkFUX0VO QUJMRUQiIF0gJiYgZWNobyAiTWFzcXVlcmFkZWQgU3VibmV0cyBhbmQgSG9zdHM6IgoKICAgIHdo aWxlIHJlYWQgaW50ZXJmYWNlIHN1Ym5ldDsgZG8KCWlmIFsgLW4gIiRpbnRlcmZhY2UiIF07IHRo ZW4KCSAgICBleHBhbmR2IGludGVyZmFjZSBzdWJuZXQKCSAgICBbIC1uICIkTkFUX0VOQUJMRUQi IF0gJiYgc2V0dXBfb25lIHx8IFwKCQllcnJvcl9tZXNzYWdlICJXYXJuaW5nOiBOQVQgZGlzYWJs ZWQ7IG1hc3EgcnVsZSBpZ25vcmVkIgoJZmkKICAgIGRvbmUgPCAkVE1QX0RJUi9tYXNxCn0KIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTZXR1cCBJbnRyYXpvbmUgY2hhaW4gaWYgYXBwcm9wcmlh dGUJCQkJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnNldHVwX2ludHJhem9uZSgp ICMgJDEgPSB6b25lCnsKICAgIGV2YWwgaG9zdHM9XCQkezF9X2hvc3RzCgogICAgaWYgWyAiJGhv c3RzIiAhPSAiJHtob3N0cyUgKn0iIF0gfHwgXAoJaGF2ZV9pbnRlcmZhY2VzX2luX3pvbmVfd2l0 aF9vcHRpb24gJDEgbXVsdGkKICAgIHRoZW4KCWVuc3VyZWNoYWluICR7MX0yJHsxfQogICAgZmkK fQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUHJvY2VzcyBhIHJlY29yZCBmcm9tIHRoZSBibGFj a2xpc3QgZmlsZQkJCQkgICAgICAjCiMJCQkJCQkJCQkgICAgICAjCiMgICAkc3VibmV0ICAgICAg PSBhZGRyZXNzL3N1Ym5ldAkJCQkJICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnByb2Nl c3NfYmxhY2tsaXN0X3JlYygpIHsKICAgIGZvciBhZGRyIGluIGBzZXBhcmF0ZV9saXN0ICRzdWJu ZXRgOyBkbwoJWyAtbiAiJCAiIF0gJiYgXAoJICAgIHJ1bl9pcHRhYmxlcyAtQSBibGFja2xzdCAt cyAkYWRkciAtaiBMT0cgJExPR1BBUk1TIC0tbG9nLXByZWZpeCBcCgkJIlNob3Jld2FsbDpibGFj a2xzdDokQkxBQ0tMSVNUX0RJU1BPU0lUSU9OOiIgXAoJCS0tbG9nLWxldmVsICRCTEFDS0xJU1Rf TE9HTEVWRUwKCXJ1bl9pcHRhYmxlcyAtQSBibGFja2xzdCAtcyAkYWRkciAtaiAkZGlzcG9zaXRp b24KCgllY2hvICIgICAkYWRkciBhZGRlZCB0byBCbGFjayBMaXN0IgogICAgZG9uZQp9CiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKIyBTZXR1cCB0aGUgQmxhY2sgTGlzdAkJCQkJCQkgICAgICAjCiMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKc2V0dXBfYmxhY2tsaXN0KCkgewogICAgbG9jYWwgaW50ZXJm YWNlcz1gZmluZF9pbnRlcmZhY2VzX2J5X29wdGlvbiBibGFja2xpc3RgCiAgICBsb2NhbCBmPWBm aW5kX2ZpbGUgYmxhY2tsaXN0YAogICAgbG9jYWwgZGlzcG9zaXRpb249JEJMQUNLTElTVF9ESVNQ T1NJVElPTgoKICAgIGlmIFsgLW4gIiRpbnRlcmZhY2VzIiAtYSAtZiAkZiBdOyB0aGVuCiAgICAJ ZWNobyAiU2V0dGluZyB1cCBCbGFja2xpc3RpbmcuLi4iCgoJc3RyaXBfZmlsZSBibGFja2xpc3Qg JGYKCgljcmVhdGVjaGFpbiBibGFja2xzdCBubwoKCWZvciBpbnRlcmZhY2UgaW4gJGludGVyZmFj ZXM7IGRvCgkgICAgcnVuX2lwdGFibGVzIC1BIElOUFVUICAgLWkgJGludGVyZmFjZSAtaiBibGFj a2xzdAoJICAgIHJ1bl9pcHRhYmxlcyAtQSBGT1JXQVJEIC1pICRpbnRlcmZhY2UgLWogYmxhY2ts c3QKCSAgICBlY2hvICIgICBCbGFja2xpc3RpbmcgZW5hYmxlZCBvbiAkaW50ZXJmYWNlIgoJZG9u ZQoKCVsgIiRkaXNwb3NpdGlvbiIgPSBSRUpFQ1QgXSAmJiBkaXNwb3NpdGlvbj1yZWplY3QKCiAg ICAgICAgd2hpbGUgcmVhZCBzdWJuZXQ7IGRvCgkgICAgWyAtbiAiJHN1Ym5ldCIgXSAmJiBwcm9j ZXNzX2JsYWNrbGlzdF9yZWMKCWRvbmUgPCAkVE1QX0RJUi9ibGFja2xpc3QKCiAgICBmaQp9CiMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBSZWZyZXNoIHRoZSBCbGFjayBMaXN0CQkJCQkJICAgICAg IwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlZnJlc2hfYmxhY2tsaXN0KCkgewogICAgbG9jYWwg Zj1gZmluZF9maWxlIGJsYWNrbGlzdGAKICAgIGxvY2FsIGRpc3Bvc2l0aW9uPSRCTEFDS0xJU1Rf RElTUE9TSVRJT04KCiAgICBpZiBxdCBpcHRhYmxlcyAtTCBibGFja2xzdCAtbiA7IHRoZW4KCWVj aG8gIlJlZnJlc2hpbmcgQmxhY2sgTGlzdC4uLiIKCglzdHJpcF9maWxlIGJsYWNrbGlzdCAkZgoK CVsgIiRkaXNwb3NpdGlvbiIgPSBSRUpFQ1QgXSAmJiBkaXNwb3NpdGlvbj1yZWplY3QKCglydW5f aXB0YWJsZXMgLUYgYmxhY2tsc3QKCiAgICAgICAgd2hpbGUgcmVhZCBzdWJuZXQ7IGRvCgkgICAg WyAtbiAiJHN1Ym5ldCIgXSAmJiBwcm9jZXNzX2JsYWNrbGlzdF9yZWMKCWRvbmUgPCAkVE1QX0RJ Ui9ibGFja2xpc3QKCiAgICBmaQp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBWZXJpZnkgdGhh dCBrZXJuZWwgaGFzIG5ldGZpbHRlciBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnZlcmlmeV9vc192ZXJzaW9uKCkgewoK ICAgIG9zdmVyc2lvbj1gdW5hbWUgLXJgCgogICAgY2FzZSAkb3N2ZXJzaW9uIGluCiAgICAyLjQu KnwyLjUuKikKICAgICAgICA7OwogICAgKikKCWVjaG8gIlNob3Jld2FsbCB2ZXJzaW9uICR2ZXJz aW9uIGRvZXMgbm90IHdvcmsgd2l0aCBrZXJuZWwgdmVyc2lvbiAkb3N2ZXJzaW9uIgoJZXhpdCAy Cgk7OwogICAgZXNhYwp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgTG9hZCBrZXJuZWwgbW9k dWxlcyByZXF1aXJlZCBmb3IgU2hvcmV3YWxsCQkJCSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCmxvYWRfa2VybmVsX21vZHVsZXMoKSB7CgogICAgWyAteiAiJE1PRFVMRVNESVIiIF0g JiYKICAgIE1PRFVMRVNESVI9L2xpYi9tb2R1bGVzLyRvc3ZlcnNpb24va2VybmVsL25ldC9pcHY0 L25ldGZpbHRlcgoKICAgIG1vZHVsZXM9YGZpbmRfZmlsZSBtb2R1bGVzYAoKICAgIGlmIFsgLWYg JG1vZHVsZXMgLWEgLWQgJE1PRFVMRVNESVIgXTsgdGhlbgoJZWNobyAiTG9hZGluZyBNb2R1bGVz Li4uIgoJLiAkbW9kdWxlcwogICAgZmkKfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFBlcmZv cm0gSW5pdGlhbGl6YXRpb24gIAkJCQkgICAgICAgCQkgICAgICAgIwojCS0gRGVsZXRlIGFsbCBv bGQgcnVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IwojCS0gRGVsZXRlIGFsbCB1c2VyIGNoYWlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIwojCS0gU2V0IHRoZSBQT0xJQ1kgb24gYWxsIHN0YW5kYXJkIGNo YWlucyBhbmQgYWRkIGEgcnVsZSB0byBhbGxvdyBwYWNrZXRzIwojCSAgdGhhdCBhcmUgcGFydCBv ZiBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIwoj ICAgICAgIC0gRGV0ZXJtaW5lIHRoZSB6b25lcwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwppbml0 aWFsaXplX25ldGZpbHRlciAoKSB7CgogICAgZGVsZXRlY2hhaW4gc2hvcmV3YWxsCgogICAgcXQg bWtkaXIgLXAgJHtTVEFURURJUn0KCiAgICBbIC1uICIkTkFUX0VOQUJMRUQiIF0gJiYgZGVsZXRl X25hdAoKICAgIGRlbGV0ZV9wcm94eV9hcnAKCiAgICBbIC1uICIkTUFOR0xFX0VOQUJMRUQiIF0g JiYgXAoJcnVuX2lwdGFibGVzIC10IG1hbmdsZSAtRiAmJiBcCglydW5faXB0YWJsZXMgLXQgbWFu Z2xlIC1YCgogICAgWyAtbiAiJFRDX0VOQUJMRUQiIF0gJiYgZGVsZXRlX3RjCgogICAgcnVuX3Vz ZXJfZXhpdCBpbml0CgogICAgZWNobyAiRGV0ZXJtaW5pbmcgWm9uZXMuLi4iCgogICAgZGV0ZXJt aW5lX3pvbmVzCgogICAgWyAteiAiJHpvbmVzIiBdICYmIHN0YXJ0dXBfZXJyb3IgIkVSUk9SOiBO byBab25lcyBEZWZpbmVkIgoKICAgIGRpc3BsYXlfbGlzdCAiWm9uZXM6IiAkem9uZXMKCiAgICBl Y2hvICJEZXRlcm1pbmluZyBIb3N0cyBpbiBab25lcy4uLiIKCiAgICBkZXRlcm1pbmVfaW50ZXJm YWNlcwogICAgZGV0ZXJtaW5lX2hvc3RzCgogICAgZWNobyAiRGVsZXRpbmcgdXNlciBjaGFpbnMu Li4iCgogICAgc2V0cG9saWN5IElOUFVUIERST1AKICAgIHNldHBvbGljeSBPVVRQVVQgRFJPUAog ICAgc2V0cG9saWN5IEZPUldBUkQgRFJPUAoKICAgIGRlbGV0ZWFsbGNoYWlucwoKICAgIHNldGNv bnRpbnVlIEZPUldBUkQKICAgIHNldGNvbnRpbnVlIElOUFVUCiAgICBzZXRjb250aW51ZSBPVVRQ VVQKCiAgICBbIC1uICIkQ0xBTVBNU1MiIF0gJiYgXAogICAgICAgIHJ1bl9pcHRhYmxlcyAtQSBG T1JXQVJEIC1wIHRjcCBcCiAgICAgICAgICAgIC0tdGNwLWZsYWdzIFNZTixSU1QgU1lOIC1qIFRD UE1TUyAtLWNsYW1wLW1zcy10by1wbXR1CgogICAgY3JlYXRlY2hhaW4gaWNtcGRlZiBubwogICAg Y3JlYXRlY2hhaW4gY29tbW9uICBubwogICAgY3JlYXRlY2hhaW4gcmVqZWN0ICBubwp9CiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiMgQ29uc3RydWN0IHpvbmUtaW5kZXBlbmRlbnQgcnVsZXMJCQkJ CSAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFkZF9jb21tb25fcnVsZXMoKSB7CiAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIFJlamVjdCBSdWxlcwogICAgIwogICAgcnVuX2lw dGFibGVzIC1BIHJlamVjdCAtcCB0Y3AgLWogUkVKRUNUIC0tcmVqZWN0LXdpdGggdGNwLXJlc2V0 CiAgICBydW5faXB0YWJsZXMgLUEgcmVqZWN0IC1qIFJFSkVDVAogICAgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwogICAgIyBkcm9wdW5jbGVhbiBydWxlcwogICAgIwogICAgaW50ZXJmYWNlcz0iYGZpbmRf aW50ZXJmYWNlc19ieV9vcHRpb24gZHJvcHVuY2xlYW5gIgoKICAgIGlmIFsgLW4gIiRpbnRlcmZh Y2VzIiBdOyB0aGVuCgljcmVhdGVjaGFpbiBiYWRwa3Qgbm8KCiAgICAgICAgaWYgWyAtbiAiJExP R1VOQ0xFQU4iIF07IHRoZW4KCSAgICBsb2dvcHRpb25zPSIkTE9HUEFSQU1TIC0tbG9nLXByZWZp eCBTaG9yZXdhbGw6YmFkcGt0OkRST1A6IgogICAgICAgICAgICBsb2dvcHRpb25zPSIkbG9nb3B0 aW9ucyAtLWxvZy1sZXZlbCAkTE9HVU5DTEVBTiAtLWxvZy1pcC1vcHRpb25zIgoJICAgIHJ1bl9p cHRhYmxlcyAtQSBiYWRwa3QgLXAgdGNwIC1qIExPRyAkbG9nb3B0aW9ucyAtLWxvZy10Y3Atb3B0 aW9ucwoJICAgIHJ1bl9pcHRhYmxlcyAtQSBiYWRwa3QgLXAgIXRjcCAtaiBMT0cgJGxvZ29wdGlv bnMKCWZpCgogICAgICAgIHJ1bl9pcHRhYmxlcyAtQSBiYWRwa3QgLWogRFJPUAogICAgICAgIGVj aG8gIk1hbmdsZWQvSW52YWxpZCBQYWNrZXQgZmlsdGVyaW5nIGVuYWJsZWQgb246IgoKCWZvciBp bnRlcmZhY2UgaW4gJGludGVyZmFjZXM7IGRvCgkgICAgZm9yIGNoYWluIGluIElOUFVUIEZPUldB UkQ7IGRvCgkJcnVuX2lwdGFibGVzIC1BICRjaGFpbiAtaSAkaW50ZXJmYWNlIC0tbWF0Y2ggdW5j bGVhbiAtaiBiYWRwa3QKCSAgICBkb25lCgkgICAgZWNobyAiICAgJGludGVyZmFjZSIKCWRvbmUK ICAgIGZpCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIGxvZ3VuY2xlYW4gcnVsZXMKICAg ICMKICAgIGludGVyZmFjZXM9ImBmaW5kX2ludGVyZmFjZXNfYnlfb3B0aW9uIGxvZ3VuY2xlYW5g IgoKICAgIGlmIFsgLW4gIiRpbnRlcmZhY2VzIiBdOyB0aGVuCgljcmVhdGVjaGFpbiBsb2dwa3Qg bm8KCiAgICAgICAgWyAteiIkTE9HVU5DTEVBTiIgXSAmJiBMT0dVTkNMRUFOPWluZm8KCWxvZ29w dGlvbnM9IiRMT0dQQVJBTVMgLS1sb2ctcHJlZml4IFNob3Jld2FsbDpsb2dwa3Q6TE9HOiIKCWxv Z29wdGlvbnM9IiRsb2dvcHRpb25zIC0tbG9nLWxldmVsICRMT0dVTkNMRUFOIC0tbG9nLWlwLW9w dGlvbnMiCglydW5faXB0YWJsZXMgLUEgbG9ncGt0IC1wIHRjcCAtaiBMT0cgJGxvZ29wdGlvbnMg LS1sb2ctdGNwLW9wdGlvbnMKCXJ1bl9pcHRhYmxlcyAtQSBsb2dwa3QgLXAgIXRjcCAtaiBMT0cg JGxvZ29wdGlvbnMKCiAgICAgICAgZWNobyAiTWFuZ2xlZC9JbnZhbGlkIFBhY2tldCBMb2dnaW5n IGVuYWJsZWQgb246IgoKCWZvciBpbnRlcmZhY2UgaW4gJGludGVyZmFjZXM7IGRvCgkgICAgZm9y IGNoYWluIGluIElOUFVUIEZPUldBUkQ7IGRvCgkJcnVuX2lwdGFibGVzIC1BICRjaGFpbiAtaSAk aW50ZXJmYWNlIC0tbWF0Y2ggdW5jbGVhbiAtaiBsb2dwa3QKCSAgICBkb25lCgkgICAgZWNobyAi ICAgJGludGVyZmFjZSIKCWRvbmUKICAgIGZpCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAj IENvbW1vbiBJQ01QIHJ1bGVzCiAgICAjCiAgICBpY21wZGVmPWBmaW5kX2ZpbGUgaWNtcGRlZmAK CiAgICBpZiBbIC1mICRpY21wZGVmIF07IHRoZW4KCS4gJGljbXBkZWYKICAgIGVsc2UKCS4gYGZp bmRfZmlsZSBpY21wLmRlZmAKICAgIGZpCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIENv bW1vbiBydWxlcyBpbiBlYWNoIGNoYWluCiAgICAjCiAgICBjb21tb249YGZpbmRfZmlsZSBjb21t b25gCgogICAgaWYgWyAtZiAkY29tbW9uIF07IHRoZW4KCS4gJGNvbW1vbgogICAgZWxzZQoJLiBg ZmluZF9maWxlIGNvbW1vbi5kZWZgCiAgICBmaQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAj IEJST0FEQ0FTVFMKICAgICMKICAgIGZvciB6b25lIGluICR6b25lcyBtdWx0aTsgZG8KCWV2YWwg aW50ZXJmYWNlcz1cJCR7em9uZX1faW50ZXJmYWNlcwoKCVsgLW4gIiRpbnRlcmZhY2VzIiBdICYm IGRyb3BfYnJvYWRjYXN0cyBgZmluZF9icm9hZGNhc3QgJHpvbmVgCglzZXR1cF9pbnRyYXpvbmUg JHpvbmUKICAgIGRvbmUKCiAgICBub3JmYzE5MThfaW50ZXJmYWNlcz0iYGZpbmRfaW50ZXJmYWNl c19ieV9vcHRpb24gbm9yZmMxOTE4YCIKCiAgICBpZiBbIC1uICIkbm9yZmMxOTE4X2ludGVyZmFj ZXMiIF07IHRoZW4KCWVjaG8gIkVuYWJsaW5nIFJGQzE5MTggRmlsdGVyaW5nIgoKCWNyZWF0ZWNo YWluIHJmYzE5MTggbm8KCVsgLW4gIiRNQU5HTEVfRU5BQkxFRCIgXSAmJiBydW5faXB0YWJsZXMg LXQgbWFuZ2xlIC1OIHJmYzE5MTgKCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJIyBEb24ndCBnZXQgZXhjaXRl ZCBhYm91dCBsaW1pdGVkIGJyb2FkY2FzdAoKCXJ1bl9pcHRhYmxlcyAtQSByZmMxOTE4IC1kIDI1 NS4yNTUuMjU1LjI1NSAtaiBSRVRVUk4KCgkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCSMgMjQwLjAuMC4wLzQg aXNuJ3QgbWVudGlvbmVkIGluIFJGQyAxOTE4IGJ1dCBzaW5jZSBpdCBpcyByZXNlcnZlZCwgd2UK CSMgaW5jbHVkZSBpdCBoZXJlLiBTYW1lIHdpdGggMC4wLjAuMC84LCAxMjcuMC4wLjAvOCBhbmQg MTkyLjAuMi4wLzI0CgkjCglkaXNwPSJMT0cgLS1sb2ctcHJlZml4ICJTaG9yZXdhbGw6cmZjMTkx ODpEUk9QOiIgLS1sb2ctbGV2ZWwgaW5mbyIKCglmb3Igc3VibmV0IGluICcwLjAuMC4wLzgnICcx MC4wLjAuMC84JyAnMTI3LjAuMC4wLzgnICcxOTIuMC4yLjAvMjQnIFwKCQknMTkyLjE2OC4wLjAv MTYnICcxNzIuMTYuMC4wLzEyJyAnMjQwLjAuMC4wLzQnOyBkbwoJICAgIHJ1bl9pcHRhYmxlcyAt QSByZmMxOTE4IC1zICRzdWJuZXQgLWogJGRpc3AgJExPR1BBUk1TCgkgICAgcnVuX2lwdGFibGVz IC1BIHJmYzE5MTggLXMgJHN1Ym5ldCAtaiBEUk9QCgkgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCSAgICAjIElm IHBhY2tldCBtYW5nbGluZyBpcyBlbmFibGVkLCBtYXJrIGFueSBwYWNrZXRzIHdpdGggYW4gUkZD MTkxOAoJICAgICMgZGVzdGluYXRpb24KCSAgICAjCgkgICAgaWYgWyAtbiAiJE1BTkdMRV9FTkFC TEVEIiBdOyB0aGVuCgkgCXJ1bl9pcHRhYmxlcyAtdCBtYW5nbGUgLUEgcmZjMTkxOCBcCgkJICAg ICAgICAtZCAkc3VibmV0IC1qIE1BUksgLS1zZXQtbWFyayAzMjc2NwoJICAgIGZpCglkb25lCgkj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKCSMgQWxzbyBkcm9wIE1pY3Jvc29mdCdzIGF1dG8tY29uZmlndXJhdGlv biBjbGFzcyBCIGJ1dCBkb24ndCBzcXVhawoJIyBhYm91dCBpdAoJIwoJcnVuX2lwdGFibGVzIC1B IHJmYzE5MTggLXMgMTY5LjI1NC4wLjAvMTYgLWogRFJPUAogICAgICAgICMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwoJIyBJZiBwYWNrZXQgbWFuZ2xpbmcgaXMgZW5hYmxlZCwgZHJvcCBhbnkgcGFja2V0cyB3aG9z ZSBvcmlnaW5hbAoJIyBkZXN0aW5hdGlvbiB3YXMgYW4gUkZDMTkxOCBhZGRyZXNzCgkjCglpZiBb IC1uICIkTUFOR0xFX0VOQUJMRUQiIF07IHRoZW4KCSAgICBydW5faXB0YWJsZXMgLUEgcmZjMTkx OCAtbSBtYXJrIC0tbWFyayAzMjc2Ny8zMjc2NyBcCgkgICAgICAgICAtaiAkZGlzcCAkTE9HUEFS QU1TCgkgICAgcnVuX2lwdGFibGVzIC1BIHJmYzE5MTggLW0gbWFyayAtLW1hcmsgMzI3NjcvMzI3 NjcgLWogRFJPUAogICAgICAgIGZpCgoJZm9yIGludGVyZmFjZSBpbiAkbm9yZmMxOTE4X2ludGVy ZmFjZXM7IGRvCgkgICAgcnVuX2lwdGFibGVzIC1BIElOUFVUICAgLWkgJGludGVyZmFjZSAtaiBy ZmMxOTE4CgkgICAgcnVuX2lwdGFibGVzIC1BIEZPUldBUkQgLWkgJGludGVyZmFjZSAtaiByZmMx OTE4Cglkb25lCgogICAgZmkKICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgUHJvY2VzcyBC bGFjayBMaXN0CiAgICAjCiAgICBzZXR1cF9ibGFja2xpc3QKCiAgICAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiAgICAjIEVuYWJsZSB0aGUgTG9vcGJhY2sgaW50ZXJmYWNlCiAgICAjCiAgICBydW5faXB0 YWJsZXMgLUEgSU5QVVQgICAtaSBsbyAtaiBBQ0NFUFQKICAgIHJ1bl9pcHRhYmxlcyAtQSBPVVRQ VVQgIC1vIGxvIC1qIEFDQ0VQVAogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBFbmFibGUg aWNtcCBvdXRwdXQKICAgICMKICAgIHJ1bl9pcHRhYmxlcyAtQSBPVVRQVVQgLXAgaWNtcCAtaiBB Q0NFUFQKCiAgICBmb3IgZiBpbiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi8qL3JwX2ZpbHRlcjsg ZG8KCWVjaG8gMCA+ICRmCiAgICBkb25lCgogICAgaW50ZXJmYWNlcz0iYGZpbmRfaW50ZXJmYWNl c19ieV9vcHRpb24gcm91dGVmaWx0ZXJgIgoKICAgIGlmIFsgLW4gIiRpbnRlcmZhY2VzIiBdOyB0 aGVuCgllY2hvICJTZXR0aW5nIHVwIEtlcm5lbCBSb3V0ZSBGaWx0ZXJpbmcuLi4iCgoJZm9yIGlu dGVyZmFjZSBpbiAkaW50ZXJmYWNlczsgZG8KCSAgICBmaWxlPS9wcm9jL3N5cy9uZXQvaXB2NC9j b25mLyRpbnRlcmZhY2UvcnBfZmlsdGVyCgkgICAgaWYgWyAtZiAkZmlsZSBdOyB0aGVuCgkJZWNo byAxID4gJGZpbGUKCSAgICBlbHNlCgkJZXJyb3JfbWVzc2FnZSBcCgkJICJXYXJuaW5nOiBDYW5u b3Qgc2V0IHJvdXRlIGZpbHRlcmluZyBvbiAkaW50ZXJmYWNlIgoJICAgIGZpCglkb25lCiAgICBm aQoKICAgIGNhc2UgIiRJUF9GT1JXQVJESU5HIiBpbgogICAgW09vXW4pCiAgICAJZWNobyAxID4g L3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQKCWVjaG8gIklQIEZvcndhcmRpbmcgRW5hYmxl ZCIKCTs7CiAgICBbT29dZmYpCiAgICAgICAgZWNobyAwID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lw X2ZvcndhcmQKCWVjaG8gIklQIEZvcndhcmRpbmcgRGlzYWJsZWQhIgogICAgICAgIDs7CiAgICBl c2FjCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBTY2FuIHRoZSBwb2xpY3kgZmlsZSBkZWZp bmluZyB0aGUgbmVjZXNzYXJ5IGNoYWlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyBB ZGQgdGhlIGFwcHJvcHJpYXRlIHBvbGljeSBydWxlKHMpIHRvIHRoZSBlbmQgb2YgZWFjaCBjYW5v bmljYWwgY2hhaW4JICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKYXBwbHlfcG9saWN5 X3J1bGVzKCkgewoKICAgIHdoaWxlIHJlYWQgY2xpZW50IHNlcnZlciBwb2xpY3kgbG9nbGV2ZWwg OyBkbwogICAgCXZhbGlkYXRlX3pvbmUgJGNsaWVudAoJdmFsaWRhdGVfem9uZSAkc2VydmVyCgoJ Y2hhaW49JHtjbGllbnR9MiR7c2VydmVyfQoKCWlmICEgaGF2ZWNoYWluICRjaGFpbjsgdGhlbgoJ ICAgIGlmIFsgIiRjbGllbnQiID0gImFsbCIgLW8gIiRzZXJ2ZXIiID0gImFsbCIgXTsgdGhlbgoJ ICAgICAgICAjCgkJIyBBIHdpbGQtY2FyZCBydWxlLiBDcmVhdGUgdGhlIGNoYWluIGFuZCBhZGQg cG9saWN5CgkJIyBydWxlcyBpZiB0aGUgcG9saWN5IGlzbid0IENPTlRJTlVFCgkJIwoJCWlmIFsg IiRwb2xpY3kiICE9IENPTlRJTlVFIF07IHRoZW4KCSAgICAgICAgICAgY3JlYXRlY2hhaW4gJGNo YWluCgkJICAgcG9saWN5X3J1bGVzICRjaGFpbiAkcG9saWN5IGBleHBhbmQgJGxvZ2xldmVsYAoJ CWZpCgkgICAgZWxzZQoJCSMKCQkjIFRoaXMgcG9saWN5IGNoYWluIGlzIGFsc28gYSBjYW5vbmlj YWwgY2hhaW4gLS0gY3JlYXRlIGl0CgkJIwoJCWNyZWF0ZWNoYWluICRjaGFpbgoJICAgIGZpCglm aQogICAgZG9uZSA8ICRUTVBfRElSL3BvbGljeQoKICAgIGZvciB6b25lIGluICRGVyAkem9uZXM7 IGRvCglmb3Igem9uZTEgaW4gJEZXICR6b25lczsgZG8KCSAgICBjaGFpbj0ke3pvbmV9MiR7em9u ZTF9CgkgICAgaWYgaGF2ZWNoYWluICRjaGFpbjsgdGhlbgoJCXJ1bl91c2VyX2V4aXQgJGNoYWlu CgkJZGVmYXVsdF9wb2xpY3kgJHpvbmUgJHpvbmUxCgkgICAgZmkKCWRvbmUKICAgIGRvbmUKfQoj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEFjdGl2YXRlIHRoZSBydWxlcwkJCQkJCQkgICAgICAg IwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphY3RpdmF0ZV9ydWxlcygpIHsKCiAgICBmb3Igem9u ZSBpbiBtdWx0aSAkem9uZXM7IGRvCglldmFsIHNvdXJjZV9ob3N0cz1cJCR7em9uZX1faG9zdHMK Cglmb3IgaG9zdCBpbiAkc291cmNlX2hvc3RzOyBkbwoJICAgIGludGVyZmFjZT0ke2hvc3QlOip9 CgkgICAgc3VibmV0PSR7aG9zdCMqOn0KCSAgICBjaGFpbj1JTlBVVAoKCSAgICBpZiBbICIkem9u ZSIgIT0gIm11bHRpIiBdOyB0aGVuCgkJIwoJCSMgSWYgd2UgaGF2ZSBhICdtdWx0aTJmdycgY2hh aW4gYW5kIHRoZSBjdXJyZW50IGludGVyZmFjZSBpcwoJCSMgaW4gdGhlICdtdWx0aScgcHNldWRv LXpvbmUsIHRoZW4gd2Ugd2lsbCBhZGQgdGhlIHJ1bGUgdG8KCQkjIG11bHRpMmZ3IHJhdGhlciB0 aGFuIHRvIElOUFVUCgkJIwoJICAgIAlpZiBoYXZlY2hhaW4gbXVsdGkyZnc7IHRoZW4KCSAgICAJ ICAgIGZvciBpbnRlcmZhY2UxIGluICRtdWx0aV9pbnRlcmZhY2VzOyBkbwoJICAgIAkgICAgCVsg IiRpbnRlcmZhY2UiID0gIiRpbnRlcmZhY2UxIiBdICYmIFwKCQkJICAgIGNoYWluPW11bHRpMmZ3 ICYmIGJyZWFrCiAgICAgICAgICAgCSAgICBkb25lCiAgICAgICAgICAgCWZpCgoJICAgIAlydW5f aXB0YWJsZXMgLUEgT1VUUFVUIC1vIFwKCSAgICAJICAgICRpbnRlcmZhY2UgLWQgJHN1Ym5ldCAt aiBgcnVsZXNfY2hhaW4gJEZXICR6b25lYAogICAgICAgICAgICBmaQoKCSAgICBydW5faXB0YWJs ZXMgLUEgJGNoYWluIC1pICRpbnRlcmZhY2UgLXMgJHN1Ym5ldCBcCgkJLWogYHJ1bGVzX2NoYWlu ICR6b25lICRGV2AKCWRvbmUKCglbICIkem9uZSIgIT0gbXVsdGkgXSAmJiBmb3Igem9uZTEgaW4g JHpvbmVzOyBkbwoJICAgIGV2YWwgZGVzdF9ob3N0cz1cJCR7em9uZTF9X2hvc3RzCgoJICAgIGNo YWluPSJgcnVsZXNfY2hhaW4gJHpvbmUgJHpvbmUxYCIKCgkgICAgZm9yIGhvc3QgaW4gJHNvdXJj ZV9ob3N0czsgZG8KCQlpbnRlcmZhY2U9JHtob3N0JToqfQoJCXN1Ym5ldD0ke2hvc3QjKjp9CgoJ CWZvciBob3N0MSBpbiAkZGVzdF9ob3N0czsgZG8KCQkgICAgaW50ZXJmYWNlMT0ke2hvc3QxJToq fQoJCSAgICBzdWJuZXQxPSR7aG9zdDEjKjp9CgoJCSAgICBbICRpbnRlcmZhY2UgPSAkaW50ZXJm YWNlMSAtYSAieCRzdWJuZXQiID0gIngkc3VibmV0MSIgXSB8fFwKCQkJcnVuX2lwdGFibGVzIC1B IEZPUldBUkQgLWkgJGludGVyZmFjZSAtcyAkc3VibmV0IFwKCQkJICAgIC1vICRpbnRlcmZhY2Ux IC1kICRzdWJuZXQxIC1qICRjaGFpbgoJCWRvbmUKCSAgICBkb25lCglkb25lCiAgICBkb25lCgog ICAgd2hpbGUgcmVhZCB6b25lIGludGVyZmFjZSBicm9hZGNhc3Qgb3B0aW9uczsgZG8KCVsgIngk em9uZSIgPSAieC0iIF0gJiYgem9uZT1tdWx0aQoJZm9yIHogaW4gJHpvbmVzOyBkbwoJICAgIFsg IngkeiIgPSAieCR6b25lIiBdICYmIFwKCQlleHBhbmR2IGludGVyZmFjZSBvcHRpb25zICYmIFwK CQlmb3Igb3B0aW9uIGluIGBzZXBhcmF0ZV9saXN0ICRvcHRpb25zYDsgZG8KCQkgICAgWyAiJG9w dGlvbiIgPSAibXVsdGkiIF0gJiYgXAoJCQlydW5faXB0YWJsZXMgLUEgRk9SV0FSRCAtaSAkaW50 ZXJmYWNlIFwKCQkgICAgCQktbyAkaW50ZXJmYWNlIC1qICR7em9uZX0yJHt6b25lfSAmJiBcCgkJ CWJyZWFrIDEKICAgICAgICAJZG9uZQoJZG9uZQogICAgZG9uZSA8ICRUTVBfRElSL2ludGVyZmFj ZXMKCiAgICBjb21wbGV0ZV9zdGFuZGFyZF9jaGFpbiBJTlBVVCBhbGwgJEZXCiAgICBjb21wbGV0 ZV9zdGFuZGFyZF9jaGFpbiBPVVRQVVQgJEZXIGFsbAogICAgY29tcGxldGVfc3RhbmRhcmRfY2hh aW4gRk9SV0FSRCBhbGwgYWxsCgogICAgcnVuX2lwdGFibGVzIC1EIElOUFVUIDEKICAgIHJ1bl9p cHRhYmxlcyAtRCBPVVRQVVQgMQogICAgcnVuX2lwdGFibGVzIC1EIEZPUldBUkQgMQp9CiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiMgU3RhcnQvUmVzdGFydCB0aGUgRmlyZXdhbGwJCQkJCQkgICAg ICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkZWZpbmVfZmlyZXdhbGwoKSAjICQxID0gQ29t bWFuZCAoU3RhcnQgb3IgUmVzdGFydCkKewogICAgZWNobyAiJHsxfWluZyBTaG9yZXdhbGwuLi4i CgogICAgdmVyaWZ5X29zX3ZlcnNpb24KCiAgICBsb2FkX2tlcm5lbF9tb2R1bGVzCgogICAgZWNo byAiSW5pdGlhbGl6aW5nLi4uIgoKICAgIGluaXRpYWxpemVfbmV0ZmlsdGVyCgogICAgZWNobyAi Q29uZmlndXJpbmcgUHJveHkgQVJQIGFuZCBOQVQiCgogICAgc2V0dXBfcHJveHlfYXJwCiAgICBz ZXR1cF9uYXQKCiAgICBlY2hvICJBZGRpbmcgQ29tbW9uIFJ1bGVzIgoKICAgIGFkZF9jb21tb25f cnVsZXMKCiAgICB0dW5uZWxzPWBmaW5kX2ZpbGUgdHVubmVsc2AKCiAgICBbIC1mICR0dW5uZWxz IF0gJiYgXAoJZWNobyAiUHJvY2Vzc2luZyAkdHVubmVscy4uLiIgJiYgc2V0dXBfdHVubmVscyAk dHVubmVscwoKICAgIGNoYWlucz0iYHJ1bl9pcHRhYmxlcyAtTCAtbiB8IG15Z3JlcCBeQ2hhaW4g fCBjdXQgLWQnICcgLWYyYCIKICAgIGNoYWlucz1gZWNobyAkY2hhaW5zYAoKICAgIHJ1bGVzPWBm aW5kX2ZpbGUgcnVsZXNgCgogICAgZWNobyAiUHJvY2Vzc2luZyAkcnVsZXMuLi4iCgogICAgcHJv Y2Vzc19ydWxlcyAkcnVsZXMKCiAgICBlY2hvICJBZGRpbmcgcnVsZXMgZm9yIERIQ1AiCgogICAg Zm9yIGludGVyZmFjZSBpbiBgZmluZF9pbnRlcmZhY2VzX2J5X29wdGlvbiBkaGNwYDsgZG8KCWlw dGFibGVzIC1BIElOUFVUICAtcCB1ZHAgLWkgJGludGVyZmFjZSAtLWRwb3J0IDY3OjY4IC1qIEFD Q0VQVAoJaXB0YWJsZXMgLUEgT1VUUFVUIC1wIHVkcCAtbyAkaW50ZXJmYWNlIC0tZHBvcnQgNjc6 NjggLWogQUNDRVBUCiAgICBkb25lCgogICAgZWNobyAiU2V0dGluZyB1cCBJQ01QIEVjaG8gaGFu ZGxpbmcuLi4iCgogICAgbm9waW5nX2ludGVyZmFjZXM9ImBmaW5kX2ludGVyZmFjZXNfYnlfb3B0 aW9uIG5vcGluZ2AiCgogICAgZm9yIHpvbmUgaW4gJHpvbmVzIG11bHRpOyBkbwoJZXZhbCBpbnRl cmZhY2VzPVwkJHt6b25lfV9pbnRlcmZhY2VzCgoJZm9yIGludGVyZmFjZSBpbiAkaW50ZXJmYWNl czsgZG8KCSAgICBbIC1uICJgZWNobyAkbm9waW5nX2ludGVyZmFjZXMgfCBncmVwICRpbnRlcmZh Y2VgIiBdICYmIFwKCQl0YXJnZXQ9RFJPUCB8fCB0YXJnZXQ9QUNDRVBUCgkgICAgYWRkcnVsZSAk e3pvbmV9MiR7Rld9IC1pICRpbnRlcmZhY2UgXAoJCS1wIGljbXAgLS1pY21wLXR5cGUgZWNoby1y ZXF1ZXN0IC1qICR0YXJnZXQKCWRvbmUKICAgIGRvbmUKCiAgICBwb2xpY3k9YGZpbmRfZmlsZSBw b2xpY3lgCgogICAgZWNobyAiUHJvY2Vzc2luZyAkcG9saWN5Li4uIgoKICAgIHN0cmlwX2ZpbGUg cG9saWN5ICRwb2xpY3kKCiAgICBhcHBseV9wb2xpY3lfcnVsZXMKCiAgICBtYXNxPWBmaW5kX2Zp bGUgbWFzcWAKCiAgICBbIC1mICRtYXNxIF0gJiYgc2V0dXBfbWFzcSAkbWFzcQoKICAgIHRvcz1g ZmluZF9maWxlIHRvc2AKCiAgICBbIC1mICR0b3MgXSAmJiBbIC1uICIkTUFOR0xFX0VOQUJMRUQi IF0gJiYgcHJvY2Vzc190b3MgJHRvcwoKICAgIFsgLW4gIiRUQ19FTkFCTEVEIiBdICYmIHNldHVw X3RjCgogICAgZWNobyAiQWN0aXZhdGluZyBSdWxlcy4uLiIKCiAgICBhY3RpdmF0ZV9ydWxlcwoK ICAgIHJ1bl91c2VyX2V4aXQgc3RhcnQKCiAgICBpZiBbIC1uICIkTUFOR0xFX0VOQUJMRUQiIF07 IHRoZW4KCWZvciBpbnRlcmZhY2UgaW4gYGZpbmRfaW50ZXJmYWNlc19ieV9vcHRpb24gbm9yZmMx OTE4YDsgZG8KCSAgICBydW5faXB0YWJsZXMgLXQgbWFuZ2xlIC1BIFBSRVJPVVRJTkcgLWkgJGlu dGVyZmFjZSAtaiByZmMxOTE4Cglkb25lCiAgICBmaQoKICAgIGNyZWF0ZWNoYWluIHNob3Jld2Fs bCBubwoKICAgIGVjaG8gIlNob3Jld2FsbCAkezF9ZWQiCgogICAgbG9nZ2VyICJTaG9yZXdhbGwg JHsxfWVkIgoKICAgIHJtIC1yZiAkVE1QX0RJUgp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMg UmVidWlsZCB0aGUgY29tbW9uIGNoYWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnJlZnJlc2hfZmly ZXdhbGwoKQp7CiAgICBlY2hvICJSZWZyZXNoaW5nIFNob3Jld2FsbC4uLiIKCiAgICBlY2hvICJE ZXRlcm1pbmluZyBab25lcyBhbmQgSW50ZXJmYWNlcy4uLiIKCiAgICBkZXRlcm1pbmVfem9uZXMK CiAgICBbIC16ICIkem9uZXMiIF0gJiYgc3RhcnR1cF9lcnJvciAiRVJST1I6IE5vIFpvbmVzIERl ZmluZWQiCgogICAgZGV0ZXJtaW5lX2ludGVyZmFjZXMKCiAgICBlY2hvICJBZGRpbmcgQ29tbW9u IFJ1bGVzIgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIyBDb21tb24gcnVsZXMgaW4gZWFj aCBjaGFpbgogICAgIwogICAgY29tbW9uPWBmaW5kX2ZpbGUgY29tbW9uYAoKICAgIHJ1bl9pcHRh YmxlcyAtRiBjb21tb24KCiAgICBpZiBbIC1mICRjb21tb24gXTsgdGhlbgoJLiAkY29tbW9uCiAg ICBlbHNlCgkuIGBmaW5kX2ZpbGUgY29tbW9uLmRlZmAKICAgIGZpCiAgICAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKICAgICMgQlJPQURDQVNUUwogICAgIwogICAgZm9yIHpvbmUgaW4gJHpvbmVzIG11bHRp OyBkbwoJZXZhbCBpbnRlcmZhY2VzPVwiXCQke3pvbmV9X2ludGVyZmFjZXNcIgoKCVsgLW4gIiRp bnRlcmZhY2VzIiBdICYmIGRyb3BfYnJvYWRjYXN0cyBgZmluZF9icm9hZGNhc3QgJHpvbmVgCiAg ICBkb25lCgogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAjIEJsYWNrbGlzdAogICAgIwogICAg cmVmcmVzaF9ibGFja2xpc3QKCiAgICBlY2hvICJTaG9yZXdhbGwgUmVmcmVzaGVkIgoKICAgIGxv Z2dlciAiU2hvcmV3YWxsIFJlZnJlc2hlZCIKCiAgICBybSAtcmYgJFRNUF9ESVIKfQojIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwojIERldGVybWluZSB0aGUgdmFsdWUgZm9yIGEgcGFyYW1ldGVyIHRo YXQgZGVmYXVsdHMgdG8gWWVzCQkgICAgICAgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwphZGRl ZF9wYXJhbV92YWx1ZSgpICMgJDEgPSBQYXJhbWV0ZXIgTmFtZSwgJDIgPSBQYXJhbWV0ZXIgdmFs dWUKewogICAgbG9jYWwgdmFsPSIkMiIKCiAgICBpZiBbIC16ICIkdmFsIiBdOyB0aGVuCgllY2hv ICJZZXMiCiAgICBlbHNlIGNhc2UgJHZhbCBpbgogICAgICAgIFllc3x5ZXMpCgkgICAgZWNobyAi WWVzIgoJICAgIDs7CglOb3xubykKCSAgICBlY2hvICIiCgkgICAgOzsKCSopCgkgICAgc3RhcnR1 cF9lcnJvciAiSW52YWxpZCB2YWx1ZSAoJHZhbCkgZm9yICQxIgoJICAgIDs7Cgllc2FjCiAgICBm aQp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgSW5pdGlhbGl6ZSB0aGlzIHByb2dyYW0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCmRvX2luaXRpYWxpemUoKSB7CiAgICAjIFJ1biBhbGwgdXRpbGl0 eSBwcm9ncmFtcyB1c2luZyB0aGUgQyBsb2NhbGUKICAgICMKICAgICMgVGhhbmtzIHRvIFZpbmNl bnQgUGxhbmNoZW5hdWx0IGZvciB0aGlzIHRpcCAjCgogICAgZXhwb3J0IExDX0FMTD1DCgogICAg UEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9s b2NhbC9iaW4KICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICMgQ2xlYXIgYWxsIGNvbmZpZ3Vy YXRpb24gdmFyaWFibGVzCiAgICAjCiAgICB2ZXJzaW9uPQogICAgRlc9CiAgICBTVUJTWVNMT0NL PQogICAgU1RBVEVESVI9CiAgICBBTExPV1JFTEFURUQ9CiAgICBMT0dSQVRFPQogICAgTE9HQlVS U1Q9CiAgICBMT0dQQVJNUz0KICAgIE5BVF9FTkFCTEVEPQogICAgTUFOR0xFX0VOQUJMRUQ9CiAg ICBBRERfSVBfQUxJQVNFUz0KICAgIFRDX0VOQUJMRUQ9CiAgICBMT0dVTkNMRUFOPQogICAgQkxB Q0tMSVNUX0RJU1BPU0lUSU9OPQogICAgQkxBQ0tMSVNUX0xPR0xFVkVMPQogICAgQ0xBTVBNU1M9 CiAgICBzdG9wcGluZz0KCiAgICBUTVBfRElSPS90bXAvc2hvcmV3YWxsLSQkCiAgICBybSAtcmYg JFRNUF9ESVIKICAgIG1rZGlyIC1wICRUTVBfRElSICYmIGNobW9kIDcwMCAkVE1QX0RJUiB8fCBc CiAgICAgICBzdGFydHVwX2Vycm9yICJDYW4ndCBjcmVhdGUgJFRNUF9ESVIiCgogICAgZnVuY3Rp b25zPS9ldGMvc2hvcmV3YWxsL2Z1bmN0aW9ucwoKICAgIFsgLW4gIiRTSE9SRVdBTExfRElSIiAt YSAtZiAkU0hPUkVXQUxMX0RJUi9mdW5jdGlvbnMgXSAmJiBcCiAgICAgICAgZnVuY3Rpb25zPSRT SE9SRVdBTExfRElSL2Z1bmN0aW9ucwoKICAgIGlmIFsgLWYgJGZ1bmN0aW9ucyBdOyB0aGVuCiAg ICAgICAgLiAkZnVuY3Rpb25zCiAgICBlbHNlCiAgICAgICAgc3RhcnR1cF9lcnJvciAiL2V0Yy9z aG9yZXdhbGwvZnVuY3Rpb25zIGRvZXMgbm90IGV4aXN0ISIKICAgIGZpCgogICAgdmVyc2lvbl9m aWxlPWBmaW5kX2ZpbGUgdmVyc2lvbmAKCiAgICBbIC1mICR2ZXJzaW9uX2ZpbGUgXSAmJiB2ZXJz aW9uPWBjYXQgJHZlcnNpb25fZmlsZWAKICAgICMKICAgICMgU3RyaXAgdGhlIGZpbGVzIHRoYXQg d2UgdXNlIG9mdGVuCiAgICAjCiAgICBzdHJpcF9maWxlIGludGVyZmFjZXMKICAgIHN0cmlwX2Zp bGUgaG9zdHMKCiAgICBydW5fdXNlcl9leGl0IHNob3Jld2FsbC5jb25mCiAgICBydW5fdXNlcl9l eGl0IHBhcmFtcwoKICAgIFsgLXogIiR7U1RBVEVESVJ9IiBdICYmIFNUQVRFRElSPS92YXIvc3Rh dGUvc2hvcmV3YWxsCiAgICBbIC16ICIkRlciIF0gJiYgRlc9ZncKCiAgICBBTExPV1JFTEFURUQ9 ImBhZGRlZF9wYXJhbV92YWx1ZSBBTExPV1JFTEFURUQgJEFMTE9XUkVMQVRFRGAiCiAgICBOQVRf RU5BQkxFRD0iYGFkZGVkX3BhcmFtX3ZhbHVlIE5BVF9FTkFCTEVEICROQVRfRU5BQkxFRGAiCiAg ICBNQU5HTEVfRU5BQkxFRD0iYGFkZGVkX3BhcmFtX3ZhbHVlIE1BTkdMRV9FTkFCTEVEICRNQU5H TEVfRU5BQkxFRGAiCiAgICBBRERfSVBfQUxJQVNFUz0iYGFkZGVkX3BhcmFtX3ZhbHVlIEFERF9J UF9BTElBU0VTICRBRERfSVBfQUxJQVNFU2AiCiAgICBUQ19FTkFCTEVEPSJgYWRkZWRfcGFyYW1f dmFsdWUgVENfRU5BQkxFRCAkVENfRU5BQkxFRGAiCgogICAgaWYgWyAtbiAiJHtMT0dSQVRFfSR7 TE9HQlVSU1R9IiBdOyB0aGVuCglMT0dQQVJNUz0iLS1tYXRjaCBsaW1pdCIKCVsgLW4gIiRMT0dS QVRFIiBdICAmJiBMT0dQQVJNUz0iJExPR1BBUk1TIC0tbGltaXQgJExPR1JBVEUiCglbIC1uICIk TE9HQlVSU1QiIF0gJiYgTE9HUEFSTVM9IiRMT0dQQVJNUyAtLWxpbWl0LWJ1cnN0ICRMT0dCVVJT VCIKICAgIGZpCgogICAgaWYgWyAtbiAiJElQX0ZPUldBUkRJTkciIF07IHRoZW4KCWNhc2UgIiRJ UF9GT1JXQVJESU5HIiBpbgoJW09vXW58W09vXWZmfFtLa11lZXApCiAgICAgICAgICAgIDs7CiAg ICAgICAgKikKCSAgICBzdGFydHVwX2Vycm9yICJJbnZhbGlkIHZhbHVlICgkSVBfRk9SV0FSRElO RykgZm9yIElQX0ZPUldBUkRJTkciCgkgICAgOzsKCWVzYWMKICAgIGVsc2UKCUlQX0ZPUldBUkRJ Tkc9T24KICAgIGZpCgogICAgaWYgWyAtbiAiJFRDX0VOQUJMRUQiIC1hIC16ICIkTUFOR0xFX0VO QUJMRUQiIF07IHRoZW4KCXN0YXJ0dXBfZXJyb3IgIlRyYWZmaWMgQ29udHJvbCByZXF1aXJlcyBN YW5nbGUiCiAgICBmaQoKICAgIFsgLXogIiRCTEFDS0xJU1RfRElTUE9TSVRJT04iIF0gJiYgQkxB Q0tMSVNUX0RJU1BPU0lUSU9OPURST1AKCiAgICBpZiBbIC1uICIkQ0xBTVBNU1MiIF07IHRoZW4K CWNhc2UgIiRDTEFNUE1TUyIgaW4KCVtZeV1lcykKICAgCSAgICA7OwoJW05uXW8pCiAgICAgICAg ICAgIENMQU1QTVNTPQoJICAgIDs7CgkqKQoJICAgIHN0YXJ0dXBfZXJyb3IgIkludmFsaWQgdmFs dWUgKCRDTEFNUE1TUykgZm9yIENMQU1QTVNTIgoJICAgIDs7Cgllc2FjCiAgICBmaQp9CiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiMgR2l2ZSBVc2FnZSBJbmZvcm1hdGlvbgkJCQkJCSAgICAgICAj CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnVzYWdlKCkgewogICAgZWNobyAiVXNhZ2U6ICQwIFtk ZWJ1Z10ge3N0YXJ0fHN0b3B8cmVzZXR8cmVzdGFydHxzdGF0dXN8cmVmcmVzaHxjbGVhcl19Igog ICAgZXhpdCAxCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBFIFggRSBDIFUgVCBJIE8gTiAg ICBCIEUgRyBJIE4gUyAgIEggRSBSIEUJCQkJICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKIwojIFN0YXJ0IHRyYWNlIGlmIGZpcnN0IGFyZyBpcyAiZGVidWciCiMKWyAkIyAtZ3QgMSBd ICYmIFsgIiQxIiA9ICJkZWJ1ZyIgXSAmJiB7IHNldCAteCA7IHNoaWZ0IDsgfQoKbm9sb2NrPQoK WyAkIyAtZ3QgMSBdICYmIFsgIiQxIiA9ICJub2xvY2siIF0gJiYgeyBub2xvY2s9WWVzOyBzaGlm dCA7IH0KClsgJCMgLW5lIDEgXSAmJiB1c2FnZQoKY29tbWFuZD0iJDEiCgpjYXNlICIkY29tbWFu ZCIgaW4KICAgIHN0b3ApCglkb19pbml0aWFsaXplCglteV9tdXRleF9vbgoJZWNobyAtbiAiU3Rv cHBpbmcgU2hvcmV3YWxsLi4uIgoJZGV0ZXJtaW5lX3pvbmVzCglzdG9wX2ZpcmV3YWxsCglbIC1u ICIkU1VCU1lTTE9DSyIgXSAmJiBybSAtZiAkU1VCU1lTTE9DSwoJZWNobyAiZG9uZS4iCglteV9t dXRleF9vZmYKCTs7CiAgICBzdGFydCkKCWRvX2luaXRpYWxpemUKCW15X211dGV4X29uCglpZiBx dCBpcHRhYmxlcyAtTCBzaG9yZXdhbGwgLW4gOyB0aGVuCgkgICAgWyAtbiAiJFNVQlNZU0xPQ0si IF0gJiYgdG91Y2ggJFNVQlNZU0xPQ0sKCSAgICBlY2hvICJTaG9yZXdhbGwgQWxyZWFkeSBTdGFy dGVkIgoJICAgIG15X211dGV4X29mZgoJICAgIGV4aXQgMDsKCWZpCglkZWZpbmVfZmlyZXdhbGwg IlN0YXJ0IiAmJiBbIC1uICIkU1VCU1lTTE9DSyIgXSAmJiB0b3VjaCAkU1VCU1lTTE9DSwoJIG15 X211dGV4X29mZgoJOzsKICAgIHJlc3RhcnQpCglkb19pbml0aWFsaXplCglteV9tdXRleF9vbgoJ aWYgcXQgaXB0YWJsZXMgLUwgc2hvcmV3YWxsIC1uIDsgdGhlbgoJICAgIGRlZmluZV9maXJld2Fs bCAiUmVzdGFydCIKCWVsc2UKCSAgICBlY2hvICJTaG9yZXdhbGwgTm90IEN1cnJlbnRseSBSdW5u aW5nIgoJICAgIGRlZmluZV9maXJld2FsbCAiU3RhcnQiCglmaQoKCVsgJD8gLWVxIDAgXSAmJiBb IC1uICIkU1VCU1lTTE9DSyIgXSAmJiB0b3VjaCAkU1VCU1lTTE9DSwoJbXlfbXV0ZXhfb2ZmCgk7 OwogICAgc3RhdHVzKQoJZWNobyAtZSAiU2hvcmV3YWxsLSR2ZXJzaW9uIFN0YXR1cyBhdCAkSE9T VE5BTUUgLSBgZGF0ZWBcXG4iCglpcHRhYmxlcyAtTCAtbiAtdgoJOzsKICAgIHJlc2V0KQoJaXB0 YWJsZXMgLUwgLW4gLVogLXYKCWVjaG8gIlNob3Jld2FsbCBDb3VudGVycyBSZXNldCIKCWxvZ2dl ciAiU2hvcmV3YWxsIENvdW50ZXJzIFJlc2V0IgoJOzsKICAgIHJlZnJlc2gpCglkb19pbml0aWFs aXplCglteV9tdXRleF9vbgoJaWYgISBxdCBpcHRhYmxlcyAtTCBzaG9yZXdhbGwgLW4gOyB0aGVu CgkgICAgZWNobyAiU2hvcmV3YWxsIE5vdCBTdGFydGVkIgoJICAgIG15X211dGV4X29mZgoJICAg IGV4aXQgMjsKICAgICAgICBmaQoJcmVmcmVzaF9maXJld2FsbDsKCW15X211dGV4X29mZgoJOzsK ICAgIGNsZWFyKQoJZG9faW5pdGlhbGl6ZQoJbXlfbXV0ZXhfb24KCWVjaG8gLW4gIkNsZWFyaW5n IFNob3Jld2FsbC4uLiIKCWRldGVybWluZV96b25lcwoJY2xlYXJfZmlyZXdhbGwKCVsgLW4gIiRT VUJTWVNMT0NLIiBdICYmIHJtIC1mICRTVUJTWVNMT0NLCgllY2hvICJkb25lLiIKCW15X211dGV4 X29mZgoJOzsKICAgICopCgl1c2FnZQoJOzsKZXNhYwo --------------Boundary-00=_0ISLLHMP6MR2D0LS3C6S--