# pnh_mf v1.0 # Tags for embedding Microformats in page templates and content. # Chris Casciano # http://placenamehere.com/ # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6NjoicG5oX21mIjtzOjc6InZlcnNpb24iO3M6MzoiMS4wIjtz OjY6ImF1dGhvciI7czoxNDoiQ2hyaXMgQ2FzY2lhbm8iO3M6MTA6ImF1dGhvcl91cmkiO3M6 MjU6Imh0dHA6Ly9wbGFjZW5hbWVoZXJlLmNvbS8iO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjYy OiJUYWdzIGZvciBlbWJlZGRpbmcgTWljcm9mb3JtYXRzIGluIHBhZ2UgdGVtcGxhdGVzIGFu ZCBjb250ZW50LiI7czo0OiJ0eXBlIjtpOjE7czo0OiJoZWxwIjtzOjM0NjQ6IgoJPGgxPltw bmhfbWZdIE1pY3JvZm9ybWF0IFBsdWdpbiBIZWxwPC9oMT4KCTxwPlRoaXMgcGx1Z2luIHBy b3ZpZGVzIHRhZ3MgZm9yIGVtYmVkZGluZyBNaWNyb2Zvcm1hdHMgaW4gcGFnZSB0ZW1wbGF0 ZXMsIGZvcm1zIGFuZCBjb250ZW50LiBUYWdzIGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb246 PC9wPgoJPHVsPgoJCTxsaT50eHA6cG5oX21mX3hmbjwvbGk+CgkJPGxpPnR4cDpwbmhfbWZf aGNhcmQ8L2xpPgoJCTxsaT50eHA6cG5oX21mX2FkcjwvbGk+CgkJPGxpPnR4cDpwbmhfbWZf aGNhbGVuZGFyPC9saT4KCQk8bGk+dHhwOnBuaF9tZl9ocmV2aWV3PC9saT4KCQk8bGk+dHhw OnBuaF9tZl90YWc8L2xpPgoJCTxsaT50eHA6cG5oX21mX2xpY2Vuc2U8L2xpPgoJCTxsaT50 eHA6cG5oX21mX2dlbzwvbGk+Cgk8L3VsPgoJPHA+QWxsIG9mIHRoZXNlIHRhZ3MgY2FuIGJl IHVzZWQgaW4gZWl0aGVyIHRlbXBsYXRlcyAoJiM4MjE2O3BhZ2VzJiM4MjE3OyksIHNuaXBw ZXRzICgmIzgyMTY7Zm9ybXMmIzgyMTc7KSBvciBpbiBhcnRpY2xlIGJvZGllcywgYnV0IGNh bm5vdCBiZSB1c2VkIGluIGNvbW1lbnRzLjwvcD4KCTxoMj50eHA6cG5oX21mX3hmbjwvaDI+ Cgk8cD5Vc2FnZTogPGNvZGU+Jmx0O3R4cDpwbmhfbWZfeGZuJmd0OyZsdDsvdHhwOnBuaF9t Zl94Zm4mZ3Q7PC9jb2RlPjwvcD4KCTxoMz5BdHRyaWJ1dGVzICYjMzg7IENvbnRlbnQ8L2gz PgoJPHVsPgoJCTxsaT5yZWw8L2xpPgoJCTxsaT5ocmVmPC9saT4KCQk8bGk+aWQ8L2xpPgoJ CTxsaT5jbGFzczwvbGk+CgkJPGxpPnRpdGxlPC9saT4KCQk8bGk+bmFtZSAoY29udGVudCk8 L2xpPgoJPC91bD4KCTxoMj50eHA6cG5oX21mX2hjYXJkPC9oMj4KCTxwPlVzYWdlOiA8Y29k ZT4mbHQ7dHhwOnBuaF9tZl9oY2FyZCAvJmd0OzwvY29kZT48YnIgLz4KVXNhZ2U6IDxjb2Rl PiZsdDt0eHA6cG5oX21mX2hjYXJkJmd0OyZsdDt0eHA6cG5oX21mX2FkciAvJmd0OyZsdDsv dHhwOnBuaF9tZl9oY2FyZCZndDs8L2NvZGU+PC9wPgoJPGgzPkF0dHJpYnV0ZXMgJiMzODsg Q29udGVudDwvaDM+Cgk8dWw+CgkJPGxpPm5hbWU8L2xpPgoJCTxsaT5ocmVmPC9saT4KCQk8 bGk+b3JnPC9saT4KCQk8bGk+b3JnaHJlZjwvbGk+CgkJPGxpPnBob3RvPC9saT4KCQk8bGk+ ZW1haWw8L2xpPgoJCTxsaT53b3JrdGVsPC9saT4KCQk8bGk+aG9tZXRlbDwvbGk+CgkJPGxp PmNlbGx0ZWw8L2xpPgoJCTxsaT53b3JrZmF4PC9saT4KCQk8bGk+YWRkcmVzcyhlcykgKGNv bnRlbnQsIHVzaW5nIHBuaF9tZl9hZHIpPC9saT4KCTwvdWw+Cgk8aDI+dHhwOnBuaF9tZl9h ZHI8L2gyPgoJPHA+VXNhZ2U6IDxjb2RlPiZsdDt0eHA6cG5oX21mX2FkciAvJmd0OzwvY29k ZT48L3A+Cgk8aDM+QXR0cmlidXRlczwvaDM+Cgk8dWw+CgkJPGxpPnR5cGU8L2xpPgoJCTxs aT5wb3N0b2ZmaWNlYm94PC9saT4KCQk8bGk+c3RyZWV0YWRkcmVzczwvbGk+CgkJPGxpPmV4 dGVuZGVkYWRkcmVzczwvbGk+CgkJPGxpPmxvY2FsaXR5PC9saT4KCQk8bGk+cmVnaW9uPC9s aT4KCQk8bGk+cG9zdGFsY29kZTwvbGk+CgkJPGxpPmNvdW50cnk8L2xpPgoJPC91bD4KCTxo Mj50eHA6cG5oX21mX2hjYWxlbmRhcjwvaDI+Cgk8cD5Vc2FnZTogPGNvZGU+Jmx0O3R4cDpw bmhfbWZfaGNhbGVuZGFyJmd0OyZsdDsvdHhwOnBuaF9tZl9oY2FsZW5kYXImZ3Q7PC9jb2Rl PjwvcD4KCTxoMz5BdHRyaWJ1dGVzICYjMzg7IENvbnRlbnQ8L2gzPgoJPHVsPgoJCTxsaT5z dW1tYXJ5PC9saT4KCQk8bGk+bG9jYXRpb248L2xpPgoJCTxsaT5ocmVmPC9saT4KCQk8bGk+ ZHRzdGFydCAobWFjaGluZSBmb3JtYXR0ZWQgc3RhcnQpPC9saT4KCQk8bGk+c3RhcnQgKGh1 bWFuIHJlYWRhYmxlIHN0YXJ0KTwvbGk+CgkJPGxpPmR0ZW5kIChtYWNoaW5lIGZvcm1hdHRl ZCBlbmQpPC9saT4KCQk8bGk+ZW5kIChodW1hbiByZWFkYWJsZSBlbmQpPC9saT4KCQk8bGk+ ZGVzY3JpcHRpb24gKGNvbnRlbnQpPC9saT4KCTwvdWw+Cgk8cD5OT1RFOiBSZWFkIGZvciBo dHRwOi8vbWljcm9mb3JtYXRzLm9yZy93aWtpL2hjYWxlbmRhciBwcm9wZXIgZGF0ZSB1c2Fn ZS4gVmFsdWUgdXNlZCBpbiB0YWcgaXMgaW4gZXhwZWN0ZWQgbWFjaGluZSByZWFkYWJsZSBm b3JtYXQuPC9wPgoJPGgyPnR4cDpwbmhfbWZfaHJldmlldzwvaDI+Cgk8cD5Vc2FnZTogPGNv ZGU+Jmx0O3R4cDpwbmhfbWZfaHJldmlldyZndDsmbHQ7L3R4cDpwbmhfbWZfaHJldmlldyZn dDs8L2NvZGU+PC9wPgoJPGgzPkF0dHJpYnV0ZXMgJiMzODsgQ29udGVudDwvaDM+Cgk8dWw+ CgkJPGxpPnN1bW1hcnk8L2xpPgoJCTxsaT50eXBlIChzZWxlY3Rpb24pPC9saT4KCQk8bGk+ cmF0aW5nICgxLTUpPC9saT4KCQk8bGk+aXRlbSArIGRlc2NyaXB0aW9uIChjb250ZW50KTwv bGk+Cgk8L3VsPgoJPHA+Tk9URTogVGhlIG1ldGhvZCBvZiBkZWZpbmluZyB0aGUgaXRlbSB0 byBiZSByZXZpZXdlZCBpcyBkZXBlbmRlbnQgb24gdGhlIGl0ZW0gdHlwZSBzZWxlY3RlZCAo ZXZlbnQsIGJ1c2luZXNzLCBwcm9kdWN0LCBldGMuKS4gVGhlIHRhZyBoZWxwZXIgb3V0cHV0 IHNwZWNpZmllcyB3aGF0IG90aGVyIGluZm9ybWF0aW9uIGlzIG5lZWRlZC4gUmVhZCBodHRw Oi8vbWljcm9mb3JtYXRzLm9yZy93aWtpL2hyZXZpZXcgZm9yIHByb3BlciB1c2FnZS48L3A+ Cgk8aDI+dHhwOnBuaF9tZl90YWc8L2gyPgoJPHA+VXNhZ2U6IDxjb2RlPiZsdDt0eHA6cG5o X21mX3RhZyZndDsmbHQ7L3R4cDpwbmhfbWZfdGFnJmd0OzwvY29kZT48L3A+Cgk8aDM+QXR0 cmlidXRlcyAmIzM4OyBDb250ZW50PC9oMz4KCTx1bD4KCQk8bGk+aHJlZiAoaWYgbm90IHBy b3ZpZGVkIHVzZXMgdGVjaG5vcmF0aSk8L2xpPgoJCTxsaT5pZDwvbGk+CgkJPGxpPmNsYXNz PC9saT4KCQk8bGk+dGl0bGU8L2xpPgoJCTxsaT50YWcgKGNvbnRlbnQpPC9saT4KCTwvdWw+ Cgk8aDI+dHhwOnBuaF9tZl9saWNlbnNlPC9oMj4KCTxwPlVzYWdlOiA8Y29kZT4mbHQ7dHhw OnBuaF9tZl9saWNlbnNlJmd0OyZsdDsvdHhwOnBuaF9tZl9saWNlbnNlJmd0OzwvY29kZT48 L3A+Cgk8aDM+QXR0cmlidXRlcyAmIzM4OyBDb250ZW50PC9oMz4KCTx1bD4KCQk8bGk+aHJl ZjwvbGk+CgkJPGxpPmlkPC9saT4KCQk8bGk+Y2xhc3M8L2xpPgoJCTxsaT50aXRsZTwvbGk+ CgkJPGxpPmxpbmsgdGV4dCAoY29udGVudCk8L2xpPgoJPC91bD4KCTxoMj50eHA6cG5oX21m X2dlbzwvaDI+Cgk8cD5Vc2FnZTogPGNvZGU+Jmx0O3R4cDpwbmhfbWZfZ2VvIC8mZ3Q7PC9j b2RlPjwvcD4KCTxoMz5BdHRyaWJ1dGVzPC9oMz4KCTx1bD4KCQk8bGk+bGF0PC9saT4KCQk8 bGk+bG9uZzwvbGk+Cgk8L3VsPgoJPHA+Rm9yIG1vcmUgZGV0YWlsZWQgZXhhbXBsZXMgYW5k IHVwZGF0ZXMgcGxlYXNlIHNlZSB0aGUgPGEgaHJlZj0iaHR0cDovL3BsYWNlbmFtZWhlcmUu Y29tL1RYUC9wbmhfbWYvIj5wbHVnaW4mIzgyMTc7cyBob21lIHBhZ2U8L2E+LjwvcD4KCgog IjtzOjQ6ImNvZGUiO3M6MjA5NTQ6IgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFB1YmxpYyBzaWRlIHRhZ3MKCgkvLyBBIHRh ZyBmb3IgdGhlIFhGTiBtaWNyb2Zvcm1hdAoJLy8gPHR4cDpwbmhfbWZfeGZuIHJlbD0iY29u dGFjdCIgaHJlZj0iaHR0cDovL3BsYWNlbmFtZWhlcmUuY29tLyI+Q2hyaXM8L3R4cDpwbmhf bWZfeGZuPgoJLy8gYWxzbyBhY2NlcHRzIHN0YW5kYXJkIDxhPiBhdHRyaWJ1dGVzOiBpZCwg Y2xhc3MsIHRpdGxlCgoJZnVuY3Rpb24gcG5oX21mX3hmbigkYXR0cywkdGV4dD0nJykgewoJ CWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJCSdyZWwnICA9PiAnJywKCQkJJ2hyZWYnICA9PiAn JywKCQkpLCRhdHRzKSk7CgoJCS8vIFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIHJlcGxhY2Ug dGhlIHRhZyBvbiB0aGUgcGFnZQoJCSRtYXJrdXAgPSAnPGEgaHJlZj0iJy4kaHJlZi4nIic7 CgkJJG1hcmt1cCAuPSAnIHJlbD0iJy4kcmVsLiciJzsKCgkJaWYgKGlzc2V0KCRjbGFzcykp IHsgJG1hcmt1cCAuPSAnIGNsYXNzPSInLiRjbGFzcy4nIic7IH0KCQlpZiAoaXNzZXQoJGlk KSkgeyAkbWFya3VwIC49ICcgaWQ9IicuJGlkLiciJzsgfQoKCQlpZiAoaXNzZXQoJHRpdGxl KSkgeyAkbWFya3VwIC49ICcgdGl0bGU9IicuJHRpdGxlLiciJzsgfQoJCSRtYXJrdXAgLj0g Jz4nLiR0ZXh0Lic8L2E+JzsKCQlyZXR1cm4gJG1hcmt1cDsKCX0KCgkvLyBBIHRhZyBmb3Ig dGhlIHJlbFRhZyBtaWNyb2Zvcm1hdAoJLy8gZGVmYXVsdCBiZWhhdmlvciBpcyB0byBsaW5r IHRvIHRlY2hub3JhdGkKCS8vIDx0eHA6cG5oX21mX3RhZz50ZWNoPC90eHA6cG5oX21mX3Rh Zz4KCS8vIDx0eHA6cG5oX21mX3RhZyBocmVmPSJodHRwOi8vZGVsLmljaW8udXMvdGFnL3Rl Y2giPnRlY2g8L3R4cDpwbmhfbWZfdGFnPgoJLy8gYWxzbyBhY2NlcHRzIHN0YW5kYXJkIDxh PiBhdHRyaWJ1dGVzOiBpZCwgY2xhc3MsIHRpdGxlCgoKCWZ1bmN0aW9uIHBuaF9tZl90YWco JGF0dHMsJHRleHQ9JycpIHsKCQlleHRyYWN0KCRhdHRzKTsKCgkJLy8gaWYgdGhlcmUgd2Fz IG5vIGV4cGxpY2l0IHVybCBnaXZlbiwgdXNlIHRlY2hub3JhdGkKCQlpZiAoIWlzc2V0KCRo cmVmKSkgewoJCQkkaHJlZiA9ICdodHRwOi8vdGVjaG5vcmF0aS5jb20vdGFnLycuJHRleHQ7 CgkJfQoKCQkvLyBUaGUgcmV0dXJuZWQgdmFsdWUgd2lsbCByZXBsYWNlIHRoZSB0YWcgb24g dGhlIHBhZ2UKCQkkbWFya3VwID0gJzxhIGhyZWY9IicuJGhyZWYuJyInOwoJCSRtYXJrdXAg Lj0gJyByZWw9InRhZyInOwoJCWlmIChpc3NldCgkaWQpKSB7ICRtYXJrdXAgLj0gJyBpZD0i Jy4kaWQuJyInOyB9CgkJaWYgKGlzc2V0KCRjbGFzcykpIHsgJG1hcmt1cCAuPSAnIGNsYXNz PSInLiRjbGFzcy4nIic7IH0KCQlpZiAoaXNzZXQoJHRpdGxlKSkgeyAkbWFya3VwIC49ICcg dGl0bGU9IicuJHRpdGxlLiciJzsgfQoJCSRtYXJrdXAgLj0gJz4nLiR0ZXh0Lic8L2E+JzsK CQlyZXR1cm4gJG1hcmt1cDsKCX0KCgkvLyBBIHRhZyBmb3IgdGhlIGdlbyBtaWNyb2Zvcm1h dAoJLy8gPHR4cDpwbmhfbWZfZ2VvIGxhdD0iIiBsb25nPSIiIC8+CgoKCWZ1bmN0aW9uIHBu aF9tZl9nZW8oJGF0dHMpIHsKCQlleHRyYWN0KGxBdHRzKGFycmF5KAoJCQknbGF0JyAgPT4g JzAnLAoJCQknbG9uZycgID0+ICcwJywKCQkpLCRhdHRzKSk7CgoJCSRtYXJrdXAgPSAnPHNw YW4gY2xhc3M9ImdlbyI+JzsKCQkkbWFya3VwIC49ICc8c3BhbiBjbGFzcz0ibGF0aXR1ZGUi PicuJGxhdC4nPC9zcGFuPiAnOwoJCSRtYXJrdXAgLj0gJzxzcGFuIGNsYXNzPSJsb25naXR1 ZGUiPicuJGxvbmcuJzwvc3Bhbj4nOwoJCSRtYXJrdXAgLj0gJzwvc3Bhbj4nOwoKCQlyZXR1 cm4gJG1hcmt1cDsKCX0KCgkvLyBBIHRhZyBmb3IgdGhlIGhDYWxlbmRhciBtaWNyb2Zvcm1h dAoJLy8gbWFya3VwIHRlbXBsYXRlIG9yaWdpbmFsbHkgdGFrZW4gZnJvbTogaHR0cDovL21p Y3JvZm9ybWF0cy5vcmcvY29kZS9oY2FsZW5kYXIvY3JlYXRvcgoJLy8gPHR4cDpwbmhfbWZf aGNhbGVuZGFyIHN1bW1hcnk9IiIgbG9jYXRpb249IiIgaHJlZj0iIiBzdGFydD0iIiBlbmQ9 IiI+RGVzY3JpcHRpb248L3R4cDpwbmhfbWZfaGNhbGVuZGFyPgoKCWZ1bmN0aW9uIHBuaF9t Zl9oY2FsZW5kYXIoJGF0dHMsJHRleHQ9JycpIHsKCQlleHRyYWN0KCRhdHRzKTsKCgkJLy8g Zm9ybWF0IGh1bWFuIHJlYWRhYmxlIGRhdGVzCgkJLy8kc3RhcnRfdGltZSA9IHN0cnRvdGlt ZSgkZHRzdGFydCk7CgkJLy8kZW5kX2VuZCA9IHN0cnRvdGltZSgkZHRzdGFydCk7CgoJCS8v IFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIHRhZyBvbiB0aGUgcGFnZQoK CQkkbWFya3VwID0gJzxkaXYgY2xhc3M9InZldmVudCI+JzsKCQlpZiAoaXNzZXQoJGhyZWYp KSB7ICRtYXJrdXAgLj0gJzxhIGNsYXNzPSJ1cmwiIGhyZWY9IicuJGhyZWYuJyI+JzsgfQoK CQlpZiAoaXNzZXQoJGR0c3RhcnQpKSB7CgkJCSRtYXJrdXAgLj0gJzxhYmJyIGNsYXNzPSJk dHN0YXJ0IiB0aXRsZT0iJy4kZHRzdGFydC4nIj4nOwoJCQlpZiAoaXNzZXQoJHN0YXJ0KSkg ewoJCQkJJG1hcmt1cCAuPSAkc3RhcnQ7CgkJCX0gZWxzZSB7CgkJCQlsaXN0KCRkLCR0KSA9 IGV4cGxvZGUoIlQiLCRkdHN0YXJ0KTsKCQkJCSRtYXJrdXAgLj0gZGF0ZSgnTS4gaiwgWScs c3RydG90aW1lKCRkKSkuJyAnLiR0OwoJCQl9CgkJCSRtYXJrdXAgLj0gJzwvYWJicj4nOwoJ CX0KCQlpZiAoaXNzZXQoJGR0ZW5kKSkgewoJCQkkbWFya3VwIC49ICcgLSA8YWJiciBjbGFz cz0iZHRlbmQiIHRpdGxlPSInLiRkdGVuZC4nIj4nOwoJCQlpZiAoaXNzZXQoJGVuZCkpIHsK CQkJCSRtYXJrdXAgLj0gJGVuZDsKCQkJfSBlbHNlIHsKCQkJCWxpc3QoJGQsJHQpID0gZXhw bG9kZSgiVCIsJGR0ZW5kKTsKCQkJCWlmIChpc3NldCgkdCkpIHsKCQkJCQkkbWFya3VwIC49 IGRhdGUoJ00uIGosIFknLHN0cnRvdGltZSgkZCkpLicgJy4kdDsKCQkJCX0gZWxzZSB7CgkJ CQkJJG1hcmt1cCAuPSBkYXRlKCdNLiBqLCBZJywoc3RydG90aW1lKCRkKS04NjQwMCkpOwoJ CQkJfQoJCQl9CgkJCSRtYXJrdXAgLj0gJzwvYWJicj4nOyB9CgkJaWYgKGlzc2V0KCRzdW1t YXJ5KSkgeyAkbWFya3VwIC49ICcgLSA8c3BhbiBjbGFzcz0ic3VtbWFyeSI+Jy4kc3VtbWFy eS4nPC9zcGFuPic7IH0KCQlpZiAoaXNzZXQoJGxvY2F0aW9uKSkgeyAkbWFya3VwIC49ICcg LSA8c3BhbiBjbGFzcz0ibG9jYXRpb24iPicuJGxvY2F0aW9uLic8L3NwYW4+JzsgfQoJCWlm IChpc3NldCgkaHJlZikpIHsgJG1hcmt1cCAuPSAnPC9hPic7IH0KCgkJJG1hcmt1cCAuPSAn PGRpdiBjbGFzcz0iZGVzY3JpcHRpb24iPicuJHRleHQuJzwvZGl2Pic7CgoJCSRtYXJrdXAg Lj0gJzwvZGl2Pic7CgkJcmV0dXJuICRtYXJrdXA7Cgl9CgoJLy8gQSB0YWcgZm9yIHRoZSBo UmV2aWV3IG1pY3JvZm9ybWF0CgkvLyA8dHhwOnBuaF9tZl9ocmV2aWV3IHN1bW1hcnk9IiIg dHlwZT0iIiByYXRpbmc9IiI+SXRlbTwvdHhwOnBuaF9tZl9ocmV2aWV3PkRlc2NyaXB0aW9u PHR4cDpwbmhfbWZfaHJldmlld19lbmQgLz4KCglmdW5jdGlvbiBwbmhfbWZfaHJldmlldygk YXR0cywkdGV4dD0nJykgewoJCWV4dHJhY3QoJGF0dHMpOwoKCQkvLyBUaGUgcmV0dXJuZWQg dmFsdWUgd2lsbCByZXBsYWNlIHRoZSB0YWcgb24gdGhlIHBhZ2UKCgkJJG1hcmt1cCA9ICc8 ZGl2IGNsYXNzPSJocmV2aWV3Ij4nOwoJCS8vIHN1bW1hcnkKCQkkbWFya3VwIC49ICc8cCBj bGFzcz0ic3VtbWFyeSI+Jy4kc3VtbWFyeS4nPC9wPic7CgoJCS8vIHJhdGluZwoJCWlmIChp c3NldCgkcmF0aW5nKSkgewoJCQkkbWFya3VwIC49ICc8ZGl2PlJhdGluZzogPGFiYnIgY2xh c3M9InJhdGluZyIgdGl0bGU9IicuJHJhdGluZy4nIj4nOwoJCQlmb3IgKCR4PTE7JHg8PSRy YXRpbmc7JHgrKyl7CgkJCQkkbWFya3VwIC49ICcqJzsKCQkJfQoJCQkkbWFya3VwIC49ICc8 L2FiYnI+PC9kaXY+JzsKCgkJfQoKCQkvLyB0eXBlCgkJJG1hcmt1cCAuPSAnPCEtLTxzcGFu IGNsYXNzPSJ0eXBlIj4nLiR0eXBlLic8L3NwYW4+LS0+JzsKCQkkbWFya3VwIC49ICc8ZGl2 IGNsYXNzPSJkZXNjcmlwdGlvbiBpdGVtIj4nLiR0ZXh0Lic8L2Rpdj4nOwoKCQkkbWFya3Vw IC49ICc8L2Rpdj4nOwoJCXJldHVybiAkbWFya3VwOwoJfQoKCgkvLyBBIHRhZyBmb3IgdGhl IHJlbExpY2Vuc2UgbWljcm9mb3JtYXQKCS8vIDx0eHA6cG5oX21mX2xpY2Vuc2UgaHJlZj0i aHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi4wLyI+Y2MgYnkgMi4w PC90eHA6cG5oX21mX2xpY2Vuc2U+CgkvLyBhbHNvIGFjY2VwdHMgc3RhbmRhcmQgPGE+IGF0 dHJpYnV0ZXM6IGlkLCBjbGFzcywgdGl0bGUKCglmdW5jdGlvbiBwbmhfbWZfbGljZW5zZSgk YXR0cywkdGV4dD0nJykgewoJCWV4dHJhY3QobEF0dHMoYXJyYXkoCgkJCSdocmVmJyAgPT4g JycsCgkJKSwkYXR0cykpOwoKCQkvLyBUaGUgcmV0dXJuZWQgdmFsdWUgd2lsbCByZXBsYWNl IHRoZSB0YWcgb24gdGhlIHBhZ2UKCQkkbWFya3VwID0gJzxhIGhyZWY9IicuJGhyZWYuJyIn OwoJCSRtYXJrdXAgLj0gJyByZWw9ImxpY2Vuc2UiJzsKCQlpZiAoaXNzZXQoJGlkKSkgeyAk bWFya3VwIC49ICcgaWQ9IicuJGlkLiciJzsgfQoJCWlmIChpc3NldCgkY2xhc3MpKSB7ICRt YXJrdXAgLj0gJyBjbGFzcz0iJy4kY2xhc3MuJyInOyB9CgkJaWYgKGlzc2V0KCR0aXRsZSkp IHsgJG1hcmt1cCAuPSAnIHRpdGxlPSInLiR0aXRsZS4nIic7IH0KCQkkbWFya3VwIC49ICc+ Jy4kdGV4dC4nPC9hPic7CgkJcmV0dXJuICRtYXJrdXA7Cgl9CgoJLy8gQSB0YWcgZm9yIHRo ZSBoY2FyZCBtaWNyb2Zvcm1hdAoJLy8gbWFya3VwIHRlbXBsYXRlIG9yaWdpbmFsbHkgdGFr ZW4gZnJvbTogaHR0cDovL3RhbnRlay5jb20vbWljcm9mb3JtYXRzL2hjYXJkLWNyZWF0b3Iu aHRtbAoJLy8gPHR4cDpwbmhfbWZfaGNhcmQgbmFtZT0iIiBzdHJlZXRhZGRyZXNzPSIiIGV4 dGVuZGVkYWRkcmVzcz0iIiBsb2NhbGl0eT0iIiByZWdpb249IiIgcG9zdGFsY29kZT0iIiBj b3VudHJ5bmFtZT0iIiAvPk5hbWU8L3R4cDpwbmhfbWZfaGNhcmQ+CgoJZnVuY3Rpb24gcG5o X21mX2hjYXJkKCRhdHRzLCR0ZXh0PScnKSB7CgkJZXh0cmFjdCgkYXR0cyk7CgoKCQkvLyBU aGUgcmV0dXJuZWQgdmFsdWUgd2lsbCByZXBsYWNlIHRoZSB0YWcgb24gdGhlIHBhZ2UKCQkk bWFya3VwID0gJzxkaXYgY2xhc3M9InZjYXJkIj4nOwoKCQlpZiAoaXNzZXQoJHBob3RvKSkg eyAkbWFya3VwIC49ICc8aW1nIHNyYz0iJy4kcGhvdG8uJyIgYWx0PSJwaG90byIgY2xhc3M9 InBob3RvIiAvPic7IH0KCQlpZiAoaXNzZXQoJGhyZWYpKSB7CgkJCSRtYXJrdXAgLj0gJzxh IGNsYXNzPSJ1cmwgZm4iIGhyZWY9IicuJGhyZWYuJyI+Jy4kbmFtZS4nPC9hPic7CgkJfSBl bHNlIHsKCQkJJG1hcmt1cCAuPSAnPHNwYW4gY2xhc3M9ImZuIj4nLiRuYW1lLic8L3NwYW4+ JzsKCQl9CgoJCWlmIChpc3NldCgkb3JnKSkgewoJCQlpZiAoaXNzZXQoJG9yZ2hyZWYpKSB7 CgkJCQkkbWFya3VwIC49ICc8ZGl2PjxhIGhyZWY9IicuJG9yZ2hyZWYuJyIgY2xhc3M9Im9y ZyI+Jy4kb3JnLic8L2E+PC9kaXY+JzsKCQkJfSBlbHNlIHsKCQkJCSRtYXJrdXAgLj0gJzxk aXYgY2xhc3M9Im9yZyI+Jy4kb3JnLic8L2Rpdj4nOwoJCQl9CgkJfQoKCgoJCS8vIHdvcmt0 ZWwKCQlpZiAoaXNzZXQoJHdvcmt0ZWwpKSB7ICRtYXJrdXAgLj0gJzxkaXYgY2xhc3M9InRl bCI+PHNwYW4gY2xhc3M9InR5cGUiPldvcms8L3NwYW4+OiA8c3BhbiBjbGFzcz0idmFsdWUi PicuJHdvcmt0ZWwuJzwvc3Bhbj48L2Rpdj4nOyB9CgkJLy8gaG9tZXRlbAoJCWlmIChpc3Nl dCgkaG9tZXRlbCkpIHsgJG1hcmt1cCAuPSAnPGRpdiBjbGFzcz0idGVsIj48c3BhbiBjbGFz cz0idHlwZSI+SG9tZTwvc3Bhbj46IDxzcGFuIGNsYXNzPSJ2YWx1ZSI+Jy4kaG9tZXRlbC4n PC9zcGFuPjwvZGl2Pic7IH0KCQkvLyBjZWxsdGVsCgkJaWYgKGlzc2V0KCRjZWxsdGVsKSkg eyAkbWFya3VwIC49ICc8ZGl2IGNsYXNzPSJ0ZWwiPjxzcGFuIGNsYXNzPSJ0eXBlIj5DZWxs PC9zcGFuPjogPHNwYW4gY2xhc3M9InZhbHVlIj4nLiRjZWxsdGVsLic8L3NwYW4+PC9kaXY+ JzsgfQoJCS8vIHdvcmtmYXgKCQlpZiAoaXNzZXQoJHdvcmtmYXgpKSB7ICRtYXJrdXAgLj0g JzxkaXYgY2xhc3M9InRlbCI+PHNwYW4gY2xhc3M9InR5cGUiPkZheDwvc3Bhbj46IDxzcGFu IGNsYXNzPSJ2YWx1ZSI+Jy4kd29ya2ZheC4nPC9zcGFuPjwvZGl2Pic7IH0KCQkvLyBpbSAt IG5lZWQgdXJsLCBzZXJ2aWNlICYgc2NyZWVuIG5hbWU/CgkJLy8gZW1haWwKCQlpZiAoaXNz ZXQoJGVtYWlsKSkgeyAkbWFya3VwIC49ICc8ZGl2PjxhIGNsYXNzPSJlbWFpbCIgaHJlZj0i bWFpbHRvOicuJGVtYWlsLiciPicuJGVtYWlsLic8L2E+PC9kaXY+JzsgfQoKCQkkbWFya3Vw IC49ICR0ZXh0OyAvLyBhbnkgYWRkcmVzc2VzCgoJCSRtYXJrdXAgLj0gJzwvZGl2Pic7CgkJ cmV0dXJuICRtYXJrdXA7Cgl9CgoKCS8vIEEgdGFnIGZvciB0aGUgYWRyIG1pY3JvZm9ybWF0 CgkvLyBjYXV0aW9uOiB0aGlzIG1pY3JvZm9ybWF0IGlzIHN0aWxsIGluIGRyYWZ0IG1vZGUK CS8vIDx0eHA6cG5oX21mX2FkciBzdHJlZXRhZGRyZXNzPSIiIGV4dGVuZGVkYWRkcmVzcz0i IiBsb2NhbGl0eT0iIiByZWdpb249IiIgcG9zdGFsY29kZT0iIiBjb3VudHJ5PSIiIC8+CgoJ ZnVuY3Rpb24gcG5oX21mX2FkcigkYXR0cykgewoJCWV4dHJhY3QoJGF0dHMpOwoKCgoJCS8v IFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIHJlcGxhY2UgdGhlIHRhZyBvbiB0aGUgcGFnZQoJ CSRtYXJrdXAgPSAnPGRpdiBjbGFzcz0iYWRyIj4nOwoKCQlpZiAoaXNzZXQoJHR5cGUpKSB7 ICRtYXJrdXAgLj0gJzxkaXY+PHNwYW4gY2xhc3M9InR5cGUiPicuJHR5cGUuJzwvc3Bhbj4g QWRkcmVzczwvZGl2Pic7IH0KCQlpZiAoaXNzZXQoJHBvc3RvZmZpY2Vib3gpKSB7ICRtYXJr dXAgLj0gJzxkaXYgY2xhc3M9InBvc3Qtb2ZmaWNlLWJveCI+Jy4kcG9zdG9mZmljZWJveC4n PC9kaXY+JzsgfQoJCWlmIChpc3NldCgkc3RyZWV0YWRkcmVzcykpIHsgJG1hcmt1cCAuPSAn PGRpdiBjbGFzcz0ic3RyZWV0LWFkZHJlc3MiPicuJHN0cmVldGFkZHJlc3MuJzwvZGl2Pic7 IH0KCQlpZiAoaXNzZXQoJGV4dGVuZGVkYWRkcmVzcykpIHsgJG1hcmt1cCAuPSAnPGRpdiBj bGFzcz0iZXh0ZW5kZWQtYWRkcmVzcyI+Jy4kZXh0ZW5kZWRhZGRyZXNzLic8L2Rpdj4nOyB9 CgkJaWYgKGlzc2V0KCRsb2NhbGl0eSkpIHsgJG1hcmt1cCAuPSAnPHNwYW4gY2xhc3M9Imxv Y2FsaXR5Ij4nLiRsb2NhbGl0eS4nPC9zcGFuPiwgJzsgfQoJCWlmIChpc3NldCgkcmVnaW9u KSkgeyAkbWFya3VwIC49ICc8c3BhbiBjbGFzcz0icmVnaW9uIj4nLiRyZWdpb24uJzwvc3Bh bj4nOyB9CgkJaWYgKGlzc2V0KCRwb3N0YWxjb2RlKSkgeyAkbWFya3VwIC49ICcgPHNwYW4g Y2xhc3M9InBvc3RhbC1jb2RlIj4nLiRwb3N0YWxjb2RlLic8L3NwYW4+JzsgfQoJCWlmIChp c3NldCgkY291bnRyeSkpIHsgJG1hcmt1cCAuPSAnPGRpdiBjbGFzcz0iY291bnRyeS1uYW1l Ij4nLiRjb3VudHJ5Lic8L2Rpdj4nOyB9CgoJCSRtYXJrdXAgLj0gJzwvZGl2Pic7CgkJcmV0 dXJuICRtYXJrdXA7Cgl9CgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQovLyBhZG1pbiBzaWRlIHBsdWdpbiBjb2RlCgoKCWlmIChA dHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsKCQlnbG9iYWwgJHRleHRhcnJheTsKCSAgICAv L3JlZ2lzdGVyX2NhbGxiYWNrKCJwbmhfbWZfdGFnZ2VuaGVscGVycyIsICJ0YWciLCAnJywg MSk7CgkgICAgcmVnaXN0ZXJfY2FsbGJhY2soInBuaF9tZl9wYWdlaGVscGVycyIsICJwYWdl Iik7CgkgICAgcmVnaXN0ZXJfY2FsbGJhY2soInBuaF9tZl9mb3JtaGVscGVycyIsICJmb3Jt Iik7CgkgICAgcmVnaXN0ZXJfY2FsbGJhY2soInBuaF9tZl9hcnRpY2xlaGVscGVycyIsICJh cnRpY2xlIik7CgoJCSR0ZXh0YXJyYXlbc3RydG9sb3dlcigndGFnX3BuaF9tZl94Zm4nKV0g PSAnWEZOJzsKCQkkdGV4dGFycmF5W3N0cnRvbG93ZXIoJ3RhZ19wbmhfbWZfaGNhcmQnKV0g PSAnaENhcmQnOwoJCSR0ZXh0YXJyYXlbc3RydG9sb3dlcigndGFnX3BuaF9tZl9hZHInKV0g PSAnYWRyJzsKCQkkdGV4dGFycmF5W3N0cnRvbG93ZXIoJ3RhZ19wbmhfbWZfaGNhbGVuZGFy JyldID0gJ2hDYWxlbmRhcic7CgkJJHRleHRhcnJheVtzdHJ0b2xvd2VyKCd0YWdfcG5oX21m X2hyZXZpZXcnKV0gPSAnaFJldmlldyc7CgkJJHRleHRhcnJheVtzdHJ0b2xvd2VyKCd0YWdf cG5oX21mX3RhZycpXSA9ICdyZWwtdGFnJzsKCQkkdGV4dGFycmF5W3N0cnRvbG93ZXIoJ3Rh Z19wbmhfbWZfbGljZW5zZScpXSA9ICdyZWwtbGljZW5zZSc7CgkJJHRleHRhcnJheVtzdHJ0 b2xvd2VyKCd0YWdfcG5oX21mX2dlbycpXSA9ICdnZW8nOwoKCX0KCglmdW5jdGlvbiB0YWdf cG5oX21mX3hmbigpCgl7CgkJZ2xvYmFsICRzdGVwLCRlbmRmb3JtLCRuYW1lOwoJCSRsYWJl bCA9IGdwcygnbGFiZWwnKTsKCQkkaW52YXJzID0gZ3BzYShhcnJheSgncmVsJywnaHJlZicp KTsKCQlleHRyYWN0KCRpbnZhcnMpOwoJCSRsYWJlbCA9ICghJGxhYmVsKSA/ICdOYW1lJyA6 ICRsYWJlbDsKCQkkb3V0ID0gZm9ybShzdGFydFRhYmxlKCdsaXN0JykuCgkJCXRyKHRkY3Mo aGVkKGdUeHQoJ3RhZ19wbmhfbWZfeGZuJyksMyksMikgKSAuCgkJCXRhZ1JvdygncmVsJyxm SW5wdXQoJ3RleHQnLCdyZWwnLCRyZWwsJ2VkaXQnLCcnLCcnLDI1KSkgLgoJCQl0YWdSb3co J2hyZWYnLCBmSW5wdXQoJ3RleHQnLCdocmVmJywkaHJlZiwnZWRpdCcsJycsJycsMjUpKS4K CQkJdGFnUm93KCduYW1lJywgZklucHV0KCd0ZXh0JywnbGFiZWwnLCRsYWJlbCwnZWRpdCcs JycsJycsMjUpKS4KCQkJJGVuZGZvcm0KCQkpOwoJCSRvdXQgLj0gKCRzdGVwPT0nYnVpbGQn KSA/IHRkYih0YigkbmFtZSwgJGludmFycywgJGxhYmVsKSkgOiAnJzsKCQlyZXR1cm4gJG91 dDsKCX0KCWZ1bmN0aW9uIHRhZ19wbmhfbWZfaGNhcmQoKQoJewoJCWdsb2JhbCAkc3RlcCwk ZW5kZm9ybSwkbmFtZTsKCQkkeG5hbWUgPSBncHMoJ3huYW1lJyk7IC8vIGF2b2lkIGNvbGxp c2lvbiB3aXRoIHR4cHMgdXNlIG9mIG5hbWUKCQkkYWRkcmVzcyA9IGdwcygnYWRkcmVzcycp OyAvLyBhdm9pZCBjb2xsaXNpb24gd2l0aCB0eHBzIHVzZSBvZiBuYW1lCgkJJGludmFycyA9 IGdwc2EoYXJyYXkoJ2hyZWYnLCdvcmcnLCdvcmdocmVmJywncGhvdG8nLCdlbWFpbCcsJ3dv cmt0ZWwnLCdob21ldGVsJywnY2VsbHRlbCcsJ3dvcmtmYXgnKSk7CgkJZXh0cmFjdCgkaW52 YXJzKTsKCQkkb3V0ID0gZm9ybShzdGFydFRhYmxlKCdsaXN0JykuCgkJCXRyKHRkY3MoaGVk KGdUeHQoJ3RhZ19wbmhfbWZfaGNhcmQnKSwzKSwyKSApIC4KCQkJdGFnUm93KCdwZXJzb25c J3MgbmFtZScsIGZJbnB1dCgndGV4dCcsJ3huYW1lJywkeG5hbWUsJ2VkaXQnLCcnLCcnLDI1 KSkuCgkJCXRhZ1JvdygnaHJlZicsIGZJbnB1dCgndGV4dCcsJ2hyZWYnLCRocmVmLCdlZGl0 JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ29yZ2FuaXphdGlvbicsZklucHV0KCd0ZXh0Jywn b3JnJywkb3JnLCdlZGl0JywnJywnJywyNSkpIC4KCQkJdGFnUm93KCdvcmdcJ3MgaHJlZics ZklucHV0KCd0ZXh0Jywnb3JnaHJlZicsJG9yZ2hyZWYsJ2VkaXQnLCcnLCcnLDI1KSkgLgoJ CQl0YWdSb3coJ3Bob3RvIGhyZWYnLCBmSW5wdXQoJ3RleHQnLCdwaG90bycsJHBob3RvLCdl ZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ2VtYWlsJyxmSW5wdXQoJ3RleHQnLCdlbWFp bCcsJGVtYWlsLCdlZGl0JywnJywnJywyNSkpIC4KCQkJdGFnUm93KCd3b3JrIHBob25lJywg ZklucHV0KCd0ZXh0Jywnd29ya3RlbCcsJHdvcmt0ZWwsJ2VkaXQnLCcnLCcnLDI1KSkuCgkJ CXRhZ1JvdygnaG9tZSBwaG9uZScsZklucHV0KCd0ZXh0JywnaG9tZXRlbCcsJGhvbWV0ZWws J2VkaXQnLCcnLCcnLDI1KSkgLgoJCQl0YWdSb3coJ2NlbGwnLCBmSW5wdXQoJ3RleHQnLCdj ZWxsdGVsJywkY2VsbHRlbCwnZWRpdCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCd3b3JrIGZh eCcsIGZJbnB1dCgndGV4dCcsJ3dvcmtmYXgnLCR3b3JrZmF4LCdlZGl0JywnJywnJywyNSkp LgoJCQl0YWdSb3coJ2hhcyBhZGRyZXNzPycsIHllc25vX3BvcCgnYWRkcmVzcycsJGFkZHJl c3MpKS4KCQkJJGVuZGZvcm0KCQkpOwoJCWlmICgkc3RlcD09J2J1aWxkJykgewoJCQkkaW52 YXJzWyduYW1lJ10gPSAkeG5hbWU7CgkJCSRvdXQgLj0gKCRhZGRyZXNzPT0neScpID8gdGRi KHRiKCRuYW1lLCAkaW52YXJzLCAnPCEtLXJlcGxhY2Ugd2l0aCBhZHItLT4nKSkgOiB0ZGIo dGIoJG5hbWUsICRpbnZhcnMpKTsKCQl9CgkJcmV0dXJuICRvdXQ7Cgl9CglmdW5jdGlvbiB0 YWdfcG5oX21mX2FkcigpCgl7CgkJZ2xvYmFsICRzdGVwLCRlbmRmb3JtLCRuYW1lOwoJCSRp bnZhcnMgPSBncHNhKGFycmF5KCd0eXBlJywncG9zdG9mZmljZWJveCcsJ3N0cmVldGFkZHJl c3MnLCdleHRlbmRlZGFkZHJlc3MnLCdsb2NhbGl0eScsJ3JlZ2lvbicsJ3Bvc3RhbGNvZGUn LCdjb3VudHJ5JykpOwoJCWV4dHJhY3QoJGludmFycyk7CgkJJG91dCA9IGZvcm0oc3RhcnRU YWJsZSgnbGlzdCcpLgoJCQl0cih0ZGNzKGhlZChnVHh0KCd0YWdfcG5oX21mX2FkcicpLDMp LDIpICkgLgoJCQl0YWdSb3coJ3R5cGUnLGZJbnB1dCgndGV4dCcsJ3R5cGUnLCR0eXBlLCdl ZGl0JywnJywnJywyNSkpIC4KCQkJdGFnUm93KCdwb3N0b2ZmaWNlYm94JywgZklucHV0KCd0 ZXh0JywncG9zdG9mZmljZWJveCcsJHBvc3RvZmZpY2Vib3gsJ2VkaXQnLCcnLCcnLDI1KSku CgkJCXRhZ1Jvdygnc3RyZWV0YWRkcmVzcycsIGZJbnB1dCgndGV4dCcsJ3N0cmVldGFkZHJl c3MnLCRzdHJlZXRhZGRyZXNzLCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ2V4dGVu ZGVkYWRkcmVzcycsZklucHV0KCd0ZXh0JywnZXh0ZW5kZWRhZGRyZXNzJywkZXh0ZW5kZWRh ZGRyZXNzLCdlZGl0JywnJywnJywyNSkpIC4KCQkJdGFnUm93KCdsb2NhbGl0eScsIGZJbnB1 dCgndGV4dCcsJ2xvY2FsaXR5JywkbG9jYWxpdHksJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRh Z1JvdygncmVnaW9uJywgZklucHV0KCd0ZXh0JywncmVnaW9uJywkcmVnaW9uLCdlZGl0Jywn JywnJywyNSkpLgoJCQl0YWdSb3coJ3Bvc3RhbGNvZGUnLGZJbnB1dCgndGV4dCcsJ3Bvc3Rh bGNvZGUnLCRwb3N0YWxjb2RlLCdlZGl0JywnJywnJywyNSkpIC4KCQkJdGFnUm93KCdjb3Vu dHJ5JywgZklucHV0KCd0ZXh0JywnY291bnRyeScsJGNvdW50cnksJ2VkaXQnLCcnLCcnLDI1 KSkuCgkJCSRlbmRmb3JtCgkJKTsKCQkkb3V0IC49ICgkc3RlcD09J2J1aWxkJykgPyB0ZGIo dGIoJG5hbWUsICRpbnZhcnMpKSA6ICcnOwoJCXJldHVybiAkb3V0OwoJfQoJZnVuY3Rpb24g dGFnX3BuaF9tZl9oY2FsZW5kYXIoKQoJewoJCWdsb2JhbCAkc3RlcCwkZW5kZm9ybSwkbmFt ZTsKCQkkbGFiZWwgPSBncHMoJ2xhYmVsJyk7CgkJJGludmFycyA9IGdwc2EoYXJyYXkoJ3N1 bW1hcnknLCdsb2NhdGlvbicsJ2hyZWYnLCdkdHN0YXJ0Jywnc3RhcnQnLCdkdGVuZCcsJ2Vu ZCcpKTsKCQlleHRyYWN0KCRpbnZhcnMpOwoJCSRsYWJlbCA9ICghJGxhYmVsKSA/ICdEZXNj cmlwdGlvbicgOiAkbGFiZWw7CgkJJG91dCA9IGZvcm0oc3RhcnRUYWJsZSgnbGlzdCcpLgoJ CQl0cih0ZGNzKGhlZChnVHh0KCd0YWdfcG5oX21mX2hjYWxlbmRhcicpLDMpLDIpICkgLgoJ CQl0YWdSb3coJ3N1bW1hcnknLCBmSW5wdXQoJ3RleHQnLCdzdW1tYXJ5Jywkc3VtbWFyeSwn ZWRpdCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCdsb2NhdGlvbicsIGZJbnB1dCgndGV4dCcs J2xvY2F0aW9uJywkbG9jYXRpb24sJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRhZ1JvdygnaHJl ZicsIGZJbnB1dCgndGV4dCcsJ2hyZWYnLCRocmVmLCdlZGl0JywnJywnJywyNSkpLgoJCQl0 YWdSb3coJ2R0c3RhcnQnLCBmSW5wdXQoJ3RleHQnLCdkdHN0YXJ0JywkZHRzdGFydCwnZWRp dCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCdzdGFydCcsIGZJbnB1dCgndGV4dCcsJ3N0YXJ0 Jywkc3RhcnQsJ2VkaXQnLCcnLCcnLDI1KSkuCgkJCXRhZ1JvdygnZHRlbmQnLCBmSW5wdXQo J3RleHQnLCdkdGVuZCcsJGR0ZW5kLCdlZGl0JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ2Vu ZCcsIGZJbnB1dCgndGV4dCcsJ2VuZCcsJGVuZCwnZWRpdCcsJycsJycsMjUpKS4KCQkJdGFn Um93KCdkZXNjcmlwdGlvbicsIGZJbnB1dCgndGV4dCcsJ2xhYmVsJywkbGFiZWwsJ2VkaXQn LCcnLCcnLDI1KSkuCgkJCSRlbmRmb3JtCgkJKTsKCQkkb3V0IC49ICgkc3RlcD09J2J1aWxk JykgPyB0ZGIodGIoJG5hbWUsICRpbnZhcnMsICRsYWJlbCkpIDogJyc7CgkJcmV0dXJuICRv dXQ7Cgl9CglmdW5jdGlvbiB0YWdfcG5oX21mX2hyZXZpZXcoKQoJewoJCWdsb2JhbCAkc3Rl cCwkZW5kZm9ybSwkbmFtZTsKCQkkbGFiZWwgPSBncHMoJ2xhYmVsJyk7CgkJJGludmFycyA9 IGdwc2EoYXJyYXkoJ3N1bW1hcnknLCd0eXBlJywncmF0aW5nJykpOwoJCWV4dHJhY3QoJGlu dmFycyk7CgkJaWYgKCgkdHlwZT09InBlcnNvbiIpfHwoJHR5cGU9PSJidXNpbmVzcyIpKSB7 CgkJCSRsYWJlbCA9ICJcbiAiLic8IS0tUmVwbGFjZSB3aXRoIGhDYXJkLS0tPicuIlxuIi4n UmV2aWV3IENvbnRlbnQnLiJcbiI7CgkJfSBlbHNlaWYgKCgkdHlwZT09ImV2ZW50IikpIHsK CQkJJGxhYmVsID0gIlxuICIuJzwhLS1SZXBsYWNlIHdpdGggaENhbGVuZGFyLS0+Jy4iXG4i LidSZXZpZXcgQ29udGVudCcuIlxuIjsKCQl9IGVsc2UgewoJCQkkbGFiZWwgPSAiXG4gIi4n PGEgY2xhc3M9ImZuIHVybCIgaHJlZj0iRURJVFRISVMiPkVESVRUSElTPC9hPjxiciAvPicu IlxuIi4nUmV2aWV3IENvbnRlbnQnLiJcbiI7CgkJfQoKCQkkb3V0ID0gZm9ybShzdGFydFRh YmxlKCdsaXN0JykuCgkJCXRyKHRkY3MoaGVkKGdUeHQoJ3RhZ19wbmhfbWZfaHJldmlldycp LDMpLDIpICkgLgoJCQl0YWdSb3coJ3N1bW1hcnknLCBmSW5wdXQoJ3RleHQnLCdzdW1tYXJ5 Jywkc3VtbWFyeSwnZWRpdCcsJycsJycsMjUpKS4KCQkJdGFnUm93KCd0eXBlJywgc2VsZWN0 SW5wdXQoJ3R5cGUnLGFycmF5KCdwcm9kdWN0Jz0+J3Byb2R1Y3QnLCdidXNpbmVzcyc9Pidi dXNpbmVzcycsJ2V2ZW50Jz0+J2V2ZW50JywncGVyc29uJz0+J3BlcnNvbicsJ3BsYWNlJz0+ J3BsYWNlJywnd2Vic2l0ZSc9Pid3ZWJzaXRlJywndXJsJz0+J3VybCcpLCcnLDEpKS4KCQkJ dGFnUm93KCdyYXRpbmcnLCBzZWxlY3RJbnB1dCgncmF0aW5nJyxhcnJheSgxPT4xLDI9PjIs Mz0+Myw0PT40LDU9PjUpLCcnLDEpKS4KLy8JCQl0YWdSb3coJ2Rlc2NyaXB0aW9uJywgZklu cHV0KCd0ZXh0JywnZGVzY3JpcHRpb24nLCRkZXNjcmlwdGlvbiwnZWRpdCcsJycsJycsMjUp KS4KCQkJJGVuZGZvcm0KCQkpOwoJCSRvdXQgLj0gKCRzdGVwPT0nYnVpbGQnKSA/IHRkYih0 YigkbmFtZSwgJGludmFycywgJGxhYmVsKSkgOiAnJzsKCQlyZXR1cm4gJG91dDsKCX0KCWZ1 bmN0aW9uIHRhZ19wbmhfbWZfdGFnKCkKCXsKCQlnbG9iYWwgJHN0ZXAsJGVuZGZvcm0sJG5h bWU7CgkJJGxhYmVsID0gZ3BzKCdsYWJlbCcpOwoJCSRpbnZhcnMgPSBncHNhKGFycmF5KCdo cmVmJykpOwoJCWV4dHJhY3QoJGludmFycyk7CgkJJGxhYmVsID0gKCEkbGFiZWwpID8gJ1Rh ZycgOiAkbGFiZWw7CgkJJG91dCA9IGZvcm0oc3RhcnRUYWJsZSgnbGlzdCcpLgoJCQl0cih0 ZGNzKGhlZChnVHh0KCd0YWdfcG5oX21mX3RhZycpLDMpLDIpICkgLgoJCQl0YWdSb3coJ2hy ZWYnLCBmSW5wdXQoJ3RleHQnLCdocmVmJywkaHJlZiwnZWRpdCcsJycsJycsMjUpKS4KCQkJ dGFnUm93KCd0YWcnLCBmSW5wdXQoJ3RleHQnLCdsYWJlbCcsJGxhYmVsLCdlZGl0JywnJywn JywyNSkpLgoJCQkkZW5kZm9ybQoJCSk7CgkJJG91dCAuPSAoJHN0ZXA9PSdidWlsZCcpID8g dGRiKHRiKCRuYW1lLCAkaW52YXJzLCAkbGFiZWwpKSA6ICcnOwoJCXJldHVybiAkb3V0OwoJ fQoJZnVuY3Rpb24gdGFnX3BuaF9tZl9saWNlbnNlKCkKCXsKCQlnbG9iYWwgJHN0ZXAsJGVu ZGZvcm0sJG5hbWU7CgkJJGxhYmVsID0gZ3BzKCdsYWJlbCcpOwoJCSRpbnZhcnMgPSBncHNh KGFycmF5KCdocmVmJykpOwoJCWV4dHJhY3QoJGludmFycyk7CgkJJGxhYmVsID0gKCEkbGFi ZWwpID8gJ0xpY2Vuc2UnIDogJGxhYmVsOwoJCSRvdXQgPSBmb3JtKHN0YXJ0VGFibGUoJ2xp c3QnKS4KCQkJdHIodGRjcyhoZWQoZ1R4dCgndGFnX3BuaF9tZl9saWNlbnNlJyksMyksMikg KSAuCgkJCXRhZ1JvdygnaHJlZicsIGZJbnB1dCgndGV4dCcsJ2hyZWYnLCRocmVmLCdlZGl0 JywnJywnJywyNSkpLgoJCQl0YWdSb3coJ2xpY2Vuc2UnLCBmSW5wdXQoJ3RleHQnLCdsYWJl bCcsJGxhYmVsLCdlZGl0JywnJywnJywyNSkpLgoJCQkkZW5kZm9ybQoJCSk7CgkJJG91dCAu PSAoJHN0ZXA9PSdidWlsZCcpID8gdGRiKHRiKCRuYW1lLCAkaW52YXJzLCAkbGFiZWwpKSA6 ICcnOwoJCXJldHVybiAkb3V0OwoJfQoJZnVuY3Rpb24gdGFnX3BuaF9tZl9nZW8oKQoJewoJ CWdsb2JhbCAkc3RlcCwkZW5kZm9ybSwkbmFtZTsKCQkkaW52YXJzID0gZ3BzYShhcnJheSgn bGF0JywnbG9uZycpKTsKCQlleHRyYWN0KCRpbnZhcnMpOwoJCSRvdXQgPSBmb3JtKHN0YXJ0 VGFibGUoJ2xpc3QnKS4KCQkJdHIodGRjcyhoZWQoZ1R4dCgndGFnX3BuaF9tZl9nZW8nKSwz KSwyKSApIC4KCQkJdGFnUm93KCdsYXQnLGZJbnB1dCgndGV4dCcsJ2xhdCcsJGxhdCwnZWRp dCcsJycsJycsMjUpKSAuCgkJCXRhZ1JvdygnbG9uZycsIGZJbnB1dCgndGV4dCcsJ2xvbmcn LCRsb25nLCdlZGl0JywnJywnJywyNSkpLgoJCQkkZW5kZm9ybQoJCSk7CgkJJG91dCAuPSAo JHN0ZXA9PSdidWlsZCcpID8gdGRiKHRiKCRuYW1lLCAkaW52YXJzKSkgOiAnJzsKCQlyZXR1 cm4gJG91dDsKCX0KCgkvLyBQYWdlIGVkaXRvciBoZWxwZXIgdGFncwoJLy8gSW5zZXJ0cyB0 YWcgaGVscGVycyBpbiBsZWZ0IGNvbHVtbiB2aWEgRE9NIG1hbmlwdWxhdGlvbgoJZnVuY3Rp b24gcG5oX21mX3BhZ2VoZWxwZXJzKCkgewogICAgZWNobzw8PEVPRgoKPHNjcmlwdCB0eXBl PSJ0ZXh0L2phdmFzY3JpcHQiPgo8IS0tCgppZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh Z05hbWUpIHsKCgkvLyBUaGlzIGlzIHNvbWUgYXdmdWwgbG9naWMgdG8gZmluZCB0aGUgdGFi bGUgY2VsbCBJIHdhbnQKCXZhciB0YmxjZWxsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRh Z05hbWUoJ2gyJylbMF0ucGFyZW50Tm9kZTsKCgl2YXIgbmV3aGVscGVycyA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ1AnKTsKCW5ld2hlbHBlcnMuY2xhc3NOYW1lID0gJ2NvbHVtbic7 CgluZXdoZWxwZXJzLmlubmVySFRNTCA9ICdNaWNyb2Zvcm1hdHM8YnIgLz48c21hbGw+PGEg dGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O25hbWU9cG5oX21mX3hmbiIg b25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lk dGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxz ZTsiPlhGTjwvYT48YnIgLz48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iP2V2ZW50PXRhZyYj Mzg7bmFtZT1wbmhfbWZfaGNhcmQiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwg XCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVz aXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5oQ2FyZDwvYT48YnIgLz48YSB0YXJnZXQ9Il9i bGFuayIgaHJlZj0iP2V2ZW50PXRhZyYjMzg7bmFtZT1wbmhfbWZfaHJldmlldyIgb25jbGlj az0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAw LGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPmhS ZXZpZXc8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4 O25hbWU9cG5oX21mX2FkciIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3Bv cHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFi bGVcJyk7IHJldHVybiBmYWxzZTsiPmFkcjwvYT48YnIgLz48YSB0YXJnZXQ9Il9ibGFuayIg aHJlZj0iP2V2ZW50PXRhZyYjMzg7bmFtZT1wbmhfbWZfaGNhbGVuZGFyIiBvbmNsaWNrPSJ3 aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3aWR0aD00MDAsaGVp Z2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+aENhbGVu ZGFyPC9hPjxiciAvPjxhIGhyZWY9Ij9ldmVudD10YWcmIzM4O25hbWU9cG5oX21mX3RhZyIg b25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lk dGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxz ZTsiPnJlbC10YWc8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10 YWcmIzM4O25hbWU9cG5oX21mX2xpY2Vuc2UiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMu aHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJh cnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5yZWwtbGljZW5zZTwvYT48YnIgLz48 YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iP2V2ZW50PXRhZyYjMzg7bmFtZT1wbmhfbWZfZ2Vv IiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3 aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZh bHNlOyI+Z2VvPC9hPjwvc21hbGw+JzsKCXRibGNlbGwuYXBwZW5kQ2hpbGQobmV3aGVscGVy cyk7Cn0KCgotLT4KPC9zY3JpcHQ+CkVPRjsKCX0KCgkvLyBGb3JtIGVkaXRvciBoZWxwZXIg dGFncwoJLy8gSW5zZXJ0cyB0YWcgaGVscGVycyBpbiBsZWZ0IGNvbHVtbiB2aWEgRE9NIG1h bmlwdWxhdGlvbgoJZnVuY3Rpb24gcG5oX21mX2Zvcm1oZWxwZXJzKCkgewogICAgZWNobzw8 PEVPRgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8IS0tCgppZiAoZG9jdW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUpIHsKCgkvLyBUaGlzIGlzIHNvbWUgYXdmdWwgbG9n aWMgdG8gZmluZCB0aGUgdGFibGUgY2VsbCBJIHdhbnQKCXZhciB0YmxjZWxsID0gZG9jdW1l bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2gyJylbMF0ucGFyZW50Tm9kZTsKCgl2YXIgbmV3 aGVscGVycyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1AnKTsKCW5ld2hlbHBlcnMuaW5u ZXJIVE1MID0gJ01pY3JvZm9ybWF0czxiciAvPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ ZXZlbnQ9dGFnJiMzODtuYW1lPXBuaF9tZl94Zm4iIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRo aXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9s bGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5YRk48L2E+PGJyIC8+PGEgdGFy Z2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O25hbWU9cG5oX21mX2hjYXJkIiBv bmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3aWR0 aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZhbHNl OyI+aENhcmQ8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcm IzM4O25hbWU9cG5oX21mX2hyZXZpZXciIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJl ZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMs cmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5oUmV2aWV3PC9hPjxiciAvPjxhIHRhcmdl dD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9dGFnJiMzODtuYW1lPXBuaF9tZl9hZHIiIG9uY2xp Y2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQw MCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5h ZHI8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O25h bWU9cG5oX21mX2hjYWxlbmRhciIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBc J3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNp emFibGVcJyk7IHJldHVybiBmYWxzZTsiPmhDYWxlbmRhcjwvYT48YnIgLz48YSBocmVmPSI/ ZXZlbnQ9dGFnJiMzODtuYW1lPXBuaF9tZl90YWciIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRo aXMuaHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9s bGJhcnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5yZWwtdGFnPC9hPjxiciAvPjxh IHRhcmdldD0iX2JsYW5rIiBocmVmPSI/ZXZlbnQ9dGFnJiMzODtuYW1lPXBuaF9tZl9saWNl bnNlIiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywg XCd3aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJu IGZhbHNlOyI+cmVsLWxpY2Vuc2U8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9 Ij9ldmVudD10YWcmIzM4O25hbWU9cG5oX21mX2dlbyIgb25jbGljaz0id2luZG93Lm9wZW4o dGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdodD00MDAsc2Ny b2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPmdlbzwvYT4nOwoJdGJsY2Vs bC5hcHBlbmRDaGlsZChuZXdoZWxwZXJzKTsKfQoKLS0+Cjwvc2NyaXB0PgpFT0Y7Cgl9CgoJ Ly8gYXJ0aWNsZSBlZGl0b3IgaGVscGVyIHRhZ3MKCS8vIEluc2VydHMgdGFnIGhlbHBlcnMg aW4gbGVmdCBjb2x1bW4gdmlhIERPTSBtYW5pcHVsYXRpb24KCWZ1bmN0aW9uIHBuaF9tZl9h cnRpY2xlaGVscGVycygpIHsKICAgIGVjaG88PDxFT0YKCjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0Ij4KPCEtLQoKaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSB7CgoJLy8g VGhpcyBpcyBzb21lIGF3ZnVsIGxvZ2ljIHRvIGZpbmQgdGhlIHRhYmxlIGNlbGwgSSB3YW50 Cgl2YXIgdGJsY2VsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0aWxlX2hlbHAn KS5wYXJlbnROb2RlOwoKCXZhciBuZXdoZWxwZXJzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu dCgnUCcpOwoJbmV3aGVscGVycy5pbm5lckhUTUwgPSAnTWljcm9mb3JtYXRzPGJyIC8+PGEg dGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4O25hbWU9cG5oX21mX3hmbiIg b25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lk dGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxz ZTsiPlhGTjwvYT48YnIgLz48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iP2V2ZW50PXRhZyYj Mzg7bmFtZT1wbmhfbWZfaGNhcmQiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMuaHJlZiwg XCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJhcnMscmVz aXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5oQ2FyZDwvYT48YnIgLz48YSB0YXJnZXQ9Il9i bGFuayIgaHJlZj0iP2V2ZW50PXRhZyYjMzg7bmFtZT1wbmhfbWZfaHJldmlldyIgb25jbGlj az0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lkdGg9NDAw LGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxzZTsiPmhS ZXZpZXc8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10YWcmIzM4 O25hbWU9cG5oX21mX2FkciIgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3Bv cHVwd2luZG93XCcsIFwnd2lkdGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFi bGVcJyk7IHJldHVybiBmYWxzZTsiPmFkcjwvYT48YnIgLz48YSB0YXJnZXQ9Il9ibGFuayIg aHJlZj0iP2V2ZW50PXRhZyYjMzg7bmFtZT1wbmhfbWZfaGNhbGVuZGFyIiBvbmNsaWNrPSJ3 aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3aWR0aD00MDAsaGVp Z2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZhbHNlOyI+aENhbGVu ZGFyPC9hPjxiciAvPjxhIGhyZWY9Ij9ldmVudD10YWcmIzM4O25hbWU9cG5oX21mX3RhZyIg b25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCBcJ3BvcHVwd2luZG93XCcsIFwnd2lk dGg9NDAwLGhlaWdodD00MDAsc2Nyb2xsYmFycyxyZXNpemFibGVcJyk7IHJldHVybiBmYWxz ZTsiPnJlbC10YWc8L2E+PGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Ij9ldmVudD10 YWcmIzM4O25hbWU9cG5oX21mX2xpY2Vuc2UiIG9uY2xpY2s9IndpbmRvdy5vcGVuKHRoaXMu aHJlZiwgXCdwb3B1cHdpbmRvd1wnLCBcJ3dpZHRoPTQwMCxoZWlnaHQ9NDAwLHNjcm9sbGJh cnMscmVzaXphYmxlXCcpOyByZXR1cm4gZmFsc2U7Ij5yZWwtbGljZW5zZTwvYT48YnIgLz48 YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iP2V2ZW50PXRhZyYjMzg7bmFtZT1wbmhfbWZfZ2Vv IiBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsIFwncG9wdXB3aW5kb3dcJywgXCd3 aWR0aD00MDAsaGVpZ2h0PTQwMCxzY3JvbGxiYXJzLHJlc2l6YWJsZVwnKTsgcmV0dXJuIGZh bHNlOyI+Z2VvPC9hPic7Cgl0YmxjZWxsLmFwcGVuZENoaWxkKG5ld2hlbHBlcnMpOwp9Cgot LT4KPC9zY3JpcHQ+CkVPRjsKCX0KCgoKIjtzOjM6Im1kNSI7czozMjoiMzc0MDIyY2YxMzMx MmNjNmU2MjU2NjUyMzExNjQ2MjUiO30=