From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Marx To: development@lists.ipfire.org Subject: Re: CCD Final Date: Tue, 20 Nov 2012 04:24:36 +0100 Message-ID: <50AAF7F4.9000500@oab.de> In-Reply-To: <50AA9AFC.9010807@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============4065338043785935035==" List-Id: --===============4065338043785935035== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Am 19.11.2012 21:47, schrieb Stefan Schantl: > Hello Alexander & Michael, > > I've merged my mtu-disc changes with the ccd changes from Alexander. > > http://git.ipfire.org/?p=3Dpeople/stevee/ipfire-2.x.git;a=3Dcommit;h=3D350f= 298025cf2f46ad9c25e4936e9aa9682ee452=20 > > > Today, I was doing some testing and found some problems - mostly on=20 > the ccd extension: > > * mtu-disc: The cgi doesn't respect if mtu-disc never has been=20 > configured. > > Fixed:=20 > http://git.ipfire.org/?p=3Dpeople/stevee/ipfire-2.x.git;a=3Dcommit;h=3Da66e= 24bbfd09b2ab2345ece2079d7143348a3980 > > * After creating a new ccd roadwarrior, there is very stange sting in=20 > the "/var/ipfire/ovpn/ccd/test" file: > > ifconfig-push 10.0.0.50 10.-1.255.49 > > The first thing looks good, because I have assigned that IP to the=20 > connection, but the second part looks really strange. > WOW! That is really strange! i could not reproduce that. Tested with the=20 same ip. but the only possible killer is this code in general_functions: sub getlastip { my ($byte1,$byte2,$byte3,$byte4) =3D split (/\./,$_[0]); my $step=3D$_[1]; for (my $x=3D$step;$x>=3D1;$x--){ $byte4--; if($byte4=3D=3D0){ $byte4=3D255;$byte3--;} if($byte3=3D=3D0){$byte3=3D255;$byte2--;} if ($byte2=3D=3D0){$byte2=3D255;$byte1--} } return "$byte1.$byte2.$byte3.$byte4"; your Prob seems that the code reduces byte 4, then byte3, then byte2=20 which leads to this "ip" But as you can see in my code, i am checking if byte3 is EQUAL 0 and=20 only then i set byte3 to 255 and reduce byte 2 .. ans so on. Please check if you have the right general functions ! i appended it to this mail. Maybe i was too dumb to push all code to the=20 git. it is in my ccd tree... if you like i will send you the files via mail. > * In the WUI the Green Network always is selected, also if you have=20 > allowed access to more zones ( like blue or orange ) or to Nothing. > Well also here the same, i can not reproduce that error! It was right,=20 that this behaviour was when we tested it. but then i fixed that error. I append the ovpnmain.cgi at this mail. please check it. > Best regards, > > Stefan >> >> Am 16.11.2012 17:34, schrieb Michael Tremer: >>> Hello guys, >>> >>> I merged the changes to the next branch. >>> >>> http://git.ipfire.org/?p=3Dipfire-2.x.git;a=3Dcommit;h=3D8c877a82f6a63e07= e2dde8d55c6e0db4893bf73d=20 >>> >>> >>> Please note, that this does not mean that testing is done. It has just >>> been started. >>> >>> I also changed a lot of the translation strings. Fixed typos, rephrased >>> sentences. Please double check this. >> Thanks for that, looks better. >>> Stevee will take care of the migration script. Please rename "lang.sh" >>> to "update-lang-cache" and put it in /usr/sbin (lfs/stage2). >> Sorry, but i checket out next branch and lfs/stage2 is a script? How=20 >> can i put the lang.sh (update-lang-cache) into it? >> >> >> >>> Michael >>> >>> On Fri, 2012-11-16 at 06:19 +0100, Alexander Marx wrote: >>>> Dear List! >>>> >>>> Here you get the final release with latest modifications. >>>> Git Version is updated. >>>> >>>> Stevee, one thing for you: >>>> >>>> We need to run an update script with the core update. The script is in >>>> attachment, tools->ccd.pl >>>> i don't know where to put it in the git branch, so please make it run >>>> once on update. >>>> >>>> This script looks for existing VPN Clients and builds ccd files with >>>> default route to green network. >>>> This is needed, because the default route to green is no longer in the >>>> server.conf. >>>> I modified the script so that there's no Console output. >>>> The script needs to stop and start the OVPN server! >>>> >>>> The lang.sh file should go to /usr/bin/ or /usr/local/bin/ in the next >>>> release if possible. It makes it easier to generate the languages, >>>> because one only needs to execute "lang.sh" >>>> >>>> Here i also don't know where to put it in the git. >>>> >>>> >>>> >>>> Thank you a lot for reviewing the code and testing. >>>> >>>> Alex >>>> _______________________________________________ >>>> Development mailing list >>>> Development(a)lists.ipfire.org >>>> http://lists.ipfire.org/mailman/listinfo/development >>> _______________________________________________ >>> Development mailing list >>> Development(a)lists.ipfire.org >>> http://lists.ipfire.org/mailman/listinfo/development >> >> _______________________________________________ >> Development mailing list >> Development(a)lists.ipfire.org >> http://lists.ipfire.org/mailman/listinfo/development >> > > _______________________________________________ > Development mailing list > Development(a)lists.ipfire.org > http://lists.ipfire.org/mailman/listinfo/development --===============4065338043785935035== Content-Type: application/x-perl Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="general-functions.pl" MIME-Version: 1.0 IyBTbW9vdGhXYWxsIENHSXMKIwojIFRoaXMgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdQTAojCiMgKGMpIFRoZSBTbW9vdGhXYWxsIFRlYW0KIyBDb3B5cmlnaHQg KEMpIDIwMDIgQWxleCBIdWRzb24gLSBnZXRjZ2loYXNoKCkgcmV3cml0ZQojIENvcHlyaWdodCAo QykgMjAwMiBCb2IgR3JhbnQgPGJvYkBjYWNoZS51Y3IuZWR1PiAtIHZhbGlkbWFjKCkKIyBDb3B5 cmlnaHQgKGMpIDIwMDIvMDQvMTMgU3RldmUgQm9vdGVzIC0gYWRkIGFsaWFzIHNlY3Rpb24sIGhl bHBlciBmdW5jdGlvbnMKIyBDb3B5cmlnaHQgKGMpIDIwMDIvMDgvMjMgTWFyayBXb3JtZ29vciA8 bWFya0B3b3JtZ29vci5jb20+IHZhbGlkZnFkbigpCiMgQ29weXJpZ2h0IChjKSAyMDAzLzA5LzEx IERhcnJlbiBDcml0Y2hsZXkgPGRhcnJlbmNAdGVsdXMubmV0PiBzcnRhcnJheSgpCiMKIyAkSWQ6 IGdlbmVyYWwtZnVuY3Rpb25zLnBsLHYgMS4xLjIuMjYgMjAwNi8wMS8wNCAxNjozMzo1NSBmcmFu Y2s3OCBFeHAgJAojCgpwYWNrYWdlIEdlbmVyYWw7Cgp1c2Ugc3RyaWN0Owp1c2UgU29ja2V0Owp1 c2UgSU86OlNvY2tldDsKdXNlIE5ldDo6U1NMZWF5Owp1c2UgTmV0OjpJUHY0QWRkciBxdyg6YWxs KTsKJHw9MTsgIyBsaW5lIGJ1ZmZlcmluZwoKJEdlbmVyYWw6OnZlcnNpb24gPSAnMi4xMSc7CiRH ZW5lcmFsOjpzd3Jvb3QgPSAnL3Zhci9pcGZpcmUnOwokR2VuZXJhbDo6bm9pcHByZWZpeCA9ICdu b2lwZy0nOwokR2VuZXJhbDo6YWRtaW5tYW51YWx1cmwgPSAnaHR0cDovL3dpa2kuaXBmaXJlLm9y Zyc7CgojCiMgbG9nICgibWVzc2FnZSIpIHVzZSBkZWZhdWx0ICdpcGNvcCcgdGFnCiMgbG9nICgi dGFnIiwibWVzc2FnZSIpIHVzZSB5b3VyIHRhZwojCnN1YiBsb2cKewoJbXkgJHRhZz0naXBmaXJl JzsKCSR0YWcgPSBzaGlmdCBpZiAoQF8+MSk7CglteSAkbG9nbWVzc2FnZSA9ICRfWzBdOwoJJGxv Z21lc3NhZ2UgPX4gLyhbXHdcV10qKS87CgkkbG9nbWVzc2FnZSA9ICQxOwoJc3lzdGVtKCdsb2dn ZXInLCAnLXQnLCAkdGFnLCAkbG9nbWVzc2FnZSk7Cn0KCnN1YiByZWFkaGFzaAp7CglteSAkZmls ZW5hbWUgPSAkX1swXTsKCW15ICRoYXNoID0gJF9bMV07CglteSAoJHZhciwgJHZhbCk7CgkKCQoJ IyBTb21lIGlwY29wIGNvZGUgZXhwZWN0cyB0aGF0IHJlYWRoYXNoICdjb21wbGV0ZScgdGhlIGhh c2ggaWYgbmV3IGVudHJpZXMKCSMgYXJlIHByZXNlbnRzLiBOb3QgY2xlYXIgaXQgISEhCgkjJSRo YXNoID0gKCk7CgoJb3BlbihGSUxFLCAkZmlsZW5hbWUpIG9yIGRpZSAiVW5hYmxlIHRvIHJlYWQg ZmlsZSAkZmlsZW5hbWUiOwoJCgl3aGlsZSAoPEZJTEU+KQoJewoJCWNob3A7CgkJKCR2YXIsICR2 YWwpID0gc3BsaXQgLz0vLCAkXywgMjsKCQlpZiAoJHZhcikKCQl7CgkJCSR2YWwgPX4gcy9eXCcv L2c7CgkJCSR2YWwgPX4gcy9cJyQvL2c7CgoJCQkjIFVudGFpbnQgdmFyaWFibGVzIHJlYWQgZnJv bSBoYXNoCgkJCSMgdHJpbSBzcGFjZSBmcm9tIGJlZ2luIGFuZCBlbmQKCQkJJHZhciA9fiBzL15c cysvLzsKCQkJJHZhciA9fiBzL1xzKyQvLzsKCQkJJHZhciA9fiAvKFtBLVphLXowLTlfLV0qKS87 CgkJCSR2YXIgPSAkMTsKCQkJJHZhbCA9fiAvKFtcd1xXXSopLzsKCQkJJHZhbCA9ICQxOwoJCQkk aGFzaC0+eyR2YXJ9ID0gJHZhbDsKCQl9Cgl9CgljbG9zZSBGSUxFOwp9CgoKc3ViIHdyaXRlaGFz aAp7CglteSAkZmlsZW5hbWUgPSAkX1swXTsKCW15ICRoYXNoID0gJF9bMV07CglteSAoJHZhciwg JHZhbCk7CgkKCSMgd3JpdGUgY2dpIHZhcnMgdG8gdGhlIGZpbGUuCglvcGVuKEZJTEUsICI+JHtm aWxlbmFtZX0iKSBvciBkaWUgIlVuYWJsZSB0byB3cml0ZSBmaWxlICRmaWxlbmFtZSI7CglmbG9j ayBGSUxFLCAyOwoJZm9yZWFjaCAkdmFyIChrZXlzICUkaGFzaCkgCgl7CgkJaWYgKCAkdmFyIGVx ICJfX0NHSV9fIil7bmV4dDt9CgkJJHZhbCA9ICRoYXNoLT57JHZhcn07CgkJIyBEYXJyZW4gQ3Jp dGNobGV5IEphbiAxNywgMjAwMyBhZGRlZCB0aGUgZm9sbG93aW5nIGJlY2F1c2Ugd2hlbiBzdWJt aXR0aW5nIHdpdGggYSBncmFwaGljLCB0aGUgeCBhbmQgeQoJCSMgbG9jYXRpb24gb2YgdGhlIG1v dXNlIGFyZSBzdWJtaXR0ZWQgYXMgd2VsbCwgdGhpcyB3YXMgYmVpbmcgd3JpdHRlbiB0byB0aGUg c2V0dGluZ3MgZmlsZSBjYXVzaW5nCgkJIyBzb21lIHNlcmlvdXMgZ3JpZWYhIFRoaXMgc2tpcHMg dGhlIHZhcmlhYmxlLnggYW5kIHZhcmlhYmxlLnkKCQlpZiAoISgkdmFyID1+IC8oLnh8LnkpJC8p KSB7CgkJCWlmICgkdmFsID1+IC8gLykgewoJCQkJJHZhbCA9ICJcJyR2YWxcJyI7IH0KCQkJaWYg KCEoJHZhciA9fiAvXkFDVElPTi8pKSB7CgkJCQlwcmludCBGSUxFICIke3Zhcn09JHt2YWx9XG4i OyB9CgkJfQoJfQoJY2xvc2UgRklMRTsKfQoKc3ViIHdyaXRlaGFzaHBhcnQKewoJIyBUaGlzIGZ1 bmN0aW9uIHJlcGxhY2VzIHRoZSBnaXZlbiBoYXNoIGluIHRoZSBvcmlnaW5hbCBoYXNoIGJ5IGtl ZXBpbmcgdGhlIG9sZAoJIyBjb250ZW50IGFuZCBqdXN0IHJlcGxhY2luZyB0aGUgbmV3IGNvbnRl bnQKCglteSAkZmlsZW5hbWUgPSAkX1swXTsKCW15ICRuZXdoYXNoID0gJF9bMV07CglteSAlb2xk aGFzaDsKCW15ICgkdmFyLCAkdmFsKTsKCglyZWFkaGFzaCgiJHtmaWxlbmFtZX0iLCBcJW9sZGhh c2gpOwoKCWZvcmVhY2ggJHZhciAoa2V5cyAlJG5ld2hhc2gpewoJCSRvbGRoYXNoeyR2YXJ9PSRu ZXdoYXNoLT57JHZhcn07Cgl9CgoJIyB3cml0ZSBjZ2kgdmFycyB0byB0aGUgZmlsZS4KCW9wZW4o RklMRSwgIj4ke2ZpbGVuYW1lfSIpIG9yIGRpZSAiVW5hYmxlIHRvIHdyaXRlIGZpbGUgJGZpbGVu YW1lIjsKCWZsb2NrIEZJTEUsIDI7Cglmb3JlYWNoICR2YXIgKGtleXMgJW9sZGhhc2gpIAoJewoJ CWlmICggJHZhciBlcSAiX19DR0lfXyIpe25leHQ7fQoJCSR2YWwgPSAkb2xkaGFzaHskdmFyfTsK CQkjIERhcnJlbiBDcml0Y2hsZXkgSmFuIDE3LCAyMDAzIGFkZGVkIHRoZSBmb2xsb3dpbmcgYmVj YXVzZSB3aGVuIHN1Ym1pdHRpbmcgd2l0aCBhIGdyYXBoaWMsIHRoZSB4IGFuZCB5CgkJIyBsb2Nh dGlvbiBvZiB0aGUgbW91c2UgYXJlIHN1Ym1pdHRlZCBhcyB3ZWxsLCB0aGlzIHdhcyBiZWluZyB3 cml0dGVuIHRvIHRoZSBzZXR0aW5ncyBmaWxlIGNhdXNpbmcKCQkjIHNvbWUgc2VyaW91cyBncmll ZiEgVGhpcyBza2lwcyB0aGUgdmFyaWFibGUueCBhbmQgdmFyaWFibGUueQoJCWlmICghKCR2YXIg PX4gLygueHwueSkkLykpIHsKCQkJaWYgKCR2YWwgPX4gLyAvKSB7CgkJCQkkdmFsID0gIlwnJHZh bFwnIjsgfQoJCQlpZiAoISgkdmFyID1+IC9eQUNUSU9OLykpIHsKCQkJCXByaW50IEZJTEUgIiR7 dmFyfT0ke3ZhbH1cbiI7IH0KCQl9Cgl9CgljbG9zZSBGSUxFOwp9CgpzdWIgYWdlCnsKCW15ICgk ZGV2LCAkaW5vLCAkbW9kZSwgJG5saW5rLCAkdWlkLCAkZ2lkLCAkcmRldiwgJHNpemUsCgkgICAg ICAgICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRibGtzaXplLCAkYmxvY2tzKSA9IHN0YXQgJF9b MF07CglteSAkbm93ID0gdGltZTsKCglteSAkdG90YWxzZWNzID0gJG5vdyAtICRtdGltZTsKCW15 ICRkYXlzID0gaW50KCR0b3RhbHNlY3MgLyA4NjQwMCk7CglteSAkdG90YWxob3VycyA9IGludCgk dG90YWxzZWNzIC8gMzYwMCk7CglteSAkaG91cnMgPSAkdG90YWxob3VycyAlIDI0OwoJbXkgJHRv dGFsbWlucyA9IGludCgkdG90YWxzZWNzIC8gNjApOwoJbXkgJG1pbnMgPSAkdG90YWxtaW5zICUg NjA7CglteSAkc2VjcyA9ICR0b3RhbHNlY3MgJSA2MDsKCglyZXR1cm4gIiR7ZGF5c31kICR7aG91 cnN9aCAke21pbnN9bSAke3NlY3N9cyI7Cn0KCnN1YiB2YWxpZGlwCnsKCW15ICRpcCA9ICRfWzBd OwoKCWlmICghKCRpcCA9fiAvXihcZCspXC4oXGQrKVwuKFxkKylcLihcZCspJC8pKSB7CgkJcmV0 dXJuIDA7IH0KCWVsc2UgCgl7CgkJbXkgQG9jdGV0cyA9ICgkMSwgJDIsICQzLCAkNCk7CgkJZm9y ZWFjaCAkXyAoQG9jdGV0cykKCQl7CgkJCWlmICgvXjAuLykgewoJCQkJcmV0dXJuIDA7IH0KCQkJ aWYgKCRfIDwgMCB8fCAkXyA+IDI1NSkgewoJCQkJcmV0dXJuIDA7IH0KCQl9CgkJcmV0dXJuIDE7 Cgl9Cn0KCnN1YiB2YWxpZG1hc2sKewoJbXkgJG1hc2sgPSAkX1swXTsKCgkjIHNlY29yZCBwYXJ0 IGFuIGlwPwoJaWYgKCZ2YWxpZGlwKCRtYXNrKSkgewoJCXJldHVybiAxOyB9CgkjIHNlY29uZCBw YXJ0IGEgbnVtYmVyPwoJaWYgKC9eMC8pIHsKCQlyZXR1cm4gMDsgfQoJaWYgKCEoJG1hc2sgPX4g L15cZCskLykpIHsKCQlyZXR1cm4gMDsgfQoJaWYgKCRtYXNrID49IDAgJiYgJG1hc2sgPD0gMzIp IHsKCQlyZXR1cm4gMTsgfQoJcmV0dXJuIDA7Cn0KCnN1YiB2YWxpZGlwb3JtYXNrCnsKCW15ICRp cG9ybWFzayA9ICRfWzBdOwoKCSMgc2VlIGlmIGl0IGlzIGEgSVAgb25seS4KCWlmICgmdmFsaWRp cCgkaXBvcm1hc2spKSB7CgkJcmV0dXJuIDE7IH0KCSMgc3BsaXQgaXQgaW50byBudW1iZXIgYW5k IG1hc2suCglpZiAoISgkaXBvcm1hc2sgPX4gL14oLio/KVwvKC4qPykkLykpIHsKCQlyZXR1cm4g MDsgfQoJbXkgJGlwID0gJDE7CglteSAkbWFzayA9ICQyOwoJIyBmaXJzdCBwYXJ0IG5vdCBhIGlw PwoJaWYgKCEoJnZhbGlkaXAoJGlwKSkpIHsKCQlyZXR1cm4gMDsgfQoJcmV0dXJuICZ2YWxpZG1h c2soJG1hc2spOwp9CgpzdWIgc3VidG9jaWRyCnsKCSNnZXRzOiBTdWJuZXQgaW4gZGVjaW1hbCAo MjU1LjI1NS4yNTUuMCkgCgkjR2l2ZXM6IDI0IChUaGUgY2lkciBvZiBuZXR3b3JrKQoJbXkgKCRi eXRlMSwgJGJ5dGUyLCAkYnl0ZTMsICRieXRlNCkgPSBzcGxpdCgvXC4vLCAkX1swXS4iLjAuMC4w LjAiKTsgCglteSAkbnVtID0gKCRieXRlMSAqIDE2Nzc3MjE2KSArICgkYnl0ZTIgKiA2NTUzNikg KyAoJGJ5dGUzICogMjU2KSArICRieXRlNDsgCglteSAkYmluID0gdW5wYWNrKCJCKiIsIHBhY2so Ik4iLCAkbnVtKSk7IAoJbXkgJGNvdW50ID0gKCRiaW4gPX4gdHIvMS8xLyk7IAoJcmV0dXJuICRj b3VudDsKfQoKc3ViIGNpZHJ0b3N1Ygp7CgkjZ2V0czogQ2lkciBvZiBuZXR3b3JrICgyMC0zMCBm b3IgY2NkKSAKCSNLb252ZXJ0cyAzMCB0byAyNTUuMjU1LjI1NS4yNTIgZS5nCglteSAkY2lkcj0k X1swXTsKICAgIG15ICRuZXRtYXNrID0gJk5ldDo6SVB2NEFkZHI6OmlwdjRfY2lkcjJtc2soJGNp ZHIpOwogICAgcmV0dXJuICIkbmV0bWFzayI7Cn0KICAKc3ViIGlwb3JzdWJ0b2RlYwp7CgkjR2V0 czogSXAgYWRkcmVzcyBvciBzdWJuZXRtYXNrIGluIGRlY2ltYWwgb2RlciBDSURSCgkjR2l2ZXM6 IFdoYXQgaXQgZ2V0cyBvbmx5IGluIENJRFIgZm9ybWF0CglteSAkc3VibmV0PSRfWzBdOwoJbXkg JG5ldDsKCW15ICRtYXNrOwoJbXkgJGZ1bGw9MDsKCWlmICgkc3VibmV0ID1+IC9eKC4qPylcLygu Kj8pJC8pIHsKCQkoJG5ldCwkbWFzaykgPSBzcGxpdCAoL1wvLywkc3VibmV0KTsKCQkkZnVsbD0x OwoJCXJldHVybiAiJHN1Ym5ldCI7Cgl9ZWxzZXsKCQkkbWFzaz0kc3VibmV0OwoJfQoJI1N1Ym5l dCBhbHJlYWR5IGluIGRlY2ltYWwgYW5kIHZhbGlkPwoJaWYgKCRtYXNrPX4vXihcZHsxLDN9KVwu KFxkezEsM30pXC4oXGR7MSwzfSlcLihcZHsxLDN9KSQvICYmKCgkMTw9MjU1ICAmJiAkMjw9JDEg JiYgJDM8PSQyICAmJiAkNDw9JDMgKSkpCXsKCQlmb3IgKG15ICRpPTg7JGk8PTMyOyRpKyspewoJ CQlpZiAoJkdlbmVyYWw6OmNpZHJ0b3N1YigkaSkgZXEgJG1hc2spewoJCQkJaWYgKCRmdWxsID09 IDApe3JldHVybiAkbWFzazt9ZWxzZXsKCQkJCQkJCSByZXR1cm4gJG5ldC4iLyIuJG1hc2s7CgkJ CQl9CgkJCX0KCQl9CQoJfQoJI1N1Ym5ldCBpbiBiaW5hcnkgZm9ybWF0PwoJaWYgKCRtYXNrPX4v XihcZHsxLDJ9KSQvICYmICgoJDE8PTMyICYmICQxPj04KSkpewoJCQlpZigkZnVsbCA9PSAwKXsg cmV0dXJuICZHZW5lcmFsOjpjaWRydG9zdWIoJG1hc2spO31lbHNlewoJCQkJCQkgcmV0dXJuICRu ZXQuIi8iLiZHZW5lcmFsOjpjaWRydG9zdWIoJG1hc2spOwoJCQl9Cgl9ZWxzZXsKCQkJcmV0dXJu IDM7Cgl9CglyZXR1cm4gMzsKfQogIAogIApzdWIgaXBvcnN1YnRvY2lkcgp7CgkjZ2V0czogSXAg QWRkcmVzcyAgb3Igc3VibmV0bWFzayBpbiBkZWNpbWFsIG9kZXIgQ0lEUgoJI0dpdmVzOiBXaGF0 IGl0IGdldHMgb25seSBpbiBDSURSIGZvcm1hdAoJbXkgJHN1Ym5ldD0kX1swXTsKCW15ICRuZXQ7 CglteSAkbWFzazsKCW15ICRmdWxsPTA7CglpZiAoJHN1Ym5ldCA9fiAvXiguKj8pXC8oLio/KSQv KSB7CgkJKCRuZXQsJG1hc2spID0gc3BsaXQgKC9cLy8sJHN1Ym5ldCk7CgkJJGZ1bGw9MTsKCX1l bHNlewoJCSRtYXNrPSRzdWJuZXQ7Cgl9CgkjU3VibmV0IGluIGRlY2ltYWwgYW5kIHZhbGlkPwoJ aWYgKCRtYXNrPX4vXihcZHsxLDN9KVwuKFxkezEsM30pXC4oXGR7MSwzfSlcLihcZHsxLDN9KSQv ICYmKCgkMTw9MjU1ICAmJiAkMjw9JDEgJiYgJDM8PSQyICAmJiAkNDw9JDMgKSkpCXsKCQlmb3Ig KG15ICRpPTg7JGk8PTMyOyRpKyspewoJCQlpZiAoJkdlbmVyYWw6OmNpZHJ0b3N1YigkaSkgZXEg JG1hc2spewoJCQkJaWYgKCRmdWxsID09IDApe3JldHVybiAmR2VuZXJhbDo6c3VidG9jaWRyKCRt YXNrKTt9ZWxzZXsKCQkJCQkJCSByZXR1cm4gJG5ldC4iLyIuJkdlbmVyYWw6OnN1YnRvY2lkcigk bWFzayk7CgkJCQl9CgkJCX0KCQl9CQoJfQoJI1N1Ym5ldCBhbHJlYWR5IGluIGJpbmFyeSBmb3Jt YXQ/CglpZiAoJG1hc2s9fi9eKFxkezEsMn0pJC8gJiYgKCgkMTw9MzIgJiYgJDE+PTgpKSl7CgkJ CWlmKCRmdWxsID09IDApeyByZXR1cm4gJG1hc2s7fWVsc2V7CgkJCQkJCSByZXR1cm4gJG5ldC4i LyIuJG1hc2s7CgkJCX0KCX1lbHNlewoJCQlyZXR1cm4gMzsKCX0KCXJldHVybiAzOwp9CgpzdWIg Z2V0bmV0d29ya2lwCnsKCSNHZXRzOiAgSVAsIENJRFIgICAgKDEwLjEwLjEwLjAtMjU1LCAyNCkK CSNHaXZlczogIDEwLjEwLjEwLjAKCW15ICgkY2NkaXAsJGNjZHN1Ym5ldCkgPSBAXzsKCW15ICRp cF9hZGRyZXNzX2JpbmFyeSA9IGluZXRfYXRvbiggJGNjZGlwICk7CglteSAkbmV0bWFza19iaW5h cnkgICAgPSB+cGFjaygiTiIsICgyKiooMzItJGNjZHN1Ym5ldCkpLTEpOwoJbXkgJG5ldHdvcmtf YWRkcmVzcyAgICA9IGluZXRfbnRvYSggJGlwX2FkZHJlc3NfYmluYXJ5ICYgJG5ldG1hc2tfYmlu YXJ5ICk7CglyZXR1cm4gJG5ldHdvcmtfYWRkcmVzczsKfQoKc3ViIGdldGNjZGJjCnsKCSNHZXRz OiBJUCBpbiBGb3JtICgiMTkyLjE2OC4wLjAvMjQiKQoJI0dpdmVzOiBCcm9hZGNhc3RhZGRyZXNz IG9mIG5ldHdvcmsKCW15ICRjY2RuZXQ9JF87CglteSAoJGNjZGlwLCRjY2RzdWJuZXQpID0gc3Bs aXQgIi8iLCRjY2RuZXQ7CglteSAkaXBfYWRkcmVzc19iaW5hcnkgPSBpbmV0X2F0b24oICRjY2Rp cCApOwoJbXkgJG5ldG1hc2tfYmluYXJ5ICAgID0gfnBhY2soIk4iLCAoMioqKDMyLSRjY2RzdWJu ZXQpKS0xKTsKCW15ICRicm9hZGNhc3RfYWRkcmVzcyAgPSBpbmV0X250b2EoICRpcF9hZGRyZXNz X2JpbmFyeSB8IH4kbmV0bWFza19iaW5hcnkgKTsKCXJldHVybiAkYnJvYWRjYXN0X2FkZHJlc3M7 Cn0Kc3ViIGdldG5leHRpcAp7CglteSAoJGJ5dGUxLCRieXRlMiwkYnl0ZTMsJGJ5dGU0KSA9IHNw bGl0ICgvXC4vLCRfWzBdKTsKCW15ICRzdGVwPSRfWzFdOwoJZm9yIChteSAkeD0xOyR4PD0kc3Rl cDskeCsrKXsKCQkkYnl0ZTQrKzsKCQlpZigkYnl0ZTQ9PTI1NSl7ICRieXRlND0wOyRieXRlMysr O30KCQkJaWYoJGJ5dGUzPT0yNTUpeyRieXRlMz0wOyRieXRlMisrO30KCQkJCWlmICgkYnl0ZTI9 PTI1NSl7JGJ5dGUyPTA7JGJ5dGUxKyt9CgkKCX0KCXJldHVybiAiJGJ5dGUxLiRieXRlMi4kYnl0 ZTMuJGJ5dGU0IjsKfQpzdWIgZ2V0bGFzdGlwCnsKCW15ICgkYnl0ZTEsJGJ5dGUyLCRieXRlMywk Ynl0ZTQpID0gc3BsaXQgKC9cLi8sJF9bMF0pOwoJbXkgJHN0ZXA9JF9bMV07Cglmb3IgKG15ICR4 PSRzdGVwOyR4Pj0xOyR4LS0pewoJCSRieXRlNC0tOwoJCWlmKCRieXRlND09MCl7ICRieXRlND0y NTU7JGJ5dGUzLS07fQoJCQlpZigkYnl0ZTM9PTApeyRieXRlMz0yNTU7JGJ5dGUyLS07fQoJCQkJ aWYgKCRieXRlMj09MCl7JGJ5dGUyPTI1NTskYnl0ZTEtLX0KCX0KCXJldHVybiAiJGJ5dGUxLiRi eXRlMi4kYnl0ZTMuJGJ5dGU0IjsKfQoKc3ViIHZhbGlkaXBhbmRtYXNrCnsKCSNHZXRzOiBJcCBh ZGRyZXNzIGluIDE5Mi4xNjguMC4wLzI0IG9yIDE5Mi4xNjguMC4wLzI1NS4yNTUuMjU1LjAgYW5k IGNoZWNrcyBpZiBzdWJuZXQgdmFsaWQKCSNHaXZlczogVHJ1ZSBiencgMCBpZiBzdWNjZXNzIG9y IGZhbHNlIAoJbXkgJGNjZG5ldD0kX1swXTsKCW15ICRzdWJjaWRyOwoJCglpZiAoISgkY2NkbmV0 ID1+IC9eKC4qPylcLyguKj8pJC8pKSB7CgkJcmV0dXJuIDA7Cgl9CglteSAoJGNjZGlwLCRjY2Rz dWJuZXQpPXNwbGl0ICgvXC8vLCAkY2NkbmV0KTsKCSNJUCB2YWxpZD8KCWlmICgkY2NkaXA9fi9e KFxkezEsM30pXC4oXGR7MSwzfSlcLihcZHsxLDN9KVwuKFxkezEsM30pJC8gJiYoKCQxPjAgJiYg JDE8PTI1NSAmJiAkMj49MCAmJiAkMjw9MjU1ICYmICQzPj0wICYmICQzPD0yNTUgJiYgJDQ8PTI1 NSApKSkgewoJCSNTdWJuZXQgaW4gZGVjaW1hbCBhbmQgdmFsaWQ/CgkJaWYgKCRjY2RzdWJuZXQ9 fi9eKFxkezEsM30pXC4oXGR7MSwzfSlcLihcZHsxLDN9KVwuKFxkezEsM30pJC8gJiYoKCQxPD0y NTUgICYmICQyPD0kMSAmJiAkMzw9JDIgICYmICQ0PD0kMyApKSkJewoJCQlmb3IgKG15ICRpPTg7 JGk8PTMyOyRpKyspewoJCQkJaWYgKCZHZW5lcmFsOjpjaWRydG9zdWIoJGkpIGVxICRjY2RzdWJu ZXQpewoJCQkJCXJldHVybiAxOwoJCQkJfQoJCQl9CQoJCSNTdWJuZXQgYWxyZWFkeSBpbiBiaW5h cnkgZm9ybWF0PwoJCX1lbHNpZiAoJGNjZHN1Ym5ldD1+L14oXGR7MSwyfSkkLyAmJiAoKCQxPD0z MiAmJiAkMT49OCkpKXsKCQkJcmV0dXJuIDE7CgkJfWVsc2V7CgkJCXJldHVybiAwOwoJCX0KCQkK CX0KCXJldHVybiAwOwp9CgpzdWIgdmFsaWRwb3J0CnsKCSRfID0gJF9bMF07CgoJaWYgKCEvXlxk KyQvKSB7CgkJcmV0dXJuIDA7IH0KCWlmICgvXjAuLykgewoJCXJldHVybiAwOyB9CglpZiAoJF8g Pj0gMSAmJiAkXyA8PSA2NTUzNSkgewoJCXJldHVybiAxOyB9CglyZXR1cm4gMDsKfQoKc3ViIHZh bGlkcHJveHlwb3J0CnsKCSRfID0gJF9bMF07CgoJaWYgKCEvXlxkKyQvKSB7CgkJcmV0dXJuIDA7 IH0KCWlmICgvXjAuLykgewoJCXJldHVybiAwOyB9CglpZiAoJF8gPT0gNTMgfHwgJF8gPT0gMjIy IHx8ICRfID09IDQ0NCB8fCAkXyA9PSA4MSApIHsKCQlyZXR1cm4gMDsgfQoJZWxzaWYgKCRfID49 IDEgJiYgJF8gPD0gNjU1MzUpIHsKCQlyZXR1cm4gMTsgfQoJcmV0dXJuIDA7Cn0KCnN1YiB2YWxp ZG1hYwp7CglteSAkY2hlY2ttYWMgPSAkX1swXTsKCW15ICRvdCA9ICdbMC05YS1mXXsyfSc7ICMg MiBIZXggZGlnaXRzIChvbmUgb2N0ZXQpCglpZiAoJGNoZWNrbWFjICF+IC9eJG90OiRvdDokb3Q6 JG90OiRvdDokb3QkL2kpCgl7CgkJcmV0dXJuIDA7Cgl9CglyZXR1cm4gMTsKfQoKc3ViIHZhbGlk aG9zdG5hbWUKewoJIyBDaGVja3MgYSBob3N0bmFtZSBhZ2FpbnN0IFJGQzEwMzUKICAgICAgICBt eSAkaG9zdG5hbWUgPSAkX1swXTsKCgkjIEVhY2ggcGFydCBzaG91bGQgYmUgYXQgbGVhc3QgdHdv IGNoYXJhY3RlcnMgaW4gbGVuZ3RoCgkjIGJ1dCBubyBtb3JlIHRoYW4gNjMgY2hhcmFjdGVycwoJ aWYgKGxlbmd0aCAoJGhvc3RuYW1lKSA8IDEgfHwgbGVuZ3RoICgkaG9zdG5hbWUpID4gNjMpIHsK CQlyZXR1cm4gMDt9CgkjIE9ubHkgdmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSBh bmQgLQoJaWYgKCRob3N0bmFtZSAhfiAvXlthLXpBLVowLTktXHNdKiQvKSB7CgkJcmV0dXJuIDA7 fQoJIyBGaXJzdCBjaGFyYWN0ZXIgY2FuIG9ubHkgYmUgYSBsZXR0ZXIgb3IgYSBkaWdpdAoJaWYg KHN1YnN0ciAoJGhvc3RuYW1lLCAwLCAxKSAhfiAvXlthLXpBLVowLTldKiQvKSB7CgkJcmV0dXJu IDA7fQoJIyBMYXN0IGNoYXJhY3RlciBjYW4gb25seSBiZSBhIGxldHRlciBvciBhIGRpZ2l0Cglp ZiAoc3Vic3RyICgkaG9zdG5hbWUsIC0xLCAxKSAhfiAvXlthLXpBLVowLTldKiQvKSB7CgkJcmV0 dXJuIDA7fQoJcmV0dXJuIDE7Cn0KCnN1YiB2YWxpZGRvbWFpbm5hbWUKewoJbXkgJHBhcnQ7CgoJ IyBDaGVja3MgYSBkb21haW4gbmFtZSBhZ2FpbnN0IFJGQzEwMzUKICAgICAgICBteSAkZG9tYWlu bmFtZSA9ICRfWzBdOwoJbXkgQHBhcnRzID0gc3BsaXQgKC9cLi8sICRkb21haW5uYW1lKTsJIyBT cGxpdCBob3N0bmFtZSBhdCB0aGUgJy4nCgoJZm9yZWFjaCAkcGFydCAoQHBhcnRzKSB7CgkJIyBF YWNoIHBhcnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGluIGxlbmd0aAoJCSMg YnV0IG5vIG1vcmUgdGhhbiA2MyBjaGFyYWN0ZXJzCgkJaWYgKGxlbmd0aCAoJHBhcnQpIDwgMiB8 fCBsZW5ndGggKCRwYXJ0KSA+IDYzKSB7CgkJCXJldHVybiAwO30KCQkjIE9ubHkgdmFsaWQgY2hh cmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSBhbmQgLQoJCWlmICgkcGFydCAhfiAvXlthLXpBLVow LTktXSokLykgewoJCQlyZXR1cm4gMDt9CgkJIyBGaXJzdCBjaGFyYWN0ZXIgY2FuIG9ubHkgYmUg YSBsZXR0ZXIgb3IgYSBkaWdpdAoJCWlmIChzdWJzdHIgKCRwYXJ0LCAwLCAxKSAhfiAvXlthLXpB LVowLTldKiQvKSB7CgkJCXJldHVybiAwO30KCQkjIExhc3QgY2hhcmFjdGVyIGNhbiBvbmx5IGJl IGEgbGV0dGVyIG9yIGEgZGlnaXQKCQlpZiAoc3Vic3RyICgkcGFydCwgLTEsIDEpICF+IC9eW2Et ekEtWjAtOV0qJC8pIHsKCQkJcmV0dXJuIDA7fQoJfQoJcmV0dXJuIDE7Cn0KCnN1YiB2YWxpZGZx ZG4KewoJbXkgJHBhcnQ7CgoJIyBDaGVja3MgYSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUg YWdhaW5zdCBSRkMxMDM1CiAgICAgICAgbXkgJGZxZG4gPSAkX1swXTsKCW15IEBwYXJ0cyA9IHNw bGl0ICgvXC4vLCAkZnFkbik7CSMgU3BsaXQgaG9zdG5hbWUgYXQgdGhlICcuJwoJaWYgKHNjYWxh cihAcGFydHMpIDwgMikgewkJIyBBdCBsZWFzdCB0d28gcGFydHMgc2hvdWxkCgkJcmV0dXJuIDA7 fQkJCSMgZXhpc3QgaW4gYSBGUUROCgkJCQkJCSMgKGkuZS4gaG9zdG5hbWUuZG9tYWluKQoJZm9y ZWFjaCAkcGFydCAoQHBhcnRzKSB7CgkJIyBFYWNoIHBhcnQgc2hvdWxkIGJlIGF0IGxlYXN0IG9u ZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoCgkJIyBidXQgbm8gbW9yZSB0aGFuIDYzIGNoYXJhY3RlcnMK CQlpZiAobGVuZ3RoICgkcGFydCkgPCAxIHx8IGxlbmd0aCAoJHBhcnQpID4gNjMpIHsKCQkJcmV0 dXJuIDA7fQoJCSMgT25seSB2YWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05IGFuZCAt CgkJaWYgKCRwYXJ0ICF+IC9eW2EtekEtWjAtOS1dKiQvKSB7CgkJCXJldHVybiAwO30KCQkjIEZp cnN0IGNoYXJhY3RlciBjYW4gb25seSBiZSBhIGxldHRlciBvciBhIGRpZ2l0CgkJaWYgKHN1YnN0 ciAoJHBhcnQsIDAsIDEpICF+IC9eW2EtekEtWjAtOV0qJC8pIHsKCQkJcmV0dXJuIDA7fQoJCSMg TGFzdCBjaGFyYWN0ZXIgY2FuIG9ubHkgYmUgYSBsZXR0ZXIgb3IgYSBkaWdpdAoJCWlmIChzdWJz dHIgKCRwYXJ0LCAtMSwgMSkgIX4gL15bYS16QS1aMC05XSokLykgewoJCQlyZXR1cm4gMDt9Cgl9 CglyZXR1cm4gMTsKfQoKc3ViIHZhbGlkcG9ydHJhbmdlICMgdXNlZCB0byBjaGVjayBhIHBvcnQg cmFuZ2UgCnsKCW15ICRwb3J0ID0gJF9bMF07ICMgcG9ydCB2YWx1ZXMKCSRwb3J0ID1+IHRyLy0v Oi87ICMgcmVwbGFjZSBhbGwgLSB3aXRoIGNvbG9ucyBqdXN0IGluIGNhc2Ugc29tZW9uZSB1c2Vk IC0KCW15ICRzcmNkc3QgPSAkX1sxXTsgIyBpcyBpdCBhIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBw b3J0CgoJaWYgKCEoJHBvcnQgPX4gL14oXGQrKVw6KFxkKykkLykpIHsKCQoJCWlmICghKCZ2YWxp ZHBvcnQoJHBvcnQpKSkgewkgCgkJCWlmICgkc3JjZHN0IGVxICdzcmMnKXsKCQkJCXJldHVybiAk TGFuZzo6dHJ7J3NvdXJjZSBwb3J0IG51bWJlcnMnfTsKCQkJfSBlbHNlIAl7CgkJCQlyZXR1cm4g JExhbmc6OnRyeydkZXN0aW5hdGlvbiBwb3J0IG51bWJlcnMnfTsKCQkJfSAKCQl9Cgl9CgllbHNl IAoJewoJCW15IEBwb3J0cyA9ICgkMSwgJDIpOwoJCWlmICgkMSA+PSAkMil7CgkJCWlmICgkc3Jj ZHN0IGVxICdzcmMnKXsKCQkJCXJldHVybiAkTGFuZzo6dHJ7J2JhZCBzb3VyY2UgcmFuZ2UnfTsK CQkJfSBlbHNlIAl7CgkJCQlyZXR1cm4gJExhbmc6OnRyeydiYWQgZGVzdGluYXRpb24gcmFuZ2Un fTsKCQkJfSAKCQl9CgkJZm9yZWFjaCAkXyAoQHBvcnRzKQoJCXsKCQkJaWYgKCEoJnZhbGlkcG9y dCgkXykpKSB7CgkJCQlpZiAoJHNyY2RzdCBlcSAnc3JjJyl7CgkJCQkJcmV0dXJuICRMYW5nOjp0 cnsnc291cmNlIHBvcnQgbnVtYmVycyd9OyAKCQkJCX0gZWxzZSAJewoJCQkJCXJldHVybiAkTGFu Zzo6dHJ7J2Rlc3RpbmF0aW9uIHBvcnQgbnVtYmVycyd9OwoJCQkJfSAKCQkJfQoJCX0KCQlyZXR1 cm47Cgl9Cn0KCiMgVGVzdCBpZiBJUCBpcyB3aXRoaW4gYSBzdWJuZXQKIyBDYWxsOiBJcEluU3Vi bmV0IChBZGRyLCBTdWJuZXQsIFN1Ym5ldCBNYXNrKQojICAgICAgIFN1Ym5ldCBjYW4gYmUgYW4g SVAgb2YgdGhlIHN1Ym5ldDogMTAuMC4wLjAgb3IgMTAuMC4wLjEKIyAgICAgICBFdmVyeXRoaW5n IGluIGRvdHR0ZWQgbm90YXRpb24KIyBSZXR1cm46IFRSVUUvRkFMU0UKc3ViIElwSW5TdWJuZXQK ewogICAgbXkgJGlwID0gdW5wYWNrKCdOJywgJlNvY2tldDo6aW5ldF9hdG9uKHNoaWZ0KSk7CiAg ICBteSAkc3RhcnQgPSB1bnBhY2soJ04nLCAmU29ja2V0OjppbmV0X2F0b24oc2hpZnQpKTsKICAg IG15ICRtYXNrICA9IHVucGFjaygnTicsICZTb2NrZXQ6OmluZXRfYXRvbihzaGlmdCkpOwogICAg ICAgJHN0YXJ0ICY9ICRtYXNrOyAgIyBiYXNlIG9mIHN1Ym5ldC4uLgogICAgbXkgJGVuZCAgID0g JHN0YXJ0ICsgfiRtYXNrOwogICAgcmV0dXJuICgoJGlwID49ICRzdGFydCkgJiYgKCRpcCA8PSAk ZW5kKSk7Cn0KCiMKIyBSZXR1cm4gdGhlIGZvbGxvd2luZyBJUCAoSVArMSkgaW4gZG90dGVkIG5v dGF0aW9uLgojIENhbGw6IE5leHRJUCAoJzEuMS4xLjEnKTsKIyBSZXR1cm46ICcxLjEuMS4yJwoj CnN1YiBOZXh0SVAKewogICAgcmV0dXJuICZTb2NrZXQ6OmluZXRfbnRvYSggcGFjaygiTiIsIDEg KyAgdW5wYWNrKCdOJywgJlNvY2tldDo6aW5ldF9hdG9uKHNoaWZ0KSkKCQkJCSAgICkKCQkJICAg ICApOwp9CnN1YiBOZXh0SVAyCnsKICAgIHJldHVybiAmU29ja2V0OjppbmV0X250b2EoIHBhY2so Ik4iLCA0ICsgIHVucGFjaygnTicsICZTb2NrZXQ6OmluZXRfYXRvbihzaGlmdCkpCgkJCQkgICAp CgkJCSAgICAgKTsKfQpzdWIgaXBjaWRyCnsKCW15ICgkaXAsJGNpZHIpID0gJk5ldDo6SVB2NEFk ZHI6OmlwdjRfcGFyc2Uoc2hpZnQpOwoJcmV0dXJuICIkaXBcLyRjaWRyIjsKfQoKc3ViIGlwY2lk cjJtc2sKewogICAgICAgbXkgKCRpcCwkY2lkcikgPSAmTmV0OjpJUHY0QWRkcjo6aXB2NF9wYXJz ZShzaGlmdCk7CiAgICAgICBteSAkbmV0bWFzayA9ICZOZXQ6OklQdjRBZGRyOjppcHY0X2NpZHIy bXNrKCRjaWRyKTsKICAgICAgIHJldHVybiAiJGlwXC8kbmV0bWFzayI7Cn0KCgpzdWIgdmFsaWRl bWFpbCB7CiAgICBteSAkbWFpbCA9IHNoaWZ0OwogICAgcmV0dXJuIDAgaWYgKCAkbWFpbCAhfiAv XlswLTlhLXpBLVpcLlwtXF9dK1xAWzAtOWEtekEtWlwuXC1dKyQvICk7CiAgICByZXR1cm4gMCBp ZiAoICRtYWlsID1+IC9eW14wLTlhLXpBLVpdfFteMC05YS16QS1aXSQvKTsKICAgIHJldHVybiAw IGlmICggJG1haWwgIX4gLyhbMC05YS16QS1aXXsxfSlcQC4vICk7CiAgICByZXR1cm4gMCBpZiAo ICRtYWlsICF+IC8uXEAoWzAtOWEtekEtWl17MX0pLyApOwogICAgcmV0dXJuIDAgaWYgKCAkbWFp bCA9fiAvLlwuXC0ufC5cLVwuLnwuXC5cLi58LlwtXC0uL2cgKTsKICAgIHJldHVybiAwIGlmICgg JG1haWwgPX4gLy5cLlxfLnwuXC1cXy58LlxfXC4ufC5cX1wtLnwuXF9cXy4vZyApOwogICAgcmV0 dXJuIDAgaWYgKCAkbWFpbCAhfiAvXC4oW2EtekEtWl17Miw0fSkkLyApOwogICAgcmV0dXJuIDE7 Cn0KCiMKIyBDdXJyZW50bHkgb25seSB2cG5tYWluIHVzZSB0aGlzIHRocmVlIHByb2NzIChyZWFk aGFzaGFycmF5LCB3cml0ZWhhc2hhcnJheSwgZmluZGhhc2hhcnJheSkKIyBUaGUgJ2tleScgdXNl ZCBpcyBudW1lcmljIGJ1dCBpcyBwZXJmZWN0bHkgdW5uZWVkZWQhIFRoaXMgd2lsbCB0byBiZSBy ZW1vdmVkIHNvIGRvbid0IHVzZQojIHRoaXMgY29kZS4gVnBubWFpbiB3aWxsIGJlIHNwbGl0dGVk IGluIHBhcnRzOiB4NTA5L3BraSwgY29ubmVjdGlvbiBpcHNlYywgY29ubmVjdGlvbiBvdGhlciwu Li4gLgojCnN1YiByZWFkaGFzaGFycmF5IHsKICAgIG15ICgkZmlsZW5hbWUsICRoYXNoKSA9IEBf OwogICAgJSRoYXNoID0gKCk7CgogICAgb3BlbihGSUxFLCAkZmlsZW5hbWUpIG9yIGRpZSAiVW5h YmxlIHRvIHJlYWQgZmlsZSAkZmlsZW5hbWUiOwoKICAgIHdoaWxlICg8RklMRT4pIHsKCW15ICgk a2V5LCAkcmVzdCwgQHRlbXApOwoJY2hvbXA7CgkoJGtleSwgJHJlc3QpID0gc3BsaXQgKC8sLywg JF8sIDIpOwoJaWYgKCRrZXkgPX4gL15bMC05XSskLykgewoJICAgIEB0ZW1wID0gc3BsaXQgKC8s LywgJHJlc3QpOwoJICAgICRoYXNoLT57JGtleX0gPSBcQHRlbXA7CiAgICAgICAgfQogICAgfQog ICAgY2xvc2UgRklMRTsKICAgIHJldHVybjsKfQoKc3ViIHdyaXRlaGFzaGFycmF5IHsKICAgIG15 ICgkZmlsZW5hbWUsICRoYXNoKSA9IEBfOwogICAgbXkgKCRrZXksIEB0ZW1wLCAkaSk7CgogICAg b3BlbihGSUxFLCAiPiRmaWxlbmFtZSIpIG9yIGRpZSAiVW5hYmxlIHRvIHdyaXRlIHRvIGZpbGUg JGZpbGVuYW1lIjsKCiAgICBmb3JlYWNoICRrZXkgKGtleXMgJSRoYXNoKSB7CgkJaWYgKCRrZXkg PX4gL15bMC05XSskLykgewoJCQlwcmludCBGSUxFICIka2V5IjsKCQkJZm9yZWFjaCAkaSAoMCAu LiAkI3skaGFzaC0+eyRrZXl9fSkgewoJCQkJcHJpbnQgRklMRSAiLCRoYXNoLT57JGtleX1bJGld IjsKCQkJfQoJCQlwcmludCBGSUxFICJcbiI7CgkJfQogICAgfQogICAgY2xvc2UgRklMRTsKICAg IHJldHVybjsKfQoKc3ViIGZpbmRoYXNoYXJyYXlrZXkgewogICAgZm9yZWFjaCBteSAkaSAoMSAu LiAxMDAwMDAwKSB7CglpZiAoICEgZXhpc3RzICRfWzBdeyRpfSkgewoJICAgICByZXR1cm4gJGk7 Cgl9CiAgICB9Cn0KCnN1YiBzcnRhcnJheSAKIyBEYXJyZW4gQ3JpdGNobGV5IC0gZGFycmVuY0B0 ZWx1cy5uZXQgLSAoYykgMjAwMwojICZzcnRhcnJheShTb3J0T3JkZXIsIEFscGhhTnVtZXJpYywg U29ydERpcmVjdGlvbiwgQXJyYXlUb0JlU29ydGVkKQojIFRoaXMgc3Vicm91dGluZSB3aWxsIHRh a2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgojICAgQ29sdW1uTnVtYmVyID0gdGhlIGNvbHVt biB3aGljaCB5b3Ugd2FudCB0byBzb3J0IG9uLCBzdGFydHMgYXQgMQojICAgQWxwaGFOdW1iZXJp YyA9IGEgb3IgbiAobG93ZXJjYXNlKSBkZWZpbmVzIHdoZXRoZXIgdGhlIHNvcnQgc2hvdWxkIGJl IGFscGhhIG9yIG51bWJlcmljCiMgICBTb3J0RGlyZWN0aW9uID0gYXNjIG9yIGRzYyAobG93ZXJj YXNlKSBBc2NlbmRpbmcgb3IgRGVzY2VuZGluZyBzb3J0CiMgICBBcnJheVRvQmVTb3J0ZWQgPSB0 aGUgYXJyYXkgdGhhdCB3YW50cyBzb3J0aW5nCiMKIyAgIFJldHVybnMgYW4gYXJyYXkgdGhhdCBp cyBzb3J0ZWQgdG8geW91ciBzcGVjcwojCiMgICBJZiBTb3J0T3JkZXIgaXMgZ3JlYXRlciB0aGFu IHRoZSBlbGVtZW50cyBpbiBhcnJheSwgdGhlbiBpdCBkZWZhdWx0cyB0byB0aGUgZmlyc3QgZWxl bWVudAojIAp7CglteSAoJGNvbG5vLCAkYWxwbnVtLCAkc3J0ZGlyLCBAdG9iZXNvcnRlZCkgPSBA XzsKCW15IEB0bXBhcnJheTsKCW15IEBzcnRlZGFycmF5OwoJbXkgJGxpbmU7CglteSAkbmV3bGlu ZTsKCW15ICRjdHI7CglteSAkdHRsaXRlbXMgPSBzY2FsYXIgQHRvYmVzb3J0ZWQ7ICMgd2FudCB0 byBrbm93IHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgcGFzc2VkIGFycmF5CglpZiAoJHR0bGl0 ZW1zIDwgMSl7ICMgaWYgbm8gaXRlbXMsIGRvbid0IHdhc3RlIG91ciB0aW1lIGxldHMgbGVhdmUK CQlyZXR1cm4gKEB0b2Jlc29ydGVkKTsKCX0KCW15IEB0bXAgPSBzcGxpdCgvXCwvLCR0b2Jlc29y dGVkWzBdKTsKCSR0dGxpdGVtcyA9IHNjYWxhciBAdG1wOyAjIHRoaXMgc2hvdWxkIGJlIHRoZSBu dW1iZXIgb2YgZWxlbWVudHMgaW4gZWFjaCByb3cgb2YgdGhlIHBhc3NlZCBpbiBhcnJheQoKCSMg RGFycmVuIENyaXRjaGxleSAtIHZhbGlkYXRlIHBhcmFtZXRlcnMKCWlmICgkY29sbm8gPiAkdHRs aXRlbXMpeyRjb2xubyA9ICcxJzt9CgkkY29sbm8tLTsgIyByZW1vdmUgb25lIGZyb20gY29sbm8g dG8gZGVhbCB3aXRoIGFycmF5cyBzdGFydGluZyBhdCAwCglpZigkY29sbm8gPCAwKXskY29sbm8g PSAnMCc7fQoJaWYgKCRhbHBudW0gbmUgJycpIHsgJGFscG51bSA9IGxjKCRhbHBudW0pOyB9IGVs c2UgeyAkYWxwbnVtID0gJ2EnOyB9CglpZiAoJHNydGRpciBuZSAnJykgeyAkc3J0ZGlyID0gbGMo JHNydGRpcik7IH0gZWxzZSB7ICRzcnRkaXIgPSAnc3JjJzsgfQoKCWZvcmVhY2ggJGxpbmUgKEB0 b2Jlc29ydGVkKQoJewoJCWNob21wKCRsaW5lKTsKCQlpZiAoJGxpbmUgbmUgJycpIHsKCQkJbXkg QHRlbXAgPSBzcGxpdCgvXCwvLCRsaW5lKTsKCQkJIyBEYXJyZW4gQ3JpdGNobGV5IC0ganVnZ2xl IHRoZSBmaWVsZHMgc28gdGhhdCB0aGUgb25lIHdlIHdhbnQgdG8gc29ydCBvbiBpcyBmaXJzdAoJ CQlteSAkdG1waG9sZGVyID0gJHRlbXBbMF07CgkJCSR0ZW1wWzBdID0gJHRlbXBbJGNvbG5vXTsK CQkJJHRlbXBbJGNvbG5vXSA9ICR0bXBob2xkZXI7CgkJCSRuZXdsaW5lID0gIiI7CgkJCWZvciAo JGN0cj0wOyAkY3RyIDwgJHR0bGl0ZW1zIDsgJGN0cisrKSB7CgkJCQkkbmV3bGluZT0kbmV3bGlu ZSAuICR0ZW1wWyRjdHJdIC4gIiwiOwoJCQl9CgkJCWNob3AoJG5ld2xpbmUpOwoJCQlwdXNoKEB0 bXBhcnJheSwkbmV3bGluZSk7CgkJfQoJfQoJaWYgKCRhbHBudW0gZXEgJ24nKSB7CgkJQHRtcGFy cmF5ID0gc29ydCB7JGEgPD0+ICRifSBAdG1wYXJyYXk7Cgl9IGVsc2UgewoJCUB0bXBhcnJheSA9 IChzb3J0IEB0bXBhcnJheSk7Cgl9Cglmb3JlYWNoICRsaW5lIChAdG1wYXJyYXkpCgl7CgkJY2hv bXAoJGxpbmUpOwoJCWlmICgkbGluZSBuZSAnJykgewoJCQlteSBAdGVtcCA9IHNwbGl0KC9cLC8s JGxpbmUpOwoJCQlteSAkdG1waG9sZGVyID0gJHRlbXBbMF07CgkJCSR0ZW1wWzBdID0gJHRlbXBb JGNvbG5vXTsKCQkJJHRlbXBbJGNvbG5vXSA9ICR0bXBob2xkZXI7CgkJCSRuZXdsaW5lID0gIiI7 CgkJCWZvciAoJGN0cj0wOyAkY3RyIDwgJHR0bGl0ZW1zIDsgJGN0cisrKXsKCQkJCSRuZXdsaW5l PSRuZXdsaW5lIC4gJHRlbXBbJGN0cl0gLiAiLCI7CgkJCX0KCQkJY2hvcCgkbmV3bGluZSk7CgkJ CXB1c2goQHNydGVkYXJyYXksJG5ld2xpbmUpOwoJCX0KCX0KCglpZiAoJHNydGRpciBlcSAnZHNj JykgewoJCUB0bXBhcnJheSA9IHJldmVyc2UoQHNydGVkYXJyYXkpOwoJCXJldHVybiAoQHRtcGFy cmF5KTsKCX0gZWxzZSB7CgkJcmV0dXJuIChAc3J0ZWRhcnJheSk7Cgl9Cn0KCnN1YiBGZXRjaFB1 YmxpY0lwIHsKICAgIG15ICVwcm94eXNldHRpbmdzOwogICAgJkdlbmVyYWw6OnJlYWRoYXNoKCIk e0dlbmVyYWw6OnN3cm9vdH0vcHJveHkvc2V0dGluZ3MiLCBcJXByb3h5c2V0dGluZ3MpOwogICAg aWYgKCRfPSRwcm94eXNldHRpbmdzeydVUFNUUkVBTV9QUk9YWSd9KSB7CiAgICAgICAgbXkgKCRw ZWVyLCAkcGVlcnBvcnQpID0gKC9eKD86W2EtekEtWiBdK1w6XC9cLyk/KD86W0EtWmEtejAtOVxf XC5cLV0qPyg/Olw6W0EtWmEtejAtOVxfXC5cLV0qPyk/XEApPyhbYS16QS1aMC05XC5cX1wtXSo/ KSg/Olw6KFswLTldezEsNX0pKT8oPzpcLy4qPyk/JC8pOwogICAgICAgIE5ldDo6U1NMZWF5Ojpz ZXRfcHJveHkoJHBlZXIsJHBlZXJwb3J0LCRwcm94eXNldHRpbmdzeydVUFNUUkVBTV9VU0VSJ30s JHByb3h5c2V0dGluZ3N7J1VQU1RSRUFNX1BBU1NXT1JEJ30gKTsKICAgIH0KICAgIG15ICgkb3V0 LCAkcmVzcG9uc2UpID0gTmV0OjpTU0xlYXk6OmdldF9odHRwKCAgJ2NoZWNraXAuZHluZG5zLm9y ZycsCiAgICAgICAgICAgICAgICAJCQkJICAgIDgwLAogICAgICAgIAkJCQkJICAgICIvIiwKCQkJ CQkJICAgIE5ldDo6U1NMZWF5OjptYWtlX2hlYWRlcnMoJ1VzZXItQWdlbnQnID0+ICdJUEZpcmUn ICkKCQkJCQkJKTsKICAgIGlmICgkcmVzcG9uc2UgPX4gbSVIVFRQLzFcLi4gMjAwIE9LJSkgewoJ JG91dCA9fiAvQ3VycmVudCBJUCBBZGRyZXNzOiAoXGQrLlxkKy5cZCsuXGQrKS87CglyZXR1cm4g JDE7CiAgICB9CiAgICByZXR1cm4gJyc7Cn0KCiMKIyBDaGVjayBpZiBob3N0bmFtZS5kb21haW4g cHJvdmlkZWQgaGF2ZSBJUCBwcm92aWRlZAojIHVzZSBnZXRob3N0YnluYW1lIHRvIHZlcmlmeSB0 aGF0CiMgUGFyYW1zOgojCUlQCiMJaG9zdG5hbWUKIwlkb21haW4KIyBPdXRwdXQgCiMJMSBJUCBt YXRjaGVzIGhvc3QuZG9tYWluCiMJMCBub3QgaW4gc3luYwojCnN1YiBEeW5kbnNTZXJ2aWNlU3lu YyAoJDskOyQpIHsKIAogICAgbXkgKCRpcCwkaG9zdE5hbWUsJGRvbWFpbikgPSBAXzsKICAgIG15 IEBhZGRyZXNzZXM7CgogICAgI2ZpeCBtZSBubyBpcCBHUk9VUCwgd2hhdCBpcyB0aGUgbmFtZSA/ CiAgICAkaG9zdE5hbWUgPX4gcy8kR2VuZXJhbDo6bm9pcHByZWZpeC8vOwogICAgaWYgKCRob3N0 TmFtZSkgeyAjbWF5IGJlIGVtcHR5CgkkaG9zdE5hbWUgPSAiJGhvc3ROYW1lLiRkb21haW4iOwoJ QGFkZHJlc3NlcyA9IGdldGhvc3RieW5hbWUoJGhvc3ROYW1lKTsKICAgIH0KCiAgICBpZiAoJGFk ZHJlc3Nlc1swXSBlcSAnJykgewkJICAgCSMgbm90aGluZyByZXR1cm5lZCA/CgkkaG9zdE5hbWUg PSAkZG9tYWluOyAgIAkJCSMgdHJ5IHJlc29sdmluZyB3aXRoIGRvbWFpbiBvbmx5CiAgICAgICAg QGFkZHJlc3NlcyA9IGdldGhvc3RieW5hbWUoJGhvc3ROYW1lKTsKICAgIH0KCiAgICBpZiAoJGFk ZHJlc3Nlc1swXSBuZSAnJykgeyAJCSAgIAkjIGdvdCBzb21ldGhpbmcgPwoJIyZHZW5lcmFsOjps b2coIm5hbWU6JGFkZHJlc3Nlc1swXSwgYWxpYXM6JGFkZHJlc3Nlc1sxXSIpOwkJCSAgICAKCSMg QnVpbGQgY2xlYXIgdGV4dCBsaXN0IG9mIElQCglAYWRkcmVzc2VzID0gbWFwICggJlNvY2tldDo6 aW5ldF9udG9hKCRfKSwgQGFkZHJlc3Nlc1s0Li4kI2FkZHJlc3Nlc10pOwoJaWYgKGdyZXAgKC8k aXAvLCBAYWRkcmVzc2VzKSkgewoJICAgIHJldHVybiAxOwoJfQogICAgfQogICAgcmV0dXJuIDA7 Cn0KIwojIFRoaXMgc3ViIHJldHVybnMgdGhlIHJlZCBJUCB1c2VkIHRvIGNvbXBhcmUgaW4gRHlu ZG5zU2VydmljZVN5bmMKIwpzdWIgR2V0RHluZG5zUmVkSVAgewogICAgbXkgJXNldHRpbmdzOwog ICAgJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vZGRucy9zZXR0aW5ncyIs IFwlc2V0dGluZ3MpOwoKICAgIG9wZW4oSVAsICIke0dlbmVyYWw6OnN3cm9vdH0vcmVkL2xvY2Fs LWlwYWRkcmVzcyIpIG9yIHJldHVybiAndW5hdmFpbGFibGUnOwogICAgbXkgJGlwID0gPElQPjsK ICAgIGNsb3NlKElQKTsKICAgIGNob21wICRpcDsKCiAgICBpZiAoJkdlbmVyYWw6OklwSW5TdWJu ZXQgKCRpcCwnMTAuMC4wLjAnLCcyNTUuMC4wLjAnKSB8fAogICAgICAgICZHZW5lcmFsOjpJcElu U3VibmV0ICgkaXAsJzE3Mi4xNi4wLjAuJywnMjU1LjI0MC4wLjAnKSB8fAogICAgICAgICZHZW5l cmFsOjpJcEluU3VibmV0ICgkaXAsJzE5Mi4xNjguMC4wJywnMjU1LjI1NS4wLjAnKSkKICAgIHsK CWlmICgkc2V0dGluZ3N7J0JFSElORFJPVVRFUid9IGVxICdGRVRDSF9JUCcpIHsKICAgIAkgICAg bXkgJFJlYWxJUCA9ICZHZW5lcmFsOjpGZXRjaFB1YmxpY0lwOwoJICAgICRpcCA9ICgmR2VuZXJh bDo6dmFsaWRpcCAoJFJlYWxJUCkgPyAgJFJlYWxJUCA6ICd1bmF2YWlsYWJsZScpOwoJfQogICAg fQogICAgcmV0dXJuICRpcDsKfQoKIyBUcmFuc2xhdGUgSUNNUCBjb2RlIHRvIHRleHQKIyByZWY6 IGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaWNtcC1wYXJhbWV0ZXJzCnN1YiBHZXRJ Y21wRGVzY3JpcHRpb24gKCQpIHsKICAgIG15ICRpbmRleCA9IHNoaWZ0OwogICAgbXkgQGljbXBf ZGVzY3JpcHRpb24gPSAoCiAgICAnRWNobyBSZXBseScsCQkJIzAKICAgICdVbmFzc2lnbmVkJywK ICAgICdVbmFzc2lnbmVkJywKICAgICdEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZScsCiAgICAnU291 cmNlIFF1ZW5jaCcsCiAgICAnUmVkaXJlY3QnLAogICAgJ0FsdGVybmF0ZSBIb3N0IEFkZHJlc3Mn LAogICAgJ1VuYXNzaWduZWQnLAogICAgJ0VjaG8nLAogICAgJ1JvdXRlciBBZHZlcnRpc2VtZW50 JywKICAgICdSb3V0ZXIgU29saWNpdGF0aW9uJywJCSMxMAogICAgJ1RpbWUgRXhjZWVkZWQnLAog ICAgJ1BhcmFtZXRlciBQcm9ibGVtJywKICAgICdUaW1lc3RhbXAnLAogICAgJ1RpbWVzdGFtcCBS ZXBseScsCiAgICAnSW5mb3JtYXRpb24gUmVxdWVzdCcsCiAgICAnSW5mb3JtYXRpb24gUmVwbHkn LAogICAgJ0FkZHJlc3MgTWFzayBSZXF1ZXN0JywKICAgICdBZGRyZXNzIE1hc2sgUmVwbHknLAog ICAgJ1Jlc2VydmVkIChmb3IgU2VjdXJpdHkpJywKICAgICdSZXNlcnZlZCAoZm9yIFJvYnVzdG5l c3MgRXhwZXJpbWVudCknLCAjMjAKICAgICdSZXNlcnZlZCcsCiAgICAnUmVzZXJ2ZWQnLAogICAg J1Jlc2VydmVkJywKICAgICdSZXNlcnZlZCcsCiAgICAnUmVzZXJ2ZWQnLAogICAgJ1Jlc2VydmVk JywKICAgICdSZXNlcnZlZCcsCiAgICAnUmVzZXJ2ZWQnLAogICAgJ1Jlc2VydmVkJywKICAgICdU cmFjZXJvdXRlJywJCQkJIzMwCiAgICAnRGF0YWdyYW0gQ29udmVyc2lvbiBFcnJvcicsCiAgICAn TW9iaWxlIEhvc3QgUmVkaXJlY3QnLAogICAgJ0lQdjYgV2hlcmUtQXJlLVlvdScsCiAgICAnSVB2 NiBJLUFtLUhlcmUnLAogICAgJ01vYmlsZSBSZWdpc3RyYXRpb24gUmVxdWVzdCcsCiAgICAnTW9i aWxlIFJlZ2lzdHJhdGlvbiBSZXBseScsCiAgICAnRG9tYWluIE5hbWUgUmVxdWVzdCcsCiAgICAn RG9tYWluIE5hbWUgUmVwbHknLAogICAgJ1NLSVAnLAogICAgJ1Bob3R1cicsCQkJCSM0MAogICAg J0V4cGVyaW1lbnRhbCcpOwogICAgaWYgKCRpbmRleD40MSkge3JldHVybiAndW5rbm93bid9IGVs c2Uge3JldHVybiBAaWNtcF9kZXNjcmlwdGlvblskaW5kZXhdfTsKfQoxOwo= --===============4065338043785935035== Content-Type: text/plain Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ovpnmain.cgi" MIME-Version: 1.0 IyEvdXNyL2Jpbi9wZXJsCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIwojIElQRmlyZS5vcmcgLSBBIGxpbnV4IGJhc2VkIGZpcmV3YWxsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgIElQ RmlyZSBUZWFtICA8aW5mb0BpcGZpcmUub3JnPiAgICAgICAgICAgICAgICAgICAgICMKIyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICAgICAjCiMgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAg ICAgICMKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAgIwojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAgICAgIwojIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAg ICAgICAjCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSAgICAgICAgICAgICAgICMKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgICMKIyBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4g ICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMj CiMgQmFzZWQgb24gSVBGaXJlQ29yZSA1NQojIyMKdXNlIENHSTsKdXNlIENHSSBxdy86c3RhbmRh cmQvOwp1c2UgTmV0OjpETlM7CnVzZSBOZXQ6OlBpbmc7CnVzZSBOZXQ6OlRlbG5ldDsKdXNlIEZp bGU6OkNvcHk7CnVzZSBGaWxlOjpUZW1wIHF3LyB0ZW1wZmlsZSB0ZW1wZGlyIC87CnVzZSBzdHJp Y3Q7CnVzZSBBcmNoaXZlOjpaaXAgcXcoOkVSUk9SX0NPREVTIDpDT05TVEFOVFMpOwpyZXF1aXJl ICcvdmFyL2lwZmlyZS9nZW5lcmFsLWZ1bmN0aW9ucy5wbCc7CnJlcXVpcmUgIiR7R2VuZXJhbDo6 c3dyb290fS9sYW5nLnBsIjsKcmVxdWlyZSAiJHtHZW5lcmFsOjpzd3Jvb3R9L2hlYWRlci5wbCI7 CnJlcXVpcmUgIiR7R2VuZXJhbDo6c3dyb290fS9jb3VudHJpZXMucGwiOwoKIyBlbmFibGUgb25s eSB0aGUgZm9sbG93aW5nIG9uIGRlYnVnZ2luZyBwdXJwb3NlCiN1c2Ugd2FybmluZ3M7CiN1c2Ug Q0dJOjpDYXJwICdmYXRhbHNUb0Jyb3dzZXInOwojd29ya2Fyb3VuZCB0byBzdXBwcmVzcyBhIHdh cm5pbmcgd2hlbiBhIHZhcmlhYmxlIGlzIHVzZWQgb25seSBvbmNlCm15IEBkdW1teSA9ICggJHtI ZWFkZXI6OmNvbG91cmdyZWVufSwgJHtIZWFkZXI6OmNvbG91cmJsdWV9ICk7CnVuZGVmIChAZHVt bXkpOwoKbXkgJWNvbG9yID0gKCk7Cm15ICVtYWluc2V0dGluZ3MgPSAoKTsKJkdlbmVyYWw6OnJl YWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vbWFpbi9zZXR0aW5ncyIsIFwlbWFpbnNldHRpbmdz KTsKJkdlbmVyYWw6OnJlYWRoYXNoKCIvc3J2L3dlYi9pcGZpcmUvaHRtbC90aGVtZXMvIi4kbWFp bnNldHRpbmdzeydUSEVNRSd9LiIvaW5jbHVkZS9jb2xvcnMudHh0IiwgXCVjb2xvcik7CgojIyMK IyMjIEluaXRpYWxpemUgdmFyaWFibGVzCiMjIwpteSAlbmV0c2V0dGluZ3M9KCk7Cm15ICVjZ2lw YXJhbXM9KCk7Cm15ICV2cG5zZXR0aW5ncz0oKTsKbXkgJWNoZWNrZWQ9KCk7Cm15ICVjb25maWdo YXNoPSgpOwpteSAlY2FoYXNoPSgpOwpteSAlc2VsZWN0ZWQ9KCk7Cm15ICR3YXJubWVzc2FnZSA9 ICcnOwpteSAkZXJyb3JtZXNzYWdlID0gJyc7Cm15ICVzZXR0aW5ncz0oKTsKbXkgJHJvdXRlc19w dXNoX2ZpbGUgPSAnJzsKJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vZXRo ZXJuZXQvc2V0dGluZ3MiLCBcJW5ldHNldHRpbmdzKTsKJGNnaXBhcmFtc3snRU5BQkxFRCd9ID0g J29mZic7CiRjZ2lwYXJhbXN7J0VOQUJMRURfQkxVRSd9ID0gJ29mZic7CiRjZ2lwYXJhbXN7J0VO QUJMRURfT1JBTkdFJ30gPSAnb2ZmJzsKJGNnaXBhcmFtc3snRURJVF9BRFZBTkNFRCd9ID0gJ29m Zic7CiRjZ2lwYXJhbXN7J05BVCd9ID0gJ29mZic7CiRjZ2lwYXJhbXN7J0NPTVBSRVNTSU9OJ30g PSAnb2ZmJzsKJGNnaXBhcmFtc3snT05MWV9QUk9QT1NFRCd9ID0gJ29mZic7CiRjZ2lwYXJhbXN7 J0FDVElPTid9ID0gJyc7CiRjZ2lwYXJhbXN7J0NBX05BTUUnfSA9ICcnOwokY2dpcGFyYW1zeydE SENQX0RPTUFJTid9ID0gJyc7CiRjZ2lwYXJhbXN7J0RIQ1BfRE5TJ30gPSAnJzsKJGNnaXBhcmFt c3snREhDUF9XSU5TJ30gPSAnJzsKJGNnaXBhcmFtc3snUk9VVEVTX1BVU0gnfSA9ICcnOwokY2dp cGFyYW1zeydEQ09NUExaTyd9ID0gJ29mZic7CiRjZ2lwYXJhbXN7J01TU0ZJWCd9ID0gJyc7CiRj Z2lwYXJhbXN7J251bWJlcid9ID0gJyc7CiRyb3V0ZXNfcHVzaF9maWxlID0gIiR7R2VuZXJhbDo6 c3dyb290fS9vdnBuL3JvdXRlc19wdXNoIjsKdW5sZXNzICgtZSAkcm91dGVzX3B1c2hfZmlsZSkg ICAgeyBzeXN0ZW0oInRvdWNoICRyb3V0ZXNfcHVzaF9maWxlIik7IH0KdW5sZXNzICgtZSAiJHtH ZW5lcmFsOjpzd3Jvb3R9L292cG4vY2NkLmNvbmYiKSAgICB7IHN5c3RlbSgidG91Y2ggJHtHZW5l cmFsOjpzd3Jvb3R9L292cG4vY2NkLmNvbmYiKTsgfQp1bmxlc3MgKC1lICIke0dlbmVyYWw6OnN3 cm9vdH0vb3Zwbi9jY2Ryb3V0ZSIpICAgIHsgc3lzdGVtKCJ0b3VjaCAke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9jY2Ryb3V0ZSIpOyB9CnVubGVzcyAoLWUgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBu L2NjZHJvdXRlMiIpICAgIHsgc3lzdGVtKCJ0b3VjaCAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j Y2Ryb3V0ZTIiKTsgfQoKJkhlYWRlcjo6Z2V0Y2dpaGFzaChcJWNnaXBhcmFtcywgeyd3YW50Zmls ZScgPT4gMSwgJ2ZpbGV2YXInID0+ICdGSCd9KTsKCiMgcHJlcGFyZSBvcGVudnBuIGNvbmZpZyBm aWxlCiMjIwojIyMgVXNlZnVsIGZ1bmN0aW9ucwojIyMKc3ViIGhhdmVPcmFuZ2VOZXQKewoJaWYg KCRuZXRzZXR0aW5nc3snQ09ORklHX1RZUEUnfSA9PSAyKSB7cmV0dXJuIDE7fQoJaWYgKCRuZXRz ZXR0aW5nc3snQ09ORklHX1RZUEUnfSA9PSA0KSB7cmV0dXJuIDE7fQoJcmV0dXJuIDA7Cn0KCnN1 YiBoYXZlQmx1ZU5ldAp7CglpZiAoJG5ldHNldHRpbmdzeydDT05GSUdfVFlQRSd9ID09IDMpIHty ZXR1cm4gMTt9CglpZiAoJG5ldHNldHRpbmdzeydDT05GSUdfVFlQRSd9ID09IDQpIHtyZXR1cm4g MTt9CglyZXR1cm4gMDsKfQoKc3ViIHNpemVmb3JtYXR7CiAgICBteSAkYnl0ZXNpemUgPSBzaGlm dDsKICAgIG15ICRpID0gMDsKCiAgICB3aGlsZShhYnMoJGJ5dGVzaXplKSA+PSAxMDI0KXsKCSRi eXRlc2l6ZT0kYnl0ZXNpemUvMTAyNDsKCSRpKys7CglsYXN0IGlmKCRpPT02KTsKICAgIH0KCiAg ICBteSBAdW5pdHMgPSAoIkJ5dGVzIiwiS0IiLCJNQiIsIkdCIiwiVEIiLCJQQiIsIkVCIik7CiAg ICBteSAkbmV3c2l6ZT0oaW50KCRieXRlc2l6ZSoxMDAgKzAuNSkpLzEwMDsKICAgIHJldHVybigi JG5ld3NpemUgJHVuaXRzWyRpXSIpOwp9CgpzdWIgdmFsaWRfZG5zX2hvc3QgewoJbXkgJGhvc3Ru YW1lID0gJF9bMF07Cgl1bmxlc3MgKCRob3N0bmFtZSkgeyByZXR1cm4gIk5vIGhvc3RuYW1lIn07 CglteSAkcmVzID0gbmV3IE5ldDo6RE5TOjpSZXNvbHZlcjsKCW15ICRxdWVyeSA9ICRyZXMtPnNl YXJjaCgiJGhvc3RuYW1lIik7CglpZiAoJHF1ZXJ5KSB7CgkJZm9yZWFjaCBteSAkcnIgKCRxdWVy eS0+YW5zd2VyKSB7CgkJCSMjIFBvdGVudGlhbCBidWcgLSB3ZSBhcmUgb25seSBsb29raW5nIGF0 IEEgcmVjb3JkczoKCQkJcmV0dXJuIDAgaWYgJHJyLT50eXBlIGVxICJBIjsKCQl9Cgl9IGVsc2Ug ewoJCXJldHVybiAkcmVzLT5lcnJvcnN0cmluZzsKCX0KfQoKc3ViIGNsZWFuc3NsZGF0YWJhc2UK ewogICAgaWYgKG9wZW4oRklMRSwgIj4ke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy9zZXJp YWwiKSkgewoJcHJpbnQgRklMRSAiMDEiOwoJY2xvc2UgRklMRTsKICAgIH0KICAgIGlmIChvcGVu KEZJTEUsICI+JHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvaW5kZXgudHh0IikpIHsKCXBy aW50IEZJTEUgIiI7CgljbG9zZSBGSUxFOwogICAgfQogICAgdW5saW5rICgiJHtHZW5lcmFsOjpz d3Jvb3R9L292cG4vY2VydHMvaW5kZXgudHh0Lm9sZCIpOwogICAgdW5saW5rICgiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vY2VydHMvc2VyaWFsLm9sZCIpOwogICAgdW5saW5rICgiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vY2VydHMvMDEucGVtIik7Cn0KCnN1YiBuZXdjbGVhbnNzbGRhdGFiYXNl CnsKICAgIGlmICghIC1zICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy9zZXJpYWwiICkg IHsKICAgICAgICBvcGVuKEZJTEUsICI+JHtHZW5lcmFsOjpzd3Jvb3R9KG92cG4vY2VydHMvc2Vy aWFsIik7CglwcmludCBGSUxFICIwMSI7CgljbG9zZSBGSUxFOwogICAgfQogICAgaWYgKCEgLXMg Ij4ke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy9pbmRleC50eHQiKSB7CglzeXN0ZW0gKCJ0 b3VjaCAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy9pbmRleC50eHQiKTsKICAgIH0KICAg IHVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL2luZGV4LnR4dC5vbGQiKTsK ICAgIHVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3NlcmlhbC5vbGQiKTsK fQoKc3ViIGRlbGV0ZWJhY2t1cGNlcnQKewoJaWYgKG9wZW4oRklMRSwgIiR7R2VuZXJhbDo6c3dy b290fS9vdnBuL2NlcnRzL3NlcmlhbC5vbGQiKSkgewoJCW15ICRoZXh2YWx1ZSA9IDxGSUxFPjsK CQljaG9tcCAkaGV4dmFsdWU7CgkJY2xvc2UgRklMRTsKCQl1bmxpbmsgKCIke0dlbmVyYWw6OnN3 cm9vdH0vb3Zwbi9jZXJ0cy8kaGV4dmFsdWUucGVtIik7Cgl9Cn0KCnN1YiBjaGVja3BvcnRmdyB7 CiAgICBteSAkS0VZMiA9ICRfWzBdOyAjIGtleTIKICAgIG15ICRTUkNfUE9SVCA9ICRfWzFdOyAj IHNyY19wb3J0CiAgICBteSAkUFJPVE9DT0wgPSAkX1syXTsgIyBwcm90b2NvbAogICAgbXkgJFNS Q19JUCA9ICRfWzNdOyAjIHNvdXJjZWlwCgogICAgbXkgJHBmd2ZpbGVuYW1lID0gIiR7R2VuZXJh bDo6c3dyb290fS9wb3J0ZncvY29uZmlnIjsKICAgIG9wZW4oRklMRSwgJHBmd2ZpbGVuYW1lKSBv ciBkaWUgJ1VuYWJsZSB0byBvcGVuIGNvbmZpZyBmaWxlLic7CiAgICBteSBAcGZ3Y3VycmVudCA9 IDxGSUxFPjsKICAgIGNsb3NlKEZJTEUpOwogICAgbXkgJHBmd2tleTEgPSAwOyAjIHVzZWQgZm9y IGZpbmRpbmcgbGFzdCBzZXF1ZW5jZSBudW1iZXIgdXNlZCAKICAgIGZvcmVhY2ggbXkgJHBmd2xp bmUgKEBwZndjdXJyZW50KQogICAgewoJbXkgQHBmd3RlbXAgPSBzcGxpdCgvXCwvLCRwZndsaW5l KTsKCgljaG9tcCAoJHBmd3RlbXBbOF0pOwoJaWYgKCRLRVkyIGVxICIwIil7ICMgaWYga2V5MiBp cyAwIHRoZW4gaXQgaXMgYSBwb3J0ZncgYWRkaXRpb24KCQlpZiAoICRTUkNfUE9SVCBlcSAkcGZ3 dGVtcFszXSAmJgoJCQkkUFJPVE9DT0wgZXEgJHBmd3RlbXBbMl0gJiYKCQkJJFNSQ19JUCBlcSAk cGZ3dGVtcFs3XSkKCQl7CgkJCSAkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnc291cmNlIHBv cnQgaW4gdXNlJ30gJFNSQ19QT1JUIjsKCQl9CgkJIyBDaGVjayBpZiBrZXkyID0gMCwgaWYgaXQg aXMgdGhlbiBpdCBpcyBhIHBvcnQgZm9yd2FyZCBlbnRyeSBhbmQgd2Ugd2FudCB0aGUgc2VxdWVu Y2UgbnVtYmVyCgkJaWYgKCAkcGZ3dGVtcFsxXSBlcSAiMCIpIHsKCQkJJHBmd2tleTE9JHBmd3Rl bXBbMF07CgkJfQoJCSMgRGFycmVuIENyaXRjaGxleSAtIER1cGxpY2F0ZSBvciBvdmVybGFwcGlu ZyBQb3J0IHJhbmdlIGNoZWNrCgkJaWYgKCRwZnd0ZW1wWzFdIGVxICIwIiAmJiAKCQkJJFBST1RP Q09MIGVxICRwZnd0ZW1wWzJdICYmCgkJCSRTUkNfSVAgZXEgJHBmd3RlbXBbN10gJiYKCQkJJGVy cm9ybWVzc2FnZSBlcSAnJykgCgkJewoJCQkmcG9ydGNoZWNrcygkU1JDX1BPUlQsICRwZnd0ZW1w WzVdKTsJCQojCQkJJnBvcnRjaGVja3MoJHBmd3RlbXBbM10sICRwZnd0ZW1wWzVdKTsKIwkJCSZw b3J0Y2hlY2tzKCRwZnd0ZW1wWzNdLCAkU1JDX0lQKTsKCQl9Cgl9CiAgICB9CiMgICAgJGVycm9y bWVzc2FnZT0iJEtFWTIgJFNSQ19QT1JUICRQUk9UT0NPTCAkU1JDX0lQIjsKCiAgICByZXR1cm47 Cn0KCnN1YiBjaGVja3BvcnRvdmVybGFwCnsKCW15ICRwb3J0cmFuZ2UxID0gJF9bMF07ICMgTmV3 IHBvcnQgcmFuZ2UKCW15ICRwb3J0cmFuZ2UyID0gJF9bMV07ICMgZXhpc3RpbmcgcG9ydCByYW5n ZQoJbXkgQHRlbXByMSA9IHNwbGl0KC9cOi8sJHBvcnRyYW5nZTEpOwoJbXkgQHRlbXByMiA9IHNw bGl0KC9cOi8sJHBvcnRyYW5nZTIpOwoKCXVubGVzcyAoJmNoZWNrcG9ydGluYygkdGVtcHIxWzBd LCAkcG9ydHJhbmdlMikpeyByZXR1cm4gMDt9Cgl1bmxlc3MgKCZjaGVja3BvcnRpbmMoJHRlbXBy MVsxXSwgJHBvcnRyYW5nZTIpKXsgcmV0dXJuIDA7fQoJCgl1bmxlc3MgKCZjaGVja3BvcnRpbmMo JHRlbXByMlswXSwgJHBvcnRyYW5nZTEpKXsgcmV0dXJuIDA7fQoJdW5sZXNzICgmY2hlY2twb3J0 aW5jKCR0ZW1wcjJbMV0sICRwb3J0cmFuZ2UxKSl7IHJldHVybiAwO30KCglyZXR1cm4gMTsgIyBF dmVyeXRoaW5nIGNoZWNrcyBvdXQhCn0KCiMgRGFycmVuIENyaXRjaGxleSAtIHdlIHdhbnQgdG8g bWFrZSBzdXJlIHRoYXQgYSBwb3J0IGVudHJ5IGlzIG5vdCB3aXRoaW4gYW4gYWxyZWFkeSBleGlz dGluZyByYW5nZQpzdWIgY2hlY2twb3J0aW5jCnsKCW15ICRwb3J0MSA9ICRfWzBdOyAjIFBvcnQK CW15ICRwb3J0cmFuZ2UyID0gJF9bMV07ICMgUG9ydCByYW5nZQoJbXkgQHRlbXByMSA9IHNwbGl0 KC9cOi8sJHBvcnRyYW5nZTIpOwoKCWlmICgkcG9ydDEgPCAkdGVtcHIxWzBdIHx8ICRwb3J0MSA+ ICR0ZW1wcjFbMV0pIHsKCQlyZXR1cm4gMTsgCgl9IGVsc2UgewoJCXJldHVybiAwOyAKCX0KfQoj IERhcnJlbiBDcml0Y2hsZXkgLSBEdXBsaWNhdGUgb3Igb3ZlcmxhcHBpbmcgUG9ydCByYW5nZSBj aGVjawpzdWIgcG9ydGNoZWNrcwp7CglteSAkcDEgPSAkX1swXTsgIyBOZXcgcG9ydCByYW5nZQoJ bXkgJHAyID0gJF9bMV07ICMgZXhpc3RpbmcgcG9ydCByYW5nZQojCSRfID0gJF9bMF07CglvdXIg KCRwcnRyYW5nZTEsICRwcnRyYW5nZTIpOwoJJHBydHJhbmdlMSA9IDA7CiMJaWYgKG0vOi8gJiYg JHBydHJhbmdlMSA9PSAxKSB7ICMgY29tcGFyaW5nIHR3byBwb3J0IHJhbmdlcwojCQl1bmxlc3Mg KCZjaGVja3BvcnRvdmVybGFwKCRwMSwkcDIpKSB7CiMJCQkkZXJyb3JtZXNzYWdlID0gIiRMYW5n Ojp0cnsnc291cmNlIHBvcnQgb3ZlcmxhcHMnfSAkcDEiOwojCQl9CiMJfQoJaWYgKG0vOi8gJiYg JHBydHJhbmdlMSA9PSAwICYmICRlcnJvcm1lc3NhZ2UgZXEgJycpIHsgIyBjb21wYXJlIG9uZSBw b3J0IHRvIGEgcmFuZ2UKCQl1bmxlc3MgKCZjaGVja3BvcnRpbmMoJHAyLCRwMSkpIHsKCQkJJGVy cm9ybWVzc2FnZSA9ICIkTGFuZzo6dHJ7J3NyY3BydCB3aXRoaW4gZXhpc3RpbmcnfSAkcDEiOwoJ CX0KCX0KCSRwcnRyYW5nZTEgPSAxOwoJaWYgKCEgbS86LyAmJiAkcHJ0cmFuZ2UxID09IDEgJiYg JGVycm9ybWVzc2FnZSBlcSAnJykgeyAjIGNvbXBhcmUgb25lIHBvcnQgdG8gYSByYW5nZQoJCXVu bGVzcyAoJmNoZWNrcG9ydGluYygkcDEsJHAyKSkgewoJCQkkZXJyb3JtZXNzYWdlID0gIiRMYW5n Ojp0cnsnc3JjcHJ0IHJhbmdlIG92ZXJsYXBzJ30gJHAyIjsKCQl9Cgl9CglyZXR1cm47Cn0KCiMg RGFycmVuIENyaXRjaGxleSAtIGNlcnRhaW4gcG9ydHMgYXJlIHJlc2VydmVkIGZvciBJUEZpcmUg CiMgVENQIDY3LDY4LDgxLDIyMiw0NDUKIyBVRFAgNjcsNjgKIyBQYXJhbXMgcGFzc2VkIGluIC0+ IHBvcnQsIHJhbmdleW4sIHByb3RvY29sCnN1YiBkaXNhbGxvd3Jlc2VydmVkCnsKCSMgcG9ydCA2 NyBhbmQgNjggc2FtZSBmb3IgdGNwIGFuZCB1ZHAsIGRvbid0IGJvdGhlciBwdXR0aW5nIGluIGFu IGFycmF5CglteSAkbXNnID0gIiI7CglteSBAdGNwX3Jlc2VydmVkID0gKDgxLDIyMiw0NDUpOwoJ bXkgJHBydCA9ICRfWzBdOyAjIHRoZSBwb3J0IG9yIHJhbmdlCglteSAkcnluID0gJF9bMV07ICMg dGVsbHMgdXMgd2hldGhlciBvciBub3QgaXQgaXMgYSBwb3J0IHJhbmdlCglteSAkcHJvdCA9ICRf WzJdOyAjIHByb3RvY29sCglteSAkc3JjZHN0ID0gJF9bM107ICMgc291cmNlIG9yIGRlc3RpbmF0 aW9uCglpZiAoJHJ5bikgeyAjIGRpc2VjdCBwb3J0IHJhbmdlCgkJaWYgKCRzcmNkc3QgZXEgInNy YyIpIHsKCQkJJG1zZyA9ICIkTGFuZzo6dHJ7J3JzdmQgc3JjIHBvcnQgb3ZlcmxhcCd9IjsKCQl9 IGVsc2UgewoJCQkkbXNnID0gIiRMYW5nOjp0cnsncnN2ZCBkc3QgcG9ydCBvdmVybGFwJ30iOwoJ CX0KCQlteSBAdG1wcm5nID0gc3BsaXQoL1w6LywkcHJ0KTsKCQl1bmxlc3MgKDY3IDwgJHRtcHJu Z1swXSB8fCA2NyA+ICR0bXBybmdbMV0pIHsgJGVycm9ybWVzc2FnZT0iJG1zZyA2NyI7IHJldHVy bjsgfQoJCXVubGVzcyAoNjggPCAkdG1wcm5nWzBdIHx8IDY4ID4gJHRtcHJuZ1sxXSkgeyAkZXJy b3JtZXNzYWdlPSIkbXNnIDY4IjsgcmV0dXJuOyB9CgkJaWYgKCRwcm90IGVxICJ0Y3AiKSB7CgkJ CWZvcmVhY2ggbXkgJHByYW5nZSAoQHRjcF9yZXNlcnZlZCkgewoJCQkJdW5sZXNzICgkcHJhbmdl IDwgJHRtcHJuZ1swXSB8fCAkcHJhbmdlID4gJHRtcHJuZ1sxXSkgeyAkZXJyb3JtZXNzYWdlPSIk bXNnICRwcmFuZ2UiOyByZXR1cm47IH0KCQkJfQoJCX0KCX0gZWxzZSB7CgkJaWYgKCRzcmNkc3Qg ZXEgInNyYyIpIHsKCQkJJG1zZyA9ICIkTGFuZzo6dHJ7J3Jlc2VydmVkIHNyYyBwb3J0J30iOwoJ CX0gZWxzZSB7CgkJCSRtc2cgPSAiJExhbmc6OnRyeydyZXNlcnZlZCBkc3QgcG9ydCd9IjsKCQl9 CgkJaWYgKCRwcnQgPT0gNjcpIHsgJGVycm9ybWVzc2FnZT0iJG1zZyA2NyI7IHJldHVybjsgfQoJ CWlmICgkcHJ0ID09IDY4KSB7ICRlcnJvcm1lc3NhZ2U9IiRtc2cgNjgiOyByZXR1cm47IH0KCQlp ZiAoJHByb3QgZXEgInRjcCIpIHsKCQkJZm9yZWFjaCBteSAkcHJhbmdlIChAdGNwX3Jlc2VydmVk KSB7CgkJCQlpZiAoJHByYW5nZSA9PSAkcHJ0KSB7ICRlcnJvcm1lc3NhZ2U9IiRtc2cgJHByYW5n ZSI7IHJldHVybjsgfQoJCQl9CgkJfQoJfQoJcmV0dXJuOwp9CgoKc3ViIHdyaXRlc2VydmVyY29u ZiB7CiAgICBteSAlc292cG5zZXR0aW5ncyA9ICgpOyAgCiAgICBteSBAdGVtcCA9ICgpOyAgCiAg ICAmR2VuZXJhbDo6cmVhZGhhc2goIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL3NldHRpbmdzIiwg XCVzb3ZwbnNldHRpbmdzKTsKICAgICZyZWFkX3JvdXRlcHVzaGZpbGU7CiAgICAKICAgIG9wZW4o Q09ORiwgICAgIj4ke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXJ2ZXIuY29uZiIpIG9yIGRpZSAi VW5hYmxlIHRvIG9wZW4gJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vc2VydmVyLmNvbmY6ICQhIjsK ICAgIGZsb2NrIENPTkYsIDI7CiAgICBwcmludCBDT05GICIjT3BlblZQTiBTZXJ2ZXIgY29uZlxu IjsKICAgIHByaW50IENPTkYgIlxuIjsKICAgIHByaW50IENPTkYgImRhZW1vbiBvcGVudnBuc2Vy dmVyXG4iOwogICAgcHJpbnQgQ09ORiAid3JpdGVwaWQgL3Zhci9ydW4vb3BlbnZwbi5waWRcbiI7 CiAgICBwcmludCBDT05GICIjREFOIHByZXBhcmUgT3BlblZQTiBmb3IgbGlzdGVuaW5nIG9uIGJs dWUgYW5kIG9yYW5nZVxuIjsKICAgIHByaW50IENPTkYgIjtsb2NhbCAkc292cG5zZXR0aW5nc3sn VlBOX0lQJ31cbiI7CiAgICBwcmludCBDT05GICJkZXYgJHNvdnBuc2V0dGluZ3N7J0RERVZJQ0Un fVxuIjsKICAgIHByaW50IENPTkYgIiRzb3ZwbnNldHRpbmdzeydEREVWSUNFJ30tbXR1ICRzb3Zw bnNldHRpbmdzeydETVRVJ31cbiI7CiAgICBwcmludCBDT05GICJwcm90byAkc292cG5zZXR0aW5n c3snRFBST1RPQ09MJ31cbiI7CiAgICBwcmludCBDT05GICJwb3J0ICRzb3ZwbnNldHRpbmdzeydE REVTVF9QT1JUJ31cbiI7CiAgICBwcmludCBDT05GICJzY3JpcHQtc2VjdXJpdHkgMyBzeXN0ZW1c biI7CiAgICBwcmludCBDT05GICJpZmNvbmZpZy1wb29sLXBlcnNpc3QgL3Zhci9pcGZpcmUvb3Zw bi9vdnBuLWxlYXNlcy5kYiAzNjAwXG4iOwogICAgcHJpbnQgQ09ORiAiY2xpZW50LWNvbmZpZy1k aXIgL3Zhci9pcGZpcmUvb3Zwbi9jY2RcbiI7CiAgICBwcmludCBDT05GICJ0bHMtc2VydmVyXG4i OwogICAgcHJpbnQgQ09ORiAiY2EgL3Zhci9pcGZpcmUvb3Zwbi9jYS9jYWNlcnQucGVtXG4iOwog ICAgcHJpbnQgQ09ORiAiY2VydCAvdmFyL2lwZmlyZS9vdnBuL2NlcnRzL3NlcnZlcmNlcnQucGVt XG4iOwogICAgcHJpbnQgQ09ORiAia2V5IC92YXIvaXBmaXJlL292cG4vY2VydHMvc2VydmVya2V5 LnBlbVxuIjsKICAgIHByaW50IENPTkYgImRoIC92YXIvaXBmaXJlL292cG4vY2EvZGgxMDI0LnBl bVxuIjsKICAgIG15IEB0ZW1wb3ZwbnN1Ym5ldCA9IHNwbGl0KCJcLyIsJHNvdnBuc2V0dGluZ3N7 J0RPVlBOX1NVQk5FVCd9KTsKICAgIHByaW50IENPTkYgInNlcnZlciAkdGVtcG92cG5zdWJuZXRb MF0gJHRlbXBvdnBuc3VibmV0WzFdXG4iOwogICAgI3ByaW50IENPTkYgInB1c2ggXCJyb3V0ZSAk bmV0c2V0dGluZ3N7J0dSRUVOX05FVEFERFJFU1MnfSAkbmV0c2V0dGluZ3N7J0dSRUVOX05FVE1B U0snfVwiXG4iOwogICAgCiAgICBpZiAoJHZwbnNldHRpbmdzeydST1VURVNfUFVTSCd9IG5lICcn KSB7CgkJQHRlbXAgPSBzcGxpdCgvXG4vLCR2cG5zZXR0aW5nc3snUk9VVEVTX1BVU0gnfSk7CgkJ Zm9yZWFjaCAoQHRlbXApCgkJewoJCQlAdGVtcG92cG5zdWJuZXQgPSBzcGxpdCgiXC8iLCZHZW5l cmFsOjppcGNpZHIybXNrKCRfKSk7CgkJCXByaW50IENPTkYgInB1c2ggXCJyb3V0ZSAiIC4gJHRl bXBvdnBuc3VibmV0WzBdLiAiICIgLiAgJHRlbXBvdnBuc3VibmV0WzFdIC4gIlwiXG4iOwoJCX0K CX0KIyBhLm1hcnggY2NkCglteSAlY2NkY29uZmhhc2g9KCk7CgkmR2VuZXJhbDo6cmVhZGhhc2hh cnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2NkLmNvbmYiLCBcJWNjZGNvbmZoYXNoKTsK CWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2NkY29uZmhhc2gpIHsKCQlteSAkYT0kY2NkY29uZmhh c2h7JGtleX1bMV07CgkJbXkgKCRiLCRjKSA9IHNwbGl0ICgvXC8vLCAkYSk7CgkJcHJpbnQgQ09O RiAicm91dGUgJGIgIi4mR2VuZXJhbDo6Y2lkcnRvc3ViKCRjKS4iXG4iOwoJfQoJbXkgJWNjZHJv dXRlaGFzaD0oKTsKCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9jY2Ryb3V0ZSIsIFwlY2Nkcm91dGVoYXNoKTsKCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAl Y2Nkcm91dGVoYXNoKSB7CgkJZm9yZWFjaCBteSAkaSAoIDEgLi4gJCN7JGNjZHJvdXRlaGFzaHsk a2V5fX0pewoJCQlteSAoJGEsJGIpPXNwbGl0ICgvXC8vLCRjY2Ryb3V0ZWhhc2h7JGtleX1bJGld KTsKCQkJcHJpbnQgQ09ORiAicm91dGUgJGEgJGJcbiI7CgkJfQoJfQojIGNjZCBlbmQKCglpZiAo JHNvdnBuc2V0dGluZ3N7Q0xJRU5UMkNMSUVOVH0gZXEgJ29uJykgewoJcHJpbnQgQ09ORiAiY2xp ZW50LXRvLWNsaWVudFxuIjsKICAgIH0KICAgIGlmICgkc292cG5zZXR0aW5nc3tNU1NGSVh9IGVx ICdvbicpIHsKCXByaW50IENPTkYgIm1zc2ZpeFxuIjsKICAgIH0KICAgIGlmICgkc292cG5zZXR0 aW5nc3tGUkFHTUVOVH0gbmUgJycgJiYgJHNvdnBuc2V0dGluZ3N7J0RQUk9UT0NPTCd9IG5lICd0 Y3AnKSB7CglwcmludCBDT05GICJmcmFnbWVudCAkc292cG5zZXR0aW5nc3snRlJBR01FTlQnfVxu IjsgICAKICAgIH0KICAgIGlmICgkc292cG5zZXR0aW5nc3tLRUVQQUxJVkVfMX0gPiAwICYmICRz b3ZwbnNldHRpbmdze0tFRVBBTElWRV8yfSA+IDApIHsJCglwcmludCBDT05GICJrZWVwYWxpdmUg JHNvdnBuc2V0dGluZ3N7J0tFRVBBTElWRV8xJ30gJHNvdnBuc2V0dGluZ3N7J0tFRVBBTElWRV8y J31cbiI7CiAgICB9CQogICAgcHJpbnQgQ09ORiAic3RhdHVzLXZlcnNpb24gMVxuIjsKICAgIHBy aW50IENPTkYgInN0YXR1cyAvdmFyL2xvZy9vdnBuc2VydmVyLmxvZyAzMFxuIjsKICAgIHByaW50 IENPTkYgImNpcGhlciAkc292cG5zZXR0aW5nc3tEQ0lQSEVSfVxuIjsKICAgIGlmICgkc292cG5z ZXR0aW5nc3tEQ09NUExaT30gZXEgJ29uJykgewogICAgICAgIHByaW50IENPTkYgImNvbXAtbHpv XG4iOwogICAgfQogICAgaWYgKCRzb3ZwbnNldHRpbmdze1JFRElSRUNUX0dXX0RFRjF9IGVxICdv bicpIHsKICAgICAgICBwcmludCBDT05GICJwdXNoIFwicmVkaXJlY3QtZ2F0ZXdheSBkZWYxXCJc biI7CiAgICB9CiAgICBpZiAoJHNvdnBuc2V0dGluZ3N7REhDUF9ET01BSU59IG5lICcnKSB7CiAg ICAgICAgcHJpbnQgQ09ORiAicHVzaCBcImRoY3Atb3B0aW9uIERPTUFJTiAkc292cG5zZXR0aW5n c3tESENQX0RPTUFJTn1cIlxuIjsKICAgIH0KCiAgICBpZiAoJHNvdnBuc2V0dGluZ3N7REhDUF9E TlN9IG5lICcnKSB7CiAgICAgICAgcHJpbnQgQ09ORiAicHVzaCBcImRoY3Atb3B0aW9uIEROUyAk c292cG5zZXR0aW5nc3tESENQX0ROU31cIlxuIjsKICAgIH0KCiAgICBpZiAoJHNvdnBuc2V0dGlu Z3N7REhDUF9XSU5TfSBuZSAnJykgewogICAgICAgIHByaW50IENPTkYgInB1c2ggXCJkaGNwLW9w dGlvbiBXSU5TICRzb3ZwbnNldHRpbmdze0RIQ1BfV0lOU31cIlxuIjsKICAgIH0KICAgIAogICAg aWYgKCRzb3ZwbnNldHRpbmdze0RIQ1BfV0lOU30gZXEgJycpIHsKCXByaW50IENPTkYgIm1heC1j bGllbnRzIDEwMFxuIjsKICAgIH0KICAgIGlmICgkc292cG5zZXR0aW5nc3tESENQX1dJTlN9IG5l ICcnKSB7CglwcmludCBDT05GICJtYXgtY2xpZW50cyAkc292cG5zZXR0aW5nc3tNQVhfQ0xJRU5U U31cbiI7CiAgICB9CQogICAgcHJpbnQgQ09ORiAidGxzLXZlcmlmeSAvdmFyL2lwZmlyZS9vdnBu L3ZlcmlmeVxuIjsKICAgIHByaW50IENPTkYgImNybC12ZXJpZnkgL3Zhci9pcGZpcmUvb3Zwbi9j cmxzL2NhY3JsLnBlbVxuIjsKICAgIHByaW50IENPTkYgInVzZXIgbm9ib2R5XG4iOwogICAgcHJp bnQgQ09ORiAiZ3JvdXAgbm9ib2R5XG4iOwogICAgcHJpbnQgQ09ORiAicGVyc2lzdC1rZXlcbiI7 CiAgICBwcmludCBDT05GICJwZXJzaXN0LXR1blxuIjsKCWlmICgkc292cG5zZXR0aW5nc3tMT0df VkVSQn0gbmUgJycpIHsKCQlwcmludCBDT05GICJ2ZXJiICRzb3ZwbnNldHRpbmdze0xPR19WRVJC fVxuIjsKCX0gZWxzZSB7CgkJcHJpbnQgQ09ORiAidmVyYiAzXG4iOwoJfQkKICAgIHByaW50IENP TkYgIlxuIjsKICAgIAogICAgY2xvc2UoQ09ORik7Cn0gICAgCgpzdWIgZW1wdHlzZXJ2ZXJsb2d7 CiAgICBpZiAob3BlbihGSUxFLCAiPi92YXIvbG9nL292cG5zZXJ2ZXIubG9nIikpIHsKCWZsb2Nr IEZJTEUsIDI7CglwcmludCBGSUxFICIiOwoJY2xvc2UgRklMRTsKICAgIH0KCn0KCnN1YiBkZWxj Y2RuZXQgCnsKCW15ICVjY2Rjb25maGFzaCA9ICgpOwoJbXkgJWNjZGhhc2ggPSAoKTsKCW15ICRj Y2RuZXRuYW1lPSRfWzBdOwoJaWYgKC1mICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9vdnBuY29u ZmlnIil7CgkJJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBu L292cG5jb25maWciLCBcJWNjZGhhc2gpOwoJCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2NkaGFz aCkgewoJCQlpZiAoJGNjZGhhc2h7JGtleX1bMzJdIGVxICRjY2RuZXRuYW1lKSB7CgkJCQkkZXJy b3JtZXNzYWdlPSRMYW5nOjp0cnsnY2NkIGVyciBob3N0aW5uZXQnfTsKCQkJCXJldHVybjsKCQkJ fQoJCX0KCX0KCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jY2QuY29uZiIsIFwlY2NkY29uZmhhc2gpOwoJZm9yZWFjaCBteSAka2V5IChrZXlzICVjY2Rj b25maGFzaCkgewoJCQlpZiAoJGNjZGNvbmZoYXNoeyRrZXl9WzBdIGVxICRjY2RuZXRuYW1lKXsK CQkJCWRlbGV0ZSAkY2NkY29uZmhhc2h7JGtleX07CgkJCX0KCX0KCSZHZW5lcmFsOjp3cml0ZWhh c2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2NkLmNvbmYiLCBcJWNjZGNvbmZoYXNo KTsKCQoJJndyaXRlc2VydmVyY29uZjsKCXJldHVybiAwOwp9CgpzdWIgYWRkY2NkbmV0CnsKCW15 ICVjY2Rjb25maGFzaD0oKTsKCW15IEBjY2Rjb25mPSgpOwoJbXkgJGNjZG5hbWU9JF9bMF07Cglt eSAkY2NkbmV0PSRfWzFdOwoJbXkgJG92cG5zdWJuZXQ9JF9bMl07CglteSAkc3ViY2lkcjsKCW15 IEBpcDI9KCk7CglteSAkY2hlY2t1cDsKCW15ICRjY2RpcDsKCW15ICRiYXNlYWRkcmVzczsKCWlm KCEmR2VuZXJhbDo6dmFsaWRob3N0bmFtZSgkY2NkbmFtZSkpewoJCSRlcnJvcm1lc3NhZ2U9JExh bmc6OnRyeydjY2QgZXJyIGludmFsaWRuYW1lJ307CgkJcmV0dXJuOwoJfQoJI2NoZWNrIGlwCglp ZiAoJkdlbmVyYWw6OnZhbGlkaXBhbmRtYXNrKCRjY2RuZXQpKXsKCQkJJGNjZG5ldD0mR2VuZXJh bDo6aXBvcnN1YnRvY2lkcigkY2NkbmV0KTsJCgl9ZWxzZXsKCQkkZXJyb3JtZXNzYWdlPSRMYW5n Ojp0cnsnY2NkIGVyciBpbnZhbGlkbmV0J307CgkJcmV0dXJuOwoJfQoJKCRjY2RpcCwkc3ViY2lk cikgPSBzcGxpdCAoL1wvLywkY2NkbmV0KTsKCWlmICgkY2NkbmFtZSBlcSAnJykgewoJCSRlcnJv cm1lc3NhZ2U9JGVycm9ybWVzc2FnZS4kTGFuZzo6dHJ7J2NjZCBlcnIgbmFtZSd9LiI8YnI+IjsK CX0KCSNjaGVjayBpZiB3ZSB0cnkgdG8gdXNlIHNhbWUgbmV0d29yayBhcyBvdnBuIHNlcnZlcgoJ aWYgKCZHZW5lcmFsOjppcG9yc3VidG9jaWRyKCRjY2RuZXQpIGVxICZHZW5lcmFsOjppcG9yc3Vi dG9jaWRyKCRvdnBuc3VibmV0KSkgewoJCQkkZXJyb3JtZXNzYWdlPSRlcnJvcm1lc3NhZ2UuJExh bmc6OnRyeydjY2QgZXJyIGlzb3Zwbm5ldCd9LiI8YnI+IjsKCX0KCQkKCSNjaGVjayBpZiB3ZSB1 c2UgYSBuYW1lL3N1Ym5ldCB0aGF0IGFscmVhZHkgZXhpc3RzCgkmR2VuZXJhbDo6cmVhZGhhc2hh cnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2NkLmNvbmYiLCBcJWNjZGNvbmZoYXNoKTsK CWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2NkY29uZmhhc2gpIHsKCQkJQGNjZGNvbmY9c3BsaXQo L1wvLywkY2NkY29uZmhhc2h7JGtleX1bMV0pOwoJCQlpZiAoJGNjZG5hbWUgZXEgJGNjZGNvbmZo YXNoeyRrZXl9WzBdKSB7JGVycm9ybWVzc2FnZT0kZXJyb3JtZXNzYWdlLiRMYW5nOjp0cnsnY2Nk IGVyciBuYW1lZXhpc3QnfS4iPGJyPiI7fQoJCQlteSAoJG5ld2lwLCRuZXdzdWIpID0gc3BsaXQo L1wvLywkY2NkbmV0KTsKCQkJaWYgKCZHZW5lcmFsOjpJcEluU3VibmV0KCRuZXdpcCwkY2NkY29u ZlswXSwmR2VuZXJhbDo6aXBvcnN1YnRvZGVjKCRjY2Rjb25mWzFdKSkpIHskZXJyb3JtZXNzYWdl PSRlcnJvcm1lc3NhZ2UuJExhbmc6OnRyeydjY2QgZXJyIGlzc3VibmV0J30uIjxicj4iO30KCQkJ Cgl9CgkjY2hlY2sgaWYgd2UgdXNlIG9uZSBvZiBpcGZpcmUncyBuZXR3b3JrcyAoZ3JlZW4sb3Jh bmdlLGJsdWUpCglteSAlb3dubmV0PSgpOwoJJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6 OnN3cm9vdH0vZXRoZXJuZXQvc2V0dGluZ3MiLCBcJW93bm5ldCk7CglpZiAoKCRvd25uZXR7J0dS RUVOX05FVEFERFJFU1MnfSAgCW5lICcnICYmICRvd25uZXR7J0dSRUVOX05FVEFERFJFU1MnfSAJ bmUgJzAuMC4wLjAnKSAmJiAmR2VuZXJhbDo6SXBJblN1Ym5ldCgkb3dubmV0eydHUkVFTl9ORVRB RERSRVNTJ30sJGNjZGlwLCZHZW5lcmFsOjppcG9yc3VidG9kZWMoJHN1YmNpZHIpKSl7ICRlcnJv cm1lc3NhZ2U9JExhbmc6OnRyeydjY2QgZXJyIGdyZWVuJ307fQoJaWYgKCgkb3dubmV0eydPUkFO R0VfTkVUQUREUkVTUyd9CW5lICcnICYmICRvd25uZXR7J09SQU5HRV9ORVRBRERSRVNTJ30gCW5l ICcwLjAuMC4wJykgJiYgJkdlbmVyYWw6OklwSW5TdWJuZXQoJG93bm5ldHsnT1JBTkdFX05FVEFE RFJFU1MnfSwkY2NkaXAsJkdlbmVyYWw6Omlwb3JzdWJ0b2RlYygkc3ViY2lkcikpKXsgJGVycm9y bWVzc2FnZT0kTGFuZzo6dHJ7J2NjZCBlcnIgb3JhbmdlJ307fQoJaWYgKCgkb3dubmV0eydCTFVF X05FVEFERFJFU1MnfSAJbmUgJycgJiYgJG93bm5ldHsnQkxVRV9ORVRBRERSRVNTJ30gCW5lICcw LjAuMC4wJykgJiYgJkdlbmVyYWw6OklwSW5TdWJuZXQoJG93bm5ldHsnQkxVRV9ORVRBRERSRVNT J30sJGNjZGlwLCZHZW5lcmFsOjppcG9yc3VidG9kZWMoJHN1YmNpZHIpKSl7ICRlcnJvcm1lc3Nh Z2U9JExhbmc6OnRyeydjY2QgZXJyIGJsdWUnfTt9CglpZiAoKCRvd25uZXR7J1JFRF9ORVRBRERS RVNTJ30gCW5lICcnICYmICRvd25uZXR7J1JFRF9ORVRBRERSRVNTJ30gCW5lICcwLjAuMC4wJykg JiYgJkdlbmVyYWw6OklwSW5TdWJuZXQoJG93bm5ldHsnUkVEX05FVEFERFJFU1MnfSwkY2NkaXAs JkdlbmVyYWw6Omlwb3JzdWJ0b2RlYygkc3ViY2lkcikpKXsgJGVycm9ybWVzc2FnZT0kTGFuZzo6 dHJ7J2NjZCBlcnIgcmVkJ307fQoJCQoJCQoJaWYgKCEkZXJyb3JtZXNzYWdlKSB7CgkJbXkgJWNj ZGNvbmZoYXNoPSgpOwoJCSRiYXNlYWRkcmVzcz0mR2VuZXJhbDo6Z2V0bmV0d29ya2lwKCRjY2Rp cCwkc3ViY2lkcik7CgkJJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL2NjZC5jb25mIiwgXCVjY2Rjb25maGFzaCk7CgkJbXkgJGtleSA9ICZHZW5lcmFsOjpm aW5kaGFzaGFycmF5a2V5IChcJWNjZGNvbmZoYXNoKTsKCQlmb3JlYWNoIG15ICRpICgwIC4uIDEp IHsgJGNjZGNvbmZoYXNoeyRrZXl9WyRpXSA9ICIiO30KCQkkY2NkY29uZmhhc2h7JGtleX1bMF0g PSAkY2NkbmFtZTsKCQkkY2NkY29uZmhhc2h7JGtleX1bMV0gPSAkYmFzZWFkZHJlc3MuIi8iLiRz dWJjaWRyOwoJCSZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vY2NkLmNvbmYiLCBcJWNjZGNvbmZoYXNoKTsKCQkmd3JpdGVzZXJ2ZXJjb25mOwoJCSRjZ2lw YXJhbXN7J2NjZG5hbWUnfT0nJzsKCQkkY2dpcGFyYW1zeydjY2RzdWJuZXQnfT0nJzsKCQlyZXR1 cm4gMTsKCX0KfQoKc3ViIG1vZGNjZG5ldAp7CgkKCW15ICRuZXduYW1lPSRfWzBdOwoJbXkgJG9s ZG5hbWU9JF9bMV07CglteSAlY2NkY29uZmhhc2g9KCk7CglteSAlY2NkaGFzaD0oKTsKCSZHZW5l cmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jY2QuY29uZiIsIFwl Y2NkY29uZmhhc2gpOwoJZm9yZWFjaCBteSAka2V5IChrZXlzICVjY2Rjb25maGFzaCkgewoJCWlm ICgkY2NkY29uZmhhc2h7JGtleX1bMF0gZXEgJG9sZG5hbWUpIHsKCQkJZm9yZWFjaCBteSAka2V5 MSAoa2V5cyAlY2NkY29uZmhhc2gpIHsKCQkJCWlmICgkY2NkY29uZmhhc2h7JGtleTF9WzBdIGVx ICRuZXduYW1lKXsKCQkJCQkkZXJyb3JtZXNzYWdlPSRlcnJvcm1lc3NhZ2UuJExhbmc6OnRyeydj Y2QgZXJyIG5ldGFkcmV4aXN0J307CgkJCQkJcmV0dXJuOwoJCQkJfWVsc2V7CgkJCQkJJGNjZGNv bmZoYXNoeyRrZXl9WzBdPSAkbmV3bmFtZTsKCQkJCQkmR2VuZXJhbDo6d3JpdGVoYXNoYXJyYXko IiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NjZC5jb25mIiwgXCVjY2Rjb25maGFzaCk7CgkJCQkJ bGFzdDsKCQkJCX0KCQkJfQoJCX0KCX0KCQoJJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2Vu ZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNjZGhhc2gpOwoJCWZvcmVhY2ggbXkg JGtleSAoa2V5cyAlY2NkaGFzaCkgewoJCQlpZiAoJGNjZGhhc2h7JGtleX1bMzJdIGVxICRvbGRu YW1lKSB7CgkJCQkkY2NkaGFzaHska2V5fVszMl09JG5ld25hbWU7CgkJCQkmR2VuZXJhbDo6d3Jp dGVoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNjZGhh c2gpOwoJCQkJbGFzdDsKCQkJfQoJCX0KCQoJcmV0dXJuIDA7Cn0Kc3ViIGNjZG1heGNsaWVudHMK ewoJbXkgJGNjZG5ldHdvcms9JF9bMF07CglteSBAb2N0ZXRzPSgpOwoJbXkgQHN1Ym5ldD0oKTsK CUBvY3RldHM9c3BsaXQoIlwvIiwkY2NkbmV0d29yayk7CglAc3VibmV0PSBzcGxpdCAvXC4vLCAm R2VuZXJhbDo6Y2lkcnRvc3ViKCRvY3RldHNbMV0pOwoJbXkgKCRhLCRiLCRjLCRkLCRlKTsKCSRh PTI1Ni0kc3VibmV0WzBdOwoJJGI9MjU2LSRzdWJuZXRbMV07CgkkYz0yNTYtJHN1Ym5ldFsyXTsK CSRkPTI1Ni0kc3VibmV0WzNdOwoJJGU9KCRhKiRiKiRjKiRkKS80OwoJcmV0dXJuICRlLTE7Cn0K CnN1YiBnZXRjY2RhZHJlc3NlcyAKewoJbXkgJGlwaW49JF9bMF07CglteSAoJGlwMSwkaXAyLCRp cDMsJGlwNCk9c3BsaXQgIC9cLi8sICRpcGluOwoJbXkgJGNpZHI9JF9bMV07CgljaG9tcCgkY2lk cik7CglteSAkY291bnQ9JF9bMl07CglteSAkaGFzaXA9JF9bM107CgljaG9tcCgkaGFzaXApOwoJ bXkgQGlwcmFuZ2U9KCk7CglteSAlY2NkaGFzaD0oKTsKCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5 KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9vdnBuY29uZmlnIiwgXCVjY2RoYXNoKTsKCSRpcHJh bmdlWzBdPSRpcDEuIi4iLiRpcDIuIi4iLiRpcDMuIi4iLjI7Cglmb3IgKG15ICRpPTA7JGk8PSRj b3VudC0xOyRpKyspIHsKCQlteSAkdG1waXA9JGlwcmFuZ2VbJGktMV07CgkJbXkgJHN0ZXBwZXI9 JGkqNDsKCQkkaXByYW5nZVskaV09ICZHZW5lcmFsOjpnZXRuZXh0aXAoJHRtcGlwLDQpOwoJfQoJ bXkgJHI9MDsKCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2NkaGFzaCkgewoJCSRyPTA7CgkJZm9y ZWFjaCAgbXkgJHRtcCAoQGlwcmFuZ2UpewoJCQlteSAoJG5ldCwkc3ViKSA9IHNwbGl0ICgvXC8v LCRjY2RoYXNoeyRrZXl9WzMzXSk7CgkJCWlmICgkbmV0IGVxICR0bXApIHsKCQkJCWlmICggJGhh c2lwIG5lICAkY2NkaGFzaHska2V5fVszM10gKXsKCQkJCQlzcGxpY2UgKEBpcHJhbmdlLCRyLDEp OwoJCQkJfQoJCQl9CgkJCSRyKys7CgkJfQoJfQoJcmV0dXJuIEBpcHJhbmdlOwp9CgpzdWIgZmls bHNlbGVjdGJveAp7CglteSAkYm94bmFtZT0kX1sxXTsKCW15ICgkY2NkaXAsJHN1YmNpZHIpID0g c3BsaXQoIi8iLCRfWzBdKTsgCglteSAkdHo9JF9bMl07CglteSBAYWxsY2NkaXBzPSZnZXRjY2Rh ZHJlc3NlcygkY2NkaXAsJHN1YmNpZHIsJmNjZG1heGNsaWVudHMoJGNjZGlwLiIvIi4kc3ViY2lk ciksJHR6KTsKCXByaW50IjxzZWxlY3QgbmFtZT0nJGJveG5hbWUnIFNUWUxFPSdmb250LWZhbWls eSA6IGFyaWFsOyBmb250LXNpemUgOiA5cHQ7IHdpZHRoOjEzMHB4OycgPiI7Cglmb3JlYWNoIChA YWxsY2NkaXBzKSB7CgkJbXkgJGlwPSRfLiIvMzAiOwoJCWNob21wKCRpcCk7CgkJcHJpbnQgIjxv cHRpb24gdmFsdWU9JyRpcCcgIjsKCQlpZiAoICRpcCBlcSAkY2dpcGFyYW1zeyRib3huYW1lfSAp ewoJCQlwcmludCJzZWxlY3RlZCI7CgkJfQoJCXByaW50ICI+JGlwPC9vcHRpb24+IjsKCX0KCXBy aW50ICI8L3NlbGVjdD4iOwp9CgpzdWIgaG9zdHNpbm5ldAp7CglteSAkbmFtZT0kX1swXTsKCW15 ICVjY2RoYXNoPSgpOwoJbXkgJGk9MDsKCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9vdnBuY29uZmlnIiwgXCVjY2RoYXNoKTsKCWZvcmVhY2ggbXkgJGtl eSAoa2V5cyAlY2NkaGFzaCkgewoJCWlmICgkY2NkaGFzaHska2V5fVszMl0gZXEgJG5hbWUpeyAk aSsrO30KCX0KCXJldHVybiAkaTsKfQoKc3ViIGNoZWNrX3JvdXRlc19wdXNoCnsKCQkJbXkgJHZh bD0kX1swXTsKCQkJbXkgKCRpcCwkY2lkcikgPSBzcGxpdCAoL1wvLywgJHZhbCk7CgkJCSMjY2hl Y2sgZm9yIGV4aXN0aW5nIHJvdXRlcyBpbiByb3V0ZXNfcHVzaAoJCQlpZiAoLWUgIiR7R2VuZXJh bDo6c3dyb290fS9vdnBuL3JvdXRlc19wdXNoIikgewoJCQkJb3BlbihGSUxFLCIke0dlbmVyYWw6 OnN3cm9vdH0vb3Zwbi9yb3V0ZXNfcHVzaCIpOwoJCQkJd2hpbGUgKDxGSUxFPikgewoJCQkJCSRf PX5zL1xzKiQvL2c7CgkJCQkJCgkJCQkJbXkgKCRpcDIsJGNpZHIyKSA9IHNwbGl0ICgvXC8vLCIk XyIpOwoJCQkJCW15ICR2YWwyPSRpcDIuIi8iLiZHZW5lcmFsOjppcG9yc3VidG9kZWMoJGNpZHIy KTsKCQkJCQkKCQkJCQlpZigkdmFsIGVxICR2YWwyKXsKCQkJCQkJcmV0dXJuIDA7CgkJCQkJfQoJ CQkJCSNzdWJuZXRjaGVjawoJCQkJCWlmICgmR2VuZXJhbDo6SXBJblN1Ym5ldCAoJGlwLCRpcDIs JkdlbmVyYWw6Omlwb3JzdWJ0b2RlYygkY2lkcjIpKSl7CgkJCQkJCXJldHVybiAwOwoJCQkJCX0K CQkJCX07CgkJCQljbG9zZShGSUxFKTsKCQkJfQoJcmV0dXJuIDE7Cn0KCnN1YiBjaGVja19jY2Ry b3V0ZQp7CglteSAlY2Nkcm91dGVoYXNoPSgpOwoJbXkgJHZhbD0kX1swXTsKCW15ICgkaXAsJGNp ZHIpID0gc3BsaXQgKC9cLy8sICR2YWwpOwoJI2NoZWNrIGZvciBleGlzdGluZyByb3V0ZXMgaW4g Y2Nkcm91dGUKCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jY2Ryb3V0ZSIsIFwlY2Nkcm91dGVoYXNoKTsKCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2Nk cm91dGVoYXNoKSB7CgkJZm9yZWFjaCBteSAkaSAoMSAuLiAkI3skY2Nkcm91dGVoYXNoeyRrZXl9 fSkgewoJCQlpZiAoJkdlbmVyYWw6Omlwb3JzdWJ0b2RlYygkdmFsKSBlcSAkY2Nkcm91dGVoYXNo eyRrZXl9WyRpXSAmJiAkY2Nkcm91dGVoYXNoeyRrZXl9WzBdIG5lICRjZ2lwYXJhbXN7J05BTUUn fSl7CgkJCQlyZXR1cm4gMDsKCQkJfQoJCQlteSAoJGlwMiwkY2lkcjIpID0gc3BsaXQgKC9cLy8s JGNjZHJvdXRlaGFzaHska2V5fVskaV0pOwoJCQkjc3VibmV0Y2hlY2sKCQkJaWYgKCZHZW5lcmFs OjpJcEluU3VibmV0ICgkaXAsJGlwMiwkY2lkcjIpJiYgJGNjZHJvdXRlaGFzaHska2V5fVswXSBu ZSAkY2dpcGFyYW1zeydOQU1FJ30gKXsKCQkJCXJldHVybiAwOwoJCQl9CgkJfQoJfQoJcmV0dXJu IDE7Cn0Kc3ViIGNoZWNrX2NjZGNvbmYKewoJbXkgJWNjZGNvbmZoYXNoPSgpOwoJbXkgJHZhbD0k X1swXTsKCW15ICgkaXAsJGNpZHIpID0gc3BsaXQgKC9cLy8sICR2YWwpOwoJI2NoZWNrIGZvciBl eGlzdGluZyByb3V0ZXMgaW4gY2Nkcm91dGUKCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9jY2QuY29uZiIsIFwlY2NkY29uZmhhc2gpOwoJZm9yZWFjaCBt eSAka2V5IChrZXlzICVjY2Rjb25maGFzaCkgewoJCWlmICgmR2VuZXJhbDo6aXBvcnN1YnRvY2lk cigkdmFsKSBlcSAkY2NkY29uZmhhc2h7JGtleX1bMV0pewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJ bXkgKCRpcDIsJGNpZHIyKSA9IHNwbGl0ICgvXC8vLCRjY2Rjb25maGFzaHska2V5fVsxXSk7CgkJ CSNzdWJuZXRjaGVjawoJCQlpZiAoJkdlbmVyYWw6OklwSW5TdWJuZXQgKCRpcCwkaXAyLCZHZW5l cmFsOjpjaWRydG9zdWIoJGNpZHIyKSkpewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkKCX0KCXJldHVy biAxOwp9CgojIyMKIyBtLmEuZCBuZXQybmV0CiMjIwoKc3ViIHZhbGlkZG90bWFzawp7CglteSAk aXBkb3RtYXNrID0gJF9bMF07CglpZiAoJkdlbmVyYWw6OnZhbGlkaXAoJGlwZG90bWFzaykpIHsg cmV0dXJuIDA7IH0KCWlmICghKCRpcGRvdG1hc2sgPX4gL14oLio/KVwvKC4qPykkLykpIHsgIH0K CW15ICRtYXNrID0gJDI7CglpZiAoKCRtYXNrID1+IC9cLi8gKSkgeyByZXR1cm4gMDsgfQkKICBy ZXR1cm4gMTsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpzdWIgd3JpdGVfcm91dGVwdXNoZmlsZQp7CglvcGVu KEZJTEUsICI+JHJvdXRlc19wdXNoX2ZpbGUiKTsKCWZsb2NrKEZJTEUsIDIpOwoJaWYgKCR2cG5z ZXR0aW5nc3snUk9VVEVTX1BVU0gnfSBuZSAnJykgewoJCXByaW50IEZJTEUgJHZwbnNldHRpbmdz eydST1VURVNfUFVTSCd9OwoJfQoJY2xvc2UoRklMRSk7IAp9CgpzdWIgcmVhZF9yb3V0ZXB1c2hm aWxlCnsKCWlmICgtZSAiJHJvdXRlc19wdXNoX2ZpbGUiKSB7CgkJb3BlbihGSUxFLCIkcm91dGVz X3B1c2hfZmlsZSIpOwoJCWRlbGV0ZSAkdnBuc2V0dGluZ3N7J1JPVVRFU19QVVNIJ307CgkJd2hp bGUgKDxGSUxFPikgeyAkdnBuc2V0dGluZ3N7J1JPVVRFU19QVVNIJ30gLj0gJF8gfTsKCQljbG9z ZShGSUxFKTsKCQkkY2dpcGFyYW1zeydST1VURVNfUFVTSCd9ID0gJHZwbnNldHRpbmdzeydST1VU RVNfUFVTSCd9OwoJCQoJfQp9CgoKI2hpZXIgZGllIHJlZnJlc2ggcGFnZQppZiAoIC1lICIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9nZW5jYW5vdyIpIHsKICAgIG15ICRyZWZyZXNoID0gJyc7CiAg ICAkcmVmcmVzaCA9ICI8bWV0YSBodHRwLWVxdWl2PSdyZWZyZXNoJyBjb250ZW50PScxNTsnIC8+ IjsKICAgICZIZWFkZXI6OnNob3dodHRwaGVhZGVycygpOwogICAgJkhlYWRlcjo6b3BlbnBhZ2Uo JExhbmc6OnRyeydPVlBOJ30sIDEsICRyZWZyZXNoKTsKICAgICZIZWFkZXI6Om9wZW5iaWdib3go JzEwMCUnLCAnY2VudGVyJyk7CiAgICAmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywgJ2xlZnQnLCAi JExhbmc6OnRyeydnZW5lcmF0ZSByb290L2hvc3QgY2VydGlmaWNhdGVzJ306Iik7CiAgICBwcmlu dCAiPHRyPlxuPHRkIGFsaWduPSdjZW50ZXInPjxpbWcgc3JjPScvaW1hZ2VzL2Nsb2NrLmdpZicg YWx0PScnIC8+PC90ZD5cbiI7CiAgICBwcmludCAiPHRkIGNvbHNwYW49JzInPjxmb250IGNvbG9y PSdyZWQnPlBsZWFzZSBiZSBwYXRpZW50IHRoaXMgcmVhbHkgY2FuIHRha2Ugc29tZSB0aW1lIG9u IG9sZGVyIGhhcmR3YXJlLi4uPC9mb250PjwvdGQ+PC90cj5cbiI7CiAgICAmSGVhZGVyOjpjbG9z ZWJveCgpOwogICAgJkhlYWRlcjo6Y2xvc2ViaWdib3goKTsKICAgICZIZWFkZXI6OmNsb3NlcGFn ZSgpOwogICAgZXhpdCAoMCk7Cn0KIyNoaWVyIGRpZSByZWZyZXNoIHBhZ2UKCgojIyMKIyMjIE9w ZW5WUE4gU2VydmVyIENvbnRyb2wKIyMjCmlmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFu Zzo6dHJ7J3N0YXJ0IG92cG4gc2VydmVyJ30gfHwKICAgICRjZ2lwYXJhbXN7J0FDVElPTid9IGVx ICRMYW5nOjp0cnsnc3RvcCBvdnBuIHNlcnZlcid9IHx8CiAgICAkY2dpcGFyYW1zeydBQ1RJT04n fSBlcSAkTGFuZzo6dHJ7J3Jlc3RhcnQgb3ZwbiBzZXJ2ZXInfSkgewogICAgI3N0YXJ0IG9wZW52 cG4gc2VydmVyCiAgICBpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydzdGFy dCBvdnBuIHNlcnZlcid9KXsKICAgIAkmZW1wdHlzZXJ2ZXJsb2coKTsKCXN5c3RlbSgnL3Vzci9s b2NhbC9iaW4vb3BlbnZwbmN0cmwnLCAnLXMnKTsKICAgIH0gICAKICAgICNzdG9wIG9wZW52cG4g c2VydmVyCiAgICBpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydzdG9wIG92 cG4gc2VydmVyJ30pewogICAgCXN5c3RlbSgnL3Vzci9sb2NhbC9iaW4vb3BlbnZwbmN0cmwnLCAn LWsnKTsKCSZlbXB0eXNlcnZlcmxvZygpOwkKICAgIH0gICAKIyAgICAjcmVzdGFydCBvcGVudnBu IHNlcnZlcgojICAgIGlmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J3Jlc3Rh cnQgb3ZwbiBzZXJ2ZXInfSl7CiN3b3JrYXJ1bmQsIHRpbGwgU0lHSFVQIGFsc28gd29ya3Mgd2hl biBydW5uaW5nIGFzIG5vYm9keSAgICAKIyAgIAlzeXN0ZW0oJy91c3IvbG9jYWwvYmluL29wZW52 cG5jdHJsJywgJy1yJyk7CQojCSZlbXB0eXNlcnZlcmxvZygpOwkKIyAgICB9ICAgICAgIAp9Cgoj IyMKIyMjIFNhdmUgQWR2YW5jZWQgb3B0aW9ucwojIyMKCmlmICgkY2dpcGFyYW1zeydBQ1RJT04n fSBlcSAkTGFuZzo6dHJ7J3NhdmUtYWR2LW9wdGlvbnMnfSkgewogICAgJkdlbmVyYWw6OnJlYWRo YXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwldnBuc2V0dGluZ3MpOwog ICAgI0RBTiBkbyB3ZSByZWFsbHkgbmVlZCAodG8gdG8gY2hlY2spIHRoaXMgdmFsdWU/IEJlc2lk ZXMgaWYgd2UgbGlzdGVuIG9uIGJsdWUgYW5kIG9yYW5nZSB0b28sCiAgICAjREFOIHRoaXMgdmFs dWUgaGFzIHRvIGxlYXZlLgojbmV3IHNldHRpbmdzIGZvciBkYWVtb24KICAgICR2cG5zZXR0aW5n c3snTE9HX1ZFUkInfSA9ICRjZ2lwYXJhbXN7J0xPR19WRVJCJ307CiAgICAkdnBuc2V0dGluZ3N7 J0tFRVBBTElWRV8xJ30gPSAkY2dpcGFyYW1zeydLRUVQQUxJVkVfMSd9OwogICAgJHZwbnNldHRp bmdzeydLRUVQQUxJVkVfMid9ID0gJGNnaXBhcmFtc3snS0VFUEFMSVZFXzInfTsKICAgICR2cG5z ZXR0aW5nc3snTUFYX0NMSUVOVFMnfSA9ICRjZ2lwYXJhbXN7J01BWF9DTElFTlRTJ307CiAgICAk dnBuc2V0dGluZ3N7J1JFRElSRUNUX0dXX0RFRjEnfSA9ICRjZ2lwYXJhbXN7J1JFRElSRUNUX0dX X0RFRjEnfTsKICAgICR2cG5zZXR0aW5nc3snQ0xJRU5UMkNMSUVOVCd9ID0gJGNnaXBhcmFtc3sn Q0xJRU5UMkNMSUVOVCd9OwogICAgJHZwbnNldHRpbmdzeydESENQX0RPTUFJTid9ID0gJGNnaXBh cmFtc3snREhDUF9ET01BSU4nfTsKICAgICR2cG5zZXR0aW5nc3snREhDUF9ETlMnfSA9ICRjZ2lw YXJhbXN7J0RIQ1BfRE5TJ307CiAgICAkdnBuc2V0dGluZ3N7J0RIQ1BfV0lOUyd9ID0gJGNnaXBh cmFtc3snREhDUF9XSU5TJ307CiAgICAkdnBuc2V0dGluZ3N7J1JPVVRFU19QVVNIJ30gPSAkY2dp cGFyYW1zeydST1VURVNfUFVTSCd9OwogICAgbXkgQHRlbXA9KCk7CiAgICAKICAgIGlmICgkY2dp cGFyYW1zeydGUkFHTUVOVCd9IGVxICcnKSB7CiAgICAJZGVsZXRlICR2cG5zZXR0aW5nc3snRlJB R01FTlQnfTsKICAgIH0gZWxzZSB7CiAgICAJaWYgKCRjZ2lwYXJhbXN7J0ZSQUdNRU5UJ30gIX4g L15bMC05XSskLykgeyAKICAgIAkgICAgJGVycm9ybWVzc2FnZSA9ICJJbmNvcnJlY3QgdmFsdWUs IHBsZWFzZSBpbnNlcnQgb25seSBudW1iZXJzLiI7CiAgICAgICAgZ290byBBRFZfRVJST1I7CgkJ fSBlbHNlIHsKCQkJJHZwbnNldHRpbmdzeydGUkFHTUVOVCd9ID0gJGNnaXBhcmFtc3snRlJBR01F TlQnfTsKICAgIAl9CiAgICB9CiAgICBpZiAoJGNnaXBhcmFtc3snTVNTRklYJ30gbmUgJ29uJykg ewogICAgCWRlbGV0ZSAkdnBuc2V0dGluZ3N7J01TU0ZJWCd9OwogICAgfSBlbHNlIHsKICAgIAkk dnBuc2V0dGluZ3N7J01TU0ZJWCd9ID0gJGNnaXBhcmFtc3snTVNTRklYJ307CiAgICB9CiAgICBp ZiAoJGNnaXBhcmFtc3snREhDUF9ET01BSU4nfSBuZSAnJyl7Cgl1bmxlc3MgKCZHZW5lcmFsOjp2 YWxpZGZxZG4oJGNnaXBhcmFtc3snREhDUF9ET01BSU4nfSkgfHwgJkdlbmVyYWw6OnZhbGlkaXAo JGNnaXBhcmFtc3snREhDUF9ET01BSU4nfSkpIHsKCQkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRy eydpbnZhbGlkIGlucHV0IGZvciBkaGNwIGRvbWFpbid9OwoJZ290byBBRFZfRVJST1I7CiAgICAJ fQogICAgfQogICAgaWYgKCRjZ2lwYXJhbXN7J0RIQ1BfRE5TJ30gbmUgJycpewoJdW5sZXNzICgm R2VuZXJhbDo6dmFsaWRmcWRuKCRjZ2lwYXJhbXN7J0RIQ1BfRE5TJ30pIHx8ICZHZW5lcmFsOjp2 YWxpZGlwKCRjZ2lwYXJhbXN7J0RIQ1BfRE5TJ30pKSB7CgkJJGVycm9ybWVzc2FnZSA9ICRMYW5n Ojp0cnsnaW52YWxpZCBpbnB1dCBmb3IgZGhjcCBkbnMnfTsKCWdvdG8gQURWX0VSUk9SOwogICAg CX0KICAgIH0KICAgIGlmICgkY2dpcGFyYW1zeydESENQX1dJTlMnfSBuZSAnJyl7Cgl1bmxlc3Mg KCZHZW5lcmFsOjp2YWxpZGZxZG4oJGNnaXBhcmFtc3snREhDUF9XSU5TJ30pIHx8ICZHZW5lcmFs Ojp2YWxpZGlwKCRjZ2lwYXJhbXN7J0RIQ1BfV0lOUyd9KSkgewoJCSRlcnJvcm1lc3NhZ2UgPSAk TGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIGRoY3Agd2lucyd9OwoJCWdvdG8gQURWX0VSUk9S OwogICAgCX0KICAgIH0KICAgIGlmICgkY2dpcGFyYW1zeydST1VURVNfUFVTSCd9IG5lICcnKXsK CUB0ZW1wID0gc3BsaXQoL1xuLywkY2dpcGFyYW1zeydST1VURVNfUFVTSCd9KTsKICAgIAl1bmRl ZiAkdnBuc2V0dGluZ3N7J1JPVVRFU19QVVNIJ307CiAgIAkKICAgCWZvcmVhY2ggbXkgJHRtcGlw IChAdGVtcCkKCXsKCQlzL15ccysvL2c7IHMvXHMrJC8vZzsKCQkKCQlpZiAoJHRtcGlwKQoJCXsK CQkJJHRtcGlwPX5zL1xzKiQvL2c7IAoJCQl1bmxlc3MgKCZHZW5lcmFsOjp2YWxpZGlwYW5kbWFz aygkdG1waXApKSB7CgkJCQkkZXJyb3JtZXNzYWdlID0gIiR0bXBpcCAiLiRMYW5nOjp0cnsnb3Zw biBlcnJtc2cgaW52YWxpZCBpcCBvciBtYXNrJ307CgkJCQlnb3RvIEFEVl9FUlJPUjsKCQkJfQoJ CQlteSAoJGlwLCAkY2lkcikgPSBzcGxpdCgiXC8iLCZHZW5lcmFsOjppcGNpZHIybXNrKCR0bXBp cCkpOwoJCQkKCQkJaWYgKCRpcCBlcSAkbmV0c2V0dGluZ3N7J0dSRUVOX05FVEFERFJFU1MnfSAm JiAkY2lkciBlcSAkbmV0c2V0dGluZ3N7J0dSRUVOX05FVE1BU0snfSkgewoJCQkJJGVycm9ybWVz c2FnZSA9ICRMYW5nOjp0cnsnb3ZwbiBlcnJtc2cgZ3JlZW4gYWxyZWFkeSBwdXNoZWQnfTsKCQkJ CWdvdG8gQURWX0VSUk9SOwoJCQl9CiMgYS5tYXJ4IGNjZAkJCQoJCQlteSAlY2Nkcm91dGVoYXNo PSgpOwoJCQkmR2VuZXJhbDo6cmVhZGhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4v Y2Nkcm91dGUiLCBcJWNjZHJvdXRlaGFzaCk7CgkJCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2Nk cm91dGVoYXNoKSB7CgkJCQlmb3JlYWNoIG15ICRpICgxIC4uICQjeyRjY2Ryb3V0ZWhhc2h7JGtl eX19KSB7IAoJCQkJCWlmICggJGlwLiIvIi4kY2lkciBlcSAkY2Nkcm91dGVoYXNoeyRrZXl9WyRp XSApewoJCQkJCQkkZXJyb3JtZXNzYWdlPSJSb3V0ZSAkaXBcLyRjaWRyICIuJExhbmc6OnRyeydj Y2QgZXJyIGludXNlJ30uIiAkY2Nkcm91dGVoYXNoeyRrZXl9WzBdIiA7CgkJCQkJCWdvdG8gQURW X0VSUk9SOwoJCQkJCX0KCQkJCQlteSAoJGlwMiwkY2lkcjIpID0gc3BsaXQoL1wvLywkY2Nkcm91 dGVoYXNoeyRrZXl9WyRpXSk7CgkJCQkJaWYgKCZHZW5lcmFsOjpJcEluU3VibmV0ICgkaXAsJGlw MiwkY2lkcjIpKXsKCQkJCQkJJGVycm9ybWVzc2FnZT0iUm91dGUgJGlwXC8kY2lkciAiLiRMYW5n Ojp0cnsnY2NkIGVyciBpbnVzZSd9LiIgJGNjZHJvdXRlaGFzaHska2V5fVswXSIgOwoJCQkJCQln b3RvIEFEVl9FUlJPUjsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCiMgY2NkIGVuZAoJCQkKCQkJJHZw bnNldHRpbmdzeydST1VURVNfUFVTSCd9IC49ICR0bXBpcC4iXG4iOwoJCX0KCX0KICAgICZ3cml0 ZV9yb3V0ZXB1c2hmaWxlOwoJdW5kZWYgJHZwbnNldHRpbmdzeydST1VURVNfUFVTSCd9OwogICAg fQoJZWxzZSB7Cgl1bmRlZiAkdnBuc2V0dGluZ3N7J1JPVVRFU19QVVNIJ307Cgkmd3JpdGVfcm91 dGVwdXNoZmlsZTsKICAgIH0KICAgIGlmICgobGVuZ3RoKCRjZ2lwYXJhbXN7J01BWF9DTElFTlRT J30pID09IDApIHx8ICgoJGNnaXBhcmFtc3snTUFYX0NMSUVOVFMnfSkgPCAxICkgfHwgKCgkY2dp cGFyYW1zeydNQVhfQ0xJRU5UUyd9KSA+IDI1NSApKSB7CiAgICAgICAgJGVycm9ybWVzc2FnZSA9 ICRMYW5nOjp0cnsnaW52YWxpZCBpbnB1dCBmb3IgbWF4IGNsaWVudHMnfTsKICAgICAgICBnb3Rv IEFEVl9FUlJPUjsKICAgIH0KICAgIGlmICgkY2dpcGFyYW1zeydLRUVQQUxJVkVfMSd9IG5lICcn KSB7CglpZiAoJGNnaXBhcmFtc3snS0VFUEFMSVZFXzEnfSAhfiAvXlswLTldKyQvKSB7IAogICAg CSAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGlucHV0IGZvciBrZWVwYWxp dmUgMSd9OwogICAgICAgIGdvdG8gQURWX0VSUk9SOwoJfQogICAgfQogICAgaWYgKCRjZ2lwYXJh bXN7J0tFRVBBTElWRV8yJ30gbmUgJycpewoJaWYgKCRjZ2lwYXJhbXN7J0tFRVBBTElWRV8yJ30g IX4gL15bMC05XSskLykgeyAKICAgIAkgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaW52 YWxpZCBpbnB1dCBmb3Iga2VlcGFsaXZlIDInfTsKICAgICAgICBnb3RvIEFEVl9FUlJPUjsKCX0K ICAgIH0KICAgIGlmICgkY2dpcGFyYW1zeydLRUVQQUxJVkVfMid9IDwgKCRjZ2lwYXJhbXN7J0tF RVBBTElWRV8xJ30gKiAyKSl7CiAgICAgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaW52 YWxpZCBpbnB1dCBmb3Iga2VlcGFsaXZlIDE6Mid9OwogICAgICAgIGdvdG8gQURWX0VSUk9SOwkK ICAgIH0KICAgIAogICAgJkdlbmVyYWw6OndyaXRlaGFzaCgiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vc2V0dGluZ3MiLCBcJXZwbnNldHRpbmdzKTsKICAgICZ3cml0ZXNlcnZlcmNvbmYoKTsjaGll ciBvawp9CgojIyMKIyBtLmEuZCBuZXQybmV0CiMjIwoKaWYgKCRjZ2lwYXJhbXN7J0FDVElPTid9 IGVxICRMYW5nOjp0cnsnc2F2ZSd9ICYmICRjZ2lwYXJhbXN7J1RZUEUnfSBlcSAnbmV0JyAmJiAk Y2dpcGFyYW1zeydTSURFJ30gZXEgJ3NlcnZlcicpCnsKCm15IEByZW1zdWJuZXQgPSBzcGxpdCgv XC8vLCRjZ2lwYXJhbXN7J1JFTU9URV9TVUJORVQnfSk7Cm15IEBvdnN1Ym5ldHRlbXAgPSAgc3Bs aXQoL1wuLywkY2dpcGFyYW1zeydPVlBOX1NVQk5FVCd9KTsKbXkgJG92c3VibmV0ID0gICIkb3Zz dWJuZXR0ZW1wWzBdLiRvdnN1Ym5ldHRlbXBbMV0uJG92c3VibmV0dGVtcFsyXSI7Cm15ICR0dW5t dHUgPSAgJyc7Cgp1bmxlc3MoLWQgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvIil7 bWtkaXIgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYiLCAwNzU1IG9yIGRpZSAiVW5h YmxlIHRvIGNyZWF0ZSBkaXIgJCEiO30KdW5sZXNzKC1kICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfSIpe21rZGlyICIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfSIsIDA3NzAgb3IgZGllICJVbmFibGUgdG8g Y3JlYXRlIGRpciAkISI7fSAgIAoKICBvcGVuKFNFUlZFUkNPTkYsICAgICI+JHtHZW5lcmFsOjpz d3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9 LmNvbmYiKSBvciBkaWUgIlVuYWJsZSB0byBvcGVuICR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24y bmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9LyRjZ2lwYXJhbXN7J05BTUUnfS5jb25mOiAkISI7CiAg CiAgZmxvY2sgU0VSVkVSQ09ORiwgMjsKICBwcmludCBTRVJWRVJDT05GICIjIElQRmlyZSBuMm4g T3BlbiBWUE4gU2VydmVyIENvbmZpZyBieSB1bW1lZWdnZSB1bmQgbS5hLmRcbiI7IAogIHByaW50 IFNFUlZFUkNPTkYgIlxuIjsgCiAgcHJpbnQgU0VSVkVSQ09ORiAiIyBVc2VyIFNlY3VyaXR5XG4i OwogIHByaW50IFNFUlZFUkNPTkYgInVzZXIgbm9ib2R5XG4iOwogIHByaW50IFNFUlZFUkNPTkYg Imdyb3VwIG5vYm9keVxuIjsKICBwcmludCBTRVJWRVJDT05GICJwZXJzaXN0LXR1blxuIjsKICBw cmludCBTRVJWRVJDT05GICJwZXJzaXN0LWtleVxuIjsKICBwcmludCBTRVJWRVJDT05GICJzY3Jp cHQtc2VjdXJpdHkgMlxuIjsKICBwcmludCBTRVJWRVJDT05GICIjIElQL0ROUyBmb3IgcmVtb3Rl IFNlcnZlciBHYXRld2F5XG4iOyAKICBwcmludCBTRVJWRVJDT05GICJyZW1vdGUgJGNnaXBhcmFt c3snUkVNT1RFJ31cbiI7CiAgcHJpbnQgU0VSVkVSQ09ORiAiZmxvYXRcbiI7CiAgcHJpbnQgU0VS VkVSQ09ORiAiIyBJUCBhZHJlc3NlcyBvZiB0aGUgVlBOIFN1Ym5ldFxuIjsgCiAgcHJpbnQgU0VS VkVSQ09ORiAiaWZjb25maWcgJG92c3VibmV0LjEgJG92c3VibmV0LjJcbiI7IAogIHByaW50IFNF UlZFUkNPTkYgIiMgQ2xpZW50IEdhdGV3YXkgTmV0d29ya1xuIjsgCiAgcHJpbnQgU0VSVkVSQ09O RiAicm91dGUgJHJlbXN1Ym5ldFswXSAkcmVtc3VibmV0WzFdXG4iOwogIHByaW50IFNFUlZFUkNP TkYgIiMgdHVuIERldmljZVxuIjsgCiAgcHJpbnQgU0VSVkVSQ09ORiAiZGV2IHR1blxuIjsgCiAg cHJpbnQgU0VSVkVSQ09ORiAiIyBQb3J0IGFuZCBQcm90b2tvbFxuIjsgCiAgcHJpbnQgU0VSVkVS Q09ORiAicG9ydCAkY2dpcGFyYW1zeydERVNUX1BPUlQnfVxuIjsgCiAgCiAgaWYgKCRjZ2lwYXJh bXN7J1BST1RPQ09MJ30gZXEgJ3RjcCcpIHsKICBwcmludCBTRVJWRVJDT05GICJwcm90byB0Y3At c2VydmVyXG4iOwogIHByaW50IFNFUlZFUkNPTkYgIiMgUGFja2V0IHNpemVcbiI7CiAgaWYgKCRj Z2lwYXJhbXN7J01UVSd9IGVxICcnKSB7JHR1bm10dSA9ICcxNDAwJ30gZWxzZSB7JHR1bm10dSA9 ICRjZ2lwYXJhbXN7J01UVSd9fTsKICBwcmludCBTRVJWRVJDT05GICJ0dW4tbXR1ICR0dW5tdHVc biI7CiAgfQogIAogIGlmICgkY2dpcGFyYW1zeydQUk9UT0NPTCd9IGVxICd1ZHAnKSB7CiAgcHJp bnQgU0VSVkVSQ09ORiAicHJvdG8gdWRwXG4iOyAKICBwcmludCBTRVJWRVJDT05GICIjIFBha2V0 c2l6ZVxuIjsKICBpZiAoJGNnaXBhcmFtc3snTVRVJ30gZXEgJycpIHskdHVubXR1ID0gJzE1MDAn fSBlbHNlIHskdHVubXR1ID0gJGNnaXBhcmFtc3snTVRVJ319OwogIHByaW50IFNFUlZFUkNPTkYg InR1bi1tdHUgJHR1bm10dVxuIjsKICBpZiAoJGNnaXBhcmFtc3snRlJBR01FTlQnfSBuZSAnJykg e3ByaW50IFNFUlZFUkNPTkYgImZyYWdtZW50ICRjZ2lwYXJhbXN7J0ZSQUdNRU5UJ31cbiI7fSAK ICBpZiAoJGNnaXBhcmFtc3snTVNTRklYJ30gZXEgJ29uJykge3ByaW50IFNFUlZFUkNPTkYgIm1z c2ZpeFxuIjsgfTsgCiAgfQogIHByaW50IFNFUlZFUkNPTkYgIiMgQXV0aC4gU2VydmVyXG4iOyAK ICBwcmludCBTRVJWRVJDT05GICJ0bHMtc2VydmVyXG4iOyAKICBwcmludCBTRVJWRVJDT05GICJj YSAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtXG4iOyAKICBwcmludCBTRVJW RVJDT05GICJjZXJ0ICR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3NlcnZlcmNlcnQucGVt XG4iOyAKICBwcmludCBTRVJWRVJDT05GICJrZXkgJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Vy dHMvc2VydmVya2V5LnBlbVxuIjsgCiAgcHJpbnQgU0VSVkVSQ09ORiAiZGggJHtHZW5lcmFsOjpz d3Jvb3R9L292cG4vY2EvZGgxMDI0LnBlbVxuIjsgCiAgcHJpbnQgU0VSVkVSQ09ORiAiIyBDaXBo ZXJcbiI7IAogIHByaW50IFNFUlZFUkNPTkYgImNpcGhlciBBRVMtMjU2LUNCQ1xuIjsgCiAgaWYg KCRjZ2lwYXJhbXN7J0NPTVBMWk8nfSBlcSAnb24nKSB7CiAgIHByaW50IFNFUlZFUkNPTkYgIiMg RW5hYmxlIENvbXByZXNzaW9uXG4iOwogICBwcmludCBTRVJWRVJDT05GICJjb21wLWx6b1xyXG4i OwogICAgIH0KICBwcmludCBTRVJWRVJDT05GICIjIERlYnVnIExldmVsXG4iOyAKICBwcmludCBT RVJWRVJDT05GICJ2ZXJiIDNcbiI7IAogIHByaW50IFNFUlZFUkNPTkYgIiMgVHVubmVsIGNoZWNr XG4iOyAKICBwcmludCBTRVJWRVJDT05GICJrZWVwYWxpdmUgMTAgNjBcbiI7IAogIHByaW50IFNF UlZFUkNPTkYgIiMgU3RhcnQgYXMgZGFlbW9uXG4iOyAKICBwcmludCBTRVJWRVJDT05GICJkYWVt b24gJGNnaXBhcmFtc3snTkFNRSd9bjJuXG4iOyAKICBwcmludCBTRVJWRVJDT05GICJ3cml0ZXBp ZCAvdmFyL3J1bi8kY2dpcGFyYW1zeydOQU1FJ31uMm4ucGlkXG4iOyAKICBwcmludCBTRVJWRVJD T05GICIjIEFjdGl2YXRlIE1hbmFnZW1lbnQgSW50ZXJmYWNlIGFuZCBQb3J0XG4iOyAKICBpZiAo JGNnaXBhcmFtc3snT1ZQTl9NR01UJ30gZXEgJycpIHtwcmludCBTRVJWRVJDT05GICJtYW5hZ2Vt ZW50IGxvY2FsaG9zdCAkY2dpcGFyYW1zeydERVNUX1BPUlQnfVxuIn0KICBlbHNlIHtwcmludCBT RVJWRVJDT05GICJtYW5hZ2VtZW50IGxvY2FsaG9zdCAkY2dpcGFyYW1zeydPVlBOX01HTVQnfVxu In07CiAgY2xvc2UoU0VSVkVSQ09ORik7Cgp9CgojIyMKIyBtLmEuZCBuZXQybmV0CiMjIwoKaWYg KCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsnc2F2ZSd9ICYmICRjZ2lwYXJhbXN7 J1RZUEUnfSBlcSAnbmV0JyAmJiAkY2dpcGFyYW1zeydTSURFJ30gZXEgJ2NsaWVudCcpCnsKICAg ICAgICBteSBAb3ZzdWJuZXR0ZW1wID0gIHNwbGl0KC9cLi8sJGNnaXBhcmFtc3snT1ZQTl9TVUJO RVQnfSk7CiAgICAgICAgbXkgJG92c3VibmV0ID0gICIkb3ZzdWJuZXR0ZW1wWzBdLiRvdnN1Ym5l dHRlbXBbMV0uJG92c3VibmV0dGVtcFsyXSI7CiAgICAgICAgbXkgQHJlbXN1Ym5ldCA9ICBzcGxp dCgvXC8vLCRjZ2lwYXJhbXN7J1JFTU9URV9TVUJORVQnfSk7CiAgICAgICAgbXkgJHR1bm10dSA9 ICAnJzsKICAgICAgICAgICAgICAgICAgIAp1bmxlc3MoLWQgIiR7R2VuZXJhbDo6c3dyb290fS9v dnBuL24ybmNvbmYvIil7bWtkaXIgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYiLCAw NzU1IG9yIGRpZSAiVW5hYmxlIHRvIGNyZWF0ZSBkaXIgJCEiO30KdW5sZXNzKC1kICIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfSIpe21rZGlyICIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfSIsIDA3NzAgb3Ig ZGllICJVbmFibGUgdG8gY3JlYXRlIGRpciAkISI7fQogIAogIG9wZW4oQ0xJRU5UQ09ORiwgICAg Ij4ke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfS8kY2dp cGFyYW1zeydOQU1FJ30uY29uZiIpIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW4gJHtHZW5lcmFsOjpz d3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9 LmNvbmY6ICQhIjsKICAKICBmbG9jayBDTElFTlRDT05GLCAyOwogIHByaW50IENMSUVOVENPTkYg IiMgSVBGaXJlIHJld3JpdHRlbiBuMm4gT3BlbiBWUE4gQ2xpZW50IENvbmZpZyBieSB1bW1lZWdn ZSB1bmQgbS5hLmRcbiI7CiAgcHJpbnQgQ0xJRU5UQ09ORiAiI1xuIjsgCiAgcHJpbnQgQ0xJRU5U Q09ORiAiIyBVc2VyIFNlY3VyaXR5XG4iOwogIHByaW50IENMSUVOVENPTkYgInVzZXIgbm9ib2R5 XG4iOwogIHByaW50IENMSUVOVENPTkYgImdyb3VwIG5vYm9keVxuIjsKICBwcmludCBDTElFTlRD T05GICJwZXJzaXN0LXR1blxuIjsKICBwcmludCBDTElFTlRDT05GICJwZXJzaXN0LWtleVxuIjsK ICBwcmludCBDTElFTlRDT05GICJzY3JpcHQtc2VjdXJpdHkgMlxuIjsKICBwcmludCBDTElFTlRD T05GICIjIElQL0ROUyBmb3IgcmVtb3RlIFNlcnZlciBHYXRld2F5XG4iOyAKICBwcmludCBDTElF TlRDT05GICJyZW1vdGUgJGNnaXBhcmFtc3snUkVNT1RFJ31cbiI7CiAgcHJpbnQgQ0xJRU5UQ09O RiAiZmxvYXRcbiI7CiAgcHJpbnQgQ0xJRU5UQ09ORiAiIyBJUCBhZHJlc3NlcyBvZiB0aGUgVlBO IFN1Ym5ldFxuIjsgCiAgcHJpbnQgQ0xJRU5UQ09ORiAiaWZjb25maWcgJG92c3VibmV0LjIgJG92 c3VibmV0LjFcbiI7IAogIHByaW50IENMSUVOVENPTkYgIiMgU2VydmVyIEdhdGV3YXkgTmV0d29y a1xuIjsgCiAgcHJpbnQgQ0xJRU5UQ09ORiAicm91dGUgJHJlbXN1Ym5ldFswXSAkcmVtc3VibmV0 WzFdXG4iOyAKICBwcmludCBDTElFTlRDT05GICIjIHR1biBEZXZpY2VcbiI7IAogIHByaW50IENM SUVOVENPTkYgImRldiB0dW5cbiI7IAogIHByaW50IENMSUVOVENPTkYgIiMgUG9ydCBhbmQgUHJv dG9rb2xcbiI7IAogIHByaW50IENMSUVOVENPTkYgInBvcnQgJGNnaXBhcmFtc3snREVTVF9QT1JU J31cbiI7IAoKICBpZiAoJGNnaXBhcmFtc3snUFJPVE9DT0wnfSBlcSAndGNwJykgewogIHByaW50 IENMSUVOVENPTkYgInByb3RvIHRjcC1jbGllbnRcbiI7CiAgcHJpbnQgQ0xJRU5UQ09ORiAiIyBQ YWNrZXQgc2l6ZVxuIjsKICBpZiAoJGNnaXBhcmFtc3snTVRVJ30gZXEgJycpIHskdHVubXR1ID0g JzE0MDAnfSBlbHNlIHskdHVubXR1ID0gJGNnaXBhcmFtc3snTVRVJ319OwogIHByaW50IENMSUVO VENPTkYgInR1bi1tdHUgJHR1bm10dVxuIjsKICB9CiAgCiAgaWYgKCRjZ2lwYXJhbXN7J1BST1RP Q09MJ30gZXEgJ3VkcCcpIHsKICBwcmludCBDTElFTlRDT05GICJwcm90byB1ZHBcbiI7IAogIHBy aW50IENMSUVOVENPTkYgIiMgUGFrZXRzaXplXG4iOwogIGlmICgkY2dpcGFyYW1zeydNVFUnfSBl cSAnJykgeyR0dW5tdHUgPSAnMTUwMCd9IGVsc2UgeyR0dW5tdHUgPSAkY2dpcGFyYW1zeydNVFUn fX07CiAgcHJpbnQgQ0xJRU5UQ09ORiAidHVuLW10dSAkdHVubXR1XG4iOwogIGlmICgkY2dpcGFy YW1zeydGUkFHTUVOVCd9IG5lICcnKSB7cHJpbnQgQ0xJRU5UQ09ORiAiZnJhZ21lbnQgJGNnaXBh cmFtc3snRlJBR01FTlQnfVxuIjt9CiAgaWYgKCRjZ2lwYXJhbXN7J01TU0ZJWCd9IGVxICdvbicp IHtwcmludCBDTElFTlRDT05GICJtc3NmaXhcbiI7IH07IAogIH0KIAogIHByaW50IENMSUVOVENP TkYgIm5zLWNlcnQtdHlwZSBzZXJ2ZXJcbiI7ICAgCiAgcHJpbnQgQ0xJRU5UQ09ORiAiIyBBdXRo LiBDbGllbnRcbiI7IAogIHByaW50IENMSUVOVENPTkYgInRscy1jbGllbnRcbiI7IAogIHByaW50 IENMSUVOVENPTkYgIiMgQ2lwaGVyXG4iOyAKICBwcmludCBDTElFTlRDT05GICJjaXBoZXIgQUVT LTI1Ni1DQkNcbiI7IAogIHByaW50IENMSUVOVENPTkYgInBrY3MxMiAke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ30ucDEyXHJcbiI7CiAgaWYgKCRjZ2lwYXJh bXN7J0NPTVBMWk8nfSBlcSAnb24nKSB7CiAgIHByaW50IENMSUVOVENPTkYgIiMgRW5hYmxlIENv bXByZXNzaW9uXG4iOwogICBwcmludCBDTElFTlRDT05GICJjb21wLWx6b1xyXG4iOwogICAgIH0K ICBwcmludCBDTElFTlRDT05GICIjIERlYnVnIExldmVsXG4iOyAKICBwcmludCBDTElFTlRDT05G ICJ2ZXJiIDNcbiI7IAogIHByaW50IENMSUVOVENPTkYgIiMgVHVubmVsIGNoZWNrXG4iOyAKICBw cmludCBDTElFTlRDT05GICJrZWVwYWxpdmUgMTAgNjBcbiI7IAogIHByaW50IENMSUVOVENPTkYg IiMgU3RhcnQgYXMgZGFlbW9uXG4iOyAKICBwcmludCBDTElFTlRDT05GICJkYWVtb24gJGNnaXBh cmFtc3snTkFNRSd9bjJuXG4iOwogIHByaW50IENMSUVOVENPTkYgIndyaXRlcGlkIC92YXIvcnVu LyRjZ2lwYXJhbXN7J05BTUUnfW4ybi5waWRcbiI7IAogIHByaW50IENMSUVOVENPTkYgIiMgQWN0 aXZhdGUgTWFuYWdlbWVudCBJbnRlcmZhY2UgYW5kIFBvcnRcbiI7IAogIGlmICgkY2dpcGFyYW1z eydPVlBOX01HTVQnfSBlcSAnJykge3ByaW50IENMSUVOVENPTkYgIm1hbmFnZW1lbnQgbG9jYWxo b3N0ICRjZ2lwYXJhbXN7J0RFU1RfUE9SVCd9XG4ifQogIGVsc2Uge3ByaW50IENMSUVOVENPTkYg Im1hbmFnZW1lbnQgbG9jYWxob3N0ICRjZ2lwYXJhbXN7J09WUE5fTUdNVCd9XG4ifTsKICBjbG9z ZShDTElFTlRDT05GKTsKCn0KICAKIyMjCiMjIyBTYXZlIG1haW4gc2V0dGluZ3MKIyMjCgoKaWYg KCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsnc2F2ZSd9ICYmICRjZ2lwYXJhbXN7 J1RZUEUnfSBlcSAnJyAmJiAkY2dpcGFyYW1zeydLRVknfSBlcSAnJykgewogICAgJkdlbmVyYWw6 OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwldnBuc2V0dGlu Z3MpOwogICAgI0RBTiBkbyB3ZSByZWFsbHkgbmVlZCAodG8gdG8gY2hlY2spIHRoaXMgdmFsdWU/ IEJlc2lkZXMgaWYgd2UgbGlzdGVuIG9uIGJsdWUgYW5kIG9yYW5nZSB0b28sCiAgICAjREFOIHRo aXMgdmFsdWUgaGFzIHRvIGxlYXZlLgogICAgaWYgKCRjZ2lwYXJhbXN7J0VOQUJMRUQnfSBlcSAn b24nKXsKICAgIAl1bmxlc3MgKCZHZW5lcmFsOjp2YWxpZGZxZG4oJGNnaXBhcmFtc3snVlBOX0lQ J30pIHx8ICZHZW5lcmFsOjp2YWxpZGlwKCRjZ2lwYXJhbXN7J1ZQTl9JUCd9KSkgewoJCSRlcnJv cm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIGhvc3RuYW1lJ307Cglnb3Rv IFNFVFRJTkdTX0VSUk9SOwogICAgCX0KICAgIH0KICAgIGlmICgkY2dpcGFyYW1zeydFTkFCTEVE J30gZXEgJ29uJyl7CgkmZGlzYWxsb3dyZXNlcnZlZCgkY2dpcGFyYW1zeydEREVTVF9QT1JUJ30s MCwkY2dpcGFyYW1zeydEUFJPVE9DT0wnfSwiZGVzdCIpOwogICAgfQkKICAgIGlmICgkZXJyb3Jt ZXNzYWdlKSB7IGdvdG8gU0VUVElOR1NfRVJST1I7IH0KICAgIAogICAgCiAgICBpZiAoJGNnaXBh cmFtc3snRU5BQkxFRCd9IGVxICdvbicpewoJJmNoZWNrcG9ydGZ3KDAsJGNnaXBhcmFtc3snRERF U1RfUE9SVCd9LCRjZ2lwYXJhbXN7J0RQUk9UT0NPTCd9LCcwLjAuMC4wJyk7CiAgICB9CiAgICAJ CiAgICBpZiAoJGVycm9ybWVzc2FnZSkgeyBnb3RvIFNFVFRJTkdTX0VSUk9SOyB9CiAgICAKICAg IGlmICghICZHZW5lcmFsOjp2YWxpZGlwYW5kbWFzaygkY2dpcGFyYW1zeydET1ZQTl9TVUJORVQn fSkpIHsKICAgICAgICAgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnb3ZwbiBzdWJuZXQg aXMgaW52YWxpZCd9OwoJZ290byBTRVRUSU5HU19FUlJPUjsKICAgIH0KICAgIG15IEB0bXBvdnBu c3VibmV0ID0gc3BsaXQoIlwvIiwkY2dpcGFyYW1zeydET1ZQTl9TVUJORVQnfSk7CiAgICAKICAg IGlmICgmR2VuZXJhbDo6SXBJblN1Ym5ldCAoICRuZXRzZXR0aW5nc3snUkVEX0FERFJFU1MnfSwg CgkkdG1wb3ZwbnN1Ym5ldFswXSwgJHRtcG92cG5zdWJuZXRbMV0pKSB7CgkkZXJyb3JtZXNzYWdl ID0gIiRMYW5nOjp0cnsnb3ZwbiBzdWJuZXQgb3ZlcmxhcCd9IElQRmlyZSBSRUQgTmV0d29yayAk bmV0c2V0dGluZ3N7J1JFRF9BRERSRVNTJ30iOwoJZ290byBTRVRUSU5HU19FUlJPUjsKICAgIH0K ICAgIAogICAgaWYgKCZHZW5lcmFsOjpJcEluU3VibmV0ICggJG5ldHNldHRpbmdzeydHUkVFTl9B RERSRVNTJ30sIAoJJHRtcG92cG5zdWJuZXRbMF0sICR0bXBvdnBuc3VibmV0WzFdKSkgewogICAg ICAgICRlcnJvcm1lc3NhZ2UgPSAiJExhbmc6OnRyeydvdnBuIHN1Ym5ldCBvdmVybGFwJ30gSVBG aXJlIEdyZWVuIE5ldHdvcmsgJG5ldHNldHRpbmdzeydHUkVFTl9BRERSRVNTJ30iOwogICAgICAg IGdvdG8gU0VUVElOR1NfRVJST1I7CiAgICB9CgogICAgaWYgKCZHZW5lcmFsOjpJcEluU3VibmV0 ICggJG5ldHNldHRpbmdzeydCTFVFX0FERFJFU1MnfSwgCgkkdG1wb3ZwbnN1Ym5ldFswXSwgJHRt cG92cG5zdWJuZXRbMV0pKSB7CgkkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnb3ZwbiBzdWJu ZXQgb3ZlcmxhcCd9IElQRmlyZSBCbHVlIE5ldHdvcmsgJG5ldHNldHRpbmdzeydCTFVFX0FERFJF U1MnfSI7Cglnb3RvIFNFVFRJTkdTX0VSUk9SOwogICAgfQogICAgCiAgICBpZiAoJkdlbmVyYWw6 OklwSW5TdWJuZXQgKCAkbmV0c2V0dGluZ3N7J09SQU5HRV9BRERSRVNTJ30sIAoJJHRtcG92cG5z dWJuZXRbMF0sICR0bXBvdnBuc3VibmV0WzFdKSkgewoJJGVycm9ybWVzc2FnZSA9ICIkTGFuZzo6 dHJ7J292cG4gc3VibmV0IG92ZXJsYXAnfSBJUEZpcmUgT3JhbmdlIE5ldHdvcmsgJG5ldHNldHRp bmdzeydPUkFOR0VfQUREUkVTUyd9IjsKCWdvdG8gU0VUVElOR1NfRVJST1I7CiAgICB9CiAgICBv cGVuKEFMSUFTRVMsICIke0dlbmVyYWw6OnN3cm9vdH0vZXRoZXJuZXQvYWxpYXNlcyIpIG9yIGRp ZSAnVW5hYmxlIHRvIG9wZW4gYWxpYXNlcyBmaWxlLic7CiAgICB3aGlsZSAoPEFMSUFTRVM+KQog ICAgewoJY2hvbXAoJF8pOwoJbXkgQHRlbXBhbGlhcyA9IHNwbGl0KC9cLC8sJF8pOwoJaWYgKCR0 ZW1wYWxpYXNbMV0gZXEgJ29uJykgewoJICAgIGlmICgmR2VuZXJhbDo6SXBJblN1Ym5ldCAoJHRl bXBhbGlhc1swXSAsIAoJCSR0bXBvdnBuc3VibmV0WzBdLCAkdG1wb3ZwbnN1Ym5ldFsxXSkpIHsK CQkkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnb3ZwbiBzdWJuZXQgb3ZlcmxhcCd9IElQRmly ZSBhbGlhcyBlbnRyeSAkdGVtcGFsaWFzWzBdIjsKCSAgICB9CQkKCX0KICAgIH0KICAgIGNsb3Nl KEFMSUFTRVMpOwogICAgaWYgKCRlcnJvcm1lc3NhZ2UgbmUgJycpewoJZ290byBTRVRUSU5HU19F UlJPUjsKICAgIH0KICAgIGlmICgkY2dpcGFyYW1zeydFTkFCTEVEJ30gIX4gL14ob258b2ZmKSQv KSB7CiAgICAgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaW52YWxpZCBpbnB1dCd9Owog ICAgICAgIGdvdG8gU0VUVElOR1NfRVJST1I7CiAgICB9CiAgICBpZiAoKGxlbmd0aCgkY2dpcGFy YW1zeydETVRVJ30pPT0wKSB8fCAoKCRjZ2lwYXJhbXN7J0RNVFUnfSkgPCAxMDAwICkpIHsKICAg ICAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIG10dSBpbnB1dCd9OwogICAg ICAgIGdvdG8gU0VUVElOR1NfRVJST1I7CiAgICB9CiAgICAKICAgIHVubGVzcyAoJkdlbmVyYWw6 OnZhbGlkcG9ydCgkY2dpcGFyYW1zeydEREVTVF9QT1JUJ30pKSB7CgkkZXJyb3JtZXNzYWdlID0g JExhbmc6OnRyeydpbnZhbGlkIHBvcnQnfTsKCWdvdG8gU0VUVElOR1NfRVJST1I7CiAgICB9CiAg ICAkdnBuc2V0dGluZ3N7J0VOQUJMRURfQkxVRSd9ID0gJGNnaXBhcmFtc3snRU5BQkxFRF9CTFVF J307CiAgICAkdnBuc2V0dGluZ3N7J0VOQUJMRURfT1JBTkdFJ30gPSRjZ2lwYXJhbXN7J0VOQUJM RURfT1JBTkdFJ307CiAgICAkdnBuc2V0dGluZ3N7J0VOQUJMRUQnfSA9ICRjZ2lwYXJhbXN7J0VO QUJMRUQnfTsKICAgICR2cG5zZXR0aW5nc3snVlBOX0lQJ30gPSAkY2dpcGFyYW1zeydWUE5fSVAn fTsKI25ldyBzZXR0aW5ncyBmb3IgZGFlbW9uCiAgICAkdnBuc2V0dGluZ3N7J0RPVlBOX1NVQk5F VCd9ID0gJGNnaXBhcmFtc3snRE9WUE5fU1VCTkVUJ307CiAgICAkdnBuc2V0dGluZ3N7J0RERVZJ Q0UnfSA9ICRjZ2lwYXJhbXN7J0RERVZJQ0UnfTsKICAgICR2cG5zZXR0aW5nc3snRFBST1RPQ09M J30gPSAkY2dpcGFyYW1zeydEUFJPVE9DT0wnfTsKICAgICR2cG5zZXR0aW5nc3snRERFU1RfUE9S VCd9ID0gJGNnaXBhcmFtc3snRERFU1RfUE9SVCd9OwogICAgJHZwbnNldHRpbmdzeydETVRVJ30g PSAkY2dpcGFyYW1zeydETVRVJ307CiAgICAkdnBuc2V0dGluZ3N7J0RDT01QTFpPJ30gPSAkY2dp cGFyYW1zeydEQ09NUExaTyd9OwogICAgJHZwbnNldHRpbmdzeydEQ0lQSEVSJ30gPSAkY2dpcGFy YW1zeydEQ0lQSEVSJ307CiN3cnRpZSBlbmFibGUKCiAgaWYgKCAkdnBuc2V0dGluZ3N7J0VOQUJM RURfQkxVRSd9IGVxICdvbicgKSB7c3lzdGVtKCJ0b3VjaCAke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9lbmFibGVfYmx1ZSAyPi9kZXYvbnVsbCIpO31lbHNle3N5c3RlbSgidW5saW5rICR7R2VuZXJh bDo6c3dyb290fS9vdnBuL2VuYWJsZV9ibHVlIDI+L2Rldi9udWxsIik7fQogIGlmICggJHZwbnNl dHRpbmdzeydFTkFCTEVEX09SQU5HRSd9IGVxICdvbicgKSB7c3lzdGVtKCJ0b3VjaCAke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9lbmFibGVfb3JhbmdlIDI+L2Rldi9udWxsIik7fWVsc2V7c3lzdGVt KCJ1bmxpbmsgJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vZW5hYmxlX29yYW5nZSAyPi9kZXYvbnVs bCIpO30KICBpZiAoICR2cG5zZXR0aW5nc3snRU5BQkxFRCd9IGVxICdvbicgKSB7c3lzdGVtKCJ0 b3VjaCAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9lbmFibGUgMj4vZGV2L251bGwiKTt9ZWxzZXtz eXN0ZW0oInVubGluayAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9lbmFibGUgMj4vZGV2L251bGwi KTt9CiNuZXcgc2V0dGluZ3MgZm9yIGRhZW1vbiAgICAKICAgICZHZW5lcmFsOjp3cml0ZWhhc2go IiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL3NldHRpbmdzIiwgXCV2cG5zZXR0aW5ncyk7CiAgICAm d3JpdGVzZXJ2ZXJjb25mKCk7I2hpZXIgb2sKU0VUVElOR1NfRVJST1I6CiMjIwojIyMgUmVzZXQg YWxsIHN0ZXAgMgojIyMKfWVsc2lmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7 J3Jlc2V0J30gJiYgJGNnaXBhcmFtc3snQVJFVVNVUkUnfSBlcSAneWVzJykgewogICAgbXkgJGZp bGUgPSAnJzsKICAgICZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9vdnBuY29uZmlnIiwgXCVjb25maWdoYXNoKTsKCiAgICBmb3JlYWNoIG15ICRrZXkgKGtl eXMgJWNvbmZpZ2hhc2gpIHsKCWlmICgkY29uZmlnaGFzaHska2V5fVs0XSBlcSAnY2VydCcpIHsK CSAgICBkZWxldGUgJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snJGtleSd9fTsKCX0KICAgIH0KICAg IHdoaWxlICgkZmlsZSA9IGdsb2IoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhLyoiKSkgewoJ dW5saW5rICRmaWxlCiAgICB9CiAgICB3aGlsZSAoJGZpbGUgPSBnbG9iKCIke0dlbmVyYWw6OnN3 cm9vdH0vb3Zwbi9jZXJ0cy8qIikpIHsKCXVubGluayAkZmlsZQogICAgfQogICAgd2hpbGUgKCRm aWxlID0gZ2xvYigiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY3Jscy8qIikpIHsKCXVubGluayAk ZmlsZQogICAgfQogICAgJmNsZWFuc3NsZGF0YWJhc2UoKTsKICAgIGlmIChvcGVuKEZJTEUsICI+ JHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Fjb25maWciKSkgewogICAgICAgIHByaW50IEZJTEUg IiI7CiAgICAgICAgY2xvc2UgRklMRTsKICAgIH0KICAgICZHZW5lcmFsOjp3cml0ZWhhc2hhcnJh eSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CiAg ICAjJndyaXRlc2VydmVyY29uZigpOwojIyMKIyMjIFJlc2V0IGFsbCBzdGVwIDEKIyMjCn1lbHNp ZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydyZXNldCd9KSB7CiAgICAmSGVh ZGVyOjpzaG93aHR0cGhlYWRlcnMoKTsKICAgICZIZWFkZXI6Om9wZW5wYWdlKCRMYW5nOjp0cnsn dnBuIGNvbmZpZ3VyYXRpb24gbWFpbid9LCAxLCAnJyk7CiAgICAmSGVhZGVyOjpvcGVuYmlnYm94 KCcxMDAlJywgJ0xFRlQnLCAnJywgJycpOwogICAgJkhlYWRlcjo6b3BlbmJveCgnMTAwJScsICdM RUZUJywgJExhbmc6OnRyeydhcmUgeW91IHN1cmUnfSk7CiAgICBwcmludCA8PEVORAoJPHRhYmxl Pjxmb3JtIG1ldGhvZD0ncG9zdCc+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nQVJFVVNVUkUn IHZhbHVlPSd5ZXMnIC8+CgkgICAgPHRyPjx0ZCBhbGlnbj0nY2VudGVyJz4JCQoJCTxiPjxmb250 IGNvbG9yPScke0hlYWRlcjo6Y29sb3VycmVkfSc+JExhbmc6OnRyeydjYXBzd2FybmluZyd9PC9m b250PjwvYj46IAoJCSRMYW5nOjp0cnsncmVzZXR0aW5nIHRoZSB2cG4gY29uZmlndXJhdGlvbiB3 aWxsIHJlbW92ZSB0aGUgcm9vdCBjYSwgdGhlIGhvc3QgY2VydGlmaWNhdGUgYW5kIGFsbCBjZXJ0 aWZpY2F0ZSBiYXNlZCBjb25uZWN0aW9ucyd9CgkgICAgPHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48 aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdBQ1RJT04nIHZhbHVlPSckTGFuZzo6dHJ7J3Jlc2V0 J30nIC8+CgkJPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6 OnRyeydjYW5jZWwnfScgLz48L3RkPjwvdHI+Cgk8L2Zvcm0+PC90YWJsZT4KRU5ECiAgICA7CiAg ICAmSGVhZGVyOjpjbG9zZWJveCgpOwogICAgJkhlYWRlcjo6Y2xvc2ViaWdib3goKTsKICAgICZI ZWFkZXI6OmNsb3NlcGFnZSgpOwogICAgZXhpdCAoMCk7CgojIyMKIyMjIFVwbG9hZCBDQSBDZXJ0 aWZpY2F0ZQojIyMKfSBlbHNpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeyd1 cGxvYWQgY2EgY2VydGlmaWNhdGUnfSkgewogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhY29uZmlnIiwgXCVjYWhhc2gpOwoKICAgIGlmICgkY2dp cGFyYW1zeydDQV9OQU1FJ30gIX4gL15bYS16QS1aMC05XSskLykgewoJJGVycm9ybWVzc2FnZSA9 ICRMYW5nOjp0cnsnbmFtZSBtdXN0IG9ubHkgY29udGFpbiBjaGFyYWN0ZXJzJ307Cglnb3RvIFVQ TE9BRENBX0VSUk9SOwogICAgfQoKICAgIGlmIChsZW5ndGgoJGNnaXBhcmFtc3snQ0FfTkFNRSd9 KSA+NjApIHsKCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J25hbWUgdG9vIGxvbmcnfTsKCWdv dG8gVlBOQ09ORl9FUlJPUjsKICAgIH0KCiAgICBpZiAoJGNnaXBhcmFtc3snQ0FfTkFNRSd9IGVx ICdjYScpIHsKCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J25hbWUgaXMgaW52YWxpZCd9OwoJ Z290byBVUExPQURfQ0FfRVJST1I7CiAgICB9CgogICAgIyBDaGVjayBpZiB0aGVyZSBpcyBubyBv dGhlciBlbnRyeSB3aXRoIHRoaXMgbmFtZQogICAgZm9yZWFjaCBteSAka2V5IChrZXlzICVjYWhh c2gpIHsKCWlmICgkY2FoYXNoeyRrZXl9WzBdIGVxICRjZ2lwYXJhbXN7J0NBX05BTUUnfSkgewoJ ICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2EgY2EgY2VydGlmaWNhdGUgd2l0aCB0aGlz IG5hbWUgYWxyZWFkeSBleGlzdHMnfTsKCSAgICBnb3RvIFVQTE9BRENBX0VSUk9SOwoJfQogICAg fQoKICAgIGlmIChyZWYgKCRjZ2lwYXJhbXN7J0ZIJ30pIG5lICdGaCcpIHsKCSRlcnJvcm1lc3Nh Z2UgPSAkTGFuZzo6dHJ7J3RoZXJlIHdhcyBubyBmaWxlIHVwbG9hZCd9OwoJZ290byBVUExPQURD QV9FUlJPUjsKICAgIH0KICAgICMgTW92ZSB1cGxvYWRlZCBjYSB0byBhIHRlbXBvcmFyeSBmaWxl CiAgICAobXkgJGZoLCBteSAkZmlsZW5hbWUpID0gdGVtcGZpbGUoICk7CiAgICBpZiAoY29weSAo JGNnaXBhcmFtc3snRkgnfSwgJGZoKSAhPSAxKSB7CgkkZXJyb3JtZXNzYWdlID0gJCE7Cglnb3Rv IFVQTE9BRENBX0VSUk9SOwogICAgfQogICAgbXkgJHRlbXAgPSBgL3Vzci9iaW4vb3BlbnNzbCB4 NTA5IC10ZXh0IC1pbiAkZmlsZW5hbWVgOwogICAgaWYgKCR0ZW1wICF+IC9DQTpUUlVFL2kpIHsK CSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J25vdCBhIHZhbGlkIGNhIGNlcnRpZmljYXRlJ307 Cgl1bmxpbmsgKCRmaWxlbmFtZSk7Cglnb3RvIFVQTE9BRENBX0VSUk9SOwogICAgfSBlbHNlIHsK CW1vdmUoJGZpbGVuYW1lLCAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvJGNnaXBhcmFtc3sn Q0FfTkFNRSd9Y2VydC5wZW0iKTsKCWlmICgkPyBuZSAwKSB7CgkgICAgJGVycm9ybWVzc2FnZSA9 ICIkTGFuZzo6dHJ7J2NlcnRpZmljYXRlIGZpbGUgbW92ZSBmYWlsZWQnfTogJCEiOwoJICAgIHVu bGluayAoJGZpbGVuYW1lKTsKCSAgICBnb3RvIFVQTE9BRENBX0VSUk9SOwoJfQogICAgfQoKICAg IG15ICRjYXN1YmplY3QgPSBgL3Vzci9iaW4vb3BlbnNzbCB4NTA5IC10ZXh0IC1pbiAke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9jYS8kY2dpcGFyYW1zeydDQV9OQU1FJ31jZXJ0LnBlbWA7CiAgICAk Y2FzdWJqZWN0ICAgID1+IC9TdWJqZWN0OiAoLiopW1xuXS87CiAgICAkY2FzdWJqZWN0ICAgID0g JDE7CiAgICAkY2FzdWJqZWN0ICAgID1+IHMrL0VtYWlsKywgRSs7CiAgICAkY2FzdWJqZWN0ICAg ID1+IHMvIFNUPS8gUz0vOwogICAgJGNhc3ViamVjdCAgICA9ICZIZWFkZXI6OmNsZWFuaHRtbCgk Y2FzdWJqZWN0KTsKCiAgICBteSAka2V5ID0gJkdlbmVyYWw6OmZpbmRoYXNoYXJyYXlrZXkgKFwl Y2FoYXNoKTsKICAgICRjYWhhc2h7JGtleX1bMF0gPSAkY2dpcGFyYW1zeydDQV9OQU1FJ307CiAg ICAkY2FoYXNoeyRrZXl9WzFdID0gJGNhc3ViamVjdDsKICAgICZHZW5lcmFsOjp3cml0ZWhhc2hh cnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Fjb25maWciLCBcJWNhaGFzaCk7CiMgICAg c3lzdGVtKCcvdXNyL2xvY2FsL2Jpbi9pcHNlY2N0cmwnLCAnUicpOwoKICAgIFVQTE9BRENBX0VS Uk9SOgoKIyMjCiMjIyBEaXNwbGF5IGNhIGNlcnRpZmljYXRlCiMjIwp9IGVsc2lmICgkY2dpcGFy YW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J3Nob3cgY2EgY2VydGlmaWNhdGUnfSkgewogICAg JkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhY29uZmln IiwgXCVjYWhhc2gpOwoKICAgIGlmICggLWYgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhLyRj YWhhc2h7JGNnaXBhcmFtc3snS0VZJ319WzBdY2VydC5wZW0iKSB7CgkmSGVhZGVyOjpzaG93aHR0 cGhlYWRlcnMoKTsKCSZIZWFkZXI6Om9wZW5wYWdlKCRMYW5nOjp0cnsndnBuIGNvbmZpZ3VyYXRp b24gbWFpbid9LCAxLCAnJyk7CgkmSGVhZGVyOjpvcGVuYmlnYm94KCcxMDAlJywgJ0xFRlQnLCAn JywgJGVycm9ybWVzc2FnZSk7CgkmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xFRlQnLCAiJExh bmc6OnRyeydjYSBjZXJ0aWZpY2F0ZSd9OiIpOwoJbXkgJG91dHB1dCA9IGAvdXNyL2Jpbi9vcGVu c3NsIHg1MDkgLXRleHQgLWluICR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhLyRjYWhhc2h7JGNn aXBhcmFtc3snS0VZJ319WzBdY2VydC5wZW1gOwoJJG91dHB1dCA9ICZIZWFkZXI6OmNsZWFuaHRt bCgkb3V0cHV0LCJ5Iik7CglwcmludCAiPHByZT4kb3V0cHV0PC9wcmU+XG4iOwoJJkhlYWRlcjo6 Y2xvc2Vib3goKTsKCXByaW50ICI8ZGl2IGFsaWduPSdjZW50ZXInPjxhIGhyZWY9Jy9jZ2ktYmlu L292cG5tYWluLmNnaSc+JExhbmc6OnRyeydiYWNrJ308L2E+PC9kaXY+IjsKCSZIZWFkZXI6OmNs b3NlYmlnYm94KCk7CgkmSGVhZGVyOjpjbG9zZXBhZ2UoKTsKCWV4aXQoMCk7CiAgICB9IGVsc2Ug ewoJJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaW52YWxpZCBrZXknfTsKICAgIH0KCiMjIwoj IyMgRG93bmxvYWQgY2EgY2VydGlmaWNhdGUKIyMjCn0gZWxzaWYgKCRjZ2lwYXJhbXN7J0FDVElP Tid9IGVxICRMYW5nOjp0cnsnZG93bmxvYWQgY2EgY2VydGlmaWNhdGUnfSkgewogICAgJkdlbmVy YWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhY29uZmlnIiwgXCVj YWhhc2gpOwoKICAgIGlmICggLWYgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhLyRjYWhhc2h7 JGNnaXBhcmFtc3snS0VZJ319WzBdY2VydC5wZW0iICkgewoJcHJpbnQgIkNvbnRlbnQtVHlwZTog YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXHJcbiI7CglwcmludCAiQ29udGVudC1EaXNwb3NpdGlv bjogZmlsZW5hbWU9JGNhaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMF1jZXJ0LnBlbVxyXG5cclxu IjsKCXByaW50IGAvdXNyL2Jpbi9vcGVuc3NsIHg1MDkgLWluICR7R2VuZXJhbDo6c3dyb290fS9v dnBuL2NhLyRjYWhhc2h7JGNnaXBhcmFtc3snS0VZJ319WzBdY2VydC5wZW1gOwoJZXhpdCgwKTsK ICAgIH0gZWxzZSB7CgkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGtleSd9Owog ICAgfQoKIyMjCiMjIyBSZW1vdmUgY2EgY2VydGlmaWNhdGUgKHN0ZXAgMikKIyMjCn0gZWxzaWYg KCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsncmVtb3ZlIGNhIGNlcnRpZmljYXRl J30gJiYgJGNnaXBhcmFtc3snQVJFVVNVUkUnfSBlcSAneWVzJykgewogICAgJkdlbmVyYWw6OnJl YWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZp Z2hhc2gpOwogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9v dnBuL2NhY29uZmlnIiwgXCVjYWhhc2gpOwoKICAgIGlmICggLWYgIiR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL2NhLyRjYWhhc2h7JGNnaXBhcmFtc3snS0VZJ319WzBdY2VydC5wZW0iICkgewoJZm9y ZWFjaCBteSAka2V5IChrZXlzICVjb25maWdoYXNoKSB7CgkgICAgbXkgJHRlc3QgPSBgL3Vzci9i aW4vb3BlbnNzbCB2ZXJpZnkgLUNBZmlsZSAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS8kY2Fo YXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVswXWNlcnQucGVtICR7R2VuZXJhbDo6c3dyb290fS9vdnBu L2NlcnRzLyRjb25maWdoYXNoeyRrZXl9WzFdY2VydC5wZW1gOwoJICAgIGlmICgkdGVzdCA9fiAv OiBPSy8pIHsKCQkjIERlbGV0ZSBjb25uZWN0aW9uCiMJCWlmICgkdnBuc2V0dGluZ3N7J0VOQUJM RUQnfSBlcSAnb24nIHx8CiMJCSAgICAkdnBuc2V0dGluZ3N7J0VOQUJMRURfQkxVRSd9IGVxICdv bicpIHsKIwkJICAgIHN5c3RlbSgnL3Vzci9sb2NhbC9iaW4vaXBzZWNjdHJsJywgJ0QnLCAka2V5 KTsKIwkJfQoJCXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuLy9jZXJ0cy8kY29uZmln aGFzaHska2V5fVsxXWNlcnQucGVtIik7CgkJdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vY2VydHMvJGNvbmZpZ2hhc2h7JGtleX1bMV0ucDEyIik7CgkJZGVsZXRlICRjb25maWdoYXNo eyRrZXl9OwoJCSZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CiMJCSZ3cml0ZWlwc2VjZmlsZXMoKTsKCSAg ICB9Cgl9Cgl1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS8kY2FoYXNoeyRjZ2lw YXJhbXN7J0tFWSd9fVswXWNlcnQucGVtIik7CglkZWxldGUgJGNhaGFzaHskY2dpcGFyYW1zeydL RVknfX07CgkmR2VuZXJhbDo6d3JpdGVoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBu L2NhY29uZmlnIiwgXCVjYWhhc2gpOwojCXN5c3RlbSgnL3Vzci9sb2NhbC9iaW4vaXBzZWNjdHJs JywgJ1InKTsKICAgIH0gZWxzZSB7CgkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlk IGtleSd9OwogICAgfQojIyMKIyMjIFJlbW92ZSBjYSBjZXJ0aWZpY2F0ZSAoc3RlcCAxKQojIyMK fSBlbHNpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydyZW1vdmUgY2EgY2Vy dGlmaWNhdGUnfSkgewogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dy b290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hhc2gpOwogICAgJkdlbmVyYWw6OnJlYWRo YXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhY29uZmlnIiwgXCVjYWhhc2gpOwoK ICAgIG15ICRhc3NpZ25lZGNlcnRzID0gMDsKICAgIGlmICggLWYgIiR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL2NhLyRjYWhhc2h7JGNnaXBhcmFtc3snS0VZJ319WzBdY2VydC5wZW0iICkgewoJZm9y ZWFjaCBteSAka2V5IChrZXlzICVjb25maWdoYXNoKSB7CgkgICAgbXkgJHRlc3QgPSBgL3Vzci9i aW4vb3BlbnNzbCB2ZXJpZnkgLUNBZmlsZSAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS8kY2Fo YXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVswXWNlcnQucGVtICR7R2VuZXJhbDo6c3dyb290fS9vdnBu L2NlcnRzLyRjb25maWdoYXNoeyRrZXl9WzFdY2VydC5wZW1gOwoJICAgIGlmICgkdGVzdCA9fiAv OiBPSy8pIHsKCQkkYXNzaWduZWRjZXJ0cysrOwoJICAgIH0KCX0KCWlmICgkYXNzaWduZWRjZXJ0 cykgewoJICAgICZIZWFkZXI6OnNob3dodHRwaGVhZGVycygpOwoJICAgICZIZWFkZXI6Om9wZW5w YWdlKCRMYW5nOjp0cnsndnBuIGNvbmZpZ3VyYXRpb24gbWFpbid9LCAxLCAnJyk7CgkgICAgJkhl YWRlcjo6b3BlbmJpZ2JveCgnMTAwJScsICdMRUZUJywgJycsICRlcnJvcm1lc3NhZ2UpOwoJICAg ICZIZWFkZXI6Om9wZW5ib3goJzEwMCUnLCAnTEVGVCcsICRMYW5nOjp0cnsnYXJlIHlvdSBzdXJl J30pOwoJICAgIHByaW50IDw8RU5ECgkJPHRhYmxlPjxmb3JtIG1ldGhvZD0ncG9zdCc+PGlucHV0 IHR5cGU9J2hpZGRlbicgbmFtZT0nQVJFVVNVUkUnIHZhbHVlPSd5ZXMnIC8+CgkJICAgICAgIDxp bnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0tFWScgdmFsdWU9JyRjZ2lwYXJhbXN7J0tFWSd9JyAv PgoJCSAgICA8dHI+PHRkIGFsaWduPSdjZW50ZXInPgoJCQk8Yj48Zm9udCBjb2xvcj0nJHtIZWFk ZXI6OmNvbG91cnJlZH0nPiRMYW5nOjp0cnsnY2Fwc3dhcm5pbmcnfTwvZm9udD48L2I+OiAkYXNz aWduZWRjZXJ0cwoJCQkkTGFuZzo6dHJ7J2Nvbm5lY3Rpb25zIGFyZSBhc3NvY2lhdGVkIHdpdGgg dGhpcyBjYS4gIGRlbGV0aW5nIHRoZSBjYSB3aWxsIGRlbGV0ZSB0aGVzZSBjb25uZWN0aW9ucyBh cyB3ZWxsLid9CgkJICAgIDx0cj48dGQgYWxpZ249J2NlbnRlcic+PGlucHV0IHR5cGU9J3N1Ym1p dCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydyZW1vdmUgY2EgY2VydGlmaWNhdGUn fScgLz4KCQkJPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6 OnRyeydjYW5jZWwnfScgLz48L3RkPjwvdHI+CgkJPC9mb3JtPjwvdGFibGU+CkVORAoJICAgIDsK CSAgICAmSGVhZGVyOjpjbG9zZWJveCgpOwoJICAgICZIZWFkZXI6OmNsb3NlYmlnYm94KCk7Cgkg ICAgJkhlYWRlcjo6Y2xvc2VwYWdlKCk7CgkgICAgZXhpdCAoMCk7Cgl9IGVsc2UgewoJICAgIHVu bGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhLyRjYWhhc2h7JGNnaXBhcmFtc3snS0VZ J319WzBdY2VydC5wZW0iKTsKCSAgICBkZWxldGUgJGNhaGFzaHskY2dpcGFyYW1zeydLRVknfX07 CgkgICAgJkdlbmVyYWw6OndyaXRlaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j YWNvbmZpZyIsIFwlY2FoYXNoKTsKIwkgICAgc3lzdGVtKCcvdXNyL2xvY2FsL2Jpbi9pcHNlY2N0 cmwnLCAnUicpOwoJfQogICAgfSBlbHNlIHsKCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2lu dmFsaWQga2V5J307CiAgICB9CgojIyMKIyMjIERpc3BsYXkgcm9vdCBjZXJ0aWZpY2F0ZQojIyMK fWVsc2lmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J3Nob3cgcm9vdCBjZXJ0 aWZpY2F0ZSd9IHx8CiAgICAkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J3Nob3cg aG9zdCBjZXJ0aWZpY2F0ZSd9KSB7CiAgICBteSAkb3V0cHV0OwogICAgJkhlYWRlcjo6c2hvd2h0 dHBoZWFkZXJzKCk7CiAgICAmSGVhZGVyOjpvcGVucGFnZSgkTGFuZzo6dHJ7J3ZwbiBjb25maWd1 cmF0aW9uIG1haW4nfSwgMSwgJycpOwogICAgJkhlYWRlcjo6b3BlbmJpZ2JveCgnMTAwJScsICdM RUZUJywgJycsICcnKTsKICAgIGlmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7 J3Nob3cgcm9vdCBjZXJ0aWZpY2F0ZSd9KSB7CgkmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xF RlQnLCAiJExhbmc6OnRyeydyb290IGNlcnRpZmljYXRlJ306Iik7Cgkkb3V0cHV0ID0gYC91c3Iv YmluL29wZW5zc2wgeDUwOSAtdGV4dCAtaW4gJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvY2Fj ZXJ0LnBlbWA7CiAgICB9IGVsc2UgewoJJkhlYWRlcjo6b3BlbmJveCgnMTAwJScsICdMRUZUJywg IiRMYW5nOjp0cnsnaG9zdCBjZXJ0aWZpY2F0ZSd9OiIpOwoJJG91dHB1dCA9IGAvdXNyL2Jpbi9v cGVuc3NsIHg1MDkgLXRleHQgLWluICR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3NlcnZl cmNlcnQucGVtYDsKICAgIH0KICAgICRvdXRwdXQgPSAmSGVhZGVyOjpjbGVhbmh0bWwoJG91dHB1 dCwieSIpOwogICAgcHJpbnQgIjxwcmU+JG91dHB1dDwvcHJlPlxuIjsKICAgICZIZWFkZXI6OmNs b3NlYm94KCk7CiAgICBwcmludCAiPGRpdiBhbGlnbj0nY2VudGVyJz48YSBocmVmPScvY2dpLWJp bi9vdnBubWFpbi5jZ2knPiRMYW5nOjp0cnsnYmFjayd9PC9hPjwvZGl2PiI7CiAgICAmSGVhZGVy OjpjbG9zZWJpZ2JveCgpOwogICAgJkhlYWRlcjo6Y2xvc2VwYWdlKCk7CiAgICBleGl0KDApOwoK IyMjCiMjIyBEb3dubG9hZCByb290IGNlcnRpZmljYXRlCiMjIwp9ZWxzaWYgKCRjZ2lwYXJhbXN7 J0FDVElPTid9IGVxICRMYW5nOjp0cnsnZG93bmxvYWQgcm9vdCBjZXJ0aWZpY2F0ZSd9KSB7CiAg ICBpZiAoIC1mICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIiApIHsKCXBy aW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVxyXG4iOwoJcHJpbnQg IkNvbnRlbnQtRGlzcG9zaXRpb246IGZpbGVuYW1lPWNhY2VydC5wZW1cclxuXHJcbiI7Cglwcmlu dCBgL3Vzci9iaW4vb3BlbnNzbCB4NTA5IC1pbiAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9j YWNlcnQucGVtYDsKCWV4aXQoMCk7CiAgICB9CiAgICAKIyMjCiMjIyBEb3dubG9hZCBob3N0IGNl cnRpZmljYXRlCiMjIwp9ZWxzaWYgKCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsn ZG93bmxvYWQgaG9zdCBjZXJ0aWZpY2F0ZSd9KSB7CiAgICBpZiAoIC1mICIke0dlbmVyYWw6OnN3 cm9vdH0vb3Zwbi9jZXJ0cy9zZXJ2ZXJjZXJ0LnBlbSIgKSB7CglwcmludCAiQ29udGVudC1UeXBl OiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cclxuIjsKCXByaW50ICJDb250ZW50LURpc3Bvc2l0 aW9uOiBmaWxlbmFtZT1zZXJ2ZXJjZXJ0LnBlbVxyXG5cclxuIjsKCXByaW50IGAvdXNyL2Jpbi9v cGVuc3NsIHg1MDkgLWluICR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3NlcnZlcmNlcnQu cGVtYDsKCWV4aXQoMCk7CiAgICB9CiMjIwojIyMgRm9ybSBmb3IgZ2VuZXJhdGluZyBhIHJvb3Qg Y2VydGlmaWNhdGUKIyMjCn1lbHNpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRy eydnZW5lcmF0ZSByb290L2hvc3QgY2VydGlmaWNhdGVzJ30gfHwKCSAkY2dpcGFyYW1zeydBQ1RJ T04nfSBlcSAkTGFuZzo6dHJ7J3VwbG9hZCBwMTIgZmlsZSd9KSB7CgogICAgJkdlbmVyYWw6OnJl YWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwldnBuc2V0dGluZ3Mp OwogICAgaWYgKC1mICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIikgewoJ JGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsndmFsaWQgcm9vdCBjZXJ0aWZpY2F0ZSBhbHJlYWR5 IGV4aXN0cyd9OwoJJGNnaXBhcmFtc3snQUNUSU9OJ30gPSAnJzsKCWdvdG8gUk9PVENFUlRfRVJS T1I7CiAgICB9CgogICAgaWYgKCgkY2dpcGFyYW1zeydST09UQ0VSVF9IT1NUTkFNRSd9IGVxICcn KSAmJiAtZSAiJHtHZW5lcmFsOjpzd3Jvb3R9L3JlZC9hY3RpdmUiKSB7CglpZiAob3BlbihJUEFE RFIsICIke0dlbmVyYWw6OnN3cm9vdH0vcmVkL2xvY2FsLWlwYWRkcmVzcyIpKSB7CgkgICAgbXkg JGlwYWRkciA9IDxJUEFERFI+OwoJICAgIGNsb3NlIElQQUREUjsKCSAgICBjaG9tcCAoJGlwYWRk cik7CgkgICAgJGNnaXBhcmFtc3snUk9PVENFUlRfSE9TVE5BTUUnfSA9IChnZXRob3N0YnlhZGRy KHBhY2soIkM0Iiwgc3BsaXQoL1wuLywgJGlwYWRkcikpLCAyKSlbMF07CgkgICAgaWYgKCRjZ2lw YXJhbXN7J1JPT1RDRVJUX0hPU1ROQU1FJ30gZXEgJycpIHsKCQkkY2dpcGFyYW1zeydST09UQ0VS VF9IT1NUTkFNRSd9ID0gJGlwYWRkcjsKCSAgICB9Cgl9CiAgICB9IGVsc2lmICgkY2dpcGFyYW1z eydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J3VwbG9hZCBwMTIgZmlsZSd9KSB7CgoJaWYgKHJlZiAo JGNnaXBhcmFtc3snRkgnfSkgbmUgJ0ZoJykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6 dHJ7J3RoZXJlIHdhcyBubyBmaWxlIHVwbG9hZCd9OwoJICAgIGdvdG8gUk9PVENFUlRfRVJST1I7 Cgl9CgoJIyBNb3ZlIHVwbG9hZGVkIGNlcnRpZmljYXRlIHJlcXVlc3QgdG8gYSB0ZW1wb3Jhcnkg ZmlsZQoJKG15ICRmaCwgbXkgJGZpbGVuYW1lKSA9IHRlbXBmaWxlKCApOwoJaWYgKGNvcHkgKCRj Z2lwYXJhbXN7J0ZIJ30sICRmaCkgIT0gMSkgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkITsKCSAg ICBnb3RvIFJPT1RDRVJUX0VSUk9SOwoJfQoKCSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmN0b3J5 CglteSAkdGVtcGRpciA9IHRlbXBkaXIoIENMRUFOVVAgPT4gMSApOwoKCSMgRXh0cmFjdCB0aGUg Q0EgY2VydGlmaWNhdGUgZnJvbSB0aGUgZmlsZQoJbXkgJHBpZCA9IG9wZW4oT1BFTlNTTCwgInwt Iik7CgkkU0lHe0FMUk19ID0gc3ViIHsgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnYnJva2Vu IHBpcGUnfTsgZ290byBST09UQ0VSVF9FUlJPUjt9OwoJaWYgKCRwaWQpIHsJIyBwYXJlbnQKCSAg ICBpZiAoJGNnaXBhcmFtc3snUDEyX1BBU1MnfSBuZSAnJykgewoJCXByaW50IE9QRU5TU0wgIiRj Z2lwYXJhbXN7J1AxMl9QQVNTJ31cbiI7CgkgICAgfQoJICAgIGNsb3NlIChPUEVOU1NMKTsKCSAg ICBpZiAoJD8pIHsKCQkkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnb3BlbnNzbCBwcm9kdWNl ZCBhbiBlcnJvcid9OiAkPyI7CgkJdW5saW5rICgkZmlsZW5hbWUpOwoJCWdvdG8gUk9PVENFUlRf RVJST1I7CgkgICAgfQoJfSBlbHNlIHsJIyBjaGlsZAoJICAgIHVubGVzcyAoZXhlYyAoJy91c3Iv YmluL29wZW5zc2wnLCAncGtjczEyJywgJy1jYWNlcnRzJywgJy1ub2tleXMnLAoJCSAgICAnLWlu JywgJGZpbGVuYW1lLAoJCSAgICAnLW91dCcsICIkdGVtcGRpci9jYWNlcnQucGVtIikpIHsKCQkk ZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnY2FudCBzdGFydCBvcGVuc3NsJ306ICQhIjsKCQl1 bmxpbmsgKCRmaWxlbmFtZSk7CgkJZ290byBST09UQ0VSVF9FUlJPUjsKCSAgICB9Cgl9CgoJIyBF eHRyYWN0IHRoZSBIb3N0IGNlcnRpZmljYXRlIGZyb20gdGhlIGZpbGUKCSRwaWQgPSBvcGVuKE9Q RU5TU0wsICJ8LSIpOwoJJFNJR3tBTFJNfSA9IHN1YiB7ICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6 dHJ7J2Jyb2tlbiBwaXBlJ307IGdvdG8gUk9PVENFUlRfRVJST1I7fTsKCWlmICgkcGlkKSB7CSMg cGFyZW50CgkgICAgaWYgKCRjZ2lwYXJhbXN7J1AxMl9QQVNTJ30gbmUgJycpIHsKCQlwcmludCBP UEVOU1NMICIkY2dpcGFyYW1zeydQMTJfUEFTUyd9XG4iOwoJICAgIH0KCSAgICBjbG9zZSAoT1BF TlNTTCk7CgkgICAgaWYgKCQ/KSB7CgkJJGVycm9ybWVzc2FnZSA9ICIkTGFuZzo6dHJ7J29wZW5z c2wgcHJvZHVjZWQgYW4gZXJyb3InfTogJD8iOwoJCXVubGluayAoJGZpbGVuYW1lKTsKCQlnb3Rv IFJPT1RDRVJUX0VSUk9SOwoJICAgIH0KCX0gZWxzZSB7CSMgY2hpbGQKCSAgICB1bmxlc3MgKGV4 ZWMgKCcvdXNyL2Jpbi9vcGVuc3NsJywgJ3BrY3MxMicsICctY2xjZXJ0cycsICctbm9rZXlzJywK CQkgICAgJy1pbicsICRmaWxlbmFtZSwKCQkgICAgJy1vdXQnLCAiJHRlbXBkaXIvaG9zdGNlcnQu cGVtIikpIHsKCQkkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnY2FudCBzdGFydCBvcGVuc3Ns J306ICQhIjsKCQl1bmxpbmsgKCRmaWxlbmFtZSk7CgkJZ290byBST09UQ0VSVF9FUlJPUjsKCSAg ICB9Cgl9CgoJIyBFeHRyYWN0IHRoZSBIb3N0IGtleSBmcm9tIHRoZSBmaWxlCgkkcGlkID0gb3Bl bihPUEVOU1NMLCAifC0iKTsKCSRTSUd7QUxSTX0gPSBzdWIgeyAkZXJyb3JtZXNzYWdlID0gJExh bmc6OnRyeydicm9rZW4gcGlwZSd9OyBnb3RvIFJPT1RDRVJUX0VSUk9SO307CglpZiAoJHBpZCkg ewkjIHBhcmVudAoJICAgIGlmICgkY2dpcGFyYW1zeydQMTJfUEFTUyd9IG5lICcnKSB7CgkJcHJp bnQgT1BFTlNTTCAiJGNnaXBhcmFtc3snUDEyX1BBU1MnfVxuIjsKCSAgICB9CgkgICAgY2xvc2Ug KE9QRU5TU0wpOwoJICAgIGlmICgkPykgewoJCSRlcnJvcm1lc3NhZ2UgPSAiJExhbmc6OnRyeydv cGVuc3NsIHByb2R1Y2VkIGFuIGVycm9yJ306ICQ/IjsKCQl1bmxpbmsgKCRmaWxlbmFtZSk7CgkJ Z290byBST09UQ0VSVF9FUlJPUjsKCSAgICB9Cgl9IGVsc2UgewkjIGNoaWxkCgkgICAgdW5sZXNz IChleGVjICgnL3Vzci9iaW4vb3BlbnNzbCcsICdwa2NzMTInLCAnLW5vY2VydHMnLAoJCSAgICAn LW5vZGVzJywKCQkgICAgJy1pbicsICRmaWxlbmFtZSwKCQkgICAgJy1vdXQnLCAiJHRlbXBkaXIv c2VydmVya2V5LnBlbSIpKSB7CgkJJGVycm9ybWVzc2FnZSA9ICIkTGFuZzo6dHJ7J2NhbnQgc3Rh cnQgb3BlbnNzbCd9OiAkISI7CgkJdW5saW5rICgkZmlsZW5hbWUpOwoJCWdvdG8gUk9PVENFUlRf RVJST1I7CgkgICAgfQoJfQoKCW1vdmUoIiR0ZW1wZGlyL2NhY2VydC5wZW0iLCAiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vY2EvY2FjZXJ0LnBlbSIpOwoJaWYgKCQ/IG5lIDApIHsKCSAgICAkZXJy b3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnY2VydGlmaWNhdGUgZmlsZSBtb3ZlIGZhaWxlZCd9OiAk ISI7CgkgICAgdW5saW5rICgkZmlsZW5hbWUpOwoJICAgIHVubGluayAoIiR7R2VuZXJhbDo6c3dy b290fS9vdnBuL2NhL2NhY2VydC5wZW0iKTsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9jZXJ0cy9zZXJ2ZXJjZXJ0LnBlbSIpOwoJICAgIHVubGluayAoIiR7R2VuZXJhbDo6 c3dyb290fS9vdnBuL2NlcnRzL3NlcnZlcmtleS5wZW0iKTsKCSAgICBnb3RvIFJPT1RDRVJUX0VS Uk9SOwogICAgICAgIH0KCgltb3ZlKCIkdGVtcGRpci9ob3N0Y2VydC5wZW0iLCAiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vY2VydHMvc2VydmVyY2VydC5wZW0iKTsKCWlmICgkPyBuZSAwKSB7Cgkg ICAgJGVycm9ybWVzc2FnZSA9ICIkTGFuZzo6dHJ7J2NlcnRpZmljYXRlIGZpbGUgbW92ZSBmYWls ZWQnfTogJCEiOwoJICAgIHVubGluayAoJGZpbGVuYW1lKTsKCSAgICB1bmxpbmsgKCIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIik7CgkgICAgdW5saW5rICgiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vY2VydHMvc2VydmVyY2VydC5wZW0iKTsKCSAgICB1bmxpbmsgKCIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy9zZXJ2ZXJrZXkucGVtIik7CgkgICAgZ290byBST09U Q0VSVF9FUlJPUjsKICAgICAgICB9CgoJbW92ZSgiJHRlbXBkaXIvc2VydmVya2V5LnBlbSIsICIk e0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy9zZXJ2ZXJrZXkucGVtIik7CglpZiAoJD8gbmUg MCkgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAiJExhbmc6OnRyeydjZXJ0aWZpY2F0ZSBmaWxlIG1v dmUgZmFpbGVkJ306ICQhIjsKCSAgICB1bmxpbmsgKCRmaWxlbmFtZSk7CgkgICAgdW5saW5rICgi JHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvY2FjZXJ0LnBlbSIpOwoJICAgIHVubGluayAoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3NlcnZlcmNlcnQucGVtIik7CgkgICAgdW5saW5r ICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvc2VydmVya2V5LnBlbSIpOwoJICAgIGdv dG8gUk9PVENFUlRfRVJST1I7CiAgICAgICAgfQoKCWdvdG8gUk9PVENFUlRfU1VDQ0VTUzsKCiAg ICB9IGVsc2lmICgkY2dpcGFyYW1zeydST09UQ0VSVF9DT1VOVFJZJ30gbmUgJycpIHsKCgkjIFZh bGlkYXRlIGlucHV0IHNpbmNlIHRoZSBmb3JtIHdhcyBzdWJtaXR0ZWQKCWlmICgkY2dpcGFyYW1z eydST09UQ0VSVF9PUkdBTklaQVRJT04nfSBlcSAnJyl7CgkgICAgJGVycm9ybWVzc2FnZSA9ICRM YW5nOjp0cnsnb3JnYW5pemF0aW9uIGNhbnQgYmUgZW1wdHknfTsKCSAgICBnb3RvIFJPT1RDRVJU X0VSUk9SOwoJfQoJaWYgKGxlbmd0aCgkY2dpcGFyYW1zeydST09UQ0VSVF9PUkdBTklaQVRJT04n fSkgPjYwKSB7CgkgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnb3JnYW5pemF0aW9uIHRv byBsb25nJ307CgkgICAgZ290byBST09UQ0VSVF9FUlJPUjsKCX0KCWlmICgkY2dpcGFyYW1zeydS T09UQ0VSVF9PUkdBTklaQVRJT04nfSAhfiAvXlthLXpBLVowLTkgLFwuXC1fXSokLykgewoJICAg ICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIG9yZ2FuaXphdGlv bid9OwoJICAgIGdvdG8gUk9PVENFUlRfRVJST1I7Cgl9CglpZiAoJGNnaXBhcmFtc3snUk9PVENF UlRfSE9TVE5BTUUnfSBlcSAnJyl7CgkgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaG9z dG5hbWUgY2FudCBiZSBlbXB0eSd9OwoJICAgIGdvdG8gUk9PVENFUlRfRVJST1I7Cgl9Cgl1bmxl c3MgKCZHZW5lcmFsOjp2YWxpZGZxZG4oJGNnaXBhcmFtc3snUk9PVENFUlRfSE9TVE5BTUUnfSkg fHwgJkdlbmVyYWw6OnZhbGlkaXAoJGNnaXBhcmFtc3snUk9PVENFUlRfSE9TVE5BTUUnfSkpIHsK CSAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGlucHV0IGZvciBob3N0bmFt ZSd9OwoJICAgIGdvdG8gUk9PVENFUlRfRVJST1I7Cgl9CglpZiAoJGNnaXBhcmFtc3snUk9PVENF UlRfRU1BSUwnfSBuZSAnJyAmJiAoISAmR2VuZXJhbDo6dmFsaWRlbWFpbCgkY2dpcGFyYW1zeydS T09UQ0VSVF9FTUFJTCd9KSkpIHsKCSAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZh bGlkIGlucHV0IGZvciBlLW1haWwgYWRkcmVzcyd9OwoJICAgIGdvdG8gUk9PVENFUlRfRVJST1I7 Cgl9CglpZiAobGVuZ3RoKCRjZ2lwYXJhbXN7J1JPT1RDRVJUX0VNQUlMJ30pID4gNDApIHsKCSAg ICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydlLW1haWwgYWRkcmVzcyB0b28gbG9uZyd9OwoJ ICAgIGdvdG8gUk9PVENFUlRfRVJST1I7Cgl9CglpZiAoJGNnaXBhcmFtc3snUk9PVENFUlRfT1Un fSBuZSAnJyAmJiAkY2dpcGFyYW1zeydST09UQ0VSVF9PVSd9ICF+IC9eW2EtekEtWjAtOSAsXC5c LV9dKiQvKSB7CgkgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaW52YWxpZCBpbnB1dCBm b3IgZGVwYXJ0bWVudCd9OwoJICAgIGdvdG8gUk9PVENFUlRfRVJST1I7Cgl9CglpZiAoJGNnaXBh cmFtc3snUk9PVENFUlRfQ0lUWSd9IG5lICcnICYmICRjZ2lwYXJhbXN7J1JPT1RDRVJUX0NJVFkn fSAhfiAvXlthLXpBLVowLTkgLFwuXC1fXSokLykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFu Zzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIGNpdHknfTsKCSAgICBnb3RvIFJPT1RDRVJUX0VSUk9S OwoJfQoJaWYgKCRjZ2lwYXJhbXN7J1JPT1RDRVJUX1NUQVRFJ30gbmUgJycgJiYgJGNnaXBhcmFt c3snUk9PVENFUlRfU1RBVEUnfSAhfiAvXlthLXpBLVowLTkgLFwuXC1fXSokLykgewoJICAgICRl cnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIHN0YXRlIG9yIHByb3Zp bmNlJ307CgkgICAgZ290byBST09UQ0VSVF9FUlJPUjsKCX0KCWlmICgkY2dpcGFyYW1zeydST09U Q0VSVF9DT1VOVFJZJ30gIX4gL15bQS1aXSokLykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFu Zzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIGNvdW50cnknfTsKCSAgICBnb3RvIFJPT1RDRVJUX0VS Uk9SOwoJfQoKCSMgQ29weSB0aGUgY2dpc2V0dGluZ3MgdG8gdnBuc2V0dGluZ3MgYW5kIHNhdmUg dGhlIGNvbmZpZ2ZpbGUKCSR2cG5zZXR0aW5nc3snUk9PVENFUlRfT1JHQU5JWkFUSU9OJ30JPSAk Y2dpcGFyYW1zeydST09UQ0VSVF9PUkdBTklaQVRJT04nfTsKCSR2cG5zZXR0aW5nc3snUk9PVENF UlRfSE9TVE5BTUUnfQk9ICRjZ2lwYXJhbXN7J1JPT1RDRVJUX0hPU1ROQU1FJ307CgkkdnBuc2V0 dGluZ3N7J1JPT1RDRVJUX0VNQUlMJ30JIAk9ICRjZ2lwYXJhbXN7J1JPT1RDRVJUX0VNQUlMJ307 CgkkdnBuc2V0dGluZ3N7J1JPT1RDRVJUX09VJ30JCT0gJGNnaXBhcmFtc3snUk9PVENFUlRfT1Un fTsKCSR2cG5zZXR0aW5nc3snUk9PVENFUlRfQ0lUWSd9CQk9ICRjZ2lwYXJhbXN7J1JPT1RDRVJU X0NJVFknfTsKCSR2cG5zZXR0aW5nc3snUk9PVENFUlRfU1RBVEUnfQkJPSAkY2dpcGFyYW1zeydS T09UQ0VSVF9TVEFURSd9OwoJJHZwbnNldHRpbmdzeydST09UQ0VSVF9DT1VOVFJZJ30JPSAkY2dp cGFyYW1zeydST09UQ0VSVF9DT1VOVFJZJ307CgkmR2VuZXJhbDo6d3JpdGVoYXNoKCIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwldnBuc2V0dGluZ3MpOwoKCSMgUmVwbGFjZSBl bXB0eSBzdHJpbmdzIHdpdGggYSAuCgkobXkgJG91ID0gJGNnaXBhcmFtc3snUk9PVENFUlRfT1Un fSkgPX4gcy9eXHMqJC9cLi87CgkobXkgJGNpdHkgPSAkY2dpcGFyYW1zeydST09UQ0VSVF9DSVRZ J30pID1+IHMvXlxzKiQvXC4vOwoJKG15ICRzdGF0ZSA9ICRjZ2lwYXJhbXN7J1JPT1RDRVJUX1NU QVRFJ30pID1+IHMvXlxzKiQvXC4vOwoKCSMgcmVmcmVzaAoJI3N5c3RlbSAoJy9iaW4vdG91Y2gn LCAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vZ2VuY2Fub3ciKTsKCQoJIyBDcmVhdGUgdGhlIENB IGNlcnRpZmljYXRlCglteSAkcGlkID0gb3BlbihPUEVOU1NMLCAifC0iKTsKCSRTSUd7QUxSTX0g PSBzdWIgeyAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydicm9rZW4gcGlwZSd9OyBnb3RvIFJP T1RDRVJUX0VSUk9SO307CglpZiAoJHBpZCkgewkjIHBhcmVudAoJICAgIHByaW50IE9QRU5TU0wg IiRjZ2lwYXJhbXN7J1JPT1RDRVJUX0NPVU5UUlknfVxuIjsKCSAgICBwcmludCBPUEVOU1NMICIk c3RhdGVcbiI7CgkgICAgcHJpbnQgT1BFTlNTTCAiJGNpdHlcbiI7CgkgICAgcHJpbnQgT1BFTlNT TCAiJGNnaXBhcmFtc3snUk9PVENFUlRfT1JHQU5JWkFUSU9OJ31cbiI7CgkgICAgcHJpbnQgT1BF TlNTTCAiJG91XG4iOwoJICAgIHByaW50IE9QRU5TU0wgIiRjZ2lwYXJhbXN7J1JPT1RDRVJUX09S R0FOSVpBVElPTid9IENBXG4iOwoJICAgIHByaW50IE9QRU5TU0wgIiRjZ2lwYXJhbXN7J1JPT1RD RVJUX0VNQUlMJ31cbiI7CgkgICAgY2xvc2UgKE9QRU5TU0wpOwoJICAgIGlmICgkPykgewoJCSRl cnJvcm1lc3NhZ2UgPSAiJExhbmc6OnRyeydvcGVuc3NsIHByb2R1Y2VkIGFuIGVycm9yJ306ICQ/ IjsKCQl1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWtleS5wZW0iKTsKCQl1 bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIik7CgkJZ290byBS T09UQ0VSVF9FUlJPUjsKCSAgICB9Cgl9IGVsc2UgewkjIGNoaWxkCgkgICAgdW5sZXNzIChleGVj ICgnL3Vzci9iaW4vb3BlbnNzbCcsICdyZXEnLCAnLXg1MDknLCAnLW5vZGVzJywgJy1yYW5kJywg Jy9wcm9jL2ludGVycnVwdHM6L3Byb2MvbmV0L3J0X2NhY2hlJywKCQkJJy1kYXlzJywgJzk5OTk5 OScsICctbmV3a2V5JywgJ3JzYToyMDQ4JywKCQkJJy1rZXlvdXQnLCAiJHtHZW5lcmFsOjpzd3Jv b3R9L292cG4vY2EvY2FrZXkucGVtIiwKCQkJJy1vdXQnLCAiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vY2EvY2FjZXJ0LnBlbSIsCgkJCSctY29uZmlnJywiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4v b3BlbnNzbC9vdnBuLmNuZiIpKSB7CgkJJGVycm9ybWVzc2FnZSA9ICIkTGFuZzo6dHJ7J2NhbnQg c3RhcnQgb3BlbnNzbCd9OiAkISI7CgkJZ290byBST09UQ0VSVF9FUlJPUjsKCSAgICB9Cgl9CgoJ IyBDcmVhdGUgdGhlIEhvc3QgY2VydGlmaWNhdGUgcmVxdWVzdAoJJHBpZCA9IG9wZW4oT1BFTlNT TCwgInwtIik7CgkkU0lHe0FMUk19ID0gc3ViIHsgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsn YnJva2VuIHBpcGUnfTsgZ290byBST09UQ0VSVF9FUlJPUjt9OwoJaWYgKCRwaWQpIHsJIyBwYXJl bnQKCSAgICBwcmludCBPUEVOU1NMICIkY2dpcGFyYW1zeydST09UQ0VSVF9DT1VOVFJZJ31cbiI7 CgkgICAgcHJpbnQgT1BFTlNTTCAiJHN0YXRlXG4iOwoJICAgIHByaW50IE9QRU5TU0wgIiRjaXR5 XG4iOwoJICAgIHByaW50IE9QRU5TU0wgIiRjZ2lwYXJhbXN7J1JPT1RDRVJUX09SR0FOSVpBVElP Tid9XG4iOwoJICAgIHByaW50IE9QRU5TU0wgIiRvdVxuIjsKCSAgICBwcmludCBPUEVOU1NMICIk Y2dpcGFyYW1zeydST09UQ0VSVF9IT1NUTkFNRSd9XG4iOwoJICAgIHByaW50IE9QRU5TU0wgIiRj Z2lwYXJhbXN7J1JPT1RDRVJUX0VNQUlMJ31cbiI7CgkgICAgcHJpbnQgT1BFTlNTTCAiLlxuIjsK CSAgICBwcmludCBPUEVOU1NMICIuXG4iOwoJICAgIGNsb3NlIChPUEVOU1NMKTsKCSAgICBpZiAo JD8pIHsKCQkkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnb3BlbnNzbCBwcm9kdWNlZCBhbiBl cnJvcid9OiAkPyI7CgkJdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvc2Vy dmVya2V5LnBlbSIpOwoJCXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3Nl cnZlcnJlcS5wZW0iKTsKCQlnb3RvIFJPT1RDRVJUX0VSUk9SOwoJICAgIH0KCX0gZWxzZSB7CSMg Y2hpbGQKCSAgICB1bmxlc3MgKGV4ZWMgKCcvdXNyL2Jpbi9vcGVuc3NsJywgJ3JlcScsICctbm9k ZXMnLCAnLXJhbmQnLCAnL3Byb2MvaW50ZXJydXB0czovcHJvYy9uZXQvcnRfY2FjaGUnLAoJCQkn LW5ld2tleScsICdyc2E6MTAyNCcsCgkJCScta2V5b3V0JywgIiR7R2VuZXJhbDo6c3dyb290fS9v dnBuL2NlcnRzL3NlcnZlcmtleS5wZW0iLAoJCQknLW91dCcsICIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9jZXJ0cy9zZXJ2ZXJyZXEucGVtIiwKCQkJJy1leHRlbnNpb25zJywgJ3NlcnZlcicsCgkJ CSctY29uZmlnJywgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL29wZW5zc2wvb3Zwbi5jbmYiICkp IHsKCQkkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnY2FudCBzdGFydCBvcGVuc3NsJ306ICQh IjsKCQl1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy9zZXJ2ZXJrZXkucGVt Iik7CgkJdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvc2VydmVycmVxLnBl bSIpOwoJCXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhL2Nha2V5LnBlbSIpOwoJ CXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhL2NhY2VydC5wZW0iKTsKCQlnb3Rv IFJPT1RDRVJUX0VSUk9SOwoJICAgIH0KCX0KCQoJIyBTaWduIHRoZSBob3N0IGNlcnRpZmljYXRl IHJlcXVlc3QKCXN5c3RlbSgnL3Vzci9iaW4vb3BlbnNzbCcsICdjYScsICctZGF5cycsICc5OTk5 OTknLAoJCSctYmF0Y2gnLCAnLW5vdGV4dCcsCgkJJy1pbicsICAiJHtHZW5lcmFsOjpzd3Jvb3R9 L292cG4vY2VydHMvc2VydmVycmVxLnBlbSIsCgkJJy1vdXQnLCAiJHtHZW5lcmFsOjpzd3Jvb3R9 L292cG4vY2VydHMvc2VydmVyY2VydC5wZW0iLAoJCSctZXh0ZW5zaW9ucycsICdzZXJ2ZXInLAoJ CSctY29uZmlnJywgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL29wZW5zc2wvb3Zwbi5jbmYiKTsK CWlmICgkPykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAiJExhbmc6OnRyeydvcGVuc3NsIHByb2R1 Y2VkIGFuIGVycm9yJ306ICQ/IjsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jYS9jYWtleS5wZW0iKTsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j YS9jYWNlcnQucGVtIik7CgkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vc2Vy dmVya2V5LnBlbSIpOwoJICAgIHVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRz L3NlcnZlcnJlcS5wZW0iKTsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j ZXJ0cy9zZXJ2ZXJjZXJ0LnBlbSIpOwoJICAgICZuZXdjbGVhbnNzbGRhdGFiYXNlKCk7CgkgICAg Z290byBST09UQ0VSVF9FUlJPUjsKCX0gZWxzZSB7CgkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpz d3Jvb3R9L292cG4vY2VydHMvc2VydmVycmVxLnBlbSIpOwoJICAgICZkZWxldGViYWNrdXBjZXJ0 KCk7Cgl9CgoJIyBDcmVhdGUgYW4gZW1wdHkgQ1JMCglzeXN0ZW0oJy91c3IvYmluL29wZW5zc2wn LCAnY2EnLCAnLWdlbmNybCcsCgkJJy1vdXQnLCAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY3Js cy9jYWNybC5wZW0iLAoJCSctY29uZmlnJywgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL29wZW5z c2wvb3Zwbi5jbmYiICk7CglpZiAoJD8pIHsKCSAgICAkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0 cnsnb3BlbnNzbCBwcm9kdWNlZCBhbiBlcnJvcid9OiAkPyI7CgkgICAgdW5saW5rICgiJHtHZW5l cmFsOjpzd3Jvb3R9L292cG4vY2VydHMvc2VydmVya2V5LnBlbSIpOwoJICAgIHVubGluayAoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3NlcnZlcmNlcnQucGVtIik7CgkgICAgdW5saW5r ICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvY2FjZXJ0LnBlbSIpOwoJICAgIHVubGluayAo IiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NybHMvY2FjcmwucGVtIik7CSAgICAKCSAgICAmY2xl YW5zc2xkYXRhYmFzZSgpOwoJICAgIGdvdG8gUk9PVENFUlRfRVJST1I7CiMJfSBlbHNlIHsKIwkg ICAgJmNsZWFuc3NsZGF0YWJhc2UoKTsKCX0KCSMgQ3JlYXRlIERpZmZpZSBIZWxsbWFubiBQYXJh bWV0ZXIKCXN5c3RlbSgnL3Vzci9iaW4vb3BlbnNzbCcsICdkaHBhcmFtJywgJy1yYW5kJywgJy9w cm9jL2ludGVycnVwdHM6L3Byb2MvbmV0L3J0X2NhY2hlJywKCSAgICAgICAnLW91dCcsICIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9kaDEwMjQucGVtIiwKCSAgICAgICAnMTAyNCcgKTsKCWlm ICgkPykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAiJExhbmc6OnRyeydvcGVuc3NsIHByb2R1Y2Vk IGFuIGVycm9yJ306ICQ/IjsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j ZXJ0cy9zZXJ2ZXJrZXkucGVtIik7CgkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vY2VydHMvc2VydmVyY2VydC5wZW0iKTsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9jYS9jYWNlcnQucGVtIik7CgkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9 L292cG4vY3Jscy9jYWNybC5wZW0iKTsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9jYS9kaDEwMjQucGVtIik7CgkgICAgJmNsZWFuc3NsZGF0YWJhc2UoKTsKCSAgICBnb3Rv IFJPT1RDRVJUX0VSUk9SOwojCX0gZWxzZSB7CiMJICAgICZjbGVhbnNzbGRhdGFiYXNlKCk7Cgl9 ICAgICAgIAoJZ290byBST09UQ0VSVF9TVUNDRVNTOwogICAgfQogICAgUk9PVENFUlRfRVJST1I6 CiAgICBpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gbmUgJycpIHsKCSZIZWFkZXI6OnNob3dodHRw aGVhZGVycygpOwoJJkhlYWRlcjo6b3BlbnBhZ2UoJExhbmc6OnRyeyd2cG4gY29uZmlndXJhdGlv biBtYWluJ30sIDEsICcnKTsKCSZIZWFkZXI6Om9wZW5iaWdib3goJzEwMCUnLCAnTEVGVCcsICcn LCAnJyk7CglpZiAoJGVycm9ybWVzc2FnZSkgewoJICAgICZIZWFkZXI6Om9wZW5ib3goJzEwMCUn LCAnTEVGVCcsICRMYW5nOjp0cnsnZXJyb3IgbWVzc2FnZXMnfSk7CgkgICAgcHJpbnQgIjxjbGFz cyBuYW1lPSdiYXNlJz4kZXJyb3JtZXNzYWdlIjsKCSAgICBwcmludCAiJm5ic3A7PC9jbGFzcz4i OwoJICAgICZIZWFkZXI6OmNsb3NlYm94KCk7Cgl9CgkmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywg J0xFRlQnLCAiJExhbmc6OnRyeydnZW5lcmF0ZSByb290L2hvc3QgY2VydGlmaWNhdGVzJ306Iik7 CglwcmludCA8PEVORAoJPGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9y bS1kYXRhJz4KCTx0YWJsZSB3aWR0aD0nMTAwJScgYm9yZGVyPScwJyBjZWxsc3BhY2luZz0nMScg Y2VsbHBhZGRpbmc9JzAnPgoJPHRyPjx0ZCB3aWR0aD0nMzAlJyBjbGFzcz0nYmFzZSc+JExhbmc6 OnRyeydvcmdhbml6YXRpb24gbmFtZSd9OjwvdGQ+CgkgICAgPHRkIHdpZHRoPSczNSUnIGNsYXNz PSdiYXNlJyBub3dyYXA9J25vd3JhcCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J1JPT1RDRVJU X09SR0FOSVpBVElPTicgdmFsdWU9JyRjZ2lwYXJhbXN7J1JPT1RDRVJUX09SR0FOSVpBVElPTid9 JyBzaXplPSczMicgLz48L3RkPgoJICAgIDx0ZCB3aWR0aD0nMzUlJyBjb2xzcGFuPScyJz4mbmJz cDs8L3RkPjwvdHI+Cgk8dHI+PHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J2lwZmlyZXMgaG9z dG5hbWUnfTo8L3RkPgoJICAgIDx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAnPjxpbnB1 dCB0eXBlPSd0ZXh0JyBuYW1lPSdST09UQ0VSVF9IT1NUTkFNRScgdmFsdWU9JyRjZ2lwYXJhbXN7 J1JPT1RDRVJUX0hPU1ROQU1FJ30nIHNpemU9JzMyJyAvPjwvdGQ+CgkgICAgPHRkIGNvbHNwYW49 JzInPiZuYnNwOzwvdGQ+PC90cj4KCTx0cj48dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsneW91 ciBlLW1haWwnfTombmJzcDs8aW1nIHNyYz0nL2Jsb2IuZ2lmJyBhbHQnKicgLz48L3RkPgoJICAg IDx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAnPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1l PSdST09UQ0VSVF9FTUFJTCcgdmFsdWU9JyRjZ2lwYXJhbXN7J1JPT1RDRVJUX0VNQUlMJ30nIHNp emU9JzMyJyAvPjwvdGQ+CgkgICAgPHRkIGNvbHNwYW49JzInPiZuYnNwOzwvdGQ+PC90cj4KCTx0 cj48dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsneW91ciBkZXBhcnRtZW50J306Jm5ic3A7PGlt ZyBzcmM9Jy9ibG9iLmdpZicgYWx0JyonIC8+PC90ZD4KCSAgICA8dGQgY2xhc3M9J2Jhc2UnIG5v d3JhcD0nbm93cmFwJz48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nUk9PVENFUlRfT1UnIHZhbHVl PSckY2dpcGFyYW1zeydST09UQ0VSVF9PVSd9JyBzaXplPSczMicgLz48L3RkPgoJICAgIDx0ZCBj b2xzcGFuPScyJz4mbmJzcDs8L3RkPjwvdHI+Cgk8dHI+PHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6 dHJ7J2NpdHknfTombmJzcDs8aW1nIHNyYz0nL2Jsb2IuZ2lmJyBhbHQnKicgLz48L3RkPgoJICAg IDx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAnPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1l PSdST09UQ0VSVF9DSVRZJyB2YWx1ZT0nJGNnaXBhcmFtc3snUk9PVENFUlRfQ0lUWSd9JyBzaXpl PSczMicgLz48L3RkPgoJICAgIDx0ZCBjb2xzcGFuPScyJz4mbmJzcDs8L3RkPjwvdHI+Cgk8dHI+ PHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J3N0YXRlIG9yIHByb3ZpbmNlJ306Jm5ic3A7PGlt ZyBzcmM9Jy9ibG9iLmdpZicgYWx0JyonIC8+PC90ZD4KCSAgICA8dGQgY2xhc3M9J2Jhc2UnIG5v d3JhcD0nbm93cmFwJz48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nUk9PVENFUlRfU1RBVEUnIHZh bHVlPSckY2dpcGFyYW1zeydST09UQ0VSVF9TVEFURSd9JyBzaXplPSczMicgLz48L3RkPgoJICAg IDx0ZCBjb2xzcGFuPScyJz4mbmJzcDs8L3RkPjwvdHI+Cgk8dHI+PHRkIGNsYXNzPSdiYXNlJz4k TGFuZzo6dHJ7J2NvdW50cnknfTo8L3RkPgoJICAgIDx0ZCBjbGFzcz0nYmFzZSc+PHNlbGVjdCBu YW1lPSdST09UQ0VSVF9DT1VOVFJZJz4gCgpFTkQKCTsKCWZvcmVhY2ggbXkgJGNvdW50cnkgKHNv cnQga2V5cyAle0NvdW50cmllczo6Y291bnRyaWVzfSkgewoJICAgIHByaW50ICI8b3B0aW9uIHZh bHVlPSckQ291bnRyaWVzOjpjb3VudHJpZXN7JGNvdW50cnl9JyI7CgkgICAgaWYgKCAkQ291bnRy aWVzOjpjb3VudHJpZXN7JGNvdW50cnl9IGVxICRjZ2lwYXJhbXN7J1JPT1RDRVJUX0NPVU5UUlkn fSApIHsKCQlwcmludCAiIHNlbGVjdGVkPSdzZWxlY3RlZCciOwoJICAgIH0KCSAgICBwcmludCAi PiRjb3VudHJ5PC9vcHRpb24+IjsKCX0KCXByaW50IDw8RU5ECgkgICAgPC9zZWxlY3Q+PC90ZD4K CSAgICA8dGQgY29sc3Bhbj0nMic+Jm5ic3A7PC90ZD48L3RyPgoJPHRyPjx0ZD4mbmJzcDs8L3Rk PgoJICAgIDx0ZD48aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdBQ1RJT04nIHZhbHVlPSckTGFu Zzo6dHJ7J2dlbmVyYXRlIHJvb3QvaG9zdCBjZXJ0aWZpY2F0ZXMnfScgLz48L3RkPgoJICAgIDx0 ZD4mbmJzcDs8L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+IAoJPHRyPjx0ZCBjbGFzcz0nYmFzZScg Y29sc3Bhbj0nNCcgYWxpZ249J2xlZnQnPgoJICAgIDxpbWcgc3JjPScvYmxvYi5naWYnIHZhbGln bj0ndG9wJyBhbHQ9JyonIC8+Jm5ic3A7JExhbmc6OnRyeyd0aGlzIGZpZWxkIG1heSBiZSBibGFu ayd9PC90ZD48L3RyPgoJPHRyPjx0ZCBjbGFzcz0nYmFzZScgY29sc3Bhbj0nNCcgYWxpZ249J2xl ZnQnPgoJICAgIDxiPjxmb250IGNvbG9yPScke0hlYWRlcjo6Y29sb3VycmVkfSc+JExhbmc6OnRy eydjYXBzd2FybmluZyd9PC9mb250PjwvYj46IAoJICAgICRMYW5nOjp0cnsnZ2VuZXJhdGluZyB0 aGUgcm9vdCBhbmQgaG9zdCBjZXJ0aWZpY2F0ZXMgbWF5IHRha2UgYSBsb25nIHRpbWUuIGl0IGNh biB0YWtlIHVwIHRvIHNldmVyYWwgbWludXRlcyBvbiBvbGRlciBoYXJkd2FyZS4gcGxlYXNlIGJl IHBhdGllbnQnfQoJPC90ZD48L3RyPgoJPHRyPjx0ZCBjb2xzcGFuPSc0JyBiZ2NvbG9yPScjMDAw MDAwJz48aW1nIHNyYz0nL2ltYWdlcy9udWxsLmdpZicgd2lkdGg9JzEnIGhlaWdodD0nMScgYm9y ZGVyPScwJyAvPjwvdGQ+PC90cj4KCTx0cj48dGQgY2xhc3M9J2Jhc2UnIG5vd3JhcD0nbm93cmFw Jz4kTGFuZzo6dHJ7J3VwbG9hZCBwMTIgZmlsZSd9OjwvdGQ+CgkgICAgPHRkIG5vd3JhcD0nbm93 cmFwJz48aW5wdXQgdHlwZT0nZmlsZScgbmFtZT0nRkgnIHNpemU9JzMyJz48L3RkPgoJICAgIDx0 ZCBjb2xzcGFuPScyJz4mbmJzcDs8L3RkPjwvdHI+Cgk8dHI+PHRkIGNsYXNzPSdiYXNlJz4kTGFu Zzo6dHJ7J3BrY3MxMiBmaWxlIHBhc3N3b3JkJ306Jm5ic3A7PGltZyBzcmM9Jy9ibG9iLmdpZicg YWx0PScqJyA+PC90ZD4KCSAgICA8dGQgY2xhc3M9J2Jhc2UnIG5vd3JhcD0nbm93cmFwJz48aW5w dXQgdHlwZT0ncGFzc3dvcmQnIG5hbWU9J1AxMl9QQVNTJyB2YWx1ZT0nJGNnaXBhcmFtc3snUDEy X1BBU1MnfScgc2l6ZT0nMzInIC8+PC90ZD4KICAgICAgICAgICAgPHRkIGNvbHNwYW49JzInPiZu YnNwOzwvdGQ+PC90cj4KCTx0cj48dGQ+Jm5ic3A7PC90ZD4KCSAgICA8dGQ+PGlucHV0IHR5cGU9 J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeyd1cGxvYWQgcDEyIGZpbGUn fScgLz48L3RkPgogICAgICAgICAgICA8dGQgY29sc3Bhbj0nMic+Jm5ic3A7PC90ZD48L3RyPgoJ PHRyPjx0ZCBjbGFzcz0nYmFzZScgY29sc3Bhbj0nNCcgYWxpZ249J2xlZnQnPgoJICAgIDxpbWcg c3JjPScvYmxvYi5naWYnIHZhbGlnbj0ndG9wJyBhbD0nKicgPiZuYnNwOyRMYW5nOjp0cnsndGhp cyBmaWVsZCBtYXkgYmUgYmxhbmsnfTwvdGQ+PC90cj4KCTwvZm9ybT48L3RhYmxlPgpFTkQKCTsK CSZIZWFkZXI6OmNsb3NlYm94KCk7CgoJJkhlYWRlcjo6Y2xvc2ViaWdib3goKTsKCSZIZWFkZXI6 OmNsb3NlcGFnZSgpOwogICAgICAgIGV4aXQoMCkKICAgIH0KCiAgICBST09UQ0VSVF9TVUNDRVNT OgogICAgc3lzdGVtICgiY2htb2QgNjAwICR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzL3Nl cnZlcmtleS5wZW0iKTsKIyAgICBpZiAoJHZwbnNldHRpbmdzeydFTkFCTEVEJ30gZXEgJ29uJyB8 fAojCSR2cG5zZXR0aW5nc3snRU5BQkxFX0JMVUUnfSBlcSAnb24nKSB7CiMJc3lzdGVtKCcvdXNy L2xvY2FsL2Jpbi9pcHNlY2N0cmwnLCAnUycpOwojICAgIH0KCiMjIwojIyMgRW5hYmxlL0Rpc2Fi bGUgY29ubmVjdGlvbgojIyMKCiMjIwojIG0uYS5kIG5ldDJuZXQKIyMjCgp9ZWxzaWYgKCRjZ2lw YXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsndG9nZ2xlIGVuYWJsZSBkaXNhYmxlJ30pIHsK ICAgIAogICAgJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0 aW5ncyIsIFwldnBuc2V0dGluZ3MpOwogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2Vu ZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hhc2gpOwojICAgIG15ICRu Mm5hY3RpdmUgPSAnJzsKICAgIG15ICRuMm5hY3RpdmUgPSBgL2Jpbi9wcyBheHxncmVwICRjb25m aWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXXxncmVwIC12IGdyZXB8YXdrIFwne3ByaW50IFwk MX1cJ2A7CiAgICAKICAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX0pIHsKCQlp ZiAoJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzBdIGVxICdvZmYnKSB7CgkJCSRjb25m aWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVswXSA9ICdvbic7CgkJCSZHZW5lcmFsOjp3cml0ZWhh c2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFz aCk7CgoJCQlpZiAoJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzNdIGVxICduZXQnKXsK ICAgICAgICAgICAgICAgICBzeXN0ZW0oJy91c3IvbG9jYWwvYmluL29wZW52cG5jdHJsJywgJy1z bjJuJywgJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdKTsKCQkJfQoJCX0gZWxzZSB7 CgoJCQkkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMF0gPSAnb2ZmJzsKCQkJJkdlbmVy YWw6OndyaXRlaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9vdnBuY29uZmlnIiwg XCVjb25maWdoYXNoKTsKCgkJCWlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bM10g ZXEgJ25ldCcpewogICAgICAgICAgICAgICAgICAgIGlmICgkbjJuYWN0aXZlIG5lICcnKXsJCQkJ CgkJCQkJCXN5c3RlbSgnL3Vzci9sb2NhbC9iaW4vb3BlbnZwbmN0cmwnLCAnLWtuMm4nLCAkY29u ZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMV0pOwoJCQkJCX0KIAoJCQl9IGVsc2UgewogICAJ ICAgICAgICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQga2V5J307CgkJCX0K ICAgICAgfQogIH0KCiMjIwojIyMgRG93bmxvYWQgT3BlblZQTiBjbGllbnQgcGFja2FnZQojIyMK Cgp9IGVsc2lmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J2RsIGNsaWVudCBh cmNoJ30pIHsKICAgICZHZW5lcmFsOjpyZWFkaGFzaCgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4v c2V0dGluZ3MiLCBcJXZwbnNldHRpbmdzKTsKICAgICZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIk e0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9vdnBuY29uZmlnIiwgXCVjb25maWdoYXNoKTsKICAgIG15 ICRmaWxlID0gJyc7CiAgICBteSAkY2xpZW50b3ZwbiA9ICcnOwogICAgbXkgQGZpbGVob2xkZXI7 CiAgICBteSAkdGVtcGRpciA9IHRlbXBkaXIoIENMRUFOVVAgPT4gMSApOwogICAgbXkgJHppcHBh dGggPSAiJHRlbXBkaXIvIjsKCiMjIwojIG0uYS5kIG5ldDJuZXQKIyMjCgppZiAoJGNvbmZpZ2hh c2h7JGNnaXBhcmFtc3snS0VZJ319WzNdIGVxICduZXQnKXsKICAgICAgICAKICAgICAgICBteSAk emlwbmFtZSA9ICIkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMV0tQ2xpZW50LnppcCI7 CiAgICAgICAgbXkgJHppcHBhdGhuYW1lID0gIiR6aXBwYXRoJHppcG5hbWUiOwogICAgICAgICRj bGllbnRvdnBuID0gIiRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXS5jb25mIjsgIAog ICAgICAgIG15IEBvdnN1Ym5ldHRlbXAgPSAgc3BsaXQoL1wuLywkY29uZmlnaGFzaHskY2dpcGFy YW1zeydLRVknfX1bMjddKTsKICAgICAgICBteSAkb3ZzdWJuZXQgPSAgIiRvdnN1Ym5ldHRlbXBb MF0uJG92c3VibmV0dGVtcFsxXS4kb3ZzdWJuZXR0ZW1wWzJdIjsKICAgICAgICBteSAkdHVubXR1 ID0gJyc7IAogICAgICAgIG15IEByZW1zdWJuZXQgPSBzcGxpdCgvXC8vLCRjb25maWdoYXNoeyRj Z2lwYXJhbXN7J0tFWSd9fVs4XSk7CiAgICAgICAgbXkgJG4ybmZyYWdtZW50ID0gJyc7CiAgICAg ICAgCiAgICBvcGVuKENMSUVOVENPTkYsICI+JHRlbXBkaXIvJGNsaWVudG92cG4iKSBvciBkaWUg IlVuYWJsZSB0byBvcGVuIHRlbXBmaWxlOiAkISI7CiAgICBmbG9jayBDTElFTlRDT05GLCAyOwog ICAgCiAgICBteSAkemlwID0gQXJjaGl2ZTo6WmlwLT5uZXcoKTsKICAgcHJpbnQgQ0xJRU5UQ09O RiAiIyBJUEZpcmUgbjJuIE9wZW4gVlBOIENsaWVudCBDb25maWcgYnkgdW1tZWVnZ2UgdW5kIG0u YS5kXG4iOwogICBwcmludCBDTElFTlRDT05GICIjIFxuIjsKICAgcHJpbnQgQ0xJRU5UQ09ORiAi IyBVc2VyIFNlY3VyaXR5XG4iOwogICBwcmludCBDTElFTlRDT05GICJ1c2VyIG5vYm9keVxuIjsK ICAgcHJpbnQgQ0xJRU5UQ09ORiAiZ3JvdXAgbm9ib2R5XG4iOwogICBwcmludCBDTElFTlRDT05G ICJwZXJzaXN0LXR1blxuIjsKICAgcHJpbnQgQ0xJRU5UQ09ORiAicGVyc2lzdC1rZXlcbiI7CiAg IHByaW50IENMSUVOVENPTkYgInNjcmlwdC1zZWN1cml0eSAyXG4iOwogICBwcmludCBDTElFTlRD T05GICIjIElQL0ROUyBmb3IgcmVtb3RlIFNlcnZlciBHYXRld2F5XG4iOyAKICAgcHJpbnQgQ0xJ RU5UQ09ORiAicmVtb3RlICR2cG5zZXR0aW5nc3snVlBOX0lQJ31cbiI7CiAgIHByaW50IENMSUVO VENPTkYgImZsb2F0XG4iOwogICBwcmludCBDTElFTlRDT05GICIjIElQIGFkcmVzc2VzIG9mIHRo ZSBWUE4gU3VibmV0XG4iOyAKICAgcHJpbnQgQ0xJRU5UQ09ORiAiaWZjb25maWcgJG92c3VibmV0 LjIgJG92c3VibmV0LjFcbiI7IAogICBwcmludCBDTElFTlRDT05GICIjIFNlcnZlciBHYXRld2F5 IE5ldHdvcmtcbiI7IAogICBwcmludCBDTElFTlRDT05GICJyb3V0ZSAkcmVtc3VibmV0WzBdICRy ZW1zdWJuZXRbMV1cbiI7CiAgIHByaW50IENMSUVOVENPTkYgIiMgdHVuIERldmljZVxuIjsgCiAg IHByaW50IENMSUVOVENPTkYgImRldiAkdnBuc2V0dGluZ3N7J0RERVZJQ0UnfVxuIjsgCiAgIHBy aW50IENMSUVOVENPTkYgIiMgUG9ydCBhbmQgUHJvdG9rb2xsXG4iOyAKICAgcHJpbnQgQ0xJRU5U Q09ORiAicG9ydCAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMjldXG4iOyAKICAgCiAg IGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMjhdIGVxICd0Y3AnKSB7CiAgIHBy aW50IENMSUVOVENPTkYgInByb3RvIHRjcC1jbGllbnRcbiI7CiAgIHByaW50IENMSUVOVENPTkYg IiMgUGFja2V0IHNpemVcbiI7CiAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1b MzFdIGVxICcnKSB7JHR1bm10dSA9ICcxNDAwJ30gZWxzZSB7JHR1bm10dSA9ICRjb25maWdoYXNo eyRjZ2lwYXJhbXN7J0tFWSd9fVszMV19OwogICBwcmludCBDTElFTlRDT05GICJ0dW4tbXR1ICR0 dW5tdHVcbiI7CiAgIH0KICAKICAgaWYgKCRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsy OF0gZXEgJ3VkcCcpIHsKICAgcHJpbnQgQ0xJRU5UQ09ORiAicHJvdG8gdWRwXG4iOyAKICAgcHJp bnQgQ0xJRU5UQ09ORiAiIyBQYWtldHNpemVcbiI7CiAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFy YW1zeydLRVknfX1bMzFdIGVxICcnKSB7JHR1bm10dSA9ICcxNTAwJ30gZWxzZSB7JHR1bm10dSA9 ICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVszMV19OwogICBwcmludCBDTElFTlRDT05G ICJ0dW4tbXR1ICR0dW5tdHVcbiI7CiAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVkn fX1bMjRdIG5lICcnKSB7cHJpbnQgQ0xJRU5UQ09ORiAiZnJhZ21lbnQgJGNvbmZpZ2hhc2h7JGNn aXBhcmFtc3snS0VZJ319WzI0XVxuIjt9CiAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydL RVknfX1bMjNdIGVxICdvbicpIHtwcmludCBDTElFTlRDT05GICJtc3NmaXhcbiI7fQogICB9CiAg IHByaW50IENMSUVOVENPTkYgIm5zLWNlcnQtdHlwZSBzZXJ2ZXJcbiI7ICAgCiAgIHByaW50IENM SUVOVENPTkYgIiMgQXV0aC4gQ2xpZW50XG4iOyAKICAgcHJpbnQgQ0xJRU5UQ09ORiAidGxzLWNs aWVudFxuIjsgCiAgIHByaW50IENMSUVOVENPTkYgIiMgQ2lwaGVyXG4iOyAKICAgcHJpbnQgQ0xJ RU5UQ09ORiAiY2lwaGVyIEFFUy0yNTYtQ0JDXG4iOyAKICAgIGlmICgkY29uZmlnaGFzaHskY2dp cGFyYW1zeydLRVknfX1bNF0gZXEgJ2NlcnQnICYmIC1mICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jZXJ0cy8kY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMV0ucDEyIikgeyAKCSBwcmlu dCBDTElFTlRDT05GICJwa2NzMTIgJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvJGNvbmZp Z2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdLnAxMlxyXG4iOwogICAgICR6aXAtPmFkZEZpbGUo ICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY29uZmlnaGFzaHskY2dpcGFyYW1zeydL RVknfX1bMV0ucDEyIiwgIiRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXS5wMTIiKSBv ciBkaWUgIkNhbid0IGFkZCBmaWxlICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXS5w MTJcbiI7CiAgIH0gCiAgICBpZiAoJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzMwXSBl cSAnb24nKSB7CiAgIHByaW50IENMSUVOVENPTkYgIiMgRW5hYmxlIENvbXByZXNzaW9uXG4iOwog ICBwcmludCBDTElFTlRDT05GICJjb21wLWx6b1xyXG4iOwogICAgIH0KICAgcHJpbnQgQ0xJRU5U Q09ORiAiIyBEZWJ1ZyBMZXZlbFxuIjsgCiAgIHByaW50IENMSUVOVENPTkYgInZlcmIgM1xuIjsg CiAgIHByaW50IENMSUVOVENPTkYgIiMgVHVubmVsIGNoZWNrXG4iOyAKICAgcHJpbnQgQ0xJRU5U Q09ORiAia2VlcGFsaXZlIDEwIDYwXG4iOyAKICAgcHJpbnQgQ0xJRU5UQ09ORiAiIyBTdGFydCBh cyBkYWVtb25cbiI7IAogICBwcmludCBDTElFTlRDT05GICJkYWVtb24gJGNvbmZpZ2hhc2h7JGNn aXBhcmFtc3snS0VZJ319WzFdbjJuXG4iOyAKICAgcHJpbnQgQ0xJRU5UQ09ORiAid3JpdGVwaWQg L3Zhci9ydW4vJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdbjJuLnBpZFxuIjsgCiAg IHByaW50IENMSUVOVENPTkYgIiMgQWN0aXZhdGUgTWFuYWdlbWVudCBJbnRlcmZhY2UgYW5kIFBv cnRcbiI7IAogICBpZiAoJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzIyXSBlcSAnJykg e3ByaW50IENMSUVOVENPTkYgIm1hbmFnZW1lbnQgbG9jYWxob3N0ICRjb25maWdoYXNoeyRjZ2lw YXJhbXN7J0tFWSd9fVsyOV1cbiJ9CiAgICBlbHNlIHtwcmludCBDTElFTlRDT05GICJtYW5hZ2Vt ZW50IGxvY2FsaG9zdCAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMjJdXG4ifTsKICAg cHJpbnQgQ0xJRU5UQ09ORiAiIyByZW1zdWIgJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319 WzExXVxuIjsKICAKCiAgICBjbG9zZShDTElFTlRDT05GKTsKICAgICAgICAKICAgICR6aXAtPmFk ZEZpbGUoICIkdGVtcGRpci8kY2xpZW50b3ZwbiIsICRjbGllbnRvdnBuKSBvciBkaWUgIkNhbid0 IGFkZCBmaWxlICRjbGllbnRvdnBuXG4iOwogICAgbXkgJHN0YXR1cyA9ICR6aXAtPndyaXRlVG9G aWxlTmFtZWQoJHppcHBhdGhuYW1lKTsKCiAgICBvcGVuKERMRklMRSwgIjwkemlwcGF0aG5hbWUi KSBvciBkaWUgIlVuYWJsZSB0byBvcGVuICR6aXBwYXRobmFtZTogJCEiOwogICAgQGZpbGVob2xk ZXIgPSA8RExGSUxFPjsKICAgIHByaW50ICJDb250ZW50LVR5cGU6YXBwbGljYXRpb24veC1kb3du bG9hZFxuIjsKICAgIHByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOmF0dGFjaG1lbnQ7ZmlsZW5h bWU9JHppcG5hbWVcblxuIjsKICAgIHByaW50IEBmaWxlaG9sZGVyOwogICAgZXhpdCAoMCk7Cn0K ZWxzZQp7CiAgICAgICAgbXkgJHppcG5hbWUgPSAiJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZ J319WzFdLVRPLUlQRmlyZS56aXAiOwogICAgICAgIG15ICR6aXBwYXRobmFtZSA9ICIkemlwcGF0 aCR6aXBuYW1lIjsKICAgICAgICAkY2xpZW50b3ZwbiA9ICIkY29uZmlnaGFzaHskY2dpcGFyYW1z eydLRVknfX1bMV0tVE8tSVBGaXJlLm92cG4iOwoKIyMjCiMgbS5hLmQgbmV0Mm5ldAojIyMKICAK ICAgIG9wZW4oQ0xJRU5UQ09ORiwgIj4kdGVtcGRpci8kY2xpZW50b3ZwbiIpIG9yIGRpZSAiVW5h YmxlIHRvIG9wZW4gdGVtcGZpbGU6ICQhIjsKICAgIGZsb2NrIENMSUVOVENPTkYsIDI7CiAgICAK ICAgIG15ICR6aXAgPSBBcmNoaXZlOjpaaXAtPm5ldygpOwogICAgCiAgICBwcmludCBDTElFTlRD T05GICIjT3BlblZQTiBDbGllbnQgY29uZlxyXG4iOwogICAgcHJpbnQgQ0xJRU5UQ09ORiAidGxz LWNsaWVudFxyXG4iOwogICAgcHJpbnQgQ0xJRU5UQ09ORiAiY2xpZW50XHJcbiI7CiAgICBwcmlu dCBDTElFTlRDT05GICJub2JpbmRcbiI7CiAgICBwcmludCBDTElFTlRDT05GICJkZXYgJHZwbnNl dHRpbmdzeydEREVWSUNFJ31cclxuIjsKICAgIHByaW50IENMSUVOVENPTkYgInByb3RvICR2cG5z ZXR0aW5nc3snRFBST1RPQ09MJ31cclxuIjsKICAgIHByaW50IENMSUVOVENPTkYgIiR2cG5zZXR0 aW5nc3snRERFVklDRSd9LW10dSAkdnBuc2V0dGluZ3N7J0RNVFUnfVxyXG4iOwogICAgaWYgKCAk dnBuc2V0dGluZ3N7J0VOQUJMRUQnfSBlcSAnb24nKXsKICAgIAlwcmludCBDTElFTlRDT05GICJy ZW1vdGUgJHZwbnNldHRpbmdzeydWUE5fSVAnfSAkdnBuc2V0dGluZ3N7J0RERVNUX1BPUlQnfVxy XG4iOwoJaWYgKCAkdnBuc2V0dGluZ3N7J0VOQUJMRURfQkxVRSd9IGVxICdvbicgJiYgKCZoYXZl Qmx1ZU5ldCgpKSl7CQoJICAgIHByaW50IENMSUVOVENPTkYgIiNDb21lbnQgdGhlIGFib3ZlIGxp bmUgYW5kIHVuY29tZW50IHRoZSBuZXh0IGxpbmUsIGlmIHlvdSB3YW50IHRvIGNvbm5lY3Qgb24g dGhlIEJsdWUgaW50ZXJmYWNlXHJcbiI7CQoJICAgIHByaW50IENMSUVOVENPTkYgIjtyZW1vdGUg JG5ldHNldHRpbmdzeydCTFVFX0FERFJFU1MnfSAkdnBuc2V0dGluZ3N7J0RERVNUX1BPUlQnfVxy XG4iOwoJfQoJaWYgKCAkdnBuc2V0dGluZ3N7J0VOQUJMRURfT1JBTkdFJ30gZXEgJ29uJyAmJiAo JmhhdmVPcmFuZ2VOZXQoKSkpewoJICAgIHByaW50IENMSUVOVENPTkYgIiNDb21lbnQgdGhlIGFi b3ZlIGxpbmUgYW5kIHVuY29tZW50IHRoZSBuZXh0IGxpbmUsIGlmIHlvdSB3YW50IHRvIGNvbm5l Y3Qgb24gdGhlIE9yYW5nZSBpbnRlcmZhY2VcclxuIjsJCQoJICAgIHByaW50IENMSUVOVENPTkYg IjtyZW1vdGUgJG5ldHNldHRpbmdzeydPUkFOR0VfQUREUkVTUyd9ICR2cG5zZXR0aW5nc3snRERF U1RfUE9SVCd9XHJcbiI7Cgl9CiAgICB9IGVsc2lmICggJHZwbnNldHRpbmdzeydFTkFCTEVEX0JM VUUnfSBlcSAnb24nICYmICgmaGF2ZUJsdWVOZXQoKSkpewoJcHJpbnQgQ0xJRU5UQ09ORiAicmVt b3RlICRuZXRzZXR0aW5nc3snQkxVRV9BRERSRVNTJ30gJHZwbnNldHRpbmdzeydEREVTVF9QT1JU J31cclxuIjsKCWlmICggJHZwbnNldHRpbmdzeydFTkFCTEVEX09SQU5HRSd9IGVxICdvbicgJiYg KCZoYXZlT3JhbmdlTmV0KCkpKXsKCSAgICBwcmludCBDTElFTlRDT05GICIjQ29tZW50IHRoZSBh Ym92ZSBsaW5lIGFuZCB1bmNvbWVudCB0aGUgbmV4dCBsaW5lLCBpZiB5b3Ugd2FudCB0byBjb25u ZWN0IG9uIHRoZSBPcmFuZ2UgaW50ZXJmYWNlXHJcbiI7CQkKCSAgICBwcmludCBDTElFTlRDT05G ICI7cmVtb3RlICRuZXRzZXR0aW5nc3snT1JBTkdFX0FERFJFU1MnfSAkdnBuc2V0dGluZ3N7J0RE RVNUX1BPUlQnfVxyXG4iOwoJfQogICAgfSBlbHNpZiAoICR2cG5zZXR0aW5nc3snRU5BQkxFRF9P UkFOR0UnfSBlcSAnb24nICYmICgmaGF2ZU9yYW5nZU5ldCgpKSl7CglwcmludCBDTElFTlRDT05G ICJyZW1vdGUgJG5ldHNldHRpbmdzeydPUkFOR0VfQUREUkVTUyd9ICR2cG5zZXR0aW5nc3snRERF U1RfUE9SVCd9XHJcbiI7CiAgICB9CiAgICAJICAgIAkJCiAgICBpZiAoJGNvbmZpZ2hhc2h7JGNn aXBhcmFtc3snS0VZJ319WzRdIGVxICdjZXJ0JyAmJiAtZiAiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vY2VydHMvJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdLnAxMiIpIHsgCglwcmlu dCBDTElFTlRDT05GICJwa2NzMTIgJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdLnAx MlxyXG4iOwoJJHppcC0+YWRkRmlsZSggIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRj b25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXS5wMTIiLCAiJGNvbmZpZ2hhc2h7JGNnaXBh cmFtc3snS0VZJ319WzFdLnAxMiIpIG9yIGRpZSAiQ2FuJ3QgYWRkIGZpbGUgJGNvbmZpZ2hhc2h7 JGNnaXBhcmFtc3snS0VZJ319WzFdLnAxMlxuIjsKICAgIH0gZWxzZSB7CglwcmludCBDTElFTlRD T05GICJjYSBjYWNlcnQucGVtXHJcbiI7CglwcmludCBDTElFTlRDT05GICJjZXJ0ICRjb25maWdo YXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXWNlcnQucGVtXHJcbiI7CglwcmludCBDTElFTlRDT05G ICJrZXkgJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdLmtleVxyXG4iOwoJJHppcC0+ YWRkRmlsZSggIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhL2NhY2VydC5wZW0iLCAiY2FjZXJ0 LnBlbSIpICBvciBkaWUgIkNhbid0IGFkZCBmaWxlIGNhY2VydC5wZW1cbiI7CgkkemlwLT5hZGRG aWxlKCAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvJGNvbmZpZ2hhc2h7JGNnaXBhcmFt c3snS0VZJ319WzFdY2VydC5wZW0iLCAiJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFd Y2VydC5wZW0iKSBvciBkaWUgIkNhbid0IGFkZCBmaWxlICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7 J0tFWSd9fVsxXWNlcnQucGVtXG4iOyAgICAKICAgIH0KICAgIHByaW50IENMSUVOVENPTkYgImNp cGhlciAkdnBuc2V0dGluZ3N7RENJUEhFUn1cclxuIjsKICAgIGlmICgkdnBuc2V0dGluZ3N7RENP TVBMWk99IGVxICdvbicpIHsKICAgICAgICBwcmludCBDTElFTlRDT05GICJjb21wLWx6b1xyXG4i OwogICAgfQogICAgcHJpbnQgQ0xJRU5UQ09ORiAidmVyYiAzXHJcbiI7CiAgICBwcmludCBDTElF TlRDT05GICJucy1jZXJ0LXR5cGUgc2VydmVyXHJcbiI7CiAgICBwcmludCBDTElFTlRDT05GICJ0 bHMtcmVtb3RlICR2cG5zZXR0aW5nc3tST09UQ0VSVF9IT1NUTkFNRX1cclxuIjsgCiAgICBpZiAo JHZwbnNldHRpbmdze01TU0ZJWH0gZXEgJ29uJykgewoJcHJpbnQgQ0xJRU5UQ09ORiAibXNzZml4 XHJcbiI7CiAgICB9CiAgICBpZiAoJHZwbnNldHRpbmdze0ZSQUdNRU5UfSBuZSAnJyAmJiAkdnBu c2V0dGluZ3N7RFBST1RPQ09MfSBuZSAndGNwJyApIHsKCXByaW50IENMSUVOVENPTkYgImZyYWdt ZW50ICR2cG5zZXR0aW5nc3snRlJBR01FTlQnfVxyXG4iOwogICAgfQogICAgY2xvc2UoQ0xJRU5U Q09ORik7CiAgICAgICAgCiAgICAkemlwLT5hZGRGaWxlKCAiJHRlbXBkaXIvJGNsaWVudG92cG4i LCAkY2xpZW50b3Zwbikgb3IgZGllICJDYW4ndCBhZGQgZmlsZSAkY2xpZW50b3ZwblxuIjsKICAg IG15ICRzdGF0dXMgPSAkemlwLT53cml0ZVRvRmlsZU5hbWVkKCR6aXBwYXRobmFtZSk7CgogICAg b3BlbihETEZJTEUsICI8JHppcHBhdGhuYW1lIikgb3IgZGllICJVbmFibGUgdG8gb3BlbiAkemlw cGF0aG5hbWU6ICQhIjsKICAgIEBmaWxlaG9sZGVyID0gPERMRklMRT47CiAgICBwcmludCAiQ29u dGVudC1UeXBlOmFwcGxpY2F0aW9uL3gtZG93bmxvYWRcbiI7CiAgICBwcmludCAiQ29udGVudC1E aXNwb3NpdGlvbjphdHRhY2htZW50O2ZpbGVuYW1lPSR6aXBuYW1lXG5cbiI7CiAgICBwcmludCBA ZmlsZWhvbGRlcjsKICAgIGV4aXQgKDApOwogICB9CiAgIAogICAKICAgCiMjIwojIyMgUmVtb3Zl IGNvbm5lY3Rpb24KIyMjCgoKfSBlbHNpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6 OnRyeydyZW1vdmUnfSkgewogICAgJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9zZXR0aW5ncyIsIFwldnBuc2V0dGluZ3MpOwogICAgJkdlbmVyYWw6OnJlYWRoYXNo YXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hhc2gp OwoKICAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX0pIHsKIwlpZiAoJHZwbnNl dHRpbmdzeydFTkFCTEVEJ30gZXEgJ29uJyB8fAojCSAgICAkdnBuc2V0dGluZ3N7J0VOQUJMRURf QkxVRSd9IGVxICdvbicpIHsKIwkgICAgc3lzdGVtKCcvdXNyL2xvY2FsL2Jpbi9pcHNlY2N0cmwn LCAnRCcsICRjZ2lwYXJhbXN7J0tFWSd9KTsKIwl9CiMKCW15ICR0ZW1wID0gYC91c3IvYmluL29w ZW5zc2wgY2EgLXJldm9rZSAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY29uZmlnaGFz aHskY2dpcGFyYW1zeydLRVknfX1bMV1jZXJ0LnBlbSAtY29uZmlnICR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL29wZW5zc2wvb3Zwbi5jbmZgOwoKIyMjCiMgbS5hLmQgbmV0Mm5ldAojIyMKCiBpZiAo JGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzNdIGVxICduZXQnKSB7CgoJbXkgJGNvbmZm aWxlID0gZ2xvYigiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY29uZmlnaGFzaHsk Y2dpcGFyYW1zeydLRVknfX1bMV0vJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdLmNv bmYiKTsKICBteSAkY2VydGZpbGUgPSBnbG9iKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0 cy8kY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMV0ucDEyIik7CiAgdW5saW5rICgkY2Vy dGZpbGUpIG9yIGRpZSAiUmVtb3ZpbmcgJGNlcnRmaWxlIGZhaWw6ICQhIjsKICB1bmxpbmsgKCRj b25mZmlsZSkgb3IgZGllICJSZW1vdmluZyAkY29uZmZpbGUgZmFpbDogJCEiOwogIHJtZGlyICgi JHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY29uZmlnaGFzaHskY2dpcGFyYW1zeydL RVknfX1bMV0iKSB8fCBkaWUgIkthbm4gVmVyemVpY2huaXMgbmljaHQgbG9lc2NoZW46ICQhIjsK ICAKfQoKICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY29uZmlnaGFz aHskY2dpcGFyYW1zeydLRVknfX1bMV1jZXJ0LnBlbSIpOwogIHVubGluayAoIiR7R2VuZXJhbDo6 c3dyb290fS9vdnBuL2NlcnRzLyRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXS5wMTIi KTsKCiMgQS5NYXJ4IENDRCBkZWxldGUgY2NkIGZpbGVzIGFuZCByb3V0ZXMKCgkKCWlmICgtZiAi JHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2NkLyRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9 fVsyXSIpCgl7CgkJdW5saW5rICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jY2QvJGNvbmZpZ2hh c2h7JGNnaXBhcmFtc3snS0VZJ319WzJdIjsKCX0KCW15ICVjY2Ryb3V0ZWhhc2g9KCk7CgkmR2Vu ZXJhbDo6cmVhZGhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Nkcm91dGUiLCBc JWNjZHJvdXRlaGFzaCk7Cglmb3JlYWNoIG15ICRrZXkgKGtleXMgJWNjZHJvdXRlaGFzaCkgewoJ CWlmICgkY2Nkcm91dGVoYXNoeyRrZXl9WzBdIGVxICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tF WSd9fVsxXSl7CgkJCWRlbGV0ZSAkY2Nkcm91dGVoYXNoeyRrZXl9OwoJCX0KCX0KCSZHZW5lcmFs Ojp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Nkcm91dGUiLCBcJWNj ZHJvdXRlaGFzaCk7CglteSAlY2Nkcm91dGUyaGFzaD0oKTsKCSZHZW5lcmFsOjpyZWFkaGFzaGFy cmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jY2Ryb3V0ZTIiLCBcJWNjZHJvdXRlMmhhc2gp OwoJZm9yZWFjaCBteSAka2V5IChrZXlzICVjY2Ryb3V0ZTJoYXNoKSB7CgkJaWYgKCRjY2Ryb3V0 ZTJoYXNoeyRrZXl9WzBdIGVxICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXSl7CgkJ CWRlbGV0ZSAkY2Nkcm91dGUyaGFzaHska2V5fTsKCQl9Cgl9CgkmR2VuZXJhbDo6d3JpdGVoYXNo YXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NjZHJvdXRlMiIsIFwlY2Nkcm91dGUyaGFz aCk7CgkKCQoJCiMgQ0NEIGVuZCAKCgkKCWRlbGV0ZSAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydL RVknfX07CglteSAkdGVtcDIgPSBgL3Vzci9iaW4vb3BlbnNzbCBjYSAtZ2VuY3JsIC1vdXQgJHtH ZW5lcmFsOjpzd3Jvb3R9L292cG4vY3Jscy9jYWNybC5wZW0gLWNvbmZpZyAke0dlbmVyYWw6OnN3 cm9vdH0vb3Zwbi9vcGVuc3NsL292cG4uY25mYDsKCSZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgi JHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CgoJIyZ3 cml0ZXNlcnZlcmNvbmYoKTsKICAgIH0gZWxzZSB7CgkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRy eydpbnZhbGlkIGtleSd9OwogICAgfQoKCiMjIwojIyMgRG93bmxvYWQgUEtDUzEyIGZpbGUKIyMj Cn0gZWxzaWYgKCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsnZG93bmxvYWQgcGtj czEyIGZpbGUnfSkgewogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dy b290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hhc2gpOwoKICAgIHByaW50ICJDb250ZW50 LURpc3Bvc2l0aW9uOiBmaWxlbmFtZT0iIC4gJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319 WzFdIC4gIi5wMTJcclxuIjsKICAgIHByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29j dGV0LXN0cmVhbVxyXG5cclxuIjsKICAgIHByaW50IGAvYmluL2NhdCAke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9jZXJ0cy8kY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMV0ucDEyYDsKICAg IGV4aXQgKDApOwoKIyMjCiMjIyBEaXNwbGF5IGNlcnRpZmljYXRlCiMjIwp9IGVsc2lmICgkY2dp cGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J3Nob3cgY2VydGlmaWNhdGUnfSkgewogICAg JkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25m aWciLCBcJWNvbmZpZ2hhc2gpOwoKICAgIGlmICggLWYgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBu L2NlcnRzLyRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXWNlcnQucGVtIikgewoJJkhl YWRlcjo6c2hvd2h0dHBoZWFkZXJzKCk7CgkmSGVhZGVyOjpvcGVucGFnZSgkTGFuZzo6dHJ7J3Zw biBjb25maWd1cmF0aW9uIG1haW4nfSwgMSwgJycpOwoJJkhlYWRlcjo6b3BlbmJpZ2JveCgnMTAw JScsICdMRUZUJywgJycsICcnKTsKCSZIZWFkZXI6Om9wZW5ib3goJzEwMCUnLCAnTEVGVCcsICIk TGFuZzo6dHJ7J2NlcnRpZmljYXRlJ306Iik7CglteSAkb3V0cHV0ID0gYC91c3IvYmluL29wZW5z c2wgeDUwOSAtdGV4dCAtaW4gJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvJGNvbmZpZ2hh c2h7JGNnaXBhcmFtc3snS0VZJ319WzFdY2VydC5wZW1gOwoJJG91dHB1dCA9ICZIZWFkZXI6OmNs ZWFuaHRtbCgkb3V0cHV0LCJ5Iik7CglwcmludCAiPHByZT4kb3V0cHV0PC9wcmU+XG4iOwoJJkhl YWRlcjo6Y2xvc2Vib3goKTsKCXByaW50ICI8ZGl2IGFsaWduPSdjZW50ZXInPjxhIGhyZWY9Jy9j Z2ktYmluL292cG5tYWluLmNnaSc+JExhbmc6OnRyeydiYWNrJ308L2E+PC9kaXY+IjsKCSZIZWFk ZXI6OmNsb3NlYmlnYm94KCk7CgkmSGVhZGVyOjpjbG9zZXBhZ2UoKTsKCWV4aXQoMCk7CiAgICB9 CiMjIwojIyMgRGlzcGxheSBDZXJ0aWZpY2F0ZSBSZXZva2UgTGlzdAojIyMKfSBlbHNpZiAoJGNn aXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydzaG93IGNybCd9KSB7CiMgICAgJkdlbmVy YWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBc JWNvbmZpZ2hhc2gpOwoKICAgIGlmICggLWYgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NybHMv Y2FjcmwucGVtIikgewoJJkhlYWRlcjo6c2hvd2h0dHBoZWFkZXJzKCk7CgkmSGVhZGVyOjpvcGVu cGFnZSgkTGFuZzo6dHJ7J3ZwbiBjb25maWd1cmF0aW9uIG1haW4nfSwgMSwgJycpOwoJJkhlYWRl cjo6b3BlbmJpZ2JveCgnMTAwJScsICdMRUZUJywgJycsICcnKTsKCSZIZWFkZXI6Om9wZW5ib3go JzEwMCUnLCAnTEVGVCcsICIkTGFuZzo6dHJ7J2NybCd9OiIpOwoJbXkgJG91dHB1dCA9IGAvdXNy L2Jpbi9vcGVuc3NsIGNybCAtdGV4dCAtbm9vdXQgLWluICR7R2VuZXJhbDo6c3dyb290fS9vdnBu L2NybHMvY2FjcmwucGVtYDsKCSRvdXRwdXQgPSAmSGVhZGVyOjpjbGVhbmh0bWwoJG91dHB1dCwi eSIpOwoJcHJpbnQgIjxwcmU+JG91dHB1dDwvcHJlPlxuIjsKCSZIZWFkZXI6OmNsb3NlYm94KCk7 CglwcmludCAiPGRpdiBhbGlnbj0nY2VudGVyJz48YSBocmVmPScvY2dpLWJpbi9vdnBubWFpbi5j Z2knPiRMYW5nOjp0cnsnYmFjayd9PC9hPjwvZGl2PiI7CgkmSGVhZGVyOjpjbG9zZWJpZ2JveCgp OwoJJkhlYWRlcjo6Y2xvc2VwYWdlKCk7CglleGl0KDApOwogICAgfQoKIyMjCiMjIyBBZHZhbmNl ZCBTZXJ2ZXIgU2V0dGluZ3MKIyMjCgp9IGVsc2lmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAk TGFuZzo6dHJ7J2FkdmFuY2VkIHNlcnZlcid9KSB7CiAgICAlY2dpcGFyYW1zID0gKCk7CiAgICAl Y2FoYXNoID0gKCk7CiAgICAlY29uZmlnaGFzaCA9ICgpOwogICAgbXkgJGRpc2FibGVkOwogICAg JkdlbmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwl Y2dpcGFyYW1zKTsKICAgIHJlYWRfcm91dGVwdXNoZmlsZTsKCQoJCiMgICAgaWYgKCRjZ2lwYXJh bXN7J0NMSUVOVDJDTElFTlQnfSBlcSAnJykgewojCSRjZ2lwYXJhbXN7J0NMSUVOVDJDTElFTlQn fSA9ICAnb24nOyAgICAgCiMgICAgfQpBRFZfRVJST1I6CiAgICBpZiAoJGNnaXBhcmFtc3snTUFY X0NMSUVOVFMnfSBlcSAnJykgewoJJGNnaXBhcmFtc3snTUFYX0NMSUVOVFMnfSA9ICAnMTAwJzsg ICAgIAogICAgfQogICAgaWYgKCRjZ2lwYXJhbXN7J0tFRVBBTElWRV8xJ30gZXEgJycpIHsKCSRj Z2lwYXJhbXN7J0tFRVBBTElWRV8xJ30gPSAgJzEwJzsgICAgIAogICAgfQogICAgaWYgKCRjZ2lw YXJhbXN7J0tFRVBBTElWRV8yJ30gZXEgJycpIHsKCSRjZ2lwYXJhbXN7J0tFRVBBTElWRV8yJ30g PSAgJzYwJzsgICAgIAogICAgfQogICAgaWYgKCRjZ2lwYXJhbXN7J0xPR19WRVJCJ30gZXEgJycp IHsKCSRjZ2lwYXJhbXN7J0xPR19WRVJCJ30gPSAgJzMnOwogICAgfQogICAgJGNoZWNrZWR7J0NM SUVOVDJDTElFTlQnfXsnb2ZmJ30gPSAnJzsKICAgICRjaGVja2VkeydDTElFTlQyQ0xJRU5UJ317 J29uJ30gPSAnJzsKICAgICRjaGVja2VkeydDTElFTlQyQ0xJRU5UJ317JGNnaXBhcmFtc3snQ0xJ RU5UMkNMSUVOVCd9fSA9ICdDSEVDS0VEJzsKICAgICRjaGVja2VkeydSRURJUkVDVF9HV19ERUYx J317J29mZid9ID0gJyc7CiAgICAkY2hlY2tlZHsnUkVESVJFQ1RfR1dfREVGMSd9eydvbid9ID0g Jyc7CiAgICAkY2hlY2tlZHsnUkVESVJFQ1RfR1dfREVGMSd9eyRjZ2lwYXJhbXN7J1JFRElSRUNU X0dXX0RFRjEnfX0gPSAnQ0hFQ0tFRCc7CiAgICAkc2VsZWN0ZWR7J0VOR0lORVMnfXskY2dpcGFy YW1zeydFTkdJTkVTJ319ID0gJ1NFTEVDVEVEJzsKICAgICRjaGVja2VkeydNU1NGSVgnfXsnb2Zm J30gPSAnJzsKICAgICRjaGVja2VkeydNU1NGSVgnfXsnb24nfSA9ICcnOwogICAgJGNoZWNrZWR7 J01TU0ZJWCd9eyRjZ2lwYXJhbXN7J01TU0ZJWCd9fSA9ICdDSEVDS0VEJzsKICAgICRzZWxlY3Rl ZHsnTE9HX1ZFUkInfXsnMSd9ID0gJyc7CiAgICAkc2VsZWN0ZWR7J0xPR19WRVJCJ317JzInfSA9 ICcnOwogICAgJHNlbGVjdGVkeydMT0dfVkVSQid9eyczJ30gPSAnJzsKICAgICRzZWxlY3RlZHsn TE9HX1ZFUkInfXsnNCd9ID0gJyc7CiAgICAkc2VsZWN0ZWR7J0xPR19WRVJCJ317JzUnfSA9ICcn OwogICAgJHNlbGVjdGVkeydMT0dfVkVSQid9eyc2J30gPSAnJzsKICAgICRzZWxlY3RlZHsnTE9H X1ZFUkInfXsnNyd9ID0gJyc7CiAgICAkc2VsZWN0ZWR7J0xPR19WRVJCJ317JzgnfSA9ICcnOwog ICAgJHNlbGVjdGVkeydMT0dfVkVSQid9eyc5J30gPSAnJzsKICAgICRzZWxlY3RlZHsnTE9HX1ZF UkInfXsnMTAnfSA9ICcnOwogICAgJHNlbGVjdGVkeydMT0dfVkVSQid9eycxMSd9ID0gJyc7CiAg ICAkc2VsZWN0ZWR7J0xPR19WRVJCJ317JzAnfSA9ICcnOwogICAgJHNlbGVjdGVkeydMT0dfVkVS Qid9eyRjZ2lwYXJhbXN7J0xPR19WRVJCJ319ID0gJ1NFTEVDVEVEJzsKICAgCiAgICAmSGVhZGVy OjpzaG93aHR0cGhlYWRlcnMoKTsKICAgICZIZWFkZXI6Om9wZW5wYWdlKCRMYW5nOjp0cnsnc3Rh dHVzIG92cG4nfSwgMSwgJycpOwogICAgJkhlYWRlcjo6b3BlbmJpZ2JveCgnMTAwJScsICdMRUZU JywgJycsICRlcnJvcm1lc3NhZ2UpOyAgICAKICAgIGlmICgkZXJyb3JtZXNzYWdlKSB7CgkmSGVh ZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xFRlQnLCAkTGFuZzo6dHJ7J2Vycm9yIG1lc3NhZ2VzJ30p OwoJcHJpbnQgIjxjbGFzcyBuYW1lPSdiYXNlJz4kZXJyb3JtZXNzYWdlXG4iOwoJcHJpbnQgIiZu YnNwOzwvY2xhc3M+XG4iOwoJJkhlYWRlcjo6Y2xvc2Vib3goKTsKICAgIH0KICAgICZIZWFkZXI6 Om9wZW5ib3goJzEwMCUnLCAnTEVGVCcsICRMYW5nOjp0cnsnYWR2YW5jZWQgc2VydmVyJ30pOwog ICAgcHJpbnQgPDxFTkQKICAgIDxmb3JtIG1ldGhvZD0ncG9zdCcgZW5jdHlwZT0nbXVsdGlwYXJ0 L2Zvcm0tZGF0YScgZGlzYWJsZWQ+CiAgICA8dGFibGUgd2lkdGg9JzEwMCUnIGJvcmRlcj0wPgog ICAgPHRyPgoJPHRkIGNvbHNwYW49JzQnPjxiPiRMYW5nOjp0cnsnZGhjcC1vcHRpb25zJ308L2I+ PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+Cgk8dGQgd2lkdGg9JzI1JSc+PC90ZD4gPHRkIHdpZHRo PScyMCUnPiA8L3RkPjx0ZCB3aWR0aD0nMjUlJz4gPC90ZD48dGQgd2lkdGg9JzMwJSc+PC90ZD4K ICAgIDwvdHI+CQogICAgPHRyPgkJCgk8dGQgY2xhc3M9J2Jhc2UnPkRvbWFpbjwvdGQ+CiAgICAg ICAgPHRkPjxpbnB1dCB0eXBlPSdURVhUJyBuYW1lPSdESENQX0RPTUFJTicgdmFsdWU9JyRjZ2lw YXJhbXN7J0RIQ1BfRE9NQUlOJ30nIHNpemU9JzMwJyAgLz48L3RkPgogICAgPC90cj4KICAgIDx0 cj4JCgk8dGQgY2xhc3M9J2Jhc2UnPkROUzwvdGQ+Cgk8dGQ+PGlucHV0IHR5cGU9J1RFWFQnIG5h bWU9J0RIQ1BfRE5TJyB2YWx1ZT0nJGNnaXBhcmFtc3snREhDUF9ETlMnfScgc2l6ZT0nMzAnIC8+ PC90ZD4KICAgIDwvdHI+CQogICAgPHRyPgkKCTx0ZCBjbGFzcz0nYmFzZSc+V0lOUzwvdGQ+Cgk8 dGQ+PGlucHV0IHR5cGU9J1RFWFQnIG5hbWU9J0RIQ1BfV0lOUycgdmFsdWU9JyRjZ2lwYXJhbXN7 J0RIQ1BfV0lOUyd9JyBzaXplPSczMCcgLz48L3RkPgogICAgICAgPC90cj4KICAgIDx0cj4KCTx0 ZCBjb2xzcGFuPSc0Jz48Yj4kTGFuZzo6dHJ7J292cG4gcm91dGVzIHB1c2ggb3B0aW9ucyd9PC9i PjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgkKCTx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeydv dnBuIHJvdXRlcyBwdXNoJ308L3RkPgogIDx0ZCBjb2xzcGFuPScyJz4KICAgICAgIDx0ZXh0YXJl YSBuYW1lPSdST1VURVNfUFVTSCcgY29scz0nMjYnIHJvd3M9JzYnIHdyYXA9J29mZic+CkVORAo7 CgppZiAoJGNnaXBhcmFtc3snUk9VVEVTX1BVU0gnfSBuZSAnJykKewoJcHJpbnQgJGNnaXBhcmFt c3snUk9VVEVTX1BVU0gnfTsKfQoKcHJpbnQgPDxFTkQ7CjwvdGV4dGFyZWE+PC90ZD4KPC90cj4K ICAgIDwvdHI+CjwvdGFibGU+CjxociBzaXplPScxJz4KICAgIDx0YWJsZSB3aWR0aD0nMTAwJSc+ CiAgICA8dHI+Cgk8dGQgY2xhc3MnYmFzZSc+PGI+JExhbmc6OnRyeydtaXNjLW9wdGlvbnMnfTwv Yj48L3RkPgogICAgPC90cj4KICAgIDx0cj4KCTx0ZCB3aWR0aD0nMjAlJz48L3RkPiA8dGQgd2lk dGg9JzE1JSc+IDwvdGQ+PHRkIHdpZHRoPScxNSUnPiA8L3RkPjx0ZCB3aWR0aD0nNTAlJz48L3Rk PgogICAgPC90cj4KICAgIDx0cj4KCTx0ZCBjbGFzcz0nYmFzZSc+Q2xpZW50LVRvLUNsaWVudDwv dGQ+Cgk8dGQ+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdDTElFTlQyQ0xJRU5UJyAkY2hl Y2tlZHsnQ0xJRU5UMkNMSUVOVCd9eydvbid9IC8+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CQoJ PHRkIGNsYXNzPSdiYXNlJz5SZWRpcmVjdC1HYXRld2F5IGRlZjE8L3RkPgoJPHRkPjxpbnB1dCB0 eXBlPSdjaGVja2JveCcgbmFtZT0nUkVESVJFQ1RfR1dfREVGMScgJGNoZWNrZWR7J1JFRElSRUNU X0dXX0RFRjEnfXsnb24nfSAvPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgkKICAgICAgICA8dGQg Y2xhc3M9J2Jhc2UnPk1heC1DbGllbnRzPC90ZD4KICAgICAgICA8dGQ+PGlucHV0IHR5cGU9J3Rl eHQnIG5hbWU9J01BWF9DTElFTlRTJyB2YWx1ZT0nJGNnaXBhcmFtc3snTUFYX0NMSUVOVFMnfScg c2l6ZT0nMTAnIC8+PC90ZD4KICAgIDwvdHI+CQogICAgIAk8dHI+CiAgICAgCSAgPHRkIGNsYXNz PSdiYXNlJz5LZXBwYWxpdmUgPGJyIC8+CiAgICAgCSAgICAocGluZy9waW5nLXJlc3RhcnQpPC90 ZD4KICAgICAJICA8dGQ+PGlucHV0IHR5cGU9J1RFWFQnIG5hbWU9J0tFRVBBTElWRV8xJyB2YWx1 ZT0nJGNnaXBhcmFtc3snS0VFUEFMSVZFXzEnfScgc2l6ZT0nMTAnIC8+PC90ZD4KICAgICAJICA8 dGQ+PGlucHV0IHR5cGU9J1RFWFQnIG5hbWU9J0tFRVBBTElWRV8yJyB2YWx1ZT0nJGNnaXBhcmFt c3snS0VFUEFMSVZFXzInfScgc2l6ZT0nMTAnIC8+PC90ZD4KICAgIDwvdHI+CiAgICAgCTx0cj4K ICAgICAJICA8dGQgY2xhc3M9J2Jhc2UnPmZyYWdtZW50IDxicj48L3RkPgogICAgIAkgIDx0ZD48 aW5wdXQgdHlwZT0nVEVYVCcgbmFtZT0nRlJBR01FTlQnIHZhbHVlPSckY2dpcGFyYW1zeydGUkFH TUVOVCd9JyBzaXplPScxMCcgLz48L3RkPgogICAgICAgIDx0ZD5EZWZhdWx0OiA8c3BhbiBjbGFz cz0iYmFzZSI+MTMwMDwvc3Bhbj48L3RkPgogICAgICA8L3RyPgogICAgIAk8dHI+CiAgICAgCSAg PHRkIGNsYXNzPSdiYXNlJz5tc3NmaXg8L3RkPgogICAgIAkgIDx0ZD48aW5wdXQgdHlwZT0nY2hl Y2tib3gnIG5hbWU9J01TU0ZJWCcgJGNoZWNrZWR7J01TU0ZJWCd9eydvbid9IC8+PC90ZD4KICAg ICAJICA8dGQ+RGVmYXVsdDogb248L3RkPgogICAJICA8L3RyPgkKPC90YWJsZT4KCjwhLS0KPGhy IHNpemU9JzEnPgogICAgPHRhYmxlIHdpZHRoPScxMDAlJz4KICAgIDx0cj4KIDx0ZCBjbGFzcydi YXNlJz48Yj5DcnlwdG8tRW5naW5lczwvYj48L3RkPgogICAgPC90cj4KICAgIDx0cj4KCTx0ZCB3 aWR0aD0nMTUlJz48L3RkPiA8dGQgd2lkdGg9JzMwJSc+IDwvdGQ+PHRkIHdpZHRoPScyNSUnPiA8 L3RkPjx0ZCB3aWR0aD0nMzAlJz48L3RkPgogICAgPC90cj4JCiAgICA8dHI+PHRkIGNsYXNzPSdi YXNlJz5FbmdpbmVzOjwvdGQ+ICAgICAgICAKICAgICAgICA8dGQ+PHNlbGVjdCBuYW1lPSdFTkdJ TkVTJz48b3B0aW9uIHZhbHVlPSJub25lIiAkc2VsZWN0ZWR7J0VOR0lORVMnfXsnbm9uZSd9Pm5v bmU8L29wdGlvbj4KCQkJCSAgICA8b3B0aW9uIHZhbHVlPSJjcnlwdG9kZXYiICRzZWxlY3RlZHsn RU5HSU5FUyd9eydjcnlwdG9kZXYnfT5jcnlwdG9kZXY8L29wdGlvbj4KCQkJCSAgICA8b3B0aW9u IHZhbHVlPSJwYWRsb2NrIiAkc2VsZWN0ZWR7J0VOR0lORVMnfXsncGFkbG9jayd9PnBhZGxvY2s8 L29wdGlvbj4KCQkJPC9zZWxlY3Q+CgkJPC90ZD4JCjwvdGFibGU+Ci0tPgo8aHIgc2l6ZT0nMSc+ CiAgICA8dGFibGUgd2lkdGg9JzEwMCUnPgogICAgPHRyPgoJPHRkIGNsYXNzJ2Jhc2UnPjxiPiRM YW5nOjp0cnsnbG9nLW9wdGlvbnMnfTwvYj48L3RkPgogICAgPC90cj4KICAgIDx0cj4KCTx0ZCB3 aWR0aD0nMTUlJz48L3RkPiA8dGQgd2lkdGg9JzMwJSc+IDwvdGQ+PHRkIHdpZHRoPScyNSUnPiA8 L3RkPjx0ZCB3aWR0aD0nMzAlJz48L3RkPgogICAgPC90cj4JCgkKICAgIDx0cj48dGQgY2xhc3M9 J2Jhc2UnPlZFUkI8L3RkPiAgICAgICAgCiAgICAgICAgPHRkPjxzZWxlY3QgbmFtZT0nTE9HX1ZF UkInPjxvcHRpb24gdmFsdWU9JzEnICAkc2VsZWN0ZWR7J0xPR19WRVJCJ317JzEnfT4xPC9vcHRp b24+CgkJCQkgICAgPG9wdGlvbiB2YWx1ZT0nMicgICRzZWxlY3RlZHsnTE9HX1ZFUkInfXsnMid9 PjI8L29wdGlvbj4KCQkJCSAgICA8b3B0aW9uIHZhbHVlPSczJyAgJHNlbGVjdGVkeydMT0dfVkVS Qid9eyczJ30+Mzwvb3B0aW9uPgoJCQkJICAgIDxvcHRpb24gdmFsdWU9JzQnICAkc2VsZWN0ZWR7 J0xPR19WRVJCJ317JzQnfT40PC9vcHRpb24+CgkJCQkgICAgPG9wdGlvbiB2YWx1ZT0nNScgICRz ZWxlY3RlZHsnTE9HX1ZFUkInfXsnNSd9PjU8L29wdGlvbj4KCQkJCSAgICA8b3B0aW9uIHZhbHVl PSc2JyAgJHNlbGVjdGVkeydMT0dfVkVSQid9eyc2J30+Njwvb3B0aW9uPgkJCQkgIAkJCQkgICAg CgkJCQkgICAgPG9wdGlvbiB2YWx1ZT0nNycgICRzZWxlY3RlZHsnTE9HX1ZFUkInfXsnNyd9Pjc8 L29wdGlvbj4KCQkJCSAgICA8b3B0aW9uIHZhbHVlPSc4JyAgJHNlbGVjdGVkeydMT0dfVkVSQid9 eyc4J30+ODwvb3B0aW9uPgoJCQkJICAgIDxvcHRpb24gdmFsdWU9JzknICAkc2VsZWN0ZWR7J0xP R19WRVJCJ317JzknfT45PC9vcHRpb24+CgkJCQkgICAgPG9wdGlvbiB2YWx1ZT0nMTAnICRzZWxl Y3RlZHsnTE9HX1ZFUkInfXsnMTAnfT4xMDwvb3B0aW9uPgoJCQkJICAgIDxvcHRpb24gdmFsdWU9 JzExJyAkc2VsZWN0ZWR7J0xPR19WRVJCJ317JzExJ30+MTE8L29wdGlvbj4KCQkJCSAgICA8b3B0 aW9uIHZhbHVlPScwJyAgJHNlbGVjdGVkeydMT0dfVkVSQid9eycwJ30+MDwvb3B0aW9uPjwvc2Vs ZWN0PjwvdGQ+CQo8L3RhYmxlPjxocj4KRU5ECgppZiAoIC1lICIvdmFyL3J1bi9vcGVudnBuLnBp ZCIpewpwcmludCIJPGJyPjxiPjxmb250IGNvbG9yPScjOTkwMDAwJz4kTGFuZzo6dHJ7J2F0dGVu dGlvbid9OjwvYj48L2ZvbnQ+PGJyPgoJCSRMYW5nOjp0cnsnc2VydmVyIHJlc3RhcnQnfTxicj48 YnI+CgkJPGhyPiI7Cn0KCnByaW50PDxFTkQKPHRhYmxlIHdpZHRoPScxMDAlJz4KPHRyPgogICAg PHRkPiZuYnNwOzwvdGQ+CiAgICA8dGQgYWxsaWduPSdjZW50ZXInPjxpbnB1dCB0eXBlPSdzdWJt aXQnIG5hbWU9J0FDVElPTicgdmFsdWU9JyRMYW5nOjp0cnsnc2F2ZS1hZHYtb3B0aW9ucyd9JyAv PjwvdGQ+CiAgICA8dGQgYWxsaWduPSdjZW50ZXInPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9 J0FDVElPTicgdmFsdWU9JyRMYW5nOjp0cnsnY2FuY2VsLWFkdi1vcHRpb25zJ30nIC8+PC90ZD4K ICAgIDx0ZD4mbmJzcDs8L3RkPiAgICAKPC90cj4KPC90YWJsZT4gICAgCjwvZm9ybT4KRU5ECjsJ CQkJICAgCgogICAgJkhlYWRlcjo6Y2xvc2Vib3goKTsKIyAgICBwcmludCAiPGRpdiBhbGlnbj0n Y2VudGVyJz48YSBocmVmPScvY2dpLWJpbi9vdnBubWFpbi5jZ2knPiRMYW5nOjp0cnsnYmFjayd9 PC9hPjwvZGl2PiI7CiAgICAmSGVhZGVyOjpjbG9zZWJpZ2JveCgpOwogICAgJkhlYWRlcjo6Y2xv c2VwYWdlKCk7CiAgICBleGl0KDApOwoJCgojIEEuTWFyeCBDQ0QgICBBZGQsZGVsZXRlIG9yIGVk aXQgQ0NEIG5ldAoKfSBlbHNpZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydj Y2QgbmV0J30gfHwgCgkJJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydjY2QgYWRk J30gfHwgIAoJCSRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICJraWxsIiB8fCAKCQkkY2dpcGFyYW1z eydBQ1RJT04nfSBlcSAiZWRpdCIgfHwKCQkkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAnZWRpdHNh dmUnKXsKCSZIZWFkZXI6OnNob3dodHRwaGVhZGVycygpOwoJJkhlYWRlcjo6b3BlbnBhZ2UoJExh bmc6OnRyeydjY2QgbmV0J30sIDEsICcnKTsKCSZIZWFkZXI6Om9wZW5iaWdib3goJzEwMCUnLCAn TEVGVCcsICcnLCAnJyk7CgoJaWYgKCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICJraWxsIil7CgkJ JmRlbGNjZG5ldCgkY2dpcGFyYW1zeyduZXQnfSk7Cgl9CgkKCWlmICgkY2dpcGFyYW1zeydBQ1RJ T04nfSBlcSAnZWRpdHNhdmUnKXsKCQlteSAoJGEsJGIpID1zcGxpdCAoL1x8LywkY2dpcGFyYW1z eydjY2RuYW1lJ30pOwoJCWlmICggJGEgbmUgJGIpeyAmbW9kY2NkbmV0KCRhLCRiKTt9Cgl9CgkK CWlmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J2NjZCBhZGQnfSkgewoJCSZh ZGRjY2RuZXQoJGNnaXBhcmFtc3snY2NkbmFtZSd9LCRjZ2lwYXJhbXN7J2NjZHN1Ym5ldCd9LCRj Z2lwYXJhbXN7J0RPVlBOX1NVQk5FVCd9KTsKCX0KCWlmICgkZXJyb3JtZXNzYWdlKSB7CgkgICAg JkhlYWRlcjo6b3BlbmJveCgnMTAwJScsICdMRUZUJywgJExhbmc6OnRyeydlcnJvciBtZXNzYWdl cyd9KTsKCSAgICBwcmludCAiPGNsYXNzIG5hbWU9J2Jhc2UnPiRlcnJvcm1lc3NhZ2UiOwoJICAg IHByaW50ICImbmJzcDs8L2NsYXNzPiI7CgkgICAgJkhlYWRlcjo6Y2xvc2Vib3goKTsJCQoJfQpp ZiAoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgImVkaXQiKXsKCQoJJkhlYWRlcjo6b3BlbmJveCgn MTAwJScsICdMRUZUJywgJExhbmc6OnRyeydjY2QgbW9kaWZ5J30pOwoKCXByaW50IDw8RU5ECiAg ICA8dGFibGUgd2lkdGg9JzEwMCUnIGJvcmRlcj0wPgogICAgPHRyPjxmb3JtIG1ldGhvZD0ncG9z dCc+Cgk8dGQgd2lkdGg9JzEwJScgbm93cmFwPSdub3dyYXAnPiRMYW5nOjp0cnsnY2NkIG5hbWUn fTo8L3RkPjx0ZD48aW5wdXQgdHlwZT0nVEVYVCcgbmFtZT0nY2NkbmFtZScgdmFsdWU9JyRjZ2lw YXJhbXN7J2NjZG5hbWUnfScgLz48L3RkPgoJPHRkIHdpZHRoPSc4JSc+JExhbmc6OnRyeydjY2Qg c3VibmV0J306PC90ZD48dGQ+PGlucHV0IHR5cGU9J1RFWFQnIG5hbWU9J2NjZHN1Ym5ldCcgdmFs dWU9JyRjZ2lwYXJhbXN7J2NjZHN1Ym5ldCd9JyByZWFkb25seSAvPjwvdGQ+PC90cj4KCTx0cj48 dGQgY29sc3Bhbj0nNCcgYWxpZ249J3JpZ2h0Jz48aHI+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFs dWU9JyRMYW5nOjp0cnsnc2F2ZSd9JyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0FDVElP TicgdmFsdWU9J2VkaXRzYXZlJy8+Cgk8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdjY2RuYW1l JyB2YWx1ZT0nJGNnaXBhcmFtc3snY2NkbmFtZSd9Jy8+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFs dWU9JyRMYW5nOjp0cnsnY2FuY2VsJ30nIC8+Cgk8L3RkPjwvdHI+Cgk8L3RhYmxlPjwvZm9ybT4K RU5ECjsKCSZIZWFkZXI6OmNsb3NlYm94KCk7CgoJJkhlYWRlcjo6b3BlbmJveCgnMTAwJScsICdM RUZUJywkTGFuZzo6dHJ7J2NjZCBuZXQnfSApOwoJcHJpbnQgPDxFTkQKICAgIDx0YWJsZSB3aWR0 aD0nMTAwJScgYm9yZGVyPScwJyAgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScxJz4KICAg IDx0cj4KCTx0ZCBjbGFzcz0nYm9sZGJhc2UnIGFsaWduPSdjZW50ZXInPjxiPiRMYW5nOjp0cnsn Y2NkIG5hbWUnfTwvdGQ+PHRkIGNsYXNzPSdib2xkYmFzZScgYWxpZ249J2NlbnRlcic+PGI+JExh bmc6OnRyeyduZXR3b3JrJ308L3RkPjx0ZCBjbGFzcz0nYm9sZGJhc2UnIHdpZHRoPScxNSUnIGFs aWduPSdjZW50ZXInPjxiPiRMYW5nOjp0cnsnY2NkIHVzZWQnfTwvdGQ+PHRkIHdpZHRoPSczJSc+ PC90ZD48dGQgd2lkdGg9JzMlJz48L3RkPjwvdHI+CkVORAo7Cn0KZWxzZXsKCWlmICghIC1lICIv dmFyL3J1bi9vcGVudnBuLnBpZCIpewoJJkhlYWRlcjo6b3BlbmJveCgnMTAwJScsICdMRUZUJywg JExhbmc6OnRyeydjY2QgYWRkJ30pOwoJCXByaW50IDw8RU5EOwoJICAgIDx0YWJsZSB3aWR0aD0n MTAwJScgYm9yZGVyPScwJz4KCSAgICA8dHI+PGZvcm0gbWV0aG9kPSdwb3N0Jz4KCQk8dGQgY29s c3Bhbj0nNCc+JExhbmc6OnRyeydjY2QgaGludCd9PGJyPjxicj48L3RkPjwvdHI+CgkJPHRyPgoJ CTx0ZCB3aWR0aD0nMTAlJyBub3dyYXA9J253cmFwJz4kTGFuZzo6dHJ7J2NjZCBuYW1lJ306PC90 ZD48dGQ+PGlucHV0IHR5cGU9J1RFWFQnIG5hbWU9J2NjZG5hbWUnIHZhbHVlPSckY2dpcGFyYW1z eydjY2RuYW1lJ30nIC8+PC90ZD4KCQk8dGQgd2lkdGg9JzglJz4kTGFuZzo6dHJ7J2NjZCBzdWJu ZXQnfTo8L3RkPjx0ZD48aW5wdXQgdHlwZT0nVEVYVCcgbmFtZT0nY2Nkc3VibmV0JyB2YWx1ZT0n JGNnaXBhcmFtc3snY2Nkc3VibmV0J30nIC8+PC90ZD48L3RyPgoJCTx0cj48dGQgY29sc3Bhbj00 PjxociAvPjwvdGQ+PC90cj48dHI+CgkJPHRkIGNvbHNwYW49JzQnIGFsaWduPSdyaWdodCc+PGlu cHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydjY2QgYWRk J30nIC8+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyRMYW5nOjp0cnsnYWRkJ30nIC8+PGlu cHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nRE9WUE5fU1VCTkVUJyB2YWx1ZT0nJGNnaXBhcmFtc3sn RE9WUE5fU1VCTkVUJ30nLz48L3RkPjwvdHI+CgkJPC90YWJsZT48L2Zvcm0+CkVORAoJCgkmSGVh ZGVyOjpjbG9zZWJveCgpOwp9CgkmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xFRlQnLCRMYW5n Ojp0cnsnY2NkIG5ldCd9ICk7CglwcmludCA8PEVORAogICAgPHRhYmxlIHdpZHRoPScxMDAlJyBi b3JkZXI9JzAnICBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzEnPgogICAgPHRyPgoJPHRk IGNsYXNzPSdib2xkYmFzZScgYWxpZ249J2NlbnRlcicgbm93cmFwPSdub3dyYXAnIHdpZHRoPScy MCUnPjxiPiRMYW5nOjp0cnsnY2NkIG5hbWUnfTwvdGQ+PHRkIGNsYXNzPSdib2xkYmFzZScgYWxp Z249J2NlbnRlcicgd2lkdGg9JzglJz48Yj4kTGFuZzo6dHJ7J25ldHdvcmsnfTwvdGQ+PHRkIGNs YXNzPSdib2xkYmFzZScgd2lkdGg9JzglJyBhbGlnbj0nY2VudGVyJyBub3dyYXA9J25vd3JhcCc+ PGI+JExhbmc6OnRyeydjY2QgdXNlZCd9PC90ZD48dGQgd2lkdGg9JzElJyBhbGlnbj0nY2VudGVy Jz48L3RkPjx0ZCB3aWR0aD0nMSUnIGFsaWduPSdjZW50ZXInPjwvdGQ+PC90cj4KRU5ECjsKfQoJ bXkgJWNjZGNvbmZoYXNoPSgpOwkKCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6 OnN3cm9vdH0vb3Zwbi9jY2QuY29uZiIsIFwlY2NkY29uZmhhc2gpOwkKCW15IEBjY2Rjb25mPSgp OwoJbXkgJGNvdW50PTA7Cglmb3JlYWNoIG15ICRrZXkgKGtleXMgJWNjZGNvbmZoYXNoKSB7CgkJ QGNjZGNvbmY9KCRjY2Rjb25maGFzaHska2V5fVswXSwkY2NkY29uZmhhc2h7JGtleX1bMV0pOwoJ CSRjb3VudCsrOwoJCW15ICRjY2Rob3N0cyA9ICZob3N0c2lubmV0KCRjY2Rjb25mWzBdKTsKCQlp ZiAoJGNvdW50ICUgMil7IHByaW50IiA8dHIgYmdjb2xvcj0nJGNvbG9yeydjb2xvcjIyJ30nPiI7 fQoJCWVsc2V7ICAgICAgICAgICAgcHJpbnQiIDx0ciBiZ2NvbG9yPSckY29sb3J7J2NvbG9yMjAn fSc+Ijt9CgkJcHJpbnQiPHRkPiRjY2Rjb25mWzBdPC90ZD48dGQgYWxpZ249J2NlbnRlcic+JGNj ZGNvbmZbMV08L3RkPjx0ZCBhbGlnbj0nY2VudGVyJz4kY2NkaG9zdHMvIi4oJmNjZG1heGNsaWVu dHMoJGNjZGNvbmZbMV0pKzEpLiI8L3RkPjx0ZD4iOwpwcmludCA8PEVORAoJCTxmb3JtIG1ldGhv ZD0ncG9zdCcgLz4KCQk8aW5wdXQgdHlwZT0naW1hZ2UnIHNyYz0nL2ltYWdlcy9lZGl0LmdpZicg YWxpZ249J21pZGRsZScgYWx0PSRMYW5nOjp0cnsnZWRpdCd9IHRpdGxlPSRMYW5nOjp0cnsnZWRp dCd9IC8+CgkJPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nZWRpdCcv PgoJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2NjZG5hbWUnIHZhbHVlPSckY2NkY29uZlsw XScgLz4KCQk8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdjY2RzdWJuZXQnIHZhbHVlPSckY2Nk Y29uZlsxXScgLz4KCQk8L2Zvcm0+PC90ZD4KCQk8Zm9ybSBtZXRob2Q9J3Bvc3QnIC8+CgkJPHRk PjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0FDVElPTicgdmFsdWU9J2tpbGwnLz4KCQk8aW5w dXQgdHlwZT0naGlkZGVuJyBuYW1lPSdudW1iZXInIHZhbHVlPSckY291bnQnIC8+CgkJPGlucHV0 IHR5cGU9J2hpZGRlbicgbmFtZT0nbmV0JyB2YWx1ZT0nJGNjZGNvbmZbMF0nIC8+CgkJPGlucHV0 IHR5cGU9J2ltYWdlJyBzcmM9Jy9pbWFnZXMvZGVsZXRlLmdpZicgYWxpZ249J21pZGRsZScgYWx0 PSRMYW5nOjp0cnsncmVtb3ZlJ30gdGl0bGU9JExhbmc6OnRyeydyZW1vdmUnfSAvPjwvZm9ybT48 L3RkPjwvdHI+CkVORAo7Cgl9CQoJcHJpbnQgIjwvdGFibGU+PC9mb3JtPiI7CgkmSGVhZGVyOjpj bG9zZWJveCgpOwoJcHJpbnQgIjxkaXYgYWxpZ249J2NlbnRlcic+PGEgaHJlZj0nL2NnaS1iaW4v b3Zwbm1haW4uY2dpJz4kTGFuZzo6dHJ7J2JhY2snfTwvYT48L2Rpdj4iOwoJJkhlYWRlcjo6Y2xv c2ViaWdib3goKTsKCSZIZWFkZXI6OmNsb3NlcGFnZSgpOwoJZXhpdCgwKTsKCQojRU5EIENDRAoK IyMjCiMjIyBPcGVudnBuIENvbm5lY3Rpb25zIFN0YXRpc3RpY3MKIyMjCn0gZWxzaWYgKCRjZ2lw YXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsnb3ZwbiBjb24gc3RhdCd9KSB7CgkmSGVhZGVy OjpzaG93aHR0cGhlYWRlcnMoKTsKCSZIZWFkZXI6Om9wZW5wYWdlKCRMYW5nOjp0cnsnb3ZwbiBj b24gc3RhdCd9LCAxLCAnJyk7CgkmSGVhZGVyOjpvcGVuYmlnYm94KCcxMDAlJywgJ0xFRlQnLCAn JywgJycpOwogICAgJkhlYWRlcjo6b3BlbmJveCgnMTAwJScsICdMRUZUJywgJExhbmc6OnRyeydv dnBuIGNvbiBzdGF0J30pOwoKIwojCTx0ZD48Yj4kTGFuZzo6dHJ7J3Byb3RvY29sJ308L2I+PC90 ZD4KIyBwcm90b2NvbCB0ZW1wIHJlbW92ZWQgCiAgICBwcmludCA8PEVORAogICAgPHRhYmxlIHdp ZHRoPScxMDAlJyBib3JkZXI9JzAnIGNlbGxwYWRkaW5nPScyJyBjZWxsc3BhY2luZz0nMCc+CiAg ICA8dHI+Cgk8dGQ+PGI+JExhbmc6OnRyeydjb21tb24gbmFtZSd9PC9iPjwvdGQ+Cgk8dGQ+PGI+ JExhbmc6OnRyeydyZWFsIGFkZHJlc3MnfTwvYj48L3RkPgoJPHRkPjxiPiRMYW5nOjp0cnsndmly dHVhbCBhZGRyZXNzJ308L2I+PC90ZD4KCTx0ZD48Yj4kTGFuZzo6dHJ7J2xvZ2VkIGluIGF0J308 L2I+PC90ZD4KCTx0ZD48Yj4kTGFuZzo6dHJ7J2J5dGVzIHNlbnQnfTwvYj48L3RkPgoJPHRkPjxi PiRMYW5nOjp0cnsnYnl0ZXMgcmVjZWl2ZWQnfTwvYj48L3RkPgoJPHRkPjxiPiRMYW5nOjp0cnsn bGFzdCBhY3Rpdml0eSd9PC9iPjwvdGQ+CiAgICA8L3RyPgpFTkQKOwoJbXkgJGZpbGVuYW1lID0g Ii92YXIvbG9nL292cG5zZXJ2ZXIubG9nIjsKCW9wZW4oRklMRSwgJGZpbGVuYW1lKSBvciBkaWUg J1VuYWJsZSB0byBvcGVuIGNvbmZpZyBmaWxlLic7CglteSBAY3VycmVudCA9IDxGSUxFPjsKCWNs b3NlKEZJTEUpOwoJbXkgQHVzZXJzID0oKTsKCW15ICRzdGF0dXM7CglteSAkdWlkID0gMDsKCW15 ICRjbjsKCW15IEBtYXRjaCA9ICgpOwoJbXkgJHByb3RvID0gInVkcCI7CglteSAkYWRkcmVzczsK CW15ICV1c2VybG9va3VwID0gKCk7Cglmb3JlYWNoIG15ICRsaW5lIChAY3VycmVudCkKCXsKCSAg ICBjaG9tcCgkbGluZSk7CgkgICAgaWYgKCAkbGluZSA9fiAvXlVwZGF0ZWQsKC4rKS8pewoJCUBt YXRjaCA9IHNwbGl0KCAvXlVwZGF0ZWQsKC4rKS8sICRsaW5lKTsgCgkJJHN0YXR1cyA9ICRtYXRj aFsxXTsKCSAgICB9CiNnaWFuCSAgICAKCSAgICBpZiAoICRsaW5lID1+IC9eKC4rKSwoXGQrXC5c ZCtcLlxkK1wuXGQrXDpcZCspLChcZCspLChcZCspLCguKykvKSB7CgkJQG1hdGNoID0gc3BsaXQo bS9eKC4rKSwoXGQrXC5cZCtcLlxkK1wuXGQrXDpcZCspLChcZCspLChcZCspLCguKykvLCAkbGlu ZSk7CgkJaWYgKCRtYXRjaFsxXSBuZSAiQ29tbW9uIE5hbWUiKSB7CgkgICAgCSAgICAkY24gPSAk bWF0Y2hbMV07CgkJICAgICR1c2VybG9va3VweyRtYXRjaFsyXX0gPSAkdWlkOwoJCSAgICAkdXNl cnNbJHVpZF17J0NvbW1vbk5hbWUnfSA9ICRtYXRjaFsxXTsKCQkgICAgJHVzZXJzWyR1aWRdeydS ZWFsQWRkcmVzcyd9ID0gJG1hdGNoWzJdOwoJCSAgICAkdXNlcnNbJHVpZF17J0J5dGVzUmVjZWl2 ZWQnfSA9ICZzaXplZm9ybWF0KCRtYXRjaFszXSk7CgkJICAgICR1c2Vyc1skdWlkXXsnQnl0ZXNT ZW50J30gPSAmc2l6ZWZvcm1hdCgkbWF0Y2hbNF0pOwoJCSAgICAkdXNlcnNbJHVpZF17J1NpbmNl J30gPSAkbWF0Y2hbNV07CgkJICAgICR1c2Vyc1skdWlkXXsnUHJvdG8nfSA9ICRwcm90bzsKCQkg ICAgJHVpZCsrOwoJCX0gICAgCgkgICAgfQoJICAgIGlmICggJGxpbmUgPX4gL14oXGQrXC5cZCtc LlxkK1wuXGQrKSwoLispLChcZCtcLlxkK1wuXGQrXC5cZCtcOlxkKyksKC4rKS8pIHsKCQlAbWF0 Y2ggPSBzcGxpdChtL14oXGQrXC5cZCtcLlxkK1wuXGQrKSwoLispLChcZCtcLlxkK1wuXGQrXC5c ZCtcOlxkKyksKC4rKS8sICRsaW5lKTsKCQlpZiAoJG1hdGNoWzFdIG5lICJWaXJ0dWFsIEFkZHJl c3MiKSB7CgkJICAgICRhZGRyZXNzID0gJG1hdGNoWzNdOwoJCSAgICAjZmluZCB0aGUgdWlkIGlu IHRoZSBsb29rdXAgdGFibGUKCQkgICAgJHVpZCA9ICR1c2VybG9va3VweyRhZGRyZXNzfTsKCQkg ICAgJHVzZXJzWyR1aWRdeydWaXJ0dWFsQWRkcmVzcyd9ID0gJG1hdGNoWzFdOwoJCSAgICAkdXNl cnNbJHVpZF17J0xhc3RSZWYnfSA9ICRtYXRjaFs0XTsKCQl9CgkgICAgfQoJfQoJbXkgJHVzZXIy ID0gQHVzZXJzOwoJaWYgKCR1c2VyMiA+PSAxKXsKICAgIAkgICAgZm9yIChteSAkaWR4ID0gMTsg JGlkeCA8PSAkdXNlcjI7ICRpZHgrKyl7CgkJCQkJCWlmICgkaWR4ICUgMikgewoJCSAgICAJCQlw cmludCAiPHRyIGJnY29sb3I9JyRjb2xvcnsnY29sb3IyMCd9Jz5cbiI7CgkgICAgCQkJfSBlbHNl IHsKCQkgICAgCQkJcHJpbnQgIjx0ciBiZ2NvbG9yPSckY29sb3J7J2NvbG9yMjInfSc+XG4iOwoJ CQkJCQl9CgkJCQkJCXByaW50ICI8dGQgYWxpZ249J2xlZnQnPiR1c2Vyc1skaWR4LTFdeydDb21t b25OYW1lJ308L3RkPiI7CgkJCQkJCXByaW50ICI8dGQgYWxpZ249J2xlZnQnPiR1c2Vyc1skaWR4 LTFdeydSZWFsQWRkcmVzcyd9PC90ZD4iOwoJCQkJCQlwcmludCAiPHRkIGFsaWduPSdsZWZ0Jz4k dXNlcnNbJGlkeC0xXXsnVmlydHVhbEFkZHJlc3MnfTwvdGQ+IjsKCQkJCQkJcHJpbnQgIjx0ZCBh bGlnbj0nbGVmdCc+JHVzZXJzWyRpZHgtMV17J1NpbmNlJ308L3RkPiI7CgkJCQkJCXByaW50ICI8 dGQgYWxpZ249J2xlZnQnPiR1c2Vyc1skaWR4LTFdeydCeXRlc1NlbnQnfTwvdGQ+IjsKCQkJCQkJ cHJpbnQgIjx0ZCBhbGlnbj0nbGVmdCc+JHVzZXJzWyRpZHgtMV17J0J5dGVzUmVjZWl2ZWQnfTwv dGQ+IjsKCQkJCQkJcHJpbnQgIjx0ZCBhbGlnbj0nbGVmdCc+JHVzZXJzWyRpZHgtMV17J0xhc3RS ZWYnfTwvdGQ+IjsKIwkJICAgICAgICBwcmludCAiPHRkIGFsaWduPSdsZWZ0Jz4kdXNlcnNbJGlk eC0xXXsnUHJvdG8nfTwvdGQ+IjsKCSAgICB9Cgl9ICAgICAgICAKCQoJcHJpbnQgIjwvdGFibGU+ IjsKCXByaW50IDw8RU5ECgk8dGFibGUgd2lkdGg9JzEwMCUnIGJvcmRlcj0nMCcgY2VsbHBhZGRp bmc9JzInIGNlbGxzcGFjaW5nPScwJz4KCTx0cj48dGQ+PC90ZD48L3RyPgoJPHRyPjx0ZD48L3Rk PjwvdHI+Cgk8dHI+PHRkPjwvdGQ+PC90cj4KCTx0cj48dGQ+PC90ZD48L3RyPgoJPHRyPjx0ZCBh bGlnbj0nY2VudGVyJyA+JExhbmc6OnRyeyd0aGUgc3RhdGlzdGljcyB3ZXJlIGxhc3QgdXBkYXRl ZCBhdCd9IDxiPiRzdGF0dXM8L2I+PC90ZD48L3RyPgoJPC90YWJsZT4KRU5ECjsJCgkmSGVhZGVy OjpjbG9zZWJveCgpOwoJcHJpbnQgIjxkaXYgYWxpZ249J2NlbnRlcic+PGEgaHJlZj0nL2NnaS1i aW4vb3Zwbm1haW4uY2dpJz4kTGFuZzo6dHJ7J2JhY2snfTwvYT48L2Rpdj4iOwoJJkhlYWRlcjo6 Y2xvc2ViaWdib3goKTsKCSZIZWFkZXI6OmNsb3NlcGFnZSgpOwoJZXhpdCgwKTsKCiMjIwojIyMg RG93bmxvYWQgQ2VydGlmaWNhdGUKIyMjCn0gZWxzaWYgKCRjZ2lwYXJhbXN7J0FDVElPTid9IGVx ICRMYW5nOjp0cnsnZG93bmxvYWQgY2VydGlmaWNhdGUnfSkgewogICAgJkdlbmVyYWw6OnJlYWRo YXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hh c2gpOwoKICAgIGlmICggLWYgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRjb25maWdo YXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXWNlcnQucGVtIikgewoJcHJpbnQgIkNvbnRlbnQtRGlz cG9zaXRpb246IGZpbGVuYW1lPSIgLiAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMV0g LiAiY2VydC5wZW1cclxuIjsKCXByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0 LXN0cmVhbVxyXG5cclxuIjsKCXByaW50IGAvYmluL2NhdCAke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jZXJ0cy8kY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMV1jZXJ0LnBlbWA7CglleGl0 ICgwKTsKICAgIH0KCiMjIwojIyMgRW5hYmxlL0Rpc2FibGUgY29ubmVjdGlvbgojIyMKCn0gZWxz aWYgKCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsndG9nZ2xlIGVuYWJsZSBkaXNh YmxlJ30pIHsKICAgIAogICAgJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9zZXR0aW5ncyIsIFwldnBuc2V0dGluZ3MpOwogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJy YXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hhc2gpOwoK ICAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX0pIHsKCSAgIGlmICgkY29uZmln aGFzaHskY2dpcGFyYW1zeydLRVknfX1bMF0gZXEgJ29mZicpIHsKCSAgICAkY29uZmlnaGFzaHsk Y2dpcGFyYW1zeydLRVknfX1bMF0gPSAnb24nOwoJICAgICZHZW5lcmFsOjp3cml0ZWhhc2hhcnJh eSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7Cgkg ICAgIyZ3cml0ZXNlcnZlcmNvbmYoKTsKIwkgICAgaWYgKCR2cG5zZXR0aW5nc3snRU5BQkxFRCd9 IGVxICdvbicgfHwKIwkJJHZwbnNldHRpbmdzeydFTkFCTEVEX0JMVUUnfSBlcSAnb24nKSB7CiMJ IAlzeXN0ZW0oJy91c3IvbG9jYWwvYmluL2lwc2VjY3RybCcsICdTJywgJGNnaXBhcmFtc3snS0VZ J30pOwojCSAgICB9Cgl9IGVsc2UgewoJICAgICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9 fVswXSA9ICdvZmYnOwojCSAgICBpZiAoJHZwbnNldHRpbmdzeydFTkFCTEVEJ30gZXEgJ29uJyB8 fAojCQkkdnBuc2V0dGluZ3N7J0VOQUJMRURfQkxVRSd9IGVxICdvbicpIHsKIwkJc3lzdGVtKCcv dXNyL2xvY2FsL2Jpbi9pcHNlY2N0cmwnLCAnRCcsICRjZ2lwYXJhbXN7J0tFWSd9KTsKIwkgICAg fQoJICAgICZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4v b3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CgkgICAgIyZ3cml0ZXNlcnZlcmNvbmYoKTsKCX0K ICAgIH0gZWxzZSB7CgkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGtleSd9Owog ICAgfQoKIyMjCiMjIyBSZXN0YXJ0IGNvbm5lY3Rpb24KIyMjCn0gZWxzaWYgKCRjZ2lwYXJhbXN7 J0FDVElPTid9IGVxICRMYW5nOjp0cnsncmVzdGFydCd9KSB7CiAgICAmR2VuZXJhbDo6cmVhZGhh c2goIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL3NldHRpbmdzIiwgXCV2cG5zZXR0aW5ncyk7CiAg ICAmR2VuZXJhbDo6cmVhZGhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNv bmZpZyIsIFwlY29uZmlnaGFzaCk7CgogICAgaWYgKCRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tF WSd9fSkgewojCWlmICgkdnBuc2V0dGluZ3N7J0VOQUJMRUQnfSBlcSAnb24nIHx8CiMJICAgICR2 cG5zZXR0aW5nc3snRU5BQkxFRF9CTFVFJ30gZXEgJ29uJykgewojCSAgICBzeXN0ZW0oJy91c3Iv bG9jYWwvYmluL2lwc2VjY3RybCcsICdTJywgJGNnaXBhcmFtc3snS0VZJ30pOwojCX0KICAgIH0g ZWxzZSB7CgkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGtleSd9OwogICAgfQoK IyMjCiMjIyBSZW1vdmUgY29ubmVjdGlvbgojIyMKfSBlbHNpZiAoJGNnaXBhcmFtc3snQUNUSU9O J30gZXEgJExhbmc6OnRyeydyZW1vdmUnfSkgewogICAgJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwldnBuc2V0dGluZ3MpOwogICAgJkdlbmVy YWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBc JWNvbmZpZ2hhc2gpOwoKICAgIGlmICgkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX0pIHsK IwlpZiAoJHZwbnNldHRpbmdzeydFTkFCTEVEJ30gZXEgJ29uJyB8fAojCSAgICAkdnBuc2V0dGlu Z3N7J0VOQUJMRURfQkxVRSd9IGVxICdvbicpIHsKIwkgICAgc3lzdGVtKCcvdXNyL2xvY2FsL2Jp bi9pcHNlY2N0cmwnLCAnRCcsICRjZ2lwYXJhbXN7J0tFWSd9KTsKIwl9Cgl1bmxpbmsgKCIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1b MV1jZXJ0LnBlbSIpOwoJdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvJGNv bmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzFdLnAxMiIpOwoJZGVsZXRlICRjb25maWdoYXNo eyRjZ2lwYXJhbXN7J0tFWSd9fTsKCSZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CgkjJndyaXRlc2VydmVy Y29uZigpOwogICAgfSBlbHNlIHsKCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQg a2V5J307CiAgICB9CiN0ZXN0MzMKCiMjIwojIyMgQ2hvb3NlIGJldHdlZW4gYWRkaW5nIGEgaG9z dC1uZXQgb3IgbmV0LW5ldCBjb25uZWN0aW9uCiMjIwoKIyMjCiMgbS5hLmQgbmV0Mm5ldAojIyMK Cn0gZWxzaWYgKCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsnYWRkJ30gJiYgJGNn aXBhcmFtc3snVFlQRSd9IGVxICcnKSB7CgkmR2VuZXJhbDo6cmVhZGhhc2goIiR7R2VuZXJhbDo6 c3dyb290fS9vdnBuL3NldHRpbmdzIiwgXCV2cG5zZXR0aW5ncyk7CgkmSGVhZGVyOjpzaG93aHR0 cGhlYWRlcnMoKTsKCSZIZWFkZXI6Om9wZW5wYWdlKCRMYW5nOjp0cnsndnBuIGNvbmZpZ3VyYXRp b24gbWFpbid9LCAxLCAnJyk7CgkmSGVhZGVyOjpvcGVuYmlnYm94KCcxMDAlJywgJ0xFRlQnLCAn JywgJycpOwoJJkhlYWRlcjo6b3BlbmJveCgnMTAwJScsICdMRUZUJywgJExhbmc6OnRyeydjb25u ZWN0aW9uIHR5cGUnfSk7CgppZiAoIC1zICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5n cyIpIHsKCglwcmludCA8PEVORAoJICAgIDxiPiRMYW5nOjp0cnsnY29ubmVjdGlvbiB0eXBlJ306 PC9iPjxiciAvPgoJICAgIDx0YWJsZSBib3JkZXI9JzAnIHdpZHRoPScxMDAlJz48Zm9ybSBtZXRo b2Q9J3Bvc3QnIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgoJICAgIDx0cj48dGQ+PGlu cHV0IHR5cGU9J3JhZGlvJyBuYW1lPSdUWVBFJyB2YWx1ZT0naG9zdCcgY2hlY2tlZCAvPjwvdGQ+ CgkJPHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J2hvc3QgdG8gbmV0IHZwbid9PC90ZD48L3Ry PgoJICAgIDx0cj48dGQ+PGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSdUWVBFJyB2YWx1ZT0nbmV0 JyAvPjwvdGQ+CgkJPHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J25ldCB0byBuZXQgdnBuJ308 L3RkPjwvdHI+CiAgCQk8dHI+PHRkPjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0nVFlQRScgdmFs dWU9J25ldDJuZXQnIC8+PC90ZD4JCQoJCTx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeyduZXQg dG8gbmV0IHZwbid9IChVcGxvYWQgQ2xpZW50IFBhY2thZ2UpPC90ZD48L3RyPgoJICA8dHI+PHRk PiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSdiYXNlJz48aW5wdXQgdHlwZT0nZmlsZScgbmFtZT0nRkgn IHNpemU9JzMwJz48L3RkPjwvdHI+CgkgIDx0cj48dGQ+Jm5ic3A7PC90ZD48dGQ+SW1wb3J0IENv bm5lY3Rpb24gTmFtZSA8aW1nIHNyYz0nL2Jsb2IuZ2lmJyAvPjwvdGQ+PC90cj4KICAgIDx0cj48 dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9J2Jhc2UnPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdu Mm5uYW1lJyBzaXplPSczMCc+RGVmYXVsdCA6IENsaWVudCBQYWNrYWdlbmFtZTwvdGQ+PC90cj4K CSAgPHRyPjx0ZCBjb2xzcGFuPSczJz48aHIgLz48L3RkPjwvdHI+CiAgICA8dHI+PHRkIGFsaWdu PSdyaWdodCcgY29sc3Bhbj0nMyc+PGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2 YWx1ZT0nJExhbmc6OnRyeydhZGQnfScgLz48L3RkPjwvdHI+CgkgIDx0cj48dGQgY2xhc3M9J2Jh c2UnIGNvbHNwYW49JzMnIGFsaWduPSdsZWZ0Jz48aW1nIHNyYz0nL2Jsb2IuZ2lmJyBhbHQ9Jyon IC8+Jm5ic3A7JExhbmc6OnRyeyd0aGlzIGZpZWxkIG1heSBiZSBibGFuayd9PC90ZD48L3RyPgoJ ICAgIDwvZm9ybT48L3RhYmxlPgpFTkQKCTsKCQoKfSBlbHNlIHsKCXByaW50IDw8RU5ECgkJICAg IDxiPiRMYW5nOjp0cnsnY29ubmVjdGlvbiB0eXBlJ306PC9iPjxiciAvPgoJICAgIDx0YWJsZSBi b3JkZXI9JzAnIHdpZHRoPScxMDAlJz48Zm9ybSBtZXRob2Q9J3Bvc3QnIEVOQ1RZUEU9Im11bHRp cGFydC9mb3JtLWRhdGEiPgoJICAgIDx0cj48dGQ+PGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSdU WVBFJyB2YWx1ZT0naG9zdCcgY2hlY2tlZCAvPjwvdGQ+IDx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6 OnRyeydob3N0IHRvIG5ldCB2cG4nfTwvdGQ+PC90cj4KCSAgICA8dHI+PHRkIGFsaWduPSdyaWdo dCcgY29sc3BhbiczJz48aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdBQ1RJT04nIHZhbHVlPSck TGFuZzo6dHJ7J2FkZCd9JyAvPjwvdGQ+PC90cj4KCSAgICA8L2Zvcm0+PC90YWJsZT4KRU5ECgk7 Cgp9CgoJJkhlYWRlcjo6Y2xvc2Vib3goKTsKCSZIZWFkZXI6OmNsb3NlYmlnYm94KCk7CgkmSGVh ZGVyOjpjbG9zZXBhZ2UoKTsKCWV4aXQgKDApOwoKIyMjCiMgbS5hLmQgbmV0Mm5ldAojIyMKCn0g IGVsc2lmICgoJGNnaXBhcmFtc3snQUNUSU9OJ30gZXEgJExhbmc6OnRyeydhZGQnfSkgJiYgKCRj Z2lwYXJhbXN7J1RZUEUnfSBlcSAnbmV0Mm5ldCcpKXsKCglteSBAZmlyZW4ybmNvbmY7CglteSBA Y29uZmRldGFpbHM7CglteSAkdXBsY29uZmZpbGVuYW1lID0nJzsKCW15ICR1cGxjb25mZmlsZW5h bWUyID0nJzsKCW15ICR1cGxwMTJuYW1lID0gJyc7CglteSAkdXBscDEybmFtZTIgPSAnJzsKCW15 IEByZW1fc3VibmV0OwoJbXkgQHJlbV9zdWJuZXQyOwoJbXkgQHRtcG9zdXBuZXQzOwkKCW15ICRr ZXk7CglteSBAbjJubmFtZTsKCgkmR2VuZXJhbDo6cmVhZGhhc2hhcnJheSgiJHtHZW5lcmFsOjpz d3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CQoKIyBDaGVjayBpZiBhIGZp bGUgaXMgdXBsb2FkZWQKCglpZiAocmVmICgkY2dpcGFyYW1zeydGSCd9KSBuZSAnRmgnKSB7CgkJ JGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsndGhlcmUgd2FzIG5vIGZpbGUgdXBsb2FkJ307CgkJ Z290byBOMk5fRVJST1I7CiAgICB9CgojIE1vdmUgdXBsb2FkZWQgSVBmaXJlIG4ybiBwYWNrYWdl IHRvIHRlbXBvcmFyeSBmaWxlCgogICAgKG15ICRmaCwgbXkgJGZpbGVuYW1lKSA9IHRlbXBmaWxl KCApOwogICAgaWYgKGNvcHkgKCRjZ2lwYXJhbXN7J0ZIJ30sICRmaCkgIT0gMSkgewoJCSRlcnJv cm1lc3NhZ2UgPSAkITsKCQlnb3RvIE4yTl9FUlJPUjsKICAgIH0KCglteSAkemlwID0gQXJjaGl2 ZTo6WmlwLT5uZXcoKTsKCW15ICR6aXBOYW1lID0gJGZpbGVuYW1lOwoJbXkgJHN0YXR1cyA9ICR6 aXAtPnJlYWQoICR6aXBOYW1lICk7CglpZiAoJHN0YXR1cyAhPSBBWl9PSykgeyAgIAoJCSRlcnJv cm1lc3NhZ2UgPSAiUmVhZCBvZiAkemlwTmFtZSBmYWlsZWRcbiI7CgkJZ290byBOMk5fRVJST1I7 Cgl9CgoJbXkgJHRlbXBkaXIgPSB0ZW1wZGlyKCBDTEVBTlVQID0+IDEgKTsKCW15IEBmaWxlcyA9 ICR6aXAtPm1lbWJlck5hbWVzKCk7Cglmb3IoQGZpbGVzKSB7CgkkemlwLT5leHRyYWN0TWVtYmVy V2l0aG91dFBhdGhzKCRfLCIkdGVtcGRpci8kXyIpOwoJfQoJbXkgJGNvdW50ZmlsZXMgPSBAZmls ZXM7CgojIENoZWNrIGlmIHdlIGhhdmUgbm90IG1vcmUgdGhlbiAyIGZpbGVzCgoJaWYgKCAkY291 bnRmaWxlcyA9PSAyKXsKCQlmb3JlYWNoIChAZmlsZXMpewoJCQlpZiAoICRfID1+IC8uY29uZiQv KXsKCQkJCSR1cGxjb25mZmlsZW5hbWUgPSAkXzsKCQkJfQoJCQlpZiAoICRfID1+IC8ucDEyJC8p ewoJCQkJJHVwbHAxMm5hbWUgPSAkXzsKCQkJfQkJCQoJCX0KCQlpZiAoKCR1cGxjb25mZmlsZW5h bWUgZXEgJycpIHx8ICgkdXBscDEybmFtZSBlcSAnJykpewoJCQkkZXJyb3JtZXNzYWdlID0gIkVp dGhlciBubyAqLmNvbmYgb3Igbm8gKi5wMTIgZmlsZSBmb3VuZFxuIjsKCQkJZ290byBOMk5fRVJS T1I7CgkJfQoKCQlvcGVuKEZJTEUsICIkdGVtcGRpci8kdXBsY29uZmZpbGVuYW1lIikgb3IgZGll ICdVbmFibGUgdG8gb3BlbiouY29uZiBmaWxlJzsKCQlAZmlyZW4ybmNvbmYgPSA8RklMRT47CgkJ Y2xvc2UgKEZJTEUpOwoJCWNob21wKEBmaXJlbjJuY29uZik7CgoJfSBlbHNlIHsKCgkJJGVycm9y bWVzc2FnZSA9ICJGaWxlY291bnQgZG9lcyBub3QgbWF0Y2ggb25seSAyIGZpbGVzIGFyZSBhbGxv d2VkXG4iOwoJCWdvdG8gTjJOX0VSUk9SOwoJfQoKIyMjCiMgbS5hLmQgbmV0Mm5ldAojIyMKICAK IGlmICgkY2dpcGFyYW1zeyduMm5uYW1lJ30gbmUgJycpewoKICAkdXBsY29uZmZpbGVuYW1lMiA9 ICIkY2dpcGFyYW1zeyduMm5uYW1lJ30uY29uZiI7IAogICR1cGxwMTJuYW1lMiA9ICIkY2dpcGFy YW1zeyduMm5uYW1lJ30ucDEyIjsgCiAgJG4ybm5hbWVbMF0gPSAkY2dpcGFyYW1zeyduMm5uYW1l J307CiAgbXkgQG4ybm5hbWUyID0gc3BsaXQoL1wuLywkdXBsY29uZmZpbGVuYW1lKTsKICAkbjJu bmFtZTJbMF0gPX4gcy9cbnxcci8vZzsKICBteSAkaW5wdXQxID0gIiR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL2NlcnRzLyR1cGxwMTJuYW1lIjsKCW15ICRvdXRwdXQxID0gIiR7R2VuZXJhbDo6c3dy b290fS9vdnBuL2NlcnRzLyR1cGxwMTJuYW1lMiI7CglteSAkaW5wdXQyID0gIiRuMm5uYW1lMlsw XW4ybiI7CiAgbXkgJG91dHB1dDIgPSAiJG4ybm5hbWVbMF1uMm4iOwogIG15ICRmaWxlbmFtZSA9 ICIkdGVtcGRpci8kdXBsY29uZmZpbGVuYW1lIjsKICBvcGVuKEZJTEUsICI8ICRmaWxlbmFtZSIp IG9yIGRpZSAnVW5hYmxlIHRvIG9wZW4gY29uZmlnIGZpbGUuJzsKCW15IEBjdXJyZW50ID0gPEZJ TEU+OwoJY2xvc2UoRklMRSk7Cglmb3JlYWNoIChAY3VycmVudCkge3MvJGlucHV0MS8kb3V0cHV0 MS9nO30KCWZvcmVhY2ggKEBjdXJyZW50KSB7cy8kaW5wdXQyLyRvdXRwdXQyL2c7fQogIG9wZW4g KE9VVCwgIj4gJGZpbGVuYW1lIikgfHwgZGllICdVbmFibGUgdG8gb3BlbiBjb25maWcgZmlsZS4n OwogIHByaW50IE9VVCBAY3VycmVudDsKICBjbG9zZSBPVVQ7CgogICAgfWVsc2V7CiAgICAkdXBs Y29uZmZpbGVuYW1lMiA9ICAkdXBsY29uZmZpbGVuYW1lOwogICAgJHVwbHAxMm5hbWUyID0gJHVw bHAxMm5hbWU7CiAgICBAbjJubmFtZSA9IHNwbGl0KC9cLi8sJHVwbGNvbmZmaWxlbmFtZSk7CiAg ICAkbjJubmFtZVswXSA9fiBzL1xufFxyLy9nOwogICB9IAogICAgdW5sZXNzKC1kICIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyIpe21rZGlyICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9uMm5jb25mIiwgMDc1NSBvciBkaWUgIlVuYWJsZSB0byBjcmVhdGUgZGlyICQhIjt9CiAgICB1 bmxlc3MoLWQgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJG4ybm5hbWVbMF0iKXtt a2RpciAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kbjJubmFtZVswXSIsIDA3NzAg b3IgZGllICJVbmFibGUgdG8gY3JlYXRlIGRpciAkISI7fSAgIAoKCW1vdmUoIiR0ZW1wZGlyLyR1 cGxjb25mZmlsZW5hbWUiLCAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kbjJubmFt ZVswXS8kdXBsY29uZmZpbGVuYW1lMiIpOwoKCWlmICgkPyBuZSAwKSB7CgkgICAgJGVycm9ybWVz c2FnZSA9ICIqLmNvbmYgbW92ZSBmYWlsZWQ6ICQhIjsKCSAgICB1bmxpbmsgKCRmaWxlbmFtZSk7 CgkgICAgZ290byBOMk5fRVJST1I7Cgl9CgkKCW1vdmUoIiR0ZW1wZGlyLyR1cGxwMTJuYW1lIiwg IiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyR1cGxwMTJuYW1lMiIpOwoJY2htb2QgMDYw MCwgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyR1cGxwMTJuYW1lIjsKCQoJaWYgKCQ/ IG5lIDApIHsKCSAgICAkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnY2VydGlmaWNhdGUgZmls ZSBtb3ZlIGZhaWxlZCd9OiAkISI7CgkgICAgdW5saW5rICgkZmlsZW5hbWUpOwoJICAgIGdvdG8g TjJOX0VSUk9SOwoJfQkKCQpteSAkY29tcGx6b2FjdGl2ZTsKbXkgJG1zc2ZpeGFjdGl2ZTsKbXkg JG4ybmZyYWdtZW50OwpteSBAbjJucHJvdG8yID0gc3BsaXQoLyAvLCAoZ3JlcCB7IC9ecHJvdG8v IH0gQGZpcmVuMm5jb25mKVswXSk7Cm15IEBuMm5wcm90byA9IHNwbGl0KC8tLywgJG4ybnByb3Rv MlsxXSk7Cm15IEBuMm5wb3J0ID0gc3BsaXQoLyAvLCAoZ3JlcCB7IC9ecG9ydC8gfSBAZmlyZW4y bmNvbmYpWzBdKTsKbXkgQG4ybnR1bm10dSA9IHNwbGl0KC8gLywgKGdyZXAgeyAvXnR1bi1tdHUv IH0gQGZpcmVuMm5jb25mKVswXSk7Cm15IEBuMm5jb21wbHpvID0gZ3JlcCB7IC9eY29tcC1sem8v IH0gQGZpcmVuMm5jb25mOwppZiAoJG4ybmNvbXBsem9bMF0gPX4gL2NvbXAtbHpvLyl7JGNvbXBs em9hY3RpdmUgPSAib24iO30gZWxzZSB7JGNvbXBsem9hY3RpdmUgPSAib2ZmIjt9CQpteSBAbjJu bXNzZml4ICA9IGdyZXAgeyAvXm1zc2ZpeC8gfSBAZmlyZW4ybmNvbmY7CmlmICgkbjJubXNzZml4 WzBdID1+IC9tc3NmaXgvKXskbXNzZml4YWN0aXZlID0gIm9uIjt9IGVsc2UgeyRtc3NmaXhhY3Rp dmUgPSAib2ZmIjt9CiNteSBAbjJubXNzZml4ID0gc3BsaXQoLyAvLCAoZ3JlcCB7IC9ebXNzZml4 LyB9IEBmaXJlbjJuY29uZilbMF0pOwpteSBAbjJuZnJhZ21lbnQgPSBzcGxpdCgvIC8sIChncmVw IHsgL15mcmFnbWVudC8gfSBAZmlyZW4ybmNvbmYpWzBdKTsKbXkgQG4ybnJlbW90ZSA9IHNwbGl0 KC8gLywgKGdyZXAgeyAvXnJlbW90ZS8gfSBAZmlyZW4ybmNvbmYpWzBdKTsKbXkgQG4ybm92cG5z dWJhbGwgPSBzcGxpdCgvIC8sIChncmVwIHsgL15pZmNvbmZpZy8gfSBAZmlyZW4ybmNvbmYpWzBd KTsKbXkgQG4ybm92cG5zdWIgPSAgc3BsaXQoL1wuLywkbjJub3ZwbnN1YmFsbFsxXSk7Cm15IEBu Mm5yZW1zdWIgPSBzcGxpdCgvIC8sIChncmVwIHsgL15yb3V0ZS8gfSBAZmlyZW4ybmNvbmYpWzBd KTsKbXkgQG4ybm1nbXQgPSAgc3BsaXQoLyAvLCAoZ3JlcCB7IC9ebWFuYWdlbWVudC8gfSBAZmly ZW4ybmNvbmYpWzBdKTsKbXkgQG4ybmxvY2Fsc3ViICA9IHNwbGl0KC8gLywgKGdyZXAgeyAvXiMg cmVtc3ViLyB9IEBmaXJlbjJuY29uZilbMF0pOwoKCiMjIwojIG0uYS5kIGRlbGV0ZSBDUiBhbmQg TEYgZnJvbSBhcnJheXMgZm9yIHRoaXMgY2hvbXAgZG9lc250IHdvcmsKIyMjCgokbjJucmVtb3Rl WzFdID1+IHMvXG58XHIvL2c7CiRuMm5vdnBuc3ViWzBdID1+IHMvXG58XHIvL2c7CiRuMm5vdnBu c3ViWzFdID1+IHMvXG58XHIvL2c7CiRuMm5vdnBuc3ViWzJdID1+IHMvXG58XHIvL2c7CiRuMm5w cm90b1swXSA9fiBzL1xufFxyLy9nOwokbjJucG9ydFsxXSA9fiBzL1xufFxyLy9nOwokbjJudHVu bXR1WzFdID1+IHMvXG58XHIvL2c7CiRuMm5yZW1zdWJbMV0gPX4gcy9cbnxcci8vZzsKJG4ybnJl bXN1YlsyXSA9fiBzL1xufFxyLy9nOwokbjJubG9jYWxzdWJbMl0gPX4gcy9cbnxcci8vZzsKJG4y bmZyYWdtZW50WzFdID1+IHMvXG58XHIvL2c7CiRuMm5tZ210WzJdID1+IHMvXG58XHIvL2c7CmNo b21wICgkY29tcGx6b2FjdGl2ZSk7CmNob21wICgkbXNzZml4YWN0aXZlKTsKCiMjIwojIG0uYS5k IG5ldDJuZXQKIyMjCgojIyMKIyBDaGVjayBpZiB0aGVyZSBpcyBubyBvdGhlciBlbnRyeSB3aXRo IHRoaXMgbmFtZQojIyMKCglmb3JlYWNoIG15ICRka2V5IChrZXlzICVjb25maWdoYXNoKSB7CgkJ aWYgKCRjb25maWdoYXNoeyRka2V5fVsxXSBlcSAkbjJubmFtZVswXSkgewoJCQkkZXJyb3JtZXNz YWdlID0gJExhbmc6OnRyeydhIGNvbm5lY3Rpb24gd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlz dHMnfTsKCQkJdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kbjJubmFt ZVswXS8kbjJubmFtZVswXS5jb25mIikgb3IgZGllICJSZW1vdmluZyBDb25maWdmaWxlIGZhaWw6 ICQhIjsKCSAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kbjJubmFt ZVswXS5wMTIiKSBvciBkaWUgIlJlbW92aW5nIENlcnRmaWxlIGZhaWw6ICQhIjsKICAgICAgcm1k aXIgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRuMm5uYW1lWzBdIikgfHwgZGll ICJSZW1vdmluZyBEaXJlY3RvcnkgZmFpbDogJCEiOwoJCQlnb3RvIE4yTl9FUlJPUjsJCQkKCQl9 Cgl9CgojIyMKIyBDaGVjayBpZiBPcGVuVlBOIFN1Ym5ldCBpcyB2YWxpZAojIyMKCmZvcmVhY2gg bXkgJGRrZXkgKGtleXMgJWNvbmZpZ2hhc2gpIHsKCQlpZiAoJGNvbmZpZ2hhc2h7JGRrZXl9WzI3 XSBlcSAiJG4ybm92cG5zdWJbMF0uJG4ybm92cG5zdWJbMV0uJG4ybm92cG5zdWJbMl0uMC8yNTUu MjU1LjI1NS4wIikgewoJCQkkZXJyb3JtZXNzYWdlID0gJ1RoZSBPcGVuVlBOIFN1Ym5ldCBpcyBh bHJlYWR5IGluIHVzZSc7CgkJCXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNv bmYvJG4ybm5hbWVbMF0vJG4ybm5hbWVbMF0uY29uZiIpIG9yIGRpZSAiUmVtb3ZpbmcgQ29uZmln ZmlsZSBmYWlsOiAkISI7CgkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Vy dHMvJG4ybm5hbWVbMF0ucDEyIikgb3IgZGllICJSZW1vdmluZyBDZXJ0ZmlsZSBmYWlsOiAkISI7 CiAgICAgIHJtZGlyICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kbjJubmFtZVsw XSIpIHx8IGRpZSAiUmVtb3ZpbmcgRGlyZWN0b3J5IGZhaWw6ICQhIjsKCQkJZ290byBOMk5fRVJS T1I7CQkJCgkJfQoJfQoKIyMjCiMgQ2hlY2sgaW0gRGVzdCBQb3J0IGlzIHZhaWxkCiMjIwoKZm9y ZWFjaCBteSAkZGtleSAoa2V5cyAlY29uZmlnaGFzaCkgewoJCWlmICgkY29uZmlnaGFzaHskZGtl eX1bMjldIGVxICRuMm5wb3J0WzFdICkgewoJCQkkZXJyb3JtZXNzYWdlID0gJ1RoZSBPcGVuVlBO IFBvcnQgaXMgYWxyZWFkeSBpbiB1c2UnOwoJCQl1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9uMm5jb25mLyRuMm5uYW1lWzBdLyRuMm5uYW1lWzBdLmNvbmYiKSBvciBkaWUgIlJlbW92 aW5nIENvbmZpZ2ZpbGUgZmFpbDogJCEiOwoJICAgIHVubGluayAoIiR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL2NlcnRzLyRuMm5uYW1lWzBdLnAxMiIpIG9yIGRpZSAiUmVtb3ZpbmcgQ2VydGZpbGUg ZmFpbDogJCEiOwogICAgICBybWRpciAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYv JG4ybm5hbWVbMF0iKSB8fCBkaWUgIlJlbW92aW5nIERpcmVjdG9yeSBmYWlsOiAkISI7CgkJCWdv dG8gTjJOX0VSUk9SOwkJCQoJCX0KCX0KCQoJCgkKICAka2V5ID0gJkdlbmVyYWw6OmZpbmRoYXNo YXJyYXlrZXkgKFwlY29uZmlnaGFzaCk7CgoJZm9yZWFjaCBteSAkaSAoMCAuLiAzOCkgeyAkY29u ZmlnaGFzaHska2V5fVskaV0gPSAiIjt9CgkkY29uZmlnaGFzaHska2V5fVswXSA9ICdvZmYnOwoJ JGNvbmZpZ2hhc2h7JGtleX1bMV0gPSAkbjJubmFtZVswXTsKICAgICRjb25maWdoYXNoeyRrZXl9 WzJdID0gJG4ybm5hbWVbMF07CQoJJGNvbmZpZ2hhc2h7JGtleX1bM10gPSAnbmV0JzsKCSRjb25m aWdoYXNoeyRrZXl9WzRdID0gJ2NlcnQnOwkKCSRjb25maWdoYXNoeyRrZXl9WzZdID0gJ2NsaWVu dCc7CQkKCSRjb25maWdoYXNoeyRrZXl9WzhdID0gICRuMm5sb2NhbHN1YlsyXTsKICAgICRjb25m aWdoYXNoeyRrZXl9WzEwXSA9ICRuMm5yZW1vdGVbMV07CiAgICAkY29uZmlnaGFzaHska2V5fVsx MV0gPSAiJG4ybnJlbXN1YlsxXS8kbjJucmVtc3ViWzJdIjsJCQoJJGNvbmZpZ2hhc2h7JGtleX1b MjJdID0gJG4ybm1nbXRbMl07CiAgICAkY29uZmlnaGFzaHska2V5fVsyM10gPSAkbXNzZml4YWN0 aXZlOwoJJGNvbmZpZ2hhc2h7JGtleX1bMjRdID0gJG4ybmZyYWdtZW50WzFdOwogICAgJGNvbmZp Z2hhc2h7JGtleX1bMjVdID0gJ0lQRmlyZSBuMm4gQ2xpZW50JzsKCSRjb25maWdoYXNoeyRrZXl9 WzI2XSA9ICdyZWQnOwogICAgJGNvbmZpZ2hhc2h7JGtleX1bMjddID0gIiRuMm5vdnBuc3ViWzBd LiRuMm5vdnBuc3ViWzFdLiRuMm5vdnBuc3ViWzJdLjAvMjU1LjI1NS4yNTUuMCI7CiAgICAkY29u ZmlnaGFzaHska2V5fVsyOF0gPSAkbjJucHJvdG9bMF07CiAgICAkY29uZmlnaGFzaHska2V5fVsy OV0gPSAkbjJucG9ydFsxXTsKICAgICRjb25maWdoYXNoeyRrZXl9WzMwXSA9ICRjb21wbHpvYWN0 aXZlOwogICAgJGNvbmZpZ2hhc2h7JGtleX1bMzFdID0gJG4ybnR1bm10dVsxXTsKCgogICZHZW5l cmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIs IFwlY29uZmlnaGFzaCk7CiAKICBOMk5fRVJST1I6CgkJCgkmSGVhZGVyOjpzaG93aHR0cGhlYWRl cnMoKTsKCSZIZWFkZXI6Om9wZW5wYWdlKCdWYWxpZGF0ZSBpbXBvcnRlZCBjb25maWd1cmF0aW9u JywgMSwgJycpOwoJJkhlYWRlcjo6b3BlbmJpZ2JveCgnMTAwJScsICdMRUZUJywgJycsICRlcnJv cm1lc3NhZ2UpOwoJaWYgKCRlcnJvcm1lc3NhZ2UpIHsKCSAgICAmSGVhZGVyOjpvcGVuYm94KCcx MDAlJywgJ0xFRlQnLCAkTGFuZzo6dHJ7J2Vycm9yIG1lc3NhZ2VzJ30pOwoJICAgIHByaW50ICI8 Y2xhc3MgbmFtZT0nYmFzZSc+JGVycm9ybWVzc2FnZSI7CgkgICAgcHJpbnQgIiZuYnNwOzwvY2xh c3M+IjsKCSAgICAmSGVhZGVyOjpjbG9zZWJveCgpOwkJCgoJfSBlbHNlIAogIHsJCQoJCSZIZWFk ZXI6Om9wZW5ib3goJzEwMCUnLCAnTEVGVCcsICdpbXBvcnQgaXBmaXJlIG5ldDJuZXQgY29uZmln Jyk7Cgl9CglpZiAoJGVycm9ybWVzc2FnZSBlcSAnJyl7CgkJcHJpbnQgPDxFTkQJCQoJCTwhLS0g aXBmaXJlIG5ldDJuZXQgY29uZmlnIGd1aSAtLT4KCQk8dGFibGUgd2lkdGg9JzEwMCUnPgoJCTx0 cj48dGQgd2lkdGg9JzI1JSc+Jm5ic3A7PC90ZD48dGQgd2lkdGg9JzI1JSc+Jm5ic3A7PC90ZD48 L3RyPgogICAgPHRyPjx0ZCBjbGFzcz0nYm9sZGJhc2UnPiRMYW5nOjp0cnsnbmFtZSd9OjwvdGQ+ PHRkPjxiPiRuMm5uYW1lWzBdPC9iPjwvdGQ+PC90cj4KICAgIDx0cj48dGQ+Jm5ic3A7PC90ZD48 dGQ+Jm5ic3A7PC90ZD48L3RyPgkKCQk8dHI+PHRkIGNsYXNzPSdib2xkYmFzZScgbm93cmFwPSdu b3dyYXAnPiRMYW5nOjp0cnsnQWN0IGFzJ308L3RkPjx0ZD48Yj4kY29uZmlnaGFzaHska2V5fVs2 XTwvYj48L3RkPjwvdHI+CQkJCQkJCQkKCQk8dHI+PHRkIGNsYXNzPSdib2xkYmFzZScgbm93cmFw PSdub3dyYXAnPlJlbW90ZSBIb3N0IDwvdGQ+PHRkPjxiPiRjb25maWdoYXNoeyRrZXl9WzEwXTwv Yj48L3RkPjwvdHI+CgkJPHRyPjx0ZCBjbGFzcz0nYm9sZGJhc2UnIG5vd3JhcD0nbm93cmFwJz4k TGFuZzo6dHJ7J2xvY2FsIHN1Ym5ldCd9PC90ZD48dGQ+PGI+JGNvbmZpZ2hhc2h7JGtleX1bOF08 L2I+PC90ZD48L3RyPgoJCTx0cj48dGQgY2xhc3M9J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+ JExhbmc6OnRyeydyZW1vdGUgc3VibmV0J308L3RkPjx0ZD48Yj4kY29uZmlnaGFzaHska2V5fVsx MV08L2I+PC90ZD48L3RyPgoJCTx0cj48dGQgY2xhc3M9J2JvbGRiYXNlJyBub3dyYXA9J25vd3Jh cCc+JExhbmc6OnRyeydvdnBuIHN1Ym5ldCd9PC90ZD48dGQ+PGI+JGNvbmZpZ2hhc2h7JGtleX1b MjddPC9iPjwvdGQ+PC90cj4KCQk8dHI+PHRkIGNsYXNzPSdib2xkYmFzZScgbm93cmFwPSdub3dy YXAnPiRMYW5nOjp0cnsncHJvdG9jb2wnfTwvdGQ+PHRkPjxiPiRjb25maWdoYXNoeyRrZXl9WzI4 XTwvYj48L3RkPjwvdHI+CgkJPHRyPjx0ZCBjbGFzcz0nYm9sZGJhc2UnIG5vd3JhcD0nbm93cmFw Jz4kTGFuZzo6dHJ7J2Rlc3RpbmF0aW9uIHBvcnQnfTo8L3RkPjx0ZD48Yj4kY29uZmlnaGFzaHsk a2V5fVsyOV08L2I+PC90ZD48L3RyPgoJCTx0cj48dGQgY2xhc3M9J2JvbGRiYXNlJyBub3dyYXA9 J25vd3JhcCc+JExhbmc6OnRyeydjb21wLWx6byd9PC90ZD48dGQ+PGI+JGNvbmZpZ2hhc2h7JGtl eX1bMzBdPC9iPjwvdGQ+PC90cj4KCQk8dHI+PHRkIGNsYXNzPSdib2xkYmFzZScgbm93cmFwPSdu b3dyYXAnPk1TU0ZJWCA8L3RkPjx0ZD48Yj4kY29uZmlnaGFzaHska2V5fVsyM108L2I+PC90ZD48 L3RyPgoJCTx0cj48dGQgY2xhc3M9J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+RnJhZ21lbnQg PC90ZD48dGQ+PGI+JGNvbmZpZ2hhc2h7JGtleX1bMjRdPC9iPjwvdGQ+PC90cj4KCQk8dHI+PHRk IGNsYXNzPSdib2xkYmFzZScgbm93cmFwPSdub3dyYXAnPiRMYW5nOjp0cnsnTVRVJ308L3RkPjx0 ZD48Yj4kY29uZmlnaGFzaHska2V5fVszMV08L2I+PC90ZD48L3RyPgoJCTx0cj48dGQgY2xhc3M9 J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+TWFuYWdlbWVudCBQb3J0IDwvdGQ+PHRkPjxiPiRj b25maWdoYXNoeyRrZXl9WzIyXTwvYj48L3RkPjwvdHI+CgkJPHRyPjx0ZD4mbmJzcDs8L3RkPjx0 ZD4mbmJzcDs8L3RkPjwvdHI+CQogICAgPC90YWJsZT4KRU5ECjsJCgkJJkhlYWRlcjo6Y2xvc2Vi b3goKTsKCX0KCglpZiAoJGVycm9ybWVzc2FnZSkgewoJCXByaW50ICI8ZGl2IGFsaWduPSdjZW50 ZXInPjxhIGhyZWY9Jy9jZ2ktYmluL292cG5tYWluLmNnaSc+JExhbmc6OnRyeydiYWNrJ308L2E+ PC9kaXY+IjsKCX0gZWxzZSB7CQoJCXByaW50ICI8ZGl2IGFsaWduPSdjZW50ZXInPjxmb3JtIG1l dGhvZD0ncG9zdCcgRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+PGlucHV0IHR5cGU9J3N1 Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydhZGQnfScgLz4iOwkJCgkJcHJp bnQgIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J1RZUEUnIHZhbHVlPSduZXQybmV0YWtuJyAv PiI7CgkJcHJpbnQgIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0tFWScgdmFsdWU9JyRrZXkn IC8+IjsJCQkKCQlwcmludCAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1 ZT0nJExhbmc6OnRyeydjYW5jZWwnfScgLz48L2Rpdj48L2Zvcm0+IjsKCX0JCgkmSGVhZGVyOjpj bG9zZWJpZ2JveCgpOwoJJkhlYWRlcjo6Y2xvc2VwYWdlKCk7CglleGl0KDApOwkKCgojIwojIyMg QWNjZXB0IElQRmlyZSBuMm4gUGFja2FnZSBTZXR0aW5ncwojIyMKCiAgfSAgZWxzaWYgKCgkY2dp cGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J2FkZCd9KSAmJiAoJGNnaXBhcmFtc3snVFlQ RSd9IGVxICduZXQybmV0YWtuJykpewoKIyMjCiMjIyBEaXNjYXJkIGFuZCBSb2xsYmFjayBJUEZp cmUgbjJuIFBhY2thZ2UgU2V0dGluZ3MKIyMjCgogIH0gIGVsc2lmICgoJGNnaXBhcmFtc3snQUNU SU9OJ30gZXEgJExhbmc6OnRyeydjYW5jZWwnfSkgJiYgKCRjZ2lwYXJhbXN7J1RZUEUnfSBlcSAn bmV0Mm5ldGFrbicpKXsKICAgICAKICAgICAmR2VuZXJhbDo6cmVhZGhhc2hhcnJheSgiJHtHZW5l cmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CgppZiAoJGNvbmZp Z2hhc2h7JGNnaXBhcmFtc3snS0VZJ319KSB7CgogICAgIG15ICRjb25mZmlsZSA9IGdsb2IoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZ J319WzFdLyRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsxXS5jb25mIik7CiAgICAgbXkg JGNlcnRmaWxlID0gZ2xvYigiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvJGNvbmZpZ2hh c2h7JGNnaXBhcmFtc3snS0VZJ319WzFdLnAxMiIpOwogICAgIHVubGluayAoJGNlcnRmaWxlKSBv ciBkaWUgIlJlbW92aW5nICRjZXJ0ZmlsZSBmYWlsOiAkISI7CiAgICAgdW5saW5rICgkY29uZmZp bGUpIG9yIGRpZSAiUmVtb3ZpbmcgJGNvbmZmaWxlIGZhaWw6ICQhIjsKICAgICBybWRpciAoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZ J319WzFdIikgfHwgZGllICJLYW5uIFZlcnplaWNobmlzIG5pY2h0IGxvZXNjaGVuOiAkISI7CiAg ICAgZGVsZXRlICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fTsKICAgICZHZW5lcmFsOjp3 cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29u ZmlnaGFzaCk7CQoKICAgICB9IGVsc2UgewoJCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2lu dmFsaWQga2V5J307CiAgIH0JCiAgICAKCiMjIwojIG0uYS5kIG5ldDJuZXQKIyMjCgoKIyMjCiMj IyBBZGRpbmcgYSBuZXcgY29ubmVjdGlvbgojIyMKfSBlbHNpZiAoKCRjZ2lwYXJhbXN7J0FDVElP Tid9IGVxICRMYW5nOjp0cnsnYWRkJ30pIHx8CgkgKCRjZ2lwYXJhbXN7J0FDVElPTid9IGVxICRM YW5nOjp0cnsnZWRpdCd9KSB8fAoJICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7 J3NhdmUnfSAmJiAkY2dpcGFyYW1zeydBRFZBTkNFRCd9IGVxICcnKSkgewoJICAgIAogICAgJkdl bmVyYWw6OnJlYWRoYXNoKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwldnBu c2V0dGluZ3MpOwogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL2NhY29uZmlnIiwgXCVjYWhhc2gpOwogICAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXko IiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hhc2gpOwoKICAg IGlmICgkY2dpcGFyYW1zeydBQ1RJT04nfSBlcSAkTGFuZzo6dHJ7J2VkaXQnfSkgewoJCWlmICgh ICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVswXSkgewoJCSAgICAkZXJyb3JtZXNzYWdl ID0gJExhbmc6OnRyeydpbnZhbGlkIGtleSd9OwoJCSAgICBnb3RvIFZQTkNPTkZfRU5EOwoJCX0K CQkkY2dpcGFyYW1zeydFTkFCTEVEJ30JCQk9ICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9 fVswXTsKCQkkY2dpcGFyYW1zeydOQU1FJ30JCQkJPSAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydL RVknfX1bMV07CgkJJGNnaXBhcmFtc3snVFlQRSd9CQkJCT0gJGNvbmZpZ2hhc2h7JGNnaXBhcmFt c3snS0VZJ319WzNdOwoJCSRjZ2lwYXJhbXN7J0FVVEgnfSAJCQk9ICRjb25maWdoYXNoeyRjZ2lw YXJhbXN7J0tFWSd9fVs0XTsKCQkkY2dpcGFyYW1zeydQU0snfQkJCQk9ICRjb25maWdoYXNoeyRj Z2lwYXJhbXN7J0tFWSd9fVs1XTsKCQkkY2dpcGFyYW1zeydTSURFJ30JCQkJPSAkY29uZmlnaGFz aHskY2dpcGFyYW1zeydLRVknfX1bNl07CgkJJGNnaXBhcmFtc3snTE9DQUxfU1VCTkVUJ30JCT0g JGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzhdOwoJCSRjZ2lwYXJhbXN7J1JFTU9URSd9 CQkJPSAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMTBdOwoJCSRjZ2lwYXJhbXN7J1JF TU9URV9TVUJORVQnfSAJPSAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1bMTFdOwoJCSRj Z2lwYXJhbXN7J09WUE5fTUdNVCd9IAkJPSAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVknfX1b MjJdOwoJCSRjZ2lwYXJhbXN7J01TU0ZJWCd9IAkJCT0gJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3sn S0VZJ319WzIzXTsKCQkkY2dpcGFyYW1zeydGUkFHTUVOVCd9IAkJPSAkY29uZmlnaGFzaHskY2dp cGFyYW1zeydLRVknfX1bMjRdOwoJCSRjZ2lwYXJhbXN7J1JFTUFSSyd9CQkJPSAkY29uZmlnaGFz aHskY2dpcGFyYW1zeydLRVknfX1bMjVdOwoJCSRjZ2lwYXJhbXN7J0lOVEVSRkFDRSd9CQk9ICRj b25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsyNl07CgkJJGNnaXBhcmFtc3snT1ZQTl9TVUJO RVQnfSAJCT0gJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzI3XTsKCQkkY2dpcGFyYW1z eydQUk9UT0NPTCd9CSAgCQk9ICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVsyOF07CgkJ JGNnaXBhcmFtc3snREVTVF9QT1JUJ30JICAJPSAkY29uZmlnaGFzaHskY2dpcGFyYW1zeydLRVkn fX1bMjldOwoJCSRjZ2lwYXJhbXN7J0NPTVBMWk8nfQkgIAkJPSAkY29uZmlnaGFzaHskY2dpcGFy YW1zeydLRVknfX1bMzBdOwoJCSRjZ2lwYXJhbXN7J01UVSd9CSAgCQkJPSAkY29uZmlnaGFzaHsk Y2dpcGFyYW1zeydLRVknfX1bMzFdOwoJCSRjZ2lwYXJhbXN7J0NIRUNLMSd9ICAgCQk9ICRjb25m aWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVszMl07CgkJbXkgJG5hbWU9JGNnaXBhcmFtc3snQ0hF Q0sxJ30JOwoJCSRjZ2lwYXJhbXN7JG5hbWV9CQkJCT0gJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3sn S0VZJ319WzMzXTsKCQkkY2dpcGFyYW1zeydSRyd9CQkJCT0gJGNvbmZpZ2hhc2h7JGNnaXBhcmFt c3snS0VZJ319WzM0XTsKCQkkY2dpcGFyYW1zeydDQ0RfRE5TMSd9CQkJPSAkY29uZmlnaGFzaHsk Y2dpcGFyYW1zeydLRVknfX1bMzVdOwoJCSRjZ2lwYXJhbXN7J0NDRF9ETlMyJ30JCQk9ICRjb25m aWdoYXNoeyRjZ2lwYXJhbXN7J0tFWSd9fVszNl07CgkJJGNnaXBhcmFtc3snQ0NEX1dJTlMnfQkJ CT0gJGNvbmZpZ2hhc2h7JGNnaXBhcmFtc3snS0VZJ319WzM3XTsKCX0gZWxzaWYgKCRjZ2lwYXJh bXN7J0FDVElPTid9IGVxICRMYW5nOjp0cnsnc2F2ZSd9KSB7CgkkY2dpcGFyYW1zeydSRU1BUksn fSA9ICZIZWFkZXI6OmNsZWFuaHRtbCgkY2dpcGFyYW1zeydSRU1BUksnfSk7CgkKI0EuTWFyeCBD Q0QgY2hlY2sgaXJvdXRlIGZpZWxkIGFuZCBjb252ZXJ0IGl0IHRvIGRlY2ltYWwKCglteSBAdGVt cD0oKTsKCW15ICVjY2Ryb3V0ZWhhc2g9KCk7CglteSAka2V5cG9pbnQ9MDsKCWlmICgkY2dpcGFy YW1zeydJUid9IG5lICcnKXsKCQlAdGVtcCA9IHNwbGl0KCJcbiIsJGNnaXBhcmFtc3snSVInfSk7 CgkJJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NjZHJv dXRlIiwgXCVjY2Ryb3V0ZWhhc2gpOwoJCSNmaW5kIGtleSB0byB1c2UKCQlmb3JlYWNoIG15ICRr ZXkgKGtleXMgJWNjZHJvdXRlaGFzaCkgewoJCQlpZiAoJGNjZHJvdXRlaGFzaHska2V5fVswXSBl cSAkY2dpcGFyYW1zeydOQU1FJ30pIHsKCQkJCSRrZXlwb2ludD0ka2V5OwoJCQkJZGVsZXRlICRj Y2Ryb3V0ZWhhc2h7JGtleX07CgkJCX1lbHNlewoJCQkJJGtleXBvaW50ID0gJkdlbmVyYWw6OmZp bmRoYXNoYXJyYXlrZXkgKFwlY2Nkcm91dGVoYXNoKTsKCQkJfQoJCX0KCQkkY2Nkcm91dGVoYXNo eyRrZXlwb2ludH1bMF09JGNnaXBhcmFtc3snTkFNRSd9OwoJCW15ICRpPTE7CgkJbXkgJHZhbD0w OwoJCWZvcmVhY2ggJHZhbCAoQHRlbXApewoJCQljaG9tcCgkdmFsKTsKCQkJJHZhbD1+cy9ccyok Ly9nOyAKCQkJbXkoJGlwLCRjaWRyKSA9IHNwbGl0KC9cLy8sJHZhbCk7CgkJCSRjaWRyPSZHZW5l cmFsOjppcG9yc3VidG9kZWMoJGNpZHIpOwoJCQkKCQkJI2NoZWNrIGlmIGlyb3V0ZSBleGlzdHMg aW4gY2Nkcm91dGUKCQkJZm9yZWFjaCBteSAka2V5IChrZXlzICVjY2Ryb3V0ZWhhc2gpIHsKCQkJ CWZvcmVhY2ggbXkgJG9sZGlyb3V0ZSAoIDEgLi4gJCN7JGNjZHJvdXRlaGFzaHska2V5fX0pewoJ CQkJCWlmICgkY2Nkcm91dGVoYXNoeyRrZXl9WyRvbGRpcm91dGVdIGVxICIkaXAvJGNpZHIiKSB7 CgkJCQkJCSRlcnJvcm1lc3NhZ2U9JExhbmc6OnRyeydjY2QgZXJyIGlyb3V0ZWV4aXN0J307CgkJ CQkJCWdvdG8gVlBOQ09ORl9FUlJPUjsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCQkJCQkJCQkJCQkJ CQkKCQkJI2NoZWNrIGZvciBleGlzdGluZyBuZXR3b3JrIElQJ3MKCQkJaWYgKCgmR2VuZXJhbDo6 SXBJblN1Ym5ldCAoJGlwLCRuZXRzZXR0aW5nc3tHUkVFTl9ORVRBRERSRVNTfSwkbmV0c2V0dGlu Z3N7R1JFRU5fTkVUTUFTS30pICYmICRuZXRzZXR0aW5nc3tHUkVFTl9ORVRBRERSRVNTfSBuZSAn MC4wLjAuMCcpfHwgCgkJCQkoJkdlbmVyYWw6OklwSW5TdWJuZXQgKCRpcCwkbmV0c2V0dGluZ3N7 UkVEX05FVEFERFJFU1N9LCRuZXRzZXR0aW5nc3tSRURfTkVUTUFTS30pICYmICRuZXRzZXR0aW5n c3tSRURfTkVUQUREUkVTU30gbmUgJzAuMC4wLjAnKXx8CgkJCQkoJkdlbmVyYWw6OklwSW5TdWJu ZXQgKCRpcCwkbmV0c2V0dGluZ3N7QkxVRV9ORVRBRERSRVNTfSwkbmV0c2V0dGluZ3N7QkxVRV9O RVRNQVNLfSkgJiYgJG5ldHNldHRpbmdze0JMVUVfTkVUQUREUkVTU30gbmUgJzAuMC4wLjAnICYm ICRuZXRzZXR0aW5nc3tCTFVFX05FVEFERFJFU1N9IGd0ICcnKXx8CgkJCQkoJkdlbmVyYWw6Oklw SW5TdWJuZXQgKCRpcCwkbmV0c2V0dGluZ3N7T1JBTkdFX05FVEFERFJFU1N9LCRuZXRzZXR0aW5n c3tPUkFOR0VfTkVUTUFTS30pICYmICRuZXRzZXR0aW5nc3tPUkFOR0VfTkVUQUREUkVTU30gbmUg JzAuMC4wLjAnICYmICRuZXRzZXR0aW5nc3tPUkFOR0VfTkVUQUREUkVTU30gZ3QgJycgKSl7CgkJ CQkkZXJyb3JtZXNzYWdlPSIkaXAgVVNFRCBGT1IgU1lTVEVNISI7CgkJCQlnb3RvIFZQTkNPTkZf RVJST1I7CgkJCX0KCQkJCgkJCQoJCQkKCQkJaWYgKCZHZW5lcmFsOjp2YWxpZGlwYW5kbWFzaygk dmFsKSl7CgkJCQkkY2Nkcm91dGVoYXNoeyRrZXlwb2ludH1bJGldID0gJGlwLiIvIi4kY2lkcjsK CQkJfWVsc2V7CgkJCQkkZXJyb3JtZXNzYWdlPSRlcnJvcm1lc3NhZ2UuIlJvdXRlICIuJExhbmc6 OnRyeydjY2QgaW52YWxpZCd9LiIgKCRpcC8kY2lkcikiOwoJCQkJZ290byBWUE5DT05GX0VSUk9S OwoJCQl9CgkJCSRpKys7CgkJfQoJCSZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vY2Nkcm91dGUiLCBcJWNjZHJvdXRlaGFzaCk7CgkJJndyaXRlc2VydmVy Y29uZjsKCX1lbHNlewoJCSZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9jY2Ryb3V0ZSIsIFwlY2Nkcm91dGVoYXNoKTsKCQlmb3JlYWNoIG15ICRrZXkgKGtl eXMgJWNjZHJvdXRlaGFzaCkgewoJCQlpZiAoJGNjZHJvdXRlaGFzaHska2V5fVswXSBlcSAkY2dp cGFyYW1zeydOQU1FJ30pIHsKCQkJCWRlbGV0ZSAkY2Nkcm91dGVoYXNoeyRrZXl9OwoJCQkJJkdl bmVyYWw6OndyaXRlaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jY2Ryb3V0ZSIs IFwlY2Nkcm91dGVoYXNoKTsKCQkJCSZ3cml0ZXNlcnZlcmNvbmY7CgkJCX0KCQl9CQoJfQoJdW5k ZWYgQHRlbXA7CgkjY2hlY2sgcm91dGUgZmllbGQgYW5kIGNvbnZlcnQgaXQgdG8gZGVjaW1hbAoJ bXkgJWNjZHJvdXRlMmhhc2g9KCk7CglteSAkdmFsPTA7CglteSAkaT0xOwoJCgkmR2VuZXJhbDo6 cmVhZGhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Nkcm91dGUyIiwgXCVjY2Ry b3V0ZTJoYXNoKTsKCWlmKCRjZ2lwYXJhbXN7J0lGUk9VVEUnfSBlcSAkTGFuZzo6dHJ7J2NjZCBu b25lJ30gfHwgJGNnaXBhcmFtc3snSUZST1VURSd9IGVxICcnKSB7IAoJCQl1bmRlZiAkY2dpcGFy YW1zeydJRlJPVVRFJ307CgkJCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2Nkcm91dGUyaGFzaCl7 CgkJCQlpZiAoJGNjZHJvdXRlMmhhc2h7JGtleX1bMF0gZXEgJGNnaXBhcmFtc3snTkFNRSd9KSB7 CgkJCQkJZGVsZXRlICRjY2Ryb3V0ZTJoYXNoeyRrZXl9OwoJCQkJfQoJCQl9CgkJCSZHZW5lcmFs Ojp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Nkcm91dGUyIiwgXCVj Y2Ryb3V0ZTJoYXNoKTsKCX1lbHNlewoJCSNmaW5kIGtleSB0byB1c2UKCQlmb3JlYWNoIG15ICRr ZXkgKGtleXMgJWNjZHJvdXRlMmhhc2gpIHsKCQkJaWYgKCRjY2Ryb3V0ZTJoYXNoeyRrZXl9WzBd IGVxICRjZ2lwYXJhbXN7J05BTUUnfSkgewoJCQkJJGtleXBvaW50PSRrZXk7CgkJCQlkZWxldGUg JGNjZHJvdXRlMmhhc2h7JGtleX07CgkJCX1lbHNlewoJCQkJJGtleXBvaW50ID0gJkdlbmVyYWw6 OmZpbmRoYXNoYXJyYXlrZXkgKFwlY2Nkcm91dGUyaGFzaCk7CgkJCQkmR2VuZXJhbDo6d3JpdGVo YXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NjZHJvdXRlIiwgXCVjY2Ryb3V0ZWhh c2gpOwoJCQkJJndyaXRlc2VydmVyY29uZjsKCQkJfQoJCX0KCQkkY2Nkcm91dGUyaGFzaHska2V5 cG9pbnR9WzBdPSRjZ2lwYXJhbXN7J05BTUUnfTsKCQlAdGVtcCA9IHNwbGl0KC9cfC8sJGNnaXBh cmFtc3snSUZST1VURSd9KTsKCQlteSAlb3dubmV0PSgpOwoJCSZHZW5lcmFsOjpyZWFkaGFzaCgi JHtHZW5lcmFsOjpzd3Jvb3R9L2V0aGVybmV0L3NldHRpbmdzIiwgXCVvd25uZXQpOwoJCWZvcmVh Y2ggJHZhbCAoQHRlbXApewoJCQljaG9tcCgkdmFsKTsKCQkJJHZhbD1+cy9ccyokLy9nOyAKCQkJ aWYgKCR2YWwgZXEgJExhbmc6OnRyeydncmVlbid9KQoJCQl7CgkJCQkkdmFsPSRvd25uZXR7R1JF RU5fTkVUQUREUkVTU30uIi8iLiRvd25uZXR7R1JFRU5fTkVUTUFTS307CgkJCX0KCQkJaWYgKCR2 YWwgZXEgJExhbmc6OnRyeydibHVlJ30pCgkJCXsKCQkJCSR2YWw9JG93bm5ldHtCTFVFX05FVEFE RFJFU1N9LiIvIi4kb3dubmV0e0JMVUVfTkVUTUFTS307CgkJCX0KCQkJaWYgKCR2YWwgZXEgJExh bmc6OnRyeydvcmFuZ2UnfSkKCQkJewoJCQkJJHZhbD0kb3dubmV0e09SQU5HRV9ORVRBRERSRVNT fS4iLyIuJG93bm5ldHtPUkFOR0VfTkVUTUFTS307CgkJCX0KCQkJbXkgKCRpcCwkY2lkcikgPSBz cGxpdCAoL1wvLywgJHZhbCk7CgkJCWlmICghICZjaGVja19yb3V0ZXNfcHVzaCgkdmFsKSl7JGVy cm9ybWVzc2FnZT0kZXJyb3JtZXNzYWdlLiJSb3V0ZSAkdmFsICIuJExhbmc6OnRyeydjY2QgZXJy IHJvdXRlb3ZwbjInfS4iICgkdmFsKSI7Z290byBWUE5DT05GX0VSUk9SO30KCQkJaWYgKCEgJmNo ZWNrX2NjZHJvdXRlKCR2YWwpKXskZXJyb3JtZXNzYWdlPSRlcnJvcm1lc3NhZ2UuIjxicj5Sb3V0 ZSAkdmFsICIuJExhbmc6OnRyeydjY2QgZXJyIGludXNlJ30uIiAoJHZhbCkiIDtnb3RvIFZQTkNP TkZfRVJST1I7fQoJCQlpZiAoISAmY2hlY2tfY2NkY29uZigkdmFsKSl7JGVycm9ybWVzc2FnZT0k ZXJyb3JtZXNzYWdlLiI8YnI+Um91dGUgJHZhbCAiLiRMYW5nOjp0cnsnY2NkIGVyciByb3V0ZW92 cG4nfS4iICgkdmFsKSI7Z290byBWUE5DT05GX0VSUk9SO30KCQkJaWYgKCZHZW5lcmFsOjp2YWxp ZGlwYW5kbWFzaygkdmFsKSl7CgkJCQkkdmFsPSRpcC4iLyIuJkdlbmVyYWw6Omlwb3JzdWJ0b2Rl YygkY2lkcik7CgkJCQkkY2Nkcm91dGUyaGFzaHska2V5cG9pbnR9WyRpXSA9ICR2YWw7CgkJCX1l bHNlewoJCQkJJGVycm9ybWVzc2FnZT0kZXJyb3JtZXNzYWdlLiJSb3V0ZSAiLiRMYW5nOjp0cnsn Y2NkIGludmFsaWQnfS4iICgkdmFsKSI7CgkJCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkJCX0KCQkJ JGkrKzsKCQl9CQoJCSZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jvb3R9 L292cG4vY2Nkcm91dGUyIiwgXCVjY2Ryb3V0ZTJoYXNoKTsKCX0KCSNjaGVjayBkbnMxIGlwCglp ZiAoJGNnaXBhcmFtc3snQ0NEX0ROUzEnfSBuZSAnJyAmJiAgISAmR2VuZXJhbDo6dmFsaWRpcCgk Y2dpcGFyYW1zeydDQ0RfRE5TMSd9KSkgewoJCQkkZXJyb3JtZXNzYWdlPSRlcnJvcm1lc3NhZ2Uu Ijxicj4iLiRMYW5nOjp0cnsnaW52YWxpZCBpbnB1dCBmb3IgZGhjcCBkbnMnfS4iIDEiOwoJCQln b3RvIFZQTkNPTkZfRVJST1I7Cgl9CgkjY2hlY2sgZG5zMiBpcAoJaWYgKCRjZ2lwYXJhbXN7J0ND RF9ETlMyJ30gbmUgJycgJiYgICEgJkdlbmVyYWw6OnZhbGlkaXAoJGNnaXBhcmFtc3snQ0NEX0RO UzInfSkpIHsKCQkJJGVycm9ybWVzc2FnZT0kZXJyb3JtZXNzYWdlLiI8YnI+Ii4kTGFuZzo6dHJ7 J2ludmFsaWQgaW5wdXQgZm9yIGRoY3AgZG5zJ30uIiAyIjsKCQkJZ290byBWUE5DT05GX0VSUk9S OwoJfQoJI2NoZWNrIHdpbnMgaXAKCWlmICgkY2dpcGFyYW1zeydDQ0RfV0lOUyd9IG5lICcnICYm ICAhICZHZW5lcmFsOjp2YWxpZGlwKCRjZ2lwYXJhbXN7J0NDRF9XSU5TJ30pKSB7CgkJCSRlcnJv cm1lc3NhZ2U9JGVycm9ybWVzc2FnZS4iPGJyPiIuJExhbmc6OnRyeydpbnZhbGlkIGlucHV0IGZv ciBkaGNwIHdpbnMnfTsKCQkJZ290byBWUE5DT05GX0VSUk9SOwoJfQoJCgojQ0NEIEVuZAoJCgkK IGlmICgkY2dpcGFyYW1zeydUWVBFJ30gIX4gL14oaG9zdHxuZXQpJC8pIHsKCSAgICAkZXJyb3Jt ZXNzYWdlID0gJExhbmc6OnRyeydjb25uZWN0aW9uIHR5cGUgaXMgaW52YWxpZCd9OwoJICAgIGlm ICgkY2dpcGFyYW1zeydUWVBFJ30gZXEgJ25ldCcpIHsKICAgICAgdW5saW5rICgiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFN RSd9LmNvbmYiKSBvciBkaWUgIlJlbW92aW5nIENvbmZpZ2ZpbGUgZmFpbDogJCEiOwoJICAgIHJt ZGlyICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30i KSB8fCBkaWUgIlJlbW92aW5nIERpcmVjdG9yeSBmYWlsOiAkISI7CiAgICAgIH0KCSAgICBnb3Rv IFZQTkNPTkZfRVJST1I7Cgl9CgoKCWlmICgkY2dpcGFyYW1zeydOQU1FJ30gIX4gL15bYS16QS1a MC05XSskLykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J25hbWUgbXVzdCBvbmx5 IGNvbnRhaW4gY2hhcmFjdGVycyd9OwogICAgICBpZiAoJGNnaXBhcmFtc3snVFlQRSd9IGVxICdu ZXQnKSB7CiAgICAgIHVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNn aXBhcmFtc3snTkFNRSd9LyRjZ2lwYXJhbXN7J05BTUUnfS5jb25mIikgb3IgZGllICJSZW1vdmlu ZyBDb25maWdmaWxlIGZhaWw6ICQhIjsKCSAgICBybWRpciAoIiR7R2VuZXJhbDo6c3dyb290fS9v dnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9IikgfHwgZGllICJSZW1vdmluZyBEaXJlY3Rv cnkgZmFpbDogJCEiOwogICAgICB9CiAgICAgIGdvdG8gVlBOQ09ORl9FUlJPUjsKICB9CgoJaWYg KCRjZ2lwYXJhbXN7J05BTUUnfSA9fiAvXihob3N0fDAxfGJsb2NrfHByaXZhdGV8Y2xlYXJ8cGFj a2V0ZGVmYXVsdCkkLykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J25hbWUgaXMg aW52YWxpZCd9OwoJICAgIGlmICgkY2dpcGFyYW1zeydUWVBFJ30gZXEgJ25ldCcpIHsKICAgICAg dW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1F J30vJGNnaXBhcmFtc3snTkFNRSd9LmNvbmYiKSBvciBkaWUgIlJlbW92aW5nIENvbmZpZ2ZpbGUg ZmFpbDogJCEiOwoJICAgIHJtZGlyICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8k Y2dpcGFyYW1zeydOQU1FJ30iKSB8fCBkaWUgIlJlbW92aW5nIERpcmVjdG9yeSBmYWlsOiAkISI7 CiAgICAgIH0KCSAgICBnb3RvIFZQTkNPTkZfRVJST1I7Cgl9CgoJaWYgKGxlbmd0aCgkY2dpcGFy YW1zeydOQU1FJ30pID42MCkgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J25hbWUg dG9vIGxvbmcnfTsKCSAgICBpZiAoJGNnaXBhcmFtc3snVFlQRSd9IGVxICduZXQnKSB7CiAgICAg IHVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFN RSd9LyRjZ2lwYXJhbXN7J05BTUUnfS5jb25mIikgb3IgZGllICJSZW1vdmluZyBDb25maWdmaWxl IGZhaWw6ICQhIjsKCSAgICBybWRpciAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYv JGNnaXBhcmFtc3snTkFNRSd9IikgfHwgZGllICJSZW1vdmluZyBEaXJlY3RvcnkgZmFpbDogJCEi OwogICAgICB9CgkgICAgZ290byBWUE5DT05GX0VSUk9SOwoJfQoKIyMjCiMgbS5hLmQgbmV0Mm5l dAojIyMKCmlmICgkY2dpcGFyYW1zeydUWVBFJ30gZXEgJ25ldCcpIHsKCQkKICAgIGlmICgkY2dp cGFyYW1zeydERVNUX1BPUlQnfSBlcSAgJHZwbnNldHRpbmdzeydEREVTVF9QT1JUJ30pIHsKCQkJ JGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnb3BlbnZwbiBkZXN0aW5hdGlvbiBwb3J0IHVzZWQn fTsKCQkJdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1z eydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9LmNvbmYiKSBvciBkaWUgIlJlbW92aW5nIENvbmZp Z2ZpbGUgZmFpbDogJCEiOwoJICAgIHJtZGlyICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJu Y29uZi8kY2dpcGFyYW1zeydOQU1FJ30iKSB8fCBkaWUgIlJlbW92aW5nIERpcmVjdG9yeSBmYWls OiAkISI7CiAgICAgIGdvdG8gVlBOQ09ORl9FUlJPUjsJCQkKCQl9CiAgICAKICAgIGlmICgkY2dp cGFyYW1zeydERVNUX1BPUlQnfSBlcSAgJycpIHsKCQkJJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0 cnsnb3BlbnZwbiBkZXN0aW5hdGlvbiBwb3J0IHVzZWQnfTsKCQkJdW5saW5rICgiJHtHZW5lcmFs Ojpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFN RSd9LmNvbmYiKSBvciBkaWUgIlJlbW92aW5nIENvbmZpZ2ZpbGUgZmFpbDogJCEiOwoJICAgIHJt ZGlyICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30i KSB8fCBkaWUgIlJlbW92aW5nIERpcmVjdG9yeSBmYWlsOiAkISI7CiAgICAgIGdvdG8gVlBOQ09O Rl9FUlJPUjsJCQkKCQl9CgogICAgaWYgKCRjZ2lwYXJhbXN7J09WUE5fU1VCTkVUJ30gZXEgICR2 cG5zZXR0aW5nc3snRE9WUE5fU1VCTkVUJ30pIHsKCQkJJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0 cnsnb3BlbnZwbiBzdWJuZXQgaXMgdXNlZCd9OwoJCQl1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9v dH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfS8kY2dpcGFyYW1zeydOQU1FJ30uY29u ZiIpIG9yIGRpZSAiUmVtb3ZpbmcgQ29uZmlnZmlsZSBmYWlsOiAkISI7CgkgICAgcm1kaXIgKCIk e0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfSIpIHx8IGRp ZSAiUmVtb3ZpbmcgRGlyZWN0b3J5IGZhaWw6ICQhIjsKCQkJZ290byBWUE5DT05GX0VSUk9SOwkJ CQoJCX0KCgkgIGlmICgoJGNnaXBhcmFtc3snUFJPVE9DT0wnfSBlcSAndGNwJykgJiYgKCRjZ2lw YXJhbXN7J01TU0ZJWCd9IGVxICdvbicpKSB7CgkgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0 cnsnb3BlbnZwbiBtc3NmaXggYWxsb3dlZCB3aXRoIHVkcCd9OwoJICAgIHVubGluayAoIiR7R2Vu ZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9LyRjZ2lwYXJhbXN7 J05BTUUnfS5jb25mIikgb3IgZGllICJSZW1vdmluZyBDb25maWdmaWxlIGZhaWw6ICQhIjsKCSAg ICBybWRpciAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFN RSd9IikgfHwgZGllICJSZW1vdmluZyBEaXJlY3RvcnkgZmFpbDogJCEiOwoJICAgIGdvdG8gVlBO Q09ORl9FUlJPUjsKICAgIH0KICAgICAKICAgIGlmICgoJGNnaXBhcmFtc3snUFJPVE9DT0wnfSBl cSAndGNwJykgJiYgKCRjZ2lwYXJhbXN7J0ZSQUdNRU5UJ30gbmUgJycpKSB7CgkgICAgJGVycm9y bWVzc2FnZSA9ICRMYW5nOjp0cnsnb3BlbnZwbiBmcmFnbWVudCBhbGxvd2VkIHdpdGggdWRwJ307 CgkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFyYW1z eydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9LmNvbmYiKSBvciBkaWUgIlJlbW92aW5nIENvbmZp Z2ZpbGUgZmFpbDogJCEiOwoJICAgIHJtZGlyICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJu Y29uZi8kY2dpcGFyYW1zeydOQU1FJ30iKSB8fCBkaWUgIlJlbW92aW5nIERpcmVjdG9yeSBmYWls OiAkISI7CgkgICAgZ290byBWUE5DT05GX0VSUk9SOwogICAgfQoKICAgIGlmICggJnZhbGlkZG90 bWFzayAoJGNnaXBhcmFtc3snTE9DQUxfU1VCTkVUJ30pKSAgewoJCSAgJGVycm9ybWVzc2FnZSA9 ICRMYW5nOjp0cnsnb3BlbnZwbiBwcmVmaXggbG9jYWwgc3VibmV0J307CgkJICB1bmxpbmsgKCIk e0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfS8kY2dpcGFy YW1zeydOQU1FJ30uY29uZiIpIG9yIGRpZSAiUmVtb3ZpbmcgQ29uZmlnZmlsZSBmYWlsOiAkISI7 CgkgICAgcm1kaXIgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7 J05BTUUnfSIpIHx8IGRpZSAiUmVtb3ZpbmcgRGlyZWN0b3J5IGZhaWw6ICQhIjsKCQkgIGdvdG8g VlBOQ09ORl9FUlJPUjsKCQl9IAogICAgCiAgICBpZiAoICZ2YWxpZGRvdG1hc2sgKCRjZ2lwYXJh bXN7J09WUE5fU1VCTkVUJ30pKSAgewoJCSAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnb3Bl bnZwbiBwcmVmaXggb3BlbnZwbiBzdWJuZXQnfTsKCQkgIHVubGluayAoIiR7R2VuZXJhbDo6c3dy b290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9LyRjZ2lwYXJhbXN7J05BTUUnfS5j b25mIikgb3IgZGllICJSZW1vdmluZyBDb25maWdmaWxlIGZhaWw6ICQhIjsKCSAgICBybWRpciAo IiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9IikgfHwg ZGllICJSZW1vdmluZyBEaXJlY3RvcnkgZmFpbDogJCEiOwoJCSAgZ290byBWUE5DT05GX0VSUk9S OwoJCX0gCiAgICAKICAgIGlmICggJnZhbGlkZG90bWFzayAoJGNnaXBhcmFtc3snUkVNT1RFX1NV Qk5FVCd9KSkgIHsKCQkgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J29wZW52cG4gcHJlZml4 IHJlbW90ZSBzdWJuZXQnfTsKCQkgIHVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL24y bmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9LyRjZ2lwYXJhbXN7J05BTUUnfS5jb25mIikgb3IgZGll ICJSZW1vdmluZyBDb25maWdmaWxlIGZhaWw6ICQhIjsKCSAgICBybWRpciAoIiR7R2VuZXJhbDo6 c3dyb290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9IikgfHwgZGllICJSZW1vdmlu ZyBEaXJlY3RvcnkgZmFpbDogJCEiOwoJCSAgZ290byBWUE5DT05GX0VSUk9SOwoJCX0gCgogICAg aWYgKCRjZ2lwYXJhbXN7J09WUE5fTUdNVCd9IGVxICAnJykgewoJCQkkY2dpcGFyYW1zeydPVlBO X01HTVQnfSA9ICRjZ2lwYXJhbXN7J0RFU1RfUE9SVCd9OwkJCgkJfQogICAKfQoKIwlpZiAoKCRj Z2lwYXJhbXN7J1RZUEUnfSBlcSAnbmV0JykgJiYgKCRjZ2lwYXJhbXN7J1NJREUnfSAhfiAvXihs ZWZ0fHJpZ2h0KSQvKSkgewojCSAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpcGZpcmUg c2lkZSBpcyBpbnZhbGlkJ307CiMJICAgIGdvdG8gVlBOQ09ORl9FUlJPUjsKIwl9CgoJIyBDaGVj ayBpZiB0aGVyZSBpcyBubyBvdGhlciBlbnRyeSB3aXRoIHRoaXMgbmFtZQoJaWYgKCEgJGNnaXBh cmFtc3snS0VZJ30pIHsKCSAgICBmb3JlYWNoIG15ICRrZXkgKGtleXMgJWNvbmZpZ2hhc2gpIHsK CQlpZiAoJGNvbmZpZ2hhc2h7JGtleX1bMV0gZXEgJGNnaXBhcmFtc3snTkFNRSd9KSB7CgkJICAg ICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2EgY29ubmVjdGlvbiB3aXRoIHRoaXMgbmFtZSBh bHJlYWR5IGV4aXN0cyd9OwoJCSAgICBpZiAoJGNnaXBhcmFtc3snVFlQRSd9IGVxICduZXQnKSB7 CiAgICAgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8kY2dpcGFy YW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9LmNvbmYiKSBvciBkaWUgIlJlbW92aW5nIENv bmZpZ2ZpbGUgZmFpbDogJCEiOwoJICAgICAgcm1kaXIgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfSIpIHx8IGRpZSAiUmVtb3ZpbmcgRGlyZWN0b3J5 IGZhaWw6ICQhIjsKICAgICAgICB9CgkJICAgIGdvdG8gVlBOQ09ORl9FUlJPUjsKCQl9CgkgICAg fQoJfQoKCWlmICgoJGNnaXBhcmFtc3snVFlQRSd9IGVxICduZXQnKSAmJiAoISAkY2dpcGFyYW1z eydSRU1PVEUnfSkpIHsKCSAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGlu cHV0IGZvciByZW1vdGUgaG9zdC9pcCd9OwoJICAgIGlmICgkY2dpcGFyYW1zeydUWVBFJ30gZXEg J25ldCcpIHsKICAgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJuY29uZi8k Y2dpcGFyYW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9LmNvbmYiKSBvciBkaWUgIlJlbW92 aW5nIENvbmZpZ2ZpbGUgZmFpbDogJCEiOwoJICAgIHJtZGlyICgiJHtHZW5lcmFsOjpzd3Jvb3R9 L292cG4vbjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30iKSB8fCBkaWUgIlJlbW92aW5nIERpcmVj dG9yeSBmYWlsOiAkISI7CiAgICAgIH0KCSAgICBnb3RvIFZQTkNPTkZfRVJST1I7Cgl9CgoJaWYg KCRjZ2lwYXJhbXN7J1JFTU9URSd9KSB7CgkgICAgaWYgKCEgJkdlbmVyYWw6OnZhbGlkaXAoJGNn aXBhcmFtc3snUkVNT1RFJ30pKSB7CgkJaWYgKCEgJkdlbmVyYWw6OnZhbGlkZnFkbiAoJGNnaXBh cmFtc3snUkVNT1RFJ30pKSAgewoJCSAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZh bGlkIGlucHV0IGZvciByZW1vdGUgaG9zdC9pcCd9OwoJCSAgICBpZiAoJGNnaXBhcmFtc3snVFlQ RSd9IGVxICduZXQnKSB7CiAgICAgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4v bjJuY29uZi8kY2dpcGFyYW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9LmNvbmYiKSBvciBk aWUgIlJlbW92aW5nIENvbmZpZ2ZpbGUgZmFpbDogJCEiOwoJICAgICAgcm1kaXIgKCIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9uMm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfSIpIHx8IGRpZSAiUmVt b3ZpbmcgRGlyZWN0b3J5IGZhaWw6ICQhIjsKICAgICAgICB9CgkJICAgIGdvdG8gVlBOQ09ORl9F UlJPUjsKCQl9IGVsc2UgewoJCSAgICBpZiAoJnZhbGlkX2Ruc19ob3N0KCRjZ2lwYXJhbXN7J1JF TU9URSd9KSkgewoJCQkkd2Fybm1lc3NhZ2UgPSAiJExhbmc6OnRyeydjaGVjayB2cG4gbHInfSAk Y2dpcGFyYW1zeydSRU1PVEUnfS4gJExhbmc6OnRyeydkbnMgY2hlY2sgZmFpbGVkJ30iOwoJCQlp ZiAoJGNnaXBhcmFtc3snVFlQRSd9IGVxICduZXQnKSB7CgogICAgICB9CgkJICAgIH0KCQl9Cgkg ICAgfQoJfQoJaWYgKCRjZ2lwYXJhbXN7J1RZUEUnfSBuZSAnaG9zdCcpIHsKICAgICAgICAgICAg dW5sZXNzICgmR2VuZXJhbDo6dmFsaWRpcGFuZG1hc2soJGNnaXBhcmFtc3snTE9DQUxfU1VCTkVU J30pKSB7CgkgICAgICAgICAgICAkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydsb2NhbCBzdWJu ZXQgaXMgaW52YWxpZCd9OyAKCSAgICAgICAgICAgIGlmICgkY2dpcGFyYW1zeydUWVBFJ30gZXEg J25ldCcpIHsKICAgICAgICAgICAgICB1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9u Mm5jb25mLyRjZ2lwYXJhbXN7J05BTUUnfS8kY2dpcGFyYW1zeydOQU1FJ30uY29uZiIpIG9yIGRp ZSAiUmVtb3ZpbmcgQ29uZmlnZmlsZSBmYWlsOiAkISI7CgkgICAgICAgICAgICBybWRpciAoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9IikgfHwgZGll ICJSZW1vdmluZyBEaXJlY3RvcnkgZmFpbDogJCEiOwogICAgICAgICAgICAgIH0KCQkJZ290byBW UE5DT05GX0VSUk9SO30KCX0KCSMgQ2hlY2sgaWYgdGhlcmUgaXMgbm8gb3RoZXIgZW50cnkgd2l0 aG91dCBJUC1hZGRyZXNzIGFuZCBQU0sKCWlmICgkY2dpcGFyYW1zeydSRU1PVEUnfSBlcSAnJykg ewoJICAgIGZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY29uZmlnaGFzaCkgewoJCWlmKCgkY2dpcGFy YW1zeydLRVknfSBuZSAka2V5KSAmJiAKCQkgICAoJGNvbmZpZ2hhc2h7JGtleX1bNF0gZXEgJ3Bz aycgfHwgJGNnaXBhcmFtc3snQVVUSCd9IGVxICdwc2snKSAmJiAKCQkgICAgJGNvbmZpZ2hhc2h7 JGtleX1bMTBdIGVxICcnKSB7CgkJCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J3lvdSBjYW4g b25seSBkZWZpbmUgb25lIHJvYWR3YXJyaW9yIGNvbm5lY3Rpb24gd2hlbiB1c2luZyBwcmUtc2hh cmVkIGtleSBhdXRoZW50aWNhdGlvbid9OwoJCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkJfQoJICAg IH0KCX0KCWlmICgoJGNnaXBhcmFtc3snVFlQRSd9IGVxICduZXQnKSAmJiAoISAmR2VuZXJhbDo6 dmFsaWRpcGFuZG1hc2soJGNnaXBhcmFtc3snUkVNT1RFX1NVQk5FVCd9KSkpIHsKICAgICAgICAg ICAgICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J3JlbW90ZSBzdWJuZXQgaXMgaW52YWxp ZCd9OwogICAgICAgICAgICAgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vbjJu Y29uZi8kY2dpcGFyYW1zeydOQU1FJ30vJGNnaXBhcmFtc3snTkFNRSd9LmNvbmYiKSBvciBkaWUg IlJlbW92aW5nIENvbmZpZ2ZpbGUgZmFpbDogJCEiOwoJICAgICAgICAgICAgICBybWRpciAoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL24ybmNvbmYvJGNnaXBhcmFtc3snTkFNRSd9IikgfHwgZGll ICJSZW1vdmluZyBEaXJlY3RvcnkgZmFpbDogJCEiOwogICAgICAJCWdvdG8gVlBOQ09ORl9FUlJP UjsKCX0KCglpZiAoJGNnaXBhcmFtc3snRU5BQkxFRCd9ICF+IC9eKG9ufG9mZikkLykgewoJICAg ICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQnfTsKCSAgICBnb3RvIFZQ TkNPTkZfRVJST1I7Cgl9CglpZiAoJGNnaXBhcmFtc3snRURJVF9BRFZBTkNFRCd9ICF+IC9eKG9u fG9mZikkLykgewoJICAgICRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQn fTsKCSAgICBnb3RvIFZQTkNPTkZfRVJST1I7Cgl9CgojZml4cGxhdXNpCglpZiAoJGNnaXBhcmFt c3snQVVUSCd9IGVxICdwc2snKSAgewojCSAgICBpZiAoISBsZW5ndGgoJGNnaXBhcmFtc3snUFNL J30pICkgewojCQkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydwcmUtc2hhcmVkIGtleSBpcyB0 b28gc2hvcnQnfTsKIwkJZ290byBWUE5DT05GX0VSUk9SOwojCSAgICB9CiMJICAgIGlmICgkY2dp cGFyYW1zeydQU0snfSA9fiAvWyciLCZdLykgewojCQkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRy eydpbnZhbGlkIGNoYXJhY3RlcnMgZm91bmQgaW4gcHJlLXNoYXJlZCBrZXknfTsKIwkJZ290byBW UE5DT05GX0VSUk9SOwojCSAgICB9Cgl9IGVsc2lmICgkY2dpcGFyYW1zeydBVVRIJ30gZXEgJ2Nl cnRyZXEnKSB7CgkgICAgaWYgKCRjZ2lwYXJhbXN7J0tFWSd9KSB7CgkJJGVycm9ybWVzc2FnZSA9 ICRMYW5nOjp0cnsnY2FudCBjaGFuZ2UgY2VydGlmaWNhdGVzJ307CgkJZ290byBWUE5DT05GX0VS Uk9SOwoJICAgIH0KCSAgICBpZiAocmVmICgkY2dpcGFyYW1zeydGSCd9KSBuZSAnRmgnKSB7CgkJ JGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsndGhlcmUgd2FzIG5vIGZpbGUgdXBsb2FkJ307CgkJ Z290byBWUE5DT05GX0VSUk9SOwoJICAgIH0KCgkgICAgIyBNb3ZlIHVwbG9hZGVkIGNlcnRpZmlj YXRlIHJlcXVlc3QgdG8gYSB0ZW1wb3JhcnkgZmlsZQoJICAgIChteSAkZmgsIG15ICRmaWxlbmFt ZSkgPSB0ZW1wZmlsZSggKTsKCSAgICBpZiAoY29weSAoJGNnaXBhcmFtc3snRkgnfSwgJGZoKSAh PSAxKSB7CgkJJGVycm9ybWVzc2FnZSA9ICQhOwoJCWdvdG8gVlBOQ09ORl9FUlJPUjsKCSAgICB9 CgoJICAgICMgU2lnbiB0aGUgY2VydGlmaWNhdGUgcmVxdWVzdCBhbmQgbW92ZSBpdAoJICAgICMg U2lnbiB0aGUgaG9zdCBjZXJ0aWZpY2F0ZSByZXF1ZXN0CgkgICAgc3lzdGVtKCcvdXNyL2Jpbi9v cGVuc3NsJywgJ2NhJywgJy1kYXlzJywgIiRjZ2lwYXJhbXN7J0RBWVNfVkFMSUQnfSIsCgkJJy1i YXRjaCcsICctbm90ZXh0JywKCQknLWluJywgJGZpbGVuYW1lLAoJCSctb3V0JywgIiR7R2VuZXJh bDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05BTUUnfWNlcnQucGVtIiwKCQknLWNv bmZpZycsIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL29wZW5zc2wvb3Zwbi5jbmYiKTsKCSAgICBp ZiAoJD8pIHsKCQkkZXJyb3JtZXNzYWdlID0gIiRMYW5nOjp0cnsnb3BlbnNzbCBwcm9kdWNlZCBh biBlcnJvcid9OiAkPyI7CgkJdW5saW5rICgkZmlsZW5hbWUpOwoJCXVubGluayAoIiR7R2VuZXJh bDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05BTUUnfWNlcnQucGVtIik7CgkJJm5l d2NsZWFuc3NsZGF0YWJhc2UoKTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfSBlbHNlIHsK CQl1bmxpbmsgKCRmaWxlbmFtZSk7CgkJJmRlbGV0ZWJhY2t1cGNlcnQoKTsKCSAgICB9CgoJICAg IG15ICR0ZW1wID0gYC91c3IvYmluL29wZW5zc2wgeDUwOSAtdGV4dCAtaW4gJHtHZW5lcmFsOjpz d3Jvb3R9L292cG4vY2VydHMvJGNnaXBhcmFtc3snTkFNRSd9Y2VydC5wZW1gOwoJICAgICR0ZW1w ID1+IC9TdWJqZWN0Oi4qQ049KC4qKVtcbl0vOwoJICAgICR0ZW1wID0gJDE7CgkgICAgJHRlbXAg PX4gcysvRW1haWwrLCBFKzsKCSAgICAkdGVtcCA9fiBzLyBTVD0vIFM9LzsKCSAgICAkY2dpcGFy YW1zeydDRVJUX05BTUUnfSA9ICR0ZW1wOwoJICAgICRjZ2lwYXJhbXN7J0NFUlRfTkFNRSd9ID1+ IHMvLC8vZzsKCSAgICAkY2dpcGFyYW1zeydDRVJUX05BTUUnfSA9fiBzL1wnLy9nOwoJICAgIGlm ICgkY2dpcGFyYW1zeydDRVJUX05BTUUnfSBlcSAnJykgewoJCSRlcnJvcm1lc3NhZ2UgPSAkTGFu Zzo6dHJ7J2NvdWxkIG5vdCByZXRyaWV2ZSBjb21tb24gbmFtZSBmcm9tIGNlcnRpZmljYXRlJ307 CgkJZ290byBWUE5DT05GX0VSUk9SOwoJICAgIH0KCX0gZWxzaWYgKCRjZ2lwYXJhbXN7J0FVVEgn fSBlcSAnY2VydGZpbGUnKSB7CgkgICAgaWYgKCRjZ2lwYXJhbXN7J0tFWSd9KSB7CgkJJGVycm9y bWVzc2FnZSA9ICRMYW5nOjp0cnsnY2FudCBjaGFuZ2UgY2VydGlmaWNhdGVzJ307CgkJZ290byBW UE5DT05GX0VSUk9SOwoJICAgIH0KCSAgICBpZiAocmVmICgkY2dpcGFyYW1zeydGSCd9KSBuZSAn RmgnKSB7CgkJJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsndGhlcmUgd2FzIG5vIGZpbGUgdXBs b2FkJ307CgkJZ290byBWUE5DT05GX0VSUk9SOwoJICAgIH0KCSAgICAjIE1vdmUgdXBsb2FkZWQg Y2VydGlmaWNhdGUgdG8gYSB0ZW1wb3JhcnkgZmlsZQoJICAgIChteSAkZmgsIG15ICRmaWxlbmFt ZSkgPSB0ZW1wZmlsZSggKTsKCSAgICBpZiAoY29weSAoJGNnaXBhcmFtc3snRkgnfSwgJGZoKSAh PSAxKSB7CgkJJGVycm9ybWVzc2FnZSA9ICQhOwoJCWdvdG8gVlBOQ09ORl9FUlJPUjsKCSAgICB9 CgoJICAgICMgVmVyaWZ5IHRoZSBjZXJ0aWZpY2F0ZSBoYXMgYSB2YWxpZCBDQSBhbmQgbW92ZSBp dAoJICAgIG15ICR2YWxpZGNhID0gMDsKCSAgICBteSAkdGVzdCA9IGAvdXNyL2Jpbi9vcGVuc3Ns IHZlcmlmeSAtQ0FmaWxlICR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhL2NhY2VydC5wZW0gJGZp bGVuYW1lYDsKCSAgICBpZiAoJHRlc3QgPX4gLzogT0svKSB7CgkJJHZhbGlkY2EgPSAxOwoJICAg IH0gZWxzZSB7CgkJZm9yZWFjaCBteSAka2V5IChrZXlzICVjYWhhc2gpIHsKCQkgICAgJHRlc3Qg PSBgL3Vzci9iaW4vb3BlbnNzbCB2ZXJpZnkgLUNBZmlsZSAke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jYS8kY2FoYXNoeyRrZXl9WzBdY2VydC5wZW0gJGZpbGVuYW1lYDsKCQkgICAgaWYgKCR0ZXN0 ID1+IC86IE9LLykgewoJCQkkdmFsaWRjYSA9IDE7CgkJICAgIH0KCQl9CgkgICAgfQoJICAgIGlm ICghICR2YWxpZGNhKSB7CgkJJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnY2VydGlmaWNhdGUg ZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGNhIGFzc29jaWF0ZWQgd2l0aCBpdCd9OwoJCXVubGluayAo JGZpbGVuYW1lKTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfSBlbHNlIHsKCQltb3ZlKCRm aWxlbmFtZSwgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05BTUUn fWNlcnQucGVtIik7CgkJaWYgKCQ/IG5lIDApIHsKCQkgICAgJGVycm9ybWVzc2FnZSA9ICIkTGFu Zzo6dHJ7J2NlcnRpZmljYXRlIGZpbGUgbW92ZSBmYWlsZWQnfTogJCEiOwoJCSAgICB1bmxpbmsg KCRmaWxlbmFtZSk7CgkJICAgIGdvdG8gVlBOQ09ORl9FUlJPUjsKCQl9CgkgICAgfQoKCSAgICBt eSAkdGVtcCA9IGAvdXNyL2Jpbi9vcGVuc3NsIHg1MDkgLXRleHQgLWluICR7R2VuZXJhbDo6c3dy b290fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05BTUUnfWNlcnQucGVtYDsKCSAgICAkdGVtcCA9 fiAvU3ViamVjdDouKkNOPSguKilbXG5dLzsKCSAgICAkdGVtcCA9ICQxOwoJICAgICR0ZW1wID1+ IHMrL0VtYWlsKywgRSs7CgkgICAgJHRlbXAgPX4gcy8gU1Q9LyBTPS87CgkgICAgJGNnaXBhcmFt c3snQ0VSVF9OQU1FJ30gPSAkdGVtcDsKCSAgICAkY2dpcGFyYW1zeydDRVJUX05BTUUnfSA9fiBz LywvL2c7CgkgICAgJGNnaXBhcmFtc3snQ0VSVF9OQU1FJ30gPX4gcy9cJy8vZzsKCSAgICBpZiAo JGNnaXBhcmFtc3snQ0VSVF9OQU1FJ30gZXEgJycpIHsKCQl1bmxpbmsgKCIke0dlbmVyYWw6OnN3 cm9vdH0vb3Zwbi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31jZXJ0LnBlbSIpOwoJCSRlcnJvcm1l c3NhZ2UgPSAkTGFuZzo6dHJ7J2NvdWxkIG5vdCByZXRyaWV2ZSBjb21tb24gbmFtZSBmcm9tIGNl cnRpZmljYXRlJ307CgkJZ290byBWUE5DT05GX0VSUk9SOwoJICAgIH0KCX0gZWxzaWYgKCRjZ2lw YXJhbXN7J0FVVEgnfSBlcSAnY2VydGdlbicpIHsKCSAgICBpZiAoJGNnaXBhcmFtc3snS0VZJ30p IHsKCQkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydjYW50IGNoYW5nZSBjZXJ0aWZpY2F0ZXMn fTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfQoJICAgICMgVmFsaWRhdGUgaW5wdXQgc2lu Y2UgdGhlIGZvcm0gd2FzIHN1Ym1pdHRlZAoJICAgIGlmIChsZW5ndGgoJGNnaXBhcmFtc3snQ0VS VF9OQU1FJ30pID42MCkgewoJCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J25hbWUgdG9vIGxv bmcnfTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfQoJICAgIGlmICgkY2dpcGFyYW1zeydD RVJUX05BTUUnfSAhfiAvXlthLXpBLVowLTkgLFwuXC1fXSskLykgewoJCSRlcnJvcm1lc3NhZ2Ug PSAkTGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIG5hbWUnfTsKCQlnb3RvIFZQTkNPTkZfRVJS T1I7CgkgICAgfQoJICAgIGlmICgkY2dpcGFyYW1zeydDRVJUX0VNQUlMJ30gbmUgJycgJiYgKCEg JkdlbmVyYWw6OnZhbGlkZW1haWwoJGNnaXBhcmFtc3snQ0VSVF9FTUFJTCd9KSkpIHsKCQkkZXJy b3JtZXNzYWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGlucHV0IGZvciBlLW1haWwgYWRkcmVzcyd9 OwoJCWdvdG8gVlBOQ09ORl9FUlJPUjsKCSAgICB9CgkgICAgaWYgKGxlbmd0aCgkY2dpcGFyYW1z eydDRVJUX0VNQUlMJ30pID4gNDApIHsKCQkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRyeydlLW1h aWwgYWRkcmVzcyB0b28gbG9uZyd9OwoJCWdvdG8gVlBOQ09ORl9FUlJPUjsKCSAgICB9CgkgICAg aWYgKCRjZ2lwYXJhbXN7J0NFUlRfT1UnfSBuZSAnJyAmJiAkY2dpcGFyYW1zeydDRVJUX09VJ30g IX4gL15bYS16QS1aMC05ICxcLlwtX10qJC8pIHsKCQkkZXJyb3JtZXNzYWdlID0gJExhbmc6OnRy eydpbnZhbGlkIGlucHV0IGZvciBkZXBhcnRtZW50J307CgkJZ290byBWUE5DT05GX0VSUk9SOwoJ ICAgIH0KCSAgICBpZiAobGVuZ3RoKCRjZ2lwYXJhbXN7J0NFUlRfT1JHQU5JWkFUSU9OJ30pID42 MCkgewoJCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J29yZ2FuaXphdGlvbiB0b28gbG9uZyd9 OwoJCWdvdG8gVlBOQ09ORl9FUlJPUjsKCSAgICB9CgkgICAgaWYgKCRjZ2lwYXJhbXN7J0NFUlRf T1JHQU5JWkFUSU9OJ30gIX4gL15bYS16QS1aMC05ICxcLlwtX10rJC8pIHsKCQkkZXJyb3JtZXNz YWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGlucHV0IGZvciBvcmdhbml6YXRpb24nfTsKCQlnb3Rv IFZQTkNPTkZfRVJST1I7CgkgICAgfQoJICAgIGlmICgkY2dpcGFyYW1zeydDRVJUX0NJVFknfSBu ZSAnJyAmJiAkY2dpcGFyYW1zeydDRVJUX0NJVFknfSAhfiAvXlthLXpBLVowLTkgLFwuXC1fXSok LykgewoJCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J2ludmFsaWQgaW5wdXQgZm9yIGNpdHkn fTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfQoJICAgIGlmICgkY2dpcGFyYW1zeydDRVJU X1NUQVRFJ30gbmUgJycgJiYgJGNnaXBhcmFtc3snQ0VSVF9TVEFURSd9ICF+IC9eW2EtekEtWjAt OSAsXC5cLV9dKiQvKSB7CgkJJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaW52YWxpZCBpbnB1 dCBmb3Igc3RhdGUgb3IgcHJvdmluY2UnfTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfQoJ ICAgIGlmICgkY2dpcGFyYW1zeydDRVJUX0NPVU5UUlknfSAhfiAvXltBLVpdKiQvKSB7CgkJJGVy cm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnaW52YWxpZCBpbnB1dCBmb3IgY291bnRyeSd9OwoJCWdv dG8gVlBOQ09ORl9FUlJPUjsKCSAgICB9CgkgICAgaWYgKCRjZ2lwYXJhbXN7J0NFUlRfUEFTUzEn fSBuZSAnJyAmJiAkY2dpcGFyYW1zeydDRVJUX1BBU1MyJ30gbmUgJycpewoJCWlmIChsZW5ndGgo JGNnaXBhcmFtc3snQ0VSVF9QQVNTMSd9KSA8IDUpIHsKCQkgICAgJGVycm9ybWVzc2FnZSA9ICRM YW5nOjp0cnsncGFzc3dvcmQgdG9vIHNob3J0J307CgkJICAgIGdvdG8gVlBOQ09ORl9FUlJPUjsK CQl9CgkgICAgfQkKCSAgICBpZiAoJGNnaXBhcmFtc3snQ0VSVF9QQVNTMSd9IG5lICRjZ2lwYXJh bXN7J0NFUlRfUEFTUzInfSkgewoJCSRlcnJvcm1lc3NhZ2UgPSAkTGFuZzo6dHJ7J3Bhc3N3b3Jk cyBkbyBub3QgbWF0Y2gnfTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfQoKCSAgICAjIFJl cGxhY2UgZW1wdHkgc3RyaW5ncyB3aXRoIGEgLgoJICAgIChteSAkb3UgPSAkY2dpcGFyYW1zeydD RVJUX09VJ30pID1+IHMvXlxzKiQvXC4vOwoJICAgIChteSAkY2l0eSA9ICRjZ2lwYXJhbXN7J0NF UlRfQ0lUWSd9KSA9fiBzL15ccyokL1wuLzsKCSAgICAobXkgJHN0YXRlID0gJGNnaXBhcmFtc3sn Q0VSVF9TVEFURSd9KSA9fiBzL15ccyokL1wuLzsKCgkgICAgIyBDcmVhdGUgdGhlIEhvc3QgY2Vy dGlmaWNhdGUgcmVxdWVzdCBjbGllbnQKCSAgICBteSAkcGlkID0gb3BlbihPUEVOU1NMLCAifC0i KTsKCSAgICAkU0lHe0FMUk19ID0gc3ViIHsgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsnYnJv a2VuIHBpcGUnfTsgZ290byBWUE5DT05GX0VSUk9SO307CgkgICAgaWYgKCRwaWQpIHsJIyBwYXJl bnQKCQlwcmludCBPUEVOU1NMICIkY2dpcGFyYW1zeydDRVJUX0NPVU5UUlknfVxuIjsKCQlwcmlu dCBPUEVOU1NMICIkc3RhdGVcbiI7CgkJcHJpbnQgT1BFTlNTTCAiJGNpdHlcbiI7CgkJcHJpbnQg T1BFTlNTTCAiJGNnaXBhcmFtc3snQ0VSVF9PUkdBTklaQVRJT04nfVxuIjsKCQlwcmludCBPUEVO U1NMICIkb3VcbiI7CgkJcHJpbnQgT1BFTlNTTCAiJGNnaXBhcmFtc3snQ0VSVF9OQU1FJ31cbiI7 CgkJcHJpbnQgT1BFTlNTTCAiJGNnaXBhcmFtc3snQ0VSVF9FTUFJTCd9XG4iOwoJCXByaW50IE9Q RU5TU0wgIi5cbiI7CgkJcHJpbnQgT1BFTlNTTCAiLlxuIjsKCQljbG9zZSAoT1BFTlNTTCk7CgkJ aWYgKCQ/KSB7CgkJICAgICRlcnJvcm1lc3NhZ2UgPSAiJExhbmc6OnRyeydvcGVuc3NsIHByb2R1 Y2VkIGFuIGVycm9yJ306ICQ/IjsKCQkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9b3Zw bi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31rZXkucGVtIik7CgkJICAgIHVubGluayAoIiR7R2Vu ZXJhbDo6c3dyb290fW92cG4vY2VydHMvJGNnaXBhcmFtc3snTkFNRSd9cmVxLnBlbSIpOwoJCSAg ICBnb3RvIFZQTkNPTkZfRVJST1I7CgkJfQoJICAgIH0gZWxzZSB7CSMgY2hpbGQKCQl1bmxlc3Mg KGV4ZWMgKCcvdXNyL2Jpbi9vcGVuc3NsJywgJ3JlcScsICctbm9kZXMnLCAnLXJhbmQnLCAnL3By b2MvaW50ZXJydXB0czovcHJvYy9uZXQvcnRfY2FjaGUnLAoJCQknLW5ld2tleScsICdyc2E6MTAy NCcsCgkJCScta2V5b3V0JywgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJh bXN7J05BTUUnfWtleS5wZW0iLAoJCQknLW91dCcsICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j ZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31yZXEucGVtIiwKCQkJJy1jb25maWcnLCIke0dlbmVyYWw6 OnN3cm9vdH0vb3Zwbi9vcGVuc3NsL292cG4uY25mIikpIHsKCQkgICAgJGVycm9ybWVzc2FnZSA9 ICIkTGFuZzo6dHJ7J2NhbnQgc3RhcnQgb3BlbnNzbCd9OiAkISI7CgkJICAgIHVubGluayAoIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05BTUUnfWtleS5wZW0iKTsK CQkgICAgdW5saW5rICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2VydHMvJGNnaXBhcmFtc3sn TkFNRSd9cmVxLnBlbSIpOwoJCSAgICBnb3RvIFZQTkNPTkZfRVJST1I7CgkJfQoJICAgIH0KCQoJ ICAgICMgU2lnbiB0aGUgaG9zdCBjZXJ0aWZpY2F0ZSByZXF1ZXN0CgkgICAgc3lzdGVtKCcvdXNy L2Jpbi9vcGVuc3NsJywgJ2NhJywgJy1kYXlzJywgIiRjZ2lwYXJhbXN7J0RBWVNfVkFMSUQnfSIs CgkJJy1iYXRjaCcsICctbm90ZXh0JywKCQknLWluJywgICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31yZXEucGVtIiwKCQknLW91dCcsICIke0dlbmVyYWw6 OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31jZXJ0LnBlbSIsCgkJJy1jb25m aWcnLCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9vcGVuc3NsL292cG4uY25mIik7CgkgICAgaWYg KCQ/KSB7CgkJJGVycm9ybWVzc2FnZSA9ICIkTGFuZzo6dHJ7J29wZW5zc2wgcHJvZHVjZWQgYW4g ZXJyb3InfTogJD8iOwoJCXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRj Z2lwYXJhbXN7J05BTUUnfWtleS5wZW0iKTsKCQl1bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31yZXEucGVtIik7CgkJdW5saW5rICgiJHtHZW5l cmFsOjpzd3Jvb3R9L292cG4vY2VydHMvJGNnaXBhcmFtc3snTkFNRSd9Y2VydC5wZW0iKTsKCQkm bmV3Y2xlYW5zc2xkYXRhYmFzZSgpOwoJCWdvdG8gVlBOQ09ORl9FUlJPUjsKCSAgICB9IGVsc2Ug ewoJCXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05B TUUnfXJlcS5wZW0iKTsKCQkmZGVsZXRlYmFja3VwY2VydCgpOwoJICAgIH0KCgkgICAgIyBDcmVh dGUgdGhlIHBrY3MxMiBmaWxlCgkgICAgc3lzdGVtKCcvdXNyL2Jpbi9vcGVuc3NsJywgJ3BrY3Mx MicsICctZXhwb3J0JywgCgkJJy1pbmtleScsICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0 cy8kY2dpcGFyYW1zeydOQU1FJ31rZXkucGVtIiwKCQknLWluJywgIiR7R2VuZXJhbDo6c3dyb290 fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05BTUUnfWNlcnQucGVtIiwKCQknLW5hbWUnLCAkY2dp cGFyYW1zeydOQU1FJ30sCgkJJy1wYXNzb3V0JywgInBhc3M6JGNnaXBhcmFtc3snQ0VSVF9QQVNT MSd9IiwKCQknLWNlcnRmaWxlJywgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NhL2NhY2VydC5w ZW0iLCAKCQknLWNhbmFtZScsICIkdnBuc2V0dGluZ3N7J1JPT1RDRVJUX09SR0FOSVpBVElPTid9 IENBIiwKCQknLW91dCcsICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY2dpcGFyYW1z eydOQU1FJ30ucDEyIik7CgkgICAgaWYgKCQ/KSB7CgkJJGVycm9ybWVzc2FnZSA9ICIkTGFuZzo6 dHJ7J29wZW5zc2wgcHJvZHVjZWQgYW4gZXJyb3InfTogJD8iOwoJCXVubGluayAoIiR7R2VuZXJh bDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJhbXN7J05BTUUnfWtleS5wZW0iKTsKCQl1bmxp bmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31jZXJ0 LnBlbSIpOwoJCXVubGluayAoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2NlcnRzLyRjZ2lwYXJh bXN7J05BTUUnfS5wMTIiKTsKCQlnb3RvIFZQTkNPTkZfRVJST1I7CgkgICAgfSBlbHNlIHsKCQl1 bmxpbmsgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY2dpcGFyYW1zeydOQU1FJ31r ZXkucGVtIik7CgkgICAgfQoJfSBlbHNpZiAoJGNnaXBhcmFtc3snQVVUSCd9IGVxICdjZXJ0Jykg ewoJICAgIDsjIE5vdGhpbmcsIGp1c3QgZWRpdGluZwoJfSBlbHNlIHsKCSAgICAkZXJyb3JtZXNz YWdlID0gJExhbmc6OnRyeydpbnZhbGlkIGlucHV0IGZvciBhdXRoZW50aWNhdGlvbiBtZXRob2Qn fTsKCSAgICBnb3RvIFZQTkNPTkZfRVJST1I7Cgl9CgoJIyBDaGVjayBpZiB0aGVyZSBpcyBubyBv dGhlciBlbnRyeSB3aXRoIHRoaXMgY29tbW9uIG5hbWUKCWlmICgoISAkY2dpcGFyYW1zeydLRVkn fSkgJiYgKCRjZ2lwYXJhbXN7J0FVVEgnfSBuZSAncHNrJykpIHsKCSAgICBmb3JlYWNoIG15ICRr ZXkgKGtleXMgJWNvbmZpZ2hhc2gpIHsKCQlpZiAoJGNvbmZpZ2hhc2h7JGtleX1bMl0gZXEgJGNn aXBhcmFtc3snQ0VSVF9OQU1FJ30pIHsKCQkgICAgJGVycm9ybWVzc2FnZSA9ICRMYW5nOjp0cnsn YSBjb25uZWN0aW9uIHdpdGggdGhpcyBjb21tb24gbmFtZSBhbHJlYWR5IGV4aXN0cyd9OwoJCSAg ICBnb3RvIFZQTkNPTkZfRVJST1I7CgkJfQoJICAgIH0KCX0KCiAgICAgICAgIyBTYXZlIHRoZSBj b25maWcKCW15ICRrZXkgPSAkY2dpcGFyYW1zeydLRVknfTsKCQoJaWYgKCEgJGtleSkgewoJICAg ICRrZXkgPSAmR2VuZXJhbDo6ZmluZGhhc2hhcnJheWtleSAoXCVjb25maWdoYXNoKTsKCSAgICBm b3JlYWNoIG15ICRpICgwIC4uIDM4KSB7ICRjb25maWdoYXNoeyRrZXl9WyRpXSA9ICIiO30KCX0K CSRjb25maWdoYXNoeyRrZXl9WzBdIAkJPSAkY2dpcGFyYW1zeydFTkFCTEVEJ307CgkkY29uZmln aGFzaHska2V5fVsxXSAJCT0gJGNnaXBhcmFtc3snTkFNRSd9OwoJaWYgKCghICRjZ2lwYXJhbXN7 J0tFWSd9KSAmJiAkY2dpcGFyYW1zeydBVVRIJ30gbmUgJ3BzaycpIHsKCSAgICAkY29uZmlnaGFz aHska2V5fVsyXSAJPSAkY2dpcGFyYW1zeydDRVJUX05BTUUnfTsKCX0KCQoJJGNvbmZpZ2hhc2h7 JGtleX1bM10gCQk9ICRjZ2lwYXJhbXN7J1RZUEUnfTsKCWlmICgkY2dpcGFyYW1zeydBVVRIJ30g ZXEgJ3BzaycpIHsKCSAgICAkY29uZmlnaGFzaHska2V5fVs0XSAJPSAncHNrJzsKCSAgICAkY29u ZmlnaGFzaHska2V5fVs1XSAJPSAkY2dpcGFyYW1zeydQU0snfTsKCX0gZWxzZSB7CgkgICAgJGNv bmZpZ2hhc2h7JGtleX1bNF0gCT0gJ2NlcnQnOwoJfQoJaWYgKCRjZ2lwYXJhbXN7J1RZUEUnfSBl cSAnbmV0JykgewoJICAgICRjb25maWdoYXNoeyRrZXl9WzZdIAk9ICRjZ2lwYXJhbXN7J1NJREUn fTsKCSAgICAkY29uZmlnaGFzaHska2V5fVsxMV0gCT0gJGNnaXBhcmFtc3snUkVNT1RFX1NVQk5F VCd9OwoJfQoJJGNvbmZpZ2hhc2h7JGtleX1bOF0gCQk9ICRjZ2lwYXJhbXN7J0xPQ0FMX1NVQk5F VCd9OwoJJGNvbmZpZ2hhc2h7JGtleX1bMTBdIAkJPSAkY2dpcGFyYW1zeydSRU1PVEUnfTsKICBp ZiAoJGNnaXBhcmFtc3snT1ZQTl9NR01UJ30gZXEgJycpIHsKCSRjb25maWdoYXNoeyRrZXl9WzIy XSAJCT0gJGNvbmZpZ2hhc2h7JGtleX1bMjldOwogIH0gZWxzZSB7CgkkY29uZmlnaGFzaHska2V5 fVsyMl0gCQk9ICRjZ2lwYXJhbXN7J09WUE5fTUdNVCd9OwogIH0KCSRjb25maWdoYXNoeyRrZXl9 WzIzXSAJCT0gJGNnaXBhcmFtc3snTVNTRklYJ307CgkkY29uZmlnaGFzaHska2V5fVsyNF0gCQk9 ICRjZ2lwYXJhbXN7J0ZSQUdNRU5UJ307CgkkY29uZmlnaGFzaHska2V5fVsyNV0gCQk9ICRjZ2lw YXJhbXN7J1JFTUFSSyd9OwoJJGNvbmZpZ2hhc2h7JGtleX1bMjZdIAkJPSAkY2dpcGFyYW1zeydJ TlRFUkZBQ0UnfTsKIyBuZXcgZmllbGRzCQoJJGNvbmZpZ2hhc2h7JGtleX1bMjddIAkJPSAkY2dp cGFyYW1zeydPVlBOX1NVQk5FVCd9OwoJJGNvbmZpZ2hhc2h7JGtleX1bMjhdIAkJPSAkY2dpcGFy YW1zeydQUk9UT0NPTCd9OwoJJGNvbmZpZ2hhc2h7JGtleX1bMjldIAkJPSAkY2dpcGFyYW1zeydE RVNUX1BPUlQnfTsKCSRjb25maWdoYXNoeyRrZXl9WzMwXSAJCT0gJGNnaXBhcmFtc3snQ09NUExa Tyd9OwoJJGNvbmZpZ2hhc2h7JGtleX1bMzFdIAkJPSAkY2dpcGFyYW1zeydNVFUnfTsKCSRjb25m aWdoYXNoeyRrZXl9WzMyXSAJCT0gJGNnaXBhcmFtc3snQ0hFQ0sxJ307CglteSAkbmFtZT0kY2dp cGFyYW1zeydDSEVDSzEnfTsKCSRjb25maWdoYXNoeyRrZXl9WzMzXSAJCT0gJGNnaXBhcmFtc3sk bmFtZX07CgkkY29uZmlnaGFzaHska2V5fVszNF0gCQk9ICRjZ2lwYXJhbXN7J1JHJ307CgkkY29u ZmlnaGFzaHska2V5fVszNV0gCQk9ICRjZ2lwYXJhbXN7J0NDRF9ETlMxJ307CgkkY29uZmlnaGFz aHska2V5fVszNl0gCQk9ICRjZ2lwYXJhbXN7J0NDRF9ETlMyJ307CgkkY29uZmlnaGFzaHska2V5 fVszN10gCQk9ICRjZ2lwYXJhbXN7J0NDRF9XSU5TJ307CgkJCgkJCgkmR2VuZXJhbDo6d3JpdGVo YXNoYXJyYXkoIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hh c2gpOwoJCglpZiAoJGNnaXBhcmFtc3snQ0hFQ0sxJ30gKXsKCQkKCQlteSAoJGNjZGlwLCRjY2Rz dWIpPXNwbGl0ICIvIiwkY2dpcGFyYW1zeyRuYW1lfTsKCQlteSAoJGEsJGIsJGMsJGQpID0gc3Bs aXQgKC9cLi8sJGNjZGlwKTsKCQkJaWYgKCAtZSAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Nk LyRjb25maWdoYXNoeyRrZXl9WzJdIil7dW5saW5rICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j Y2QvJGNnaXBhcmFtc3snQ0VSVF9OQU1FJ30iO30KCQkJb3BlbiAoIENDRFJXQ09ORiwnPicsIiR7 R2VuZXJhbDo6c3dyb290fS9vdnBuL2NjZC8kY29uZmlnaGFzaHska2V5fVsyXSIpIG9yIGRpZSAi VW5hYmxlIHRvIGNyZWF0ZSBjbGllbnRjb25maWdmaWxlICQhIjsKCQkJcHJpbnQgQ0NEUldDT05G ICIjIE9wZW5WUE4gQ2xpZW50Y29uZmlnIGZyb20gQ0NEIGV4dGVuc2lvbiBieSBDb3B5bWFzdGVy I1xuXG4iOwoJCQlpZigkY2dpcGFyYW1zeydDSEVDSzEnfSBlcSAnZHluYW1pYycpewoJCQkJcHJp bnQgQ0NEUldDT05GICIjVGhpcyBjbGllbnQgdXNlcyB0aGUgZHluYW1pYyBwb29sXG4iOwoJCQl9 ZWxzZXsKCQkJCXByaW50IENDRFJXQ09ORiAiI0lwIGFkZHJlc3MgY2xpZW50IGFuZCBTZXJ2ZXJc biI7CgkJCQlwcmludCBDQ0RSV0NPTkYgImlmY29uZmlnLXB1c2ggJGNjZGlwICIuJkdlbmVyYWw6 OmdldGxhc3RpcCgkY2NkaXAsMSkuIlxuIjsKCQkJfQoJCQlpZiAoJGNvbmZpZ2hhc2h7JGtleX1b MzRdIGVxICdvbicpewoJCQkJcHJpbnQgQ0NEUldDT05GICJcbiNSZWRpcmVjdCBHYXRld2F5OiBc biNBbGwgSVAgdHJhZmZpYyBpcyByZWRpcmVjdGVkIHRocm91Z2ggdGhlIHZwbiBcbiI7CgkJCQlw cmludCBDQ0RSV0NPTkYgInB1c2ggcmVkaXJlY3QtZ2F0ZXdheVxuIjsKCQkJfQoJCQlpZiAoJGNn aXBhcmFtc3snSVInfSBuZSAnJyl7CgkJCQlwcmludCBDQ0RSV0NPTkYgIlxuI0NsaWVudCByb3V0 ZXMgdGhlc2UgTmV0d29ya3MgKGJlaGluZCBDbGllbnQpXG4iOwoJCQkJZm9yZWFjaCBteSAka2V5 IChrZXlzICVjY2Ryb3V0ZWhhc2gpewoJCQkJCWlmICgkY2Nkcm91dGVoYXNoeyRrZXl9WzBdIGVx ICRjZ2lwYXJhbXN7J05BTUUnfSl7CgkJCQkJCWZvcmVhY2ggbXkgJGkgKCAxIC4uICQjeyRjY2Ry b3V0ZWhhc2h7JGtleX19KXsKCQkJCQkJCW15ICgkYSwkYik9c3BsaXQgKC9cLy8sJGNjZHJvdXRl aGFzaHska2V5fVskaV0pOwoJCQkJCQkJcHJpbnQgQ0NEUldDT05GICJpcm91dGUgJGEgJGJcbiI7 CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJaWYgKCRjZ2lwYXJhbXN7J0lGUk9VVEUnfSBu ZSAnJyl7CgkJCQlwcmludCBDQ0RSV0NPTkYgIlxuI0NsaWVudCBnZXRzIHJvdXRlcyB0byB0aGVz ZSBOZXR3b3JrcyAoYmVoaW5kIElQRklSRSlcbiI7CgkJCQlmb3JlYWNoIG15ICRrZXkgKGtleXMg JWNjZHJvdXRlMmhhc2gpewoJCQkJCWlmICgkY2Nkcm91dGUyaGFzaHska2V5fVswXSBlcSAkY2dp cGFyYW1zeydOQU1FJ30pewoJCQkJCQlmb3JlYWNoIG15ICRpICggMSAuLiAkI3skY2Nkcm91dGUy aGFzaHska2V5fX0pewoJCQkJCQkJaWYoJGNjZHJvdXRlMmhhc2h7JGtleX1bJGldIGVxICRMYW5n Ojp0cnsnYmx1ZSd9KXsKCQkJCQkJCQlteSAlYmx1ZT0oKTsKCQkJCQkJCQkmR2VuZXJhbDo6cmVh ZGhhc2goIiR7R2VuZXJhbDo6c3dyb290fS9ldGhlcm5ldC9zZXR0aW5ncyIsIFwlYmx1ZSk7CgkJ CQkJCQkJcHJpbnQgQ0NEUldDT05GICJwdXNoIFwicm91dGUgJGJsdWV7QkxVRV9BRERSRVNTfSAg JGJsdWV7QkxVRV9ORVRNQVNLfVxuIjsKCQkJCQkJCX1lbHNpZigkY2Nkcm91dGUyaGFzaHska2V5 fVskaV0gZXEgJExhbmc6OnRyeydvcmFuZ2UnfSl7CgkJCQkJCQkJbXkgJW9yYW5nZT0oKTsKCQkJ CQkJCQkmR2VuZXJhbDo6cmVhZGhhc2goIiR7R2VuZXJhbDo6c3dyb290fS9ldGhlcm5ldC9zZXR0 aW5ncyIsIFwlb3JhbmdlKTsKCQkJCQkJCQlwcmludCBDQ0RSV0NPTkYgInB1c2ggXCJyb3V0ZSAk b3Jhbmdle09SQU5HRV9BRERSRVNTfSAgJG9yYW5nZXtPUkFOR0VfTkVUTUFTS31cbiI7CgkJCQkJ CQl9ZWxzZXsKCQkJCQkJCQlteSAoJGEsJGIpPXNwbGl0ICgvXC8vLCRjY2Ryb3V0ZTJoYXNoeyRr ZXl9WyRpXSk7CgkJCQkJCQkJcHJpbnQgQ0NEUldDT05GICJwdXNoIFwicm91dGUgJGEgJGJcIlxu IjsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQlpZigoJGNnaXBhcmFtc3sn Q0NEX0ROUzEnfSBlcSAnJykgJiYgKCRjZ2lwYXJhbXN7J0NDRF9ETlMxJ30gbmUgJycpKXsgJGNn aXBhcmFtc3snQ0NEX0ROUzEnfSA9ICRjZ2lwYXJhbXN7J0NDRF9ETlMyJ307JGNnaXBhcmFtc3sn Q0NEX0ROUzInfT0nJzt9CgkJCWlmKCRjZ2lwYXJhbXN7J0NDRF9ETlMxJ30gbmUgJycpewoJCQkJ cHJpbnQgQ0NEUldDT05GICJcbiNDbGllbnQgZ2V0cyB0aGVzZSBOYW1lc2VydmVyc1xuIjsKCQkJ CXByaW50IENDRFJXQ09ORiAicHVzaCBcImRoY3Atb3B0aW9uIEROUyAkY2dpcGFyYW1zeydDQ0Rf RE5TMSd9XCIgXG4iOwoJCQl9CgkJCWlmKCRjZ2lwYXJhbXN7J0NDRF9ETlMyJ30gbmUgJycpewoJ CQkJcHJpbnQgQ0NEUldDT05GICJwdXNoIFwiZGhjcC1vcHRpb24gRE5TICRjZ2lwYXJhbXN7J0ND RF9ETlMyJ31cIiBcbiI7CgkJCX0KCQkJaWYoJGNnaXBhcmFtc3snQ0NEX1dJTlMnfSBuZSAnJyl7 CgkJCQlwcmludCBDQ0RSV0NPTkYgIlxuI0NsaWVudCBnZXRzIHRoaXMgV0lOUyBzZXJ2ZXJcbiI7 CgkJCQlwcmludCBDQ0RSV0NPTkYgInB1c2ggXCJkaGNwLW9wdGlvbiBXSU5TICRjZ2lwYXJhbXN7 J0NDRF9XSU5TJ31cIiBcbiI7CgkJCX0KCQkJY2xvc2UgQ0NEUldDT05GOwoJfQoKIyMjCiMgbS5h LmQgbjJuIGJlZ2luCiMjIwoJCglpZiAoJGNnaXBhcmFtc3snVFlQRSd9IGVxICduZXQnKSB7CgkK CWlmICgtZSAiL3Zhci9ydW4vJGNvbmZpZ2hhc2h7JGtleX1bMV1uMm4ucGlkIikgewogIHN5c3Rl bSgnL3Vzci9sb2NhbC9iaW4vb3BlbnZwbmN0cmwnLCAnLWtuMm4nLCAkY29uZmlnaGFzaHskY2dp cGFyYW1zeydLRVknfX1bMV0pOwoJCiAgJkdlbmVyYWw6OnJlYWRoYXNoYXJyYXkoIiR7R2VuZXJh bDo6c3dyb290fS9vdnBuL292cG5jb25maWciLCBcJWNvbmZpZ2hhc2gpOwoJbXkgJGtleSA9ICRj Z2lwYXJhbXN7J0tFWSd9OwoJaWYgKCEgJGtleSkgewoJICAgICRrZXkgPSAmR2VuZXJhbDo6Zmlu ZGhhc2hhcnJheWtleSAoXCVjb25maWdoYXNoKTsKCSAgICBmb3JlYWNoIG15ICRpICgwIC4uIDMx KSB7ICRjb25maWdoYXNoeyRrZXl9WyRpXSA9ICIiO30KCSAgICB9CiAgJGNvbmZpZ2hhc2h7JGtl eX1bMF0gPSAnb24nOwogICZHZW5lcmFsOjp3cml0ZWhhc2hhcnJheSgiJHtHZW5lcmFsOjpzd3Jv b3R9L292cG4vb3ZwbmNvbmZpZyIsIFwlY29uZmlnaGFzaCk7CiAgCiAgc3lzdGVtKCcvdXNyL2xv Y2FsL2Jpbi9vcGVudnBuY3RybCcsICctc24ybicsICRjb25maWdoYXNoeyRjZ2lwYXJhbXN7J0tF WSd9fVsxXSk7CgkgfSAgICAgICAgICAKICB9CgojIyMKIyBtLmEuZCBuMm4gZW5kCiMjIwkKCglp ZiAoJGNnaXBhcmFtc3snRURJVF9BRFZBTkNFRCd9IGVxICdvbicpIHsKCSAgICAkY2dpcGFyYW1z eydLRVknfSA9ICRrZXk7CgkgICAgJGNnaXBhcmFtc3snQUNUSU9OJ30gPSAkTGFuZzo6dHJ7J2Fk dmFuY2VkJ307Cgl9Cglnb3RvIFZQTkNPTkZfRU5EOwogICAgfSBlbHNlIHsKICAgICAgICAkY2dp cGFyYW1zeydFTkFCTEVEJ30gPSAnb24nOwojIyMKIyBtLmEuZCBuMm4gYmVnaW4KIyMjCQogICAg ICAgICRjZ2lwYXJhbXN7J01TU0ZJWCd9ID0gJ29uJzsKICAgICAgICAkY2dpcGFyYW1zeydGUkFH TUVOVCd9ID0gJzEzMDAnOwojIyMKIyBtLmEuZCBuMm4gZW5kCiMjIwkKCSRjZ2lwYXJhbXN7J1NJ REUnfSA9ICdsZWZ0JzsKCWlmICggISAtZiAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvY2Fr ZXkucGVtIiApIHsKCSAgICAkY2dpcGFyYW1zeydBVVRIJ30gPSAncHNrJzsKCX0gZWxzaWYgKCAh IC1mICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIikgewoJICAgICRjZ2lw YXJhbXN7J0FVVEgnfSA9ICdjZXJ0ZmlsZSc7Cgl9IGVsc2UgewogICAgICAgICAgICAkY2dpcGFy YW1zeydBVVRIJ30gPSAnY2VydGdlbic7Cgl9CgkkY2dpcGFyYW1zeydMT0NBTF9TVUJORVQnfSAg ICAgID0iJG5ldHNldHRpbmdzeydHUkVFTl9ORVRBRERSRVNTJ30vJG5ldHNldHRpbmdzeydHUkVF Tl9ORVRNQVNLJ30iOwoJJGNnaXBhcmFtc3snQ0VSVF9PUkdBTklaQVRJT04nfSA9ICR2cG5zZXR0 aW5nc3snUk9PVENFUlRfT1JHQU5JWkFUSU9OJ307CgkkY2dpcGFyYW1zeydDRVJUX0NJVFknfSAg ICAgICAgID0gJHZwbnNldHRpbmdzeydST09UQ0VSVF9DSVRZJ307CgkkY2dpcGFyYW1zeydDRVJU X1NUQVRFJ30gICAgICAgID0gJHZwbnNldHRpbmdzeydST09UQ0VSVF9TVEFURSd9OwoJJGNnaXBh cmFtc3snQ0VSVF9DT1VOVFJZJ30gICAgICA9ICR2cG5zZXR0aW5nc3snUk9PVENFUlRfQ09VTlRS WSd9OwogICAgfQoKICAgIFZQTkNPTkZfRVJST1I6CiAgICAkY2hlY2tlZHsnRU5BQkxFRCd9eydv ZmYnfSA9ICcnOwogICAgJGNoZWNrZWR7J0VOQUJMRUQnfXsnb24nfSA9ICcnOwogICAgJGNoZWNr ZWR7J0VOQUJMRUQnfXskY2dpcGFyYW1zeydFTkFCTEVEJ319ID0gJ0NIRUNLRUQnOwogICAgJGNo ZWNrZWR7J0VOQUJMRURfQkxVRSd9eydvZmYnfSA9ICcnOwogICAgJGNoZWNrZWR7J0VOQUJMRURf QkxVRSd9eydvbid9ID0gJyc7CiAgICAkY2hlY2tlZHsnRU5BQkxFRF9CTFVFJ317JGNnaXBhcmFt c3snRU5BQkxFRF9CTFVFJ319ID0gJ0NIRUNLRUQnOwogICAgJGNoZWNrZWR7J0VOQUJMRURfT1JB TkdFJ317J29mZid9ID0gJyc7CiAgICAkY2hlY2tlZHsnRU5BQkxFRF9PUkFOR0UnfXsnb24nfSA9 ICcnOwogICAgJGNoZWNrZWR7J0VOQUJMRURfT1JBTkdFJ317JGNnaXBhcmFtc3snRU5BQkxFRF9P UkFOR0UnfX0gPSAnQ0hFQ0tFRCc7CgoKICAgICRjaGVja2VkeydFRElUX0FEVkFOQ0VEJ317J29m Zid9ID0gJyc7CiAgICAkY2hlY2tlZHsnRURJVF9BRFZBTkNFRCd9eydvbid9ID0gJyc7CiAgICAk Y2hlY2tlZHsnRURJVF9BRFZBTkNFRCd9eyRjZ2lwYXJhbXN7J0VESVRfQURWQU5DRUQnfX0gPSAn Q0hFQ0tFRCc7CgogICAgJHNlbGVjdGVkeydTSURFJ317J3NlcnZlcid9ID0gJyc7CiAgICAkc2Vs ZWN0ZWR7J1NJREUnfXsnY2xpZW50J30gPSAnJzsKICAgICRzZWxlY3RlZHsnU0lERSd9eyRjZ2lw YXJhbXN7J1NJREUnfX0gPSAnU0VMRUNURUQnOwogICAgCiAgICAkc2VsZWN0ZWR7J1BST1RPQ09M J317J3VkcCd9ID0gJyc7CiAgICAkc2VsZWN0ZWR7J1BST1RPQ09MJ317J3RjcCd9ID0gJyc7CiAg ICAkc2VsZWN0ZWR7J1BST1RPQ09MJ317JGNnaXBhcmFtc3snUFJPVE9DT0wnfX0gPSAnU0VMRUNU RUQnOwoKCiAgICAkY2hlY2tlZHsnQVVUSCd9eydwc2snfSA9ICcnOwogICAgJGNoZWNrZWR7J0FV VEgnfXsnY2VydHJlcSd9ID0gJyc7CiAgICAkY2hlY2tlZHsnQVVUSCd9eydjZXJ0Z2VuJ30gPSAn JzsKICAgICRjaGVja2VkeydBVVRIJ317J2NlcnRmaWxlJ30gPSAnJzsKICAgICRjaGVja2VkeydB VVRIJ317JGNnaXBhcmFtc3snQVVUSCd9fSA9ICdDSEVDS0VEJzsKCiAgICAkc2VsZWN0ZWR7J0lO VEVSRkFDRSd9eyRjZ2lwYXJhbXN7J0lOVEVSRkFDRSd9fSA9ICdTRUxFQ1RFRCc7CiAgICAKICAg ICRjaGVja2VkeydDT01QTFpPJ317J29mZid9ID0gJyc7CiAgICAkY2hlY2tlZHsnQ09NUExaTyd9 eydvbid9ID0gJyc7CiAgICAkY2hlY2tlZHsnQ09NUExaTyd9eyRjZ2lwYXJhbXN7J0NPTVBMWk8n fX0gPSAnQ0hFQ0tFRCc7CgogICAgJGNoZWNrZWR7J01TU0ZJWCd9eydvZmYnfSA9ICcnOwogICAg JGNoZWNrZWR7J01TU0ZJWCd9eydvbid9ID0gJyc7CiAgICAkY2hlY2tlZHsnTVNTRklYJ317JGNn aXBhcmFtc3snTVNTRklYJ319ID0gJ0NIRUNLRUQnOwoKCiAgICBpZiAoMSkgewoJJkhlYWRlcjo6 c2hvd2h0dHBoZWFkZXJzKCk7CgkmSGVhZGVyOjpvcGVucGFnZSgkTGFuZzo6dHJ7J3ZwbiBjb25m aWd1cmF0aW9uIG1haW4nfSwgMSwgJycpOwoJJkhlYWRlcjo6b3BlbmJpZ2JveCgnMTAwJScsICdM RUZUJywgJycsICRlcnJvcm1lc3NhZ2UpOwoJaWYgKCRlcnJvcm1lc3NhZ2UpIHsKCSAgICAmSGVh ZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xFRlQnLCAkTGFuZzo6dHJ7J2Vycm9yIG1lc3NhZ2VzJ30p OwoJICAgIHByaW50ICI8Y2xhc3MgbmFtZT0nYmFzZSc+JGVycm9ybWVzc2FnZSI7CgkgICAgcHJp bnQgIiZuYnNwOzwvY2xhc3M+IjsKCSAgICAmSGVhZGVyOjpjbG9zZWJveCgpOwoJfQoKCWlmICgk d2Fybm1lc3NhZ2UpIHsKCSAgICAmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xFRlQnLCAiJExh bmc6OnRyeyd3YXJuaW5nIG1lc3NhZ2VzJ306Iik7CgkgICAgcHJpbnQgIjxjbGFzcyBuYW1lPSdi YXNlJz4kd2Fybm1lc3NhZ2UiOwoJICAgIHByaW50ICImbmJzcDs8L2NsYXNzPiI7CgkgICAgJkhl YWRlcjo6Y2xvc2Vib3goKTsKCX0KCglwcmludCAiPGZvcm0gbWV0aG9kPSdwb3N0JyBlbmN0eXBl PSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4iOwoJcHJpbnQgIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5h bWU9J1RZUEUnIHZhbHVlPSckY2dpcGFyYW1zeydUWVBFJ30nIC8+IjsKCglpZiAoJGNnaXBhcmFt c3snS0VZJ30pIHsKCSAgICBwcmludCAiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nS0VZJyB2 YWx1ZT0nJGNnaXBhcmFtc3snS0VZJ30nIC8+IjsKCSAgICBwcmludCAiPGlucHV0IHR5cGU9J2hp ZGRlbicgbmFtZT0nQVVUSCcgdmFsdWU9JyRjZ2lwYXJhbXN7J0FVVEgnfScgLz4iOwoJfQoKCSZI ZWFkZXI6Om9wZW5ib3goJzEwMCUnLCAnTEVGVCcsICIkTGFuZzo6dHJ7J2Nvbm5lY3Rpb24nfToi KTsKCXByaW50ICI8dGFibGUgd2lkdGg9JzEwMCUnICBib3JkZXI9JzAnPlxuIjsKCQoJCgkKCXBy aW50ICI8dHI+PHRkIHdpZHRoPScxNCUnIGNsYXNzPSdib2xkYmFzZSc+JExhbmc6OnRyeyduYW1l J306IDwvdGQ+IjsKCQoJaWYgKCRjZ2lwYXJhbXN7J1RZUEUnfSBlcSAnaG9zdCcpIHsKCSAgICBp ZiAoJGNnaXBhcmFtc3snS0VZJ30pIHsKCQlwcmludCAiPHRkIHdpZHRoPSczNSUnIGNsYXNzPSdi YXNlJz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdOQU1FJyB2YWx1ZT0nJGNnaXBhcmFtc3sn TkFNRSd9JyAvPiRjZ2lwYXJhbXN7J05BTUUnfTwvdGQ+IjsKCSAgICB9IGVsc2UgewoJCQkKCQlw cmludCAiPHRkIHdpZHRoPSczNSUnPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdOQU1FJyB2YWx1 ZT0nJGNnaXBhcmFtc3snTkFNRSd9JyBtYXhsZW5ndGg9JzIwJyBzaXplPSczMCcgLz48L3RkPiI7 CgkgICAgfQojCSAgICBwcmludCAiPHRyPjx0ZD4kTGFuZzo6dHJ7J2ludGVyZmFjZSd9PC90ZD4i OwojCSAgICBwcmludCAiPHRkPjxzZWxlY3QgbmFtZT0nSU5URVJGQUNFJz4iOwojCSAgICBwcmlu dCAiPG9wdGlvbiB2YWx1ZT0nUkVEJyAkc2VsZWN0ZWR7J0lOVEVSRkFDRSd9eydSRUQnfT5SRUQ8 L29wdGlvbj4iOwojCSAgICBpZiAoJG5ldHNldHRpbmdzeydCTFVFX0RFVid9IG5lICcnKSB7CiMJ ICAgIAlwcmludCAiPG9wdGlvbiB2YWx1ZT0nQkxVRScgJHNlbGVjdGVkeydJTlRFUkZBQ0UnfXsn QkxVRSd9PkJMVUU8L29wdGlvbj4iOwojCSAgICB9CiMgCSAgICBwcmludCAiPG9wdGlvbiB2YWx1 ZT0nR1JFRU4nICRzZWxlY3RlZHsnSU5URVJGQUNFJ317J0dSRUVOJ30+R1JFRU48L29wdGlvbj4i OwojCSAgICBwcmludCAiPG9wdGlvbiB2YWx1ZT0nT1JBTkdFJyAkc2VsZWN0ZWR7J0lOVEVSRkFD RSd9eydPUkFOR0UnfT5PUkFOR0U8L29wdGlvbj4iOwojCSAgICBwcmludCAiPC9zZWxlY3Q+PC90 ZD48L3RyPiI7CiMJICAgIHByaW50IDw8RU5ECgl9IGVsc2UgewoJICAgIHByaW50ICI8aW5wdXQg dHlwZT0naGlkZGVuJyBuYW1lPSdJTlRFUkZBQ0UnIHZhbHVlPSdyZWQnIC8+IjsKCSAgICBpZiAo JGNnaXBhcmFtc3snS0VZJ30pIHsKCQlwcmludCAiPHRkIHdpZHRoPScyNSUnIGNsYXNzPSdiYXNl JyBub3dyYXA9J25vd3JhcCc+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nTkFNRScgdmFsdWU9 JyRjZ2lwYXJhbXN7J05BTUUnfScgLz4kY2dpcGFyYW1zeydOQU1FJ308L3RkPiI7CgkgICAgfSBl bHNlIHsKCQlwcmludCAiPHRkIHdpZHRoPScyNSUnPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdO QU1FJyB2YWx1ZT0nJGNnaXBhcmFtc3snTkFNRSd9JyBtYXhsZW5ndGg9JzIwJyAvPjwvdGQ+IjsK CSAgICB9CgkgICAgCgkgICAgCgkgICAgCgkgICAgcHJpbnQgPDxFTkQKCQkgICAgPHRkIHdpZHRo PScyNSUnPiZuYnNwOzwvdGQ+CgkJICAgIDx0ZCB3aWR0aD0nMjUlJz4mbmJzcDs8L3RkPjwvdHI+ CgkJPHRyPjx0ZCBjbGFzcz0nYm9sZGJhc2UnIG5vd3JhcD0nbm93cmFwJz4kTGFuZzo6dHJ7J0Fj dCBhcyd9PC90ZD4KCQkgICAgPHRkPjxzZWxlY3QgbmFtZT0nU0lERSc+PG9wdGlvbiB2YWx1ZT0n c2VydmVyJyAkc2VsZWN0ZWR7J1NJREUnfXsnc2VydmVyJ30+JExhbmc6OnRyeydvcGVudnBuIHNl cnZlcid9PC9vcHRpb24+CgkJCQkJICAgIDxvcHRpb24gdmFsdWU9J2NsaWVudCcgJHNlbGVjdGVk eydTSURFJ317J2NsaWVudCd9PiRMYW5nOjp0cnsnb3BlbnZwbiBjbGllbnQnfTwvb3B0aW9uPjwv c2VsZWN0PjwvdGQ+CiAJCSAgICA8dGQgY2xhc3M9J2JvbGRiYXNlJz4kTGFuZzo6dHJ7J3JlbW90 ZSBob3N0L2lwJ306PC90ZD4KCQkgICAgPHRkPjxpbnB1dCB0eXBlPSdURVhUJyBuYW1lPSdSRU1P VEUnIHZhbHVlPSckY2dpcGFyYW1zeydSRU1PVEUnfScgLz48L3RkPjwvdHI+CgkJPHRyPjx0ZCBj bGFzcz0nYm9sZGJhc2UnIG5vd3JhcD0nbm93cmFwJz4kTGFuZzo6dHJ7J2xvY2FsIHN1Ym5ldCd9 PC90ZD4KCQkgICAgPHRkPjxpbnB1dCB0eXBlPSdURVhUJyBuYW1lPSdMT0NBTF9TVUJORVQnIHZh bHVlPSckY2dpcGFyYW1zeydMT0NBTF9TVUJORVQnfScgLz48L3RkPgoJCSAgICA8dGQgY2xhc3M9 J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+JExhbmc6OnRyeydyZW1vdGUgc3VibmV0J308L3Rk PgoJCSAgICA8dGQ+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J1JFTU9URV9TVUJORVQnIHZhbHVl PSckY2dpcGFyYW1zeydSRU1PVEVfU1VCTkVUJ30nIC8+PC90ZD48L3RyPgoJCTx0cj48dGQgY2xh c3M9J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+JExhbmc6OnRyeydvdnBuIHN1Ym5ldCd9PC90 ZD4KCQkgICAgPHRkPjxpbnB1dCB0eXBlPSdURVhUJyBuYW1lPSdPVlBOX1NVQk5FVCcgdmFsdWU9 JyRjZ2lwYXJhbXN7J09WUE5fU1VCTkVUJ30nIC8+PC90ZD48L3RyPgoJCTx0cj48dGQgY2xhc3M9 J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+JExhbmc6OnRyeydwcm90b2NvbCd9PC90ZD4KCQkg CiAgICAgPHRkPjxzZWxlY3QgbmFtZT0nUFJPVE9DT0wnPjxvcHRpb24gdmFsdWU9J3VkcCcgJHNl bGVjdGVkeydQUk9UT0NPTCd9eyd1ZHAnfT5VRFA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAg ICAgICAgCQkJPG9wdGlvbiB2YWx1ZT0ndGNwJyAkc2VsZWN0ZWR7J1BST1RPQ09MJ317J3RjcCd9 PlRDUDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+ICAgCgkJICAgIAogICAgICAgIDx0ZCBjbGFzcz0n Ym9sZGJhc2UnPiRMYW5nOjp0cnsnZGVzdGluYXRpb24gcG9ydCd9OjwvdGQ+CgkJICAgIDx0ZD48 aW5wdXQgdHlwZT0nVEVYVCcgbmFtZT0nREVTVF9QT1JUJyB2YWx1ZT0nJGNnaXBhcmFtc3snREVT VF9QT1JUJ30nIHNpemU9JzUnIC8+PC90ZD48L3RyPgoJICAgICAgICA8dHI+PHRkIGNsYXNzPSdi b2xkYmFzZScgbm93cmFwPSdub3dyYXAnPiRMYW5nOjp0cnsnY29tcC1sem8nfSAmbmJzcDs8aW1n IHNyYz0nL2Jsb2IuZ2lmJzwvdGQ+CgkJICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5h bWU9J0NPTVBMWk8nICRjaGVja2VkeydDT01QTFpPJ317J29uJ30gLz48L3RkPgoJCSAgICAKCQkg ICAgICA8dHI+PHRkIGNsYXNzPSdib2xkYmFzZScgbm93cmFwPSdub3dyYXAnPm1zc2ZpeCAmbmJz cDs8aW1nIHNyYz0nL2Jsb2IuZ2lmJyAvPjwvdGQ+CgkJICAgIDx0ZD48aW5wdXQgdHlwZT0nY2hl Y2tib3gnIG5hbWU9J01TU0ZJWCcgJGNoZWNrZWR7J01TU0ZJWCd9eydvbid9IC8+PC90ZD4KICAg ICAgICA8dGQ+JExhbmc6OnRyeydvcGVudnBuIGRlZmF1bHQnfTogPHNwYW4gY2xhc3M9ImJhc2Ui Pm9uPC9zcGFuPjwvdGQ+CiAgICAgICAgCiAgICAgICAgICA8dHI+PHRkIGNsYXNzPSdib2xkYmFz ZScgbm93cmFwPSdub3dyYXAnPmZyYWdtZW50ICZuYnNwOzxpbWcgc3JjPScvYmxvYi5naWYnIC8+ PC90ZD4KCQkgICAgPHRkPjxpbnB1dCB0eXBlPSdURVhUJyBuYW1lPSdGUkFHTUVOVCcgVkFMVUU9 JyRjZ2lwYXJhbXN7J0ZSQUdNRU5UJ30nc2l6ZT0nNScgLz48L3RkPgoJCSAgICA8dGQ+JExhbmc6 OnRyeydvcGVudnBuIGRlZmF1bHQnfTogPHNwYW4gY2xhc3M9ImJhc2UiPjEzMDA8L3NwYW4+PC90 ZD4KCQkgICAgCgkgICAgICAgIDx0cj48dGQgY2xhc3M9J2JvbGRiYXNlJyBub3dyYXA9J25vd3Jh cCc+JExhbmc6OnRyeydNVFUnfSZuYnNwOzxpbWcgc3JjPScvYmxvYi5naWYnIC8+PC90ZD4KCQkg ICAgPHRkPiA8aW5wdXQgdHlwZT0nVEVYVCcgbmFtZT0nTVRVJyBWQUxVRT0nJGNnaXBhcmFtc3sn TVRVJ30nc2l6ZT0nNScgLz48L3RkPgogICAgICAgIDx0ZCBjb2xzcGFuPScyJz4kTGFuZzo6dHJ7 J29wZW52cG4gZGVmYXVsdCd9OiB1ZHAvdGNwIDxzcGFuIGNsYXNzPSJiYXNlIj4xNTAwLzE0MDA8 L3NwYW4+PC90ZD4KICAgICAgICAKICAgICAgICA8dHI+PHRkIGNsYXNzPSdib2xkYmFzZScgbm93 cmFwPSdub3dyYXAnPk1hbmFnZW1lbnQgUG9ydCZuYnNwOzxpbWcgc3JjPScvYmxvYi5naWYnIC8+ PC90ZD4KCQkgICAgPHRkPiA8aW5wdXQgdHlwZT0nVEVYVCcgbmFtZT0nT1ZQTl9NR01UJyBWQUxV RT0nJGNnaXBhcmFtc3snT1ZQTl9NR01UJ30nc2l6ZT0nNScgLz48L3RkPgogICAgICAgIDx0ZCBj b2xzcGFuPScyJz4kTGFuZzo6dHJ7J29wZW52cG4gZGVmYXVsdCd9OiA8c3BhbiBjbGFzcz0iYmFz ZSI+JExhbmc6OnRyeydkZXN0aW5hdGlvbiBwb3J0J308L3NwYW4+PC90ZD4KCkVORAo7Cgl9CgoJ cHJpbnQgIjx0cj48dGQgY2xhc3M9J2JvbGRiYXNlJz4kTGFuZzo6dHJ7J3JlbWFyayB0aXRsZSd9 Jm5ic3A7PGltZyBzcmM9Jy9ibG9iLmdpZicgLz48L3RkPiI7CglwcmludCAiPHRkIGNvbHNwYW49 JzMnPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdSRU1BUksnIHZhbHVlPSckY2dpcGFyYW1zeydS RU1BUksnfScgc2l6ZT0nNTUnIG1heGxlbmd0aD0nNTAnIC8+PC90ZD48L3RyPjwvdGFibGU+IjsK CQoJaWYgKCRjZ2lwYXJhbXN7J1RZUEUnfSBlcSAnaG9zdCcpIHsKICAgICAgcHJpbnQgIjx0cj48 dGQ+JExhbmc6OnRyeydlbmFibGVkJ30gPGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdFTkFC TEVEJyAkY2hlY2tlZHsnRU5BQkxFRCd9eydvbid9IC8+PC90ZD4iOwogICAgfQkKCgkJcHJpbnQi PC90cj48L3RhYmxlPjxicj48YnI+IjsKI0EuTWFyeCBDQ0QgbmV3IGNsaWVudAkJCgkKCSAgICBw cmludCAiPHRhYmxlIGJvcmRlcj0nMCcgd2lkdGg9JzEwMCUnIGNlbGxzcGFjaW5nPScxJyBjZWxs cGFkZGluZz0nMCc+PHRyPjx0ZCBjb2xzcGFuPSczJz48aHI+PGJyPjxiPiRMYW5nOjp0cnsnY2Nk IGNob29zZSBuZXQnfTwvdGQ+PC90cj48dHI+PHRkIGhlaWdodD0nMjAnIGNvbHNwYW49JzMnPjwv dGQ+PC90cj4iOwoJICAgIG15ICVjY2Rjb25maGFzaD0oKTsKCSAgICBteSAlY2Nkcm91dGVoYXNo PSgpOwoJICAgIG15ICVjY2Ryb3V0ZTJoYXNoPSgpOwoJICAgIG15ICV2cG5uZXQ9KCk7CgkgICAg bXkgJHZwbmlwOwoJICAgICZHZW5lcmFsOjpyZWFkaGFzaCgiJHtHZW5lcmFsOjpzd3Jvb3R9L292 cG4vc2V0dGluZ3MiLCBcJXZwbm5ldCk7CgkgICAgJHZwbmlwPSR2cG5uZXR7J0RPVlBOX1NVQk5F VCd9OwoJICAgICZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jY2QuY29uZiIsIFwlY2NkY29uZmhhc2gpOwoJICAgIG15IEBjY2Rjb25mPSgpOwoJCW15ICRj b3VudD0wOwoJCW15ICRjaGVja2VkOwoJCSRjaGVja2VkeydjaGVjazEnfXsnb2ZmJ30gPSAnJzsK CSAgICAkY2hlY2tlZHsnY2hlY2sxJ317J29uJ30gPSAnJzsKCSAgICAkY2hlY2tlZHsnY2hlY2sx J317JGNnaXBhcmFtc3snQ0hFQ0sxJ319ID0gJ0NIRUNLRUQnOwoJICAgIHByaW50Ijx0cj48dGQg YWxpZ249J2NlbnRlcicgd2lkdGg9JzElJyB2YWxpZ249J3RvcCc+PGlucHV0IHR5cGU9J3JhZGlv JyBuYW1lPSdDSEVDSzEnIHZhbHVlPSdkeW5hbWljJyBjaGVja2VkIC8+PC90ZD48dGQgYWxpZ249 J2xlZnQnIHZhbGlnbj0ndG9wJyB3aWR0aD0nMzUlJz4kTGFuZzo6dHJ7J2NjZCBkeW5yYW5nZSd9 ICgkdnBuaXApPC90ZD48dGQgd2lkdGg9JzMwJSc+IjsKCSAgICBwcmludCI8L3RkPjwvdHI+PC90 YWJsZT48YnI+PGJyPiI7CgkJbXkgJG5hbWU9JGNnaXBhcmFtc3snQ0hFQ0sxJ307CgkJJGNoZWNr ZWR7J1JHJ317JGNnaXBhcmFtc3snUkcnfX0gPSAnQ0hFQ0tFRCc7CgkJCglpZiAoISAteiAiJHtH ZW5lcmFsOjpzd3Jvb3R9L292cG4vY2NkLmNvbmYiKXsJCgkJcHJpbnQiPHRhYmxlIGJvcmRlcj0n MCcgd2lkdGg9JzEwMCUnIGNlbGxzcGFjaW5nPScxJyBjZWxscGFkZGluZz0nMCc+PHRyPjx0ZCB3 aWR0aD0nMSUnPjwvdGQ+PHRkIHdpZHRoPSczMCUnIGNsYXNzPSdib2xkYmFzZScgYWxpZ249J2Nl bnRlcic+PGI+JExhbmc6OnRyeydjY2QgbmFtZSd9PC90ZD48dGQgd2lkdGg9JzE1JScgY2xhc3M9 J2JvbGRiYXNlJyBhbGlnbj0nY2VudGVyJz48Yj4kTGFuZzo6dHJ7J25ldHdvcmsnfTwvdGQ+PHRk IGNsYXNzPSdib2xkYmFzZScgYWxpZ249J2NlbnRlcicgd2lkdGg9JzE4JSc+PGI+JExhbmc6OnRy eydjY2QgY2xpZW50aXAnfTwvdGQ+PC90cj4iOwoJCWZvcmVhY2ggbXkgJGtleSAoa2V5cyAlY2Nk Y29uZmhhc2gpIHsKCQkJJGNvdW50Kys7CgkJCUBjY2Rjb25mPSgkY2NkY29uZmhhc2h7JGtleX1b MF0sJGNjZGNvbmZoYXNoeyRrZXl9WzFdKTsKCQkJaWYgKCRjb3VudCAlIDIpe3ByaW50Ijx0ciBi Z2NvbG9yPSckY29sb3J7J2NvbG9yMjInfSc+Ijt9ZWxzZXtwcmludCI8dHIgYmdjb2xvcj0nJGNv bG9yeydjb2xvcjIwJ30nPiI7fQoJCQlwcmludCI8dGQgYWxpZ249J2NlbnRlcicgd2lkdGg9JzEl Jz48aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J0NIRUNLMScgdmFsdWU9JyRjY2Rjb25mWzBdJyAk Y2hlY2tlZHsnY2hlY2sxJ317JGNjZGNvbmZbMF19Lz48L3RkPjx0ZD4kY2NkY29uZlswXTwvdGQ+ PHRkIHdpZHRoPSc0MCUnIGFsaWduPSdjZW50ZXInPiRjY2Rjb25mWzFdPC90ZD48dGQgYWxpZ249 J2xlZnQnIHdpZHRoPScxMCUnPiI7CgkJCSZmaWxsc2VsZWN0Ym94KCRjY2Rjb25mWzFdLCRjY2Rj b25mWzBdLCRjZ2lwYXJhbXN7JG5hbWV9KTsKCQkJcHJpbnQiPC90ZD48L3RyPiI7CgkJfQoJCXBy aW50ICI8L3RhYmxlPjxicj48YnI+PGhyPjxicj48YnI+IjsKCX0KIyBjY2QgZW5kCgkmSGVhZGVy OjpjbG9zZWJveCgpOwoJaWYgKCRjZ2lwYXJhbXN7J0tFWSd9ICYmICRjZ2lwYXJhbXN7J0FVVEgn fSBlcSAncHNrJykgewoJCQoJCX0gZWxzaWYgKCEgJGNnaXBhcmFtc3snS0VZJ30pIHsKCQkKCQkK CSAgICBteSAkZGlzYWJsZWQ9Jyc7CgkgICAgbXkgJGNha2V5ZGlzYWJsZWQ9Jyc7CgkgICAgbXkg JGNhY3J0ZGlzYWJsZWQ9Jyc7CgkgICAgaWYgKCAhIC1mICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9jYS9jYWtleS5wZW0iICkgeyAkY2FrZXlkaXNhYmxlZCA9ICJkaXNhYmxlZD0nZGlzYWJsZWQn IiB9IGVsc2UgeyAkY2FrZXlkaXNhYmxlZCA9ICIiIH07CgkgICAgaWYgKCAhIC1mICIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIiApIHsgJGNhY3J0ZGlzYWJsZWQgPSAiZGlz YWJsZWQ9J2Rpc2FibGVkJyIgfSBlbHNlIHsgJGNhY3J0ZGlzYWJsZWQgPSAiIiB9OwoJICAgIAoJ ICAgICZIZWFkZXI6Om9wZW5ib3goJzEwMCUnLCAnTEVGVCcsICRMYW5nOjp0cnsnYXV0aGVudGlj YXRpb24nfSk7CiAKIAogaWYgKCRjZ2lwYXJhbXN7J1RZUEUnfSBlcSAnaG9zdCcpIHsKCnByaW50 IDw8RU5ECgkgICAgPHRhYmxlIHdpZHRoPScxMDAlJyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNp bmc9JzUnIGJvcmRlcj0nMCc+CgkgICAgCgkgICAgPHRyPjx0ZD48aW5wdXQgdHlwZT0ncmFkaW8n IG5hbWU9J0FVVEgnIHZhbHVlPSdjZXJ0cmVxJyAkY2hlY2tlZHsnQVVUSCd9eydjZXJ0cmVxJ30g JGNha2V5ZGlzYWJsZWQgLz48L3RkPjx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeyd1cGxvYWQg YSBjZXJ0aWZpY2F0ZSByZXF1ZXN0J308L3RkPjx0ZCBjbGFzcz0nYmFzZScgcm93c3Bhbj0nMic+ PGlucHV0IHR5cGU9J2ZpbGUnIG5hbWU9J0ZIJyBzaXplPSczMCcgJGNhY3J0ZGlzYWJsZWQ+PC90 ZD48L3RyPgoJICAgIDx0cj48dGQ+PGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSdBVVRIJyB2YWx1 ZT0nY2VydGZpbGUnICRjaGVja2VkeydBVVRIJ317J2NlcnRmaWxlJ30gJGNhY3J0ZGlzYWJsZWQg Lz48L3RkPjx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeyd1cGxvYWQgYSBjZXJ0aWZpY2F0ZSd9 PC90ZD48L3RyPgoJICAgIDx0cj48dGQgY29sc3Bhbj0nMyc+Jm5ic3A7PC90ZD48L3RyPgogICAg ICA8dHI+PHRkIGNvbHNwYW49JzMnPjxociAvPjwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZCBjb2xz cGFuPSczJz4mbmJzcDs8L3RkPjwvdHI+CgkgICAgPHRyPjx0ZD48aW5wdXQgdHlwZT0ncmFkaW8n IG5hbWU9J0FVVEgnIHZhbHVlPSdjZXJ0Z2VuJyAkY2hlY2tlZHsnQVVUSCd9eydjZXJ0Z2VuJ30g JGNha2V5ZGlzYWJsZWQgLz48L3RkPjx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeydnZW5lcmF0 ZSBhIGNlcnRpZmljYXRlJ308L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+CgkgICAgPHRyPjx0ZD4m bmJzcDs8L3RkPjx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeyd1c2VycyBmdWxsbmFtZSBvciBz eXN0ZW0gaG9zdG5hbWUnfTo8L3RkPjx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAnPjxp bnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdDRVJUX05BTUUnIHZhbHVlPSckY2dpcGFyYW1zeydDRVJU X05BTUUnfScgU0laRT0nMzInICRjYWtleWRpc2FibGVkIC8+PC90ZD48L3RyPgoJICAgIDx0cj48 dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsndXNlcnMgZW1haWwnfTom bmJzcDs8aW1nIHNyYz0nL2Jsb2IuZ2lmJyAvPjwvdGQ+PHRkIGNsYXNzPSdiYXNlJyBub3dyYXA9 J25vd3JhcCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J0NFUlRfRU1BSUwnIHZhbHVlPSckY2dp cGFyYW1zeydDRVJUX0VNQUlMJ30nIFNJWkU9JzMyJyAkY2FrZXlkaXNhYmxlZCAvPjwvdGQ+PC90 cj4KCSAgICA8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J3Vz ZXJzIGRlcGFydG1lbnQnfTombmJzcDs8aW1nIHNyYz0nL2Jsb2IuZ2lmJyAvPjwvdGQ+PHRkIGNs YXNzPSdiYXNlJyBub3dyYXA9J25vd3JhcCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J0NFUlRf T1UnIHZhbHVlPSckY2dpcGFyYW1zeydDRVJUX09VJ30nIFNJWkU9JzMyJyAkY2FrZXlkaXNhYmxl ZCAvPjwvdGQ+PC90cj4KCSAgICA8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSdiYXNlJz4k TGFuZzo6dHJ7J29yZ2FuaXphdGlvbiBuYW1lJ306Jm5ic3A7PGltZyBzcmM9Jy9ibG9iLmdpZicg Lz48L3RkPjx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAnPjxpbnB1dCB0eXBlPSd0ZXh0 JyBuYW1lPSdDRVJUX09SR0FOSVpBVElPTicgdmFsdWU9JyRjZ2lwYXJhbXN7J0NFUlRfT1JHQU5J WkFUSU9OJ30nIFNJWkU9JzMyJyAkY2FrZXlkaXNhYmxlZCAvPjwvdGQ+PC90cj4KCSAgICA8dHI+ PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J2NpdHknfTombmJzcDs8 aW1nIHNyYz0nL2Jsb2IuZ2lmJz48L3RkPjx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAn PjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdDRVJUX0NJVFknIHZhbHVlPSckY2dpcGFyYW1zeydD RVJUX0NJVFknfScgU0laRT0nMzInICRjYWtleWRpc2FibGVkIC8+PC90ZD48L3RyPgoJICAgIDx0 cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsnc3RhdGUgb3IgcHJv dmluY2UnfTombmJzcDs8aW1nIHNyYz0nL2Jsb2IuZ2lmJyAvPjwvdGQ+PHRkIGNsYXNzPSdiYXNl JyBub3dyYXA9J25vd3JhcCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J0NFUlRfU1RBVEUnIHZh bHVlPSckY2dpcGFyYW1zeydDRVJUX1NUQVRFJ30nIFNJWkU9JzMyJyAkY2FrZXlkaXNhYmxlZCAv PjwvdGQ+PC90cj4KCSAgICA8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSdiYXNlJz4kTGFu Zzo6dHJ7J2NvdW50cnknfTo8L3RkPjx0ZCBjbGFzcz0nYmFzZSc+PHNlbGVjdCBuYW1lPSdDRVJU X0NPVU5UUlknICRjYWtleWRpc2FibGVkPgpFTkQKOwoKIyMjCiMgbS5hLmQgbmV0Mm5ldAojIyMK Cn0gZWxzZSB7CgpwcmludCA8PEVORAoJICAgIDx0YWJsZSB3aWR0aD0nMTAwJScgY2VsbHBhZGRp bmc9JzAnIGNlbGxzcGFjaW5nPSc1JyBib3JkZXI9JzAnPgogICAgICAKCSAgICA8dHI+PHRkPjxp bnB1dCB0eXBlPSdyYWRpbycgbmFtZT0nQVVUSCcgdmFsdWU9J2NlcnRnZW4nICRjaGVja2VkeydB VVRIJ317J2NlcnRnZW4nfSAkY2FrZXlkaXNhYmxlZCAvPjwvdGQ+PHRkIGNsYXNzPSdiYXNlJz4k TGFuZzo6dHJ7J2dlbmVyYXRlIGEgY2VydGlmaWNhdGUnfTwvdGQ+PHRkPiZuYnNwOzwvdGQ+PC90 cj4KCSAgICA8dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J3Vz ZXJzIGZ1bGxuYW1lIG9yIHN5c3RlbSBob3N0bmFtZSd9OjwvdGQ+PHRkIGNsYXNzPSdiYXNlJyBu b3dyYXA9J25vd3JhcCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J0NFUlRfTkFNRScgdmFsdWU9 JyRjZ2lwYXJhbXN7J0NFUlRfTkFNRSd9JyBTSVpFPSczMicgJGNha2V5ZGlzYWJsZWQgLz48L3Rk PjwvdHI+CgkgICAgPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRy eyd1c2VycyBlbWFpbCd9OiZuYnNwOzxpbWcgc3JjPScvYmxvYi5naWYnIC8+PC90ZD48dGQgY2xh c3M9J2Jhc2UnIG5vd3JhcD0nbm93cmFwJz48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nQ0VSVF9F TUFJTCcgdmFsdWU9JyRjZ2lwYXJhbXN7J0NFUlRfRU1BSUwnfScgU0laRT0nMzInICRjYWtleWRp c2FibGVkIC8+PC90ZD48L3RyPgoJICAgIDx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9J2Jh c2UnPiRMYW5nOjp0cnsndXNlcnMgZGVwYXJ0bWVudCd9OiZuYnNwOzxpbWcgc3JjPScvYmxvYi5n aWYnIC8+PC90ZD48dGQgY2xhc3M9J2Jhc2UnIG5vd3JhcD0nbm93cmFwJz48aW5wdXQgdHlwZT0n dGV4dCcgbmFtZT0nQ0VSVF9PVScgdmFsdWU9JyRjZ2lwYXJhbXN7J0NFUlRfT1UnfScgU0laRT0n MzInICRjYWtleWRpc2FibGVkIC8+PC90ZD48L3RyPgoJICAgIDx0cj48dGQ+Jm5ic3A7PC90ZD48 dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsnb3JnYW5pemF0aW9uIG5hbWUnfTombmJzcDs8aW1n IHNyYz0nL2Jsb2IuZ2lmJyAvPjwvdGQ+PHRkIGNsYXNzPSdiYXNlJyBub3dyYXA9J25vd3JhcCc+ PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J0NFUlRfT1JHQU5JWkFUSU9OJyB2YWx1ZT0nJGNnaXBh cmFtc3snQ0VSVF9PUkdBTklaQVRJT04nfScgU0laRT0nMzInICRjYWtleWRpc2FibGVkIC8+PC90 ZD48L3RyPgoJICAgIDx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0 cnsnY2l0eSd9OiZuYnNwOzxpbWcgc3JjPScvYmxvYi5naWYnPjwvdGQ+PHRkIGNsYXNzPSdiYXNl JyBub3dyYXA9J25vd3JhcCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J0NFUlRfQ0lUWScgdmFs dWU9JyRjZ2lwYXJhbXN7J0NFUlRfQ0lUWSd9JyBTSVpFPSczMicgJGNha2V5ZGlzYWJsZWQgLz48 L3RkPjwvdHI+CgkgICAgPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6 OnRyeydzdGF0ZSBvciBwcm92aW5jZSd9OiZuYnNwOzxpbWcgc3JjPScvYmxvYi5naWYnIC8+PC90 ZD48dGQgY2xhc3M9J2Jhc2UnIG5vd3JhcD0nbm93cmFwJz48aW5wdXQgdHlwZT0ndGV4dCcgbmFt ZT0nQ0VSVF9TVEFURScgdmFsdWU9JyRjZ2lwYXJhbXN7J0NFUlRfU1RBVEUnfScgU0laRT0nMzIn ICRjYWtleWRpc2FibGVkIC8+PC90ZD48L3RyPgoJICAgIDx0cj48dGQ+Jm5ic3A7PC90ZD48dGQg Y2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsnY291bnRyeSd9OjwvdGQ+PHRkIGNsYXNzPSdiYXNlJz48 c2VsZWN0IG5hbWU9J0NFUlRfQ09VTlRSWScgJGNha2V5ZGlzYWJsZWQ+CiAgICAgICAgICAKICAg ICAgCkVORAo7Cgp9CgojIyMKIyBtLmEuZCBuZXQybmV0CiMjIwoKCSAgICBmb3JlYWNoIG15ICRj b3VudHJ5IChzb3J0IGtleXMgJXtDb3VudHJpZXM6OmNvdW50cmllc30pIHsKCQlwcmludCAiPG9w dGlvbiB2YWx1ZT0nJENvdW50cmllczo6Y291bnRyaWVzeyRjb3VudHJ5fSciOwoJCWlmICggJENv dW50cmllczo6Y291bnRyaWVzeyRjb3VudHJ5fSBlcSAkY2dpcGFyYW1zeydDRVJUX0NPVU5UUlkn fSApIHsKCQkgICAgcHJpbnQgIiBzZWxlY3RlZD0nc2VsZWN0ZWQnIjsKCQl9CgkJcHJpbnQgIj4k Y291bnRyeTwvb3B0aW9uPiI7CgkgICAgfQojIyMKIyBtLmEuZCBuZXQybmV0CiMjIwoKaWYgKCRj Z2lwYXJhbXN7J1RZUEUnfSBlcSAnaG9zdCcpIHsKCSAgICBwcmludCA8PEVORAoJICAgIDwvc2Vs ZWN0PjwvdGQ+PC90cj4KCgk8dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0 cnsndmFsaWQgdGlsbCd9IChkYXlzKTo8L3RkPgoJPHRkIGNsYXNzPSdiYXNlJyBub3dyYXA9J25v d3JhcCc+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J0RBWVNfVkFMSUQnIHZhbHVlPSckY2dpcGFy YW1zeydEQVlTX1ZBTElEJ30nIHNpemU9JzMyJyAkY2FrZXlkaXNhYmxlZCAvPjwvdGQ+PC90cj4K ICAgPHRyPjx0ZD4mbmJzcDs8L3RkPgoJCTx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeydwa2Nz MTIgZmlsZSBwYXNzd29yZCd9OjwvdGQ+CgkJPHRkIGNsYXNzPSdiYXNlJyBub3dyYXA9J25vd3Jh cCc+PGlucHV0IHR5cGU9J3Bhc3N3b3JkJyBuYW1lPSdDRVJUX1BBU1MxJyB2YWx1ZT0nJGNnaXBh cmFtc3snQ0VSVF9QQVNTMSd9JyBzaXplPSczMicgJGNha2V5ZGlzYWJsZWQgLz48L3RkPjwvdHI+ CgkgICAgPHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeydwa2Nz MTIgZmlsZSBwYXNzd29yZCd9OjxCUj4oJExhbmc6OnRyeydjb25maXJtYXRpb24nfSk8L3RkPgoJ CTx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAnPjxpbnB1dCB0eXBlPSdwYXNzd29yZCcg bmFtZT0nQ0VSVF9QQVNTMicgdmFsdWU9JyRjZ2lwYXJhbXN7J0NFUlRfUEFTUzInfScgc2l6ZT0n MzInICRjYWtleWRpc2FibGVkIC8+PC90ZD48L3RyPgogICAgIDx0cj48dGQgY29sc3Bhbj0nMyc+ Jm5ic3A7PC90ZD48L3RyPgogICAgIDx0cj48dGQgY29sc3Bhbj0nMyc+PGhyIC8+PC90ZD48L3Ry PgogICAgIDx0cj48dGQgY2xhc3M9J2Jhc2UnIGNvbHNwYW49JzMnIGFsaWduPSdsZWZ0Jz48aW1n IHNyYz0nL2Jsb2IuZ2lmJyBhbHQ9JyonIC8+Jm5ic3A7JExhbmc6OnRyeyd0aGlzIGZpZWxkIG1h eSBiZSBibGFuayd9PC90ZD48L3RyPgogICAgIDwvdGFibGU+CkVORAp9ZWxzZXsKCSAgICBwcmlu dCA8PEVORAoJICAgIDwvc2VsZWN0PjwvdGQ+PC90cj4KICAgPHRyPjx0ZD4mbmJzcDs8L3RkPjx0 ZD4mbmJzcDs8L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+CgkgPHRyPjx0ZD4mbmJzcDs8L3RkPjx0 ZD4mbmJzcDs8L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+CgkgPHRyPjx0ZCBjb2xzcGFuPSczJz48 aHIgLz48L3RkPjwvdHI+CgkgPHRyPjx0ZCBjbGFzcz0nYmFzZScgY29sc3Bhbj0nMycgYWxpZ249 J2xlZnQnPjxpbWcgc3JjPScvYmxvYi5naWYnIGFsdD0nKicgLz4mbmJzcDskTGFuZzo6dHJ7J3Ro aXMgZmllbGQgbWF5IGJlIGJsYW5rJ308L3RkPjwvdHI+CiAgICAgICA8L3RhYmxlPgogCkVORAp9 CgojIyMKIyBtLmEuZCBuZXQybmV0CiMjIwoJICAgIDsKCSAgICAmSGVhZGVyOjpjbG9zZWJveCgp OwoJICAgIAoJfQoJICAgIHByaW50Ijxicj48YnI+IjsKCSAgICAmSGVhZGVyOjpvcGVuYm94KCcx MDAlJywgJ0xFRlQnLCAiJExhbmc6OnRyeydjY2QgY2xpZW50IG9wdGlvbnMnfToiKTsKCiNBLk1h cnggQ0NEIG5ldyBjbGllbnQKCQoJcHJpbnQgPDxFTkQ7Cgk8dGFibGUgYm9yZGVyPScwJyB3aWR0 aD0nMTAwJSc+Cgk8dHI+PHRkIHdpZHRoPScyMCUnPlJlZGlyZWN0IEdhdGV3YXk6PC90ZD48dGQg Y29sc3Bhbj0nMyc+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdSRycgJGNoZWNrZWR7J1JH J317J29uJ30gLz48L3RkPjwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzQnPjxiPjxicj4kTGFuZzo6 dHJ7J2NjZCByb3V0ZXMnfTwvYj48L3RkPjwvdHI+Cgk8dHI+PHRkIGNvbHNwYW49JzQnPiZuYnNw PC90ZD48L3RyPgoJPHRyPjx0ZCB2YWxpZ249J3RvcCc+JExhbmc6OnRyeydjY2QgaXJvdXRlJ308 L3RkPjx0ZCBhbGlnbj0nbGVmdCcgd2lkdGg9JzMwJSc+PHRleHRhcmVhIG5hbWU9J0lSJyBjb2xz PScyNicgcm93cz0nNicgd3JhcD0nb2ZmJz4KRU5ECgkKCWlmICgkY2dpcGFyYW1zeydJUid9IG5l ICcnKXsKCQlwcmludCAkY2dpcGFyYW1zeydJUid9OwoJfWVsc2V7CgkJJkdlbmVyYWw6OnJlYWRo YXNoYXJyYXkgKCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jY2Ryb3V0ZSIsIFwlY2Nkcm91dGVo YXNoKTsKCQlmb3JlYWNoIG15ICRrZXkgKGtleXMgJWNjZHJvdXRlaGFzaCkgewoJCQlpZiggJGNn aXBhcmFtc3snTkFNRSd9IGVxICRjY2Ryb3V0ZWhhc2h7JGtleX1bMF0pewoJCQkJZm9yZWFjaCBt eSAkaSAoMSAuLiAkI3skY2Nkcm91dGVoYXNoeyRrZXl9fSkgewoJCQkJCQlpZiAoJGNjZHJvdXRl aGFzaHska2V5fVskaV0gbmUgJycpewoJCQkJCQkJcHJpbnQgJGNjZHJvdXRlaGFzaHska2V5fVsk aV0uIlxuIjsKCQkJCQkJfQoJCQkJCQkkY2dpcGFyYW1zeydJUid9IC49ICRjY2Ryb3V0ZWhhc2h7 JGtleX1bJGldOwoJCQkJfQoJCQl9CgkJfQoJfQoJIAoJcHJpbnQgPDxFTkQ7CjwvdGV4dGFyZWE+ PC90ZD48dGQgdmFsaWduPSd0b3AnIGNvbHNwYW49JzInPiRMYW5nOjp0cnsnY2NkIGlyb3V0ZWhp bnQnfTwvdGQ+PC90cj4KCTx0cj48dGQgY29sc3Bhbj0nNCc+PGJyPjwvdGQ+PC90cj4KCTx0cj48 dGQgdmFsaWduPSd0b3AnIHJvd3NwYW49JzMnPiRMYW5nOjp0cnsnY2NkIGlyb3V0ZTInfTwvdGQ+ PHRkIGFsaWduPSdsZWZ0JyB2YWxpZ249J3RvcCcgcm93c3Bhbj0nMyc+PHNlbGVjdCBuYW1lPSdJ RlJPVVRFJyBzdHlsZT0id2lkdGg6IDIwNXB4Ijsgc2l6ZT0nNicgbXVsdGlwbGU+CkVORAoKCW91 ciBAY3VycmVudCA9ICgpOwoJCW9wZW4oRklMRSwgIiR7R2VuZXJhbDo6c3dyb290fS9tYWluL3Jv dXRpbmciKSA7CgkgICAgQGN1cnJlbnQgPSA8RklMRT47CgkgICAgY2xvc2UgKEZJTEUpOwoJCSZH ZW5lcmFsOjpyZWFkaGFzaGFycmF5ICgiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2Nkcm91dGUy IiwgXCVjY2Ryb3V0ZTJoYXNoKTsKCQlteSAkc2V0PTA7CgkJbXkgJHNlbG9yYW5nZT0wOwoJCW15 ICRzZWxibHVlPTA7CgkJbXkgJGhlbHBibHVlPTA7CgkJbXkgJGhlbHBvcmFuZ2U9MDsKCQlwcmlu dCI8b3B0aW9uPiRMYW5nOjp0cnsnY2NkIG5vbmUnfTwvb3B0aW9uPiI7CgkJcHJpbnQiPG9wdGlv biBzZWxlY3RlZD4kTGFuZzo6dHJ7J2dyZWVuJ308L29wdGlvbj4iOwoJCQkJCgkJZm9yZWFjaCBt eSAkbGluZSAoQGN1cnJlbnQpIHsKCQkJY2hvbXAoJGxpbmUpOwkJCQkjIHJlbW92ZSBuZXdsaW5l CgkJCW15IEB0ZW1wPXNwbGl0KC9cLC8sJGxpbmUpOwoJCQkkdGVtcFsxXSA9ICcnIHVubGVzcyBk ZWZpbmVkICR0ZW1wWzFdOyAjIG5vdCBhbHdheXMgcG9wdWxhdGVkCgkJCW15ICgkYSwkYikgPSBz cGxpdCgvXC8vLCR0ZW1wWzFdKTsKCQkJJHRlbXBbMV0gPSAkYS4iLyIuJkdlbmVyYWw6Omlwb3Jz dWJ0b2NpZHIoJGIpOwoJCQlmb3JlYWNoIG15ICRrZXkgKGtleXMgJWNjZHJvdXRlMmhhc2gpIHsK CQkJCWlmKCRjY2Ryb3V0ZTJoYXNoeyRrZXl9WzBdIGVxICRjZ2lwYXJhbXN7J05BTUUnfSl7CgkJ CQkJZm9yZWFjaCBteSAkaSAoMSAuLiAkI3skY2Nkcm91dGUyaGFzaHska2V5fX0pIHsKCQkJCQkJ CQkJCQkKCQkJCQkJCWlmKCRjY2Ryb3V0ZTJoYXNoeyRrZXl9WyRpXSBlcSAkYS4iLyIuJkdlbmVy YWw6Omlwb3JzdWJ0b2RlYygkYikpewoJCQkJCQkJCSRzZXQ9MTsKCQkJCQkJCX0KCQkJCQkJCWlm ICgmaGF2ZUJsdWVOZXQoKSl7CgkJCQkJCQkJaWYoJG5ldHNldHRpbmdzeydCTFVFX05FVEFERFJF U1MnfS4iLyIuJkdlbmVyYWw6Omlwb3JzdWJ0b2RlYygkbmV0c2V0dGluZ3N7J0JMVUVfTkVUTUFT Syd9IGVxICRjY2Ryb3V0ZTJoYXNoeyRrZXl9WyRpXSkpIHsKCQkJCQkJCQkkc2VsYmx1ZT0xOwoJ CQkJCQkJCQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWlmICgmaGF2ZU9yYW5nZU5ldCgpKXsK CQkJCQkJCQlpZigkbmV0c2V0dGluZ3N7J09SQU5HRV9ORVRBRERSRVNTJ30uIi8iLiZHZW5lcmFs OjppcG9yc3VidG9kZWMoJG5ldHNldHRpbmdzeydPUkFOR0VfTkVUTUFTSyd9KSBlcSAkY2Nkcm91 dGUyaGFzaHska2V5fVskaV0pIHsKCQkJCQkJCQkJJHNlbG9yYW5nZT0xOwoJCQkJCQkJCX0KCQkJ CQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWlmICgkc2V0ID09ICcxJyl7IHByaW50Ijxv cHRpb24gc2VsZWN0ZWQ+JHRlbXBbMV08L29wdGlvbj4iOyRzZXQ9MDt9ZWxzZXtwcmludCI8b3B0 aW9uPiR0ZW1wWzFdPC9vcHRpb24+Ijt9CgkJCQlpZiAoJmhhdmVCbHVlTmV0KCkgJiYgJHNlbGJs dWUgPT0gJzEnKXsgcHJpbnQiPG9wdGlvbiBzZWxlY3RlZD4kTGFuZzo6dHJ7J2JsdWUnfTwvb3B0 aW9uPiI7JHNlbGJsdWU9MDt9ZWxzaWYoJmhhdmVCbHVlTmV0KCkgJiYgJHNlbGJsdWUgPT0gJzAn KXtwcmludCI8b3B0aW9uPiRMYW5nOjp0cnsnYmx1ZSd9PC9vcHRpb24+Ijt9CgkJCQlpZiAoJmhh dmVPcmFuZ2VOZXQoKSAmJiAkc2Vsb3JhbmdlID09ICcxJyl7IHByaW50IjxvcHRpb24gc2VsZWN0 ZWQ+JExhbmc6OnRyeydvcmFuZ2UnfTwvb3B0aW9uPiI7JHNlbG9yYW5nZT0wO31lbHNpZigmaGF2 ZU9yYW5nZU5ldCgpICYmICRzZWxvcmFuZ2UgPT0gJzAnKXtwcmludCI8b3B0aW9uPiRMYW5nOjp0 cnsnb3JhbmdlJ308L29wdGlvbj4iO30KCQkJfQoJcHJpbnQ8PEVORAoJPC9zZWxlY3Q+PC90ZD48 dGQgdmFsaWduPSd0b3AnPkROUzE6PC90ZD48dGQgdmFsaWduPSd0b3AnPjxpbnB1dCB0eXBlPSdU RVhUJyBuYW1lPSdDQ0RfRE5TMScgdmFsdWU9JyRjZ2lwYXJhbXN7J0NDRF9ETlMxJ30nIHNpemU9 JzMwJyAvPjwvdGQ+PC90cj4KCTx0ciB2YWxpZ249J3RvcCc+PHRkPkROUzI6PC90ZD48dGQ+PGlu cHV0IHR5cGU9J1RFWFQnIG5hbWU9J0NDRF9ETlMyJyB2YWx1ZT0nJGNnaXBhcmFtc3snQ0NEX0RO UzInfScgc2l6ZT0nMzAnIC8+PC90ZD48L3RyPgoJPHRyIHZhbGlnbj0ndG9wJz48dGQgdmFsaWdu PSd0b3AnPldJTlM6PC90ZD48dGQ+PGlucHV0IHR5cGU9J1RFWFQnIG5hbWU9J0NDRF9XSU5TJyB2 YWx1ZT0nJGNnaXBhcmFtc3snQ0NEX1dJTlMnfScgc2l6ZT0nMzAnIC8+PC90ZD48L3RyPjwvdGFi bGU+PGJyPjxocj4KCQpFTkQKOwogICAgICZIZWFkZXI6OmNsb3NlYm94KCk7CgkKCXByaW50ICI8 ZGl2IGFsaWduPSdjZW50ZXInPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J0FDVElPTicgdmFs dWU9JyRMYW5nOjp0cnsnc2F2ZSd9JyAvPiI7CglpZiAoJGNnaXBhcmFtc3snS0VZJ30pIHsKIwkg ICAgcHJpbnQgIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J0FDVElPTicgdmFsdWU9JyRMYW5n Ojp0cnsnYWR2YW5jZWQnfScgLz4iOwoJfQoJcHJpbnQgIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5h bWU9J0FDVElPTicgdmFsdWU9JyRMYW5nOjp0cnsnY2FuY2VsJ30nIC8+PC9kaXY+PC9mb3JtPiI7 CgkmSGVhZGVyOjpjbG9zZWJpZ2JveCgpOwoJJkhlYWRlcjo6Y2xvc2VwYWdlKCk7CglleGl0ICgw KTsKICAgIH0KICAgIFZQTkNPTkZfRU5EOgp9CgojICAgIFNFVFRJTkdTX0VSUk9SOgojIyMKIyMj IERlZmF1bHQgc3RhdHVzIHBhZ2UKIyMjCiAgICAlY2dpcGFyYW1zID0gKCk7CiAgICAlY2FoYXNo ID0gKCk7CiAgICAlY29uZmlnaGFzaCA9ICgpOwogICAgJkdlbmVyYWw6OnJlYWRoYXNoKCIke0dl bmVyYWw6OnN3cm9vdH0vb3Zwbi9zZXR0aW5ncyIsIFwlY2dpcGFyYW1zKTsKICAgICZHZW5lcmFs OjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYWNvbmZpZyIsIFwlY2Fo YXNoKTsKICAgICZHZW5lcmFsOjpyZWFkaGFzaGFycmF5KCIke0dlbmVyYWw6OnN3cm9vdH0vb3Zw bi9vdnBuY29uZmlnIiwgXCVjb25maWdoYXNoKTsKCiAgICBteSBAc3RhdHVzID0gYC9iaW4vY2F0 IC92YXIvbG9nL292cG5zZXJ2ZXIubG9nYDsKCiAgICBpZiAoJGNnaXBhcmFtc3snVlBOX0lQJ30g ZXEgJycgJiYgLWUgIiR7R2VuZXJhbDo6c3dyb290fS9yZWQvYWN0aXZlIikgewoJCWlmIChvcGVu KElQQUREUiwgIiR7R2VuZXJhbDo6c3dyb290fS9yZWQvbG9jYWwtaXBhZGRyZXNzIikpIHsKCQkg ICAgbXkgJGlwYWRkciA9IDxJUEFERFI+OwoJCSAgICBjbG9zZSBJUEFERFI7CgkJICAgIGNob21w ICgkaXBhZGRyKTsKCQkgICAgJGNnaXBhcmFtc3snVlBOX0lQJ30gPSAoZ2V0aG9zdGJ5YWRkcihw YWNrKCJDNCIsIHNwbGl0KC9cLi8sICRpcGFkZHIpKSwgMikpWzBdOwoJCSAgICBpZiAoJGNnaXBh cmFtc3snVlBOX0lQJ30gZXEgJycpIHsKCQkJCSRjZ2lwYXJhbXN7J1ZQTl9JUCd9ID0gJGlwYWRk cjsKCQkgICAgfQoJCX0KICAgIH0KICAgIAojZGVmYXVsdCBzZXR6ZW4KICAgIGlmICgkY2dpcGFy YW1zeydEQ0lQSEVSJ30gZXEgJycpIHsKCSRjZ2lwYXJhbXN7J0RDSVBIRVInfSA9ICAnQkYtQ0JD JzsgICAgIAogICAgfQogICAgaWYgKCRjZ2lwYXJhbXN7J0RERVNUX1BPUlQnfSBlcSAnJykgewoJ JGNnaXBhcmFtc3snRERFU1RfUE9SVCd9ID0gICcxMTk0JzsgICAgIAogICAgfQogICAgaWYgKCRj Z2lwYXJhbXN7J0RNVFUnfSBlcSAnJykgewoJJGNnaXBhcmFtc3snRE1UVSd9ID0gICcxNDAwJzsg ICAgIAogICAgfQogICAgaWYgKCRjZ2lwYXJhbXN7J0RPVlBOX1NVQk5FVCd9IGVxICcnKSB7Cgkk Y2dpcGFyYW1zeydET1ZQTl9TVUJORVQnfSA9ICcxMC4nIC4gaW50KHJhbmQoMjU2KSkgLiAnLicg LiBpbnQocmFuZCgyNTYpKSAuICcuMC8yNTUuMjU1LjI1NS4wJzsKICAgIH0KCSRjaGVja2VkeydF TkFCTEVEJ317J29mZid9ID0gJyc7CiAgICAkY2hlY2tlZHsnRU5BQkxFRCd9eydvbid9ID0gJyc7 CiAgICAkY2hlY2tlZHsnRU5BQkxFRCd9eyRjZ2lwYXJhbXN7J0VOQUJMRUQnfX0gPSAnQ0hFQ0tF RCc7CiAgICAkY2hlY2tlZHsnRU5BQkxFRF9CTFVFJ317J29mZid9ID0gJyc7CiAgICAkY2hlY2tl ZHsnRU5BQkxFRF9CTFVFJ317J29uJ30gPSAnJzsKICAgICRjaGVja2VkeydFTkFCTEVEX0JMVUUn fXskY2dpcGFyYW1zeydFTkFCTEVEX0JMVUUnfX0gPSAnQ0hFQ0tFRCc7CiAgICAkY2hlY2tlZHsn RU5BQkxFRF9PUkFOR0UnfXsnb2ZmJ30gPSAnJzsKICAgICRjaGVja2VkeydFTkFCTEVEX09SQU5H RSd9eydvbid9ID0gJyc7CiAgICAkY2hlY2tlZHsnRU5BQkxFRF9PUkFOR0UnfXskY2dpcGFyYW1z eydFTkFCTEVEX09SQU5HRSd9fSA9ICdDSEVDS0VEJzsKICAgICRzZWxlY3RlZHsnRERFVklDRSd9 eyd0dW4nfSA9ICcnOwogICAgJHNlbGVjdGVkeydEREVWSUNFJ317J3RhcCd9ID0gJyc7CiAgICAk c2VsZWN0ZWR7J0RERVZJQ0UnfXskY2dpcGFyYW1zeydEREVWSUNFJ319ID0gJ1NFTEVDVEVEJzsK CiAgICAkc2VsZWN0ZWR7J0RQUk9UT0NPTCd9eyd1ZHAnfSA9ICcnOwogICAgJHNlbGVjdGVkeydE UFJPVE9DT0wnfXsndGNwJ30gPSAnJzsKICAgICRzZWxlY3RlZHsnRFBST1RPQ09MJ317JGNnaXBh cmFtc3snRFBST1RPQ09MJ319ID0gJ1NFTEVDVEVEJzsKICAgIAogICAgJHNlbGVjdGVkeydEQ0lQ SEVSJ317J0RFUy1DQkMnfSA9ICcnOwogICAgJHNlbGVjdGVkeydEQ0lQSEVSJ317J0RFUy1FREUt Q0JDJ30gPSAnJzsKICAgICRzZWxlY3RlZHsnRENJUEhFUid9eydERVMtRURFMy1DQkMnfSA9ICcn OwogICAgJHNlbGVjdGVkeydEQ0lQSEVSJ317J0RFU1gtQ0JDJ30gPSAnJzsKICAgICRzZWxlY3Rl ZHsnRENJUEhFUid9eydSQzItQ0JDJ30gPSAnJzsKICAgICRzZWxlY3RlZHsnRENJUEhFUid9eydS QzItNDAtQ0JDJ30gPSAnJzsKICAgICRzZWxlY3RlZHsnRENJUEhFUid9eydSQzItNjQtQ0JDJ30g PSAnJzsKICAgICRzZWxlY3RlZHsnRENJUEhFUid9eydCRi1DQkMnfSA9ICcnOwogICAgJHNlbGVj dGVkeydEQ0lQSEVSJ317J0NBU1Q1LUNCQyd9ID0gJyc7ICAgIAogICAgJHNlbGVjdGVkeydEQ0lQ SEVSJ317J0FFUy0xMjgtQ0JDJ30gPSAnJzsKICAgICRzZWxlY3RlZHsnRENJUEhFUid9eydBRVMt MTkyLUNCQyd9ID0gJyc7CiAgICAkc2VsZWN0ZWR7J0RDSVBIRVInfXsnQUVTLTI1Ni1DQkMnfSA9 ICcnOwogICAgJHNlbGVjdGVkeydEQ0lQSEVSJ317JGNnaXBhcmFtc3snRENJUEhFUid9fSA9ICdT RUxFQ1RFRCc7CiAgICAkY2hlY2tlZHsnRENPTVBMWk8nfXsnb2ZmJ30gPSAnJzsKICAgICRjaGVj a2VkeydEQ09NUExaTyd9eydvbid9ID0gJyc7CiAgICAkY2hlY2tlZHsnRENPTVBMWk8nfXskY2dp cGFyYW1zeydEQ09NUExaTyd9fSA9ICdDSEVDS0VEJzsKIyBtLmEuZAogICAgJGNoZWNrZWR7J01T U0ZJWCd9eydvZmYnfSA9ICcnOwogICAgJGNoZWNrZWR7J01TU0ZJWCd9eydvbid9ID0gJyc7CiAg ICAkY2hlY2tlZHsnTVNTRklYJ317JGNnaXBhcmFtc3snTVNTRklYJ319ID0gJ0NIRUNLRUQnOwoj bmV3IHNldHRpbmdzCiAgICAmSGVhZGVyOjpzaG93aHR0cGhlYWRlcnMoKTsKICAgICZIZWFkZXI6 Om9wZW5wYWdlKCRMYW5nOjp0cnsnc3RhdHVzIG92cG4nfSwgMSwgJycpOwogICAgJkhlYWRlcjo6 b3BlbmJpZ2JveCgnMTAwJScsICdMRUZUJywgJycsICRlcnJvcm1lc3NhZ2UpOwoKICAgIGlmICgk ZXJyb3JtZXNzYWdlKSB7CgkmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xFRlQnLCAkTGFuZzo6 dHJ7J2Vycm9yIG1lc3NhZ2VzJ30pOwoJcHJpbnQgIjxjbGFzcyBuYW1lPSdiYXNlJz4kZXJyb3Jt ZXNzYWdlXG4iOwoJcHJpbnQgIiZuYnNwOzwvY2xhc3M+XG4iOwoJJkhlYWRlcjo6Y2xvc2Vib3go KTsKICAgIH0KCiAgICBteSAkc2FjdGl2ZSA9ICI8dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxz cGFjaW5nPScwJyBiZ2NvbG9yPScke0hlYWRlcjo6Y29sb3VycmVkfScgd2lkdGg9JzUwJSc+PHRy Pjx0ZCBhbGlnbj0nY2VudGVyJz48Yj48Zm9udCBjb2xvcj0nI0ZGRkZGRic+JExhbmc6OnRyeydz dG9wcGVkJ308L2ZvbnQ+PC9iPjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgICBteSAkc3J1bm5pbmcg PSAibm8iOwogICAgbXkgJGFjdGl2ZW9ucnVuID0gIiI7CiAgICBpZiAoIC1lICIvdmFyL3J1bi9v cGVudnBuLnBpZCIpewoJJHNhY3RpdmUgPSAiPHRhYmxlIGNlbGxwYWRkaW5nPScyJyBjZWxsc3Bh Y2luZz0nMCcgYmdjb2xvcj0nJHtIZWFkZXI6OmNvbG91cmdyZWVufScgd2lkdGg9JzUwJSc+PHRy Pjx0ZCBhbGlnbj0nY2VudGVyJz48Yj48Zm9udCBjb2xvcj0nI0ZGRkZGRic+JExhbmc6OnRyeydy dW5uaW5nJ308L2ZvbnQ+PC9iPjwvdGQ+PC90cj48L3RhYmxlPiI7Cgkkc3J1bm5pbmcgPSJ5ZXMi OwoJJGFjdGl2ZW9ucnVuID0gIiI7CiAgICB9IGVsc2UgewoJJGFjdGl2ZW9ucnVuID0gImRpc2Fi bGVkPSdkaXNhYmxlZCciOwogICAgfQkKICAgICZIZWFkZXI6Om9wZW5ib3goJzEwMCUnLCAnTEVG VCcsICRMYW5nOjp0cnsnZ2xvYmFsIHNldHRpbmdzJ30pOwkKCXByaW50IDw8RU5ECQogICAgPHRh YmxlIHdpZHRoPScxMDAlJyBib3JkZXI9MD4KICAgIDxmb3JtIG1ldGhvZD0ncG9zdCc+CiAgICA8 dGQgd2lkdGg9JzI1JSc+Jm5ic3A7PC90ZD4KICAgIDx0ZCB3aWR0aD0nMjUlJz4mbmJzcDs8L3Rk PgogICAgPHRkIHdpZHRoPScyNSUnPiZuYnNwOzwvdGQ+PC90cj4KICAgIDx0cj48dGQgY2xhc3M9 J2JvbGRiYXNlJz4kTGFuZzo6dHJ7J292cG4gc2VydmVyIHN0YXR1cyd9PC90ZD4KICAgIDx0ZCBh bGlnbj0nbGVmdCc+JHNhY3RpdmU8L3RkPgogICAgPHRyPjx0ZCBjbGFzcz0nYm9sZGJhc2UnPiRM YW5nOjp0cnsnb3ZwbiBvbiByZWQnfTwvdGQ+CiAgICA8dGQ+PGlucHV0IHR5cGU9J2NoZWNrYm94 JyBuYW1lPSdFTkFCTEVEJyAkY2hlY2tlZHsnRU5BQkxFRCd9eydvbid9IC8+PC90ZD4KRU5ECjsK ICAgIGlmICgmaGF2ZUJsdWVOZXQoKSkgewoJcHJpbnQgIjx0cj48dGQgY2xhc3M9J2JvbGRiYXNl Jz4kTGFuZzo6dHJ7J292cG4gb24gYmx1ZSd9PC90ZD4iOwoJcHJpbnQgIjx0ZD48aW5wdXQgdHlw ZT0nY2hlY2tib3gnIG5hbWU9J0VOQUJMRURfQkxVRScgJGNoZWNrZWR7J0VOQUJMRURfQkxVRSd9 eydvbid9IC8+PC90ZD4iOwogICAgfQogICAgaWYgKCZoYXZlT3JhbmdlTmV0KCkpIHsgICAgCglw cmludCAiPHRyPjx0ZCBjbGFzcz0nYm9sZGJhc2UnPiRMYW5nOjp0cnsnb3ZwbiBvbiBvcmFuZ2Un fTwvdGQ+IjsKCXByaW50ICI8dGQ+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdFTkFCTEVE X09SQU5HRScgJGNoZWNrZWR7J0VOQUJMRURfT1JBTkdFJ317J29uJ30gLz48L3RkPiI7CiAgICB9 CQogICAgcHJpbnQgPDxFTkQgICAgCQogICAgPHRyPjx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdu b3dyYXAnIGNvbHNwYW49JzInPiRMYW5nOjp0cnsnbG9jYWwgdnBuIGhvc3RuYW1lL2lwJ306PGJy IC8+PGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J1ZQTl9JUCcgdmFsdWU9JyRjZ2lwYXJhbXN7J1ZQ Tl9JUCd9JyBzaXplPSczMCcgLz48L3RkPgoJPHRkIGNsYXNzPSdib2xkYmFzZScgbm93cmFwPSdu b3dyYXAnIGNvbHNwYW49JzInPiRMYW5nOjp0cnsnb3ZwbiBzdWJuZXQnfTxiciAvPjxpbnB1dCB0 eXBlPSdURVhUJyBuYW1lPSdET1ZQTl9TVUJORVQnIHZhbHVlPSckY2dpcGFyYW1zeydET1ZQTl9T VUJORVQnfScgc2l6ZT0nMzAnIC8+PC90ZD48L3RyPgogICAgPHRyPjx0ZCBjbGFzcz0nYm9sZGJh c2UnIG5vd3JhcD0nbm93cmFwJz4kTGFuZzo6dHJ7J292cG4gZGV2aWNlJ308L3RkPgogICAgICAg IDx0ZD48c2VsZWN0IG5hbWU9J0RERVZJQ0UnID48b3B0aW9uIHZhbHVlPSd0dW4nICRzZWxlY3Rl ZHsnRERFVklDRSd9eyd0dW4nfT5UVU48L29wdGlvbj4KICAgICAgICAgICAgICAgCQkJPCEtLSB0 aGlzIGlzIHN0aWxsIG5vdCB3b3JraW5nCiAgICAgICAgICAgICAgIAkJCSAgICA8b3B0aW9uIHZh bHVlPSd0YXAnICRzZWxlY3RlZHsnRERFVklDRSd9eyd0YXAnfT5UQVA8L29wdGlvbj48L3NlbGVj dD4tLT4gPC90ZD4JCQkJICAgIAogICAgPHRyPjx0ZCBjbGFzcz0nYm9sZGJhc2UnIG5vd3JhcD0n bm93cmFwJz4kTGFuZzo6dHJ7J3Byb3RvY29sJ308L3RkPgogICAgICAgIDx0ZD48c2VsZWN0IG5h bWU9J0RQUk9UT0NPTCc+PG9wdGlvbiB2YWx1ZT0ndWRwJyAkc2VsZWN0ZWR7J0RQUk9UT0NPTCd9 eyd1ZHAnfT5VRFA8L29wdGlvbj4KICAgICAgICAgICAgICAgCQkJICAgIDxvcHRpb24gdmFsdWU9 J3RjcCcgJHNlbGVjdGVkeydEUFJPVE9DT0wnfXsndGNwJ30+VENQPC9vcHRpb24+PC9zZWxlY3Q+ PC90ZD4JCQkJICAgIAogICAgICAgIDx0ZCBjbGFzcz0nYm9sZGJhc2UnPiRMYW5nOjp0cnsnZGVz dGluYXRpb24gcG9ydCd9OjwvdGQ+CiAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdURVhUJyBuYW1l PSdEREVTVF9QT1JUJyB2YWx1ZT0nJGNnaXBhcmFtc3snRERFU1RfUE9SVCd9JyBzaXplPSc1JyAv PjwvdGQ+PC90cj4KICAgIDx0cj48dGQgY2xhc3M9J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+ JExhbmc6OnRyeydNVFUnfSZuYnNwOzwvdGQ+CiAgICAgICAgPHRkPiA8aW5wdXQgdHlwZT0nVEVY VCcgbmFtZT0nRE1UVScgVkFMVUU9JyRjZ2lwYXJhbXN7J0RNVFUnfSdzaXplPSc1JyAvPjwvVEQ+ CiAgICA8dHI+PHRkIGNsYXNzPSdib2xkYmFzZScgbm93cmFwPSdub3dyYXAnPiRMYW5nOjp0cnsn Y29tcC1sem8nfTwvdGQ+CiAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0n RENPTVBMWk8nICRjaGVja2VkeydEQ09NUExaTyd9eydvbid9IC8+PC90ZD4KICAgICAgICA8dGQg Y2xhc3M9J2JvbGRiYXNlJyBub3dyYXA9J25vd3JhcCc+JExhbmc6OnRyeydjaXBoZXInfTwvdGQ+ CiAgICAgICAgPHRkPjxzZWxlY3QgbmFtZT0nRENJUEhFUic+PG9wdGlvbiB2YWx1ZT0nREVTLUNC QycgJHNlbGVjdGVkeydEQ0lQSEVSJ317J0RFUy1DQkMnfT5ERVMtQ0JDPC9vcHRpb24+CgkJCQkg ICA8b3B0aW9uIHZhbHVlPSdERVMtRURFLUNCQycgJHNlbGVjdGVkeydEQ0lQSEVSJ317J0RFUy1F REUtQ0JDJ30+REVTLUVERS1DQkM8L29wdGlvbj4KCQkJCSAgIDxvcHRpb24gdmFsdWU9J0RFUy1F REUzLUNCQycgJHNlbGVjdGVkeydEQ0lQSEVSJ317J0RFUy1FREUzLUNCQyd9PkRFUy1FREUzLUNC Qzwvb3B0aW9uPgoJCQkJICAgPG9wdGlvbiB2YWx1ZT0nREVTWC1DQkMnICRzZWxlY3RlZHsnRENJ UEhFUid9eydERVNYLUNCQyd9PkRFU1gtQ0JDPC9vcHRpb24+CgkJCQkgICA8b3B0aW9uIHZhbHVl PSdSQzItQ0JDJyAkc2VsZWN0ZWR7J0RDSVBIRVInfXsnUkMyLUNCQyd9PlJDMi1DQkM8L29wdGlv bj4JCQkJICAJCQkJICAgIAoJCQkJICAgPG9wdGlvbiB2YWx1ZT0nUkMyLTQwLUNCQycgJHNlbGVj dGVkeydEQ0lQSEVSJ317J1JDMi00MC1DQkMnfT5SQzItNDAtQ0JDPC9vcHRpb24+CgkJCQkgICA8 b3B0aW9uIHZhbHVlPSdSQzItNjQtQ0JDJyAkc2VsZWN0ZWR7J0RDSVBIRVInfXsnUkMyLTY0LUNC Qyd9PlJDMi02NC1DQkM8L29wdGlvbj4KCQkJCSAgIDxvcHRpb24gdmFsdWU9J0JGLUNCQycgJHNl bGVjdGVkeydEQ0lQSEVSJ317J0JGLUNCQyd9PkJGLUNCQzwvb3B0aW9uPgoJCQkJICAgPG9wdGlv biB2YWx1ZT0nQ0FTVDUtQ0JDJyAkc2VsZWN0ZWR7J0RDSVBIRVInfXsnQ0FTVDUtQ0JDJ30+Q0FT VDUtQ0JDPC9vcHRpb24+CgkJCQkgICA8b3B0aW9uIHZhbHVlPSdBRVMtMTI4LUNCQycgJHNlbGVj dGVkeydEQ0lQSEVSJ317J0FFUy0xMjgtQ0JDJ30+QUVTLTEyOC1DQkM8L29wdGlvbj4KCQkJCSAg IDxvcHRpb24gdmFsdWU9J0FFUy0xOTItQ0JDJyAkc2VsZWN0ZWR7J0RDSVBIRVInfXsnQUVTLTE5 Mi1DQkMnfT5BRVMtMTkyLUNCQzwvb3B0aW9uPgoJCQkJICAgPG9wdGlvbiB2YWx1ZT0nQUVTLTI1 Ni1DQkMnICRzZWxlY3RlZHsnRENJUEhFUid9eydBRVMtMjU2LUNCQyd9PkFFUy0yNTYtQ0JDPC9v cHRpb24+PC9zZWxlY3Q+PC90ZD48L3RyPgoJCQkJICAgPHRyPjx0ZCBjb2xzcGFuPSc0Jz48aHIg Lz48L3RkPjwvdHI+CkVORAo7CQkJCSAgIAogICAgCiAgICBpZiAoICRzcnVubmluZyBlcSAieWVz IiApIHsKCXByaW50ICI8dHI+PHRkIGFsaWduPSdyaWdodCcgY29sc3Bhbj0nNCc+PGlucHV0IHR5 cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydzYXZlJ30nIGRpc2Fi bGVkPSdkaXNhYmxlZCcgLz4iOwoJcHJpbnQgIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J0FD VElPTicgdmFsdWU9JyRMYW5nOjp0cnsnY2NkIG5ldCd9JyAvPiI7CglwcmludCAiPGlucHV0IHR5 cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydhZHZhbmNlZCBzZXJ2 ZXInfScgLz4iOwkKCXByaW50ICI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdBQ1RJT04nIHZh bHVlPSckTGFuZzo6dHJ7J3N0b3Agb3ZwbiBzZXJ2ZXInfScgLz48L3RkPjwvdHI+IjsKICAgIH0g ZWxzZXsKCXByaW50ICI8dHI+PHRkIGFsaWduPSdyaWdodCcgY29sc3Bhbj0nNCc+PGlucHV0IHR5 cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydzYXZlJ30nIC8+IjsK CXByaW50ICI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdBQ1RJT04nIHZhbHVlPSckTGFuZzo6 dHJ7J2NjZCBuZXQnfScgLz4iOwoJcHJpbnQgIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J0FD VElPTicgdmFsdWU9JyRMYW5nOjp0cnsnYWR2YW5jZWQgc2VydmVyJ30nIC8+IjsKCWlmICgoIC1l ICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIiAmJgoJICAgICAtZSAiJHtH ZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvZGgxMDI0LnBlbSIgJiYKCSAgICAgLWUgIiR7R2VuZXJh bDo6c3dyb290fS9vdnBuL2NlcnRzL3NlcnZlcmNlcnQucGVtIiAmJgoJICAgICAtZSAiJHtHZW5l cmFsOjpzd3Jvb3R9L292cG4vY2VydHMvc2VydmVya2V5LnBlbSIpICYmCgkgICAgKCggJGNnaXBh cmFtc3snRU5BQkxFRCd9IGVxICdvbicpIHx8IAoJICAgICggJGNnaXBhcmFtc3snRU5BQkxFRF9C TFVFJ30gZXEgJ29uJykgfHwKCSAgICAoICRjZ2lwYXJhbXN7J0VOQUJMRURfT1JBTkdFJ30gZXEg J29uJykpKXsKCSAgICBwcmludCAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2 YWx1ZT0nJExhbmc6OnRyeydzdGFydCBvdnBuIHNlcnZlcid9JyAvPjwvdGQ+PC90cj4iOwoJfSBl bHNlIHsKCSAgICBwcmludCAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1 ZT0nJExhbmc6OnRyeydzdGFydCBvdnBuIHNlcnZlcid9JyBkaXNhYmxlZD0nZGlzYWJsZWQnIC8+ PC90ZD48L3RyPiI7ICAgIAoJfSAgICAKICAgIH0KICAgIHByaW50ICI8L2Zvcm0+PC90YWJsZT4i OwogICAgJkhlYWRlcjo6Y2xvc2Vib3goKTsKICAgICZIZWFkZXI6Om9wZW5ib3goJzEwMCUnLCAn TEVGVCcsICIkTGFuZzo6dHJ7J2NlcnRpZmljYXRlIGF1dGhvcml0aWVzJ306Iik7CiAgICBwcmlu dCA8PEVPRiMnCiAgICA8dGFibGUgd2lkdGg9JzEwMCUnIGJvcmRlcj0nMCcgY2VsbHNwYWNpbmc9 JzEnIGNlbGxwYWRkaW5nPScwJz4KICAgIDx0cj4KCTx0ZCB3aWR0aD0nMjUlJyBjbGFzcz0nYm9s ZGJhc2UnIGFsaWduPSdjZW50ZXInPjxiPiRMYW5nOjp0cnsnbmFtZSd9PC9iPjwvdGQ+Cgk8dGQg d2lkdGg9JzY1JScgY2xhc3M9J2JvbGRiYXNlJyBhbGlnbj0nY2VudGVyJz48Yj4kTGFuZzo6dHJ7 J3N1YmplY3QnfTwvYj48L3RkPgoJPHRkIHdpZHRoPScxMCUnIGNsYXNzPSdib2xkYmFzZScgY29s c3Bhbj0nMycgYWxpZ249J2NlbnRlcic+PGI+JExhbmc6OnRyeydhY3Rpb24nfTwvYj48L3RkPgog ICAgPC90cj4KRU9GCiAgICA7CiAgICBpZiAoLWYgIiR7R2VuZXJhbDo6c3dyb290fS9vdnBuL2Nh L2NhY2VydC5wZW0iKSB7CglteSAkY2FzdWJqZWN0ID0gYC91c3IvYmluL29wZW5zc2wgeDUwOSAt dGV4dCAtaW4gJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvY2FjZXJ0LnBlbWA7CgkkY2FzdWJq ZWN0ICAgID1+IC9TdWJqZWN0OiAoLiopW1xuXS87CgkkY2FzdWJqZWN0ICAgID0gJDE7CgkkY2Fz dWJqZWN0ICAgID1+IHMrL0VtYWlsKywgRSs7CgkkY2FzdWJqZWN0ICAgID1+IHMvIFNUPS8gUz0v OwoKCXByaW50IDw8RU5ECgk8dHIgYmdjb2xvcj0nJGNvbG9yeydjb2xvcjIyJ30nPgoJPHRkIGNs YXNzPSdiYXNlJz4kTGFuZzo6dHJ7J3Jvb3QgY2VydGlmaWNhdGUnfTwvdGQ+Cgk8dGQgY2xhc3M9 J2Jhc2UnPiRjYXN1YmplY3Q8L3RkPgoJPGZvcm0gbWV0aG9kPSdwb3N0JyBuYW1lPSdmcm1yb290 Y3J0YSc+PHRkIHdpZHRoPSczJScgYWxpZ249J2NlbnRlcic+CgkgICAgPGlucHV0IHR5cGU9J2hp ZGRlbicgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydzaG93IHJvb3QgY2VydGlmaWNh dGUnfScgLz4KCSAgICA8aW5wdXQgdHlwZT0naW1hZ2UnIG5hbWU9JyRMYW5nOjp0cnsnZWRpdCd9 JyBzcmM9Jy9pbWFnZXMvaW5mby5naWYnIGFsdD0nJExhbmc6OnRyeydzaG93IHJvb3QgY2VydGlm aWNhdGUnfScgdGl0bGU9JyRMYW5nOjp0cnsnc2hvdyByb290IGNlcnRpZmljYXRlJ30nIHdpZHRo PScyMCcgaGVpZ2h0PScyMCcgYm9yZGVyPScwJyAvPgoJPC90ZD48L2Zvcm0+Cgk8Zm9ybSBtZXRo b2Q9J3Bvc3QnIG5hbWU9J2ZybXJvb3RjcnRiJz48dGQgd2lkdGg9JzMlJyBhbGlnbj0nY2VudGVy Jz4KCSAgICA8aW5wdXQgdHlwZT0naW1hZ2UnIG5hbWU9JyRMYW5nOjp0cnsnZG93bmxvYWQgcm9v dCBjZXJ0aWZpY2F0ZSd9JyBzcmM9Jy9pbWFnZXMvbWVkaWEtZmxvcHB5LnBuZycgYWx0PSckTGFu Zzo6dHJ7J2Rvd25sb2FkIHJvb3QgY2VydGlmaWNhdGUnfScgdGl0bGU9JyRMYW5nOjp0cnsnZG93 bmxvYWQgcm9vdCBjZXJ0aWZpY2F0ZSd9JyBib3JkZXI9JzAnIC8+CgkgICAgPGlucHV0IHR5cGU9 J2hpZGRlbicgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydkb3dubG9hZCByb290IGNl cnRpZmljYXRlJ30nIC8+Cgk8L3RkPjwvZm9ybT4KCTx0ZCB3aWR0aD0nNCUnPiZuYnNwOzwvdGQ+ PC90cj4KRU5ECgk7CiAgICB9IGVsc2UgewoJIyBkaXNwbGF5IHJvb3RjZXJ0IGdlbmVyYXRpb24g YnV0dG9ucwoJcHJpbnQgPDxFTkQKCTx0ciBiZ2NvbG9yPSckY29sb3J7J2NvbG9yMjInfSc+Cgk8 dGQgY2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsncm9vdCBjZXJ0aWZpY2F0ZSd9OjwvdGQ+Cgk8dGQg Y2xhc3M9J2Jhc2UnPiRMYW5nOjp0cnsnbm90IHByZXNlbnQnfTwvdGQ+Cgk8dGQgY29sc3Bhbj0n Myc+Jm5ic3A7PC90ZD48L3RyPgpFTkQKCTsKICAgIH0KCiAgICBpZiAoLWYgIiR7R2VuZXJhbDo6 c3dyb290fS9vdnBuL2NlcnRzL3NlcnZlcmNlcnQucGVtIikgewoJbXkgJGhvc3RzdWJqZWN0ID0g YC91c3IvYmluL29wZW5zc2wgeDUwOSAtdGV4dCAtaW4gJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4v Y2VydHMvc2VydmVyY2VydC5wZW1gOwoJJGhvc3RzdWJqZWN0ICAgID1+IC9TdWJqZWN0OiAoLiop W1xuXS87CgkkaG9zdHN1YmplY3QgICAgPSAkMTsKCSRob3N0c3ViamVjdCAgICA9fiBzKy9FbWFp bCssIEUrOwoJJGhvc3RzdWJqZWN0ICAgID1+IHMvIFNUPS8gUz0vOwoKCXByaW50IDw8RU5ECgk8 dHIgYmdjb2xvcj0nJGNvbG9yeydjb2xvcjIwJ30nPgoJPHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6 dHJ7J2hvc3QgY2VydGlmaWNhdGUnfTwvdGQ+Cgk8dGQgY2xhc3M9J2Jhc2UnPiRob3N0c3ViamVj dDwvdGQ+Cgk8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2ZybWhvc3RjcnRhJz48dGQgd2lkdGg9 JzMlJyBhbGlnbj0nY2VudGVyJz4KCSAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdBQ1RJ T04nIHZhbHVlPSckTGFuZzo6dHJ7J3Nob3cgaG9zdCBjZXJ0aWZpY2F0ZSd9JyAvPgoJICAgIDxp bnB1dCB0eXBlPSdpbWFnZScgbmFtZT0nJExhbmc6OnRyeydzaG93IGhvc3QgY2VydGlmaWNhdGUn fScgc3JjPScvaW1hZ2VzL2luZm8uZ2lmJyBhbHQ9JyRMYW5nOjp0cnsnc2hvdyBob3N0IGNlcnRp ZmljYXRlJ30nIHRpdGxlPSckTGFuZzo6dHJ7J3Nob3cgaG9zdCBjZXJ0aWZpY2F0ZSd9JyB3aWR0 aD0nMjAnIGhlaWdodD0nMjAnIGJvcmRlcj0nMCcgLz4KCTwvdGQ+PC9mb3JtPgoJPGZvcm0gbWV0 aG9kPSdwb3N0JyBuYW1lPSdmcm1ob3N0Y3J0Yic+PHRkIHdpZHRoPSczJScgYWxpZ249J2NlbnRl cic+CgkgICAgPGlucHV0IHR5cGU9J2ltYWdlJyBuYW1lPSckTGFuZzo6dHJ7J2Rvd25sb2FkIGhv c3QgY2VydGlmaWNhdGUnfScgc3JjPScvaW1hZ2VzL21lZGlhLWZsb3BweS5wbmcnIGFsdD0nJExh bmc6OnRyeydkb3dubG9hZCBob3N0IGNlcnRpZmljYXRlJ30nIHRpdGxlPSckTGFuZzo6dHJ7J2Rv d25sb2FkIGhvc3QgY2VydGlmaWNhdGUnfScgYm9yZGVyPScwJyAvPgoJICAgIDxpbnB1dCB0eXBl PSdoaWRkZW4nIG5hbWU9J0FDVElPTicgdmFsdWU9JyRMYW5nOjp0cnsnZG93bmxvYWQgaG9zdCBj ZXJ0aWZpY2F0ZSd9JyAvPgoJPC90ZD48L2Zvcm0+Cgk8dGQgd2lkdGg9JzQlJz4mbmJzcDs8L3Rk PjwvdHI+CkVORAoJOwogICAgfSBlbHNlIHsKCSMgTm90aGluZwoJcHJpbnQgPDxFTkQKCTx0ciBi Z2NvbG9yPSckY29sb3J7J2NvbG9yMjAnfSc+Cgk8dGQgd2lkdGg9JzI1JScgY2xhc3M9J2Jhc2Un PiRMYW5nOjp0cnsnaG9zdCBjZXJ0aWZpY2F0ZSd9OjwvdGQ+Cgk8dGQgY2xhc3M9J2Jhc2UnPiRM YW5nOjp0cnsnbm90IHByZXNlbnQnfTwvdGQ+Cgk8L3RkPjx0ZCBjb2xzcGFuPSczJz4mbmJzcDs8 L3RkPjwvdHI+CkVORAoJOwogICAgfQoKICAgIGlmICghIC1mICIke0dlbmVyYWw6OnN3cm9vdH0v b3Zwbi9jYS9jYWNlcnQucGVtIikgewogICAgICAgIHByaW50ICI8dHI+PHRkIGNvbHNwYW49JzUn IGFsaWduPSdjZW50ZXInPjxmb3JtIG1ldGhvZD0ncG9zdCc+IjsKCXByaW50ICI8aW5wdXQgdHlw ZT0nc3VibWl0JyBuYW1lPSdBQ1RJT04nIHZhbHVlPSckTGFuZzo6dHJ7J2dlbmVyYXRlIHJvb3Qv aG9zdCBjZXJ0aWZpY2F0ZXMnfScgLz4iOwogICAgICAgIHByaW50ICI8L2Zvcm0+PC90ZD48L3Ry PlxuIjsKICAgIH0KCiAgICBpZiAoa2V5cyAlY2FoYXNoID4gMCkgewoJZm9yZWFjaCBteSAka2V5 IChrZXlzICVjYWhhc2gpIHsKCSAgICBpZiAoKCRrZXkgKyAxKSAlIDIpIHsKCQlwcmludCAiPHRy IGJnY29sb3I9JyRjb2xvcnsnY29sb3IyMCd9Jz5cbiI7CgkgICAgfSBlbHNlIHsKCQlwcmludCAi PHRyIGJnY29sb3I9JyRjb2xvcnsnY29sb3IyMid9Jz5cbiI7CgkgICAgfQoJICAgIHByaW50ICI8 dGQgY2xhc3M9J2Jhc2UnPiRjYWhhc2h7JGtleX1bMF08L3RkPlxuIjsKCSAgICBwcmludCAiPHRk IGNsYXNzPSdiYXNlJz4kY2FoYXNoeyRrZXl9WzFdPC90ZD5cbiI7CgkgICAgcHJpbnQgPDxFTkQK CSAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2NhZnJtJHtrZXl9YSc+PHRkIGFsaWduPSdj ZW50ZXInPgoJCTxpbnB1dCB0eXBlPSdpbWFnZScgbmFtZT0nJExhbmc6OnRyeydzaG93IGNhIGNl cnRpZmljYXRlJ30nIHNyYz0nL2ltYWdlcy9pbmZvLmdpZicgYWx0PSckTGFuZzo6dHJ7J3Nob3cg Y2EgY2VydGlmaWNhdGUnfScgdGl0bGU9JyRMYW5nOjp0cnsnc2hvdyBjYSBjZXJ0aWZpY2F0ZSd9 JyBib3JkZXI9JzAnIC8+CgkJPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nQUNUSU9OJyB2YWx1 ZT0nJExhbmc6OnRyeydzaG93IGNhIGNlcnRpZmljYXRlJ30nIC8+CgkJPGlucHV0IHR5cGU9J2hp ZGRlbicgbmFtZT0nS0VZJyB2YWx1ZT0nJGtleScgLz4KCSAgICA8L3RkPjwvZm9ybT4KCSAgICA8 Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2NhZnJtJHtrZXl9Yic+PHRkIGFsaWduPSdjZW50ZXIn PgoJCTxpbnB1dCB0eXBlPSdpbWFnZScgbmFtZT0nJExhbmc6OnRyeydkb3dubG9hZCBjYSBjZXJ0 aWZpY2F0ZSd9JyBzcmM9Jy9pbWFnZXMvbWVkaWEtZmxvcHB5LnBuZycgYWx0PSckTGFuZzo6dHJ7 J2Rvd25sb2FkIGNhIGNlcnRpZmljYXRlJ30nIHRpdGxlPSckTGFuZzo6dHJ7J2Rvd25sb2FkIGNh IGNlcnRpZmljYXRlJ30nIGJvcmRlcj0nMCcgLz4KCQk8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1l PSdBQ1RJT04nIHZhbHVlPSckTGFuZzo6dHJ7J2Rvd25sb2FkIGNhIGNlcnRpZmljYXRlJ30nIC8+ CgkJPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nS0VZJyB2YWx1ZT0nJGtleScgLz4KCSAgICA8 L3RkPjwvZm9ybT4KCSAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2NhZnJtJHtrZXl9Yyc+ PHRkIGFsaWduPSdjZW50ZXInPgoJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0FDVElPTicg dmFsdWU9JyRMYW5nOjp0cnsncmVtb3ZlIGNhIGNlcnRpZmljYXRlJ30nIC8+CgkJPGlucHV0IHR5 cGU9J2ltYWdlJyAgbmFtZT0nJExhbmc6OnRyeydyZW1vdmUgY2EgY2VydGlmaWNhdGUnfScgc3Jj PScvaW1hZ2VzL2RlbGV0ZS5naWYnIGFsdD0nJExhbmc6OnRyeydyZW1vdmUgY2EgY2VydGlmaWNh dGUnfScgdGl0bGU9JyRMYW5nOjp0cnsncmVtb3ZlIGNhIGNlcnRpZmljYXRlJ30nIHdpZHRoPScy MCcgaGVpZ2h0PScyMCcgYm9yZGVyPScwJyAvPgoJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9 J0tFWScgdmFsdWU9JyRrZXknIC8+CgkgICAgPC90ZD48L2Zvcm0+PC90cj4KRU5ECgkgICAgOwoJ fQogICAgfQoKICAgIHByaW50ICI8L3RhYmxlPiI7CgogICAgIyBJZiB0aGUgZmlsZSBjb250YWlu cyBlbnRyaWVzLCBwcmludCBLZXkgdG8gYWN0aW9uIGljb25zCiAgICBpZiAoIC1mICIke0dlbmVy YWw6OnN3cm9vdH0vb3Zwbi9jYS9jYWNlcnQucGVtIikgewogICAgcHJpbnQgPDxFTkQKICAgIDx0 YWJsZT4KICAgIDx0cj4KCTx0ZCBjbGFzcz0nYm9sZGJhc2UnPiZuYnNwOyA8Yj4kTGFuZzo6dHJ7 J2xlZ2VuZCd9OjwvYj48L3RkPgoJPHRkPiZuYnNwOyAmbmJzcDsgPGltZyBzcmM9Jy9pbWFnZXMv aW5mby5naWYnIGFsdD0nJExhbmc6OnRyeydzaG93IGNlcnRpZmljYXRlJ30nIC8+PC90ZD4KCTx0 ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeydzaG93IGNlcnRpZmljYXRlJ308L3RkPgoJPHRkPiZu YnNwOyAmbmJzcDsgPGltZyBzcmM9Jy9pbWFnZXMvbWVkaWEtZmxvcHB5LnBuZycgYWx0PSckTGFu Zzo6dHJ7J2Rvd25sb2FkIGNlcnRpZmljYXRlJ30nIC8+PC90ZD4KCTx0ZCBjbGFzcz0nYmFzZSc+ JExhbmc6OnRyeydkb3dubG9hZCBjZXJ0aWZpY2F0ZSd9PC90ZD4KICAgIDwvdHI+CiAgICA8L3Rh YmxlPgpFTkQKOwogICAgfQogICAgCnByaW50IDw8RU5ECjxmb3JtIG1ldGhvZD0ncG9zdCcgZW5j dHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+Cjx0YWJsZSB3aWR0aD0nMTAwJScgYm9yZGVyPScw Jz4KPHRyPjx0ZCBjbGFzcz0nYmFzZScgbm93cmFwPSdub3dyYXAnPiRMYW5nOjp0cnsnY2EgbmFt ZSd9OjwvdGQ+PHRkIG5vd3JhcD0nbm93cmFwJyB3aWR0aD0nOCUnPjxpbnB1dCB0eXBlPSd0ZXh0 JyBuYW1lPSdDQV9OQU1FJyB2YWx1ZT0nJGNnaXBhcmFtc3snQ0FfTkFNRSd9JyBzaXplPScxNScg YWxpZ249J2xlZnQnLz48L3RkPjx0ZCBub3dyYXA9J25vd3JhcCcgYWxpZ249J3JpZ2h0Jz48aW5w dXQgdHlwZT0nZmlsZScgbmFtZT0nRkgnIHNpemU9JzI1JyAvPjxpbnB1dCB0eXBlPSdzdWJtaXQn IG5hbWU9J0FDVElPTicgdmFsdWU9JyRMYW5nOjp0cnsndXBsb2FkIGNhIGNlcnRpZmljYXRlJ30n IC8+PC90ZD48L3RyPgo8dHI+PHRkIGNvbHNwYW49JzQnPjxociAvPjwvdGQ+PC90cj4KPHRyIGFs aWduPSdyaWdodCc+PHRkIGNvbHNwYW49JzQnIGFsaWduPSdyaWdodCcgd2lkdGg9JzgwJSc+PGlu cHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydzaG93IGNy bCd9JyAvPjwvdGQ+PC90cj4KPC90YWJsZT4KRU5ECjsKIAoKICAgICZIZWFkZXI6OmNsb3NlYm94 KCk7CiAgICBpZiAoICRzcnVubmluZyBlcSAieWVzIiApIHsgICAgCglwcmludCAiPGRpdiBhbGln bj0nY2VudGVyJz48Zm9ybSBtZXRob2Q9J3Bvc3QnPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9 J0FDVElPTicgdmFsdWU9JyRMYW5nOjp0cnsncmVzZXQnfScgZGlzYWJsZWQ9J2Rpc2FibGVkJyAv PjwvZGl2PjwvZm9ybT5cbiI7ICAgIAogICAgfWVsc2V7CiAgICAJcHJpbnQgIjxkaXYgYWxpZ249 J2NlbnRlcic+PGZvcm0gbWV0aG9kPSdwb3N0Jz48aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdB Q1RJT04nIHZhbHVlPSckTGFuZzo6dHJ7J3Jlc2V0J30nIC8+PC9kaXY+PC9mb3JtPlxuIjsKICAg IH0JICAgIAogICAgaWYgKCAtZiAiJHtHZW5lcmFsOjpzd3Jvb3R9L292cG4vY2EvY2FjZXJ0LnBl bSIgKSB7CgojIyMKIyBtLmEuZCBuZXQybmV0CiM8dGQgd2lkdGg9JzI1JScgY2xhc3M9J2JvbGRi YXNlJyBhbGlnbj0nY2VudGVyJz48Yj4kTGFuZzo6dHJ7J3JlbWFyayd9PC9iPjxiciAvPjxpbWcg c3JjPScvaW1hZ2VzL251bGwuZ2lmJyB3aWR0aD0nMTI1JyBoZWlnaHQ9JzEnIGJvcmRlcj0nMCcg YWx0PSdMMjA4OScgLz48L3RkPgojIyMKCiAgICAmSGVhZGVyOjpvcGVuYm94KCcxMDAlJywgJ0xF RlQnLCAkTGFuZzo6dHJ7J0NsaWVudCBzdGF0dXMgYW5kIGNvbnRyb2xjJyB9KTsKICAgIHByaW50 IDw8RU5ECgoKICAgIDx0YWJsZSB3aWR0aD0nMTAwJScgYm9yZGVyPScwJyBjZWxsc3BhY2luZz0n MScgY2VsbHBhZGRpbmc9JzAnPgo8dHI+CiAgICA8dGQgd2lkdGg9JzEwJScgY2xhc3M9J2JvbGRi YXNlJyBhbGlnbj0nY2VudGVyJz48Yj4kTGFuZzo6dHJ7J25hbWUnfTwvYj48L3RkPgogICAgPHRk IHdpZHRoPScxNSUnIGNsYXNzPSdib2xkYmFzZScgYWxpZ249J2NlbnRlcic+PGI+JExhbmc6OnRy eyd0eXBlJ308L2I+PC90ZD4KICAgIDx0ZCB3aWR0aD0nMjIlJyBjbGFzcz0nYm9sZGJhc2UnIGFs aWduPSdjZW50ZXInPjxiPiRMYW5nOjp0cnsnbmV0d29yayd9PC9iPjwvdGQ+CiAgICA8dGQgd2lk dGg9JzIwJScgY2xhc3M9J2JvbGRiYXNlJyBhbGlnbj0nY2VudGVyJz48Yj4kTGFuZzo6dHJ7J3Jl bWFyayd9PC9iPjwvdGQ+CiAgICA8dGQgd2lkdGg9JzEwJScgY2xhc3M9J2JvbGRiYXNlJyBhbGln bj0nY2VudGVyJz48Yj4kTGFuZzo6dHJ7J3N0YXR1cyd9PC9iPjwvdGQ+CiAgICA8dGQgd2lkdGg9 JzUlJyBjbGFzcz0nYm9sZGJhc2UnIGNvbHNwYW49JzYnIGFsaWduPSdjZW50ZXInPjxiPiRMYW5n Ojp0cnsnYWN0aW9uJ308L2I+PC90ZD4KPC90cj4KRU5ECgk7CiAgICAgICAgbXkgJGlkID0gMDsK ICAgICAgICBteSAkZ2lmOwoJIGZvcmVhY2ggbXkgJGtleSAoc29ydCB7IHVjKCRjb25maWdoYXNo eyRhfVsxXSkgY21wIHVjKCRjb25maWdoYXNoeyRifVsxXSkgfSBrZXlzICVjb25maWdoYXNoKSB7 CiAgICAJaWYgKCRjb25maWdoYXNoeyRrZXl9WzBdIGVxICdvbicpIHsgJGdpZiA9ICdvbi5naWYn OyB9IGVsc2UgeyAkZ2lmID0gJ29mZi5naWYnOyB9CgoJaWYgKCRpZCAlIDIpIHsKCSAgICBwcmlu dCAiPHRyIGJnY29sb3I9JyRjb2xvcnsnY29sb3IyMCd9Jz5cbiI7Cgl9IGVsc2UgewoJICAgIHBy aW50ICI8dHIgYmdjb2xvcj0nJGNvbG9yeydjb2xvcjIyJ30nPlxuIjsKCX0KCXByaW50ICI8dGQg YWxpZ249J2NlbnRlcicgbm93cmFwPSdub3dyYXAnPiRjb25maWdoYXNoeyRrZXl9WzFdPC90ZD4i OwoJcHJpbnQgIjx0ZCBhbGlnbj0nY2VudGVyJyBub3dyYXA9J25vd3JhcCc+IiAuICRMYW5nOjp0 cnsiJGNvbmZpZ2hhc2h7JGtleX1bM10ifSAuICIgKCIgLiAkTGFuZzo6dHJ7IiRjb25maWdoYXNo eyRrZXl9WzRdIn0gLiAiKTwvdGQ+IjsKCSNpZiAoJGNvbmZpZ2hhc2h7JGtleX1bNF0gZXEgJ2Nl cnQnKSB7CgkgICAgI3ByaW50ICI8dGQgYWxpZ249J2xlZnQnIG5vd3JhcD0nbm93cmFwJz4kY29u ZmlnaGFzaHska2V5fVsyXTwvdGQ+IjsKCSN9IGVsc2UgewoJICAgICNwcmludCAiPHRkIGFsaWdu PSdsZWZ0Jz4mbmJzcDs8L3RkPiI7CgkjfQoJbXkgJGNhdmFsaWQgPSBgL3Vzci9iaW4vb3BlbnNz bCB4NTA5IC10ZXh0IC1pbiAke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9jZXJ0cy8kY29uZmlnaGFz aHska2V5fVsxXWNlcnQucGVtYDsKCSRjYXZhbGlkICAgID1+IC9Ob3QgQWZ0ZXIgOiAoLiopW1xu XS87CgkkY2F2YWxpZCAgICA9ICQxOwoJaWYgKCRjb25maWdoYXNoeyRrZXl9WzMyXSBlcSAiIiAm JiAkY29uZmlnaGFzaHska2V5fVszXSBlcSAnbmV0JyApeyRjb25maWdoYXNoeyRrZXl9WzMyXT0i bmV0LTItbmV0Ijt9CglpZiAoJGNvbmZpZ2hhc2h7JGtleX1bMzJdIGVxICIiICYmICRjb25maWdo YXNoeyRrZXl9WzNdIGVxICdob3N0JyApeyRjb25maWdoYXNoeyRrZXl9WzMyXT0iZHluYW1pYyI7 fQoJcHJpbnQgIjx0ZCBhbGlnbj0nY2VudGVyJz4kY29uZmlnaGFzaHska2V5fVszMl08L3RkPiI7 CglwcmludCAiPHRkIGFsaWduPSdjZW50ZXInPiRjb25maWdoYXNoeyRrZXl9WzI1XTwvdGQ+IjsK CglteSAkYWN0aXZlID0gIjx0YWJsZSBjZWxscGFkZGluZz0nMicgY2VsbHNwYWNpbmc9JzAnIGJn Y29sb3I9JyR7SGVhZGVyOjpjb2xvdXJyZWR9JyB3aWR0aD0nMTAwJSc+PHRyPjx0ZCBhbGlnbj0n Y2VudGVyJz48Yj48Zm9udCBjb2xvcj0nI0ZGRkZGRic+JExhbmc6OnRyeydjYXBzY2xvc2VkJ308 L2ZvbnQ+PC9iPjwvdGQ+PC90cj48L3RhYmxlPiI7CgoJaWYgKCRjb25maWdoYXNoeyRrZXl9WzBd IGVxICdvZmYnKSB7CgkgJGFjdGl2ZSA9ICI8dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxzcGFj aW5nPScwJyBiZ2NvbG9yPScke0hlYWRlcjo6Y29sb3VyYmx1ZX0nIHdpZHRoPScxMDAlJz48dHI+ PHRkIGFsaWduPSdjZW50ZXInPjxiPjxmb250IGNvbG9yPScjRkZGRkZGJz4kTGFuZzo6dHJ7J2Nh cHNjbG9zZWQnfTwvZm9udD48L2I+PC90ZD48L3RyPjwvdGFibGU+IjsKCX0gZWxzZSB7CgojIyMK IyBtLmEuZCBuZXQybmV0CiMjIyAgICAgICAKICAgICAgIAogICAgICAgaWYgKCRjb25maWdoYXNo eyRrZXl9WzNdIGVxICduZXQnKSB7CgogICAgICAgIGlmICgtZSAiL3Zhci9ydW4vJGNvbmZpZ2hh c2h7JGtleX1bMV1uMm4ucGlkIikgewogICAgICAgICAgbXkgQG91dHB1dCA9ICIiOwogICAgICAg ICAgbXkgQHR1c3RhdGUgPSAiIjsKICAgICAgICAgIG15ICR0cG9ydCA9ICRjb25maWdoYXNoeyRr ZXl9WzIyXTsKICAgICAgICAgIG15ICR0bmV0ID0gbmV3IE5ldDo6VGVsbmV0ICggVGltZW91dD0+ NSwgRXJybW9kZT0+J3JldHVybicsIFBvcnQ9PiR0cG9ydCk7IAogICAgICAgICAgaWYgKCR0cG9y dCBuZSAnJykgewogICAgICAgICAgJHRuZXQtPm9wZW4oJzEyNy4wLjAuMScpOwogICAgICAgICAg QG91dHB1dCA9ICR0bmV0LT5jbWQoU3RyaW5nID0+ICdzdGF0ZScsIFByb21wdCA9PiAnLyhFTkQu KlxufEVSUk9SOi4qXG4pLycpOwogICAgICAgICAgQHR1c3RhdGUgPSBzcGxpdCgvXCwvLCAkb3V0 cHV0WzFdKTsKIyMjCiNDT05ORUNUSU5HICAgIC0tIE9wZW5WUE4ncyBpbml0aWFsIHN0YXRlLgoj V0FJVCAgICAgICAgICAtLSAoQ2xpZW50IG9ubHkpIFdhaXRpbmcgZm9yIGluaXRpYWwgcmVzcG9u c2UgZnJvbSBzZXJ2ZXIuCiNBVVRIICAgICAgICAgIC0tIChDbGllbnQgb25seSkgQXV0aGVudGlj YXRpbmcgd2l0aCBzZXJ2ZXIuCiNHRVRfQ09ORklHICAgIC0tIChDbGllbnQgb25seSkgRG93bmxv YWRpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZyb20gc2VydmVyLgojQVNTSUdOX0lQICAgICAt LSBBc3NpZ25pbmcgSVAgYWRkcmVzcyB0byB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlLgojQURE X1JPVVRFUyAgICAtLSBBZGRpbmcgcm91dGVzIHRvIHN5c3RlbS4KI0NPTk5FQ1RFRCAgICAgLS0g SW5pdGlhbGl6YXRpb24gU2VxdWVuY2UgQ29tcGxldGVkLgojUkVDT05ORUNUSU5HICAtLSBBIHJl c3RhcnQgaGFzIG9jY3VycmVkLgojRVhJVElORyAgICAgICAtLSBBIGdyYWNlZnVsIGV4aXQgaXMg aW4gcHJvZ3Jlc3MuCiMjIyMKCiAgICAgICAgaWYgKCAkdHVzdGF0ZVsxXSBlcSAnQ09OTkVDVEVE JykgewogICAgICAgICAgJGFjdGl2ZSA9ICI8dGFibGUgY2VsbHBhZGRpbmc9JzInIGNlbGxzcGFj aW5nPScwJyBiZ2NvbG9yPScke0hlYWRlcjo6Y29sb3VyZ3JlZW59JyB3aWR0aD0nMTAwJSc+PHRy Pjx0ZCBhbGlnbj0nY2VudGVyJz48Yj48Zm9udCBjb2xvcj0nI0ZGRkZGRic+JExhbmc6OnRyeydj YXBzb3Blbid9PC9mb250PjwvYj48L3RyPjwvdGQ+PC90YWJsZT4iOwogICAgICAgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAkYWN0aXZlID0gIjx0YWJsZSBjZWxscGFkZGlu Zz0nMicgY2VsbHNwYWNpbmc9JzAnIGJnY29sb3I9JyR7SGVhZGVyOjpjb2xvdXJyZWR9JyB3aWR0 aD0nMTAwJSc+PHRyPjx0ZCBhbGlnbj0nY2VudGVyJz48Yj48Zm9udCBjb2xvcj0nI0ZGRkZGRic+ JHR1c3RhdGVbMV08L2ZvbnQ+PC9iPjwvdGQ+PC90cj48L3RhYmxlPiI7ICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICB9CiAgICAgICAgICAgfSAKICAgICAgICAgICB9CiAgICAg ICAgfQllbHNlIHsKCgkgICAgICAgIG15ICRjbjsKICAgIAkgICAgbXkgQG1hdGNoID0gKCk7CQoJ ICBmb3JlYWNoIG15ICRsaW5lIChAc3RhdHVzKSB7CgkJY2hvbXAoJGxpbmUpOwoJCWlmICggJGxp bmUgPX4gL14oLispLChcZCtcLlxkK1wuXGQrXC5cZCtcOlxkKyksKFxkKyksKFxkKyksKC4rKS8p IHsKCQkgICAgQG1hdGNoID0gc3BsaXQobS9eKC4rKSwoXGQrXC5cZCtcLlxkK1wuXGQrXDpcZCsp LChcZCspLChcZCspLCguKykvLCAkbGluZSk7CgkJICAgIGlmICgkbWF0Y2hbMV0gbmUgIkNvbW1v biBOYW1lIikgewoJICAgIAkJJGNuID0gJG1hdGNoWzFdOwoJCSAgICB9CSAgICAKCSAgICAJJGNu ID1+IHMvW19dLyAvZzsKCQkgICAgaWYgKCRjbiBlcSAiJGNvbmZpZ2hhc2h7JGtleX1bMl0iKSB7 CgkJCSRhY3RpdmUgPSAiPHRhYmxlIGNlbGxwYWRkaW5nPScyJyBjZWxsc3BhY2luZz0nMCcgYmdj b2xvcj0nJHtIZWFkZXI6OmNvbG91cmdyZWVufScgd2lkdGg9JzEwMCUnPjx0cj48dGQgYWxpZ249 J2NlbnRlcic+PGI+PGZvbnQgY29sb3I9JyNGRkZGRkYnPiRMYW5nOjp0cnsnY2Fwc29wZW4nfTwv Zm9udD48L2I+PC90ZD48L3RyPjwvdGFibGU+IjsKCQkgICAgfQogICB9CiAgICAgIAoJfQp9Cn0K CgoJbXkgJGRpc2FibGVfY2xpZW50ZGwgPSAiZGlzYWJsZWQ9J2Rpc2FibGVkJyI7CglpZiAoKCAk Y2dpcGFyYW1zeydFTkFCTEVEJ30gZXEgJ29uJykgfHwgCgkgICAgKCAkY2dpcGFyYW1zeydFTkFC TEVEX0JMVUUnfSBlcSAnb24nKSB8fAoJICAgICggJGNnaXBhcmFtc3snRU5BQkxFRF9PUkFOR0Un fSBlcSAnb24nKSl7CgkgICAgJGRpc2FibGVfY2xpZW50ZGwgPSAiIjsKCX0KCXByaW50IDw8RU5E Cgk8dGQgYWxpZ249J2NlbnRlcic+JGFjdGl2ZTwvdGQ+CgkJCgk8Zm9ybSBtZXRob2Q9J3Bvc3Qn IG5hbWU9J2ZybSR7a2V5fWEnPjx0ZCBhbGlnbj0nY2VudGVyJz4KCSAgICA8aW5wdXQgdHlwZT0n aW1hZ2UnICBuYW1lPSckTGFuZzo6dHJ7J2RsIGNsaWVudCBhcmNoJ30nICRkaXNhYmxlX2NsaWVu dGRsIHNyYz0nL2ltYWdlcy9vcGVudnBuLnBuZycgYWx0PSckTGFuZzo6dHJ7J2RsIGNsaWVudCBh cmNoJ30nIHRpdGxlPSckTGFuZzo6dHJ7J2RsIGNsaWVudCBhcmNoJ30nIGJvcmRlcj0nMCcgLz4K CSAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdBQ1RJT04nIHZhbHVlPSckTGFuZzo6dHJ7 J2RsIGNsaWVudCBhcmNoJ30nICRkaXNhYmxlX2NsaWVudGRsIC8+CgkgICAgPGlucHV0IHR5cGU9 J2hpZGRlbicgbmFtZT0nS0VZJyB2YWx1ZT0nJGtleScgJGRpc2FibGVfY2xpZW50ZGwgLz4KCTwv dGQ+PC9mb3JtPgpFTkQKCTsKCWlmICgkY29uZmlnaGFzaHska2V5fVs0XSBlcSAnY2VydCcpIHsK CSAgICBwcmludCA8PEVORAoJICAgIDxmb3JtIG1ldGhvZD0ncG9zdCcgbmFtZT0nZnJtJHtrZXl9 Yic+PHRkIGFsaWduPSdjZW50ZXInPgoJCTxpbnB1dCB0eXBlPSdpbWFnZScgbmFtZT0nJExhbmc6 OnRyeydzaG93IGNlcnRpZmljYXRlJ30nIHNyYz0nL2ltYWdlcy9pbmZvLmdpZicgYWx0PSckTGFu Zzo6dHJ7J3Nob3cgY2VydGlmaWNhdGUnfScgdGl0bGU9JyRMYW5nOjp0cnsnc2hvdyBjZXJ0aWZp Y2F0ZSd9JyBib3JkZXI9JzAnIC8+CgkJPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nQUNUSU9O JyB2YWx1ZT0nJExhbmc6OnRyeydzaG93IGNlcnRpZmljYXRlJ30nIC8+CgkJPGlucHV0IHR5cGU9 J2hpZGRlbicgbmFtZT0nS0VZJyB2YWx1ZT0nJGtleScgLz4KCSAgICA8L3RkPjwvZm9ybT4KRU5E Cgk7IH0gZWxzZSB7CgkgICAgcHJpbnQgIjx0ZD4mbmJzcDs8L3RkPiI7Cgl9CglpZiAoJGNvbmZp Z2hhc2h7JGtleX1bNF0gZXEgJ2NlcnQnICYmIC1mICIke0dlbmVyYWw6OnN3cm9vdH0vb3Zwbi9j ZXJ0cy8kY29uZmlnaGFzaHska2V5fVsxXS5wMTIiKSB7IAoJICAgIHByaW50IDw8RU5ECgkgICAg PGZvcm0gbWV0aG9kPSdwb3N0JyBuYW1lPSdmcm0ke2tleX1jJz48dGQgYWxpZ249J2NlbnRlcic+ CgkJPGlucHV0IHR5cGU9J2ltYWdlJyBuYW1lPSckTGFuZzo6dHJ7J2Rvd25sb2FkIHBrY3MxMiBm aWxlJ30nIHNyYz0nL2ltYWdlcy9tZWRpYS1mbG9wcHkucG5nJyBhbHQ9JyRMYW5nOjp0cnsnZG93 bmxvYWQgcGtjczEyIGZpbGUnfScgdGl0bGU9JyRMYW5nOjp0cnsnZG93bmxvYWQgcGtjczEyIGZp bGUnfScgYm9yZGVyPScwJyAvPgoJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0FDVElPTicg dmFsdWU9JyRMYW5nOjp0cnsnZG93bmxvYWQgcGtjczEyIGZpbGUnfScgLz4KCQk8aW5wdXQgdHlw ZT0naGlkZGVuJyBuYW1lPSdLRVknIHZhbHVlPScka2V5JyAvPgoJICAgIDwvdGQ+PC9mb3JtPgpF TkQKCTsgfSBlbHNpZiAoJGNvbmZpZ2hhc2h7JGtleX1bNF0gZXEgJ2NlcnQnKSB7CgkgICAgcHJp bnQgPDxFTkQKCSAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2ZybSR7a2V5fWMnPjx0ZCBh bGlnbj0nY2VudGVyJz4KCQk8aW5wdXQgdHlwZT0naW1hZ2UnIG5hbWU9JyRMYW5nOjp0cnsnZG93 bmxvYWQgY2VydGlmaWNhdGUnfScgc3JjPScvaW1hZ2VzL21lZGlhLWZsb3BweS5wbmcnIGFsdD0n JExhbmc6OnRyeydkb3dubG9hZCBjZXJ0aWZpY2F0ZSd9JyB0aXRsZT0nJExhbmc6OnRyeydkb3du bG9hZCBjZXJ0aWZpY2F0ZSd9JyBib3JkZXI9JzAnIC8+CgkJPGlucHV0IHR5cGU9J2hpZGRlbicg bmFtZT0nQUNUSU9OJyB2YWx1ZT0nJExhbmc6OnRyeydkb3dubG9hZCBjZXJ0aWZpY2F0ZSd9JyAv PgoJCTxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0tFWScgdmFsdWU9JyRrZXknIC8+CgkgICAg PC90ZD48L2Zvcm0+CkVORAoJOyB9IGVsc2UgewoJICAgIHByaW50ICI8dGQ+Jm5ic3A7PC90ZD4i OwoJfQoJcHJpbnQgPDxFTkQKCTxmb3JtIG1ldGhvZD0ncG9zdCcgbmFtZT0nZnJtJHtrZXl9ZCc+ PHRkIGFsaWduPSdjZW50ZXInPgoJICAgIDxpbnB1dCB0eXBlPSdpbWFnZScgbmFtZT0nJExhbmc6 OnRyeyd0b2dnbGUgZW5hYmxlIGRpc2FibGUnfScgc3JjPScvaW1hZ2VzLyRnaWYnIGFsdD0nJExh bmc6OnRyeyd0b2dnbGUgZW5hYmxlIGRpc2FibGUnfScgdGl0bGU9JyRMYW5nOjp0cnsndG9nZ2xl IGVuYWJsZSBkaXNhYmxlJ30nIGJvcmRlcj0nMCcgLz4KCSAgICA8aW5wdXQgdHlwZT0naGlkZGVu JyBuYW1lPSdBQ1RJT04nIHZhbHVlPSckTGFuZzo6dHJ7J3RvZ2dsZSBlbmFibGUgZGlzYWJsZSd9 JyAvPgoJICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J0tFWScgdmFsdWU9JyRrZXknIC8+ Cgk8L3RkPjwvZm9ybT4KCgk8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2ZybSR7a2V5fWUnPjx0 ZCBhbGlnbj0nY2VudGVyJz4KCSAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdBQ1RJT04n IHZhbHVlPSckTGFuZzo6dHJ7J2VkaXQnfScgLz4KCSAgICA8aW5wdXQgdHlwZT0naW1hZ2UnIG5h bWU9JyRMYW5nOjp0cnsnZWRpdCd9JyBzcmM9Jy9pbWFnZXMvZWRpdC5naWYnIGFsdD0nJExhbmc6 OnRyeydlZGl0J30nIHRpdGxlPSckTGFuZzo6dHJ7J2VkaXQnfScgd2lkdGg9JzIwJyBoZWlnaHQ9 JzIwJyBib3JkZXI9JzAnLz4KCSAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdLRVknIHZh bHVlPScka2V5JyAvPgoJPC90ZD48L2Zvcm0+Cgk8Zm9ybSBtZXRob2Q9J3Bvc3QnIG5hbWU9J2Zy bSR7a2V5fWYnPjx0ZCBhbGlnbj0nY2VudGVyJz4KCSAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBu YW1lPSdBQ1RJT04nIHZhbHVlPSckTGFuZzo6dHJ7J3JlbW92ZSd9JyAvPgoJICAgIDxpbnB1dCB0 eXBlPSdpbWFnZScgIG5hbWU9JyRMYW5nOjp0cnsncmVtb3ZlJ30nIHNyYz0nL2ltYWdlcy9kZWxl dGUuZ2lmJyBhbHQ9JyRMYW5nOjp0cnsncmVtb3ZlJ30nIHRpdGxlPSckTGFuZzo6dHJ7J3JlbW92 ZSd9JyB3aWR0aD0nMjAnIGhlaWdodD0nMjAnIGJvcmRlcj0nMCcgLz4KCSAgICA8aW5wdXQgdHlw ZT0naGlkZGVuJyBuYW1lPSdLRVknIHZhbHVlPScka2V5JyAvPgoJPC90ZD48L2Zvcm0+Cgk8L3Ry PgpFTkQKCTsKCSRpZCsrOwogICAgfQogICAgOwoKICAgICMgSWYgdGhlIGNvbmZpZyBmaWxlIGNv bnRhaW5zIGVudHJpZXMsIHByaW50IEtleSB0byBhY3Rpb24gaWNvbnMKICAgIGlmICggJGlkICkg ewogICAgcHJpbnQgPDxFTkQKICAgIDx0YWJsZSBib3JkZXI9JzAnPgogICAgPHRyPgoJPHRkIGNs YXNzPSdib2xkYmFzZSc+Jm5ic3A7IDxiPiRMYW5nOjp0cnsnbGVnZW5kJ306PC9iPjwvdGQ+Cgk8 dGQ+Jm5ic3A7IDxpbWcgc3JjPScvaW1hZ2VzL29uLmdpZicgYWx0PSckTGFuZzo6dHJ7J2NsaWNr IHRvIGRpc2FibGUnfScgLz48L3RkPgoJPHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J2NsaWNr IHRvIGRpc2FibGUnfTwvdGQ+Cgk8dGQ+Jm5ic3A7ICZuYnNwOyA8aW1nIHNyYz0nL2ltYWdlcy9p bmZvLmdpZicgYWx0PSckTGFuZzo6dHJ7J3Nob3cgY2VydGlmaWNhdGUnfScgLz48L3RkPgoJPHRk IGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J3Nob3cgY2VydGlmaWNhdGUnfTwvdGQ+Cgk8dGQ+Jm5i c3A7ICZuYnNwOyA8aW1nIHNyYz0nL2ltYWdlcy9lZGl0LmdpZicgYWx0PSckTGFuZzo6dHJ7J2Vk aXQnfScgLz48L3RkPgoJPHRkIGNsYXNzPSdiYXNlJz4kTGFuZzo6dHJ7J2VkaXQnfTwvdGQ+Cgk8 dGQ+Jm5ic3A7ICZuYnNwOyA8aW1nIHNyYz0nL2ltYWdlcy9kZWxldGUuZ2lmJyBhbHQ9JyRMYW5n Ojp0cnsncmVtb3ZlJ30nIC8+PC90ZD4KCTx0ZCBjbGFzcz0nYmFzZSc+JExhbmc6OnRyeydyZW1v dmUnfTwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgoJPHRkPiZuYnNwOyA8L3RkPgoJPHRkPiZuYnNw OyA8aW1nIHNyYz0nL2ltYWdlcy9vZmYuZ2lmJyBhbHQ9Jz9PRkYnIC8+PC90ZD4KCTx0ZCBjbGFz cz0nYmFzZSc+JExhbmc6OnRyeydjbGljayB0byBlbmFibGUnfTwvdGQ+Cgk8dGQ+IDxpbWcgc3Jj PScvaW1hZ2VzL21lZGlhLWZsb3BweS5wbmcnIGFsdD0nP0ZMT1BQWScgLz48L3RkPgoJPHRkIGNs YXNzPSdiYXNlJz4kTGFuZzo6dHJ7J2Rvd25sb2FkIGNlcnRpZmljYXRlJ308L3RkPgoJPHRkPiA8 aW1nIHNyYz0nL2ltYWdlcy9vcGVudnBuLnBuZycgYWx0PSc/UkVMT0FEJy8+PC90ZD4KCTx0ZCBj bGFzcz0nYmFzZSc+JExhbmc6OnRyeydkbCBjbGllbnQgYXJjaCd9PC90ZD4KICAgIDwvdHI+CiAg ICA8L3RhYmxlPjxocj4KRU5ECiAgICA7CiAgICB9CgogICAgcHJpbnQgPDxFTkQKICAgIDx0YWJs ZSB3aWR0aD0nMTAwJSc+CiAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnPgogICAgPHRyPjx0ZCBhbGln bj0ncmlnaHQnPjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J0FDVElPTicgdmFsdWU9JyRMYW5n Ojp0cnsnYWRkJ30nIC8+CiAgICA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdBQ1RJT04nIHZh bHVlPSckTGFuZzo6dHJ7J292cG4gY29uIHN0YXQnfScgJGFjdGl2ZW9ucnVuIC8+PC90ZD48L3Ry PgogICAgPC9mb3JtPgogICAgPC90YWJsZT4KRU5ECiAgICA7ICAgIAogICAgJkhlYWRlcjo6Y2xv c2Vib3goKTsKfQomSGVhZGVyOjpjbG9zZXBhZ2UoKTsKCgoK --===============4065338043785935035==--