# smd_random_banner 0.23 # Random image by category with a few extra advertising options # Stef Dawson # http://www.stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTc6InNtZF9yYW5kb21fYmFubmVyIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjY6Imh0dHA6Ly93d3cuc3RlZmRhd3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4yMyI7czoxMToiZGVzY3JpcHRpb24iO3M6NjE6IlJhbmRvbSBpbWFnZSBieSBjYXRlZ29yeSB3aXRoIGEgZmV3IGV4dHJhIGFkdmVydGlzaW5nIG9wdGlvbnMiO3M6NDoiaGVscCI7czoxNDQ3MToiPGgxPjxiPnNtZF9yYW5kb21fYmFubmVyPC9iPjwvaDE+DQo8cCBjbGFzcz0ic21hbGwiPltyZXF1aXJlcyBzbWRfbGliIHRvIGJlIGluc3RhbGxlZCBhbmQgYWN0aXZhdGVkXTxwPg0KPGI+R2VuZXJhbCBpZGVhPC9iPg0KDQo8cD5CYXNlZCBzaGFtZWxlc3NseSBvbiBkcnVfcmFuZG9tX2ltYWdlICh0aGFua3MhKSB0aGlzIHBsdWdpbiBleHRlbmRzIHRoZSBpZGVhLiBUaGUgY29uY2VwdCBpczogd2hhdCBpZiB5b3Ugd2FudCB0byBhZHZlcnRpc2Ugb3RoZXIgcGFydHMgb2YgeW91ciBzaXRlIChlLmcuIG90aGVyIHByb2R1Y3RzL3NlcnZpY2VzKSB1c2luZyBhIGJhbm5lciBhZD8gWW91IHdhbnQgYW4gaW1hZ2UvYW5pbWF0ZWQgZ2lmL3doYXRldmVyIHRvIGFkdmVydGlzZSB0aGUgcHJvZHVjdHMgb3Igc2VydmljZXMgYW5kIHdoZW4gcGVvcGxlIGNsaWNrIG9uIHRoZSBiYW5uZXJzLCB0aGV5IHNob3VsZCBiZSB0YWtlbiB0byB0aGUgY29ycmVjdCBwYXJ0IG9mIHRoZSBzaXRlLiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgbG9va3MgdmVyeSBhbWF0ZXVyIHRvIGFkdmVydGlzZSB0aGUgcHJvZHVjdCB0aGUgcGVyc29uIGlzIGN1cnJlbnRseSBsb29raW5nIGF0IG9uIHRoZSBzYW1lIHBhZ2UgYXMgdGhlIHByb2R1Y3QgaXRzZWxmLjwvcD4NCg0KPHA+VGhpcyBwbHVnaW4gYWxsb3dzIHlvdSB0byByYW5kb21seSBpbmNsdWRlL2V4Y2x1ZGUgY2xpY2thYmxlIGltYWdlcyBiYXNlZCBvbiBmaXhlZCB0ZXh0IHN0cmluZ3Mgb3IgdGhlIGNvbnRlbnRzIG9mIGFydGljbGUgZmllbGRzLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNpbXBseSBzcHJ1Y2UgdXAgYSBwYWdlIGFuZCBzaG93IGEgcmFuZG9tIGltYWdlIGVhY2ggdGltZS4gSXQgaXMgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTIwNjkyIj5NdWx0aS1MaW5ndWFsIFBhY2s8L2E+IChNTFApIGF3YXJlIGZvciBpbWFnZSBjYXB0aW9uL2FsdCBzdHJpbmdzLjwvcD4NCg0KPGI+T3B0aW9ucyBhdCBhIGdsYW5jZTwvYj4NCg0KPHA+SW4gaXRzIGJhc2UgZm9ybSwgdGhpcyBwbHVnaW4gZnVuY3Rpb25zIGV4YWN0bHkgYXMgZHJ1X3JhbmRvbV9pbWFnZSwgaS5lLjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciAvJmd0OzwvY29kZT48L3A+DQoNCjxwPndpbGwgY2hvb3NlIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyB1cGxvYWRlZCB2aWEgdGV4dHBhdHRlcm4ncyBpbWFnZSBpbnRlcmZhY2UuIE1vZGlmeSBpdCB1c2luZyBhbnkgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOjwvcD4NCg0KPHVsPg0KPGxpPjxiPmNhdGVnb3J5PC9iPiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGltYWdlIGNhdGVnb3JpZXMgdG8gY2hvb3NlIGZyb208L2xpPg0KPGxpPjxiPnN1YmNhdHM9IjEiPC9iPiA6IHdoZXRoZXIgdG8gbG9vayBpbiBzdWItY2F0ZWdvcmllcyBvciBub3QuIERlZmF1bHQ6IG5vIHN1YmNhdHM8L2xpPg0KPGxpPjxiPm1hdGNoX3RleHQ8L2I+IDogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGV4dCBzdHJpbmdzIHRvIGxvb2sgZm9yIGluIHRoZSBpbWFnZTwvbGk+DQo8bGk+PGI+YXZvaWRfdGV4dDwvYj4gOiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0ZXh0IHN0cmluZ3MgdG8gYXZvaWQgaW4gdGhlIGltYWdlPC9saT4NCjxsaT48Yj5jb21wYXJlX3RvPC9iPiA6IGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBsYWNlcyB0byBsb29rIGZvciBtYXRjaC9hdm9pZCB0ZXh0IGluIHRoZSBpbWFnZS4gQ2FuIGJlIGVpdGhlcjogbmFtZSAodGhlIGRlZmF1bHQpLCBpZCwgY2FwdGlvbiwgYWx0IG9yIGNhdGVnb3J5PC9saT4NCjxsaT48Yj5pZF9wcmVmaXg8L2I+IDogd2hlbiBzZWFyY2hpbmcgZm9yIGFuIElEIG1hdGNoIChzZWUgYmVsb3cpLCB0aGlzIHN0cmluZyBpcyBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBJRCBudW1iZXIuIERlZmF1bHQ6ICJhcnRpY2xlLSI8L2xpPg0KPGxpPjxiPmFsd2F5c19kaXNwbGF5PSIxIjwvYj4gOiBpZiBubyBtYXRjaGluZyBpbWFnZXMgYXJlIGZvdW5kIHRoZSBwbHVnaW4gdXN1YWxseSByZXR1cm5zIG5vdGhpbmcuIFRoaXMgZm9yY2VzIGl0IHRvIHRyeSBhZ2FpbiB3aXRob3V0IGFueSBtYXRjaF90ZXh0L2F2b2lkX3RleHQuIERlZmF1bHQ6IG9mZjwvbGk+DQo8bGk+PGI+dGh1bWI9IjEiPC9iPiA6IHRvIGRpc3BsYXkgdGh1bWJuYWlscyBpbnN0ZWFkIG9mIGZ1bGxzaXplIGltYWdlcy4gRGVmYXVsdDogb2ZmPC9saT4NCjxsaT48Yj5saW1pdDwvYj4gOiB0aGUgbnVtYmVyIG9mIGltYWdlcyB0byBkaXNwbGF5LiBEZWZhdWx0OiAxPC9saT4NCjxsaT48Yj5pbWdjbGFzczwvYj4gOiB0aGUgQ1NTIGNsYXNzIHRvIGFkZCB0byBlYWNoIGltYWdlLiBEZWZhdWx0OiBubyBjbGFzczwvbGk+DQo8bGk+PGI+bGlua19pbjwvYj4gOiBtYWtlcyB0aGUgaW1hZ2UgY2xpY2thYmxlLiBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgaW4gd2hpY2ggcGFydCBvZiB0aGUgaW1hZ2UgdGhlIFVSTCBpcyBzdG9yZWQuIENhbiBiZSBlaXRoZXIgYWx0IG9yIGNhcHRpb24uIERlZmF1bHQ6IG5vIGxpbms8L2xpPg0KPGxpPjxiPmxpbmtfcHJlZml4PC9iPiA6IHN0cmluZyB0byBwcmVwZW5kIHRvIGV2ZXJ5IFVSTC4gVXNlZnVsIGlmIHlvdSByZW9yZ2FuaXNlIHlvdXIgc2l0ZTogdXNlIHRoaXMgaW5zdGVhZCBvZiB2aXNpdGluZyBlYWNoIGltYWdlIGFuZCBhbHRlcmluZyB0aGUgY2FwdGlvbi9hbHQgdGV4dDwvbGk+DQo8bGk+PGI+cmVmZXJlcjwvYj4gOiAoc2ljISkgZWFjaCBpbWFnZSBoYXMgP2JpZD0naW1hZ2VJRCcgYWRkZWQgdG8gaXQgc28gY2xpY2tzIGNhbiBiZSB0cmFja2VkIGluIHRoZSBsb2dzIHRvIHNlZSB3aGljaCBhcmUgdGhlIG1vc3QgZWZmZWN0aXZlIGFkcy4gQ2hhbmdlIHRoZSAnYmlkJyB0ZXh0IGhlcmUgdG8gc29tZXRoaW5nIG9mIHlvdXIgY2hvb3NpbmcsIG9yIHVzZSByZWZlcmVyPSIiIHRvIGRpc2FibGUgdHJhY2tpbmcuIERlZmF1bHQ6IGJpZCAod2hlbiBsaW5rX2luIGlzIHVzZWQpPC9saT4NCjxsaT48Yj5yYXdfdXJsPC9iPiA6IGluc3RlYWQgb2YgbGlua2luZyBhbmQgbWFraW5nIGEgZnVsbCBpbWFnZSB0YWcsIHVzaW5nIHRoaXMgb3B0aW9uIGp1c3Qgb3V0cHV0cyB0aGUgVVJMIGRpcmVjdGx5LiBUaGlzIGNhbiBiZSB1c2VkIGluIDxjb2RlPiZsdDtzdHlsZSZndDs8L2NvZGU+IGRlY2xhcmF0aW9ucyB0bywgZm9yIGV4YW1wbGUsIHNldCBhIHJhbmRvbSBDU1Mgb2JqZWN0IGJhY2tncm91bmQuIERlZmF1bHQ6IG9mZjwvbGk+DQo8bGk+PGI+dGFyZ2V0PC9iPiA6IHNwZWNpZmllcyB0aGUgYW5jaG9yIHRhcmdldCB3aW5kb3cgKGUuZy4gIl9ibGFuayIpIHdoaWNoIHdpbGwgY2F1c2UgYSBwb3B1cCBlZmZlY3Qgd2hlbiBhIGxpbmtlZCBiYW5uZXIgaXMgY2xpY2tlZC4gPGk+TkI6IGlmIHVzaW5nIHRoZSBYSFRNTCAxLjEgRE9DVFlQRSB3aXRoIHRoaXMgb3B0aW9uLCB5b3VyIHBhZ2Ugd2lsbCBub3QgdmFsaWRhdGUgc2luY2UgdGFyZ2V0IGlzIGRlcHJlY2F0ZWQgYnkgdGhlIFczQzwvaT4uIERlZmF1bHQ6IG5vdCBzZXQgKGxpbmtzIG9wZW4gaW4gc2FtZSB3aW5kb3cpPC9saT4NCjwvdWw+DQoNCjxiPk9wdGlvbnMgaW4gZGV0YWlsPC9iPg0KDQo8cD5UbyBoaWdobGlnaHQgdGhlIG9wdGlvbnMsIHdlIGFyZSBnb2luZyB0byB1c2UgYW4gZXhhbXBsZSBvZiBhIHpvbyB3ZWIgc2l0ZS4gWW91IGhhdmUgdGhyZWUgc2VjdGlvbnMgY2FsbGVkICJhYm91dCIsICJhbmltYWxzIiBhbmQgInRvdXJzIi4gWW91IGhhdmUgaW1hZ2VzIG9mIHZhcmlvdXMgYW5pbWFscyB1bmRlciBhbiBpbWFnZSBjYXRlZ29yeSBjYWxsZWQgImFuaW1hbHMiLiBCZWxvdyB0aGF0IHRoZXkgYXJlIHNlcGFyYXRlZCBpbnRvICJtYW1tYWxzIiwgInJlcHRpbGVzIiwgYW5kICJiaXJkcyIuIFlvdXIgYWx0IHRleHQgaG9sZHMgc3VpdGFibGUgYWx0ZXJuYXRlIGRlc2NyaXB0aW9ucyBvZiB0aGUgYW5pbWFscyBhbmQgdGhlIGNhcHRpb24gdGV4dCBpcyBhIHVybCB0byBhbiBhcnRpY2xlIGFib3V0IGVhY2ggYW5pbWFsLiBZb3UgYWxzbyBoYXZlIG90aGVyIGltYWdlIGNhdGVnb3JpZXMgZm9yIHRoZSByZXN0IG9mIHlvdXIgc2l0ZS48L3A+DQoNCjxiPjxpPkZpeGVkIGNhdGVnb3J5IGxpc3RzPC9pPjwvYj4NCjxwPlRoZSBpbWFnZSBjYXRlZ29yaWVzIHRvIGNob29zZSBmcm9tIGNhbiBlaXRoZXIgYmUgYSBzdHJhaWdodGZvcndhcmQgbGlzdCBvciBjYW4gaGF2ZSBzb21lIHNwZWNpYWwgdG9rZW5zIHRoYXQgYWRkIGluZm9ybWF0aW9uIHJlYWQgZnJvbSB0aGUgYXJ0aWNsZS4gQW4gZXhhbXBsZTo8L3A+DQoNCjxwPjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImFuaW1hbHMiIGxpbWl0PSI0IiBzdWJjYXRzPSIxIiAvJmd0OzwvY29kZT48L3A+DQoNCjxwPnRvIHB1bGwgb3V0IGZvdXIgcGljdHVyZXMgb2YgYW55IGFuaW1hbCB0byBzaG93IG9uIHlvdXIgZnJvbnQgcGFnZS4gSWYgeW91IHdhbnRlZCB0byBiZSBtb3JlIHNwZWNpZmljIHlvdSBjb3VsZCB0cnk6PC9wPg0KDQo8cD48Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJtYW1tYWxzLCByZXB0aWxlcyIgbGlua19pbj0iY2FwdGlvbiIgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD53aGljaCB3b3VsZCBkaXNwbGF5IGEgcmFuZG9tIHBpY3R1cmUgZnJvbSBlaXRoZXIgdGhlIG1hbW1hbHMgb3IgcmVwdGlsZXMgY2F0ZWdvcmllcy4gRWFjaCBpbWFnZSB3b3VsZCBiZSBjbGlja2FibGUgYW5kIHRoZSBsaW5rIHdvdWxkIHRha2UgeW91IHRvIHRoZSBVUkwgZ2l2ZW4gaW4gdGhlIGNhcHRpb24gZmllbGQgb2YgdGhhdCBpbWFnZS4gSWYgaW5zdGVhZCB5b3Ugb25seSB3YW50ZWQgdGhlIGJhY2tncm91bmQgb2YgYSBzcGVjaWZpYyBkaXYgdGFnIHRvIGhvbGQgeW91ciByYW5kb20gaW1hZ2UgeW91IGNvdWxkIGRvIHRoaXM6PC9wPg0KDQo8cD48Y29kZT4mbHQ7c3R5bGUgdHlwZT0idGV4dC9jc3MiJmd0OyNteURpdiB7IGJhY2tncm91bmQ6IHVybCgmbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJhbmltYWxzIiBzdWJjYXRzPSIxIiByYXdfdXJsPSIxIiAvJmd0Oykgbm8tcmVwZWF0IHRvcCB9Jmx0Oy9zdHlsZSZndDs8L2NvZGU+PC9wPg0KDQo8Yj48aT5EeW5hbWljIGNhdGVnb3J5IGxpc3RzPC9pPjwvYj4NCjxwPkhhcmQtY29kaW5nIHRoZSBjYXRlZ29yaWVzIGlzIGZpbmUsIGJ1dCBpbiBUWFAgZm9ybXMgeW91IG9mdGVuIHdhbnQgdG8gYmUgbW9yZSBnZW5lcmljLiBJZiB5b3UgYXJyYW5nZWQgeW91ciBzaXRlIHNvIHRoYXQgeW91IGhhZCBhcnRpY2xlIGNhdGVnb3JpZXMgc3VjaCBhcyAibWFtbWFscyIgYW5kICJyZXB0aWxlcyIgKG1pcnJvcmluZyB5b3VyIGltYWdlIGNhdGVnb3JpZXMpLCB5b3UgY291bGQgZG8gdGhpczo8L3A+DQoNCjxwPjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9Ij9jIiBsaW5rX2luPSJjYXB0aW9uIiAvJmd0OzwvY29kZT48L3A+DQoNCjxwPlRoZSAnPycgdGVsbHMgdGhlIHBsdWdpbiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoZSAoaW1hZ2UpIGNhdGVnb3J5IGlzIGdvaW5nIHRvIGJlIHdoZW4geW91IGNvZGUgdGhlIGZvcm0sIGJ1dCB5b3Ugd2FudCBpdCB0byBiZSByZWFkIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZSB0aGF0IGEgdmlzaXRvciBpcyB2aWV3aW5nLiBTaW5jZSBvdXIgYXJ0aWNsZSBjYXRlZ29yaWVzIG1pbWljIG91ciBpbWFnZSBjYXRlZ29yaWVzIGluIHRoaXMgY2FzZSwgJz9jJyBtZWFucyAicmVhZCB0aGUgYXJ0aWNsZSBjYXRlZ29yeSBhbmQgdXNlIHRoYXQgYXMgdGhlIGltYWdlIGNhdGVnb3J5Ii48L3A+DQoNCjxwPlNvIGlmIHlvdXIgdmlzaXRvciB3YXMgdmlld2luZyBhIHBhZ2UgYWJvdXQgYSByZXB0aWxlLCB0aGUgcmFuZG9tIGltYWdlIGRpc3BsYXllZCBvbiB0aGUgcGFnZSB3b3VsZCBiZSBvZiBhbm90aGVyIHJlcHRpbGUgKHBvc3NpYmx5IHRoZSBzYW1lIG9uZSwgc2VlIGxhdGVyIGhvdyB0byBmaXggdGhpcykuIE90aGVyIG9wdGlvbnMgYXJlOiAnP3MnIGZvciBzZWN0aW9uOyAnP3QnIGZvciBhcnRpY2xlIFVSTCB0aXRsZTsgJz9pZCcgZm9yIGFydGljbGUgSUQuPC9wPg0KDQo8cD5JZiB5b3UgdXNlICc/aWQnLCB0aGUgPGNvZGU+aWRfcHJlZml4PC9jb2RlPiBvcHRpb24gY29tZXMgaW50byBwbGF5LiBXaGF0ZXZlciBpcyBzcGVjaWZpZWQgaW4gaWRfcHJlZml4IChkZWZhdWx0OiAiYXJ0aWNsZS0iKSBpcyBwdXQgaW4gZnJvbnQgb2YgdGhlIElEIG51bWJlci4gVGhpcyBoZWxwcyB3aGVuIGNyZWF0aW5nIHBlci1hcnRpY2xlIGltYWdlIGNhdGVnb3JpZXMgYW5kIG1lYW5zIHlvdSBkb24ndCBoYXZlIHRvIGhhdmUgY2F0ZWdvcnkgbmFtZXMgdGhhdCBhcmUgc2ltcGx5IG51bWJlcnMuPC9wPg0KDQo8Yj48aT5FeGNsdXNpb24gbGlzdHM8L2k+PC9iPg0KPHA+QmFjayB0byBvdXIgcmVwdGlsZSBwYWdlLCB3aGF0IGlmIHlvdSB3YW50ZWQgdG8gc2hvdyBhIHBpY3R1cmUgZnJvbSBhbnkgb3RoZXIgY2F0ZWdvcnk/IEluIHRoYXQgY2FzZSB5b3UgY2FuIHVzZTo8L3A+DQoNCjxwPjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImFuaW1hbHMsICFjIiBsaW5rX2luPSJjYXB0aW9uIiBzdWJjYXRzPSIxIiAvJmd0OzwvY29kZT48L3A+DQoNCjxwPlRoZSBleGNsYW1hdGlvbiBtYXJrIG1lYW5zICJleGNsdWRlIiwgc28gdGhhdCBleGFtcGxlIGRpc3BsYXlzIGEgcmFuZG9tIGFuaW1hbCBwaWN0dXJlIGZyb20gYW55IGNhdGVnb3J5IG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lIGJlaW5nIHJlYWQuIFlvdSBjYW4gZXhjbHVkZSBjYXRlZ29yaWVzICghYyksIHNlY3Rpb25zICghcyksIHRpdGxlcyAoIXQpIG9yIElEcyAoIWlkLCBhZ2FpbiBwcmVwZW5kZWQgd2l0aCBpZF9wcmVmaXgpLiBBbmQgeW91IGNhbiBtaXggYW5kIG1hdGNoIHRoZSBvcHRpb25zIGFzIHlvdSBzZWUgZml0LjwvcD4NCg0KPGI+PGk+Q3VzdG9tIGZpZWxkczwvaT48L2I+DQo8cD5UaGUgZnVuIGRvZXNuJ3Qgc3RvcCB0aGVyZS4gWW91IGNhbiB1c2UgYW55IGZpZWxkIGluIHRoZSBhcnRpY2xlIGFzIGFuIGluY2x1ZGUgb3IgZXhjbHVkZSBsaXN0LiBTYXkgeW91IGNob3NlIGN1c3RvbV8xOjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0icmVwdGlsZXMsID9jdXN0b21fMSIgbGlua19pbj0iY2FwdGlvbiIgc3ViY2F0cz0iMSIgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD5Zb3Ugd291bGQgZ2V0IGEgcmFuZG9tIGltYWdlIGNob3NlbiBmcm9tIHRoZSAncmVwdGlsZXMnIGltYWdlIGNhdGVnb3J5IGFuZCBhbHNvIHRoZSBjYXRlZ29yaWVzIGxpc3RlZCBpbiBjdXN0b21fMSBvZiB0aGUgY3VycmVudGx5IHZpZXdlZCBhcnRpY2xlLiBJZiB5b3UgcHV0ICJtYW1tYWxzLCBiaXJkcywgcGVuZ3VpbnMiIGluIGN1c3RvbV8xIHlvdSB3b3VsZCBnZXQgYW4gaW1hZ2UgY2hvc2VuIGZyb20gYWxsIGZvdXIgY2F0ZWdvcmllcyAoYW5kIHRoZWlyIHN1Yi1jYXRlZ29yaWVzIGluIHRoaXMgY2FzZSkuIFRoaXMgc29ydCBvZiBpZGVhIGNhbiBiZSB1c2VkIHdpdGggPGNvZGU+Y2F0ZWdvcnk9Ij9rZXl3b3JkcyI8L2NvZGU+IHRvIGdldCBhIGxpc3Qgb2YgInJlbGF0ZWQgaW1hZ2UgY2F0ZWdvcmllcyIuLi48L3A+DQoNCjxwPllvdSBjYW4gYWxzbyBleGNsdWRlIGFydGljbGUgZmllbGRzIGJ5IHVzaW5nICchJyBpbnN0ZWFkIG9mICc/Jy4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3Igc2hvd2luZyByYW5kb20gcGljdHVyZXMgb2YgYW55IGFuaW1hbHMgaW4gdGhlIGN1cnJlbnQgY2F0ZWdvcnkgZXhjZXB0IHRoZSBvbmUgeW91IGFyZSB2aWV3aW5nOjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iP2MsICFhcnRpY2xlX2ltYWdlIiBsaW5rX2luPSJjYXB0aW9uIiAvJmd0OzwvY29kZT48L3A+DQoNCjxiPjxpPk1hdGNoaW5nL2F2b2lkaW5nIHRleHQ8L2k+PC9iPg0KPHA+Q2F0ZWdvcmllcyBvbiB0aGVpciBvd24gb25seSB0ZWxsIGhhbGYgdGhlIHN0b3J5LiBUaGVyZSBhcmUgdGltZXMgeW91IG1pZ2h0IHdhbnQgdG8gaW5jbHVkZSBvciBleGNsdWRlIHNwZWNpZmljIHBpZWNlcyBvZiB0ZXh0IGZyb20geW91ciBpbWFnZXMuIFRoZSB0ZXh0IGNvdWxkIGJlIGluIHRoZSBmaWxlbmFtZSwgdGhlIGlkLCB0aGUgY2FwdGlvbiwgdGhlIGFsdCB0ZXh0LCBvciB0aGUgY2F0ZWdvcnkgbmFtZS48L3A+DQoNCjxwPkltYWdpbmUgeW91ciB2aXNpdG9yIGNsaWNrZWQgYSBwaWN0dXJlIG9mIGEgY3JvY29kaWxlIGFuZCB0aGV5IGFyZSB2aWV3aW5nIHRoZSBncmlzbHkgZGV0YWlscyBvbiBhbiBhcnRpY2xlIHBhZ2UuIFlvdSBtaWdodCB3YW50IHRvIHB1dCAiSWYgeW91IGxpa2VkIHRoaXMsIGZpbmQgb3V0IGFib3V0IHRoZXNlIGFuaW1hbHMgdG9vOiIgYW5kIHNob3cgYSBmZXcgcmFuZG9tIGltYWdlcyB0aGF0IGFsbG93IHRoZW0gdG8gc2VlIHN0dWZmIGFib3V0IG90aGVyIGFuaW1hbHMuIE9idmlvdXNseSwgd2UgZG9uJ3Qgd2FudCBhIHBpY3R1cmUgb2YgYSBjcm9jb2RpbGUgdG8gc2hvdyB1cC4gQW5kIG1heWJlIHdlIGRvbid0IHdhbnQgdG8gc2hvdyBhbGxpZ2F0b3JzIGVpdGhlciBiZWNhdXNlIHRoZXkncmUgcXVpdGUgc2ltaWxhci4gU28gd2UgY2FuIGRvIHRoaXM6PC9wPg0KDQo8cD48Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJhbmltYWxzIiBzdWJjYXRzPSIxIiBsaW5rX2luPSJjYXB0aW9uIiBhdm9pZF90ZXh0PSJjcm9jLCBjcm9jb2RpbGUsIGFsbGlnYXRvciIgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD5UaGF0IHdvdWxkIGNob29zZSBhbnkgcGljdHVyZSBmcm9tIHRoZSBhbmltYWxzIGNhdGVnb3J5IChhbmQgYWxsIGl0cyBzdWItY2F0ZWdvcmllcykgYXMgbG9uZyBhcyB0aGUgbmFtZSBvZiB0aGUgaW1hZ2UgPGk+ZGlkbid0PC9pPiBjb250YWluICdjcm9jJyBvciAnY3JvY29kaWxlJyBvciAnYWxsaWdhdG9yJy4gSWYgeW91ciBmaWxlbmFtZXMgd2VyZSBhIGxpdHRsZSB1bnN0cnVjdHVyZWQsIG1heWJlIHlvdSdkIHdhbnQgdG8gY2hlY2sgdGhlIGFsdCB0ZXh0IGFuZCBjYXB0aW9uIHRleHQgZm9yIGEgbWF0Y2ggYXMgd2VsbC4gVXNlIDxjb2RlPmNvbXBhcmVfdG88L2NvZGU+IGZvciB0aGlzOjwvcD4NCg0KPHA+PGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYW5pbWFscyIgc3ViY2F0cz0iMSIgbGlua19pbj0iY2FwdGlvbiIgYXZvaWRfdGV4dD0iY3JvYywgY3JvY29kaWxlLCBhbGxpZ2F0b3IiIGNvbXBhcmVfdG89Im5hbWUsIGFsdCwgY2FwdGlvbiIgLyZndDs8L2NvZGU+PC9wPg0KDQo8Yj48aT5EeW5hbWljYWxseSBtYXRjaGluZy9hdm9pZGluZyB0ZXh0PC9pPjwvYj4NCjxwPk9uIGFuIGFydGljbGUgcGFnZSwgaGFyZC1jb2RpbmcgbGlzdHMgb2YgdGhpbmdzIHRvIGluY2x1ZGUvZXhjbHVkZSBpcyBhY2NlcHRhYmxlLiBCdXQgaWYgeW91J3JlIHVzaW5nIGEgZm9ybSB5b3UgZG9uJ3Qgd2FudCB0byBkbyB0aGF0LCBzbyB5b3UgY2FuIHVzZSAnPycgcGxhY2Vob2xkZXJzIHRoYXQgd2lsbCByZWFkIHN0dWZmIGZyb20gdGhlIGN1cnJlbnQgYXJ0aWNsZS4gU2F5IHlvdSB3YW50ZWQgdG8gcGljayBhbnkgcmFuZG9tIGFuaW1hbCBleGNlcHQgb25lcyBmcm9tIHRoZSBjdXJyZW50IGFydGljbGUgY2F0ZWdvcnk6PC9wPg0KDQo8cD48Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJhbmltYWxzIiBzdWJjYXRzPSIxIiBhdm9pZF90ZXh0PSI/YyIgY29tcGFyZV90bz0ibmFtZSwgYWx0LCBjYXB0aW9uLCBjYXRlZ29yeSIgLyZndDs8L2NvZGU+PC9wPg0KDQo8cD5Ob3RpY2UgdGhhdCwgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgd2UncmUgdXNpbmcgPGNvZGU+Y29tcGFyZV90bzwvY29kZT4sIHRlbGxpbmcgdGhlIHBsdWdpbiB0byBsb29rIGluIHRoZSBuYW1lLCBhbHQgdGV4dCwgY2FwdGlvbiB0ZXh0IGFuZCBjYXRlZ29yeSBuYW1lIGZvciBhIG1hdGNoLiBJZiBhbnkgb2YgdGhvc2UgaXRlbXMgbWF0Y2hlcyB0aGUgY3VycmVudCBjYXRlZ29yeSwgdGhlIGltYWdlIHdpbGwgYmUgZXhjbHVkZWQ7IGFueSBvdGhlciBwaWN0dXJlIGlzIGZhaXIgZ2FtZSBmb3IgYmVpbmcgc2hvd24gb24gdGhlIHBhZ2UuPC9wPg0KDQo8cD5Zb3UgY2FuIGFsc28gdXNlIDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+IHRvIGluY2x1ZGUgaW1hZ2VzIHRoYXQgb25seSBjb250YWluIHNwZWNpZmljIHdvcmRzLiBJZiB5b3Ugc3BlY2lmeSBib3RoIG1hdGNoX3RleHQgYW5kIGF2b2lkX3RleHQsIHlvdXIgJ3Bvc2l0aXZlJyBtYXRjaGVzIHdpbGwgYmUgY2hvc2VuIGZpcnN0IHRvIGdpdmUgYSAncG9vbCcgb2YgYXZhaWxhYmxlIGltYWdlcyBhbmQgdGhlbiBhbnkgdGhhdCBtZWV0IHRoZSBhdm9pZF90ZXh0IGNyaXRlcmlhIHdpbGwgYmUgdGhyb3duIGF3YXkuPC9wPg0KDQo8cD5BcyB3aXRoIHRoZSA8Y29kZT5jYXRlZ29yeTwvY29kZT4gb3B0aW9uLCB5b3UgY2FuIHNwZWNpZnkgJz9jJywgJz9zJywgJz90JywgJz9pZCcgKGluY2x1ZGluZyB0aGUgaWRfcHJlZml4IG9wdGlvbikgb3IgJz9maWVsZG5hbWUnIHdoZXJlIGZpZWxkbmFtZSBpcyBzb21ldGhpbmcgbGlrZSBjdXN0b21fMSwgY3VzdG9tXzIsIGFydGljbGVfaW1hZ2UsIGtleXdvcmRzLCBleGNlcnB0LCBldGMuIFlvdSBhcmUgbm90IGxpbWl0ZWQgdG8gYW55IHBhcnRpY3VsYXIgZmllbGRzOyB5b3UgY2FuIGV2ZW4gdXNlID9ib2R5IGJ1dCBiZSB3YXJuZWQgdGhhdCB5b3VyIHNpdGUgbWF5IGV4cGxvZGUhPC9wPg0KDQo8Yj48aT5MaW5rczwvaT48L2I+DQo8cD5TZXZlcmFsIGV4YW1wbGVzIGhhdmUgYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSA8Y29kZT5saW5rX2luPC9jb2RlPiBvcHRpb24uIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIFRleHRwYXR0ZXJuIHdlIGFyZSBsaW1pdGVkIHRvIHB1dHRpbmcgYSBVUkwgbGluayBlaXRoZXIgaW4gdGhlIGFsdCBvciB0aGUgY2FwdGlvbi4gRm9yIGFjY2Vzc2liaWxpdHksIHRoZSBjYXB0aW9uIGlzIHByb2JhYmx5IGEgYmV0dGVyIGNob2ljZSBidXQgaXQncyB5b3VyIGNhbGwuPC9wPg0KDQo8cD5UbyBkaXJlY3QgdmlzaXRvcnMgdG8gYSB3ZWIgcGFnZSB3aGVuIHRoZXkgY2xpY2sgb24gYW4gaW1hZ2UsIHR5cGUgdGhlIFVSTCBpbiBlaXRoZXIgdGhlIGNhcHRpb24gb3IgYWx0IGFyZWEgb2YgdGhlIGltYWdlIGFuZCB0aGVuIHVzZSA8Y29kZT5saW5rX2luPSJjYXB0aW9uIjwvY29kZT4gb3IgPGNvZGU+bGlua19pbj0iYWx0IjwvY29kZT4gdG8gcmVhZCB0aGUgbGluayBhbmQgYXR0YWNoIGl0IHRvIHRoZSBpbWFnZS4gSWYgdGhlIGxpbmsgaXMgYSBmdWxsIFVSTCBzdGFydGluZyB3aXRoIGh0dHA6Ly8gaXQgd2lsbCBiZSB1c2VkIHZlcmJhdGltIGZvciB0aGUgaW1hZ2UgbGluay4gSWYgaXQgc3RhcnRzIHdpdGggYSAnLycgaXQgd2lsbCBiZSBodW5nIG9mZiB0aGUgcm9vdCBzaXRlX3VybCBkaXJlY3RseS4gSWYgaXQgc3RhcnRzIHdpdGggYW55dGhpbmcgZWxzZSBpdCBpcyBhc3N1bWVkIGEgJ3JlbGF0aXZlJyBsaW5rIGFuZCBpbmhlcml0cyB0aGUgY3VycmVudCBzZWN0aW9uLjwvcD4NCg0KPHA+Rm9yIGNvbnZlbmllbmNlLCB5b3UgbWF5IHNwZWNpZnkgPGNvZGU+bGlua19wcmVmaXg8L2NvZGU+IHdoaWNoIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHRoZSBsaW5rLiBUaGlzIGFsbG93cyB5b3UgdG8gZGlyZWN0IGFsbCBsaW5rcyB0byBhIGRpZmZlcmVudCBzZWN0aW9uIG9mIHlvdXIgc2l0ZSBlYXNpbHksIGFuZCBoZWxwcyBpZiB5b3UgaGF2ZSByZW9yZ2FuaXNlZCB5b3VyIHNpdGU7IHlvdSB3b24ndCBoYXZlIHRvIHJldmlzaXQgYWxsIHRoZSBpbWFnZXMgYW5kIGNoYW5nZSBlYWNoIGxpbmsuIEFnYWluLCBpZiA8Y29kZT5saW5rX3ByZWZpeDwvY29kZT4gYmVnaW5zIHdpdGggaHR0cDovLyBpdCBpcyBhc3N1bWVkIGEgZnVsbCBVUkwgdG8gYW5vdGhlciBzaXRlOyBpZiBpdCBiZWdpbnMgd2l0aCAnLycgaXQgaXMgYSByb290IGxpbms7IGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBzZWN0aW9uLiBOb3RlIHRoYXQgaWYgeW91IHVzZSBhbiBodHRwOi8vIGZ1bGwgVVJMIGluIHRoZSBpbWFnZSBpdHNlbGYsIGFueSBsaW5rX3ByZWZpeCB3aWxsIGJlIGlnbm9yZWQuPC9wPg0KDQo8Yj48aT5UcmFja2luZyBjbGlja3M8L2k+PC9iPg0KPHA+V2hlbiB1c2luZyA8Y29kZT5saW5rX2luPC9jb2RlPiwgYWxsIGxpbmtzIGFyZSBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkIHdpdGggPGNvZGU+YmlkPWltYWdlSUQ8L2NvZGU+LCB3aGVyZSBpbWFnZUlEIGlzIHRoZSBpZCBvZiB0aGUgaW1hZ2UgYmVpbmcgZGlzcGxheWVkLiBUaGUgd29yZCAnYmlkJyBzdGFuZHMgZm9yICdiYW5uZXIgaWQnIGFuZCBpcyBzaW1wbHkgYWRkZWQgc28gdGhhdCBpdCBzaG93cyB1cCBpbiB0aGUgbG9ncy4gUHJvdmlkaW5nIHlvdSBoYXZlIGxvZ3MgdHVybmVkIG9uLCB5b3UgY2FuIGZpbHRlciB0aGUgbG9nIGZpbGUgYW5kIHNlZSB3aGljaCBpbWFnZXMgYXJlIG1vc3QgZnJlcXVlbnRseSBjbGlja2VkLCBwZXJoYXBzIGVuYWJsaW5nIHlvdSB0byBqdWRnZSBob3cgZWZmZWN0aXZlIHBhcnRpY3VsYXIgaW1hZ2VzIGFyZSBhdCBnZW5lcmF0aW5nIHRyYWZmaWMuPC9wPg0KDQo8cD5JZiB5b3UgZG9uJ3QgbGlrZSB0aGUgd29yZCAnYmlkJyB5b3UgY2FuIGNoYW5nZSBpdCB3aXRoIHRoZSA8Y29kZT5yZWZlcmVyPC9jb2RlPiBvcHRpb247IG1pcy1zcGVsbGVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBIVFRQIHNwZWMgd2FzIGFsbCB0aG9zZSB5ZWFycyBhZ28gOi0pIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdHVybiBvZmYgdGhlIHRyYWNraW5nIGZlYXR1cmUgYnkgdXNpbmcgPGNvZGU+cmVmZXJlcj0iIjwvY29kZT4uPC9wPg0KDQo8Yj5Ucm91Ymxlc2hvb3Rpbmc8L2I+DQoNCjxwPldpdGggc28gbWFueSBjcmF6eSBjb21iaW5hdGlvbnMgb2Ygb3B0aW9ucywgaXQncyBlYXN5IHRvIGdldCBsb3N0LiBLZWVwaW5nIHlvdXIgaW1hZ2VzIGdyb3VwZWQgaW50byBsb2dpY2FsIHN1Yi1jYXRlZ29yaWVzIGNhbiBoZWxwIGltbWVuc2VseS4gQWxzbywgdXNpbmcgYSBnb29kIG5hbWluZyBjb252ZW50aW9uIGZvciBpbWFnZSBmaWxlbmFtZXMgb3IgdXNpbmcgc3RhbmRhcmQgd29yZHMgZm9yIHRoaW5ncyB0aHJvdWdob3V0IHlvdXIgc2l0ZSBpcyBhIGJvbnVzLjwvcD4NCg0KPHA+SWYgdGhlIHBsdWdpbiBpcyBub3QgZGlzcGxheWluZyBhbnkgaW1hZ2VzLCBjaGVjayB5b3VyIGNhdGVnb3J5IG5hbWVzIGFyZSBjb3JyZWN0LCBhbmQgdGhhdCB5b3UgYXJlIHVzaW5nIDxjb2RlPnN1YmNhdHM9IjEiPC9jb2RlPiBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIHRoZSBjYXRlZ29yeSB0cmVlLiBUcnkgYWRkaW5nIDxjb2RlPmFsd2F5c19kaXNwbGF5PSIxIjwvY29kZT4gYW5kIHNlZSBpZiBhbiBpbWFnZSBzaG93cyB1cC4gSWYgaXQgZG9lc24ndCwgbm9uZSBvZiB5b3VyIGNob3NlbiBjYXRlZ29yaWVzIGV4aXN0ICh0cnkgcmVtb3ZpbmcgdGhlIGNhdGVnb3J5IG9wdGlvbiB0byBjaGVjaykuPC9wPg0KDQo8cD5UaGVyZSBpcyBhIGNoYW5jZSB0aGF0LCB1bmRlciB0eHAgdjQuMC40LCB5b3Ugd2lsbCBnZXQgdGhlIHNhbWUgaW1hZ2UgYmFjayBlYWNoIHRpbWUuIFRoaXMgY291bGQgYmUgYmVjYXVzZSBvZiB5b3VyIG9wdGlvbnMgKGNoZWNrIDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+LCA8Y29kZT5hdm9pZF90ZXh0PC9jb2RlPiwgPGNvZGU+Y29tcGFyZV90bzwvY29kZT4gYW5kIDxjb2RlPmNhdGVnb3J5PC9jb2RlPiBjYXJlZnVsbHkpIGJ1dCBtYXkgYWxzbyBiZSBiZWNhdXNlIHRoZSBpbWFnZSBpcyBiZWluZyBjYWNoZWQuIElmIHRoZSBzZXJ2ZXIgdGhpbmtzIHRoZSBjdXJyZW50IHBhZ2UgcmVxdWVzdCBpcyBpZGVudGljYWwgdG8gdGhlIGxhc3QsIGl0IGluc3RydWN0cyB0aGUgYnJvd3NlciB0byBzaG93IHRoZSBzYW1lIHBhZ2UgYXMgbGFzdCB0aW1lLiBJbnRlcm5ldCBFeHBsb3JlciBpcyBwYXJ0aWN1bGFybHkgYWRlcHQgYXQgdGhpcy48L3A+DQoNCjxwPklmIHRoaXMgaXMgY2F1c2luZyBhIHByb2JsZW0sIHRyeSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiAiU2VuZCBMYXN0LU1vZGlmaWVkIGhlYWRlciIgdG8gIm5vIiB1bmRlciBhZG1pbi0+cHJlZmVyZW5jZXMtPmFkdmFuY2VkLiBJdCBtYXkgaW5jcmVhc2Ugc2VydmVyIGxvYWQgYmVjYXVzZSBldmVyeSBwYWdlIGFuZCBpbWFnZSB3aWxsIGFsd2F5cyBiZSBzZW50IGZyb20gdGhlIHNlcnZlciwgYnV0IGF0IGxlYXN0IHlvdSdsbCBnZXQgYSByYW5kb20gaW1hZ2UgZWFjaCB0aW1lIDotKTwvcD4iO3M6NDoiY29kZSI7czo5MjcyOiIvLyB2MC4xICBJbml0aWFsIHB1YmxpYyByZWxlYXNlDQovLyB2MC4xMSBBZGRlZCBQRlggdG8gcXVlcnkgKHRoYW5rcyBtZXJjdXJ5KQ0KLy8gdjAuMTIgRml4ZWQgaGVscCB0byBpbmNsdWRlIHRyYWlsaW5nIHNsYXNoZXMgKHRoYW5rcyB2aXR0b3JpbykNCi8vIHYwLjEzIFVucmVsZWFzZWQuIEFkZGVkIGxvb2tfaW49Y2F0ZWdvcnkgYW5kIHJlZmVyZXINCi8vIHYwLjE0IEFkZGVkIG1hdGNoX3RleHQgYW5kIHVzZV9hbHQgKHRoYW5rcyBsdWtlcGVybXNuKQ0KLy8gdjAuMTUgQWRkZWQgYWx3YXlzX2Rpc3BsYXkgYW5kIGxpbWl0ICh0aGFua3MgbHVrZXBlcm1zbikNCi8vIHYwLjE1YSBCdWdmaXggZm9yIGxpbmtjYXB0aW9uICh0aGFua3MgbWVyY3VyeSkNCi8vIHYwLjE2IFRpZ2h0ZW5lZCBpbWFnZSgpIHBhcmFtcyBmb3IgdHhwIHY0LjAuNCBjb21wbGlhbmNlDQovLyB2MC4xNyBBZGRlZCB0aHVtYiwgbGlua3ByZWZpeCBhbmQgbGlua2FsdCBvcHRpb25zDQovLyB2MC4xN2EgYmlkIG9wdGlvbiBub3cgd29ya3Mgd2l0aCBleGlzdGluZyB1cmwgcGFyYW1zICh0aGFua3MgUGFwdWFzcykNCi8vIHYwLjE4IEFkZGVkIGltZ2NsYXNzIG9wdGlvbiAodGhhbmtzIERpZ2l0YWxSZWFsbSkNCi8vIHYwLjIgIE1ham9yIG92ZXJoYXVsLiBBZGRlZCBzdWJjYXRlZ29yeSBzdXBwb3J0ICh0aGFua3MgbHVrZXBlcm1zbiBhbmQgc2FudGhlbykuIFVzZXMgc21kX2xpYi4gRW5oYW5jZWQgbWF0Y2hfdGV4dC9hdm9pZF90ZXh0IHNvIGxvb2tfaW4gaXMgbm8gbG9uZ2VyIG5lZWRlZDsgZHJvcHBlZCB1c2VfYWx0IGFuZCBhZGRlZCBjb21wYXJlX3RvOyByZXBsYWNlZCBsaW5rY2FwdGlvbi9saW5rYWx0IHdpdGggbGlua19pbjsgYWRkZWQgaWRfcHJlZml4OyBsaW5rcHJlZml4IGlzIG5vdyBsaW5rX3ByZWZpeA0KLy8gdjAuMjEgQWRkZWQgTUxQKE11bHRpLUxpbmd1YWwgUGFjaykgc3VwcG9ydA0KLy8gdjAuMjIgQWRkZWQgcmF3X3VybCBvcHRpb24NCi8vIHYwLjIzIEFnYWluc3QgYmV0dGVyIGp1ZGdlbWVudCwgYWRkZWQgdGFyZ2V0IG9wdGlvbiAodGhhbmtzIGpzdHViYnMsIGNkdGF2aWppdCkNCg0KcmVnaXN0ZXJfY2FsbGJhY2soJ3NtZF9yYmFuX2VudW1fc3RyJywgJ2wxMG4uZW51bWVyYXRlX3N0cmluZ3MnKTsNCmdsb2JhbCAkc21kX3JiYW5fc3RyOw0KJHNtZF9yYmFuX3N0ciA9IGFycmF5KCk7DQoNCmZ1bmN0aW9uIHNtZF9yYW5kb21fYmFubmVyKCRhdHRzKSB7DQoJcmVxdWlyZV9wbHVnaW4oJ3NtZF9saWInKTsNCglnbG9iYWwgJGltZ19kaXI7DQoNCgkvLyAqKiBhbGxvd2FibGUgb3B0aW9ucyAoZGVmYXVsdCBsaXN0ZWQgZmlyc3QpDQoJJGNvbXBhcmVUbyA9IGFycmF5KCJuYW1lIiwiaWQiLCJhbHQiLCJjYXB0aW9uIiwiY2F0ZWdvcnkiKTsNCgkkbGlua0luID0gYXJyYXkoIiIsImNhcHRpb24iLCJhbHQiKTsNCg0KCS8vICoqIHBsdWdpbiBvcHRpb25zDQoJaWYgKGlzX2FycmF5KCRhdHRzKSkgZXh0cmFjdCgkYXR0cyk7DQoJJGNhdGVnb3J5ID0gaXNzZXQoJGNhdGVnb3J5KSA/ICgoJGNhdGVnb3J5PT0iIikgPyAiJSIgOiBkb1NsYXNoKCRjYXRlZ29yeSkpIDogIiUiOw0KCSRtYXRjaF90ZXh0ID0gaXNzZXQoJG1hdGNoX3RleHQpID8gJG1hdGNoX3RleHQgOiAiIjsNCgkkYXZvaWRfdGV4dCA9IGlzc2V0KCRhdm9pZF90ZXh0KSA/ICRhdm9pZF90ZXh0IDogIiI7DQoJJHJlZmVyZXIgPSBpc3NldCgkcmVmZXJlcikgPyAkcmVmZXJlciA6ICJiaWQiOw0KCSRsaW1pdCA9IGlzc2V0KCRsaW1pdCkgPyAkbGltaXQ6ICIxIjsNCgkkaW1nY2xhc3MgPSBpc3NldCgkaW1nY2xhc3MpID8gJGltZ2NsYXNzIDogIiI7DQoJJGlkX3ByZWZpeCA9IGlzc2V0KCRpZF9wcmVmaXgpID8gJGlkX3ByZWZpeCA6ICJhcnRpY2xlLSI7DQoJJGxpbmtfcHJlZml4ID0gaXNzZXQoJGxpbmtfcHJlZml4KSA/ICRsaW5rX3ByZWZpeCA6ICIiOw0KCSRsaW5rX2luID0gKGlzc2V0KCRsaW5rX2luKSAmJiBpbl9hcnJheSgkbGlua19pbiwkbGlua0luKSkgPyAkbGlua19pbiA6ICRsaW5rSW5bMF07DQoJJHN1YmNhdHMgPSBpc3NldCgkc3ViY2F0cykgPyB0cnVlIDogZmFsc2U7DQoJJHRodW1iID0gaXNzZXQoJHRodW1iKSA/IHRydWUgOiBmYWxzZTsNCgkkcmF3X3VybCA9IGlzc2V0KCRyYXdfdXJsKSA/IHRydWUgOiBmYWxzZTsNCgkkYWx3YXlzX2Rpc3BsYXkgPSBpc3NldCgkYWx3YXlzX2Rpc3BsYXkpID8gdHJ1ZSA6IGZhbHNlOw0KCSR0YXJnZXQgPSBpc3NldCgkdGFyZ2V0KSA/ICcgdGFyZ2V0PSInIC4kdGFyZ2V0LiAnIicgOiAiIjsNCg0KCSRjb21wYXJlVG9PcHRzID0gYXJyYXkoKTsNCglpZiAoaXNzZXQoJGNvbXBhcmVfdG8pKSB7DQoJCSRjdExpc3QgPSBwcmVnX3NwbGl0KCcvWyxcc10rLycsJGNvbXBhcmVfdG8sLTEsUFJFR19TUExJVF9OT19FTVBUWSk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkY3RMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZihpbl9hcnJheSgkY3RMaXN0WyRpZHhdLCRjb21wYXJlVG8pKSB7DQoJCQkJJGNvbXBhcmVUb09wdHNbXSA9ICRjdExpc3RbJGlkeF07DQoJCQl9DQoJCX0NCgl9DQoJaWYoY291bnQoJGNvbXBhcmVUb09wdHMpIDw9IDApIHsNCgkJJGNvbXBhcmVUb09wdHNbXSA9ICRjb21wYXJlVG9bMF07DQoJfQ0KDQoJLy8gKiogaW5pdCB2YXJpYWJsZXMNCgkkd2hlcmUgPSAiIjsNCgkkZmllbGRzID0gImlkLCBleHQsIGNhcHRpb24sIGFsdCI7DQoJJG1hdGNoQXJyYXkgPSBhcnJheSgpOw0KCSRhdm9pZEFycmF5ID0gYXJyYXkoKTsNCgkkbWF0Y2hWYXJzID0gYXJyYXkoIj9jIiwgIj9zIiwgIj90IiwgIj9pZCIsICI/ZmllbGQiKTsNCgkkd2hlcmVBTkQgPSBhcnJheSgpOw0KDQoJLy8gKiogcHJvY2VzcyBtYXRjaF90ZXh0DQoJaWYgKCRtYXRjaF90ZXh0ICE9ICIiICkgew0KCQkvLyBDb252ZXJ0IHRoZSBzdHJpbmcgaW50byBhbiBTUUwtc3R5bGUgJ2luJyBsaXN0Lg0KCQkvLyBQcm9jZXNzIHRoZSBzcGVjaWFsICgnP3NvbWV0aGluZycpIGNhc2VzIHRvby4NCgkJJHJldEFycmF5ID0gc21kX2dldEF0dHMoJG1hdGNoX3RleHQsICRtYXRjaFZhcnMsICRpZF9wcmVmaXgpOw0KCQkkbWF0Y2hBcnJheSA9ICRyZXRBcnJheVswXTsNCg0KCQkvLyBNYWtlIHVwIHRoZSBXSEVSRSBzdGF0ZW1lbnQgZnJvbSB0aGUgY29tYmluZWQgbGlzdCBvZiBtYXRjaGVzLg0KCQkvLyBUaGUgY2F0ZWdvcmllcy9pbWFnZSBJRHMgYXJlIE9SZWQgdG9nZXRoZXIgaW4gYnJhY2tldHMgZmlyc3QNCgkJLy8gYmVmb3JlIHRoZSBuZWdhdGlvbiBvcHRpb25zIGFyZSB0YWNrZWQgb24gYXMgQU5EcyBhZnRlcndhcmRzDQoJCSR3aGVyZVRtcCA9ICIiOw0KCQkkd2hlcmVPUiA9IGFycmF5KCk7DQoNCgkJaWYgKGNvdW50KCRtYXRjaEFycmF5KSA+IDApIHsNCgkJCWZvcmVhY2ggKCRjb21wYXJlVG9PcHRzIGFzICRjb21wKSB7DQoJCQkJJGhvbGQgPSBhcnJheSgpOw0KCQkJCWZvciAoJGlkeCA9IGNvdW50KCRtYXRjaEFycmF5KTsgJGlkeCA+PTA7ICRpZHgtLSkgew0KCQkJCQlpZiAoZW1wdHkoJG1hdGNoQXJyYXlbJGlkeF0pKSB7DQoJCQkJCQl1bnNldCgkbWF0Y2hBcnJheVskaWR4XSk7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkaG9sZFtdID0gJGNvbXAgLiAiIExJS0UgJyUiIC4kbWF0Y2hBcnJheVskaWR4XS4gIiUnIjsNCgkJCQkJfQ0KCQkJCX0NCgkJCQkkd2hlcmVUbXAgPSBpbXBsb2RlKCIgT1IgIiwkaG9sZCk7DQoNCgkJCQlpZiAodHJpbSgkd2hlcmVUbXApICE9ICIiKSB7DQoJCQkJCSR3aGVyZU9SW10gPSAkd2hlcmVUbXA7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJaWYgKGNvdW50KCR3aGVyZU9SKSA+IDApIHsNCgkJCSR3aGVyZUFORFtdID0gJygnIC5pbXBsb2RlKCIgT1IgIiwkd2hlcmVPUikuICcpJzsNCgkJfQ0KCX0NCg0KCS8vICoqIGRvIHRoZSBzYW1lIGZvciBhdm9pZF90ZXh0DQoJaWYgKCRhdm9pZF90ZXh0ICE9ICIiICkgew0KCQkvLyBDb252ZXJ0IHRoZSBzdHJpbmcgaW50byBhbiBTUUwtc3R5bGUgJ2luJyBsaXN0Lg0KCQkvLyBQcm9jZXNzIHRoZSBzcGVjaWFsICgnP3NvbWV0aGluZycpIGNhc2VzIHRvby4NCgkJJHJldEFycmF5ID0gc21kX2dldEF0dHMoJGF2b2lkX3RleHQsICRtYXRjaFZhcnMsICRpZF9wcmVmaXgpOw0KCQkkYXZvaWRBcnJheSA9ICRyZXRBcnJheVswXTsNCg0KCQkvLyBNYWtlIHVwIHRoZSBXSEVSRSBzdGF0ZW1lbnQgZnJvbSB0aGUgY29tYmluZWQgbGlzdCBvZiBOT1QgbWF0Y2hlcy4NCgkJJHdoZXJlVG1wID0gIiI7DQoJCSR3aGVyZU9SID0gYXJyYXkoKTsNCg0KCQlpZiAoY291bnQoJGF2b2lkQXJyYXkpID4gMCkgew0KCQkJZm9yZWFjaCAoJGNvbXBhcmVUb09wdHMgYXMgJGNvbXApIHsNCgkJCQkkaG9sZCA9IGFycmF5KCk7DQoJCQkJZm9yICgkaWR4ID0gY291bnQoJGF2b2lkQXJyYXkpOyAkaWR4ID49MDsgJGlkeC0tKSB7DQoJCQkJCWlmIChlbXB0eSgkYXZvaWRBcnJheVskaWR4XSkpIHsNCgkJCQkJCXVuc2V0KCRhdm9pZEFycmF5WyRpZHhdKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRob2xkW10gPSAkY29tcCAuICIgTElLRSAnJSIgLiRhdm9pZEFycmF5WyRpZHhdLiAiJSciOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR3aGVyZVRtcCA9IGltcGxvZGUoIiBPUiAiLCRob2xkKTsNCg0KCQkJCWlmICh0cmltKCR3aGVyZVRtcCkgIT0gIiIpIHsNCgkJCQkJJHdoZXJlT1JbXSA9ICR3aGVyZVRtcDsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlpZiAoY291bnQoJHdoZXJlT1IpID4gMCkgew0KCQkJJHdoZXJlQU5EW10gPSAnTk9UICgnIC5pbXBsb2RlKCIgT1IgIiwkd2hlcmVPUikuICcpJzsNCgkJfQ0KCX0NCg0KCS8vIFdvcmsgb3V0IHRoZSBpbWFnZSBjYXRlZ29yaWVzIHRvIHNlYXJjaA0KCSRjYXRzaW4gPSBhcnJheSgpOw0KCSRmdWxsQ2F0TGlzdCA9IGFycmF5KCk7DQoJJG5vdENhdExpc3QgPSBhcnJheSgpOw0KCSRjYXRWYXJzID0gYXJyYXkoIj9jIiwiP2lkIiwiP3MiLCI/dCIsIj9maWVsZCIsIiFjIiwiIWlkIiwiIXMiLCIhdCIsIiFmaWVsZCIpOw0KDQoJJHJldEFycmF5ID0gc21kX2dldEF0dHMoJGNhdGVnb3J5LCAkY2F0VmFycywgJGlkX3ByZWZpeCk7DQoJJGZ1bGxDYXRMaXN0ID0gJHJldEFycmF5WzBdOw0KCSRub3RDYXRMaXN0ID0gJHJldEFycmF5WzFdOw0KDQoJLy8gaW5jbHVkZWQgY2F0ZWdvcmllcw0KCSR0bXBhID0gYXJyYXkoKTsNCglmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZ1bGxDYXRMaXN0KTsgJGlkeCsrKSB7DQoJCWlmICgkc3ViY2F0cykgew0KCQkJJGNhdGVncyA9IHNtZF9nZXRTdWJDYXRzKCRmdWxsQ2F0TGlzdFskaWR4XSwnaW1hZ2UnKTsNCgkJCWZvciAoJGpkeCA9IDA7ICRqZHggPCBjb3VudCgkY2F0ZWdzKTsgJGpkeCsrKSB7DQoJCQkJaWYgKCRjYXRlZ3NbJGpkeF1bJ25hbWUnXSAhPSAicm9vdCIpIHsNCgkJCQkJJHRtcGFbXSA9ICInIiAuJGNhdGVnc1skamR4XVsnbmFtZSddLiAiJyI7DQoJCQkJfQ0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJJHRtcGFbXSA9ICInIiAuJGZ1bGxDYXRMaXN0WyRpZHhdLiAiJyI7DQoJCX0NCgl9DQoJaWYgKGNvdW50KCR0bXBhKSA+IDApIHsNCgkJJGNhdHNpbltdID0gImNhdGVnb3J5IElOICgiIC5pbXBsb2RlKCIsIiwgJHRtcGEpLiAiKSI7DQoJfQ0KDQoJLy8gZXhjbHVkZWQgY2F0ZWdvcmllcw0KCSR0bXBhID0gYXJyYXkoKTsNCglmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJG5vdENhdExpc3QpOyAkaWR4KyspIHsNCgkJaWYgKCRzdWJjYXRzKSB7DQoJCQkkY2F0ZWdzID0gc21kX2dldFN1YkNhdHMoJG5vdENhdExpc3RbJGlkeF0sJ2ltYWdlJyk7DQoJCQlmb3IgKCRqZHggPSAwOyAkamR4IDwgY291bnQoJGNhdGVncyk7ICRqZHgrKykgew0KCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7DQoJCQkJCSR0bXBhW10gPSAiJyIgLiRjYXRlZ3NbJGpkeF1bJ25hbWUnXS4gIiciOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIHsNCgkJCSR0bXBhW10gPSAiJyIgLiRub3RDYXRMaXN0WyRpZHhdLiAiJyI7DQoJCX0NCgl9DQoJaWYgKGNvdW50KCR0bXBhKSA+IDApIHsNCgkJJGNhdHNpbltdID0gImNhdGVnb3J5IE5PVCBJTiAoIiAuaW1wbG9kZSgiLCIsICR0bXBhKS4gIikiOw0KCX0NCg0KCWlmICgoJGNhdGVnb3J5ID09ICIlIikgfHwgKGNvdW50KCRjYXRzaW4pIDw9IDApKSB7DQoJCSR3aGVyZUNhdCA9ICJjYXRlZ29yeSBMSUtFICclJyI7DQoJfSBlbHNlIHsNCgkJJHdoZXJlQ2F0ID0gaW1wbG9kZSgiIEFORCAiLCAkY2F0c2luKTsNCgl9DQoNCgkvLyAqKiBtYWtlIHVwIHRoZSBmaW5hbCBXSEVSRSBzdGF0ZW1lbnQNCgkkd2hlcmVPQiA9ICIgT1JERVIgQlkgUkFORCgpIExJTUlUICRsaW1pdCI7DQoJJHdoZXJlID0gJHdoZXJlQ2F0IC4gKChjb3VudCgkd2hlcmVBTkQpPjApID8gIiBBTkQgIiAuaW1wbG9kZSgiIEFORCAiLCR3aGVyZUFORCkgOiAiIikgLiAkd2hlcmVPQjsNCg0KCS8vICoqIHB1bGwgb3V0IHRoZSByZXF1ZXN0ZWQgaW1hZ2VzDQoJJHJzID0gc2FmZV9yb3dzKCRmaWVsZHMsICd0eHBfaW1hZ2UnLCAkd2hlcmUpOw0KCWlmICghJHJzKSB7DQoJCWlmICgkYWx3YXlzX2Rpc3BsYXkpIHsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJHdoZXJlQ2F0IC4gJHdoZXJlT0IpOw0KCQl9DQoJfQ0KDQoJLy8gKiogZGlzcGxheSB0aGVtDQoJJHN0YXRpY3ByZWZpeCA9ICJodHRwOi8vIjsNCgkkb3V0U3RyID0gJyc7DQoJaWYoJHJzKSB7DQoJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCSRsaW5rTmFtZT10cmltKCgkbGlua19pbj09ImFsdCIpID8gJHJvd1snYWx0J10gOiAoKCRsaW5rX2luPT0iY2FwdGlvbiIpID8gJHJvd1snY2FwdGlvbiddIDogIiIpKTsNCgkJCSRsaW5rdXJsID0gJyc7DQoNCgkJCS8vICoqIGhhbmRsZSBsaW5rcw0KCQkJaWYgKHN0cmxlbigkbGlua05hbWUpID4gMCkgew0KCQkJCWlmIChzdWJzdHIoJGxpbmtOYW1lLCAwLCBzdHJsZW4oJHN0YXRpY3ByZWZpeCkpID09PSAkc3RhdGljcHJlZml4KSB7DQoJCQkJCSRsaW5rVHlwZSA9ICJGVUxMIjsNCgkJCQl9IGVsc2UgaWYgKCRsaW5rTmFtZVswXSA9PSAnLycpIHsNCgkJCQkJaWYgKCRsaW5rX3ByZWZpeCA9PSAnJykgew0KCQkJCQkJJGxpbmtUeXBlID0gIlJPT1RfTk9fUFJFRklYIjsNCgkJCQkJfSBlbHNlIGlmIChzdWJzdHIoJGxpbmtfcHJlZml4LCAwLCBzdHJsZW4oJHN0YXRpY3ByZWZpeCkpID09PSAkc3RhdGljcHJlZml4KSB7DQoJCQkJCQkkbGlua1R5cGUgPSAiRlVMTF9QUkVGSVgiOw0KCQkJCQl9IGVsc2UgaWYgKCRsaW5rX3ByZWZpeFswXSA9PSAnLycpIHsNCgkJCQkJCSRsaW5rVHlwZSA9ICJST09UIjsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRsaW5rVHlwZSA9ICJSRUxBVElWRSI7DQoJCQkJCX0NCgkJCQl9IGVsc2UgaWYgKCRsaW5rX3ByZWZpeCA9PSAnJykgew0KCQkJCQkkbGlua1R5cGUgPSAiUkVMQVRJVkUiOw0KCQkJCX0gZWxzZSBpZiAoJGxpbmtfcHJlZml4WzBdID09ICcvJykgew0KCQkJCQkkbGlua1R5cGUgPSAiUk9PVCI7DQoJCQkJfSBlbHNlIGlmIChzdWJzdHIoJGxpbmtfcHJlZml4LCAwLCBzdHJsZW4oJHN0YXRpY3ByZWZpeCkpID09PSAkc3RhdGljcHJlZml4KSB7DQoJCQkJCSRsaW5rVHlwZSA9ICJGVUxMX1BSRUZJWCI7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJGxpbmtUeXBlID0gIlJFTEFUSVZFIjsNCgkJCQl9DQoJCQkJc3dpdGNoICgkbGlua1R5cGUpIHsNCgkJCQkJY2FzZSAiRlVMTCI6DQoJCQkJCQkkbGlua3VybCA9ICRsaW5rTmFtZTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlICJST09UX05PX1BSRUZJWCI6DQoJCQkJCQkkbGlua3VybCA9IHNpdGVfdXJsKCRhdHRzKSAuIHN1YnN0cigkbGlua05hbWUsMSk7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAiUk9PVCI6DQoJCQkJCQkkbGlua3VybCA9IHNpdGVfdXJsKCRhdHRzKSAuIHN1YnN0cigkbGlua19wcmVmaXgsMSkgLiAkbGlua05hbWU7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAiUkVMQVRJVkUiOg0KCQkJCQlkZWZhdWx0Og0KCQkJCQkJJGxpbmt1cmwgPSAkbGlua19wcmVmaXggLiAkbGlua05hbWU7DQoJCQkJCQlicmVhazsNCgkJCQl9DQoJCQl9DQoJCQkvLyAqKiB0aHJvdyBpbWFnZSBvdXQgdG8gdGhlIHBhZ2UNCgkJCWlmICgkcmF3X3VybCkgew0KCQkJCSRvdXRTdHIgPSBodS4kaW1nX2RpciAuICIvIiAuJHJvd1snaWQnXSAuICgoJHRodW1iKSA/ICd0JyA6ICcnKSAuICRyb3dbJ2V4dCddOw0KCQkJfSBlbHNlIHsNCgkJCQkkaW1nT3B0aW9ucyA9IGFycmF5KCJpZCIgPT4gJHJvd1snaWQnXSk7DQoJCQkJaWYgKCRpbWdjbGFzcyAhPSAnJykgew0KCQkJCQkkaW1nT3B0aW9uc1siY2xhc3MiXSA9ICRpbWdjbGFzczsNCgkJCQl9DQoJCQkJaWYgKCgkbGlua19pbiAhPSAiIikgJiYgKHN0cmxlbigkbGlua3VybCkgPiAwKSkgew0KCQkJCQlpZiAoJHJlZmVyZXIgIT0gIiIpIHsNCgkJCQkJCSRyZWZlcnR4dCA9IHNtZF9hZGRRU1ZhcigkbGlua3VybCwgJHJlZmVyZXIsICRyb3dbJ2lkJ10pOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHJlZmVydHh0ID0gJGxpbmt1cmw7DQoJCQkJCX0NCgkJCQkJJG91dFN0ciAuPSAnPGEgaHJlZj0iJyAuJHJlZmVydHh0LiAnIicgLiR0YXJnZXQuICc+JyAuICgoJHRodW1iKSA/IHRodW1ibmFpbCgkaW1nT3B0aW9ucykgOiBpbWFnZSgkaW1nT3B0aW9ucykpLiAnPC9hPic7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG91dFN0ciAuPSAoKCR0aHVtYikgPyB0aHVtYm5haWwoJGltZ09wdGlvbnMpIDogaW1hZ2UoJGltZ09wdGlvbnMpKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9IGVsc2Ugew0KCQlyZXR1cm47DQoJfQ0KDQoJcmV0dXJuICRvdXRTdHI7DQp9DQovLyBDYWxsYmFjayBmb3IgTUxQIHN0cmluZyByZXBsYWNlbWVudA0KZnVuY3Rpb24gc21kX3JiYW5fZW51bV9zdHIoJGV2ZW50LCAkc3RlcD0nJywgJHByZT0wKSB7DQoJZ2xvYmFsICRzbWRfcmJhbl9zdHIsICRzbWRNTFA7DQoJJHIgPSBhcnJheQkoDQoJCQknb3duZXInID0+ICdzbWRfcmFuZG9tX2Jhbm5lcicsDQoJCQkncHJlZml4JyA9PiAkc21kTUxQWydzbWRfcmFuZG9tX2Jhbm5lciddLA0KCQkJJ2xhbmcnID0+ICdlbi1nYicsIC8vIERlZmF1bHQgbGFuZ3VhZ2UNCgkJCSdldmVudCcgPT4gJ3B1YmxpYycsIC8vIHB1YmxpYy9hZG1pbi9jb21tb24gPSB3aGljaCBpbnRlcmZhY2UgdGhlIHN0cmluZ3Mgd2lsbCBiZSBsb2FkZWQgaW50bw0KCQkJJ3N0cmluZ3MnID0+ICRzbWRfcmJhbl9zdHIsDQoJCSk7DQoJcmV0dXJuICRyOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6MzoibWQ1IjtzOjMyOiJiNzA1NGYwMjlmMTMxZjJmNzQxNTk0ZjQzNzg3ZTE1OSI7fQ==