# Name: smd_each v0.2 # Type: Client side plugin # Iterate over TXP, URL or smd_vars variables # Author: Stef Dawson # URL: http://stefdawson.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: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjg6InNtZF9lYWNoIjtzOjY6ImF1dGhvciI7czoxMToiU3Rl ZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjIiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjQzOiJJ dGVyYXRlIG92ZXIgVFhQLCBVUkwgb3Igc21kX3ZhcnMgdmFyaWFibGVzIjtzOjQ6ImhlbHAi O3M6MTc3NTg6IjxkaXYgaWQ9InNtZF9oZWxwIj4KCgk8aDEgaWQ9InRvcCI+c21kX2VhY2g8 L2gxPgoKCTxoMiBpZD0iZmVhdHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkl0 ZXJhdGUgb3ZlciBhbnkgdmFyaWFibGVzIHlvdSBjYW4gZ2V0IHlvdXIgaGFuZHMgb24uIFRo ZXNlIGNhbiBiZSBhbnl0aGluZyBmcm9tIHRoZSBjdXJyZW50IGFydGljbGUgKGN1c3RvbSBm aWVsZCwgYXJ0aWNsZV9pbWFnZSwgZXRjKSwgYW55IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8 L3NwYW4+L1NFUlZFUiB2YXJpYWJsZSBvciBjb29raWUgKHN1YmplY3QgdG8gbm9ybWFsIGVz Y2FwaW5nIHJ1bGVzKSBvciBhbnkgPGNvZGU+Jmx0O3R4cDp2YXJpYWJsZSAvJmd0OzwvY29k ZT48L2xpPgoJCTxsaT5JbmNsdWRlIG9yIGV4Y2x1ZGUgcGFydGljdWxhciB2YXJpYWJsZXMs IG9yIG9ubHkgY2hvb3NlIHZhcmlhYmxlcyB0aGF0IG1hdGNoIHBhcnRpY3VsYXIgdGV4dDwv bGk+CgkJPGxpPkl0ZXJhdGUgb3ZlciBzdWJzZXRzIG9mIGRhdGEgY29udGFpbmVkIGluIGFu eSBmaWVsZDwvbGk+CgkJPGxpPkNob29zZSB0byBwcm9jZXNzIGVhY2ggdmFyaWFibGUgb25l IGJ5IG9uZSB3aXRoIGEgZm9ybSwgb3IgY29sbGVjdCB0aGVtIHRvZ2V0aGVyIGludG8gYSBk ZWxpbWl0ZWQgbGlzdCB0byBiZSBwcm9jZXNzZWQgb25seSBvbmNlIGJ5IHRoZSBmb3JtPC9s aT4KCQk8bGk+UHJvdmlkZXMgZnJlZSBoZWFkYWNoZXMgaWYgeW91IGRvbiYjODIxNzt0IGtl ZXAgeW91ciB3aXRzIGFib3V0IHlvdTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9yIj5B dXRob3I8L2gyPgoKCTxwPjxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50 Rm9ybSI+U3RlZiBEYXdzb248L2E+LiBGb3Igb3RoZXIgc29mdHdhcmUgYnkgbWUsIG9yIHRv IG1ha2UgYSBkb25hdGlvbiwgc2VlIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LjwvcD4KCgk8aDIgaWQ9Imluc3RhbGwiPkluc3Rh bGxhdGlvbiAvIFVuaW5zdGFsbGF0aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2lu IGZyb20gZWl0aGVyIDxhIGhyZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5vcmcvcGx1Z2lucy85 ODYvc21kX2VhY2giPnRleHRwYXR0ZXJuLm9yZzwvYT4sIG9yIHRoZSBzb2Z0d2FyZSBwYWdl IGFib3ZlLCBwYXN0ZSB0aGUgY29kZSBpbnRvIHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQ PC9zcGFuPiBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhbmUsIGluc3RhbGwgYW5kIGVuYWJsZSB0 aGUgcGx1Z2luLiBWaXNpdCB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJu LmNvbS92aWV3dG9waWMucGhwP2lkPTI3NDY0Ij5mb3J1bSB0aHJlYWQ8L2E+IGZvciBtb3Jl IGluZm8gb3IgdG8gcmVwb3J0IGEgYnVnL2ZlYXR1cmUgcmVxdWVzdC48L3A+CgoJPHA+VG8g cmVtb3ZlIHRoZSBwbHVnaW4sIHNpbXBseSBkZWxldGUgaXQgZnJvbSB0aGUgQWRtaW4tJmd0 O1BsdWdpbnMgdGFiLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+Rm9y IHNvbWUgaWRlYXMgb24gdXNhZ2Ugc2NlbmFyaW9zLCBzZWUgdGhlIDxhIGhyZWY9IiNleGFt cGxlcyI+ZXhhbXBsZXM8L2E+LjwvcD4KCgk8aDMgY2xhc3M9InRhZyAiIGlkPSJzbWRfZWFj aCI+c21kX2VhY2g8L2gzPgoKCTxwIGNsYXNzPSJ0YWctc3VtbWFyeSI+UGxhY2Ugb25lIG9y IG1vcmUgc21kX2VhY2ggdGFncyBpbiBhbnkgYXJ0aWNsZSwgcGFnZSBvciBmb3JtLCBzdXBw bHkgYW55IG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyB0byBjb25maWd1cmUgaXQgYW5kIHVz ZSBhIGZvcm0gKG9yIGNvbnRhaW5lcikgdG8gZGVmaW5lIHdoYXQgdG8gZG8gd2l0aCBlYWNo IG1hdGNoaW5nIHZhcmlhYmxlLjwvcD4KCgk8cD5JbiBhIG51dHNoZWxsLCBpdCBncmFicyBl dmVyeSBhcnJheSBmcm9tIHRoZSBwbGFjZXMgeW91IHNwZWNpZnksIGFsbG93cyB5b3UgdG8g ZmlsdGVyIHRoZSBhcnJheSB3aXRoIG1hdGNoZXMgb3Igc3BlY2lmaWMgaXRlbXMsIHRoZW4g YXNzaWducyBlYWNoIHN1Y2Nlc3NpdmUgbmFtZS92YWx1ZSBwYWlyIHRvIHR3byByZXBsYWNl bWVudCB0YWdzIHRoYXQgeW91IGNhbiB1c2UgaW4geW91ciBmb3JtIHRvIGRvIHN0dWZmLiBZ b3UgY291bGQgc2ltcGx5IGRpc3BsYXkgdGhlIHZhbHVlcyBvciBwb3B1bGF0ZSBuZXcgdGFi bGVzIHdpdGggdGhlbSwgcGx1ZyB2YWx1ZXMgaW50byBxdWVyaWVzLCBjcmVhdGUgc21kX3Zh cnMsIHRlc3QgdGhlIHZhbHVlcyB3aXRoIHNtZF9pZiwgeW91IG5hbWUgaXQuPC9wPgoKCTxo NCBpZD0iYXR0cmlidXRlcyI+QXR0cmlidXRlczwvaDQ+CgoJPHVsPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+dHlwZTwvc3Bhbj4gOiB3aGVyZSB0byBsb29rIGZvciB2YXJpYWJsZXMu IFRoZXkgY2FuIGJlIGNvbWJpbmVkIGludG8gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBpZiB5 b3Ugd2lzaCB0byBzZWFyY2ggbW9yZSB0aGFuIG9uZSBwbGFjZSBhdCBvbmNlLiBPcHRpb25z IGFyZToKCTx1bD4KCQk8bGk+PGNvZGU+ZmllbGQ8L2NvZGU+IDogYSA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBhcnRpY2xlIGZpZWxkICh0aGUgZGVmYXVsdCk8L2xpPgoJCTxs aT48Y29kZT51cmx2YXI8L2NvZGU+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+LCBlLmcuIG5hbWUxPXZhbCZhbXA7bmFtZTI9dmFsJmFtcDsmIzgyMzA7PC9saT4KCQk8 bGk+PGNvZGU+c3ZydmFyPC9jb2RlPiA6IHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQgdmFyaWFi bGVzPC9saT4KCQk8bGk+PGNvZGU+Y29va2llPC9jb2RlPiA6IGFueSB1c2VyIGNvb2tpZXM8 L2xpPgoJCTxsaT48Y29kZT50eHB2YXI8L2NvZGU+IDogYSB2YWx1ZSBmcm9tIGFueSA8Y29k ZT4mbHQ7dHhwOnZhcmlhYmxlIC8mZ3Q7PC9jb2RlPiB0YWc8L2xpPgoJCTxsaT48Y29kZT5m aXhlZDwvY29kZT4gOiBzcGVjaWZ5IHlvdXIgb3duIGxpc3Qgb2YgdmFyaWFibGVzIHRvIGlu amVjdCBpbnRvIHRoZSBtaXggKHZpYSA8Y29kZT5pbmNsdWRlPC9jb2RlPik8L2xpPgoJPC91 bD48L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+aW5jbHVkZTwvc3Bhbj4gOiBiYXNl IGxpc3Qgb2YgdmFyaWFibGUgbmFtZXMgeW91IGRlZmluaXRlbHkgd2FudCB0byBiZSByZXR1 cm5lZCBpbiB0aGUgcmVzdWx0LiBJZiB5b3UgYXJlIHVzaW5nIDxjb2RlPmZpeGVkPC9jb2Rl PiBhcyBvbmUgb2YgdGhlIDxjb2RlPnR5cGU8L2NvZGU+cyB5b3UgY2FuIGFkZCB5b3VyIG93 biB2YXJpYWJsZXMgaGVyZSwgZGVsaW1pdGVkIGJ5IDxjb2RlPnBhcmFtZGVsaW08L2NvZGU+ LiBGb3IgZXhhbXBsZSA8Y29kZT5pbmNsdWRlPSZxdW90O2tleXdvcmRzLCBteV92YXI6bm9y dGg6c291dGg6ZWFzdDp3ZXN0JnF1b3Q7PC9jb2RlPiB3b3VsZCBpbmNsdWRlIHRoZSA8Y29k ZT5rZXl3b3JkczwvY29kZT4gYXJ0aWNsZSBmaWVsZCBhbmQgY3JlYXRlIDxjb2RlPm15X3Zh cjwvY29kZT4sIGdpdmluZyBpdCBhIHZhbHVlIG9mICYjODIyMDtub3J0aCwgc291dGgsIGVh c3QsIHdlc3QmIzgyMjE7LiBOb3RlIHRoYXQgaWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBm aWVsZCwgaXQgaXMgbGlrZWx5IHRvIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYWxsIGxvd2Vy IGNhc2UgYnkgVGV4dHBhdHRlcm4sIHNvIHlvdSBzaG91bGQgdXNlIGFuIGFsbCBsb3dlciBj YXNlIG5hbWUgaGVyZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5leGNsdWRlPC9z cGFuPiA6IGJhc2UgbGlzdCBvZiB2YXJpYWJsZSBuYW1lcyB5b3UgZGVmaW5pdGVseSBkbyBu b3Qgd2FudCB0byBiZSByZXR1cm5lZCBpbiB0aGUgcmVzdWx0PC9saT4KCQk8bGk+PHNwYW4g Y2xhc3M9ImF0bm0iPm1hdGNoPC9zcGFuPiA6IGxpc3Qgb2YgdGV4dCBzdHJpbmdzIHRvIHNl YXJjaCBmb3IgdG8gcmVmaW5lIHRoZSByZXR1cm5lZCB2YXJpYWJsZXMuIEJ5IGRlZmF1bHQg dGhpcyB3aWxsIG1hdGNoIGFnYWluc3QgPGVtPmV2ZXJ5PC9lbT4gdmFyaWFibGUgaW4gZXZl cnkgbG9jYXRpb24geW91IHNwZWNpZmllZCBpbiA8Y29kZT50eXBlPC9jb2RlPi4gSXQgaXMg YXV0b21hdGljYWxseSB3aWxkIHNvIHdpbGwgbWF0Y2ggcG9ydGlvbnMgb2YgYSB2YXJpYWJs ZTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5tYXRjaHdpdGg8L3NwYW4+IDogZGVm YXVsdHMgdG8gPGNvZGU+bmFtZTwvY29kZT4gd2hpY2ggbG9va3Mgb25seSBhdCB0aGUgdmFy aWFibGUmIzgyMTc7cyBuYW1lIGZvciBhIG1hdGNoLiBDYW4gYmUgc2V0IHRvIDxjb2RlPnZh bHVlPC9jb2RlPiB0byBsb29rIGF0IGl0cyB2YWx1ZSBvciA8Y29kZT5uYW1lLCB2YWx1ZTwv Y29kZT4gdG8gbG9vayBpbiBib3RoIGZvciBtYXRjaGVzPC9saT4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0bm0iPnN1YnNldDwvc3Bhbj4gOiBpZiB5b3UgdGhpbmsgeW91ciB2YXJpYWJsZXMg YXJlIGdvaW5nIHRvIGNvbnRhaW4gbGlzdHMgdGhlbXNlbHZlcywgc3BlY2lmeSA8Y29kZT5z dWJzZXQ9JnF1b3Q7MSZxdW90OzwvY29kZT4gdG8gaGF2ZSB0aGUgcGx1Z2luIGFkZCBlYWNo IHBzZXVkby12YXJpYWJsZSB0byB0aGUgYXJyYXkuIEZvciBleGFtcGxlLCBpZiB5b3UgYXJ0 aWNsZV9pbWFnZSBmaWVsZCBjb250YWluZWQgPGNvZGU+MTQsIDYsIDE3LCAzLCA5PC9jb2Rl PiB5b3Ugd291bGQgZ2V0IGZpdmUgbW9yZSB2YXJpYWJsZXMgY2FsbGVkIDxjb2RlPmFydGlj bGVfaW1hZ2VfMTwvY29kZT4gKHZhbHVlOjE0KSwgPGNvZGU+YXJ0aWNsZV9pbWFnZV8yPC9j b2RlPiAodmFsdWU6IDYpLCBhbmQgc28gb24uPGRpdiBjbGFzcz0iYnJlYWsiPk5vdGUgdGhh dCB5b3Ugd2lsbCBhbHNvIGdldCB0aGUgZnVsbCBhcnRpY2xlX2ltYWdlIChhbmQgYWxsIG90 aGVyIG1hdGNoaW5nIG5vbi1zdWJzZXQgdmFycykgaW5jbHVkZWQuIElmIHlvdSB3aXNoIHRv IDxlbT5vbmx5PC9lbT4gc2VlIHZhcmlhYmxlcyB0aGF0IGNvbnRhaW4gc3VibGlzdHMgb2Yg ZGF0YSwgdXNlIDxjb2RlPnN1YnNldD0mcXVvdDsyJnF1b3Q7PC9jb2RlPjwvZGl2PjwvbGk+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj52YXJfcHJlZml4PC9zcGFuPiA6IGlmIHlvdSBh cmUgbmVzdGluZyBzbWRfZWFjaCB0YWdzIHlvdSYjODIxNztsbCBmaW5kIHRoYXQgYW55IGlu bmVyIDxjb2RlPntzbWRfdmFyX3ZhbHVlfTwvY29kZT4gcmVwbGFjZW1lbnRzIHdpbGwgdGFr ZSBvbiB0aGUgdmFsdWVzIG9mIHRoZSBvdXRlciB0YWcuIEZvciB0aGlzIHJlYXNvbiB5b3Ug Y2FuIHNwZWNpZnkgYSBwcmVmaXggdGhhdCB3aWxsIGJlIHVzZWQgaW4gYWxsIHJlcGxhY2Vt ZW50cy4gVGh1cyBpZiB5b3Ugc2V0IDxjb2RlPnZhcl9wcmVmaXg9JnF1b3Q7b3B0XyZxdW90 OzwvY29kZT4gb24geW91ciBpbm5lciBzbWRfZWFjaCB0YWcsIHlvdSB3b3VsZCB1c2UgPGNv ZGU+e29wdF92YXJfdmFsdWV9PC9jb2RlPiBhbmQge29wdF92YXJfbmFtZX0gaW4gdGhlIGlu bmVyIGNvbnRhaW5lci9mb3JtLiBEZWZhdWx0OiA8Y29kZT5zbWRfPC9jb2RlPjwvbGk+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5mb3JtPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0i Y2FwcyI+VFhQPC9zcGFuPiBmb3JtIHRvIGV4ZWN1dGUgZm9yIGV2ZXJ5IG1hdGNoaW5nIHZh cmlhYmxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY29udGFpbmVyIHdpbGwgYmUgdXNlZC4g SWYgdGhlcmUmIzgyMTc7cyBubyBjb250YWluZXIsIGEgZGVmYXVsdCBmb3JtIHdpdGgganVz dCB0aGUge3NtZF92YXJfdmFsdWV9IGlzIHVzZWQ8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0i YXRubSI+Y29sbGF0ZTwvc3Bhbj4gOiBwcmV2ZW50IHRoZSA8Y29kZT5mb3JtPC9jb2RlPiBi ZWluZyBleGVjdXRlZCBmb3IgZXZlcnkgdmFyaWFibGUuIEluc3RlYWQsIGNvbGxlY3QgdGhl IHZhcmlhYmxlIG5hbWVzIGludGVybmFsbHkgYW5kIHRoZW4gcHJvY2VzcyB0aGUgZW50aXJl IGxpc3QgYnkgdGhlIGZvcm0gb25jZSBvbmx5LCBhZnRlciBhbGwgdmFyaWFibGVzIGhhdmUg YmVlbiByZWFkLiBTZWUgPGEgaHJlZj0iI2NvbGxhdGUiPmNvbGxhdGUgbW9kZTwvYT48L2xp PgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+ZGVsaW08L3NwYW4+IDogdGhlIGRlbGltaXRl ciB0byB1c2UgZm9yIHNwZWNpZnlpbmcgcGx1Z2luIG9wdGlvbnMuIERlZmF1bHRzIHRvIGNv bW1hICgsKTwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5wYXJhbWRlbGltPC9zcGFu PiA6IHRoZSBkZWxpbWl0ZXIgdG8gdXNlIGZvciBzcGVjaWZ5aW5nIGludGVyLXZhbHVlIHBs dWdpbiBvcHRpb25zIChmb3IgZXhhbXBsZSBpbiBjb2xsYXRlIG1vZGUpLiBEZWZhdWx0cyB0 byBjb2xvbiAoOik8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+b3V0ZGVsaW08L3Nw YW4+IDogdGhlIGRlbGltaXRlciB0byB1c2UgdG8gc2VwYXJhdGUgZWFjaCB2YXJpYWJsZSBk aXNwbGF5ZWQgaW4gY29sbGF0ZSBtb2RlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0i PndyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnIHRvIHdyYXAgdGhlIGZvcm0gaW4s IGUuZy4gPGNvZGU+d3JhcHRhZz0mcXVvdDt1bCZxdW90OzwvY29kZT48L2xpPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXRubSI+YnJlYWs8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnIHRvIHdy YXAgZWFjaCBjYWxsIHRvIHRoZSBmb3JtIGluLCBlLmcuIDxjb2RlPmJyZWFrPSZxdW90O2xp JnF1b3Q7PC9jb2RlPjwvbGk+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdG5tIj5jbGFzczwvc3Bh bj4gOiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBn aXZlIHRvIHRoZSB3cmFwdGFnPC9saT4KCTwvdWw+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9 InJlcHMiPlJlcGxhY2VtZW50IHRhZ3M8L2g0PgoKCTxwPkZvciBldmVyeSBtYXRjaGluZyB2 YXJpYWJsZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyByZXBsYWNlbWVudCB0YWdzIGlu IHlvdXIgZm9ybTo8L3A+CgoJPHVsPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+e3NtZF92 YXJfbmFtZX08L3NwYW4+IDogdGhlIHZhcmlhYmxlIG5hbWU8L2xpPgoJCTxsaT48c3BhbiBj bGFzcz0iYXRubSI+e3NtZF92YXJfdmFsdWV9PC9zcGFuPiA6IHRoZSB2YXJpYWJsZSYjODIx NztzIHZhbHVlPC9saT4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0bm0iPntzbWRfdmFyX2NvdW50 ZXJ9PC9zcGFuPiA6IHRoZSB2YXJpYWJsZSYjODIxNztzIHBvc2l0aW9uIGluIHRoZSBsaXN0 ICgxLCAyLCAzJiM4MjMwOyk8L2xpPgoJCTxsaT48c3BhbiBjbGFzcz0iYXRubSI+e3NtZF92 YXJfdG90YWx9PC9zcGFuPiA6IHRoZSB0b3RhbCBudW1iZXIgb2YgbWF0Y2hpbmcgdmFyaWFi bGVzIGJlaW5nIGl0ZXJhdGVkPC9saT4KCTwvdWw+CgoJPHA+KE5vdGUgdGhhdCBlYWNoIHJl cGxhY2VtZW50IHRhZyB3aWxsIGhhdmUgd2hhdGV2ZXIgPGNvZGU+dmFyX3ByZWZpeDwvY29k ZT4geW91IGhhdmUgZGVzaWduYXRlZDogdGhlIGRlZmF1bHQgaXMgPGNvZGU+c21kXzwvY29k ZT4pLjwvcD4KCgk8cD5UaGVzZSBjYW4gYmUgdXNlZCBmb3Igd2hhdGV2ZXIgZGV2aW91cyBt ZWFucyB5b3Ugc2VlIGZpdC4gZS5nLjwvcD4KCgk8dWw+CgkJPGxpPjxjb2RlPiZsdDt0eHA6 YXJ0aWNsZV9jdXN0b20gaWQ9JnF1b3Q7e3NtZF92YXJfdmFsdWV9JnF1b3Q7IC8mZ3Q7PC9j b2RlPiB3aWxsIGRpc3BsYXkgdGhlIGdpdmVuIGFydGljbGUgZm9yIGVhY2ggbWF0Y2hpbmcg SUQuPC9saT4KCQk8bGk+PGNvZGU+Jmx0O3R4cDphcnRpY2xlIGtleXdvcmRzPSZxdW90O3tz bWRfdmFyX3ZhbHVlfSZxdW90OyAvJmd0OzwvY29kZT4gaW4gY29sbGF0ZSBtb2RlLCBtaWdo dCBkaXNwbGF5IHRoZSBnaXZlbiBhcnRpY2xlcyB0aGF0IGhhdmUga2V5d29yZHMgbWF0Y2hp bmcgZXZlcnkgdXNlci1zdWJtaXR0ZWQgc2VhcmNoIHRlcm08L2xpPgoJCTxsaT48Y29kZT4m bHQ7dHhwOnNtZF9pZiBmaWVsZD0mcXVvdDt7c21kX3Zhcl9jb3VudGVyfSZxdW90OyBvcGVy YXRvcj0mcXVvdDtlcSZxdW90OyB2YWx1ZT0mcXVvdDt7c21kX3Zhcl90b3RhbH0mcXVvdDsm Z3Q7VGhpcyBpcyB0aGUgbGFzdCBpdGVtJmx0Oy90eHA6c21kX2lmJmd0OzwvY29kZT48L2xp PgoJPC91bD4KCgk8aDMgaWQ9ImNvbGxhdGUiPkNvbGxhdGUgbW9kZTwvaDM+CgoJPHA+SW5z dGVhZCBvZiBwYXJzaW5nIGVhY2ggdmFyaWFibGUgd2l0aCB0aGUgZm9ybS9jb250YWluZXIs IHlvdSBtYXkgZWxlY3QgdG8gaW50ZXJuYWxseSAmIzgyMTY7Y29sbGVjdCYjODIxNzsgYWxs IG1hdGNoaW5nIHZhcmlhYmxlcyBhbmQgb3V0cHV0IHRoZW0gaW4gb25lIGJpZyBsaXN0IHZp YSB0aGUgZm9ybS4gVGh1cywgdGhlIGZvcm0gaXMgb25seSBjYWxsZWQgb25jZSBhdCB0aGUg ZW5kLiBJdCBtYXkgc2VlbSB1c2VsZXNzIGJ1dCBpdCBjYW4gYmUgb2YgdmFsdWUgZm9yIGNy ZWF0aW5nIGxpc3RzIG9mIHRoaW5ncyBmcm9tIGVhY2ggbWF0Y2hpbmcgdmFyaWFibGUuPC9w PgoKCTxwPlN0YXJ0aW5nIHNpbXBseSwgPGNvZGU+Y29sbGF0ZT0mcXVvdDsxJnF1b3Q7PC9j b2RlPiBzd2l0Y2hlcyBjb2xsYXRpb24gbW9kZSBvbi4gSWYgdGhlIHBsdWdpbiBtYXRjaGVk IDMgdmFyaWFibGVzIGZyb20geW91ciBhcnRpY2xlIGFuZCB5b3Ugd2VyZSB0byB1c2UgdGhl IHJlcGxhY2VtZW50IHRhZ3MgaW4geW91ciBmb3JtIGxpa2UgdGhpczo8L3A+Cgo8cHJlIGNs YXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj5UaGUgbWF0Y2hpbmcgdmFyczoge3Nt ZF92YXJfbmFtZX0gPSB7c21kX3Zhcl92YWx1ZX0KPC9jb2RlPjwvcHJlPgoKCTxwPnlvdSBt aWdodCBnZXQgdGhpczo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJs b2NrIj5UaGUgbWF0Y2hpbmcgdmFyczogc2VjdGlvbixjYXRlZ29yeTEsY2F0ZWdvcnkyID0g YXJ0aWNsZSxuZXdzLHBvbGl0aWNzCjwvY29kZT48L3ByZT4KCgk8cD5Db21wYXJlIHRoYXQg d2l0aCB0aGUgcmVndWxhciBtb2RlLCB3aGljaCBvdXRwdXRzOjwvcD4KCjxwcmUgY2xhc3M9 ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPlRoZSBtYXRjaGluZyB2YXJzOiBzZWN0aW9u ID0gYXJ0aWNsZQpUaGUgbWF0Y2hpbmcgdmFyczogY2F0ZWdvcnkxID0gbmV3cwpUaGUgbWF0 Y2hpbmcgdmFyczogY2F0ZWdvcnkyID0gcG9saXRpY3MKPC9jb2RlPjwvcHJlPgoKCTxwPlNv bWV0aW1lcyBpdCYjODIxNztzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIHB1dCBxdW90ZXMgYXJv dW5kIGVhY2ggaXRlbTsgeW91IGNhbiB0ZWxsIGNvbGxhdGUgbW9kZSB0byBkbyB0aGF0Ojwv cD4KCgk8cD48Y29kZT5jb2xsYXRlPSZxdW90O3F1b3RlOntzbWRfdmFyX3ZhbHVlfSZxdW90 OzwvY29kZT48L3A+CgoJPHA+WW91IHdvdWxkIHRoZW4gZ2V0OjwvcD4KCjxwcmUgY2xhc3M9 ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPlRoZSBtYXRjaGluZyB2YXJzOiBzZWN0aW9u LGNhdGVnb3J5MSxjYXRlZ29yeTIgPSAmIzM5O2FydGljbGUmIzM5OywmIzM5O25ld3MmIzM5 OywmIzM5O3BvbGl0aWNzJiMzOTsKPC9jb2RlPjwvcHJlPgoKCTxwPlRoZSBkZWxpbWl0ZXIg KGEgY29tbWEgaW4gdGhpcyBjYXNlKSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSA8Y29k ZT5vdXRkZWxpbTwvY29kZT4gYXR0cmlidXRlLiBZb3UgY2FuIHF1b3RlIG1vcmUgdGhhbiBv bmUgdGhpbmcgYXQgb25jZSBieSBzcGVjaWZ5aW5nIHRoZSBpdGVtcyBhcyBhIGRlbGltaXRl ZCBsaXN0OjwvcD4KCgk8cD48Y29kZT5jb2xsYXRlPSZxdW90O3F1b3RlOntzbWRfdmFyX25h bWV9OntzbWRfdmFyX3ZhbHVlfSZxdW90OzwvY29kZT48L3A+CgoJPHA+YnV0IHRoZXJlJiM4 MjE3O3Mgbm90IG11Y2ggcG9pbnQgYmVjYXVzZSB0aGVyZSBhcmUgb25seSB0d28gcmVwbGFj ZW1lbnQgdGFncyBhbmQgeW91IGNhbiB0aHVzIHVzZSB0aGUgc2hvcnRjdXQgPGNvZGU+Y29s bGF0ZT0mcXVvdDtxdW90ZSZxdW90OzwvY29kZT4gdG8gcXVvdGUgdGhlbSBhbGwuIFRoZSBk ZWxpbWl0ZXIgdXNlZCBiZXR3ZWVuIGl0ZW1zICh0aGUgY29sb24pIGNhbiBiZSBvdmVycmlk ZW4gd2l0aCB0aGUgPGNvZGU+cGFyYW1kZWxpbTwvY29kZT4gYXR0cmlidXRlLjwvcD4KCgk8 cD5UaGUgc2Vjb25kIHNwZWNpYWwgZmVhdHVyZSBvZiBjb2xsYXRpb24gbW9kZSBpcyB0aGF0 IHlvdSBkbyBub3QgaGF2ZSB0byBhbHdheXMgb3V0cHV0IHRoZSBlbnRpcmUgbGlzdC4gWW91 IGNhbiBncmFiIGluZGl2aWR1YWwgZW50aXRpZXMgZnJvbSB3aXRoaW4gdGhlIGludGVybmFs IGFycmF5IGJ5IHVzaW5nIHRoZSAmIzgyMTY7IyYjODIxNzsgbm90YXRpb24gaW4geW91ciBm b3JtOjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPntzbWRf dmFyX3ZhbHVlfSBtaWdodCBvdXRwdXQgJiMzOTthcnRpY2xlJiMzOTssJiMzOTtuZXdzJiMz OTssJiMzOTtwb2xpdGljcyYjMzk7IChhcyBiZWZvcmUpCntzbWRfdmFyX3ZhbHVlIzF9IHdv dWxkIG9ubHkgb3V0cHV0IGFydGljbGUKe3NtZF92YXJfbmFtZSMzfSB3b3VsZCBvbmx5IG91 dHB1dCBjYXRlZ29yeTIKPC9jb2RlPjwvcHJlPgoKCTxwPk5vdGUgdGhhdCB3aGVuIHB1bGxp bmcgb3V0IGluZGl2aWR1YWwgZW50cmllcyB0aGV5IDxzdHJvbmc+ZG8gbm90PC9zdHJvbmc+ IGdldCBxdW90ZXMgYWRkZWQgdG8gdGhlbSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHlvdSB1 c2VkIDxjb2RlPnF1b3RlPC9jb2RlPiBvciBub3QuIFRoaXMgaXMgYmVjYXVzZSBpdCBpcyBh IHNpbmdsZSBpdGVtIHNvIHlvdSBjYW4gZWFzaWx5IHB1dCB0aGUgcXVvdGVzIGluIHRoZSBm b3JtIGl0c2VsZiAodml6OiA8Y29kZT4mcXVvdDt7c21kX3Zhcl9uYW1lIzJ9JnF1b3Q7PC9j b2RlPik8L3A+CgoJPGgyIGlkPSJleGFtcGxlcyI+RXhhbXBsZXM8L2gyPgoKCTxoMyBpZD0i ZWcxIj5FeGFtcGxlIDE8L2gzPgoKCTxwPkRpc3BsYXkgZWFjaCBhcnRpY2xlIGltYWdlIGZy b20gYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBJRHMgaW4gdGhlIEFydGljbGUgSW1hZ2Ug ZmllbGQuPC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2RlIGNsYXNzPSJibG9jayI+Jmx0 O3R4cDpzbWRfZWFjaCBpbmNsdWRlPSZxdW90O2FydGljbGVfaW1hZ2UmcXVvdDsgc3Vic2V0 PSZxdW90OzImcXVvdDsmZ3Q7CiAgJmx0O3R4cDppbWFnZSBpZD0mcXVvdDt7c21kX3Zhcl92 YWx1ZX0mcXVvdDsgLyZndDsKJmx0Oy90eHA6c21kX2VhY2gmZ3Q7CjwvY29kZT48L3ByZT4K Cgk8aDMgaWQ9ImVnMiI+RXhhbXBsZSAyPC9oMz4KCgk8cD5EaXNwbGF5IGVhY2ggYXJ0aWNs ZSBpbWFnZSBmcm9tIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgSURzIGluIHRoZSBBcnRp Y2xlIEltYWdlIGZpZWxkLCBhbmQgYWxzbyBhbGxvdyBJRHMgdG8gYmUgZ2l2ZW4gaW4gdGhl IDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmUgdmlhIHRoZSB2YXJpYWJsZSBu YW1lIDxjb2RlPm15X2ltYWdlX2xpc3Q8L2NvZGU+IDo8L3A+Cgo8cHJlIGNsYXNzPSJibG9j ayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7dHhwOnNtZF9lYWNoIHR5cGU9JnF1b3Q7Zmll bGQsIHVybHZhciZxdW90OwogICAgIGluY2x1ZGU9JnF1b3Q7YXJ0aWNsZV9pbWFnZSwgbXlf aW1hZ2VfbGlzdCZxdW90OwogICAgIHN1YnNldD0mcXVvdDsyJnF1b3Q7IGZvcm09JnF1b3Q7 dmFyb3V0JnF1b3Q7IHZhcl9wcmVmaXg9JnF1b3Q7bWVfJnF1b3Q7IC8mZ3Q7CjwvY29kZT48 L3ByZT4KCgk8cD5BbmQgaW4gZm9ybSA8Y29kZT52YXJvdXQ8L2NvZGU+OjwvcD4KCjxwcmUg Y2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDt0eHA6aW1hZ2UgaWQ9JnF1 b3Q7e21lX3Zhcl92YWx1ZX0mcXVvdDsgLyZndDsKPC9jb2RlPjwvcHJlPgoKCTxoMyBpZD0i ZWczIj5FeGFtcGxlIDM8L2gzPgoKCTxwPlRoaXMgaXMgc2ltcGx5IHRvIGhpZ2hsaWdodCB0 aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdmFyaW91cyBtYXRjaGluZyBtb2Rlcy4gTGV0 JiM4MjE3O3MgdGFrZSBhIHNpbXBsZSBhcnRpY2xlOjwvcD4KCgk8dWw+CgkJPGxpPnNlY3Rp b246IGFuaW1hbHM8L2xpPgoJCTxsaT50aXRsZSAodXJsX3RpdGxlKSA6IFRoZSBsaW9uICh0 aGUtbGlvbik8L2xpPgoJCTxsaT5jYXRlZ29yeTE6IG1hbW1hbDwvbGk+CgkJPGxpPmNhdGVn b3J5MjogZGFuZ2Vyb3VzPC9saT4KCQk8bGk+YXJ0aWNsZV9pbWFnZTogMjUsIDI4LCAxMjwv bGk+CgkJPGxpPmtleXdvcmRzOiBiaWcsIGNhdCwgbWFuZSwgZnVyLCB0ZWV0aCwgcm9hciwg Y2hvbXAsIG91Y2g8L2xpPgoJCTxsaT5jdXN0b20xICgmIzgyMjA7b3JpZ2luJiM4MjIxOyk6 IGFmcmljYTwvbGk+Cgk8L3VsPgoKCTxwPlRoZXJlIGFyZSBhIHdob2xlIGhvc3Qgb2Ygb3Ro ZXIgdmFyaWFibGVzIChzd2l0Y2ggZGVidWc9JiM4MjIwOzEmIzgyMjE7IG9uIHRvIHNlZSB0 aGVtIGFsbCBmb3IgeW91ciBjaG9zZW4gPGNvZGU+dHlwZTwvY29kZT5zKSBidXQgd2UmIzgy MTc7bGwgY29uY2VudHJhdGUgb24gdGhlc2UgZm9yIG5vdyB0byBrZWVwIHRoaW5ncyBzaW1w bGUuPC9wPgoKCTx0YWJsZT4KCQk8dHI+CgkJCTx0aD50YWcgb3B0aW9ucyA8L3RoPgoJCQk8 dGg+dmFycyByZXR1cm5lZCA8L3RoPgoJCQk8dGg+cmVtYXJrcyA8L3RoPgoJCTwvdHI+CgkJ PHRyPgoJCQk8dGQ+IG1hdGNoPSYjODIyMDtjYXQmIzgyMjE7IDwvdGQ+CgkJCTx0ZD4gY2F0 ZWdvcnkxLCBjYXRlZ29yeTIgPC90ZD4KCQkJPHRkPiBkZWZhdWx0IGlzIHRvIG1hdGNoIG5h bWUgb25seSA8L3RkPgoJCTwvdHI+CgkJPHRyPgoJCQk8dGQ+IG1hdGNoPSYjODIyMDtjYXQm IzgyMjE7IG1hdGNod2l0aD0mIzgyMjA7bmFtZSwgdmFsdWUmIzgyMjE7IDwvdGQ+CgkJCTx0 ZD4gY2F0ZWdvcnkxLCBjYXRlZ29yeTIsIGtleXdvcmRzLCBpZF9rZXl3b3JkcyA8L3RkPgoJ CQk8dGQ+IG5vdyBjaGVja3MgdmFsdWUgYXMgd2VsbCA8L3RkPgoJCTwvdHI+CgkJPHRyPgoJ CQk8dGQ+IG1hdGNoPSYjODIyMDtjYXQmIzgyMjE7IGluY2x1ZGU9JiM4MjIwO2FydGljbGVf aW1hZ2UmIzgyMjE7IDwvdGQ+CgkJCTx0ZD4gY2F0ZWdvcnkxLCBjYXRlZ29yeTIsIGFydGlj bGVfaW1hZ2UgPC90ZD4KCQkJPHRkPiBpbmNsdWRlcyBhcmUgYWx3YXlzIHNlbGVjdGVkIDwv dGQ+CgkJPC90cj4KCQk8dHI+CgkJCTx0ZD4gbWF0Y2g9JiM4MjIwO2NhdCYjODIyMTsgaW5j bHVkZT0mIzgyMjA7YXJ0aWNsZV9pbWFnZSwgb3JpZ2luJiM4MjIxOyBzdWJzZXQ9JiM4MjIw OzEmIzgyMjE7IDwvdGQ+CgkJCTx0ZD4gY2F0ZWdvcnkxLCBjYXRlZ29yeTIsIG9yaWdpbiwg YXJ0aWNsZV9pbWFnZSwgYXJ0aWNsZV9pbWFnZV8xLCBhcnRpY2xlX2ltYWdlXzIsIGFydGlj bGVfaW1hZ2VfMyA8L3RkPgoJCQk8dGQ+IGxvb2tlZCAmIzgyMjA7aW5zaWRlJiM4MjIxOyBl YWNoIHZhciB0byBmaW5kIGFueSBsaXN0cyA8L3RkPgoJCTwvdHI+CgkJPHRyPgoJCQk8dGQ+ IG1hdGNoPSYjODIyMDtjYXQmIzgyMjE7IGluY2x1ZGU9JiM4MjIwO2FydGljbGVfaW1hZ2Us IG9yaWdpbiYjODIyMTsgc3Vic2V0PSYjODIyMDsyJiM4MjIxOyA8L3RkPgoJCQk8dGQ+IGFy dGljbGVfaW1hZ2VfMSwgYXJ0aWNsZV9pbWFnZV8yLCBhcnRpY2xlX2ltYWdlXzMgPC90ZD4K CQkJPHRkPiByZXR1cm4gPGVtPm9ubHk8L2VtPiBkYXRhIHNldHMgdGhhdCBjb250YWluIGxp c3RzIGFuZCByZW1vdmVzIHRoZSBhZ2dyZWdhdGUgKGJhc2UpIGVudHJ5IDwvdGQ+CgkJPC90 cj4KCQk8dHI+CgkJCTx0ZD4gbWF0Y2g9JiM4MjIwO2NhdCwgYXJ0aWNsZV9pbWFnZSYjODIy MTsgbWF0Y2h3aXRoPSYjODIyMDtuYW1lLHZhbHVlJiM4MjIxOyBzdWJzZXQ9JiM4MjIwOzIm IzgyMjE7IDwvdGQ+CgkJCTx0ZD4gYXJ0aWNsZV9pbWFnZV8xLCBhcnRpY2xlX2ltYWdlXzIs IGFydGljbGVfaW1hZ2VfMywga2V5d29yZHMsIGlkX2tleXdvcmRzIDwvdGQ+CgkJCTx0ZD4g Y2hlY2tzIGJvdGggbmFtZSBhbmQgdmFsdWUgZm9yIGVhY2ggbWF0Y2ggdGVybSwgYW5kIG9u bHkgc2hvd3MgaXRlbXMgdGhhdCBoYXZlIGxpc3RzIGluIHRoZW0gKGlmIDxjb2RlPmtleXdv cmRzPC9jb2RlPiBoZWxkIGp1c3Qgb25lIGl0ZW0gJiM4MjIwO2NhdCYjODIyMTsgaXQgd291 bGQgPGVtPm5vdDwvZW0+IGJlIGRpc3BsYXllZCkgPC90ZD4KCQk8L3RyPgoJPC90YWJsZT4K Cgk8cD5Ob3RlIHRoYXQgaWYgeW91IGFyZSB1c2luZyB0aGlzIHRhZyBpbiBhbiBhcnRpY2xl LCB0aGUgJiM4MjE2O2JvZHkmIzgyMTc7IG1heSBtYXRjaCBiZWNhdXNlIGl0IGNvbnRhaW5z IHRoZSBzbWRfZWFjaCB0YWcgd2hpY2ggY29udGFpbnMgdGhlIHZlcnkgaW5mb3JtYXRpb24g eW91IGFyZSBtYXRjaGluZyEgSW4gdGhpcyBjYXNlLCBhZGRpbmcgPGNvZGU+ZXhjbHVkZT0m cXVvdDtib2R5JnF1b3Q7PC9jb2RlPiB3aWxsIHJlbW92ZSBpdCBmcm9tIHRoZSByZXN1bHRz LjwvcD4KCgk8aDMgaWQ9ImVnNCI+RXhhbXBsZSA0PC9oMz4KCgk8cD5Gcm9tIGEgcGFnZSB0 ZW1wbGF0ZSwgYWxsb3cgdmlzaXRvcnMgdG8gZGlzcGxheSBhbnkgbnVtYmVyIG9mIGFydGlj bGVzLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48Y29kZSBjbGFzcz0iYmxvY2siPiZsdDtm b3JtIG5hbWU9JnF1b3Q7c2hvd19hcnRzJnF1b3Q7IGFjdGlvbj0mcXVvdDsvbXkvcmVzdWx0 cy9wYWdlJnF1b3Q7Jmd0OwogICZsdDt0eHA6YXJ0aWNsZV9jdXN0b20gZm9ybT0mcXVvdDts aXN0X2NoZWNrcyZxdW90OwogICAgICAgY2F0ZWdvcnk9JnF1b3Q7YW5pbWFscyZxdW90OyBs aW1pdD0mcXVvdDs5OTkmcXVvdDsgLyZndDsKICAmbHQ7aW5wdXQgdHlwZT0mcXVvdDtzdWJt aXQmcXVvdDsgLyZndDsKJmx0Oy9mb3JtJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+WW91ciBm b3JtIDxjb2RlPmxpc3RfY2hlY2tzPC9jb2RlPiBzaW1wbHkgZGlzcGxheXMgdGhlIGFydGlj bGUgdGl0bGUgYW5kIGEgY2hlY2tib3g6PC9wPgoKPHByZSBjbGFzcz0iYmxvY2siPjxjb2Rl IGNsYXNzPSJibG9jayI+Jmx0O2xpJmd0OwombHQ7dHhwOnRpdGxlIC8mZ3Q7Jmx0O2lucHV0 IHR5cGU9JnF1b3Q7Y2hlY2tib3gmcXVvdDsKICAgICBuYW1lPSZxdW90O2FydGljbGVfbGlz dHNbXSZxdW90OwogICAgIHZhbHVlPSZxdW90OyZsdDt0eHA6YXJ0aWNsZV9pZCAvJmd0OyZx dW90OyAvJmd0OwombHQ7L2xpJmd0Owo8L2NvZGU+PC9wcmU+CgoJPHA+V2hlbiB0aGUgdXNl ciBzdWJtaXRzIHRoZSBmb3JtIHdlIGNhbiB1c2Ugc21kX2VhY2ggdG8gZmluZCB3aGljaCBj aGVja2JveGVzIGhhdmUgYmVlbiBjbGlja2VkIGFuZCBzaG93IHRoZSByZWxldmFudCBhcnRp Y2xlczo8L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4mbHQ7 dHhwOnNtZF9lYWNoIHR5cGU9JnF1b3Q7dXJsdmFyJnF1b3Q7CiAgICAgbWF0Y2g9JnF1b3Q7 YXJ0aWNsZV9saXN0cyZxdW90OyBzdWJzZXQ9JnF1b3Q7MiZxdW90OyZndDsKICAmbHQ7dHhw OmFydGljbGVfY3VzdG9tIGlkPSZxdW90O3tzbWRfdmFyX3ZhbHVlfSZxdW90OyAvJmd0Owom bHQ7L3R4cDpzbWRfZWFjaCZndDsKPC9jb2RlPjwvcHJlPgoKCTxwPkFsdGVybmF0aXZlbHks IGlmIHlvdSBhcmUgdXNpbmcgYSBjb3B5IG9mIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IHRoYXQgc3VwcG9ydHMgbGlzdHMgaW4gYXJ0aWNsZV9jdXN0b20mIzgyMTc7cyA8Y29k ZT5pZDwvY29kZT4gYXR0cmlidXRlIHlvdSBjYW4gZHJvcCB0aGUgPGNvZGU+c3Vic2V0PC9j b2RlPi48L3A+CgoJPGgyIGlkPSJjaGFuZ2Vsb2ciPkNoYW5nZWxvZzwvaDI+CgoJPHVsPgoJ CTxsaT4xMiBKdW4gMDggfCAwLjEgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJCTxsaT4yMiBK dW4gMDggfCAwLjExIHwgQWRkZWQgdHlwZT1maXhlZCAodGhhbmtzIG1yZGFsZSk8L2xpPgoJ CTxsaT4wNCBBcHIgMDkgfCAwLjEyIHwgRml4ZWQgPGNvZGU+c3Vic2V0PSZxdW90OzImcXVv dDs8L2NvZGU+IGJ1ZyB3aXRoIHNpbmdsZSBlbnRyaWVzICh0aGFua3MgamVyZW15d29vZCkg OyBhZGRlZCA8Y29kZT57dmFyX2NvdW50ZXJ9PC9jb2RlPiBhbmQgPGNvZGU+e3Zhcl90b3Rh bH08L2NvZGU+ICh0aGFua3MgbXJkYWxlKTwvbGk+CgkJPGxpPjMwIEF1ZyAwOSB8IDAuMiB8 IEFkZGVkIDxjb2RlPnZhcl9wcmVmaXg8L2NvZGU+IGF0dHJpYnV0ZSBhbmQgc2V0IGl0IHRv IDxjb2RlPnNtZF88L2NvZGU+IGJ5IGRlZmF1bHQ8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0t ICoqKiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4K I3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13 ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1v bm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLmJs b2NrIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNr Z3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4 IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojc21kX2hlbHAgYTpsaW5rLCAjc21kX2hlbHAgYTp2 aXNpdGVkIHsgY29sb3I6ICMwMGM7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJv dHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNzbWRfaGVscCBh OmhvdmVyLCAjc21kX2hlbHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0 aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0 b206MXB4O30KI3NtZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2Vvcmdp YSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9o ZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHgg MCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNz bWRfaGVscCBoMyB7IGNvbG9yOiAjMDc5OyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMt c2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFu c2Zvcm06IHVwcGVyY2FzZTsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CiNzbWRfaGVs cCBoNCB7IGZvbnQ6IGJvbGQgMTFweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNp bmc6IDFweDsgbWFyZ2luOiAxMHB4IDAgMCA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsg fQojc21kX2hlbHAgLmF0bm0geyBmb250LXdlaWdodDpib2xkOyBjb2xvcjojMzNkOyB9CiNz bWRfaGVscCAubWFuZCB7IGJhY2tncm91bmQ6I2VlZTsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5 OTsgfQojc21kX2hlbHAgdGFibGUge3dpZHRoOjkwJTsgdGV4dC1hbGlnbjpjZW50ZXI7IHBh ZGRpbmctYm90dG9tOjFlbTsgYm9yZGVyOjFweCBzb2xpZCAjNjY2O30KI3NtZF9oZWxwIHRk LCAjc21kX2hlbHAgdGgge2JvcmRlcjoxcHggc29saWQgIzk5OTsgcGFkZGluZzouNWVtIDA7 fQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1YXJlOyB9CiNzbWRfaGVscCBs aSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFy Z2luLXRvcDo1cHg7IH0KPC9zdHlsZT4KPCEtLSAqKiogRU5EIFBMVUdJTiBDU1MgKioqIC0t PgoiO3M6NDoiY29kZSI7czo4NDE0OiIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBJdGVyYXRlIG92ZXIgYXJi aXRyYXJ5IG1hdGNoaW5nIHZhcmlhYmxlcywgZWl0aGVyIGZyb20gVFhQIGZpZWxkcyBvciBv biB0aGUgVVJMIGxpbmUNCi8vIGJ5IFN0ZWYgRGF3c29uDQpmdW5jdGlvbiBzbWRfZWFjaCgk YXR0cywgJHRoaW5nPScnKSB7DQoJZ2xvYmFsICRwcmV0ZXh0LCAkdGhpc2FydGljbGUsICR0 aGlzZmlsZSwgJHRoaXNsaW5rLCAkdmFyaWFibGU7DQoNCglleHRyYWN0KGxBdHRzKGFycmF5 KA0KCQkndHlwZScgPT4gJ2ZpZWxkJywNCgkJJ2luY2x1ZGUnID0+ICcnLA0KCQknZXhjbHVk ZScgPT4gJycsDQoJCSdtYXRjaCcgPT4gJycsDQoJCSdtYXRjaHdpdGgnID0+ICduYW1lJywN CgkJJ3N1YnNldCcgPT4gJzAnLA0KCQknY29sbGF0ZScgPT4gJycsDQoJCSdmb3JtJyA9PiAn JywNCgkJJ2RlbGltJyA9PiAnLCcsDQoJCSdwYXJhbWRlbGltJyA9PiAnOicsDQoJCSdvdXRk ZWxpbScgPT4gJywnLA0KCQknd3JhcHRhZycgPT4gJycsDQoJCSdicmVhaycgPT4gJycsDQoJ CSdjbGFzcycgPT4gJycsDQoJCSd2YXJfcHJlZml4JyA9PiAnc21kXycsDQoJCSdkZWJ1Zycg PT4gJzAnLA0KCSksICRhdHRzKSk7DQoNCgkvLyBMb29rdXBzIGZvciBhbGxvd2FibGUgb3B0 aW9ucw0KCSRtYXRjaE9wdHMgPSBhcnJheSgnbmFtZScsICd2YWx1ZScpOw0KDQoJLy8gVmFs aWRhdGUgdGhlIG9wdGlvbnMNCgkkdGhpbmcgPSAoZW1wdHkoJGZvcm0pKSA/ICR0aGluZyA6 IGZldGNoX2Zvcm0oJGZvcm0pOw0KCSR0aGluZyA9IChlbXB0eSgkdGhpbmcpKSA/ICd7Jy4k dmFyX3ByZWZpeC4ndmFyX3ZhbHVlfScgOiAkdGhpbmc7DQoNCgkkaW5jbHVkZSA9IGRvX2xp c3QoJGluY2x1ZGUsICRkZWxpbSk7DQoJJGluY2x1ZGUgPSAoJGluY2x1ZGVbMF0gPT0gIiIp ID8gYXJyYXkoKSA6ICRpbmNsdWRlOw0KCSRleGNsdWRlID0gZG9fbGlzdCgkZXhjbHVkZSwg JGRlbGltKTsNCgkkZXhjbHVkZSA9ICgkZXhjbHVkZVswXSA9PSAiIikgPyBhcnJheSgpIDog JGV4Y2x1ZGU7DQoJJG1hdGNoID0gZG9fbGlzdCgkbWF0Y2gsICRkZWxpbSk7DQoJJG1hdGNo ID0gKCRtYXRjaFswXSA9PSAiIikgPyBhcnJheSgpIDogJG1hdGNoOw0KCSRtYXRjaHdpdGgg PSBkb19saXN0KCRtYXRjaHdpdGgsICRkZWxpbSk7DQoJZm9yZWFjaCAoJG1hdGNod2l0aCBh cyAkdGhpc21hdGNoKSB7DQoJCSRtYXRjaGVzW10gPSAoaW5fYXJyYXkoJHRoaXNtYXRjaCwk bWF0Y2hPcHRzKSkgPyAkdGhpc21hdGNoIDogJG1hdGNoT3B0c1swXTsNCgl9DQoJJG1hdGNo ZXMgPSBhcnJheV91bmlxdWUoJG1hdGNoZXMpOw0KDQoJLy8gU2V0IHVwIGNvbGxhdGVkIHF1 b3RpbmcgaWYgbmVjZXNzYXJ5DQoJaWYgKCRjb2xsYXRlKSB7DQoJCSRxdW90ZXMgPSBhcnJh eSgnU01ETk9ORScpOw0KCQkkY29sbGF0ZU9wdHMgPSBkb19saXN0KCRjb2xsYXRlLCAkZGVs aW0pOw0KCQlmb3JlYWNoICgkY29sbGF0ZU9wdHMgYXMgJG9wdGlvbikgew0KCQkJJGluZGV4 ZXMgPSBkb19saXN0KCRvcHRpb24sICRwYXJhbWRlbGltKTsNCgkJCSRjb2xUeXBlID0gYXJy YXlfc2hpZnQoJGluZGV4ZXMpOw0KCQkJLy8gU3VwcGx5aW5nICdxdW90ZScgb24gaXRzIG93 biB3aWxsIGVtcHR5IHRoZSByZWxldmFudCBhcnJheSwgaW1wbHlpbmcgIkFMTCIgZmllbGRz IGFyZSB0byBiZSBxdW90ZWQNCgkJCXN3aXRjaCAoJGNvbFR5cGUpIHsNCgkJCQljYXNlICJx dW90ZSI6DQoJCQkJCSRxdW90ZXMgPSAkaW5kZXhlczsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJ CX0NCgl9DQoNCgkvLyBNYWtlIHVwIGFuIGFycmF5IG9mIG5hbWUgPT4gdmFsdWUgcGFpcnMg cG9wdWxhdGVkIGZyb20gdGhlIGFycmF5cyBvZiB0aGUgY2hvc2VuICR0eXBlcw0KCSR0eXBl cyA9IGFycmF5KCk7DQoJJHZhcnMgPSBhcnJheSgpOw0KCSR0eXBlID0gZG9fbGlzdCgkdHlw ZSwgJGRlbGltKTsNCglmb3JlYWNoICgkdHlwZSBhcyAkdGhpc3R5cGUpIHsNCgkJc3dpdGNo ICgkdGhpc3R5cGUpIHsNCgkJCWNhc2UgInVybHZhciI6DQoJCQkJaWYgKCRfUE9TVCkgJHZh cnMgPSBzbWRfZWFjaF9ncmFiKCRfUE9TVCwgJHZhcnMsICdkb1NwZWNpYWwsIGRvU3RyaXBU YWdzJywgJGRlbGltLCAkc3Vic2V0KTsNCgkJCQlpZiAoJF9HRVQpICR2YXJzID0gc21kX2Vh Y2hfZ3JhYigkX0dFVCwgJHZhcnMsICdkb1NwZWNpYWwsIGRvU3RyaXBUYWdzJywgJGRlbGlt LCAkc3Vic2V0KTsNCgkJCQlicmVhazsNCgkJCWNhc2UgInN2cnZhciI6DQoJCQkJaWYgKCRf U0VSVkVSKSAkdmFycyA9IHNtZF9lYWNoX2dyYWIoJF9TRVJWRVIsICR2YXJzLCAnZG9TcGVj aWFsLCBkb1N0cmlwVGFncycsICRkZWxpbSwgJHN1YnNldCk7DQoJCQkJYnJlYWs7DQoJCQlj YXNlICJjb29raWUiOg0KCQkJCWlmICgkX0NPT0tJRSkgJHZhcnMgPSBzbWRfZWFjaF9ncmFi KCRfQ09PS0lFLCAkdmFycywgJ2RvU3BlY2lhbCwgZG9TdHJpcFRhZ3MnLCAkZGVsaW0sICRz dWJzZXQpOw0KCQkJCWJyZWFrOw0KCQkJY2FzZSAidHhwdmFyIjoNCgkJCQlpZiAoJHZhcmlh YmxlKSAkdmFycyA9IHNtZF9lYWNoX2dyYWIoJHZhcmlhYmxlLCAkdmFycywgJycsICRkZWxp bSwgJHN1YnNldCk7DQoJCQkJYnJlYWs7DQoJCQljYXNlICJmaXhlZCI6DQoJCQkJJG5ld3Zh cnMgPSBhcnJheSgpOw0KCQkJCWZvcmVhY2ggKCRpbmNsdWRlIGFzICRrZXkgPT4gJHZhbHVl KSB7DQoJCQkJCSRzdWJzID0gZG9fbGlzdCgkdmFsdWUsICRwYXJhbWRlbGltKTsNCgkJCQkJ aWYgKGNvdW50KCRzdWJzKSA+IDEpIHsNCgkJCQkJCSRuZXd2YXIgPSBhcnJheV9zaGlmdCgk c3Vicyk7DQoJCQkJCQkkZXh0cmF2YXJzWyRuZXd2YXJdID0gam9pbigkZGVsaW0sICRzdWJz KTsNCgkJCQkJCS8vIFRoZSBuZXcgdmFyaWFibGUncyB2YWx1ZXMgaGF2ZSBiZWVuIGV4dHJh Y3RlZCBhbmQgc3RvcmVkLCBzbyBvdmVyd3JpdGUgdGhlIGFycmF5IGVudHJ5IHdpdGgganVz dCB0aGUgdmFyaWFibGUgbmFtZQ0KCQkJCQkJJGluY2x1ZGVbJGtleV0gPSAkbmV3dmFyOw0K CQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkZXh0cmF2YXJzKSAkdmFycyA9IHNtZF9lYWNoX2dy YWIoJGV4dHJhdmFycywgJHZhcnMsICdkb1N0cmlwVGFncycsICRkZWxpbSwgJHN1YnNldCk7 DQoJCQkJYnJlYWs7DQoJCQljYXNlICJmaWVsZCI6DQoJCQljYXNlICJkZWZhdWx0IjoNCgkJ CQlpZiAoJHRoaXNmaWxlKSAkdmFycyA9IHNtZF9lYWNoX2dyYWIoJHRoaXNmaWxlLCAkdmFy cywgJycsICRkZWxpbSwgJHN1YnNldCk7DQoJCQkJaWYgKCR0aGlzbGluaykgJHZhcnMgPSBz bWRfZWFjaF9ncmFiKCR0aGlzbGluaywgJHZhcnMsICcnLCAkZGVsaW0sICRzdWJzZXQpOw0K CQkJCWlmICgkcHJldGV4dCkgJHZhcnMgPSBzbWRfZWFjaF9ncmFiKCRwcmV0ZXh0LCAkdmFy cywgJycsICRkZWxpbSwgJHN1YnNldCk7DQoJCQkJaWYgKCR0aGlzYXJ0aWNsZSkgJHZhcnMg PSBzbWRfZWFjaF9ncmFiKCR0aGlzYXJ0aWNsZSwgJHZhcnMsICdkb1N0cmlwVGFncycsICRk ZWxpbSwgJHN1YnNldCk7DQoJCQkJYnJlYWs7DQoJCX0NCgl9DQoNCglpZiAoJGRlYnVnKSB7 DQoJCWVjaG8gIisrIFZBUklBQkxFIFBPT0wgKysiOw0KCQlkbXAoJHZhcnMpOw0KCX0NCg0K CS8vIEZpbHRlciB0aGUgYXJyYXkgaWYgbmVjZXNzYXJ5IGludG8gYSBzbWFsbGVyIGFycmF5 IG9mIGRlc2lyZWQgZWxlbWVudHMNCgkkZmlsdGVydmFycyA9IGFycmF5KCk7DQoNCgkvLyBO YW1lZCB2YXJpYWJsZXMgYXJlIGFsd2F5cyBjb3BpZWQgYWNyb3NzDQoJaWYgKCRpbmNsdWRl KSB7DQoJCWZvcmVhY2ggKCRpbmNsdWRlIGFzICR0aGlzbmFtZSkgew0KCQkJaWYgKCR0aGlz bmFtZSAhPSAiIikgew0KCQkJCSRyZSA9ICcvKCcuJHRoaXNuYW1lLicoX1swLTldKik/KS8n Ow0KCQkJCSRudW0gPSBwcmVnX21hdGNoX2FsbCgkcmUsIGpvaW4oJGRlbGltLGFycmF5X2tl eXMoJHZhcnMpKSwgJGtleW5hbWVzKTsNCgkJCQlmb3IgKCRjdHIgPSAwOyAkY3RyIDwgJG51 bTsgJGN0cisrKSB7DQoJCQkJCSRmaWx0ZXJ2YXJzWyRrZXluYW1lc1swXVskY3RyXV0gPSAk dmFyc1ska2V5bmFtZXNbMF1bJGN0cl1dOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8v IEFueSBuYW1lcy92YWx1ZXMgbWF0Y2hpbmcgJG1hdGNoIGFyZSBhbHNvIGFkZGVkDQoJaWYg KCRtYXRjaCkgew0KCQlmb3JlYWNoICgkdmFycyBhcyAka2V5ID0+ICR2YWwpIHsNCgkJCWlm IChpbl9hcnJheSgibmFtZSIsICRtYXRjaGVzKSAmJiAoIWFycmF5X2tleV9leGlzdHMoJGtl eSwgJGZpbHRlcnZhcnMpKSkgew0KCQkJCWZvcmVhY2ggKCRtYXRjaCBhcyAkdGhpc21hdGNo KSB7DQoJCQkJCWlmICgkdGhpc21hdGNoICYmIHN0cnBvcygka2V5LCAkdGhpc21hdGNoKSAh PT0gZmFsc2UpIHsNCgkJCQkJCWlmICgkZGVidWcpIHsNCgkJCQkJCQlkbXAoIkFERElORyAi LiRrZXkuIiAoZnJvbSBuYW1lKSAiKTsNCgkJCQkJCX0NCgkJCQkJCSRmaWx0ZXJ2YXJzWyRr ZXldID0gJHZhbDsNCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQkJLy8g Tm8gcG9pbnQgY2hlY2tpbmcgdGhlIHZhbHVlcyBpZiB0aGUgdmFyaWFibGUgaGFzIGFscmVh ZHkgYmVlbiBhZGRlZCB0byB0aGUgZmlsdGVyZWQgbGlzdA0KCQkJaWYgKGluX2FycmF5KCJ2 YWx1ZSIsICRtYXRjaGVzKSAmJiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGZpbHRlcnZh cnMpKSkgew0KCQkJCWZvcmVhY2ggKCRtYXRjaCBhcyAkdGhpc21hdGNoKSB7DQoJCQkJCWlm ICgkdGhpc21hdGNoICYmIHN0cnBvcygkdmFsLCAkdGhpc21hdGNoKSAhPT0gZmFsc2UpIHsN CgkJCQkJCWlmICgkZGVidWcpIHsNCgkJCQkJCQlkbXAgKCJBRERJTkcgIi4ka2V5LiIgKGZy b20gdmFsdWUpICIpOw0KCQkJCQkJfQ0KCQkJCQkJJGZpbHRlcnZhcnNbJGtleV0gPSAkdmFs Ow0KCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCgkvLyBS ZW1vdmUgYW55IGV4Y2x1ZGVkIHZhcmlhYmxlcw0KCWlmICgkZXhjbHVkZSkgew0KCQlmb3Jl YWNoICgkZXhjbHVkZSBhcyAkdGhpc25hbWUpIHsNCgkJCWlmICgkdGhpc25hbWUgIT0gIiIp IHsNCgkJCQkkcmUgPSAnLygnLiR0aGlzbmFtZS4nKF9bMC05XSopPykvJzsNCgkJCQkkbnVt ID0gcHJlZ19tYXRjaF9hbGwoJHJlLCBqb2luKCRkZWxpbSxhcnJheV9rZXlzKCRmaWx0ZXJ2 YXJzKSksICRrZXluYW1lcyk7DQoJCQkJZm9yICgkY3RyID0gMDsgJGN0ciA8ICRudW07ICRj dHIrKykgew0KCQkJCQlpZiAoJGRlYnVnKSB7DQoJCQkJCQlkbXAoIkVYQ0xVRElORyAiLiRr ZXluYW1lc1swXVskY3RyXSk7DQoJCQkJCX0NCgkJCQkJdW5zZXQgKCRmaWx0ZXJ2YXJzWyRr ZXluYW1lc1swXVskY3RyXV0pOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIElmIG5v IGZpbHRlcnMgYXJlIHNwZWNpZmllZA0KCWlmICghJGluY2x1ZGUgJiYgISRleGNsdWRlICYm ICEkbWF0Y2gpIHsNCgkJJGZpbHRlcnZhcnMgPSAkdmFyczsNCgl9DQoNCglpZiAoJGRlYnVn ICYmICgkZmlsdGVydmFycyAhPSAkdmFycykpIHsNCgkJZWNobyAiKysgRklMVEVSRUQgVkFS UyArKyI7DQoJCWRtcCgkZmlsdGVydmFycyk7DQoJfQ0KDQoJLy8gVGhyb3cgdGhlIG5hbWUg PT4gdmFsdWUgcGFpcnMgYXQgdGhlIGZvcm0NCgkkb3V0ID0gYXJyYXkoKTsNCgkkY29sbGF0 aW9ucyA9IGFycmF5KCk7DQoJJGN0ciA9IDE7DQoJJHRvdGFsdmFycyA9IGNvdW50KCRmaWx0 ZXJ2YXJzKTsNCg0KCWZvcmVhY2ggKCRmaWx0ZXJ2YXJzIGFzICRrZXkgPT4gJHZhbCkgew0K CQkkcmVwbGFjZW1lbnRzID0gYXJyYXkoDQoJCQkneycuJHZhcl9wcmVmaXguJ3Zhcl9uYW1l fScgPT4gJGtleSwNCgkJCSd7Jy4kdmFyX3ByZWZpeC4ndmFyX3ZhbHVlfScgPT4gJHZhbCwN CgkJCSd7Jy4kdmFyX3ByZWZpeC4ndmFyX2NvdW50ZXJ9JyA9PiAkY3RyLA0KCQkJJ3snLiR2 YXJfcHJlZml4Lid2YXJfdG90YWx9JyA9PiAkdG90YWx2YXJzLA0KCQkpOw0KDQoJCS8vIFNv bG9zIGFyZSBpdGVtcyBpbiB0aGUgb3V0cHV0IGZvcm0gdGhhdCByZXF1aXJlIGRldGFpbHMg ZnJvbSBhIHNwZWNpZmljIHJvdy4gVXNlZnVsIG9ubHkgaW4gY29sbGF0aW9uDQoJCS8vIG1v ZGUsIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSByZXBsYWNlbWVudHMgYXJyYXkgb24gYW4gYXMt bmVlZGVkIGJhc2lzIHRvIHNhdmUgc3BhY2UvdGltZQ0KCQkkc29sb1JFID0gJy9ceycuJHZh cl9wcmVmaXguJyhbYS16MC05X10rKSMnLiRjdHIuJ1x9Lyc7DQoJCSRudW1Tb2xvcyA9IHBy ZWdfbWF0Y2hfYWxsKCRzb2xvUkUsICR0aGluZywgJHNvbG9zKTsNCgkJZm9yICgkc29sb0N0 ciA9IDA7ICRzb2xvQ3RyIDwgJG51bVNvbG9zOyAkc29sb0N0cisrKSB7DQoJCQkkZmllbGRu YW1lID0gJ3snLiR2YXJfcHJlZml4LiRzb2xvc1sxXVskc29sb0N0cl0uJyMnLiRjdHIuJ30n Ow0KCQkJJGdyYWJmaWVsZCA9ICd7Jy4kdmFyX3ByZWZpeC4kc29sb3NbMV1bJHNvbG9DdHJd Lid9JzsNCgkJCSRyZXBsYWNlbWVudHNbJGZpZWxkbmFtZV0gPSAkcmVwbGFjZW1lbnRzWyRn cmFiZmllbGRdOw0KCQl9DQoNCgkJaWYgKCRkZWJ1Zykgew0KCQkJZWNobyAiKysgUkVQTEFD RU1FTlQgIyRjdHIgKysiOw0KCQkJZG1wKCRyZXBsYWNlbWVudHMpOw0KCQl9DQoJCS8vIElu IGNvbGxhdGUgbW9kZSB0aGUgZm9ybSBpcyBvbmx5IHBhcnNlZCBhdCB0aGUgZW5kOiBidWls ZCBhIGNvbGxvc2FsIG11bHRpLWRpbWVuc2lvbiBhcnJheSBvZiBhbGwgaXRlbXMgaGVyZQ0K CQlpZiAoJGNvbGxhdGUpIHsNCgkJCWZvcmVhY2ggKCRyZXBsYWNlbWVudHMgYXMgJGRlZk5h bWUgPT4gJGRlZlZhbCkgew0KCQkJCSRjb2xsYXRpb25zWyRkZWZOYW1lXVtdID0gJGRlZlZh bDsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCSRvdXRbXSA9IHBhcnNlKHN0cnRyKCR0aGluZywg JHJlcGxhY2VtZW50cykpOw0KCQl9DQoNCgkJJGN0cisrOw0KCX0NCg0KCS8vIEhhbmRsZSBx dW90aW5nIG9mIGNvbGxhdGlvbnMNCglpZiAoJGNvbGxhdGUpIHsNCgkJZm9yZWFjaCAoJGNv bGxhdGlvbnMgYXMgJGl0ZW0gPT4gJGxpc3QpIHsNCgkJCS8vIFF1b3RlIHRoZSBsaXN0cyBp ZiByZXF1aXJlZA0KCQkJJGxpc3QgPSAoZW1wdHkoJHF1b3RlcykgfHwgaW5fYXJyYXkoJGl0 ZW0sICRxdW90ZXMpKSA/IGRvQXJyYXkoJGxpc3QsICdkb1F1b3RlJykgOiAkbGlzdDsNCgkJ CSRjb2xsYXRpb25zWyRpdGVtXSA9IGltcGxvZGUoJG91dGRlbGltLCAkbGlzdCk7DQoJCX0N CgkJaWYgKCRkZWJ1Zykgew0KCQkJZWNobyAiKysgQ09MTEFUSU9OUyArKyI7DQoJCQlkbXAo JGNvbGxhdGlvbnMpOw0KCQl9DQoJCSRvdXRbXSA9IHBhcnNlKHN0cnRyKCR0aGluZywgJGNv bGxhdGlvbnMpKTsNCgl9DQoNCglyZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJl YWssICRjbGFzcyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIFRha2UgYW4gYXJyYXkgb2YgbmFt ZS12YWx1ZSBwYWlycywgcHJvY2VzcyBhbmQgY29tYmluZSB0aGVtIHdpdGggd2hhdCBpcyBh bHJlYWR5IGluICRvdXQuDQovLyBIYW5kbGUgc3ViLWxpc3RzIGFzIHdlbGwNCmZ1bmN0aW9u IHNtZF9lYWNoX2dyYWIoJGl0ZW0sICRvdXQ9JycsICRwcm9jPScnLCAkZGxtPScsJywgJHN1 Yj0wKSB7DQoJJG91dCA9ICgkb3V0KSA/ICRvdXQgOiBhcnJheSgpOw0KCSRwcm9jID0gZG9f bGlzdCgkcHJvYywgJGRsbSk7DQoJJHByb2MgPSAoJHByb2NbMF0gPT0gIiIpID8gYXJyYXko KSA6ICRwcm9jOw0KDQoJd2hpbGUgKGxpc3QoJGtleSwgJHZhbCkgPSBlYWNoKCRpdGVtKSkg ew0KCQkkdmFsID0gKGlzX2FycmF5KCR2YWwpKSA/IGpvaW4oJGRsbSwgJHZhbCkgOiAkdmFs Ow0KCQlpZiAoJHN1Yikgew0KCQkJaWYgKCRzdWIgPT0gMSkgew0KCQkJCS8vIEFkZCB0aGUg Y29tcGxldGUgZWxlbWVudCBiZWZvcmUgYXR0ZW1wdGluZyB0byBzcGxpdCBpdA0KCQkJCWZv cmVhY2goJHByb2MgYXMgJG9wKSB7DQoJCQkJCSR2YWwgPSAkb3AoJHZhbCk7DQoJCQkJfQ0K CQkJCSRvdXRbJGtleV0gPSAkdmFsOw0KCQkJfQ0KCQkJJHZhbHMgPSBkb19saXN0KCR2YWws ICRkbG0pOw0KCQkJJGN0ciA9IDE7DQoJCQlmb3JlYWNoICgkdmFscyBhcyAkc3VidmFsKSB7 DQoJCQkJZm9yZWFjaCgkcHJvYyBhcyAkb3ApIHsNCgkJCQkJJHN1YnZhbCA9ICRvcCgkc3Vi dmFsKTsNCgkJCQl9DQoJCQkJJG91dFska2V5LidfJy4kY3RyKytdID0gJHN1YnZhbDsNCgkJ CX0NCgkJfSBlbHNlIHsNCgkJCWZvcmVhY2goJHByb2MgYXMgJG9wKSB7DQoJCQkJJHZhbCA9 ICRvcCgkdmFsKTsNCgkJCX0NCgkJCSRvdXRbJGtleV0gPSAkdmFsOw0KCQl9DQoJfQ0KCXJl dHVybiAkb3V0Ow0KfSI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6NToiZmxhZ3MiO3M6MToiMCI7 czo1OiJvcmRlciI7czoxOiI1IjtzOjM6Im1kNSI7czozMjoiOTdmYzQ4MDMxZjkyODRhODhi YzIwZTI3MmQzYmFmMzEiO30=