# Name: ako_nav v1.0 # Type: Client side plugin # This plugin produces a dynamic navigation bar based on a few specified attributes. # Author: Adrian Kostrubiak # URL: http://www.ako-k.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjc6ImFrb19uYXYiO3M6NjoiYXV0aG9yIjtzOjE3OiJBZHJp YW4gS29zdHJ1YmlhayI7czoxMDoiYXV0aG9yX3VyaSI7czoyMToiaHR0cDovL3d3dy5ha28t ay5jb20vIjtzOjc6InZlcnNpb24iO3M6MzoiMS4wIjtzOjExOiJkZXNjcmlwdGlvbiI7czo4 MjoiVGhpcyBwbHVnaW4gcHJvZHVjZXMgYSBkeW5hbWljIG5hdmlnYXRpb24gYmFyIGJhc2Vk IG9uIGEgZmV3IHNwZWNpZmllZCBhdHRyaWJ1dGVzLiI7czo0OiJjb2RlIjtzOjE2MDQ4OiIv LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLy8gYWtvX25hdiBwbHVnaW4KLy8gRHluYW1pYyBOYXZpZ2F0aW9u IEJhcnMKLy8gYnkgQWRyaWFuIEtvc3RydWJpYWsKLy8gaHR0cDovL3d3dy5ha28tay5jb20v Ci8vIGh0dHA6Ly93d3cud2VyZWFsbGFmcmFpZC5jb20vCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLy8KLy8gVmVyc2lvbiBIaXN0b3J5OgovLyBWZXJzaW9uIDAuMSAtIDAy LTEzLTIwMDUgLSBJbml0aWFsIHJlbGVhc2UKLy8gVmVyc2lvbiAwLjIgLSAwMi0xMy0yMDA1 IC0gQWRkZWQgYWJpbGl0eSB0byB0dXJuIG9mZiBoZWFkZXIgdGV4dC4KLy8gVmVyc2lvbiAw LjMgLSAwNC0xMi0yMDA1IC0gQWN0dWFsbHkgYWRkZWQgYWJpbGl0eSB0byB0dXJuIG9mZiBo ZWFkZXIgdGV4dC4KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbWV0aGluZyB3 YXMgd3JvbmcgbGFzdCB0aW1lLCBhbmQgaXQgdG9vayBtZQovLyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhIHdoaWxlIHRvIHBpY2sgdXAgb24gaXQpLgovLyBWZXJzaW9uIDAuNCAt IDA1LTIxLTIwMDUgLSBSZW1vdmVkIGRlcGVuZGFuY2Ugb24gVVJMcy4gIE5vdyB3ZSBnbyBi eSB0aGUKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiB2YXJpYWJsZSBp biAkcHJldGV4dCAoJHByZXRleHRbJ3MnXSkuCi8vIFZlcnNpb24gMC41IC0gMDYtMjQtMjAw NSAtIEZpeGVkIGFuIGlzc3VlIGluIHdoaWNoIHRoZSBjbGFzcz0iYWN0aXZlIiB3YXMKLy8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGJlaW5nIGFkZGVkIHdoZW4gdGhlIHNp dGUgd2FzIGJlaW5nIHJ1biBvdXQgb2YgYQovLyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdWJkaXJlY3RvcnkuCi8vIFZlcnNpb24gMC42IC0gMDYtMjQtMjAwNSAtIEFkZGVkIHRo ZSBjdXJsaW5rIGF0dHJpYnV0ZS4gIEFsbG93cyB0aGUgYWJpbGl0eSB0bwovLyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoYXZlIHRoZSBjdXJyZW50IHNlY3Rpb24gbm90IGJlIGxp bmtlZC4KLy8gVmVyc2lvbiAwLjcgLSAwNy0wNi0yMDA1IC0gQWRkZWQgYWJpbGl0eSB0byBo YXZlIGV4dHJhIG5hbWVzIHRoYXQsIGlmIHRoZXJlIGFyZQovLyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBub3QgY29ycmVzcG9uZGluZyBsaW5rcywgd2lsbCBub3QgbGluay4gIFRo ZXkgd2lsbAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0IHJlc2lkZSBpbiB0 aGUgbGlzdCBhcyBwbGFpbiB0ZXh0LgovLyBWZXJzaW9uIDAuOCAtIDA5LTA2LTIwMDUgLSBB ZGRlZCBhYmlsaXR5IHRvIHNldCBjbGFzcz0iYWN0aXZlIiB0byBsaSB0YWcKLy8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBhIHRhZwovLyBWZXJzaW9uIDAuOSAt IDEwLTA5LTIwMDUgLSBEdWJiZWQgInN1cGVyLW1lZ2EtY29vbCBpbnN0ZWFkLW9mLWNvbXAt c2NpLXBhcGVyCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UuIiAgQWRk ZWQgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOiBhaWRzLAovLyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhY2xhc3MsIGxpaWRzLCBsaWNsYXNzLCBkaXZvbiwgc3BhbndyYXAsIHNw YW5jbGFzcy4KLy8gVmVyc2lvbiAwLjkuMSAtMTAtMTAtMjAwNS0gRHViYmVkICJvayBzbyB0 aGUgbGFzdCBvbmUgd2Fzbid0IHNvIHN1cGVyLW1lZ2EtY29vbAovLyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBidXQgdGhpcyBvbmUgaXMiIHJlbGVhc2UuICBGaXhlZCBhbiBpc3N1 ZSB3aGVyZQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aXZlIiB3 YXNuJ3QgYmVpbmcgYWRkZWQgd2hlbiBhY2xhc3Mgd2FzIG5vdAovLyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzcGVjaWZpZWQuCi8vCi8vIFBsYW5uZWQ6Ci8vIFZlcnNpb24gMS4w IC0gMTAtMTYtMjAwNiAtIEFkZGl0aW9uIG9mIGFjY2Vzc2tleXMgYW5kIHNwYW5pZHMgYXR0 cmlidXRlcy4gIFN1cHBvcnQgZm9yCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0 dHBzOi8vLCBmdHA6Ly8gaW4gdXJsIGF0dHMsIGh0dHBzOi8vIGFzIHRoZSB0eHAgUFJPVE9D QUwuCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGljbGFzcywgZGVsaW0sIDxh PiBhbmQgPGxpPiBmaXJzdCAvIGxhc3QgY2hpbGQgc3VwcG9ydAoKZnVuY3Rpb24gYWtvX25h digkYXR0cykgewoJLy8gZ2V0IHNvbWUgYXR0cmlidXRlcwoJZ2xvYmFsICRhY3RpY2xhc3M7 CgoJZXh0cmFjdChsQXR0cyhhcnJheSgKCQkJCQkvLyBtYWluIGltcG9ydGFudCBhdHRyaWJ1 dGVzCgkJCQkJJ25hbWUnICA9PiAnJywKCQkJCQkndXJsJyAgID0+ICcnLAoJCQkJCSd0aXRs ZScgPT4gJycsCgoJCQkJCS8vIHVsIGF0dHJpYnV0ZXMKCQkJCQkndWxpZCcgICAgPT4gJycs CgkJCQkJJ3VsY2xhc3MnID0+ICcnLAoKCQkJCQkvLyBsaSBhdHRyaWJ1dGVzCgkJCQkJJ2xp aWQnICAgID0+ICcnLAoJCQkJCSdsaWNsYXNzJyA9PiAnJywKCgkJCQkJLy8gYSBhdHRyaWJ1 dGVzCgkJCQkJJ2FpZHMnICAgPT4gJycsCgkJCQkJJ2FjbGFzcycgPT4gJycsCgoJCQkJCS8v IHNwYW4gYXR0cmlidXRlcwoJCQkJCSdzcGFud3JhcCcgID0+ICcwJywKCQkJCQknc3BhbmNs YXNzJyA9PiAnJywKCQkJCQknc3BhbmlkcycgICA9PiAnJywKCgkJCQkJLy8gZGl2IGF0dHJp YnV0ZXMKCQkJCQknZGl2aWQnICAgID0+ICduYXYnLAoJCQkJCSdkaXZjbGFzcycgPT4gJycs CgkJCQkJJ2Rpdm9uJyAgICA9PiAnMScsCgoJCQkJCS8vIGhlYWRpbmcgYXR0cmlidXRlcwoJ CQkJCSdoZWFkaWQnICAgID0+ICcnLAoJCQkJCSdoZWFkY2xhc3MnID0+ICcnLAoJCQkJCSdo ZWFkb24nICAgID0+ICcxJywKCQkJCQknaGVhZHR4dCcgICA9PiAnTmF2aWdhdGlvbicsCgkJ CQkJJ2hlYWRsdmwnICAgPT4gJzInLAoKCQkJCQkvLyBmaXJzdCAvIGxhc3QgY2hpbGQgc3Vw cG9ydAoJCQkJCSdhZmNoaWxkJyAgICA9PiAnJywKCQkJCQknbGlmY2hpbGQnICAgPT4gJycs CgkJCQkJLy8nZmNoaWxkYWN0JyA9PiAnJywKCQkJCQknYWxjaGlsZCcgICAgPT4gJycsCgkJ CQkJJ2xpbGNoaWxkJyAgID0+ICcnLAoJCQkJCS8vJ2xjaGlsZGFjdCcgPT4gJycsCgoJCQkJ CS8vIHJhbmRvbQoJCQkJCSdjdXJsaW5rJyAgICA9PiAnMScsCgkJCQkJJ2NsYXNzdGFnJyAg ID0+ICcwJywKCQkJCQknYWN0aWNsYXNzJyAgPT4gJ2FjdGl2ZScsCgkJCQkJJ2RlbGltJyAg ICAgID0+ICcsJywKCQkJCQknYWNjZXNza2V5cycgPT4gJycsCgkJCQkJKSwkYXR0cykpOwoJ Ly8gZW5kIGF0dHJpYnV0ZXMKCgkvLyBtYWtlIHN1cmUgd2UncmUgZG9pbmcgX3NvbWV0aGlu Z18gaGVyZS4uCglpZiAoISRuYW1lICYmICEkdXJsKSByZXR1cm4oYWtvX25hdl9oZWxwKCJu YW1lJiM4MjE3O3MgYW5kIFVSTCIpKTsKCWlmICghJG5hbWUpIHJldHVybihha29fbmF2X2hl bHAoIm5hbWUiKSk7CglpZiAoISR1cmwpICByZXR1cm4oYWtvX25hdl9oZWxwKCJVUkwiKSk7 CgoJJGFrb19vdXQgPSAiIjsKCgkvLyBwYXJzZSB0aGUgdXJpJ3MsIHRpdGxlJ3MsIG5hbWUn cyBvZiBwYWdlcywgPGE+IGNsYXNzLCA8bGk+IGNsYXNzLCBmaXJzdCAmIGxhc3QgY2hpbGQg c3VwcG9ydC4uCgkkcGFnZXNbXSA9IGV4cGxvZGUoJGRlbGltLCAkbmFtZSk7CgkkcGFnZXNb XSA9IGV4cGxvZGUoJGRlbGltLCAkdXJsKTsKCWlmICghZW1wdHkoJHRpdGxlKSkgeyAkcGFn ZXNbXSA9IGV4cGxvZGUoJGRlbGltLCAkdGl0bGUpOyB9IGVsc2UgeyAkcGFnZXNbXSA9IGFy cmF5X2ZpbGwoMCwgY291bnQoJHBhZ2VzWzBdKSwgIiIpOyB9CglpZiAoIWVtcHR5KCRhaWRz KSkgIHsgJHBhZ2VzW10gPSBleHBsb2RlKCRkZWxpbSwgJGFpZHMpOyAgfSBlbHNlIHsgJHBh Z2VzW10gPSBhcnJheV9maWxsKDAsIGNvdW50KCRwYWdlc1swXSksICIiKTsgfQoJaWYgKCFl bXB0eSgkbGlpZCkpICB7ICRwYWdlc1tdID0gZXhwbG9kZSgkZGVsaW0sICRsaWlkKTsgIH0g ZWxzZSB7ICRwYWdlc1tdID0gYXJyYXlfZmlsbCgwLCBjb3VudCgkcGFnZXNbMF0pLCAiIik7 IH0KCSRwYWdlc1tdID0gJGFjbGFzczsgICAgIC8vIGluZGV4OiA1CgkkcGFnZXNbXSA9ICRs aWNsYXNzOyAgICAvLyBpbmRleDogNgoJJHBhZ2VzW10gPSAkYWZjaGlsZDsgICAgLy8gaW5k ZXg6IDcKCSRwYWdlc1tdID0gJGxpZmNoaWxkOyAgIC8vIGluZGV4OiA4CgkkcGFnZXNbXSA9 ICRhbGNoaWxkOyAgICAvLyBpbmRleDogOQoJJHBhZ2VzW10gPSAkbGlsY2hpbGQ7ICAgLy8g aW5kZXg6IDEwCgoJLy8gYWNjZXNza2V5cy4uLgoJaWYgKCFlbXB0eSgkYWNjZXNza2V5cykp IHsKCQkkcGFnZXNbXSA9IGV4cGxvZGUoJGRlbGltLCAkYWNjZXNza2V5cyk7Cgl9IGVsc2Ug ewoJCWZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRwYWdlc1swXSk7ICRpKyspIHsKCQkJJHBh Z2VzWzExXVskaV0gPSAoJGkrMSk7CgkJfQoJfQoKCS8vIHN0YXJ0IHB1dHRpbmcgdG9nZXRo ZXIgYSBuYXZiYXIuLi4KCSRha29fb3V0ID0gKCRoZWFkb24gPT0gMSkgPyBuLmhlZCgkaGVh ZHR4dCwgJGhlYWRsdmwsIGFrb19wYXJzZV9pZCgkaGVhZGlkKSAuIGFrb19wYXJzZV9jbGFz cygkaGVhZGNsYXNzLCBmYWxzZSkpIDogJyc7CgkkYWtvX291dCAuPSBuLiI8dWwiLiBha29f cGFyc2VfaWQoJHVsaWQpIC4gYWtvX3BhcnNlX2NsYXNzKCR1bGNsYXNzLCBmYWxzZSkgLiI+ Ii5uOwoKICAgIC8vIGNoZWNrIHNwYW53cmFwLi4KCWlmICgkc3BhbndyYXAgPT0gMSkgewoJ CSRzcGFuaWRBcnIgPSBleHBsb2RlKCRkZWxpbSwgJHNwYW5pZHMpOwoJCSRpID0gMDsKCQlm b3JlYWNoICgkcGFnZXNbMF0gYXMgJHZhbHVlKSB7CgkJCSRwYWdlc1swXVskaV0gPSB0YWco JHZhbHVlLCAic3BhbiIsIGFrb19wYXJzZV9jbGFzcygkc3BhbmNsYXNzLCBmYWxzZSkgLiBh a29fcGFyc2VfaWQoJHNwYW5pZEFyclskaV0pKTsKCQkJJGkrKzsKCQl9Cgl9CgoJLy8gaGVy ZXMgdGhlIHRyaWNrZXJ5IHRvIGdvIHRocm91Z2ggdGhlIHVsJ3MsIGFuZCBhZGQgdGhlIGNs YXNzPSJhY3RpdmUiIGR5bmFtaWNhbGx5CgkvLyBpdCdzIHRyaXh5Li4uIHlvdSBrbm93IHlv dSBsaWtlIGl0LgoJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHBhZ2VzWzBdKTsgJGkrKykg ewoJCSRuYXZiYXJbXSA9IGFycmF5KCJuYW1lIiAgICAgID0+ICRwYWdlc1swXVskaV0sCgkJ ICAgICAgICAgICAgICAgICAgInVybCIgICAgICAgPT4gJHBhZ2VzWzFdWyRpXSwKCQkgICAg ICAgICAgICAgICAgICAidGl0bGUiICAgICA9PiAkcGFnZXNbMl1bJGldLAoJCSAgICAgICAg ICAgICAgICAgICJhaWQiICAgICAgID0+ICRwYWdlc1szXVskaV0sCgkJICAgICAgICAgICAg ICAgICAgImxpaWQiICAgICAgPT4gJHBhZ2VzWzRdWyRpXSwKCQkgICAgICAgICAgICAgICAg ICAiYWNsYXNzIiAgICA9PiAkcGFnZXNbNV0sCgkJICAgICAgICAgICAgICAgICAgImxpY2xh c3MiICAgPT4gJHBhZ2VzWzZdLAoJCSAgICAgICAgICAgICAgICAgICJhZmNoaWxkIiAgID0+ ICRwYWdlc1s3XSwKCQkgICAgICAgICAgICAgICAgICAibGlmY2hpbGQiICA9PiAkcGFnZXNb OF0sCgkJICAgICAgICAgICAgICAgICAgImFsY2hpbGQiICAgPT4gJHBhZ2VzWzldLAoJCSAg ICAgICAgICAgICAgICAgICJsaWxjaGlsZCIgID0+ICRwYWdlc1sxMF0sCgkJICAgICAgICAg ICAgICAgICAgImFjY2Vzc2tleSIgPT4gJHBhZ2VzWzExXVskaV0pOwoJfSAvLyBlbmQgZm9y KCkKCgkvLyBhbGwgdGhlIG1hZ2lxdWUgZ29lcyBvbiBoZXJlLiBjaGVjayBpdCBmdXJ0aGVy IGJlbG93LgoJc3dpdGNoKCRjdXJsaW5rKSB7CgkJY2FzZSAxOgoJCQkkYWtvX291dCAuPSAo JGNsYXNzdGFnID09IDApCgkJCQk/IGFrb19wYXJzZV9saV8xKCRuYXZiYXIsIGZhbHNlKQoJ CQkJOiBha29fcGFyc2VfbGlfMigkbmF2YmFyLCBmYWxzZSk7CgkJCWJyZWFrOwoJCWNhc2Ug MDoKCQkJJGFrb19vdXQgLj0gKCRjbGFzc3RhZyA9PSAwKQoJCQkJPyBha29fcGFyc2VfbGlf MygkbmF2YmFyLCBmYWxzZSkKCQkJCTogYWtvX3BhcnNlX2xpXzQoJG5hdmJhciwgZmFsc2Up OwoJCQlicmVhazsKCX0KCgkvLyBmaW5pc2ggb2ZmIHRoZSBuYXZiYXIuLi4KCSRha29fb3V0 IC49ICI8L3VsPiIubjsKCSRha29fb3V0ICA9ICgkZGl2b24gPT0gMSkgPyB0YWcoJGFrb19v dXQsICJkaXYiLCBha29fcGFyc2VfaWQoJGRpdmlkKSAuIGFrb19wYXJzZV9jbGFzcygkZGl2 Y2xhc3MsIGZhbHNlKSkgOiAkYWtvX291dDsKCglyZXR1cm4oJGFrb19vdXQpOwp9CgoKLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQogICAgcGFyc2VfbGkga2V5OgogICAgMTogbGluayB0byBj dXJyZW50IHNlbGVjdGlvbiwgYWRkIGNsYXNzPSJhY3RpdmUiIHRvIGFuY2hvciB0YWdzCiAg ICAyOiBsaW5rIHRvIGN1cnJlbnQgc2VsZWN0aW9uLCBhZGQgY2xhc3M9ImFjdGl2ZSIgdG8g bGlzdCBpdGVtcwogICAgMzogbm8gbGluayB0byBjdXJyZW50IHNlbGVjdGlvbiwgYWRkIGNs YXNzPSJhY3RpdmUiIHRvIGFuY2hvciB0YWdzIOKAoAogICAgNDogbm8gbGluayB0byBjdXJy ZW50IHNlbGVjdGlvbiwgYWRkIGNsYXNzPSJhY3RpdmUiIHRvIGxpc3QgaXRlbXMKCiAgICAt LS0tLS0tLS0tLQogICAg4oCgIGlmIHlvdSB0aGluayBhYm91dCBpdCwgdGhpcyBtYWtlcyBu byBzZW5zZSB3aGF0IHNvIGV2ZXIuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCmZ1bmN0aW9u IGFrb19wYXJzZV9saV8xKCRuYXZiYXIsICRmdWxsVXJsKSB7CgkvLyBsaW5rIHRvIGN1cnJl bnQgc2VsZWN0aW9uLCBhZGQgY2xhc3M9ImFjdGl2ZSIgdG8gYW5jaG9yIHRhZ3MKCWdsb2Jh bCAkcHJldGV4dCwgJHNpdGV1cmw7Cgkkc2VjdGlvbiA9ICRwcmV0ZXh0WydzJ107CgoJJHAg PSAoZGVmaW5lZCgnUFJPVE9DT0wnKSkgPyBQUk9UT0NPTCA6ICdodHRwOi8vJzsKCSRwcyA9 IGFycmF5KCJodHRwOi8vIiwgImh0dHBzOi8vIiwgImZ0cDovLyIsICJmdHBzOi8vIiwgIm1h aWx0bzoiKTsKCgkkc2VjdGlvbiA9ICgkc2VjdGlvbiA9PSAiZGVmYXVsdCIpID8gIiIgOiAk c2VjdGlvbjsKCSRwX291dCA9ICIiOwoJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG5hdmJh cik7ICRpKyspIHsKCQlpZiAoJGkgPT0gMCkgewoJCQkkbGlBdHRzID0gYWtvX3BhcnNlX2lk KCRuYXZiYXJbJGldWyJsaWlkIl0pIC4gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGldWyJs aWNsYXNzIl0sIGZhbHNlLCAkbmF2YmFyWyRpXVsibGlmY2hpbGQiXSk7CgkJfSBlbHNlIGlm ICgkaSA9PSAoY291bnQoJG5hdmJhcikgLSAxKSkgewoJCQkkbGlBdHRzID0gYWtvX3BhcnNl X2lkKCRuYXZiYXJbJGldWyJsaWlkIl0pIC4gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGld WyJsaWNsYXNzIl0sIGZhbHNlLCAkbmF2YmFyWyRpXVsibGlsY2hpbGQiXSk7CgkJfSBlbHNl IHsKCQkJJGxpQXR0cyA9IGFrb19wYXJzZV9pZCgkbmF2YmFyWyRpXVsibGlpZCJdKSAuIGFr b19wYXJzZV9jbGFzcygkbmF2YmFyWyRpXVsibGljbGFzcyJdLCBmYWxzZSk7CgkJfQoKCQlp ZiAoIWVtcHR5KCRuYXZiYXJbJGldWyJ1cmwiXSkpIHsKCQkJLy8gdGhlcmUgaXMgYSBsaW5r CgkJCSRhQXR0cyAgPSAiIGhyZWY9XCIiLiAoKCRmdWxsVXJsIHx8IChzdHJwb3MoJG5hdmJh clskaV1bInVybCJdLCAkcHMpICE9PSBmYWxzZSkpCgkJCQk/ICRuYXZiYXJbJGldWyJ1cmwi XQoJCQkJOiAkcC4kc2l0ZXVybC4kbmF2YmFyWyRpXVsidXJsIl0pIC4iXCIiOwoJCQkkYUF0 dHMgLj0gYWtvX3BhcnNlX3RpdGxlKCRuYXZiYXJbJGldWyJ0aXRsZSJdKTsKCQkJJGFBdHRz IC49ICIgYWNjZXNza2V5PVwiIi4gJG5hdmJhclskaV1bImFjY2Vzc2tleSJdIC4iXCIiOwoK CQkJLy8gZmlyc3QgLyBsYXN0IGNoaWxkIHN1cHBvcnQKCQkJaWYgKCRpID09IDApIHsKCQkJ CSRhQXR0cyAuPSBha29fcGFyc2VfY2xhc3MoJG5hdmJhclskaV1bImFjbGFzcyJdLCBha29f Y2xhc3NBY3RpdmVpemUoJHNlY3Rpb24sICRuYXZiYXJbJGldWyJ1cmwiXSksICRuYXZiYXJb JGldWyJhZmNoaWxkIl0pOwoJCQl9IGVsc2UgaWYgKCRpID09IChjb3VudCgkbmF2YmFyKSAt IDEpKSB7CgkJCQkkYUF0dHMgLj0gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGldWyJhY2xh c3MiXSwgYWtvX2NsYXNzQWN0aXZlaXplKCRzZWN0aW9uLCAkbmF2YmFyWyRpXVsidXJsIl0p LCAkbmF2YmFyWyRpXVsiYWxjaGlsZCJdKTsKCQkJfSBlbHNlIHsKCQkJCSRhQXR0cyAuPSBh a29fcGFyc2VfY2xhc3MoJG5hdmJhclskaV1bImFjbGFzcyJdLCBha29fY2xhc3NBY3RpdmVp emUoJHNlY3Rpb24sICRuYXZiYXJbJGldWyJ1cmwiXSkpOwoJCQl9CgoJCQkkYUF0dHMgLj0g YWtvX3BhcnNlX2lkKCRuYXZiYXJbJGldWyJhaWQiXSk7CgoJCQkkbGlMaW5rID0gdGFnKCRu YXZiYXJbJGldWyJuYW1lIl0sICJhIiwgJGFBdHRzKTsKCQkJJHBfb3V0IC49IHRhZygkbGlM aW5rLCAibGkiLCAkbGlBdHRzKS5uOwoJCX0gZWxzZSB7CgkJCS8vIG5vIGxpbmssIGp1c3Qg dGV4dAoJCQkkcF9vdXQgLj0gdGFnKCRuYXZiYXJbJGldWyJuYW1lIl0sICJsaSIsICRsaUF0 dHMpLm47CgkJfQoJfQoJcmV0dXJuKCRwX291dCk7Cn0KCgpmdW5jdGlvbiBha29fcGFyc2Vf bGlfMigkbmF2YmFyLCAkZnVsbFVybCkgewoJLy8gbGluayB0byBjdXJyZW50IHNlbGVjdGlv biwgYWRkIGNsYXNzPSJhY3RpdmUiIHRvIGxpc3QgaXRlbXMKCWdsb2JhbCAkcHJldGV4dCwg JHNpdGV1cmw7Cgkkc2VjdGlvbiA9ICRwcmV0ZXh0WydzJ107CgoJJHAgPSAoZGVmaW5lZCgn UFJPVE9DT0wnKSkgPyBQUk9UT0NPTCA6ICdodHRwOi8vJzsKCSRwcyA9IGFycmF5KCJodHRw Oi8vIiwgImh0dHBzOi8vIiwgImZ0cDovLyIsICJmdHBzOi8vIiwgIm1haWx0bzoiKTsKCgkk c2VjdGlvbiA9ICgkc2VjdGlvbiA9PSAiZGVmYXVsdCIpID8gIiIgOiAkc2VjdGlvbjsKCSRw X291dCA9ICIiOwoJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG5hdmJhcik7ICRpKyspIHsK CQlpZiAoJGkgPT0gMCkgewoJCQkkbGlBdHRzID0gYWtvX3BhcnNlX2lkKCRuYXZiYXJbJGld WyJsaWlkIl0pIC4gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGldWyJsaWNsYXNzIl0sIGFr b19jbGFzc0FjdGl2ZWl6ZSgkc2VjdGlvbiwgJG5hdmJhclskaV1bInVybCJdKSwgJG5hdmJh clskaV1bImxpZmNoaWxkIl0pOwoJCX0gZWxzZSBpZiAoJGkgPT0gKGNvdW50KCRuYXZiYXIp IC0gMSkpIHsKCQkJJGxpQXR0cyA9IGFrb19wYXJzZV9pZCgkbmF2YmFyWyRpXVsibGlpZCJd KSAuIGFrb19wYXJzZV9jbGFzcygkbmF2YmFyWyRpXVsibGljbGFzcyJdLCBha29fY2xhc3NB Y3RpdmVpemUoJHNlY3Rpb24sICRuYXZiYXJbJGldWyJ1cmwiXSksICRuYXZiYXJbJGldWyJs aWZjaGlsZCJdKTsKCQl9IGVsc2UgewoJCQkkbGlBdHRzID0gYWtvX3BhcnNlX2lkKCRuYXZi YXJbJGldWyJsaWlkIl0pIC4gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGldWyJsaWNsYXNz Il0sIGFrb19jbGFzc0FjdGl2ZWl6ZSgkc2VjdGlvbiwgJG5hdmJhclskaV1bInVybCJdKSk7 CgkJfQoJCWlmICghZW1wdHkoJG5hdmJhclskaV1bInVybCJdKSkgewoJCQkvLyB0aGVyZSBp cyBhIGxpbmsKCQkJJGFBdHRzICA9ICIgaHJlZj1cIiIuICgoJGZ1bGxVcmwgfHwgKHN0cnBv cygkbmF2YmFyWyRpXVsidXJsIl0sICRwcykgIT09IGZhbHNlKSkKCQkJCT8gJG5hdmJhclsk aV1bInVybCJdCgkJCQk6ICRwLiRzaXRldXJsLiRuYXZiYXJbJGldWyJ1cmwiXSkgLiJcIiI7 CgkJCSRhQXR0cyAuPSBha29fcGFyc2VfdGl0bGUoJG5hdmJhclskaV1bInRpdGxlIl0pOwoJ CQkkYUF0dHMgLj0gIiBhY2Nlc3NrZXk9XCIiLiAkbmF2YmFyWyRpXVsiYWNjZXNza2V5Il0g LiJcIiI7CgkJCWlmICgkaSA9PSAwKSB7CgkJCQkkYUF0dHMgLj0gYWtvX3BhcnNlX2NsYXNz KCRuYXZiYXJbJGldWyJhY2xhc3MiXSwgZmFsc2UsICRuYXZiYXJbJGldWyJhZmNoaWxkIl0p OwoJCQl9IGVsc2UgaWYgKCRpID09IChjb3VudCgkbmF2YmFyKSAtIDEpKSB7CgkJCQkkYUF0 dHMgLj0gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGldWyJhY2xhc3MiXSwgZmFsc2UsICRu YXZiYXJbJGldWyJhbGNoaWxkIl0pOwoJCQl9IGVsc2UgewoJCQkJJGFBdHRzIC49IGFrb19w YXJzZV9jbGFzcygkbmF2YmFyWyRpXVsiYWNsYXNzIl0sIGZhbHNlKTsKCQkJfQoJCQkkYUF0 dHMgLj0gYWtvX3BhcnNlX2lkKCRuYXZiYXJbJGldWyJhaWQiXSk7CgoJCQkkbGlMaW5rID0g dGFnKCRuYXZiYXJbJGldWyJuYW1lIl0sICJhIiwgJGFBdHRzKTsKCQkJJHBfb3V0IC49IHRh ZygkbGlMaW5rLCAibGkiLCAkbGlBdHRzKS5uOwoJCX0gZWxzZSB7CgkJCS8vIG5vIGxpbmss IGp1c3QgdGV4dAoJCQkkcF9vdXQgLj0gdGFnKCRuYXZiYXJbJGldWyJuYW1lIl0sICJsaSIs ICRsaUF0dHMpLm47CgkJfQoJfQoJcmV0dXJuKCRwX291dCk7Cn0KCgpmdW5jdGlvbiBha29f cGFyc2VfbGlfMygkbmF2YmFyLCAkZnVsbFVybCkgewoJLy8gbm8gbGluayB0byBjdXJyZW50 IHNlbGVjdGlvbiwgYWRkIGNsYXNzPSJhY3RpdmUiIHRvIGFuY2hvciB0YWdzCgkvLyB0aGlz IGRvZXNuJ3QgbWFrZSBzZW5zZS4uLgoJZ2xvYmFsICRwcmV0ZXh0LCAkc2l0ZXVybDsKCSRz ZWN0aW9uID0gJHByZXRleHRbJ3MnXTsKCgkkcCA9IChkZWZpbmVkKCdQUk9UT0NPTCcpKSA/ IFBST1RPQ09MIDogJ2h0dHA6Ly8nOwoJJHBzID0gYXJyYXkoImh0dHA6Ly8iLCAiaHR0cHM6 Ly8iLCAiZnRwOi8vIiwgImZ0cHM6Ly8iLCAibWFpbHRvOiIpOwoKCSRzZWN0aW9uID0gKCRz ZWN0aW9uID09ICJkZWZhdWx0IikgPyAiIiA6ICRzZWN0aW9uOwoJJHBfb3V0ID0gIiI7Cglm b3IgKCRpID0gMDsgJGkgPCBjb3VudCgkbmF2YmFyKTsgJGkrKykgewoJCWlmICgkaSA9PSAw KSB7CgkJCSRsaUF0dHMgPSBha29fcGFyc2VfaWQoJG5hdmJhclskaV1bImxpaWQiXSkgLiBh a29fcGFyc2VfY2xhc3MoJG5hdmJhclskaV1bImxpY2xhc3MiXSwgZmFsc2UsICRuYXZiYXJb JGldWyJsaWZjaGlsZCJdKTsKCQl9IGVsc2UgaWYgKCRpID09IChjb3VudCgkbmF2YmFyKSAt IDEpKSB7CgkJCSRsaUF0dHMgPSBha29fcGFyc2VfaWQoJG5hdmJhclskaV1bImxpaWQiXSkg LiBha29fcGFyc2VfY2xhc3MoJG5hdmJhclskaV1bImxpY2xhc3MiXSwgZmFsc2UsICRuYXZi YXJbJGldWyJsaWxjaGlsZCJdKTsKCQl9IGVsc2UgewoJCQkkbGlBdHRzID0gYWtvX3BhcnNl X2lkKCRuYXZiYXJbJGldWyJsaWlkIl0pIC4gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGld WyJsaWNsYXNzIl0sIGZhbHNlKTsKCQl9CgkJaWYgKCFlbXB0eSgkbmF2YmFyWyRpXVsidXJs Il0pKSB7CgkJCS8vIHRoZXJlIGlzIGEgbGluawoJCQlpZiAoYWtvX2NsYXNzQWN0aXZlaXpl KCRzZWN0aW9uLCAkbmF2YmFyWyRpXVsidXJsIl0pKSB7CgkJCQkkcF9vdXQgLj0gdGFnKCRu YXZiYXJbJGldWyJuYW1lIl0sICJsaSIsICRsaUF0dHMpLm47CgkJCX0gZWxzZSB7CgkJCQkk YUF0dHMgID0gIiBocmVmPVwiIi4gKCgkZnVsbFVybCB8fCAoc3RycG9zKCRuYXZiYXJbJGld WyJ1cmwiXSwgJHBzKSAhPT0gZmFsc2UpKQoJCQkJCT8gJG5hdmJhclskaV1bInVybCJdCgkJ CQkJOiAkcC4kc2l0ZXVybC4kbmF2YmFyWyRpXVsidXJsIl0pIC4iXCIiOwoJCQkJJGFBdHRz IC49IGFrb19wYXJzZV90aXRsZSgkbmF2YmFyWyRpXVsidGl0bGUiXSk7CgkJCQkkYUF0dHMg Lj0gIiBhY2Nlc3NrZXk9XCIiLiAkbmF2YmFyWyRpXVsiYWNjZXNza2V5Il0gLiJcIiI7CgkJ CQlpZiAoJGkgPT0gMCkgewoJCQkJCSRhQXR0cyAuPSBha29fcGFyc2VfY2xhc3MoJG5hdmJh clskaV1bImFjbGFzcyJdLCBmYWxzZSwgJG5hdmJhclskaV1bImFmY2hpbGQiXSk7CgkJCQl9 IGVsc2UgaWYgKCRpID09IChjb3VudCgkbmF2YmFyKSAtIDEpKSB7CgkJCQkJJGFBdHRzIC49 IGFrb19wYXJzZV9jbGFzcygkbmF2YmFyWyRpXVsiYWNsYXNzIl0sIGZhbHNlLCAkbmF2YmFy WyRpXVsiYWxjaGlsZCJdKTsKCQkJCX0gZWxzZSB7CgkJCQkJJGFBdHRzIC49IGFrb19wYXJz ZV9jbGFzcygkbmF2YmFyWyRpXVsiYWNsYXNzIl0sIGZhbHNlKTsKCQkJCX0KCQkJCSRhQXR0 cyAuPSBha29fcGFyc2VfaWQoJG5hdmJhclskaV1bImFpZCJdKTsKCgkJCQkkbGlMaW5rID0g dGFnKCRuYXZiYXJbJGldWyJuYW1lIl0sICJhIiwgJGFBdHRzKTsKCQkJCSRwX291dCAuPSB0 YWcoJGxpTGluaywgImxpIiwgJGxpQXR0cykubjsKCQkJfQoJCX0gZWxzZSB7CgkJCS8vIG5v IGxpbmssIGp1c3QgdGV4dAoJCQkkcF9vdXQgLj0gdGFnKCRuYXZiYXJbJGldWyJuYW1lIl0s ICJsaSIsICRsaUF0dHMpLm47CgkJfQoJfQoJcmV0dXJuKCRwX291dCk7Cn0KCgpmdW5jdGlv biBha29fcGFyc2VfbGlfNCgkbmF2YmFyLCAkZnVsbFVybCkgewoJLy8gbm8gbGluayB0byBj dXJyZW50IHNlbGVjdGlvbiwgYWRkIGNsYXNzPSJhY3RpdmUiIHRvIGxpc3QgaXRlbXMKCWds b2JhbCAkcHJldGV4dCwgJHNpdGV1cmw7Cgkkc2VjdGlvbiA9ICRwcmV0ZXh0WydzJ107CgoJ JHAgPSAoZGVmaW5lZCgnUFJPVE9DT0wnKSkgPyBQUk9UT0NPTCA6ICdodHRwOi8vJzsKCSRw cyA9IGFycmF5KCJodHRwOi8vIiwgImh0dHBzOi8vIiwgImZ0cDovLyIsICJmdHBzOi8vIiwg Im1haWx0bzoiKTsKCgkkc2VjdGlvbiA9ICgkc2VjdGlvbiA9PSAiZGVmYXVsdCIpID8gIiIg OiAkc2VjdGlvbjsKCSRwX291dCA9ICIiOwoJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG5h dmJhcik7ICRpKyspIHsKCQlpZiAoJGkgPT0gMCkgewoJCQkkbGlBdHRzID0gYWtvX3BhcnNl X2lkKCRuYXZiYXJbJGldWyJsaWlkIl0pIC4gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGld WyJsaWNsYXNzIl0sIGFrb19jbGFzc0FjdGl2ZWl6ZSgkc2VjdGlvbiwgJG5hdmJhclskaV1b InVybCJdKSwgJG5hdmJhclskaV1bImxpZmNoaWxkIl0pOwoJCX0gZWxzZSBpZiAoJGkgPT0g KGNvdW50KCRuYXZiYXIpIC0gMSkpIHsKCQkJJGxpQXR0cyA9IGFrb19wYXJzZV9pZCgkbmF2 YmFyWyRpXVsibGlpZCJdKSAuIGFrb19wYXJzZV9jbGFzcygkbmF2YmFyWyRpXVsibGljbGFz cyJdLCBha29fY2xhc3NBY3RpdmVpemUoJHNlY3Rpb24sICRuYXZiYXJbJGldWyJ1cmwiXSks ICRuYXZiYXJbJGldWyJsaWZjaGlsZCJdKTsKCQl9IGVsc2UgewoJCQkkbGlBdHRzID0gYWtv X3BhcnNlX2lkKCRuYXZiYXJbJGldWyJsaWlkIl0pIC4gYWtvX3BhcnNlX2NsYXNzKCRuYXZi YXJbJGldWyJsaWNsYXNzIl0sIGFrb19jbGFzc0FjdGl2ZWl6ZSgkc2VjdGlvbiwgJG5hdmJh clskaV1bInVybCJdKSk7CgkJfQoJCWlmICghZW1wdHkoJG5hdmJhclskaV1bInVybCJdKSkg ewoJCQkvLyB0aGVyZSBpcyBhIGxpbmsKCQkJaWYgKGFrb19jbGFzc0FjdGl2ZWl6ZSgkc2Vj dGlvbiwgJG5hdmJhclskaV1bInVybCJdKSkgewoJCQkJLy8gd2UncmUgaW4gY3VycmVudCBz ZWN0aW9uLCBubyBsaW5rIHRvIGl0CgkJCQkkcF9vdXQgLj0gdGFnKCRuYXZiYXJbJGldWyJu YW1lIl0sICJsaSIsICRsaUF0dHMpLm47CgkJCX0gZWxzZSB7CgkJCQkvLyBub3QgaW4gY3Vy cmVudCBzZWN0aW9uLCBsaW5rIHRvIHRob3NlLgoJCQkJJGFBdHRzICA9ICIgaHJlZj1cIiIu ICgoJGZ1bGxVcmwgfHwgKHN0cnBvcygkbmF2YmFyWyRpXVsidXJsIl0sICRwcykgIT09IGZh bHNlKSkKCQkJCQk/ICRuYXZiYXJbJGldWyJ1cmwiXQoJCQkJCTogJHAuJHNpdGV1cmwuJG5h dmJhclskaV1bInVybCJdKSAuIlwiIjsKCQkJCSRhQXR0cyAuPSBha29fcGFyc2VfdGl0bGUo JG5hdmJhclskaV1bInRpdGxlIl0pOwoJCQkJJGFBdHRzIC49ICIgYWNjZXNza2V5PVwiIi4g JG5hdmJhclskaV1bImFjY2Vzc2tleSJdIC4iXCIiO2lmICgkaSA9PSAwKSB7CgkJCQkJJGFB dHRzIC49IGFrb19wYXJzZV9jbGFzcygkbmF2YmFyWyRpXVsiYWNsYXNzIl0sIGZhbHNlLCAk bmF2YmFyWyRpXVsiYWZjaGlsZCJdKTsKCQkJCX0gZWxzZSBpZiAoJGkgPT0gKGNvdW50KCRu YXZiYXIpIC0gMSkpIHsKCQkJCQkkYUF0dHMgLj0gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJb JGldWyJhY2xhc3MiXSwgZmFsc2UsICRuYXZiYXJbJGldWyJhbGNoaWxkIl0pOwoJCQkJfSBl bHNlIHsKCQkJCQkkYUF0dHMgLj0gYWtvX3BhcnNlX2NsYXNzKCRuYXZiYXJbJGldWyJhY2xh c3MiXSwgZmFsc2UpOwoJCQkJfQoJCQkJJGFBdHRzIC49IGFrb19wYXJzZV9pZCgkbmF2YmFy WyRpXVsiYWlkIl0pOwoKCQkJCSRsaUxpbmsgPSB0YWcoJG5hdmJhclskaV1bIm5hbWUiXSwg ImEiLCAkYUF0dHMpOwoJCQkJJHBfb3V0IC49IHRhZygkbGlMaW5rLCAibGkiLCAkbGlBdHRz KS5uOwoJCQl9CgkJfSBlbHNlIHsKCQkJLy8gbm8gbGluaywganVzdCB0ZXh0CgkJCSRwX291 dCAuPSB0YWcoJG5hdmJhclskaV1bIm5hbWUiXSwgImxpIiwgJGxpQXR0cykubjsKCQl9Cgl9 CglyZXR1cm4oJHBfb3V0KTsKfQoKCmZ1bmN0aW9uIGFrb19jbGFzc0FjdGl2ZWl6ZSgkc2Vj LCAkbmlVcmwpIHsgLy8gc2VjdGlvbiwgbmF2YmFyW2ldW3VybF0KCXJldHVybiAoKHN0cnBv cygkc2VjLCBzdWJzdHIoJG5pVXJsLCAxKSkgIT09IGZhbHNlKSB8fCAoISRzZWMgJiYgKCFz dWJzdHIoJG5pVXJsLCAxKSkpKTsKLy8JcmV0dXJuICggKHN0cnBvcygkc2VjLCBzdWJzdHIo JG5pVXJsLCAxKSkgIT09IGZhbHNlKSB8fCAoISRzZWMgJiYgKCFzdWJzdHIoJG5pVXJsLCAx KSkpIHx8IChzdHJwb3MoJHNlYy4iLyIsIHN1YnN0cigkbmlVcmwsIDEpKSAhPT0gZmFsc2Up ICk7Cn0KCmZ1bmN0aW9uIGFrb19wYXJzZV90aXRsZSgkdGl0bGUpIHsKCXJldHVybigoZW1w dHkoJHRpdGxlKSkKCQk/CSIiCgkJOgkiIHRpdGxlPVwiJHRpdGxlXCIiKTsKfQoKZnVuY3Rp b24gYWtvX3BhcnNlX2lkKCRpZCkgewoJcmV0dXJuKChlbXB0eSgkaWQpKQoJCT8JIiIKCQk6 CSIgaWQ9XCIkaWRcIiIpOwp9CgpmdW5jdGlvbiBha29fcGFyc2VfY2xhc3MoJGNsYXNzLCAk YWN0aXZlLCAkY2hpbGQgPSAnJykgeyAvLyBhID0+IGJvb2wsIHRydWU9aXRzIGFjdGl2ZQoJ Z2xvYmFsICRhY3RpY2xhc3M7CglpZiAoJGFjdGl2ZSkgewoJCSRwX291dCA9IChlbXB0eSgk Y2xhc3MpKQoJCQk/CShlbXB0eSgkY2hpbGQpID8gIiBjbGFzcz1cIiRhY3RpY2xhc3NcIiIg OiAiIGNsYXNzPVwiJGFjdGljbGFzcyAkY2hpbGRcIiIpCgkJCToJKGVtcHR5KCRjaGlsZCkg PyAiIGNsYXNzPVwiJGNsYXNzICRhY3RpY2xhc3NcIiIgOiAiIGNsYXNzPVwiJGNsYXNzICRh Y3RpY2xhc3MgJGNoaWxkXCIiKTsKCX0gZWxzZSB7CgkJJHBfb3V0ID0gKGVtcHR5KCRjbGFz cykpCgkJCT8JKGVtcHR5KCRjaGlsZCkgPyAiIiA6ICIgY2xhc3M9XCIkY2hpbGRcIiIpCgkJ CToJKGVtcHR5KCRjaGlsZCkgPyAiIGNsYXNzPVwiJGNsYXNzXCIiIDogIiBjbGFzcz1cIiRj bGFzcyAkY2hpbGRcIiIpOwoJfQoJcmV0dXJuKCRwX291dCk7Cn0KCi8vIGlmIG5vIHBhZ2Vz IC8gdXJscyBhcmUgc3BlY2lmaWVkLgpmdW5jdGlvbiBha29fbmF2X2hlbHAoJGVycm9yKSB7 CgkkZXJyID0gc3Ryb25nKCJXYXJuaW5nOiIpOwoJJGxpbmsgPSB0YWcoImhlbHAgZmlsZSIs ICJhIiwgJyBocmVmPSJodHRwOi8vd3d3LmFrby1rLmNvbS9hcmNoaXZlLzEwOCIgdGl0bGU9 IkhlbHAgZmlsZSBmb3IgYWtvX25hdiInKTsKCXJldHVybihncmFmKCRlcnIuIiBObyBwYWdl ICIuJGVycm9yLiImIzgyMTc7cyBzcGVjaWZpZWQgaW4gYXR0cmlidXRlcyBmb3IgYWtvX25h di4gIFBsZWFzZSBzZWUgdGhlICRsaW5rIGZvciBtb3JlIGluZm9ybWF0aW9uLiIubikpOwp9 Ci8vIENvbmdyYXR1bGF0aW9ucyEKLy8gWW91J3ZlIG1hZGUgaXQgdG8gdGhlIGVuZCBvZiBt eSBjb2RlLi4uIjtzOjQ6InR5cGUiO3M6MToiMCI7czo1OiJvcmRlciI7czoxOiI1IjtzOjQ6 ImhlbHAiO3M6NzEyNzoiPGgyPmFrb19uYXYgSGVscCBGaWxlPC9oMj4KCgk8aDM+QSBkeW5h bWljIHBvcnRhYmxlIG5hdmlnYXRpb24gY3JlYXRvci48L2gzPgoKCTxoND5XaGF0IGRvZXMg aXQgZG8/PC9oND4KCgk8dWw+CgkJPGxpPkNyZWF0ZXMgYSBwcmltYXJ5IDxjb2RlPmRpdjwv Y29kZT4gKG9wdGlvbmFsbHkpLjwvbGk+CgkJPGxpPkluc2lkZSB0aGUgPGNvZGU+ZGl2PC9j b2RlPiwgYSBoZWFkaW5nIGlzIGFkZGVkIGZvciB0aGUgbmF2IGJhciAob3B0aW9uYWxseSku PC9saT4KCQk8bGk+Q3JlYXRlcyBhIDxjb2RlPnVsPC9jb2RlPiB0byBob2xkIHRoZSBuYXYg YmFyLjwvbGk+CgkJPGxpPkdvZXMgdGhyb3VnaCBnaXZlbiB1cmxzIGFuZCBuYW1lcyBvZiBw YWdlcyBhbmQgZHlubWljYWxseSBhZGRzIHRoZW0gYXMgPGNvZGU+bGk8L2NvZGU+JiM4MjE3 O3M8L2xpPgoJCTxsaT48Y29kZT5jbGFzcz0iYWN0aXZlIjwvY29kZT4gaXMgYXV0b21hdGlj YWxseSBhZGRlZCB0byB0aGUgY3VycmVudCBwYWdlJiM4MjE3O3MgPGNvZGU+YTwvY29kZT4g dGFnIChvciBvcHRpb25hbGx5LCA8Y29kZT5saTwvY29kZT4gdGFnKS48L2xpPgoJPC91bD4K Cgk8aDQ+RXhhbXBsZXM8L2g0PgoKCTxwPlRoZSBzaW1wbGVzdCBmb3JtIGlzIHRoaXM6PC9w PgoKCTxibG9ja3F1b3RlPgoJCTxwPjxjb2RlPiZsdDt0eHA6YWtvX25hdiBuYW1lPSJob21l LGFib3V0LGNvbnRhY3QiIHVybD0iLywvYWJvdXQsL2NvbnRhY3QiIC8mZ3Q7PC9jb2RlPjwv cD4KCTwvYmxvY2txdW90ZT4KCgk8cD5pdCB3aWxsIHByb2R1Y2Ugc29tZXRoaW5nIGxpa2Ug dGhpczo8L3A+CgoJPGJsb2NrcXVvdGU+CgkJPHA+Jmx0O3ByZSZndDsmbHQ7ZGl2Jmd0Ozxi ciAvPgombHQ7aDImZ3Q7TmF2aWdhdGlvbiZsdDsvaDImZ3Q7CgkmbHQ7dWwmZ3Q7CgkJJmx0 O2xpJmd0OyZsdDthIGhyZWY9JiM4MjIxOy8mIzgyMjE7Jmd0O2hvbWUmbHQ7L2EmZ3Q7Jmx0 Oy9saSZndDsKCQkmbHQ7bGkmZ3Q7Jmx0O2EgaHJlZj0mIzgyMjE7L2Fib3V0JiM4MjIxOyZn dDthYm91dCZsdDsvYSZndDsmbHQ7L2xpJmd0OwoJCSZsdDtsaSZndDsmbHQ7YSBocmVmPSYj ODIyMTsvY29udGFjdCYjODIyMTsmZ3Q7Y29udGFjdCZsdDsvYSZndDsmbHQ7L2xpJmd0OwoJ Jmx0Oy91bCZndDs8YnIgLz4KJmx0Oy9kaXYmZ3Q7Jmx0Oy9wcmUmZ3Q7PC9wPgoJPC9ibG9j a3F1b3RlPgoKCTxwPkFkZCBzb21lIG9mIHRoZSB0YWdzIGJlbG93IHRvIGdldCBhIGxvdCBt b3JlIGNyZWF0aXZlLjwvcD4KCgk8aDQ+UGxlYXNlIG5vdGU6PC9oND4KCgk8cD5UaGUgdXJs IGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHlvdXIgc2l0 ZS4gIFRoYXQgaXMsIGlmIHlvdSBhcmUgcnVubmluZyB5b3VyIHNpdGUgb3V0IG9mIGEgc3Vi ZGlyZWN0b3J5LCB5b3UgZG8gPHN0cm9uZz5ub3Q8L3N0cm9uZz4gbmVlZCB0byBpbmNsdWRl IHRoZSBzdWJkaXJlY3RvcnkgaW4gdGhlIHVybCBhdHRyaWJ1dGUuICAoSW4gZmFjdCwgZG9u JiM4MjE3O3QgaW5jbHVkZSBpdC4pPGJyIC8+CkZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHJ1 bm5pbmcgeW91ciBzaXRlIGF0IGh0dHA6Ly93d3cuYWtvLWsuY29tL3dvdy8sIGFuZCB5b3Ug d2FudGVkIHRvIHVzZSBha29fbmF2IHRvIG1ha2UgYSBuYXZpZ2F0aW9uIGJhciB0byB0aGUg YWJvdXQgYW5kIGxpbmtzIHBhZ2UsIHRoZSBjb2RlIHdvdWxkIGJlPC9wPgoKCTxibG9ja3F1 b3RlPgoJCTxwPjxjb2RlPiZsdDt0eHA6YWtvX25hdiBuYW1lPSJob21lLGFib3V0LGNvbnRh Y3QiIHVybD0iLywvYWJvdXQsL2xpbmtzIiAvJmd0OzwvY29kZT48YnIgLz4KYW5kIG5vdDxi ciAvPgo8ZGVsPkAmbHQ7dHhwOmFrb19uYXYgbmFtZT0mIzgyMjA7aG9tZSxhYm91dCxjb250 YWN0JiM4MjIxOyB1cmw9JiM4MjIxOy93b3cvLC93b3cvYWJvdXQsL3dvdy9saW5rcyYjODIy MTsgLyZndDtAPC9kZWw+PC9wPgoJPC9ibG9ja3F1b3RlPgoKCTxoND5UYWdzPC9oND4KCgk8 dWw+CgkJPGxpPjxlbT5SZXF1aXJlZDwvZW0+Cgk8dWw+CgkJPGxpPjxzdHJvbmc+bmFtZTwv c3Ryb25nPiAmIzgyMTE7IFRoaXMgaXMgYSBsaXN0IG9mIHBhZ2UgbmFtZXMsIGRlbGltaXRl ZCBieSBjb21tYXMgKGFuZCBubyBzcGFjZXMpLCB1bmxlc3MgdGhlICYjODIyMDtkZWxpbSYj ODIyMTsgYXR0cmlidXRlIGlzIHNldCBhcyBzb21ldGhpbmcgZWxzZS48L2xpPgoJCTxsaT48 c3Ryb25nPnVybDwvc3Ryb25nPiAmIzgyMTE7IFRoaXMgaXMgYSBsaXN0IG9mIHBhZ2UgdXJs JiM4MjE3O3MsIGZvbGxvd2luZyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgcGFnZSBuYW1lcywg YW5kIGFsc28gZGVsaW1pdGVkIGJ5IGNvbW1hcyAoYW5kIG5vIHNwYWNlcyksIHVubGVzcyB0 aGUgJiM4MjIwO2RlbGltJiM4MjIxOyBhdHRyaWJ1dGUgaXMgc2V0IGFzIHNvbWV0aGluZyBl bHNlLjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxlbT5PcHRpb25hbDwvZW0+Cgk8dWw+CgkJ PGxpPjxzdHJvbmc+dGl0bGU8L3N0cm9uZz4gJiM4MjExOyBUaGlzIGlzIGEgbGlzdCBvZiA8 Y29kZT50aXRsZTwvY29kZT4gYXR0cmlidXRlcyBmb3IgdGhlIDxjb2RlPmE8L2NvZGU+IHRh Z3MsIGRlbGltaXRlZCBieSBjb21tYXMgKGFuZCBubyBzcGFjZXMpLCB1bmxlc3MgdGhlICYj ODIyMDtkZWxpbSYjODIyMTsgYXR0cmlidXRlIGlzIHNldCBhcyBzb21ldGhpbmcgZWxzZS48 L2xpPgoJCTxsaT48c3Ryb25nPnVsaWQ8L3N0cm9uZz4gJiM4MjExOyBUaGlzIGlzIGFuIGlk IGZvciB0aGUgPGNvZGU+dWw8L2NvZGU+IHRhZy48L2xpPgoJCTxsaT48c3Ryb25nPnVsY2xh c3M8L3N0cm9uZz4gJiM4MjExOyBUaGlzIGlzIGEgY2xhc3MgZm9yIHRoZSA8Y29kZT51bDwv Y29kZT50YWcuPC9saT4KCQk8bGk+PHN0cm9uZz5saWlkczwvc3Ryb25nPiAmIzgyMTE7IFRo aXMgaXMgYSBsaXN0IG9mIGlkIGF0dHJpYnV0ZXMgZm9yIHRoZSA8Y29kZT5saTwvY29kZT4g dGFnLCBkZWxpbWl0ZWQgYnkgY29tbWFzIChhbmQgbm8gc3BhY2VzKSwgdW5sZXNzIHRoZSAm IzgyMjA7ZGVsaW0mIzgyMjE7IGF0dHJpYnV0ZSBpcyBzZXQgYXMgc29tZXRoaW5nIGVsc2Uu PC9saT4KCQk8bGk+PHN0cm9uZz5saWNsYXNzPC9zdHJvbmc+ICYjODIxMTsgVGhpcyBpcyBh IGNsYXNzIGZvciB0aGUgPGNvZGU+bGk8L2NvZGU+dGFnLjwvbGk+CgkJPGxpPjxzdHJvbmc+ YWZjaGlsZDwvc3Ryb25nPiAmIzgyMTE7IDxzcGFuPntjb2xvcjpyZWR9IE5ldyBpbiAxLjAh PC9zcGFuPiBUaGlzIGlzIGFuIGFkZGl0aW9uYWwgY2xhc3MgYXR0cmlidXRlIGZvciB0aGUg PGNvZGU+bGk8L2NvZGU+IHRhZywgb25seSBhcHBsaWVkIHRvIHRoZSA8ZW0+Zmlyc3Q8L2Vt PiBpdGVtIGluIHRoZSBsaXN0LjwvbGk+CgkJPGxpPjxzdHJvbmc+YWxjaGlsZDwvc3Ryb25n PiAmIzgyMTE7IDxzcGFuPntjb2xvcjpyZWR9IE5ldyBpbiAxLjAhPC9zcGFuPiBUaGlzIGlz IGFuIGFkZGl0aW9uYWwgY2xhc3MgYXR0cmlidXRlIGZvciB0aGUgPGNvZGU+bGk8L2NvZGU+ IHRhZywgb25seSBhcHBsaWVkIHRvIHRoZSA8ZW0+bGFzdDwvZW0+IGl0ZW0gaW4gdGhlIGxp c3QuPC9saT4KCQk8bGk+PHN0cm9uZz5haWRzPC9zdHJvbmc+ICYjODIxMTsgVGhpcyBpcyBh IGxpc3Qgb2YgaWQgYXR0cmlidXRlcyBmb3IgdGhlIDxjb2RlPmE8L2NvZGU+IHRhZ3MsIGRl bGltaXRlZCBieSBjb21tYXMgKGFuZCBubyBzcGFjZXMpLCB1bmxlc3MgdGhlICYjODIyMDtk ZWxpbSYjODIyMTsgYXR0cmlidXRlIGlzIHNldCBhcyBzb21ldGhpbmcgZWxzZS48L2xpPgoJ CTxsaT48c3Ryb25nPmFjbGFzczwvc3Ryb25nPiAmIzgyMTE7IFRoaXMgaXMgYSBjbGFzcyBm b3IgdGhlIDxjb2RlPmE8L2NvZGU+dGFnLjwvbGk+CgkJPGxpPjxzdHJvbmc+YWZjaGlsZDwv c3Ryb25nPiAmIzgyMTE7IDxzcGFuPntjb2xvcjpyZWR9IE5ldyBpbiAxLjAhPC9zcGFuPiBU aGlzIGlzIGFuIGFkZGl0aW9uYWwgY2xhc3MgYXR0cmlidXRlIGZvciB0aGUgPGNvZGU+YTwv Y29kZT4gdGFnLCBvbmx5IGFwcGxpZWQgdG8gdGhlIDxlbT5maXJzdDwvZW0+IGl0ZW0gaW4g dGhlIGxpc3QuPC9saT4KCQk8bGk+PHN0cm9uZz5hbGNoaWxkPC9zdHJvbmc+ICYjODIxMTsg PHNwYW4+e2NvbG9yOnJlZH0gTmV3IGluIDEuMCE8L3NwYW4+IFRoaXMgaXMgYW4gYWRkaXRp b25hbCBjbGFzcyBhdHRyaWJ1dGUgZm9yIHRoZSA8Y29kZT5hPC9jb2RlPiB0YWcsIG9ubHkg YXBwbGllZCB0byB0aGUgPGVtPmxhc3Q8L2VtPiBpdGVtIGluIHRoZSBsaXN0LjwvbGk+CgkJ PGxpPjxzdHJvbmc+c3BhbndyYXA8L3N0cm9uZz4gJiM4MjExOyBUaGlzIGlzIGZvciB3aGV0 aGVyIG9yIG5vdCB0aGUgdGV4dCBpcyB3cmFwcGVkIGluIDxjb2RlPnNwYW48L2NvZGU+IHRh Z3MuICAwID0gbm90IHdyYXBwZWQsIDEgPSB3cmFwcGVkLiBCeSBkZWZhdWx0LCBpdCBpcyBu b3Qgd3JhcHBlZCAoMCkuPC9saT4KCQk8bGk+PHN0cm9uZz5zcGFuY2xhc3M8L3N0cm9uZz4g JiM4MjExOyBUaGlzIGlzIGEgY2xhc3MgZm9yIHRoZSA8Y29kZT5zcGFuPC9jb2RlPnRhZy48 L2xpPgoJCTxsaT48c3Ryb25nPnNwYW5pZHM8L3N0cm9uZz4gJiM4MjExOyA8c3Bhbj57Y29s b3I6cmVkfSBOZXcgaW4gMS4wITwvc3Bhbj4gIFRoaXMgaXMgYSBsaXN0IG9mIGlkIGF0dHJp YnV0ZXMgZm9yIHRoZSA8Y29kZT5zcGFuPC9jb2RlPiB0YWcsIGRlbGltaXRlZCBieSBjb21t YXMgKGFuZCBubyBzcGFjZXMpLCB1bmxlc3MgdGhlICYjODIyMDtkZWxpbSYjODIyMTsgYXR0 cmlidXRlIGlzIHNldCBhcyBzb21ldGhpbmcgZWxzZS48L2xpPgoJCTxsaT48c3Ryb25nPmRp dmlkPC9zdHJvbmc+ICYjODIxMTsgVGhpcyBpcyBhbiBpZCBmb3IgdGhlIDxjb2RlPmRpdjwv Y29kZT4gY29udGFpbmVyLjwvbGk+CgkJPGxpPjxzdHJvbmc+ZGl2Y2xhc3M8L3N0cm9uZz4g JiM4MjExOyBUaGlzIGlzIGEgY2xhc3MgZm9yIHRoZSA8Y29kZT5kaXY8L2NvZGU+IGNvbnRh aW5lci48L2xpPgoJCTxsaT48c3Ryb25nPmRpdm9uPC9zdHJvbmc+ICYjODIxMTsgVGhpcyBp cyBmb3Igd2hldGhlciBvciBub3QgdGhlIDxjb2RlPmRpdjwvY29kZT4gaXMgZGlzcGxheWVk LiAgMCA9IG5vdCBkaXNwbGF5ZWQsIDEgPSBkaXNwbGF5ZWQuIEJ5IGRlZmF1bHQsIGl0IGlz IGRpc3BsYXllZCAoMSkuPC9saT4KCQk8bGk+PHN0cm9uZz5oZWFkaWQ8L3N0cm9uZz4gJiM4 MjExOyBUaGlzIGlzIGFuIGlkIGZvciB0aGUgaGVhZGVyIHRhZy48L2xpPgoJCTxsaT48c3Ry b25nPmhlYWRjbGFzczwvc3Ryb25nPiAmIzgyMTE7IFRoaXMgaXMgYSBjbGFzcyBmb3IgdGhl IGhlYWRlciB0YWcuPC9saT4KCQk8bGk+PHN0cm9uZz5oZWFkb248L3N0cm9uZz4gJiM4MjEx OyBUaGlzIGlzIGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgaGVhZGVyIHRleHQgaXMgZGlzcGxh eWVkLiAgMCA9IG5vdCBkaXNwbGF5ZWQsIDEgPSBkaXNwbGF5ZWQuIEJ5IGRlZmF1bHQsIGl0 IGlzIGRpc3BsYXllZCAoMSkuPC9saT4KCQk8bGk+PHN0cm9uZz5oZWFkdHh0PC9zdHJvbmc+ ICYjODIxMTsgVGhpcyBpcyB0aGUgdGV4dCBpbnNpZGUgdGhlIGhlYWRlciBpdHMgc2VsZi4g IEJ5IGRlZmF1bHQsIHRoaXMgaXMgJiM4MjIwO05hdmlnYXRpb24mIzgyMjE7LjwvbGk+CgkJ PGxpPjxzdHJvbmc+aGVhZGx2bDwvc3Ryb25nPiAmIzgyMTE7IFRoaXMgaXMgdGhlIGxldmVs IHRoYXQgdGhlIDxjb2RlPmg8L2NvZGU+IHRhZyBpcywgYmV0d2VlbiAxIGFuZCA2LiAgQnkg ZGVmYXVsdCwgdGhpcyBpcyAyLjwvbGk+CgkJPGxpPjxzdHJvbmc+Y3VybGluazwvc3Ryb25n PiAmIzgyMTE7IFRoaXMgaXMgYW4gb3B0aW9uIGFzIHRvIHdoZXRoZXIgb3Igbm90IHRoZSBj dXJyZW50IHNlY3Rpb24gaXMgbGlua2VkLiAgMCA9IG5vdCBsaW5rZWQsIDEgPSBsaW5rZWQu ICBCeSBkZWZhdWx0LCBpdCBpcyBsaW5rZWQgKDEpLjwvbGk+CgkJPGxpPjxzdHJvbmc+Y2xh c3N0YWc8L3N0cm9uZz4gJiM4MjExOyBUaGlzIGlzIGFuIG9wdGlvbiB3aGljaCBhbGxvd3Mg eW91IHRvIGFkZCB0aGUgPGNvZGU+Y2xhc3M9ImFjdGl2ZSI8L2NvZGU+IHRvIGVpdGhlciB0 aGUgPGNvZGU+YTwvY29kZT4gb3IgdGhlIDxjb2RlPmxpPC9jb2RlPiB0YWcuICAwID0gaXQg aXMgYWRkZWQgdG8gdGhlIDxjb2RlPmE8L2NvZGU+IHRhZywgMSA9IGl0IGlzIGFkZGVkIHRv IHRoZSA8Y29kZT5saTwvY29kZT4gdGFnLiAgQnkgZGVmYXVsdCwgaXQgaXMgYWRkZWQgdG8g dGhlIDxjb2RlPmE8L2NvZGU+IHRhZyAoMCkuPC9saT4KCQk8bGk+PHN0cm9uZz5hY3RpY2xh c3M8L3N0cm9uZz4gJiM4MjExOyA8c3Bhbj57Y29sb3I6cmVkfSBOZXcgaW4gMS4wITwvc3Bh bj4gVGhpcyBpcyBhbiBvcHRpb24gdG8gY2hhbmdlIHRoZSB0aGUgPGNvZGU+Y2xhc3M9ImFj dGl2ZSI8L2NvZGU+IHRvIHdoYXRldmVyIHlvdSB3b3VsZCBsaWtlLiBCeSBkZWZhdWx0LCB0 aGlzIGlzICYjODIyMDthY3RpdmUmIzgyMjE7LjwvbGk+CgkJPGxpPjxzdHJvbmc+ZGVsaW08 L3N0cm9uZz4gJiM4MjExOyA8c3Bhbj57Y29sb3I6cmVkfSBOZXcgaW4gMS4wITwvc3Bhbj4g VGhpcyBpcyB0aGUgY2hhcmFjdGVyKHMpIHdoaWNoIHdpbGwgYWN0IGFzIGEgZGVsaW1pdGVy IGZvciB0aGUgb3RoZXIgYXR0cmlidXRlcyB3aGljaCB0YWtlIGEgbGlzdCwgc3VjaCBhcyAm IzgyMjA7bmFtZSwmIzgyMjE7ICYjODIyMDt1cmwsJiM4MjIxOyBldGMuICBCeSBkZWZhdWx0 LCB0aGlzIGlzIGEgY29tbWEgKCYjODIyMTssJiM4MjIxOykgYnV0IGNhbiBiZSBjaGFuZ2Vk IHRvIGFueSBvdGhlciBjaGFyYWN0ZXIocykuPC9saT4KCQk8bGk+PHN0cm9uZz5hY2Nlc3Nr ZXlzPC9zdHJvbmc+ICYjODIxMTsgPHNwYW4+e2NvbG9yOnJlZH0gTmV3IGluIDEuMCE8L3Nw YW4+IFRoaXMgaXMgYSBsaXN0IG9mIGFjY2Vzc2tleSBhdHRyaWJ1dGVzIGZvciB0aGUgPGNv ZGU+YTwvY29kZT4gdGFncywgZGVsaW1pdGVkIGJ5IGNvbW1hcyAoYW5kIG5vIHNwYWNlcyks IHVubGVzcyB0aGUgJiM4MjIwO2RlbGltJiM4MjIxOyBhdHRyaWJ1dGUgaXMgc2V0IGFzIHNv bWV0aGluZyBlbHNlLjwvbGk+Cgk8L3VsPjwvbGk+Cgk8L3VsPgoKCTxwPiZsdDtociAvJmd0 OzxiciAvPgpUaGFua3MgZm9yIHVzaW5nIDxzdHJvbmc+YWtvX25hdjwvc3Ryb25nPiwgYW5k IGhhdmUgZnVuITwvcD4iO3M6MzoibWQ1IjtzOjMyOiI5Yzg3NGUzYjI2NjcxOGQ2YTBiNjg2 MWExOGQzMTgwNyI7fQ==