# smd_random_banner 0.18 # 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: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTc6InNtZF9yYW5kb21fYmFubmVyIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjY6Imh0dHA6Ly93d3cuc3RlZmRhd3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4xOCI7czoxMToiZGVzY3JpcHRpb24iO3M6NjE6IlJhbmRvbSBpbWFnZSBieSBjYXRlZ29yeSB3aXRoIGEgZmV3IGV4dHJhIGFkdmVydGlzaW5nIG9wdGlvbnMiO3M6NDoiaGVscCI7czoxMDAyMjoiPGI+QmFzaWMgaWRlYTwvYj4NCg0KPHA+QmFzZWQgc2hhbWVsZXNzbHkgb24gZHJ1X3JhbmRvbV9pbWFnZSAodGhhbmtzISkgdGhpcyBwbHVnaW4gZXh0ZW5kcyB0aGUgaWRlYSBhIGxpdHRsZS4gVGhlIGNvbmNlcHQgaXM6IHdoYXQgaWYgeW91IHdhbnQgdG8gYWR2ZXJ0aXNlIG90aGVyIHBhcnRzIG9mIHlvdXIgc2l0ZSAoZS5nLiBvdGhlciBwcm9kdWN0cy9zZXJ2aWNlcykgdXNpbmcgYSBiYW5uZXIgYWQ/IFlvdSB3YW50IGFuIGltYWdlL2FuaW1hdGVkIGdpZi93aGF0ZXZlciB0byBhZHZlcnRpc2UgdGhlIHByb2R1Y3Qgb3Igc2VydmljZSBhbmQgd2hlbiBwZW9wbGUgY2xpY2sgb24gaXQsIGJlIHRha2VuIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlIHNpdGUuIFRoaXMgY291bGQgb2YgY291cnNlIGJlIHVzZWQgZm9yIGxpbmtzIHRvIGV4dGVybmFsIHNpdGVzIGlmIHlvdSB3aXNoLg0KDQo8cD5JbiBpdHMgYmFzZSBmb3JtLCB0aGlzIHBsdWdpbiBmdW5jdGlvbnMgZXhhY3RseSBhcyBkcnVfcmFuZG9tX2ltYWdlLiBTbzo8L3A+DQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIC8mZ3Q7PC9jb2RlPg0KDQo8cD5jaG9vc2VzIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyB1cGxvYWRlZCB2aWEgdGV4dHBhdHRlcm4ncyBpbWFnZSBpbnRlcmZhY2UuPC9wPg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgLyZndDs8L2NvZGU+DQoNCjxwPmNob29zZXMgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIGluIHRoZSAnYmFubmVycycgY2F0ZWdvcnkuIElmIGF0IGFueSBwb2ludCwgdGhlIHBhcnRpY3VsYXIgb3B0aW9ucyByZXN1bHQgaW4gbWF0Y2hpbmcgbm8gaW1hZ2VzLCB0aGUgcGx1Z2luIHdpbGwgcmV0dXJuIG5vdGhpbmcuIFRoaXMgaXMgc28geW91IGNhbiB1c2UgcGx1Z2lucyBzdWNoIGFzIENva2UgSGFycmluZ3RvbidzIGV4Y2VsbGVudCBjaGhfaWZfZGF0YSB0byBkZXRlY3QgdGhpcyBhbmQgYnJhbmNoIHRvIGEgImRlZmF1bHQiIGltYWdlIG9yIHNvbWV0aGluZy48L3A+DQoNCjxwPkFsdGVybmF0aXZlbHksIGlmIHlvdSBhbHdheXMgd2FudCBhIHBpY3R1cmUgdG8gYmUgZGlzcGxheWVkIG5vIG1hdHRlciB3aGF0LCBzcGVjaWZ5IHRoZSA8Y29kZT5hbHdheXNfZGlzcGxheT0iMSI8L2NvZGU+IHBhcmFtZXRlci4gSW4gdGhlIGV2ZW50IG9mIG5vIG1hdGNoZXMgYmVpbmcgZm91bmQsIHRoZSBwbHVnaW4gd2lsbCB0cnkgYWdhaW4ganVzdCBmcm9tIHRoZSBnaXZlbiBjYXRlZ29yeSAoaWYgc3VwcGxpZWQpIG9yIGZyb20gdGhlIHdob2xlIHBvb2wgb2YgaW1hZ2VzIG90aGVyd2lzZS48L3A+DQoNCjxwPklmIGZvciBzb21lIHJlYXNvbiB5b3Ugd2FudCB0aGUgaW1hZ2UgdGh1bWJuYWlsIHRvIGJlIGRpc3BsYXllZCBpbnN0ZWFkIG9mIHRoZSBmdWxsIGltYWdlLCBhZGQgdGhlIDxjb2RlPnRodW1iPSIxIjwvY29kZT4gb3B0aW9uLjwvcD4NCg0KPGI+QWRqdXN0aW5nIHJhbmRvbW5lc3M8L2I+DQoNCjxwPk5vdyBjb21lcyB0aGUgZnVuIHBhcnQuIFdoYXQgaWYgeW91IG9ubHkgd2FudCBpbWFnZXMgdG8gYXBwZWFyIHRoYXQgaGF2ZSBwYXJ0aWN1bGFyIHdvcmRzIGluIHRoZWlyIGZpbGVuYW1lPyAob3IgQWx0IFRleHQgLSBzZWUgb3B0aW9uIDxjb2RlPnVzZV9hbHQ8L2NvZGU+IGJlbG93KSBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIHpvbyB3ZWJzaXRlIGFuZCBvbmx5IHdhbnRlZCBwaWN0dXJlcyBvZiBsaW9ucyB0byBhcHBlYXIgb24gdGhlIExpb25zIHBhZ2UuPC9wPg0KDQo8cD5PciwgY29udmVyc2VseSwgd2hhdCBpZiB5b3UgPGk+ZG9uJ3Q8L2k+IHdhbnQgYSBiYW5uZXIgdG8gYXBwZWFyIHRoYXQgYWR2ZXJ0aXNlcyB0aGUgcHJvZHVjdCB5b3VyIGN1c3RvbWVyIGlzIGFscmVhZHkgbG9va2luZyBhdD8gSXQgbG9va3MgYSBiaXQgc3RyYW5nZSB0byBoYXZlIGFuIGFkdmVydCBmb3IgInByb2R1Y3RBIiBvbiBhIHBhZ2UgYWJvdXQgInByb2R1Y3RBIiEgVGhhdCdzIHdoZXJlIHRoZSBuZXh0IHRocmVlIG9wdGlvbnMgY29tZSBpbjogPGNvZGU+bWF0Y2hfdGV4dDwvY29kZT4sIDxjb2RlPmF2b2lkX3RleHQ8L2NvZGU+IGFuZCA8Y29kZT5sb29rX2luPC9jb2RlPi48L3A+DQoNCjxwPldoYXQgdGhlc2UgZG8gaXMgY29tcGFyZSB0aGUgZmlsZW5hbWUgb2YgeW91ciBiYW5uZXIgaW1hZ2UgdG8gc29tZSB0ZXh0IGFuZCBpZiBpdCBtYXRjaGVzLCB0aGF0IHBhcnRpY3VsYXIgaW1hZ2Ugd2lsbCBlaXRoZXIgYmUgZGlzcGxheWVkIChtYXRjaF90ZXh0KSBvciA8aT5ub3Q8L2k+IGRpc3BsYXllZCAoYXZvaWRfdGV4dCkuIFNvbWUgZXhhbXBsZXM6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSJwZW5ndWluIiAvJmd0OzwvY29kZT4NCg0KPHA+VGhhdCB3aWxsIGNob29zZSBhIHJhbmRvbSBpbWFnZSBmcm9tIGFsbCBpbWFnZXMgaW4gdGhlICdiYW5uZXJzJyBjYXRlZ29yeSB0aGF0IGhhdmUgdGhlIHdvcmQgInBlbmd1aW4iIGluIHRoZWlyIHRpdGxlLjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgYXZvaWRfdGV4dD0icHJvZHVjdDEiIC8mZ3Q7PC9jb2RlPg0KDQo8cD5UaGF0IHdpbGwgY2hvb3NlIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyBpbiB0aGUgJ2Jhbm5lcnMnIGNhdGVnb3J5IGJ1dCBpZ25vcmVzIGFueSBpbWFnZSBmaWxlbmFtZXMgdGhhdCBjb250YWluIHRoZSB0ZXh0ICdwcm9kdWN0MScuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYWQgbW9yZSB0aGFuIG9uZSBiYW5uZXIgcGVyIHByb2R1Y3QgbGlrZTo8L3A+DQo8dWw+DQo8bGk+YmFubmVyX3Byb2R1Y3QxX0EuanBnPC9saT4NCjxsaT5iYW5uZXJfcHJvZHVjdDFfQi5qcGc8L2xpPg0KPGxpPmJhbm5lcl9wcm9kdWN0Ml9BLmpwZzwvbGk+DQo8bGk+Li4uPC9saT4NCjwvdWw+DQoNCjxwPmFzIGl0IHdvdWxkIGV4Y2x1ZGUgYWxsIG9mIHByb2R1Y3QxJ3MgaW1hZ2VzLiBCb3RoIG9wdGlvbnMgY2FuIGFsc28gdGFrZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzIHRvIGlnbm9yZSwgZS5nLiA8Y29kZT5tYXRjaF90ZXh0PSJsbGFtYSxwZW5ndWluIjwvY29kZT4gb3IgPGNvZGU+YXZvaWRfdGV4dD0icHJvZHVjdDEscHJvZHVjdDIscHJvZHVjdDgiPC9jb2RlPiBOb3RlOiBubyBzcGFjZXMgYXJvdW5kIHRoZSBjb21tYXMhPC9wPg0KDQo8cD5UaGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkIGluIHRhbmRlbSB0byBjcmVhdGUgc29tZSBjcmF6eSBicmFpbi1iZW5kaW5nIGNvbWJpbmF0aW9ucy48L3A+DQoNCjxiPldoYXQgYWJvdXQgYWx0IHRleHQ/PC9iPg0KDQo8cD5JZiB5b3UndmUgYWxyZWFkeSBsb2FkZWQgYWxsIHlvdXIgaW1hZ2VzIGFuZCB0aGUgcHJvc3BlY3Qgb2YgZ29pbmcgdGhyb3VnaCB0aGVtIHRvIGNyZWF0ZSBhIG5hbWluZyBjb252ZW50aW9uIGlzIGRhdW50aW5nLCB0cnkgYWRkaW5nIHRoZSA8Y29kZT51c2VfYWx0PSIxIjwvY29kZT4gb3B0aW9uICgnMScgaXMgYSBjb252ZW5pZW5jZSwgaXQgY291bGQgYmUgYW55dGhpbmcgcmVhbGx5KS4gVGhlbiwgaW5zdGVhZCBvZiBsb29raW5nIGluIHRoZSBpbWFnZSBmaWxlbmFtZSwgaXQgd2lsbCBsb29rIGluIHRoZSBpbWFnZSdzICdBbHQgVGV4dCcgZm9yIHdvcmRzIHRvIG1hdGNoL2V4Y2x1ZGUuPC9wPg0KDQo8Yj5HZXR0aW5nIHdpbGQ8L2I+DQoNCjxwPk5vdyB0aGluZ3MgZ2V0IGV2ZW4gbW9yZSB3YXJwZWQuIFNpbmNlIHlvdSBvZnRlbiBkb24ndCBrbm93IHdoaWNoIHByb2R1Y3QgcGFnZSB5b3VyIGN1c3RvbWVycyB3aWxsIGxvb2sgYXQsIHlvdSBjYW4gdXNlIHRoZSBzcGVjaWFsIHdpbGRjYXJkICI/IiBhcyBhbiBvcHRpb24gaW4geW91ciBsaXN0IG9mIHdvcmRzIHRvIG1hdGNoIG9yIGF2b2lkLiBXaGF0IHRoaXMgZG9lcyBpcyBsb29rIGF0IHRoZSBjdXJyZW50IHNlY3Rpb24gbmFtZSBvZiB0aGUgcGFnZSBiZWluZyBkaXNwbGF5ZWQgYW5kIHVzZSB0aGF0IGFzIG9uZSBvZiB5b3VyIGlnbm9yZSB3b3Jkcy4gU28gaWYgYSBwZXJzb24gd2FzIG9uIHBhZ2UgPGNvZGU+d3d3Lm1lZ2F6b28uY29tL2xpb25zL3RoZS1odW1ibGUtbGlvbjwvY29kZT4gYW5kIHRoZSBwbHVnaW4gd2FzIGNhbGxlZCB0aHVzOjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0iPyIgLyZndDs8L2NvZGU+DQoNCjxwPmFueSBpbWFnZSBuYW1lIGluIHRoZSAiYmFubmVycyIgY2F0ZWdvcnkgdGhhdCBoYWQgdGhlIHRleHQgImxpb25zIiBpbiBpdCB3b3VsZCBiZSBmYWlyIGdhbWUgZm9yIGFwcGVhcmluZyBvbiB0aGUgcGFnZS4gQWdhaW4sIHlvdSBjYW4gZG8gdGhlIHJldmVyc2UgYnkgdXNpbmcgYXZvaWRfdGV4dDo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIGF2b2lkX3RleHQ9Ij8iIC8mZ3Q7PC9jb2RlPg0KDQo8cD5UaGlzIG1lYW5zIHRoYXQgaWYgeW91IGFycmFuZ2UgeW91ciBzaXRlIHN1Y2ggdGhhdCBlYWNoIHByb2R1Y3QgaGFzIGEgc2VwYXJhdGUgc2VjdGlvbiwgeW91IGNhbiB0aGVuIG5hbWUgeW91ciBiYW5uZXIgaW1hZ2VzIChvciBhbHQgdGV4dCkgaW4gc3VjaCBhIHdheSB0aGF0IGNlcnRhaW4gaW1hZ2VzIHdvbid0IGJlIGRpc3BsYXllZCB3aGVuIGEgdXNlciB2aXNpdHMgYSBwYXJ0aWN1bGFyIHNlY3Rpb24uPC9wPg0KDQo8cD5Zb3UgY2FuIHVzZSB0aGUgIj8iIGluIGFkZGl0aW9uIHRvIGEgbGlzdCBvZiB3b3JkcyBpZiB5b3UgbGlrZSwgYW5kIG1peCBib3RoIDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+IGFuZCA8Y29kZT5hdm9pZF90ZXh0PC9jb2RlPiB1bnRpbCB5b3VyIGJyYWluIGV4cGxvZGVzLjwvcD4NCg0KPGI+TG9va2luZyBhcm91bmQ8L2I+DQoNCjxwPkJ5IGRlZmF1bHQsIHRoZSAiPyIgbWVhbnMgdGhlIHBsdWdpbiB3aWxsIGxvb2sgYXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgc2VjdGlvbiBmb3IgYSBtYXRjaC9leGNsdXNpb24uIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGF0LCB5b3UgaGF2ZSB0aGUgY2hvaWNlIG9mIGdpdmluZyB0aGUgPGNvZGU+bG9va19pbjwvY29kZT4gb3B0aW9uLiBUaGlzIGZvcmNlcyB0aGUgcGx1Z2luIHRvIGxvb2sgZm9yIGEgbWF0Y2ggc29tZXdoZXJlIGVsc2UgaW4gdGhlIFVSTC48L3A+DQoNCjxwPlRoZSBjdXJyZW50IG9wdGlvbnMgYXZhaWxhYmxlIGFyZSAiY2F0ZWdvcnkiLCAic2VjdGlvbiIgb3IgInRpdGxlIjsgdGhlICd0aXRsZScgaW4gdGhpcyBjYXNlIGlzIHRoZSBuYW1lIG9mIHRoZSBhcnRpY2xlIGl0c2VsZi4gRm9yIGV4YW1wbGU6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiBsb29rX2luPSJ0aXRsZSIgLyZndDs8L2NvZGU+DQoNCjxwPndvdWxkIGxvb2sgYXQganVzdCB0aGUgYXJ0aWNsZSdzIHRpdGxlIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBpbWFnZSBuYW1lcy4gSW4gb3VyIGV4YW1wbGUgVVJMIGFib3ZlLCBpZiB0aGVyZSB3YXMgYW4gaW1hZ2UgaW4gdGhlICJiYW5uZXJzIiBjYXRlZ29yeSB3aGljaCBoYWQgPGNvZGU+dGhlLWh1bWJsZS1saW9uPC9jb2RlPiBpbiBpdHMgbmFtZSwgaXQgd291bGQgYXBwZWFyIG9uIGFueSBwYWdlIHRoYXQgaGFkIGEgVVJMIHdpdGggYSB0aXRsZSBjb250YWluaW5nIDxjb2RlPnRoZS1odW1ibGUtbGlvbjwvY29kZT4uIElmIHlvdSBpbnN0ZWFkIHVzZWQ6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiBsb29rX2luPSJ0aXRsZSxzZWN0aW9uIiAvJmd0OzwvY29kZT4NCg0KPHA+aXQgd291bGQgaW5jbHVkZSBhbnkgaW1hZ2UgbmFtZXMgdGhhdCBoYWQgZWl0aGVyICJsaW9ucyIgb3IgInRoZS1odW1ibGUtbGlvbiIgaW4gdGhlbS4gTm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGEgPGNvZGU+bG9va19pbjwvY29kZT4gcGFyYW1ldGVyIHlvdSBtdXN0IHNwZWNpZnkgZXZlcnkgcGxhY2UgdG8gbG9vayBpbjsgaXQgb25seSBhc3N1bWVzICJzZWN0aW9uIiBpZiB5b3UgbWlzcyBvdXQgdGhlIDxjb2RlPmxvb2tfaW48L2NvZGU+IHBhcmFtZXRlciBlbnRpcmVseS48L3A+DQoNCjxwPkFsc28gYmUgYXdhcmUgdGhhdCBpZiB5b3Ugc3BlY2lmeSAidGl0bGUiIGFzIGEgcGxhY2UgdG8gPGNvZGU+bG9va19pbjwvY29kZT4gYW5kIHRoZSBwZXJzb24gaXMgc3VyZmluZyBhIHBhZ2UgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgYXJ0aWNsZXMgb25seSwgdGhlIHRpdGxlIHBhcmFtZXRlciB3aWxsIGJlIGlnbm9yZWQuPC9wPg0KDQo8Yj5MaW5raW5nIHRoZSBpbWFnZTwvYj4NCg0KPHA+VGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgdG8gZGlyZWN0IHBlb3BsZSB0byBhIHdlYiBsaW5rIHdoZW4gdGhleSBjbGljayBvbiB0aGUgaW1hZ2UuIFNpbmNlIHRoZSBpbWFnZSBpcyBnb2luZyB0byBiZSBhIGJhbm5lciBhbmQgeW91J3JlIHVubGlrZWx5IHRvIHdhbnQgdG8gcHV0IGEgY2FwdGlvbiBvbiBpdCwgSSBmaWd1cmVkIHRoZSBjYXB0aW9uIHdhcyBhIGdvb2QgcGxhY2UgdG8gc3RvcmUgYSB3ZWIgbGluay4gV2hlbiB5b3UgdXBsb2FkIHlvdXIgaW1hZ2UsIHB1dCB0aGUgZGVzaXJlZCBkZXN0aW5hdGlvbiBVUkwgaW4gdGhlICdjYXB0aW9uJyBmaWVsZCBhbmQgdXNlIHRoZSA8Y29kZT5saW5rY2FwdGlvbj0iMSI8L2NvZGU+IG9wdGlvbiB0byBwdWxsIGl0IGZyb20gdGhlcmUgYW5kIG1ha2UgeW91ciBiYW5uZXIgY2xpY2thYmxlLjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0iPyIgYXZvaWRfdGV4dD0idGVzdCIgbG9va19pbj0ic2VjdGlvbix0aXRsZSIgbGlua2NhcHRpb249IjEiIC8mZ3Q7PC9jb2RlPg0KDQo8cD5JZiB0aGUgVVJMIGJlZ2lucyB3aXRoIDxjb2RlPmh0dHA6Ly88L2NvZGU+LCBpdCB3aWxsIGJlIHVzZWQgdmVyYmF0aW0uIElmIG5vdCwgaXQgd2lsbCBiZSBhc3N1bWVkIHRvIGJlIGEgJ2xvY2FsJyBsaW5rIGFuZCB3aWxsIGhhdmUgPGNvZGU+Jmx0O3R4cDpzaXRlX3VybCAvJmd0OzwvY29kZT4gcHJlcGVuZGVkIHRvIGl0LjwvcD4NCg0KPHA+SWYgeW91IGFscmVhZHkgaGF2ZSBhIHRvbm5lIG9mIGNhcHRpb25zIHN0b3JlZCBhbmQgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlbSwgeW91IGNhbiB1c2UgPGNvZGU+bGlua2FsdD0iMSI8L2NvZGU+IG9wdGlvbiB0byBhbGxvdyB0aGUgbGluayBiZSBtYWRlIGZyb20gdGhlIGFsdCB0ZXh0IGluc3RlYWQuPC9wPg0KDQo8cD5GdXJ0aGVyLCBpZiB5b3UgYWx3YXlzIHdhbnQgeW91ciBsaW5rIHRvIHBvaW50IHRvIGEgcGFydGljdWxhciBzZWN0aW9uIG9mIHlvdXIgc2l0ZSBvciBhIHNwZWNpZmljIGV4dGVybmFsIHNpdGUsIHlvdSBjYW4gc2F2ZSB5b3Vyc2VsZiBzb21lIHR5cGluZy4gSW5zdGVhZCBvZiBoYXJkLWNvZGluZyB0aGUgc2VjdGlvbiBvciBzaXRlIG5hbWUgaW4gdGhlIGFsdC9jYXB0aW9uIGZpZWxkLCB5b3UgY2FuIHNwZWNpZnkgdGhlIDxjb2RlPmxpbmtwcmVmaXg8L2NvZGU+IG9wdGlvbi4gV2hhdGV2ZXIgdGV4dCB5b3UgcHV0IGluIHRoYXQgb3B0aW9uIHdpbGwgYmUgcHJlZml4ZWQgdG8gdGhlIGFsdC9jYXB0aW9uIHRleHQuIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSB1c2VkIGEgJ2Z1bGwnIFVSTCBpbiB0aGUgYWx0L2NhcHRpb24gZmllbGQgKGkuZS4gb25lIGJlZ2lubmluZyB3aXRoIDxjb2RlPmh0dHA6Ly88L2NvZGU+KSA8Y29kZT5saW5rcHJlZml4PC9jb2RlPiB3aWxsIGJlIGlnbm9yZWQgZm9yIHRoYXQgaW1hZ2UuIEFsc28gbm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGJvdGggPGNvZGU+bGlua2FsdDwvY29kZT4gYW5kIDxjb2RlPmxpbmtjYXB0aW9uPC9jb2RlPiBvcHRpb25zLCB0aGUgPGNvZGU+bGlua2NhcHRpb248L2NvZGU+IHdpbGwgdGFrZSBwcmVjZWRlbmNlLjwvcD4NCg0KPGI+VHJhY2sgaXQ8L2I+DQoNCjxwPklmIHlvdSB1c2UgPGNvZGU+bGlua2NhcHRpb249IjEiPC9jb2RlPiBvciA8Y29kZT5saW5rYWx0PSIxIjwvY29kZT4sIHRoZSBwbHVnaW4gd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBhIHBhcmFtZXRlciB0byB0aGUgbGluayBzbyB5b3UgY2FuIHRyYWNrIHdoaWNoIGJhbm5lcnMgd2VyZSBjbGlja2VkIGluIHlvdXIgdGV4dHBhdHRlcm4gbG9ncy4gU2luY2UgdGhpcyBpcyBhIGJpdCBsaWtlIHJlZmVycmVyIHRyYWNraW5nLCB0aGUgb3B0aW9uIHRvIGNvbnRyb2wgaXQgaXMgbmFtZWQgPGNvZGU+cmVmZXJlcjwvY29kZT4gJiM4MjExOyBhbmQgaXMgbWlzLXNwZWxsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIEhUVFAgc3BlYyB3YXMgYWxsIHRob3NlIHllYXJzIGFnbyA6LSk8L3A+DQoNCjxwPjxjb2RlPnJlZmVyZXI8L2NvZGU+IHRha2VzIGEgdGV4dCBhcmd1bWVudCB0byB1c2UgYXMgYSBwcmVmaXguIEFuIGV4YW1wbGU6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/LGdvbGRmaXNoIiByZWZlcmVyPSJ0cmFja2lkIiAvJmd0OzwvY29kZT4NCg0KPHA+VGhpcyB3aWxsIGdlbmVyYXRlIGEgdXJsIHdpdGggPGNvZGU+P3RyYWNraWQ9PGk+aW1hZ2VfbnVtYmVyPC9pPjwvY29kZT4gYWRkZWQgdG8gaXQsIHdoZXJlIDxjb2RlPjxpPmltYWdlX251bWJlcjwvaT48L2NvZGU+IGlzIHRoZSBpbWFnZSBpZCBvZiB0aGUgcGljdHVyZSBpbiBxdWVzdGlvbi48L3A+DQoNCjxwPklmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSA8Y29kZT5yZWZlcmVyPC9jb2RlPiwgYWxsIGxpbmthYmxlIGltYWdlcyB3aWxsIGhhdmUgdGhlIGNvZGUgPGNvZGU+P2JpZD08aT5pbWFnZV9udW1iZXI8L2k+PC9jb2RlPiBhZGRlZCAoZm9yICdCYW5uZXIgSUQnKS4gSWYgeW91IHdpc2ggdG8gZGlzYWJsZSB0aGUgb3B0aW9uLCBhZGQgPGNvZGU+cmVmZXJlcj0iIjwvY29kZT4uPC9wPg0KDQo8Yj5BbmQgdGhlcmUncyBtb3JlPC9iPg0KDQo8cD5XYW50IG1vcmUgdGhhbiBvbmUgaW1hZ2Ugc2VudCBvdXQgYXQgb25jZT8gQWRkIHRoZSA8Y29kZT5saW1pdDwvY29kZT4gcGFyYW1ldGVyLiBEZWZhdWx0cyB0byAxIGltYWdlLiBJZiB5b3UgbmVlZCB0byBhZGQgYSBDU1MgY2xhc3MgdG8gZWFjaCBpbWFnZSwgdXNlIHRoZSA8Y29kZT5pbWdjbGFzcz0iY2xhc3NuYW1lIjwvY29kZT4gb3B0aW9uLjwvcD4NCg0KPGI+VHJvdWJsZXNob290aW5nPC9iPg0KDQo8cD5UaGVyZSBpcyBhIGNoYW5jZSB0aGF0LCB1bmRlciB0eHAgdjQuMC40LCB5b3Ugd2lsbCBnZXQgdGhlIHNhbWUgaW1hZ2UgYmFjayBlYWNoIHRpbWUuIFRoaXMgY291bGQgYmUgYmVjYXVzZSBvZiB5b3VyIG9wdGlvbnMgKGNoZWNrIDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+IGFuZCA8Y29kZT5jYXRlZ29yeTwvY29kZT4gY2FyZWZ1bGx5KSBidXQgbWF5IGFsc28gYmUgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgYmVpbmcgY2FjaGVkLiBJZiB0aGUgc2VydmVyIHRoaW5rcyB0aGUgY3VycmVudCBwYWdlIHJlcXVlc3QgaXMgaWRlbnRpY2FsIHRvIHRoZSBsYXN0LCBpdCBpbnN0cnVjdHMgdGhlIGJyb3dzZXIgdG8gc2hvdyB0aGUgc2FtZSBwYWdlIGFzIGxhc3QgdGltZS48L3A+DQoNCjxwPklmIHRoaXMgaXMgY2F1c2luZyBhIHByb2JsZW0sIHRyeSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiAiU2VuZCBMYXN0LU1vZGlmaWVkIGhlYWRlciIgdG8gIm5vIiB1bmRlciBhZG1pbi0+cHJlZmVyZW5jZXMtPmFkdmFuY2VkLiBJdCBtYXkgaW5jcmVhc2Ugc2VydmVyIGxvYWQgYmVjYXVzZSBldmVyeSBwYWdlIGFuZCBpbWFnZSB3aWxsIGFsd2F5cyBiZSBzZW50IGZyb20gdGhlIHNlcnZlciwgYnV0IGF0IGxlYXN0IHlvdSdsbCBnZXQgYSByYW5kb20gaW1hZ2UgZWFjaCB0aW1lIDotKTwvcD4iO3M6NDoiY29kZSI7czo1OTgxOiIvLyB2MC4xICBJbml0aWFsIHB1YmxpYyByZWxlYXNlDQovLyB2MC4xMSBBZGRlZCBQRlggdG8gcXVlcnkgKHRoYW5rcyBtZXJjdXJ5KQ0KLy8gdjAuMTIgRml4ZWQgaGVscCB0byBpbmNsdWRlIHRyYWlsaW5nIHNsYXNoZXMgKHRoYW5rcyB2aXR0b3JpbykNCi8vIHYwLjEzIFVucmVsZWFzZWQuIEFkZGVkIGxvb2tfaW49Y2F0ZWdvcnkgYW5kIHJlZmVyZXINCi8vIHYwLjE0IEFkZGVkIG1hdGNoX3RleHQgYW5kIHVzZV9hbHQgKHRoYW5rcyBsdWtlcGVybXNuKQ0KLy8gdjAuMTUgQWRkZWQgYWx3YXlzX2Rpc3BsYXkgYW5kIGxpbWl0ICh0aGFua3MgbHVrZXBlcm1zbikNCi8vIHYwLjE1YSBCdWdmaXggZm9yIGxpbmtjYXB0aW9uICh0aGFua3MgbWVyY3VyeSkNCi8vIHYwLjE2IFRpZ2h0ZW5lZCBpbWFnZSgpIHBhcmFtcyBmb3IgdHhwIHY0LjAuNCBjb21wbGlhbmNlDQovLyB2MC4xNyBBZGRlZCB0aHVtYiwgbGlua3ByZWZpeCBhbmQgbGlua2FsdCBvcHRpb25zDQovLyB2MC4xN2EgYmlkIG9wdGlvbiBub3cgd29ya3Mgd2l0aCBleGlzdGluZyB1cmwgcGFyYW1zICh0aGFua3MgUGFwdWFzcykNCi8vIDAuMTggIEFkZGVkIGltZ2NsYXNzIG9wdGlvbiAodGhhbmtzIERpZ2l0YWxSZWFsbSkNCi8vIHYwLjIgIFRPRE86IEFkZCBzdWJjYXRlZ29yeSBzdXBwb3J0IC0gSU4gREVWRUxPUE1FTlQNCmZ1bmN0aW9uIHNtZF9yYW5kb21fYmFubmVyKCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0Ow0KDQoJJGNhdGVnb3J5ID0gJyUnOw0KCSRsb29rX2luID0gJyc7DQoJJG1hdGNoX3RleHQgPSAnJzsNCgkkYXZvaWRfdGV4dCA9ICcnOw0KCSRyZWZlcmVyID0gJ2JpZCc7DQoJJHVzZV9hbHQgPSAnJzsNCgkkdGh1bWIgPSAnJzsNCgkkYWx3YXlzX2Rpc3BsYXkgPSAnJzsNCgkkbGltaXQgPSAnMSc7DQoJJGltZ2NsYXNzID0gJyc7DQoJJHdoZXJlTmFtZSA9ICcnOw0KCSRsaW5rcHJlZml4ID0gJyc7DQoJJGxpbmthbHQgPSAoaXNzZXQoJGxpbmthbHQpKSA/IHRydWUgOiBmYWxzZTsNCgkkbGlua2NhcHRpb24gPSAoaXNzZXQoJGxpbmtjYXB0aW9uKSkgPyB0cnVlIDogZmFsc2U7DQoJJG1hdGNoQXJyYXkgPSBhcnJheSgpOw0KCSRhdm9pZEFycmF5ID0gYXJyYXkoKTsNCg0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KDQoJLy8gdXNlX2FsdCBzd2l0Y2hlcyB0aGUgV0hFUkUgc3RhdGVtZW50IHRvIGxvb2sgaW4gdGhlIGltYWdlICdhbHQnIGluc3RlYWQgb2YgJ25hbWUnDQoJaWYoJHVzZV9hbHQgPT0gIiIpIHsNCgkJJHdoZXJlUG9zID0gIm5hbWUiOw0KCX0gZWxzZSB7DQoJCSR3aGVyZVBvcyA9ICJhbHQiOw0KCX0NCg0KCS8vKiogTUFUQ0hJTkcgVEVYVCANCgkvLyBJZiBtYXRjaF90ZXh0IGlzIHNwZWNpZmllZCwgbG9va19pbiBtdXN0IGFsc28gYmUgZ2l2ZW47DQoJLy8gaWYgaXQgaXNuJ3QsIHNldCBpdCB0byBhIGRlZmF1bHQgZmlyc3QNCglpZiAoJG1hdGNoX3RleHQgIT0gIiIgKSB7DQoJCWlmICgkbG9va19pbiA9PSAiIikgew0KCQkJJGxvb2tfaW4gPSAic2VjdGlvbiI7DQoJCX0NCg0KCQkkdXJsX3BhcnRzID0gZXhwbG9kZSgiLCIsICRsb29rX2luKTsNCgkJJG1hdGNoZXMgPSBleHBsb2RlKCIsIiwgJG1hdGNoX3RleHQpOw0KDQoJCWZvcmVhY2ggKCR1cmxfcGFydHMgYXMgJHBhcnQpIHsNCgkJCWZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaCkgew0KCQkJCWlmICgkbWF0Y2ggPT09ICI/Iikgew0KCQkJCQlzd2l0Y2ggKCRwYXJ0KSB7DQoJCQkJCQljYXNlICJzZWN0aW9uIjoNCgkJCQkJCQkkbWF0Y2ggPSAkcHJldGV4dFtzXTsNCgkJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgImNhdGVnb3J5IjoNCgkJCQkJCQkkbWF0Y2ggPSAkcHJldGV4dFtjXTsNCgkJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgInRpdGxlIjoNCgkJCQkJCQkvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGFydGljbGUgYnkgdGVzdGluZyBuZXh0X2lkDQoJCQkJCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ25leHRfaWQnLCRwcmV0ZXh0KSkgeyANCgkJCQkJCQkJLy8gR2V0IHJpZCBvZiBhbnkgPyBwYXJhbXMgYWZ0ZXIgdGhlIFVSTCB0aXRsZQ0KCQkJCQkJCQkkdXJsID0gc3BsaXQoIlw/IiwkcHJldGV4dFtyZXFdKTsNCgkJCQkJCQkJJG1hdGNoID0gc3Vic3RyKHN0cnJjaHIoJHVybFswXSwgIi8iKSwgMSk7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJJG1hdGNoID0gIiI7DQoJCQkJCQkJfQ0KCQkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkbWF0Y2ggIT0gIiIpIHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkbWF0Y2gsJG1hdGNoQXJyYXkpKSB7DQoJCQkJCQkkbWF0Y2hBcnJheVtdID0gJG1hdGNoOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJJG51bU1hdGNoZXMgPSBjb3VudCgkbWF0Y2hBcnJheSk7DQoJCSRjdHIgPSAxOw0KCQlmb3JlYWNoICgkbWF0Y2hBcnJheSBhcyAkbWF0Y2hTdHIpIHsNCgkJCWlmICgkY3RyID09IDEpIHsNCgkJCQkkd2hlcmVOYW1lIC49ICIgQU5EICggIjsNCgkJCX0gZWxzZSB7DQoJCQkJJHdoZXJlTmFtZSAuPSAiIE9SICI7DQoJCQl9DQoJCQkkd2hlcmVOYW1lIC49ICR3aGVyZVBvcyAuICIgTElLRSAnJSIuJG1hdGNoU3RyLiIlJyI7DQoJCQlpZiAoJGN0ciA9PSAkbnVtTWF0Y2hlcykgew0KCQkJCSR3aGVyZU5hbWUgLj0gIiApICI7DQoJCQl9DQoJCQkkY3RyKys7DQoJCX0NCgl9DQoNCgkvLyoqIEFWT0lESU5HIFRFWFQNCgkvLyBJZiBhdm9pZF90ZXh0IGlzIHNwZWNpZmllZCwgbG9va19pbiBtdXN0IGFsc28gYmUgZ2l2ZW47DQoJLy8gaWYgaXQgaXNuJ3QsIHNldCBpdCB0byBhIGRlZmF1bHQgZmlyc3QNCglpZiAoJGF2b2lkX3RleHQgIT0gIiIgKSB7DQoJCWlmICgkbG9va19pbiA9PSAiIikgew0KCQkJJGxvb2tfaW4gPSAic2VjdGlvbiI7DQoJCX0NCg0KCQkkdXJsX3BhcnRzID0gZXhwbG9kZSgiLCIsJGxvb2tfaW4pOw0KCQkkbWF0Y2hlcyA9IGV4cGxvZGUoIiwiLCRhdm9pZF90ZXh0KTsNCgkJZm9yZWFjaCAoJHVybF9wYXJ0cyBhcyAkcGFydCkgew0KCQkJZm9yZWFjaCAoJG1hdGNoZXMgYXMgJG1hdGNoKSB7DQoJCQkJaWYgKCRtYXRjaCA9PT0gIj8iKSB7DQoJCQkJCXN3aXRjaCAoJHBhcnQpIHsNCgkJCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W3NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W2NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAidGl0bGUiOg0KCQkJCQkJCS8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJ0aWNsZSBieSB0ZXN0aW5nIG5leHRfaWQNCgkJCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnbmV4dF9pZCcsJHByZXRleHQpKSB7IA0KCQkJCQkJCQkvLyBHZXQgcmlkIG9mIGFueSA/IHBhcmFtcyBhZnRlciB0aGUgVVJMIHRpdGxlDQoJCQkJCQkJCSR1cmwgPSBzcGxpdCgiXD8iLCRwcmV0ZXh0W3JlcV0pOw0KCQkJCQkJCQkkbWF0Y2ggPSBzdWJzdHIoc3RycmNocigkdXJsWzBdLCAiLyIpLCAxKTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkbWF0Y2ggPSAiIjsNCgkJCQkJCQl9DQoJCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRtYXRjaCAhPSAiIikgew0KCQkJCQlpZiAoIWluX2FycmF5KCRtYXRjaCwkYXZvaWRBcnJheSkpIHsNCgkJCQkJCSRhdm9pZEFycmF5W10gPSAkbWF0Y2g7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlmb3JlYWNoICgkYXZvaWRBcnJheSBhcyAkYXZvaWRTdHIpIHsNCgkJCSR3aGVyZU5hbWUgLj0gIiBBTkQgIiAuICR3aGVyZVBvcyAuICIgTk9UIExJS0UgJyUiLiRhdm9pZFN0ci4iJSciOw0KCQl9DQoJfQ0KDQoJJHF1ZXJ5ID0gInNlbGVjdCBpZCxjYXB0aW9uLGFsdCBmcm9tICIuUEZYLiJ0eHBfaW1hZ2Ugd2hlcmUgY2F0ZWdvcnkgbGlrZSAnJGNhdGVnb3J5JyAkd2hlcmVOYW1lIG9yZGVyIGJ5IHJhbmQoKSBsaW1pdCAkbGltaXQiOw0KCSRycyA9IGdldFJvd3MoJHF1ZXJ5KTsNCgkkb3V0U3RyID0gJyc7DQoNCglpZigkcnMpIHsNCgkJJG91dFN0ciA9IHNtZF9yc19vdXQoJHJzLCAkbGlua2NhcHRpb24sICRsaW5rYWx0LCAkbGlua3ByZWZpeCwgJHJlZmVyZXIsICR0aHVtYiwgJGltZ2NsYXNzLCAkYXR0cyk7DQoJfSBlbHNlIHsNCgkJLy8gTm8gbWF0Y2hpbmcgaW1hZ2VzIGZvdW5kLiBJZiBhbHdheXNfZGlzcGxheSBpcyBvbiwgcGljayBhbnkgaW1hZ2UocykNCgkJaWYgKCRhbHdheXNfZGlzcGxheSkgew0KCQkJJHF1ZXJ5ID0gInNlbGVjdCBpZCxjYXB0aW9uLGFsdCBmcm9tICIuUEZYLiJ0eHBfaW1hZ2Ugd2hlcmUgY2F0ZWdvcnkgbGlrZSAnJGNhdGVnb3J5JyBvcmRlciBieSByYW5kKCkgbGltaXQgJGxpbWl0IjsNCgkJCSRycyA9IGdldFJvd3MoJHF1ZXJ5KTsNCgkJCWlmKCRycykgew0KCQkJCSRvdXRTdHIgPSBzbWRfcnNfb3V0KCRycywgJGxpbmtjYXB0aW9uLCAkbGlua2FsdCwgJGxpbmtwcmVmaXgsICRyZWZlcmVyLCAkdGh1bWIsICRpbWdjbGFzcywgJGF0dHMpOw0KCQkJfQ0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuOw0KCQl9DQoJfQ0KDQoJcmV0dXJuICRvdXRTdHI7DQp9DQoNCmZ1bmN0aW9uIHNtZF9yc19vdXQoJHJzLCRsaW5rY2FwdGlvbiwkbGlua2FsdCwkbGlua3ByZWZpeCwkcmVmZXJlciwkdGh1bWIsJGltZ2NsYXNzLCRhdHRzKSB7DQoJJG91dCA9ICcnOw0KCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJJGxpbmtOYW1lPXRyaW0oKCgkbGlua2NhcHRpb24pID8gJHJvd1snY2FwdGlvbiddIDogJHJvd1snYWx0J10pKTsNCgkJJHN0YXRpY3ByZWZpeCA9ICJodHRwOi8vIjsNCgkJaWYgKHN1YnN0cigkbGlua05hbWUsIDAsIHN0cmxlbigkc3RhdGljcHJlZml4KSkgPT09ICRzdGF0aWNwcmVmaXgpIHsNCgkJCSRsaW5rdXJsID0gJGxpbmtOYW1lOw0KCQl9IGVsc2Ugew0KCQkJaWYgKCRsaW5rcHJlZml4ID09ICcnKSB7DQoJCQkJJGxpbmt1cmwgPSBzaXRlX3VybCgkYXR0cykgLiAkbGlua05hbWU7DQoJCQl9IGVsc2Ugew0KCQkJCSRsaW5rdXJsID0gJGxpbmtwcmVmaXguJy8nLiRsaW5rTmFtZTsNCgkJCX0NCgkJfQ0KCQkkaW1nT3B0aW9ucyA9IGFycmF5KCJpZCIgPT4gJHJvd1snaWQnXSk7DQoJCWlmICgkaW1nY2xhc3MgIT0gJycpIHsNCgkJCSRpbWdPcHRpb25zWyJjbGFzcyJdID0gJGltZ2NsYXNzOw0KCQl9DQoJCWlmICgoJGxpbmtjYXB0aW9uIHx8ICRsaW5rYWx0KSAmJiAkbGlua3VybCkgew0KCQkJaWYgKCRyZWZlcmVyICE9ICIiKSB7DQoJCQkJJHJlZmVydHh0ID0gYWRkUVNWYXIoJGxpbmt1cmwsICRyZWZlcmVyLCAkcm93WydpZCddKTsNCgkJCX0gZWxzZSB7DQoJCQkJJHJlZmVydHh0ID0gJGxpbmt1cmw7DQoJCQl9DQoJCQkkb3V0IC49ICc8YSBocmVmPSInIC4kcmVmZXJ0eHQuICciPicgLiAoKCR0aHVtYj09MCkgPyBpbWFnZSgkaW1nT3B0aW9ucykgOiB0aHVtYm5haWwoJGltZ09wdGlvbnMpKS4gJzwvYT4nOw0KCQl9IGVsc2Ugew0KCQkJJG91dCAuPSAoKCR0aHVtYj09MCkgPyBpbWFnZSgkaW1nT3B0aW9ucykgOiB0aHVtYm5haWwoJGltZ09wdGlvbnMpKTsNCgkJfQ0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KZnVuY3Rpb24gYWRkUVNWYXIoJHVybCwgJGtleSwgJHZhbHVlKSB7DQoJJHVybCA9IHJlbW92ZVFTVmFyKCR1cmwsICRrZXkpOw0KCWlmIChzdHJwb3MoJHVybCwgJz8nKSA9PT0gZmFsc2UpIHsNCgkJcmV0dXJuICgkdXJsIC4gJz8nIC4gJGtleSAuICc9JyAuICR2YWx1ZSk7DQoJfSBlbHNlIHsNCgkJcmV0dXJuICgkdXJsIC4gJyYnIC4gJGtleSAuICc9JyAuICR2YWx1ZSk7DQoJfQ0KfQ0KZnVuY3Rpb24gcmVtb3ZlUVNWYXIoJHVybCwgJGtleSkgew0KCSR1cmwgPSBwcmVnX3JlcGxhY2UoJy8oLiopKFw/fCYpJyAuICRrZXkgLiAnPVteJl0rPygmKSguKikvaScsICckMSQyJDQnLCAkdXJsIC4gJyYnKTsNCgkkdXJsID0gc3Vic3RyKCR1cmwsIDAsIC0xKTsNCglyZXR1cm4gKCR1cmwpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6MzoibWQ1IjtzOjMyOiJjNjA5YjY3NjAyYWQ2ZjFiYjU2MWY1MDk5MjMxMWViOCI7fQ==