ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0IGIvcnVudGltZS9kb2Mvb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRmYjU4MgotLS0gL2Rldi9udWxsCisrKyBiL3J1bnRpbWUvZG9jL29wdGlvbnMudHh0CkBAIC0wLDAgKzEsNjgyNiBAQAorKm9wdGlvbnMudHh0KglGb3IgVmltIHZlcnNpb24gNy4wYWEuICBMYXN0IGNoYW5nZTogMjAwNCBKdW4gMDgKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwJICBieSBCcmFtIE1vb2xlbmFhcgorCisKK09wdGlvbnMJCQkJCQkJKm9wdGlvbnMqCisKKzEuIFNldHRpbmcgb3B0aW9ucwkJCXxzZXQtb3B0aW9ufAorMi4gQXV0b21hdGljYWxseSBzZXR0aW5nIG9wdGlvbnMJfGF1dG8tc2V0dGluZ3wKKzMuIE9wdGlvbnMgc3VtbWFyeQkJCXxvcHRpb24tc3VtbWFyeXwKKworRm9yIGFuIG92ZXJ2aWV3IG9mIG9wdGlvbnMgc2VlIGhlbHAudHh0IHxvcHRpb24tbGlzdHwuCisKK1ZpbSBoYXMgYSBudW1iZXIgb2YgaW50ZXJuYWwgdmFyaWFibGVzIGFuZCBzd2l0Y2hlcyB3aGljaCBjYW4gYmUgc2V0IHRvCithY2hpZXZlIHNwZWNpYWwgZWZmZWN0cy4gIFRoZXNlIG9wdGlvbnMgY29tZSBpbiB0aHJlZSBmb3JtczoKKwlib29sZWFuCQljYW4gb25seSBiZSBvbiBvciBvZmYJCSpib29sZWFuKiAqdG9nZ2xlKgorCW51bWJlcgkJaGFzIGEgbnVtZXJpYyB2YWx1ZQorCXN0cmluZwkJaGFzIGEgc3RyaW5nIHZhbHVlCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gU2V0dGluZyBvcHRpb25zCQkJCQkqc2V0LW9wdGlvbioKKworCQkJCQkJCSo6c2UqICo6c2V0KgorOnNlW3RdCQkJU2hvdyBhbGwgb3B0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRoZWlyIGRlZmF1bHQgdmFsdWUuCisKKzpzZVt0XSBhbGwJCVNob3cgYWxsIGJ1dCB0ZXJtaW5hbCBvcHRpb25zLgorCis6c2VbdF0gdGVybWNhcAkJU2hvdyBhbGwgdGVybWluYWwgb3B0aW9ucy4gIE5vdGUgdGhhdCBpbiB0aGUgR1VJIHRoZQorCQkJa2V5IGNvZGVzIGFyZSBub3Qgc2hvd24sIGJlY2F1c2UgdGhleSBhcmUgZ2VuZXJhdGVkCisJCQlpbnRlcm5hbGx5IGFuZCBjYW4ndCBiZSBjaGFuZ2VkLiAgQ2hhbmdpbmcgdGhlIHRlcm1pbmFsCisJCQljb2RlcyBpbiB0aGUgR1VJIGlzIG5vdCB1c2VmdWwgZWl0aGVyLi4uCisKKwkJCQkJCQkJKkU1MTgqICpFNTE5KgorOnNlW3RdIHtvcHRpb259PwlTaG93IHZhbHVlIG9mIHtvcHRpb259LgorCis6c2VbdF0ge29wdGlvbn0JCVRvZ2dsZSBvcHRpb246IHNldCwgc3dpdGNoIGl0IG9uLgorCQkJTnVtYmVyIG9wdGlvbjogc2hvdyB2YWx1ZS4KKwkJCVN0cmluZyBvcHRpb246IHNob3cgdmFsdWUuCisKKzpzZVt0XSBub3tvcHRpb259CVRvZ2dsZSBvcHRpb246IFJlc2V0LCBzd2l0Y2ggaXQgb2ZmLgorCis6c2VbdF0ge29wdGlvbn0hICAgb3IKKzpzZVt0XSBpbnZ7b3B0aW9ufQlUb2dnbGUgb3B0aW9uOiBJbnZlcnQgdmFsdWUuIHtub3QgaW4gVml9CisKKwkJCQkqOnNldC1kZWZhdWx0KiAqOnNldC0mKiAqOnNldC0mdmkqICo6c2V0LSZ2aW0qCis6c2VbdF0ge29wdGlvbn0mCVJlc2V0IG9wdGlvbiB0byBpdHMgZGVmYXVsdCB2YWx1ZS4gIE1heSBkZXBlbmQgb24gdGhlCisJCQljdXJyZW50IHZhbHVlIG9mICdjb21wYXRpYmxlJy4ge25vdCBpbiBWaX0KKzpzZVt0XSB7b3B0aW9ufSZ2aQlSZXNldCBvcHRpb24gdG8gaXRzIFZpIGRlZmF1bHQgdmFsdWUuIHtub3QgaW4gVml9Cis6c2VbdF0ge29wdGlvbn0mdmltCVJlc2V0IG9wdGlvbiB0byBpdHMgVmltIGRlZmF1bHQgdmFsdWUuIHtub3QgaW4gVml9CisKKzpzZVt0XSBhbGwmCQlTZXQgYWxsIG9wdGlvbnMsIGV4Y2VwdCB0ZXJtaW5hbCBvcHRpb25zLCB0byB0aGVpcgorCQkJZGVmYXVsdCB2YWx1ZS4JVGhlIHZhbHVlcyBvZiAndGVybScsICdsaW5lcycgYW5kCisJCQknY29sdW1ucycgYXJlIG5vdCBjaGFuZ2VkLiB7bm90IGluIFZpfQorCisJCQkJCQkqOnNldC1hcmdzKiAqRTQ4NyogKkU1MjEqCis6c2VbdF0ge29wdGlvbn09e3ZhbHVlfQkJb3IKKzpzZVt0XSB7b3B0aW9ufTp7dmFsdWV9CisJCQlTZXQgc3RyaW5nIG9yIG51bWJlciBvcHRpb24gdG8ge3ZhbHVlfS4KKwkJCUZvciBudW1lcmljIG9wdGlvbnMgdGhlIHZhbHVlIGNhbiBiZSBnaXZlbiBpbiBkZWNpbWFsLAorCQkJaGV4IChwcmVjZWRlZCB3aXRoIDB4KSBvciBvY3RhbCAocHJlY2VkZWQgd2l0aCAnMCcpCisJCQkoaGV4IGFuZCBvY3RhbCBhcmUgb25seSBhdmFpbGFibGUgZm9yIG1hY2hpbmVzIHdoaWNoCisJCQloYXZlIHRoZSBzdHJ0b2woKSBmdW5jdGlvbikuCisJCQlUaGUgb2xkIHZhbHVlIGNhbiBiZSBpbnNlcnRlZCBieSB0eXBpbmcgJ3dpbGRjaGFyJyAoYnkKKwkJCWRlZmF1bHQgdGhpcyBpcyBhIDxUYWI+IG9yIENUUkwtRSBpZiAnY29tcGF0aWJsZScgaXMKKwkJCXNldCkuICBTZWUgfGNtZGxpbmUtY29tcGxldGlvbnwuCisJCQlXaGl0ZSBzcGFjZSBiZXR3ZWVuIHtvcHRpb259IGFuZCAnPScgaXMgYWxsb3dlZCBhbmQKKwkJCXdpbGwgYmUgaWdub3JlZC4gIFdoaXRlIHNwYWNlIGJldHdlZW4gJz0nIGFuZCB7dmFsdWV9CisJCQlpcyBub3QgYWxsb3dlZC4KKwkJCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgZm9yIHVzaW5nIHdoaXRlIHNwYWNlIGFuZAorCQkJYmFja3NsYXNoZXMgaW4ge3ZhbHVlfS4KKworOnNlW3RdIHtvcHRpb259Kz17dmFsdWV9CQkJCSo6c2V0Kz0qCisJCQlBZGQgdGhlIHt2YWx1ZX0gdG8gYSBudW1iZXIgb3B0aW9uLCBvciBhcHBlbmQgdGhlCisJCQl7dmFsdWV9IHRvIGEgc3RyaW5nIG9wdGlvbi4gIFdoZW4gdGhlIG9wdGlvbiBpcyBhCisJCQljb21tYSBzZXBhcmF0ZWQgbGlzdCwgYSBjb21tYSBpcyBhZGRlZCwgdW5sZXNzIHRoZQorCQkJdmFsdWUgd2FzIGVtcHR5LgorCQkJSWYgdGhlIG9wdGlvbiBpcyBhIGxpc3Qgb2YgZmxhZ3MsIHN1cGVyZmx1b3VzIGZsYWdzCisJCQlhcmUgcmVtb3ZlZC4gIE90aGVyd2lzZSB0aGVyZSBpcyBubyBjaGVjayBmb3IgZG91YmxlZAorCQkJdmFsdWVzLiAgWW91IGNhbiBhdm9pZCB0aGlzIGJ5IHJlbW92aW5nIGEgdmFsdWUgZmlyc3QuCisJCQlFeGFtcGxlOiA+CisJCQkJOnNldCBndWlvcHRpb25zLT1UIGd1aW9wdGlvbnMrPVQKKzwJCQlBbHNvIHNlZSB8OnNldC1hcmdzfCBhYm92ZS4KKwkJCXtub3QgaW4gVml9CisKKzpzZVt0XSB7b3B0aW9ufV49e3ZhbHVlfQkJCQkqOnNldF49KgorCQkJTXVsdGlwbHkgdGhlIHt2YWx1ZX0gdG8gYSBudW1iZXIgb3B0aW9uLCBvciBwcmVwZW5kCisJCQl0aGUge3ZhbHVlfSB0byBhIHN0cmluZyBvcHRpb24uICBXaGVuIHRoZSBvcHRpb24gaXMgYQorCQkJY29tbWEgc2VwYXJhdGVkIGxpc3QsIGEgY29tbWEgaXMgYWRkZWQsIHVubGVzcyB0aGUKKwkJCXZhbHVlIHdhcyBlbXB0eS4KKwkJCUFsc28gc2VlIHw6c2V0LWFyZ3N8IGFib3ZlLgorCQkJe25vdCBpbiBWaX0KKworOnNlW3RdIHtvcHRpb259LT17dmFsdWV9CQkJCSo6c2V0LT0qCisJCQlTdWJ0cmFjdCB0aGUge3ZhbHVlfSBmcm9tIGEgbnVtYmVyIG9wdGlvbiwgb3IgcmVtb3ZlCisJCQl0aGUge3ZhbHVlfSBmcm9tIGEgc3RyaW5nIG9wdGlvbiwgaWYgaXQgaXMgdGhlcmUuCisJCQlJZiB0aGUge3ZhbHVlfSBpcyBub3QgZm91bmQgaW4gYSBzdHJpbmcgb3B0aW9uLCB0aGVyZQorCQkJaXMgbm8gZXJyb3Igb3Igd2FybmluZy4gIFdoZW4gdGhlIG9wdGlvbiBpcyBhIGNvbW1hCisJCQlzZXBhcmF0ZWQgbGlzdCwgYSBjb21tYSBpcyBkZWxldGVkLCB1bmxlc3MgdGhlIG9wdGlvbgorCQkJYmVjb21lcyBlbXB0eS4KKwkJCVdoZW4gdGhlIG9wdGlvbiBpcyBhIGxpc3Qgb2YgZmxhZ3MsIHt2YWx1ZX0gbXVzdCBiZQorCQkJZXhhY3RseSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgb3B0aW9uLiAgUmVtb3ZlIGZsYWdzCisJCQlvbmUgYnkgb25lIHRvIGF2b2lkIHByb2JsZW1zLgorCQkJQWxzbyBzZWUgfDpzZXQtYXJnc3wgYWJvdmUuCisJCQl7bm90IGluIFZpfQorCitUaGUge29wdGlvbn0gYXJndW1lbnRzIHRvICI6c2V0IiBtYXkgYmUgcmVwZWF0ZWQuICBGb3IgZXhhbXBsZTogPgorCTpzZXQgYWkgbm9zaSBzdz0zIHRzPTMKK0lmIHlvdSBtYWtlIGFuIGVycm9yIGluIG9uZSBvZiB0aGUgYXJndW1lbnRzLCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgZ2l2ZW4KK2FuZCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyB3aWxsIGJlIGlnbm9yZWQuCisKKwkJCQkJCQkqOnNldC12ZXJib3NlKgorV2hlbiAndmVyYm9zZScgaXMgbm9uLXplcm8sIGRpc3BsYXlpbmcgYW4gb3B0aW9uIHZhbHVlIHdpbGwgYWxzbyB0ZWxsIHdoZXJlIGl0Cit3YXMgbGFzdCBzZXQuICBFeGFtcGxlOiA+CisJOnZlcmJvc2Ugc2V0IHNoaWZ0d2lkdGggY2luZGVudD8KKwkgIHNoaWZ0d2lkdGg9NAorCQkgIExhc3Qgc2V0IGZyb20gbW9kZWxpbmUKKwkgIGNpbmRlbnQKKwkJICBMYXN0IHNldCBmcm9tIC91c3IvbG9jYWwvc2hhcmUvdmltL3ZpbTYwL2Z0cGx1Z2luL2MudmltCitUaGlzIGlzIG9ubHkgZG9uZSB3aGVuIHNwZWNpZmljIG9wdGlvbiB2YWx1ZXMgYXJlIHJlcXVlc3RlZCwgbm90IGZvciAiOnNldAorYWxsIiBvciAiOnNldCIgd2l0aG91dCBhbiBhcmd1bWVudC4KK1doZW4gdGhlIG9wdGlvbiB3YXMgc2V0IGJ5IGhhbmQgdGhlcmUgaXMgbm8gIkxhc3Qgc2V0IiBtZXNzYWdlLiAgVGhlcmUgaXMgb25seQorb25lIHZhbHVlIGZvciBhbGwgbG9jYWwgb3B0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUuICBUaHVzIHRoZSBtZXNzYWdlIGFwcGxpZXMKK3RvIHRoZSBvcHRpb24gbmFtZSwgbm90IG5lY2Vzc2FyaWx5IGl0cyB2YWx1ZS4KK1doZW4gdGhlIG9wdGlvbiB3YXMgc2V0IHdoaWxlIGV4ZWN1dGluZyBhIGZ1bmN0aW9uLCB1c2VyIGNvbW1hbmQgb3IKK2F1dG9jb21tYW5kLCB0aGUgc2NyaXB0IGluIHdoaWNoIGl0IHdhcyBkZWZpbmVkIGlzIHJlcG9ydGVkLgorTm90ZSB0aGF0IGFuIG9wdGlvbiBtYXkgYWxzbyBoYXZlIGJlZW4gc2V0IGFzIGEgc2lkZSBlZmZlY3Qgb2Ygc2V0dGluZworJ2NvbXBhdGlibGUnLgore25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArZXZhbCBmZWF0dXJlfQorCisJCQkJCQkJKjpzZXQtdGVybWNhcCogKkU1MjIqCitGb3Ige29wdGlvbn0gdGhlIGZvcm0gInRfeHgiIG1heSBiZSB1c2VkIHRvIHNldCBhIHRlcm1jYXAgb3B0aW9uLiAgVGhpcyB3aWxsCitvdmVycmlkZSB0aGUgdmFsdWUgZnJvbSB0aGUgdGVybWNhcC4gIFlvdSBjYW4gdGhlbiB1c2UgaXQgaW4gYSBtYXBwaW5nLiAgSWYKK3RoZSAieHgiIHBhcnQgY29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzLCB1c2UgdGhlIDx0X3h4PiBmb3JtOiA+CisJOnNldCA8dF8jND49XltPdAorVGhpcyBjYW4gYWxzbyBiZSB1c2VkIHRvIHRyYW5zbGF0ZSBhIHNwZWNpYWwgY29kZSBmb3IgYSBub3JtYWwga2V5LiAgRm9yCitleGFtcGxlLCBpZiBBbHQtYiBwcm9kdWNlcyA8RXNjPmIsIHVzZSB0aGlzOiA+CisJOnNldCA8TS1iPj1eW2IKKyh0aGUgXlsgaXMgYSByZWFsIDxFc2M+IGhlcmUsIHVzZSBDVFJMLVYgPEVzYz4gdG8gZW50ZXIgaXQpCitUaGUgYWR2YW50YWdlIG92ZXIgYSBtYXBwaW5nIGlzIHRoYXQgaXQgd29ya3MgaW4gYWxsIHNpdHVhdGlvbnMuCisKK1RoZSBsaXN0aW5nIGZyb20gIjpzZXQiIGxvb2tzIGRpZmZlcmVudCBmcm9tIFZpLiAgTG9uZyBzdHJpbmcgb3B0aW9ucyBhcmUgcHV0CithdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiAgVGhlIG51bWJlciBvZiBvcHRpb25zIGlzIHF1aXRlIGxhcmdlLglUaGUgb3V0cHV0IG9mCisic2V0IGFsbCIgcHJvYmFibHkgZG9lcyBub3QgZml0IG9uIHRoZSBzY3JlZW4sIGNhdXNpbmcgVmltIHRvIGdpdmUgdGhlCit8bW9yZS1wcm9tcHR8LgorCisJCQkJCQkJKm9wdGlvbi1iYWNrc2xhc2gqCitUbyBpbmNsdWRlIHdoaXRlIHNwYWNlIGluIGEgc3RyaW5nIG9wdGlvbiB2YWx1ZSBpdCBoYXMgdG8gYmUgcHJlY2VkZWQgd2l0aCBhCitiYWNrc2xhc2guICBUbyBpbmNsdWRlIGEgYmFja3NsYXNoIHlvdSBoYXZlIHRvIHVzZSB0d28uICBFZmZlY3RpdmVseSB0aGlzCittZWFucyB0aGF0IHRoZSBudW1iZXIgb2YgYmFja3NsYXNoZXMgaW4gYW4gb3B0aW9uIHZhbHVlIGlzIGhhbHZlZCAocm91bmRlZAorZG93bikuCitBIGZldyBleGFtcGxlczogPgorICAgOnNldCB0YWdzPXRhZ3NcIC91c3IvdGFncwkgICAgcmVzdWx0cyBpbiAidGFncyAvdXNyL3RhZ3MiCisgICA6c2V0IHRhZ3M9dGFnc1xcLGZpbGUJICAgIHJlc3VsdHMgaW4gInRhZ3NcLGZpbGUiCisgICA6c2V0IHRhZ3M9dGFnc1xcXCBmaWxlCSAgICByZXN1bHRzIGluICJ0YWdzXCBmaWxlIgorCitUaGUgInwiIGNoYXJhY3RlciBzZXBhcmF0ZXMgYSAiOnNldCIgY29tbWFuZCBmcm9tIGEgZm9sbG93aW5nIGNvbW1hbmQuCVRvCitpbmNsdWRlIHRoZSAifCIgaW4gdGhlIG9wdGlvbiB2YWx1ZSwgdXNlICJcfCIgaW5zdGVhZC4JVGhpcyBleGFtcGxlIHNldHMgdGhlCisndGl0bGVzdHJpbmcnIG9wdGlvbiB0byAiaGl8dGhlcmUiOiA+CisgICA6c2V0IHRpdGxlc3RyaW5nPWhpXHx0aGVyZQorVGhpcyBzZXRzIHRoZSAndGl0bGVzdHJpbmcnIG9wdGlvbiB0byAiaGkiIGFuZCAnaWNvbnN0cmluZycgdG8gInRoZXJlIjogPgorICAgOnNldCB0aXRsZXN0cmluZz1oaXxzZXQgaWNvbnN0cmluZz10aGVyZQorCitGb3IgTVMtRE9TIGFuZCBXSU4zMiBiYWNrc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGFyZSBtb3N0bHkgbm90IHJlbW92ZWQuCU1vcmUKK3ByZWNpc2U6IEZvciBvcHRpb25zIHRoYXQgZXhwZWN0IGEgZmlsZSBuYW1lICh0aG9zZSB3aGVyZSBlbnZpcm9ubWVudAordmFyaWFibGVzIGFyZSBleHBhbmRlZCkgYSBiYWNrc2xhc2ggYmVmb3JlIGEgbm9ybWFsIGZpbGUgbmFtZSBjaGFyYWN0ZXIgaXMgbm90CityZW1vdmVkLiAgQnV0IGEgYmFja3NsYXNoIGJlZm9yZSBhIHNwZWNpYWwgY2hhcmFjdGVyIChzcGFjZSwgYmFja3NsYXNoLCBjb21tYSwKK2V0Yy4pIGlzIHVzZWQgbGlrZSBleHBsYWluZWQgYWJvdmUuCitUaGVyZSBpcyBvbmUgc3BlY2lhbCBzaXR1YXRpb24sIHdoZW4gdGhlIHZhbHVlIHN0YXJ0cyB3aXRoICJcXCI6ID4KKyAgIDpzZXQgZGlyPVxcbWFjaGluZVxwYXRoCSAgICByZXN1bHRzIGluICJcXG1hY2hpbmVccGF0aCIKKyAgIDpzZXQgZGlyPVxcXFxtYWNoaW5lXFxwYXRoCSAgICByZXN1bHRzIGluICJcXG1hY2hpbmVccGF0aCIKKyAgIDpzZXQgZGlyPVxccGF0aFxcZmlsZQkgICAgcmVzdWx0cyBpbiAiXFxwYXRoXGZpbGUiICh3cm9uZyEpCitGb3IgdGhlIGZpcnN0IG9uZSB0aGUgc3RhcnQgaXMga2VwdCwgYnV0IGZvciB0aGUgc2Vjb25kIG9uZSB0aGUgYmFja3NsYXNoZXMKK2FyZSBoYWx2ZWQuICBUaGlzIG1ha2VzIHN1cmUgaXQgd29ya3MgYm90aCB3aGVuIHlvdSBleHBlY3QgYmFja3NsYXNoZXMgdG8gYmUKK2hhbHZlZCBhbmQgd2hlbiB5b3UgZXhwZWN0IHRoZSBiYWNrc2xhc2hlcyB0byBiZSBrZXB0LglUaGUgdGhpcmQgZ2l2ZXMgYQorcmVzdWx0IHdoaWNoIGlzIHByb2JhYmx5IG5vdCB3aGF0IHlvdSB3YW50LiAgQXZvaWQgaXQuCisKKwkJCQkqYWRkLW9wdGlvbi1mbGFncyogKnJlbW92ZS1vcHRpb24tZmxhZ3MqCisJCQkJKkU1MzkqICpFNTUwKiAqRTU1MSogKkU1NTIqCitTb21lIG9wdGlvbnMgYXJlIGEgbGlzdCBvZiBmbGFncy4gIFdoZW4geW91IHdhbnQgdG8gYWRkIGEgZmxhZyB0byBzdWNoIGFuCitvcHRpb24sIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGV4aXN0aW5nIG9uZXMsIHlvdSBjYW4gZG8gaXQgbGlrZSB0aGlzOiA+CisgICA6c2V0IGd1aW9wdGlvbnMrPWEKK1JlbW92ZSBhIGZsYWcgZnJvbSBhbiBvcHRpb24gbGlrZSB0aGlzOiA+CisgICA6c2V0IGd1aW9wdGlvbnMtPWEKK1RoaXMgcmVtb3ZlcyB0aGUgJ2EnIGZsYWcgZnJvbSAnZ3Vpb3B0aW9ucycuCitOb3RlIHRoYXQgeW91IHNob3VsZCBhZGQgb3IgcmVtb3ZlIG9uZSBmbGFnIGF0IGEgdGltZS4JSWYgJ2d1aW9wdGlvbnMnIGhhcwordGhlIHZhbHVlICJhYiIsIHVzaW5nICJzZXQgZ3Vpb3B0aW9ucy09YmEiIHdvbid0IHdvcmssIGJlY2F1c2UgdGhlIHN0cmluZyAiYmEiCitkb2Vzbid0IGFwcGVhci4KKworCQkJICAgKjpzZXRfZW52KiAqZXhwYW5kLWVudiogKmV4cGFuZC1lbnZpcm9ubWVudC12YXIqCitFbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gbW9zdCBzdHJpbmcgb3B0aW9ucyB3aWxsIGJlIGV4cGFuZGVkLglJZiB0aGUKK2Vudmlyb25tZW50IHZhcmlhYmxlIGV4aXN0cyB0aGUgJyQnIGFuZCB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlCituYW1lIGlzIHJlcGxhY2VkIHdpdGggaXRzIHZhbHVlLiAgSWYgaXQgZG9lcyBub3QgZXhpc3QgdGhlICckJyBhbmQgdGhlIG5hbWUKK2FyZSBub3QgbW9kaWZpZWQuICBBbnkgbm9uLWlkIGNoYXJhY3RlciAobm90IGEgbGV0dGVyLCBkaWdpdCBvciAnXycpIG1heQorZm9sbG93IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lLiAgVGhhdCBjaGFyYWN0ZXIgYW5kIHdoYXQgZm9sbG93cyBpcworYXBwZW5kZWQgdG8gdGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gIEV4YW1wbGVzOiA+CisgICA6c2V0IHRlcm09JFRFUk0ubmV3CisgICA6c2V0IHBhdGg9L3Vzci8kSU5DTFVERSwkSE9NRS9pbmNsdWRlLC4KK1doZW4gYWRkaW5nIG9yIHJlbW92aW5nIGEgc3RyaW5nIGZyb20gYW4gb3B0aW9uIHdpdGggIjpzZXQgb3B0LT12YWwiIG9yICI6c2V0CitvcHQrPXZhbCIgdGhlIGV4cGFuc2lvbiBpcyBkb25lIGJlZm9yZSB0aGUgYWRkaW5nIG9yIHJlbW92aW5nLgorCisKK0hhbmRsaW5nIG9mIGxvY2FsIG9wdGlvbnMJCQkqbG9jYWwtb3B0aW9ucyoKKworU29tZSBvZiB0aGUgb3B0aW9ucyBvbmx5IGFwcGx5IHRvIGEgd2luZG93IG9yIGJ1ZmZlci4gIEVhY2ggd2luZG93IG9yIGJ1ZmZlcgoraGFzIGl0cyBvd24gY29weSBvZiB0aGlzIG9wdGlvbiwgdGh1cyBjYW4gZWFjaCBoYXZlIHRoZWlyIG93biB2YWx1ZS4gIFRoaXMKK2FsbG93cyB5b3UgdG8gc2V0ICdsaXN0JyBpbiBvbmUgd2luZG93IGJ1dCBub3QgaW4gYW5vdGhlci4gIEFuZCBzZXQKKydzaGlmdHdpZHRoJyB0byAzIGluIG9uZSBidWZmZXIgYW5kIDQgaW4gYW5vdGhlci4KKworVGhlIGZvbGxvd2luZyBleHBsYWlucyB3aGF0IGhhcHBlbnMgdG8gdGhlc2UgbG9jYWwgb3B0aW9ucyBpbiBzcGVjaWZpYworc2l0dWF0aW9ucy4gIFlvdSBkb24ndCByZWFsbHkgbmVlZCB0byBrbm93IGFsbCBvZiB0aGlzLCBzaW5jZSBWaW0gbW9zdGx5IHVzZXMKK3RoZSBvcHRpb24gdmFsdWVzIHlvdSB3b3VsZCBleHBlY3QuICBVbmZvcnR1bmF0ZWx5LCBkb2luZyB3aGF0IHRoZSB1c2VyCitleHBlY3RzIGlzIGEgYml0IGNvbXBsaWNhdGVkLi4uCisKK1doZW4gc3BsaXR0aW5nIGEgd2luZG93LCB0aGUgbG9jYWwgb3B0aW9ucyBhcmUgY29waWVkIHRvIHRoZSBuZXcgd2luZG93LiAgVGh1cworcmlnaHQgYWZ0ZXIgdGhlIHNwbGl0IHRoZSBjb250ZW50cyBvZiB0aGUgdHdvIHdpbmRvd3MgbG9vayB0aGUgc2FtZS4KKworV2hlbiBlZGl0aW5nIGEgbmV3IGJ1ZmZlciwgaXRzIGxvY2FsIG9wdGlvbiB2YWx1ZXMgbXVzdCBiZSBpbml0aWFsaXplZC4gIFNpbmNlCit0aGUgbG9jYWwgb3B0aW9ucyBvZiB0aGUgY3VycmVudCBidWZmZXIgbWlnaHQgYmUgc3BlY2lmaWNhbGx5IGZvciB0aGF0IGJ1ZmZlciwKK3RoZXNlIGFyZSBub3QgdXNlZC4gIEluc3RlYWQsIGZvciBlYWNoIGJ1ZmZlci1sb2NhbCBvcHRpb24gdGhlcmUgYWxzbyBpcyBhCitnbG9iYWwgdmFsdWUsIHdoaWNoIGlzIHVzZWQgZm9yIG5ldyBidWZmZXJzLiAgV2l0aCAiOnNldCIgYm90aCB0aGUgbG9jYWwgYW5kCitnbG9iYWwgdmFsdWUgaXMgY2hhbmdlZC4gIFdpdGggInNldGxvY2FsIiBvbmx5IHRoZSBsb2NhbCB2YWx1ZSBpcyBjaGFuZ2VkLAordGh1cyB0aGlzIHZhbHVlIGlzIG5vdCB1c2VkIHdoZW4gZWRpdGluZyBhIG5ldyBidWZmZXIuCisKK1doZW4gZWRpdGluZyBhIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIGVkaXRlZCBiZWZvcmUsIHRoZSBsYXN0IHVzZWQgd2luZG93CitvcHRpb25zIGFyZSB1c2VkIGFnYWluLiAgSWYgdGhpcyBidWZmZXIgaGFzIGJlZW4gZWRpdGVkIGluIHRoaXMgd2luZG93LCB0aGUKK3ZhbHVlcyBmcm9tIGJhY2sgdGhlbiBhcmUgdXNlZC4gIE90aGVyd2lzZSB0aGUgdmFsdWVzIGZyb20gdGhlIHdpbmRvdyB3aGVyZQordGhlIGJ1ZmZlciB3YXMgZWRpdGVkIGxhc3QgYXJlIHVzZWQuCisKK0l0J3MgcG9zc2libGUgdG8gc2V0IGEgbG9jYWwgd2luZG93IG9wdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGEgdHlwZSBvZiBidWZmZXIuCitXaGVuIHlvdSBlZGl0IGFub3RoZXIgYnVmZmVyIGluIHRoZSBzYW1lIHdpbmRvdywgeW91IGRvbid0IHdhbnQgdG8ga2VlcAordXNpbmcgdGhlc2UgbG9jYWwgd2luZG93IG9wdGlvbnMuICBUaGVyZWZvcmUgVmltIGtlZXBzIGEgZ2xvYmFsIHZhbHVlIG9mIHRoZQorbG9jYWwgd2luZG93IG9wdGlvbnMsIHdoaWNoIGlzIHVzZWQgd2hlbiBlZGl0aW5nIGFub3RoZXIgYnVmZmVyLiAgRWFjaCB3aW5kb3cKK2hhcyBpdHMgb3duIGNvcHkgb2YgdGhlc2UgdmFsdWVzLiAgVGh1cyB0aGVzZSBhcmUgbG9jYWwgdG8gdGhlIHdpbmRvdywgYnV0CitnbG9iYWwgdG8gYWxsIGJ1ZmZlcnMgaW4gdGhlIHdpbmRvdy4gIFdpdGggdGhpcyB5b3UgY2FuIGRvOiA+CisJOmUgb25lCisJOnNldCBsaXN0CisJOmUgdHdvCitOb3cgdGhlICdsaXN0JyBvcHRpb24gd2lsbCBhbHNvIGJlIHNldCBpbiAidHdvIiwgc2luY2Ugd2l0aCB0aGUgIjpzZXQgbGlzdCIKK2NvbW1hbmQgeW91IGhhdmUgYWxzbyBzZXQgdGhlIGdsb2JhbCB2YWx1ZS4gPgorCTpzZXQgbm9saXN0CisJOmUgb25lCisJOnNldGxvY2FsIGxpc3QKKwk6ZSB0d28KK05vdyB0aGUgJ2xpc3QnIG9wdGlvbiBpcyBub3Qgc2V0LCBiZWNhdXNlICI6c2V0IG5vbGlzdCIgcmVzZXRzIHRoZSBnbG9iYWwKK3ZhbHVlLCAiOnNldGxvY2FsIGxpc3QiIG9ubHkgY2hhbmdlcyB0aGUgbG9jYWwgdmFsdWUgYW5kICI6ZSB0d28iIGdldHMgdGhlCitnbG9iYWwgdmFsdWUuICBOb3RlIHRoYXQgaWYgeW91IGRvIHRoaXMgbmV4dDogPgorCTplIG9uZQorWW91IHdpbGwgbm90IGdldCBiYWNrIHRoZSAnbGlzdCcgdmFsdWUgYXMgaXQgd2FzIHRoZSBsYXN0IHRpbWUgeW91IGVkaXRlZAorIm9uZSIuCVRoZSBvcHRpb25zIGxvY2FsIHRvIGEgd2luZG93IGFyZSBub3QgcmVtZW1iZXJlZCBmb3IgZWFjaCBidWZmZXIuCisKKwkJCQkJCQkqOnNldGwqICo6c2V0bG9jYWwqCis6c2V0bFtvY2FsXSAuLi4JCUxpa2UgIjpzZXQiIGJ1dCBzZXQgb25seSB0aGUgdmFsdWUgbG9jYWwgdG8gdGhlCisJCQljdXJyZW50IGJ1ZmZlciBvciB3aW5kb3cuICBOb3QgYWxsIG9wdGlvbnMgaGF2ZSBhCisJCQlsb2NhbCB2YWx1ZS4gIElmIHRoZSBvcHRpb24gZG9lcyBub3QgaGF2ZSBhIGxvY2FsCisJCQl2YWx1ZSB0aGUgZ2xvYmFsIHZhbHVlIGlzIHNldC4KKwkJCVdpdGggdGhlICJhbGwiIGFyZ3VtZW50OiBkaXNwbGF5IGFsbCBsb2NhbCBvcHRpb24ncworCQkJbG9jYWwgdmFsdWVzLgorCQkJV2l0aG91dCBhcmd1bWVudDogRGlzcGxheSBhbGwgbG9jYWwgb3B0aW9uJ3MgbG9jYWwKKwkJCXZhbHVlcyB3aGljaCBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQuCisJCQlXaGVuIGRpc3BsYXlpbmcgYSBzcGVjaWZpYyBsb2NhbCBvcHRpb24sIHNob3cgdGhlCisJCQlsb2NhbCB2YWx1ZS4gIEZvciBhIGdsb2JhbCBvcHRpb24gdGhlIGdsb2JhbCB2YWx1ZSBpcworCQkJc2hvd24gKGJ1dCB0aGF0IG1pZ2h0IGNoYW5nZSBpbiB0aGUgZnV0dXJlKS4KKwkJCXtub3QgaW4gVml9CisKKzpzZXRsW29jYWxdIHtvcHRpb259PAlTZXQgdGhlIGxvY2FsIHZhbHVlIG9mIHtvcHRpb259IHRvIGl0cyBnbG9iYWwgdmFsdWUuCisJCQl7bm90IGluIFZpfQorCisJCQkJCQkJKjpzZXRnKiAqOnNldGdsb2JhbCoKKzpzZXRnW2xvYmFsXSAuLi4JTGlrZSAiOnNldCIgYnV0IHNldCBvbmx5IHRoZSBnbG9iYWwgdmFsdWUgZm9yIGEgbG9jYWwKKwkJCW9wdGlvbiB3aXRob3V0IGNoYW5naW5nIHRoZSBsb2NhbCB2YWx1ZS4KKwkJCVdoZW4gZGlzcGxheWluZyBhbiBvcHRpb24sIHRoZSBnbG9iYWwgdmFsdWUgaXMgc2hvd24uCisJCQlXaXRoIHRoZSAiYWxsIiBhcmd1bWVudDogZGlzcGxheSBhbGwgbG9jYWwgb3B0aW9uJ3MKKwkJCWdsb2JhbCB2YWx1ZXMuCisJCQlXaXRob3V0IGFyZ3VtZW50OiBkaXNwbGF5IGFsbCBsb2NhbCBvcHRpb24ncyBnbG9iYWwKKwkJCXZhbHVlcyB3aGljaCBhcmUgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQuCisJCQl7bm90IGluIFZpfQorCitGb3IgYnVmZmVyLWxvY2FsIGFuZCB3aW5kb3ctbG9jYWwgb3B0aW9uczoKKwlDb21tYW5kCQkgZ2xvYmFsIHZhbHVlCSAgICBsb2NhbCB2YWx1ZSB+CisgICAgICA6c2V0IG9wdGlvbj12YWx1ZQkgICAgIHNldAkJc2V0CisgOnNldGxvY2FsIG9wdGlvbj12YWx1ZQkgICAgICAtCQkJc2V0Cis6c2V0Z2xvYmFsIG9wdGlvbj12YWx1ZQkgICAgIHNldAkJIC0KKyAgICAgIDpzZXQgb3B0aW9uPwkgICAgICAtCQkgICAgICAgZGlzcGxheQorIDpzZXRsb2NhbCBvcHRpb24/CSAgICAgIC0JCSAgICAgICBkaXNwbGF5Cis6c2V0Z2xvYmFsIG9wdGlvbj8JICAgIGRpc3BsYXkJCSAtCisKKworR2xvYmFsIG9wdGlvbnMgd2l0aCBhIGxvY2FsIHZhbHVlCQkJKmdsb2JhbC1sb2NhbCoKKworT3B0aW9ucyBhcmUgZ2xvYmFsIHdoZW4geW91IG1vc3RseSB1c2Ugb25lIHZhbHVlIGZvciBhbGwgYnVmZmVycy4gIEZvciBzb21lCitnbG9iYWwgb3B0aW9ucyBpdCdzIHVzZWZ1bCB0byBzb21ldGltZXMgaGF2ZSBhIGRpZmZlcmVudCBsb2NhbCB2YWx1ZS4gIFlvdSBjYW4KK3NldCB0aGUgbG9jYWwgdmFsdWUgd2l0aCAiOnNldGxvY2FsIi4gIFRoYXQgYnVmZmVyIHdpbGwgdGhlbiB1c2UgdGhlIGxvY2FsCit2YWx1ZSwgd2hpbGUgb3RoZXIgYnVmZmVycyBjb250aW51ZSB1c2luZyB0aGUgZ2xvYmFsIHZhbHVlLgorCitGb3IgZXhhbXBsZSwgeW91IGhhdmUgdHdvIHdpbmRvd3MsIGJvdGggb24gQyBzb3VyY2UgY29kZS4gIFRoZXkgdXNlIHRoZSBnbG9iYWwKKydtYWtlcHJnJyBvcHRpb24uICBJZiB5b3UgZG8gdGhpcyBpbiBvbmUgb2YgdGhlIHR3byB3aW5kb3dzOiA+CisJOnNldCBtYWtlcHJnPWdtYWtlCit0aGVuIHRoZSBvdGhlciB3aW5kb3cgd2lsbCBzd2l0Y2ggdG8gdGhlIHNhbWUgdmFsdWUuICBUaGVyZSBpcyBubyBuZWVkIHRvIHNldAordGhlICdtYWtlcHJnJyBvcHRpb24gaW4gdGhlIG90aGVyIEMgc291cmNlIHdpbmRvdyB0b28uCitIb3dldmVyLCBpZiB5b3Ugc3RhcnQgZWRpdGluZyBhIFBlcmwgZmlsZSBpbiBhIG5ldyB3aW5kb3csIHlvdSB3YW50IHRvIHVzZQorYW5vdGhlciAnbWFrZXByb2cnIGZvciBpdCwgd2l0aG91dCBjaGFuZ2luZyB0aGUgdmFsdWUgdXNlZCBmb3IgdGhlIEMgc291cmNlCitmaWxlcy4JWW91IHVzZSB0aGlzIGNvbW1hbmQ6ID4KKwk6c2V0bG9jYWwgbWFrZXByZz1wZXJsbWFrZQorWW91IGNhbiBzd2l0Y2ggYmFjayB0byB1c2luZyB0aGUgZ2xvYmFsIHZhbHVlIGJ5IG1ha2luZyB0aGUgbG9jYWwgdmFsdWUgZW1wdHk6ID4KKwk6c2V0bG9jYWwgbWFrZXByZz0KK1RoaXMgb25seSB3b3JrcyBmb3IgYSBzdHJpbmcgb3B0aW9uLiAgRm9yIGEgYm9vbGVhbiBvcHRpb24geW91IG5lZWQgdG8gdXNlIHRoZQorIjwiIGZsYWcsIGxpa2UgdGhpczogPgorCTpzZXRsb2NhbCBhdXRvcmVhZDwKK05vdGUgdGhhdCBmb3Igbm9uLWJvb2xlYW4gb3B0aW9ucyB1c2luZyAiPCIgY29waWVzIHRoZSBnbG9iYWwgdmFsdWUgdG8gdGhlCitsb2NhbCB2YWx1ZSwgaXQgZG9lc24ndCBzd2l0Y2ggYmFjayB0byB1c2luZyB0aGUgZ2xvYmFsIHZhbHVlICh0aGF0IG1hdHRlcnMKK3doZW4gY2hhbmdpbmcgdGhlIGdsb2JhbCB2YWx1ZSBsYXRlcikuCitOb3RlOiBJbiB0aGUgZnV0dXJlIG1vcmUgZ2xvYmFsIG9wdGlvbnMgY2FuIGJlIG1hZGUgZ2xvYmFsLWxvY2FsLiAgVXNpbmcKKyI6c2V0bG9jYWwiIG9uIGEgZ2xvYmFsIG9wdGlvbiBtaWdodCB3b3JrIGRpZmZlcmVudGx5IHRoZW4uCisKKworU2V0dGluZyB0aGUgZmlsZXR5cGUKKworOnNldGZbaWxldHlwZV0ge2ZpbGV0eXBlfQkJCSo6c2V0ZiogKjpzZXRmaWxldHlwZSoKKwkJCVNldCB0aGUgJ2ZpbGV0eXBlJyBvcHRpb24gdG8ge2ZpbGV0eXBlfSwgYnV0IG9ubHkgaWYKKwkJCW5vdCBkb25lIHlldCBpbiBhIHNlcXVlbmNlIG9mIChuZXN0ZWQpIGF1dG9jb21tYW5kcy4KKwkJCVRoaXMgaXMgc2hvcnQgZm9yOiA+CisJCQkJOmlmICFkaWRfZmlsZXR5cGUoKQorCQkJCTogIHNldGxvY2FsIGZpbGV0eXBlPXtmaWxldHlwZX0KKwkJCQk6ZW5kaWYKKzwJCQlUaGlzIGNvbW1hbmQgaXMgdXNlZCBpbiBhIGZpbGV0eXBlLnZpbSBmaWxlIHRvIGF2b2lkCisJCQlzZXR0aW5nIHRoZSAnZmlsZXR5cGUnIG9wdGlvbiB0d2ljZSwgY2F1c2luZyBkaWZmZXJlbnQKKwkJCXNldHRpbmdzIGFuZCBzeW50YXggZmlsZXMgdG8gYmUgbG9hZGVkLgorCQkJe25vdCBpbiBWaX0KKworOmJyb1t3c2VdIHNlW3RdCQkJKjpzZXQtYnJvd3NlKiAqOmJyb3dzZS1zZXQqICo6b3B0KiAqOm9wdGlvbnMqCis6b3B0W2lvbnNdCQlPcGVuIGEgd2luZG93IGZvciB2aWV3aW5nIGFuZCBzZXR0aW5nIGFsbCBvcHRpb25zLgorCQkJT3B0aW9ucyBhcmUgZ3JvdXBlZCBieSBmdW5jdGlvbi4KKwkJCU9mZmVycyBzaG9ydCBoZWxwIGZvciBlYWNoIG9wdGlvbi4gIEhpdCA8Q1I+IG9uIHRoZQorCQkJc2hvcnQgaGVscCB0byBvcGVuIGEgaGVscCB3aW5kb3cgd2l0aCBtb3JlIGhlbHAgZm9yCisJCQl0aGUgb3B0aW9uLgorCQkJTW9kaWZ5IHRoZSB2YWx1ZSBvZiB0aGUgb3B0aW9uIGFuZCBoaXQgPENSPiBvbiB0aGUKKwkJCSJzZXQiIGxpbmUgdG8gc2V0IHRoZSBuZXcgdmFsdWUuICBGb3Igd2luZG93IGFuZAorCQkJYnVmZmVyIHNwZWNpZmljIG9wdGlvbnMsIHRoZSBsYXN0IGFjY2Vzc2VkIHdpbmRvdyBpcworCQkJdXNlZCB0byBzZXQgdGhlIG9wdGlvbiB2YWx1ZSBpbiwgdW5sZXNzIHRoaXMgaXMgYSBoZWxwCisJCQl3aW5kb3csIGluIHdoaWNoIGNhc2UgdGhlIHdpbmRvdyBiZWxvdyBoZWxwIHdpbmRvdyBpcworCQkJdXNlZCAoc2tpcHBpbmcgdGhlIG9wdGlvbi13aW5kb3cpLgorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2V2YWx8IG9yCisJCQl8K2F1dG9jbWR8IGZlYXR1cmVzfQorCisJCQkJCQkJCSokSE9NRSoKK1VzaW5nICJ+IiBpcyBsaWtlIHVzaW5nICIkSE9NRSIsIGJ1dCBpdCBpcyBvbmx5IHJlY29nbml6ZWQgYXQgdGhlIHN0YXJ0IG9mIGFuCitvcHRpb24gYW5kIGFmdGVyIGEgc3BhY2Ugb3IgY29tbWEuCisKK09uIFVuaXggc3lzdGVtcyAifnVzZXIiIGNhbiBiZSB1c2VkIHRvby4gIEl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBob21lIGRpcmVjdG9yeQorb2YgdXNlciAidXNlciIuICBFeGFtcGxlOiA+CisgICAgOnNldCBwYXRoPX5tb29sL2luY2x1ZGUsL3Vzci9pbmNsdWRlLC4KKworT24gVW5peCBzeXN0ZW1zIHRoZSBmb3JtICIke0hPTUV9IiBjYW4gYmUgdXNlZCB0b28uICBUaGUgbmFtZSBiZXR3ZWVuIHt9IGNhbgorY29udGFpbiBub24taWQgY2hhcmFjdGVycyB0aGVuLiAgTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGZvciB0aGUKKyJnZiIgY29tbWFuZCwgeW91IG5lZWQgdG8gYWRkIHRoZSAneycgYW5kICd9JyBjaGFyYWN0ZXJzIHRvICdpc2ZuYW1lJy4KKworTk9URTogZXhwYW5kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgIn4vIiBpcyBvbmx5IGRvbmUgd2l0aCB0aGUgIjpzZXQiCitjb21tYW5kLCBub3Qgd2hlbiBhc3NpZ25pbmcgYSB2YWx1ZSB0byBhbiBvcHRpb24gd2l0aCAiOmxldCIuCisKKworTm90ZSB0aGUgbWF4aW11bSBsZW5ndGggb2YgYW4gZXhwYW5kZWQgb3B0aW9uIGlzIGxpbWl0ZWQuICBIb3cgbXVjaCBkZXBlbmRzIG9uCit0aGUgc3lzdGVtLCBtb3N0bHkgaXQgaXMgc29tZXRoaW5nIGxpa2UgMjU2IG9yIDEwMjQgY2hhcmFjdGVycy4KKworCQkJCQkJCSo6Zml4KiAqOmZpeGRlbCoKKzpmaXhbZGVsXQkJU2V0IHRoZSB2YWx1ZSBvZiAndF9rRCc6CisJCQkJJ3Rfa2InIGlzICAgICAndF9rRCcgYmVjb21lcwl+CisJCQkJICBDVFJMLT8JQ1RSTC1ICisJCQkJbm90IENUUkwtPwlDVFJMLT8KKworCQkJKENUUkwtPyBpcyAwMTc3IG9jdGFsLCAweDdmIGhleCkge25vdCBpbiBWaX0KKworCQkJSWYgeW91ciBkZWxldGUga2V5IHRlcm1pbmFsIGNvZGUgaXMgd3JvbmcsIGJ1dCB0aGUKKwkJCWNvZGUgZm9yIGJhY2tzcGFjZSBpcyBhbHJpZ2h0LCB5b3UgY2FuIHB1dCB0aGlzIGluCisJCQl5b3VyIC52aW1yYzogPgorCQkJCTpmaXhkZWwKKzwJCQlUaGlzIHdvcmtzIG5vIG1hdHRlciB3aGF0IHRoZSBhY3R1YWwgY29kZSBmb3IKKwkJCWJhY2tzcGFjZSBpcy4KKworCQkJSWYgdGhlIGJhY2tzcGFjZSBrZXkgdGVybWluYWwgY29kZSBpcyB3cm9uZyB5b3UgY2FuCisJCQl1c2UgdGhpczogPgorCQkJCTppZiAmdGVybSA9PSAidGVybW5hbWUiCisJCQkJOiAgc2V0IHRfa2I9XlY8QlM+CisJCQkJOiAgZml4ZGVsCisJCQkJOmVuZGlmCis8CQkJV2hlcmUgIl5WIiBpcyBDVFJMLVYgYW5kICI8QlM+IiBpcyB0aGUgYmFja3NwYWNlIGtleQorCQkJKGRvbid0IHR5cGUgZm91ciBjaGFyYWN0ZXJzISkuCVJlcGxhY2UgInRlcm1uYW1lIgorCQkJd2l0aCB5b3VyIHRlcm1pbmFsIG5hbWUuCisKKwkJCUlmIHlvdXIgPERlbGV0ZT4ga2V5IHNlbmRzIGEgc3RyYW5nZSBrZXkgc2VxdWVuY2UgKG5vdAorCQkJQ1RSTC0/IG9yIENUUkwtSCkgeW91IGNhbm5vdCB1c2UgIjpmaXhkZWwiLiAgVGhlbiB1c2U6ID4KKwkJCQk6aWYgJnRlcm0gPT0gInRlcm1uYW1lIgorCQkJCTogIHNldCB0X2tEPV5WPERlbGV0ZT4KKwkJCQk6ZW5kaWYKKzwJCQlXaGVyZSAiXlYiIGlzIENUUkwtViBhbmQgIjxEZWxldGU+IiBpcyB0aGUgZGVsZXRlIGtleQorCQkJKGRvbid0IHR5cGUgZWlnaHQgY2hhcmFjdGVycyEpLiAgUmVwbGFjZSAidGVybW5hbWUiCisJCQl3aXRoIHlvdXIgdGVybWluYWwgbmFtZS4KKworCQkJCQkJCSpMaW51eC1iYWNrc3BhY2UqCisJCQlOb3RlIGFib3V0IExpbnV4OiBCeSBkZWZhdWx0IHRoZSBiYWNrc3BhY2Uga2V5CisJCQlwcm9kdWNlcyBDVFJMLT8sIHdoaWNoIGlzIHdyb25nLiAgWW91IGNhbiBmaXggaXQgYnkKKwkJCXB1dHRpbmcgdGhpcyBsaW5lIGluIHlvdXIgcmMubG9jYWw6ID4KKwkJCQllY2hvICJrZXljb2RlIDE0ID0gQmFja1NwYWNlIiB8IGxvYWRrZXlzCis8CisJCQkJCQkJKk5ldEJTRC1iYWNrc3BhY2UqCisJCQlOb3RlIGFib3V0IE5ldEJTRDogSWYgeW91ciBiYWNrc3BhY2UgZG9lc24ndCBwcm9kdWNlCisJCQl0aGUgcmlnaHQgY29kZSwgdHJ5IHRoaXM6ID4KKwkJCQl4bW9kbWFwIC1lICJrZXljb2RlIDIyID0gQmFja1NwYWNlIgorPAkJCUlmIHRoaXMgd29ya3MsIGFkZCB0aGlzIGluIHlvdXIgLlhtb2RtYXAgZmlsZTogPgorCQkJCWtleXN5bSAyMiA9IEJhY2tTcGFjZQorPAkJCVlvdSBuZWVkIHRvIHJlc3RhcnQgZm9yIHRoaXMgdG8gdGFrZSBlZmZlY3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMi4gQXV0b21hdGljYWxseSBzZXR0aW5nIG9wdGlvbnMJCQkqYXV0by1zZXR0aW5nKgorCitCZXNpZGVzIGNoYW5naW5nIG9wdGlvbnMgd2l0aCB0aGUgIjpzZXQiIGNvbW1hbmQsIHRoZXJlIGFyZSB0aHJlZSBhbHRlcm5hdGl2ZXMKK3RvIHNldCBvcHRpb25zIGF1dG9tYXRpY2FsbHkgZm9yIG9uZSBvciBtb3JlIGZpbGVzOgorCisxLiBXaGVuIHN0YXJ0aW5nIFZpbSBpbml0aWFsaXphdGlvbnMgYXJlIHJlYWQgZnJvbSB2YXJpb3VzIHBsYWNlcy4gIFNlZQorICAgfGluaXRpYWxpemF0aW9ufC4gIE1vc3Qgb2YgdGhlbSBhcmUgcGVyZm9ybWVkIGZvciBhbGwgZWRpdGluZyBzZXNzaW9ucywKKyAgIGFuZCBzb21lIG9mIHRoZW0gZGVwZW5kIG9uIHRoZSBkaXJlY3Rvcnkgd2hlcmUgVmltIGlzIHN0YXJ0ZWQuCisgICBZb3UgY2FuIGNyZWF0ZSBhbiBpbml0aWFsaXphdGlvbiBmaWxlIHdpdGggfDpta3ZpbXJjfCwgfDpta3ZpZXd8IGFuZAorICAgfDpta3Nlc3Npb258LgorMi4gSWYgeW91IHN0YXJ0IGVkaXRpbmcgYSBuZXcgZmlsZSwgdGhlIGF1dG9tYXRpYyBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuCisgICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBvcHRpb25zIGZvciBmaWxlcyBtYXRjaGluZyBhIHBhcnRpY3VsYXIgcGF0dGVybiBhbmQKKyAgIG1hbnkgb3RoZXIgdGhpbmdzLiAgU2VlIHxhdXRvY29tbWFuZHwuCiszLiBJZiB5b3Ugc3RhcnQgZWRpdGluZyBhIG5ldyBmaWxlLCBhbmQgdGhlICdtb2RlbGluZScgb3B0aW9uIGlzIG9uLCBhCisgICBudW1iZXIgb2YgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBmaWxlIGFyZSBjaGVja2VkIGZvcgorICAgbW9kZWxpbmVzLiAgVGhpcyBpcyBleHBsYWluZWQgaGVyZS4KKworCQkJCQkqbW9kZWxpbmUqICp2aW06KiAqdmk6KiAqZXg6KiAqRTUyMCoKK1RoZXJlIGFyZSB0d28gZm9ybXMgb2YgbW9kZWxpbmVzLiAgVGhlIGZpcnN0IGZvcm06CisJW3RleHRde3doaXRlfXt2aTp8dmltOnxleDp9W3doaXRlXXtvcHRpb25zfQorCitbdGV4dF0JCWFueSB0ZXh0IG9yIGVtcHR5Cit7d2hpdGV9CQlhdCBsZWFzdCBvbmUgYmxhbmsgY2hhcmFjdGVyICg8U3BhY2U+IG9yIDxUYWI+KQore3ZpOnx2aW06fGV4On0JdGhlIHN0cmluZyAidmk6IiwgInZpbToiIG9yICJleDoiCitbd2hpdGVdCQlvcHRpb25hbCB3aGl0ZSBzcGFjZQore29wdGlvbnN9CWEgbGlzdCBvZiBvcHRpb24gc2V0dGluZ3MsIHNlcGFyYXRlZCB3aXRoIHdoaXRlIHNwYWNlIG9yICc6JywKKwkJd2hlcmUgZWFjaCBwYXJ0IGJldHdlZW4gJzonIGlzIHRoZSBhcmd1bWVudCBmb3IgYSAiOnNldCIKKwkJY29tbWFuZAorCitFeGFtcGxlOiA+CisgICB2aTpub2FpOnN3PTMgdHM9NgorCitUaGUgc2Vjb25kIGZvcm0gKHRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgVmkpOgorCisJW3RleHRde3doaXRlfXt2aTp8dmltOnxleDp9W3doaXRlXXNlW3RdIHtvcHRpb25zfTpbdGV4dF0KKworW3RleHRdCQlhbnkgdGV4dCBvciBlbXB0eQore3doaXRlfQkJYXQgbGVhc3Qgb25lIGJsYW5rIGNoYXJhY3RlciAoPFNwYWNlPiBvciA8VGFiPikKK3t2aTp8dmltOnxleDp9CXRoZSBzdHJpbmcgInZpOiIsICJ2aW06IiBvciAiZXg6IgorW3doaXRlXQkJb3B0aW9uYWwgd2hpdGUgc3BhY2UKK3NlW3RdCQl0aGUgc3RyaW5nICJzZXQgIiBvciAic2UgIiAobm90ZSB0aGUgc3BhY2UpCit7b3B0aW9uc30JYSBsaXN0IG9mIG9wdGlvbnMsIHNlcGFyYXRlZCB3aXRoIHdoaXRlIHNwYWNlLCB3aGljaCBpcyB0aGUKKwkJYXJndW1lbnQgZm9yIGEgIjpzZXQiIGNvbW1hbmQKKzoJCWEgY29sb24KK1t0ZXh0XQkJYW55IHRleHQgb3IgZW1wdHkKKworRXhhbXBsZTogPgorICAgLyogdmltOiBzZXQgYWkgdHc9NzU6ICovCisKK1RoZSB3aGl0ZSBzcGFjZSBiZWZvcmUge3ZpOnx2aW06fGV4On0gaXMgcmVxdWlyZWQuICBUaGlzIG1pbmltaXplcyB0aGUgY2hhbmNlCit0aGF0IGEgbm9ybWFsIHdvcmQgbGlrZSAibGV4OiIgaXMgY2F1Z2h0LiAgVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogInZpOiIgYW5kCisidmltOiIgY2FuIGFsc28gYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb24KKzMuMCkuICBVc2luZyAiZXg6IiBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgd2lsbCBiZSBpZ25vcmVkICh0aGlzIGNvdWxkIGJlCitzaG9ydCBmb3IgImV4YW1wbGU6IikuCisKKwkJCQkJCQkqbW9kZWxpbmUtbG9jYWwqCitUaGUgb3B0aW9ucyBhcmUgc2V0IGxpa2Ugd2l0aCAiOnNldGxvY2FsIjogVGhlIG5ldyB2YWx1ZSBvbmx5IGFwcGxpZXMgdG8gdGhlCitidWZmZXIgdGhhdCBjb250YWlucyB0aGUgd2luZG93LiAgQWx0aG91Z2ggaXQncyBwb3NzaWJsZSB0byBzZXQgZ2xvYmFsIG9wdGlvbnMKK2Zyb20gYSBtb2RlbGluZSwgdGhpcyBpcyB1bnVzdWFsLiAgSWYgeW91IGhhdmUgdHdvIHdpbmRvd3Mgb3BlbiBhbmQgdGhlIGZpbGVzCitpbiBpdCBzZXQgdGhlIHNhbWUgZ2xvYmFsIG9wdGlvbiB0byBhIGRpZmZlcmVudCB2YWx1ZSwgdGhlIHJlc3VsdCBkZXBlbmRzIG9uCit3aGljaCBvbmUgd2FzIG9wZW5lZCBsYXN0LgorCisJCQkJCQkJKm1vZGVsaW5lLXZlcnNpb24qCitJZiB0aGUgbW9kZWxpbmUgaXMgb25seSB0byBiZSB1c2VkIGZvciBzb21lIHZlcnNpb25zIG9mIFZpbSwgdGhlIHZlcnNpb24KK251bWJlciBjYW4gYmUgc3BlY2lmaWVkIHdoZXJlICJ2aW06IiBpcyB1c2VkOgorCXZpbXt2ZXJzfToJdmVyc2lvbiB7dmVyc30gb3IgbGF0ZXIKKwl2aW08e3ZlcnN9Ogl2ZXJzaW9uIGJlZm9yZSB7dmVyc30KKwl2aW09e3ZlcnN9Ogl2ZXJzaW9uIHt2ZXJzfQorCXZpbT57dmVyc306CXZlcnNpb24gYWZ0ZXIge3ZlcnN9Cit7dmVyc30gaXMgNjAwIGZvciBWaW0gNi4wIChodW5kcmVkIHRpbWVzIHRoZSBtYWpvciB2ZXJzaW9uIHBsdXMgbWlub3IpLgorRm9yIGV4YW1wbGUsIHRvIHVzZSBhIG1vZGVsaW5lIG9ubHkgZm9yIFZpbSA2LjAgYW5kIGxhdGVyOiA+CisJLyogdmltNjAwOiBzZXQgZm9sZG1ldGhvZD1tYXJrZXI6ICovCitUbyB1c2UgYSBtb2RlbGluZSBmb3IgVmltIGJlZm9yZSB2ZXJzaW9uIDUuNzogPgorCS8qIHZpbTw1NzA6IHNldCBzdz00OiAqLworVGhlcmUgY2FuIGJlIG5vIGJsYW5rcyBiZXR3ZWVuICJ2aW0iIGFuZCB0aGUgIjoiLgorCisKK1RoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBhcmUgY2hlY2tlZCBjYW4gYmUgc2V0IHdpdGggdGhlICdtb2RlbGluZXMnIG9wdGlvbi4KK0lmICdtb2RlbGluZScgaXMgb2ZmIG9yICdtb2RlbGluZXMnIGlzIDAgbm8gbGluZXMgYXJlIGNoZWNrZWQuCisKK05vdGUgdGhhdCBmb3IgdGhlIGZpcnN0IGZvcm0gYWxsIG9mIHRoZSByZXN0IG9mIHRoZSBsaW5lIGlzIHVzZWQsIHRodXMgYSBsaW5lCitsaWtlOiA+CisgICAvKiB2aTp0cz00OiAqLword2lsbCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSB0cmFpbGluZyAiKi8iLiAgVGhpcyBsaW5lIGlzIE9LOiA+CisgICAvKiB2aTpzZXQgdHM9NDogKi8KKworSWYgYW4gZXJyb3IgaXMgZGV0ZWN0ZWQgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgaXMgc2tpcHBlZC4KKworSWYgeW91IHdhbnQgdG8gaW5jbHVkZSBhICc6JyBpbiBhIHNldCBjb21tYW5kIHByZWNlZGUgaXQgd2l0aCBhICdcJy4gIFRoZQorYmFja3NsYXNoIGluIGZyb250IG9mIHRoZSAnOicgd2lsbCBiZSByZW1vdmVkLglFeGFtcGxlOiA+CisgICAvKiB2aTpzZXQgZGlyPWNcOlx0bXA6ICovCitUaGlzIHNldHMgdGhlICdkaXInIG9wdGlvbiB0byAiYzpcdG1wIi4gIE9ubHkgYSBzaW5nbGUgYmFja3NsYXNoIGJlZm9yZSB0aGUKKyc6JyBpcyByZW1vdmVkLiAgVGh1cyB0byBpbmNsdWRlICJcOiIgeW91IGhhdmUgdG8gc3BlY2lmeSAiXFw6Ii4KKworTm8gb3RoZXIgY29tbWFuZHMgdGhhbiAic2V0IiBhcmUgc3VwcG9ydGVkLCBmb3Igc2VjdXJpdHkgcmVhc29ucyAoc29tZWJvZHkKK21pZ2h0IGNyZWF0ZSBhIFRyb2phbiBob3JzZSB0ZXh0IGZpbGUgd2l0aCBtb2RlbGluZXMpLgorCitIaW50OiBJZiB5b3Ugd291bGQgbGlrZSB0byBkbyBzb21ldGhpbmcgZWxzZSB0aGFuIHNldHRpbmcgYW4gb3B0aW9uLCB5b3UgY291bGQKK2RlZmluZSBhbiBhdXRvY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgZmlsZSBmb3IgYSBzcGVjaWZpYyBzdHJpbmcuICBGb3IKK2V4YW1wbGU6ID4KKwlhdSBCdWZSZWFkUG9zdCAqIGlmIGdldGxpbmUoMSkgPX4gIlZBUiIgfCBjYWxsIFNldFZhcigpIHwgZW5kaWYKK0FuZCBkZWZpbmUgYSBmdW5jdGlvbiBTZXRWYXIoKSB0aGF0IGRvZXMgc29tZXRoaW5nIHdpdGggdGhlIGxpbmUgY29udGFpbmluZworIlZBUiIuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMy4gT3B0aW9ucyBzdW1tYXJ5CQkJCQkqb3B0aW9uLXN1bW1hcnkqCisKK0luIHRoZSBsaXN0IGJlbG93IGFsbCB0aGUgb3B0aW9ucyBhcmUgbWVudGlvbmVkIHdpdGggdGhlaXIgZnVsbCBuYW1lIGFuZCB3aXRoCithbiBhYmJyZXZpYXRpb24gaWYgdGhlcmUgaXMgb25lLiAgQm90aCBmb3JtcyBtYXkgYmUgdXNlZC4KKworSW4gdGhpcyBkb2N1bWVudCB3aGVuIGEgYm9vbGVhbiBvcHRpb24gaXMgInNldCIgdGhhdCBtZWFucyB0aGF0ICI6c2V0IG9wdGlvbiIKK2lzIGVudGVyZWQuICBXaGVuIGFuIG9wdGlvbiBpcyAicmVzZXQiLCAiOnNldCBub29wdGlvbiIgaXMgdXNlZC4KKworRm9yIHNvbWUgb3B0aW9ucyB0aGVyZSBhcmUgdHdvIGRlZmF1bHQgdmFsdWVzOiBUaGUgIlZpbSBkZWZhdWx0Iiwgd2hpY2ggaXMKK3VzZWQgd2hlbiAnY29tcGF0aWJsZScgaXMgbm90IHNldCwgYW5kIHRoZSAiVmkgZGVmYXVsdCIsIHdoaWNoIGlzIHVzZWQgd2hlbgorJ2NvbXBhdGlibGUnIGlzIHNldC4KKworTW9zdCBvcHRpb25zIGFyZSB0aGUgc2FtZSBpbiBhbGwgd2luZG93cyBhbmQgYnVmZmVycy4gIFRoZXJlIGFyZSBhIGZldyB0aGF0CithcmUgc3BlY2lmaWMgdG8gaG93IHRoZSB0ZXh0IGlzIHByZXNlbnRlZCBpbiBhIHdpbmRvdy4JVGhlc2UgY2FuIGJlIHNldCB0byBhCitkaWZmZXJlbnQgdmFsdWUgaW4gZWFjaCB3aW5kb3cuICBGb3IgZXhhbXBsZSB0aGUgJ2xpc3QnIG9wdGlvbiBjYW4gYmUgc2V0IGluCitvbmUgd2luZG93IGFuZCByZXNldCBpbiBhbm90aGVyIGZvciB0aGUgc2FtZSB0ZXh0LCBnaXZpbmcgYm90aCB0eXBlcyBvZiB2aWV3CithdCB0aGUgc2FtZSB0aW1lLiAgVGhlcmUgYXJlIGEgZmV3IG9wdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gYSBjZXJ0YWluCitmaWxlLiAgVGhlc2UgY2FuIGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yIGVhY2ggZmlsZSBvciBidWZmZXIuICBGb3IgZXhhbXBsZQordGhlICd0ZXh0d2lkdGgnIG9wdGlvbiBjYW4gYmUgNzggZm9yIGEgbm9ybWFsIHRleHQgZmlsZSBhbmQgMCBmb3IgYSBDCitwcm9ncmFtLgorCisJZ2xvYmFsCQkJb25lIG9wdGlvbiBmb3IgYWxsIGJ1ZmZlcnMgYW5kIHdpbmRvd3MKKwlsb2NhbCB0byB3aW5kb3cJCWVhY2ggd2luZG93IGhhcyBpdHMgb3duIGNvcHkgb2YgdGhpcyBvcHRpb24KKwlsb2NhbCB0byBidWZmZXIJCWVhY2ggYnVmZmVyIGhhcyBpdHMgb3duIGNvcHkgb2YgdGhpcyBvcHRpb24KKworV2hlbiBjcmVhdGluZyBhIG5ldyB3aW5kb3cgdGhlIG9wdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY3VycmVudGx5IGFjdGl2ZSB3aW5kb3cKK2FyZSB1c2VkIGFzIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHdpbmRvdy1zcGVjaWZpYyBvcHRpb25zLiAgRm9yIHRoZQorYnVmZmVyLXNwZWNpZmljIG9wdGlvbnMgdGhpcyBkZXBlbmRzIG9uIHRoZSAncycgYW5kICdTJyBmbGFncyBpbiB0aGUKKydjcG9wdGlvbnMnIG9wdGlvbi4gIElmICdzJyBpcyBpbmNsdWRlZCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpIHRoZSB2YWx1ZXMgZm9yCitidWZmZXIgb3B0aW9ucyBhcmUgY29waWVkIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgYnVmZmVyIHdoZW4gYSBidWZmZXIgaXMKK2ZpcnN0IGVudGVyZWQuCUlmICdTJyBpcyBwcmVzZW50IHRoZSBvcHRpb25zIGFyZSBjb3BpZWQgZWFjaCB0aW1lIHRoZSBidWZmZXIKK2lzIGVudGVyZWQsIHRoaXMgaXMgYWxtb3N0IGxpa2UgaGF2aW5nIGdsb2JhbCBvcHRpb25zLglJZiAncycgYW5kICdTJyBhcmUgbm90CitwcmVzZW50LCB0aGUgb3B0aW9ucyBhcmUgY29waWVkIGZyb20gdGhlIGN1cnJlbnRseSBhY3RpdmUgYnVmZmVyIHdoZW4gdGhlCitidWZmZXIgaXMgY3JlYXRlZC4KKworTm90IGFsbCBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgaW4gYWxsIHZlcnNpb25zLglUbyB0ZXN0IGlmIG9wdGlvbiAiZm9vIiBjYW4gYmUKK3VzZWQgd2l0aCAiOnNldCIgdXNlICJleGlzdHMoJyZmb28nKSIuCVRoaXMgZG9lc24ndCBtZWFuIHRoZSB2YWx1ZSBpcworYWN0dWFsbHkgcmVtZW1iZXJlZCBhbmQgd29ya3MuCVNvbWUgb3B0aW9ucyBhcmUgaGlkZGVuLCB3aGljaCBtZWFucyB0aGF0IHlvdQorY2FuIHNldCB0aGVtIGJ1dCB0aGUgdmFsdWUgaXMgbm90IHJlbWVtYmVyZWQuICBUbyB0ZXN0IGlmIG9wdGlvbiAiZm9vIiBpcworcmVhbGx5IHN1cHBvcnRlZCB1c2UgImV4aXN0cygnK2ZvbycpIi4KKworCQkJCQkJCSpFMzU1KgorQSBqdW1wIHRhYmxlIGZvciB0aGUgb3B0aW9ucyB3aXRoIGEgc2hvcnQgZGVzY3JpcHRpb24gY2FuIGJlIGZvdW5kIGF0IHxRX29wfC4KKworCQkJCQkqJ2FsZXBoJyogKidhbCcqICphbGVwaCogKkFsZXBoKgorJ2FsZXBoJyAnYWwnCQludW1iZXIJKGRlZmF1bHQgMTI4IGZvciBNUy1ET1MsIDIyNCBvdGhlcndpc2UpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJVGhlIEFTQ0lJIGNvZGUgZm9yIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIEhlYnJldyBhbHBoYWJldC4gIFRoZQorCXJvdXRpbmUgdGhhdCBtYXBzIHRoZSBrZXlib2FyZCBpbiBIZWJyZXcgbW9kZSwgYm90aCBpbiBJbnNlcnQgbW9kZQorCSh3aGVuIGhrbWFwIGlzIHNldCkgYW5kIG9uIHRoZSBjb21tYW5kLWxpbmUgKHdoZW4gaGl0dGluZyBDVFJMLV8pCisJb3V0cHV0cyB0aGUgSGVicmV3IGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFthbGVwaC4uYWxlcGgrMjZdLgorCWFsZXBoPTEyOCBhcHBsaWVzIHRvIFBDIGNvZGUsIGFuZCBhbGVwaD0yMjQgYXBwbGllcyB0byBJU08gODg1OS04LgorCVNlZSB8cmlsZWZ0LnR4dHwuCisKKwkJCSonYWxsb3dyZXZpbnMnKiAqJ2FyaScqIConbm9hbGxvd3JldmlucycqIConbm9hcmknKgorJ2FsbG93cmV2aW5zJyAnYXJpJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlBbGxvdyBDVFJMLV8gaW4gSW5zZXJ0IGFuZCBDb21tYW5kLWxpbmUgbW9kZS4gIFRoaXMgaXMgZGVmYXVsdCBvZmYsIHRvCisJYXZvaWQgdGhhdCB1c2VycyB0aGF0IGFjY2lkZW50YWxseSB0eXBlIENUUkwtXyBpbnN0ZWFkIG9mIFNISUZULV8gZ2V0CisJaW50byByZXZlcnNlIEluc2VydCBtb2RlLCBhbmQgZG9uJ3Qga25vdyBob3cgdG8gZ2V0IG91dC4gIFNlZQorCSdyZXZpbnMnLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJIConYWx0a2V5bWFwJyogKidha20nKiAqJ25vYWx0a2V5bWFwJyogKidub2FrbScqCisnYWx0a2V5bWFwJyAnYWttJwlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrZmFyc2l8CisJCQlmZWF0dXJlfQorCVdoZW4gb24sIHRoZSBzZWNvbmQgbGFuZ3VhZ2UgaXMgRmFyc2kuIEluIGVkaXRpbmcgbW9kZSBDVFJMLV8gdG9nZ2xlcworCXRoZSBrZXlib2FyZCBtYXAgYmV0d2VlbiBGYXJzaSBhbmQgRW5nbGlzaCwgd2hlbiAnYWxsb3dyZXZpbnMnIHNldC4KKworCVdoZW4gb2ZmLCB0aGUga2V5Ym9hcmQgbWFwIHRvZ2dsZXMgYmV0d2VlbiBIZWJyZXcgYW5kIEVuZ2xpc2guIFRoaXMKKwlpcyB1c2VmdWwgdG8gc3RhcnQgdGhlIFZpbSBpbiBuYXRpdmUgbW9kZSBpLmUuIEVuZ2xpc2ggKGxlZnQtdG8tcmlnaHQKKwltb2RlKSBhbmQgaGF2ZSBkZWZhdWx0IHNlY29uZCBsYW5ndWFnZSBGYXJzaSBvciBIZWJyZXcgKHJpZ2h0LXRvLWxlZnQKKwltb2RlKS4JU2VlIHxmYXJzaS50eHR8LgorCisJCQkJCQkqJ2FtYml3aWR0aCcqIConYW1idycqCisnYW1iaXdpZHRoJyAnYW1idycJc3RyaW5nIChkZWZhdWx0OiAic2luZ2xlIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmV9CisJT25seSBlZmZlY3RpdmUgd2hlbiAnZW5jb2RpbmcnIGlzICJ1dGYtOCIgb3IgYW5vdGhlciBVbmljb2RlIGVuY29kaW5nLgorCVRlbGxzIFZpbSB3aGF0IHRvIGRvIHdpdGggY2hhcmFjdGVycyB3aXRoIEVhc3QgQXNpYW4gV2lkdGggQ2xhc3MKKwlBbWJpZ3VvdXMgKHN1Y2ggYXMgRXVybywgUmVnaXN0ZXJlZCBTaWduLCBDb3B5cmlnaHQgU2lnbiwgR3JlZWsKKwlsZXR0ZXJzLCBDeXJpbGxpYyBsZXR0ZXJzKS4KKworCVRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIHBvc3NpYmxlIHZhbHVlczoKKwkic2luZ2xlIjoJVXNlIHRoZSBzYW1lIHdpZHRoIGFzIGNoYXJhY3RlcnMgaW4gVVMtQVNDSUkuIFRoaXMgaXMKKwkJCWV4cGVjdGVkIGJ5IG1vc3QgdXNlcnMuCisJImRvdWJsZSI6CVVzZSB0d2ljZSB0aGUgd2lkdGggb2YgQVNDSUkgY2hhcmFjdGVycy4KKworCVRoZXJlIGFyZSBhIG51bWJlciBvZiBDSksgZm9udHMgZm9yIHdoaWNoIHRoZSB3aWR0aCBvZiBnbHlwaHMgZm9yCisJdGhvc2UgY2hhcmFjdGVycyBhcmUgc29sZWx5IGJhc2VkIG9uIGhvdyBtYW55IG9jdGV0cyB0aGV5IHRha2UgaW4KKwlsZWdhY3kvdHJhZGl0aW9uYWwgQ0pLIGVuY29kaW5ncy4gIEluIHRob3NlIGVuY29kaW5ncywgRXVybywKKwlSZWdpc3RlcmVkIHNpZ24sIEdyZWVrL0N5cmlsbGljIGxldHRlcnMgYXJlIHJlcHJlc2VudGVkIGJ5IHR3byBvY3RldHMsCisJdGhlcmVmb3JlIHRob3NlIGZvbnRzIGhhdmUgIndpZGUiIGdseXBocyBmb3IgdGhlbS4gVGhpcyBpcyBhbHNvCisJdHJ1ZSBvZiBzb21lIGxpbmUgZHJhd2luZyBjaGFyYWN0ZXJzIHVzZWQgdG8gbWFrZSB0YWJsZXMgaW4gdGV4dAorCWZpbGUuIFRoZXJlZm9yZSwgd2hlbiBhIENKSyBmb250IGlzIHVzZWQgZm9yIEdVSSBWaW0gb3IKKwlWaW0gaXMgcnVubmluZyBpbnNpZGUgYSB0ZXJtaW5hbCAoZW11bGF0b3JzKSB0aGF0IHVzZXMgYSBDSksgZm9udAorCShvciBWaW0gaXMgcnVuIGluc2lkZSBhbiB4dGVybSBpbnZva2VkIHdpdGggIi1jamt3aWR0aCIgb3B0aW9uLiksCisJdGhpcyBvcHRpb24gc2hvdWxkIGJlIHNldCB0byAiZG91YmxlIiB0byBtYXRjaCB0aGUgd2lkdGggcGVyY2VpdmVkCisJYnkgVmltIHdpdGggdGhlIHdpZHRoIG9mIGdseXBocyBpbiB0aGUgZm9udC4gIFBlcmhhcHMgaXQgYWxzbyBoYXMKKwl0byBiZSBzZXQgdG8gImRvdWJsZSIgdW5kZXIgQ0pLIFdpbmRvd3MgOXgvTUUgb3IgV2luZG93cyAyay9YUAorCXdoZW4gdGhlIHN5c3RlbSBsb2NhbGUgaXMgc2V0IHRvIG9uZSBvZiBDSksgbG9jYWxlcy4gIFNlZSBVbmljb2RlCisJU3RhbmRhcmQgQW5uZXggIzExIChodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIxMSkuCisKKwkJCSonYW50aWFsaWFzJyogKidhbnRpJyogKidub2FudGlhbGlhcycqIConbm9hbnRpJyoKKydhbnRpYWxpYXMnICdhbnRpJwlib29sZWFuIChkZWZhdWx0OiBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIEdVSSBlbmFibGVkCisJCQlvbiBNYWMgT1MgWH0KKwlUaGlzIG9wdGlvbiBvbmx5IGhhcyBhbiBlZmZlY3QgaW4gdGhlIEdVSSB2ZXJzaW9uIG9mIFZpbSBvbiBNYWMgT1MgWAorCXYxMC4yIG9yIGxhdGVyLiAgV2hlbiBvbiwgVmltIHdpbGwgdXNlIHNtb290aCAoImFudGlhbGlhc2VkIikgZm9udHMsCisJd2hpY2ggY2FuIGJlIGVhc2llciB0byByZWFkIGF0IGNlcnRhaW4gc2l6ZXMgb24gY2VydGFpbiBkaXNwbGF5cy4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMgaWYgJ2d1aWZvbnQnIGlzIHNldAorCXRvIGl0cyBkZWZhdWx0IChlbXB0eSBzdHJpbmcpLgorCisJCQkqJ2F1dG9jaGRpcicqIConYWNkJyogKidub2F1dG9jaGRpcicqIConbm9hY2QnKgorJ2F1dG9jaGRpcicgJ2FjZCcJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZQorCQkJfCtuZXRiZWFuc19pbnRnfCBvciB8K3N1bl93b3Jrc2hvcHwgZmVhdHVyZX0KKwlXaGVuIG9uLCBWaW0gd2lsbCBjaGFuZ2UgaXRzIHZhbHVlIGZvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorCXdoZW5ldmVyIHlvdSBvcGVuIGEgZmlsZSwgc3dpdGNoIGJ1ZmZlcnMsIGRlbGV0ZSBhIGJ1ZmZlciBvcgorCW9wZW4vY2xvc2UgYSB3aW5kb3cuIEl0IHdpbGwgY2hhbmdlIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUKKwlmaWxlIHdoaWNoIHdhcyBvcGVuZWQgb3Igc2VsZWN0ZWQuICBUaGlzIG9wdGlvbiBpcyBwcm92aWRlZCBmb3IKKwliYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFZpbSByZWxlYXNlZCB3aXRoIFN1biBPTkUgU3R1ZGlvIDQKKwlFbnRlcnByaXNlIEVkaXRpb24uCisKKwkJCQkqJ2FyYWJpYycqIConYXJhYicqIConbm9hcmFiaWMnKiAqJ25vYXJhYicqCisnYXJhYmljJyAnYXJhYicJCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCthcmFiaWN8CisJCQlmZWF0dXJlfQorCVRoaXMgb3B0aW9uIGNhbiBiZSBzZXQgdG8gc3RhcnQgZWRpdGluZyBBcmFiaWMgdGV4dC4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIHdpbGw6CisJLSBTZXQgdGhlICdyaWdodGxlZnQnIG9wdGlvbiwgdW5sZXNzICd0ZXJtYmlkaScgaXMgc2V0LgorCS0gU2V0IHRoZSAnYXJhYmljc2hhcGUnIG9wdGlvbiwgdW5sZXNzICd0ZXJtYmlkaScgaXMgc2V0LgorCS0gU2V0IHRoZSAna2V5bWFwJyBvcHRpb24gdG8gImFyYWJpYyI7IGluIEluc2VydCBtb2RlIENUUkwtXiB0b2dnbGVzCisJICBiZXR3ZWVuIHR5cGluZyBFbmdsaXNoIGFuZCBBcmFiaWMga2V5IG1hcHBpbmcuCisJLSBTZXQgdGhlICdkZWxjb21iaW5lJyBvcHRpb24KKwlOb3RlIHRoYXQgJ2VuY29kaW5nJyBtdXN0IGJlICJ1dGYtOCIgZm9yIHdvcmtpbmcgd2l0aCBBcmFiaWMgdGV4dC4KKworCVJlc2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsOgorCS0gUmVzZXQgdGhlICdyaWdodGxlZnQnIG9wdGlvbi4KKwktIERpc2FibGUgdGhlIHVzZSBvZiAna2V5bWFwJyAod2l0aG91dCBjaGFuZ2luZyBpdHMgdmFsdWUpLgorCU5vdGUgdGhhdCAnYXJhYmljc2hhcGUnIGFuZCAnZGVsY29tYmluZScgYXJlIG5vdCByZXNldCAoaXQgaXMgYSBnbG9iYWwKKwlvcHRpb24uCisJQWxzbyBzZWUgfGFyYWJpYy50eHR8LgorCisJCQkJCSonYXJhYmljc2hhcGUnKiAqJ2Fyc2hhcGUnKgorCQkJCQkqJ25vYXJhYmljc2hhcGUnKiAqJ25vYXJzaGFwZScqCisnYXJhYmljc2hhcGUnICdhcnNoYXBlJwlib29sZWFuIChkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCthcmFiaWN8CisJCQlmZWF0dXJlfQorCVdoZW4gb24gYW5kICd0ZXJtYmlkaScgaXMgb2ZmLCB0aGUgcmVxdWlyZWQgdmlzdWFsIGNoYXJhY3RlcgorCWNvcnJlY3Rpb25zIHRoYXQgbmVlZCB0byB0YWtlIHBsYWNlIGZvciBkaXNwbGF5aW5nIHRoZSBBcmFiaWMgbGFuZ3VhZ2UKKwl0YWtlIGFmZmVjdC4gIFNoYXBpbmcsIGluIGVzc2VuY2UsIGdldHMgZW5hYmxlZDsgdGhlIHRlcm0gaXMgYSBicm9hZAorCW9uZSB3aGljaCBlbmNvbXBhc3NlczoKKwkgIGEpIHRoZSBjaGFuZ2luZy9tb3JwaGluZyBvZiBjaGFyYWN0ZXJzIGJhc2VkIG9uIHRoZWlyIGxvY2F0aW9uCisJICAgICB3aXRoaW4gYSB3b3JkIChpbml0aWFsLCBtZWRpYWwsIGZpbmFsIGFuZCBzdGFuZC1hbG9uZSkuCisJICBiKSB0aGUgZW5hYmxpbmcgb2YgdGhlIGFiaWxpdHkgdG8gY29tcG9zZSBjaGFyYWN0ZXJzCisJICBjKSB0aGUgZW5hYmxpbmcgb2YgdGhlIHJlcXVpcmVkIGNvbWJpbmluZyBvZiBzb21lIGNoYXJhY3RlcnMKKwlXaGVuIGRpc2FibGVkIHRoZSBjaGFyYWN0ZXIgZGlzcGxheSByZXZlcnRzIGJhY2sgdG8gZWFjaCBjaGFyYWN0ZXIncworCXRydWUgc3RhbmQtYWxvbmUgZm9ybS4KKwlBcmFiaWMgaXMgYSBjb21wbGV4IGxhbmd1YWdlIHdoaWNoIHJlcXVpcmVzIG90aGVyIHNldHRpbmdzLCBmb3IKKwlmdXJ0aGVyIGRldGFpbHMgc2VlIHxhcmFiaWMudHh0fC4KKworCQkJKidhdXRvaW5kZW50JyogKidhaScqIConbm9hdXRvaW5kZW50JyogKidub2FpJyoKKydhdXRvaW5kZW50JyAnYWknCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJQ29weSBpbmRlbnQgZnJvbSBjdXJyZW50IGxpbmUgd2hlbiBzdGFydGluZyBhIG5ldyBsaW5lICh0eXBpbmcgPENSPgorCWluIEluc2VydCBtb2RlIG9yIHdoZW4gdXNpbmcgdGhlICJvIiBvciAiTyIgY29tbWFuZCkuICBJZiB5b3UgZG8gbm90CisJdHlwZSBhbnl0aGluZyBvbiB0aGUgbmV3IGxpbmUgZXhjZXB0IDxCUz4gb3IgQ1RSTC1EIGFuZCB0aGVuIHR5cGUKKwk8RXNjPiBvciA8Q1I+LCB0aGUgaW5kZW50IGlzIGRlbGV0ZWQgYWdhaW4uICBXaGVuIGF1dG9pbmRlbnQgaXMgb24sCisJZm9ybWF0dGluZyAod2l0aCB0aGUgImdxIiBjb21tYW5kIG9yIHdoZW4geW91IHJlYWNoICd0ZXh0d2lkdGgnIGluCisJSW5zZXJ0IG1vZGUpIHVzZXMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSBmaXJzdCBsaW5lLgorCVdoZW4gJ3NtYXJ0aW5kZW50JyBvciAnY2luZGVudCcgaXMgb24gdGhlIGluZGVudCBpcyBjaGFuZ2VkIGluCisJYSBkaWZmZXJlbnQgd2F5LgorCVRoZSAnYXV0b2luZGVudCcgb3B0aW9uIGlzIHJlc2V0IHdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHNldC4KKwl7c21hbGwgZGlmZmVyZW5jZSBmcm9tIFZpOiBBZnRlciB0aGUgaW5kZW50IGlzIGRlbGV0ZWQgd2hlbiB0eXBpbmcKKwk8RXNjPiBvciA8Q1I+LCB0aGUgY3Vyc29yIHBvc2l0aW9uIHdoZW4gbW92aW5nIHVwIG9yIGRvd24gaXMgYWZ0ZXIgdGhlCisJZGVsZXRlZCBpbmRlbnQ7IFZpIHB1dHMgdGhlIGN1cnNvciBzb21ld2hlcmUgaW4gdGhlIGRlbGV0ZWQgaW5kZW50fS4KKworCQkJCSAqJ2F1dG9yZWFkJyogKidhcicqIConbm9hdXRvcmVhZCcqIConbm9hcicqCisnYXV0b3JlYWQnICdhcicJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIGEgZmlsZSBoYXMgYmVlbiBkZXRlY3RlZCB0byBoYXZlIGJlZW4gY2hhbmdlZCBvdXRzaWRlIG9mIFZpbSBhbmQKKwlpdCBoYXMgbm90IGJlZW4gY2hhbmdlZCBpbnNpZGUgb2YgVmltLCBhdXRvbWF0aWNhbGx5IHJlYWQgaXQgYWdhaW4uCisJV2hlbiB0aGUgZmlsZSBoYXMgYmVlbiBkZWxldGVkIHRoaXMgaXMgbm90IGRvbmUuICB8dGltZXN0YW1wfAorCUlmIHRoaXMgb3B0aW9uIGhhcyBhIGxvY2FsIHZhbHVlLCB1c2UgdGhpcyBjb21tYW5kIHRvIHN3aXRjaCBiYWNrIHRvCisJdXNpbmcgdGhlIGdsb2JhbCB2YWx1ZTogPgorCQk6c2V0IGF1dG9yZWFkPAorPAorCQkJCSAqJ2F1dG93cml0ZScqIConYXcnKiAqJ25vYXV0b3dyaXRlJyogKidub2F3JyoKKydhdXRvd3JpdGUnICdhdycJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwlXcml0ZSB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUsIGlmIGl0IGhhcyBiZWVuIG1vZGlmaWVkLCBvbiBlYWNoCisJOm5leHQsIDpyZXdpbmQsIDpsYXN0LCA6Zmlyc3QsIDpwcmV2aW91cywgOnN0b3AsIDpzdXNwZW5kLCA6dGFnLCA6ISwKKwk6bWFrZSwgQ1RSTC1dIGFuZCBDVFJMLV4gY29tbWFuZDsgYW5kIHdoZW4gYSBDVFJMLU8sIENUUkwtSSwKKwkne0EtWjAtOX0sIG9yIGB7QS1aMC05fSBjb21tYW5kIHRha2VzIG9uZSB0byBhbm90aGVyIGZpbGUuCisJTm90ZSB0aGF0IGZvciBzb21lIGNvbW1hbmRzIHRoZSAnYXV0b3dyaXRlJyBvcHRpb24gaXMgbm90IHVzZWQsIHNlZQorCSdhdXRvd3JpdGVhbGwnIGZvciB0aGF0LgorCisJCQkgKidhdXRvd3JpdGVhbGwnKiAqJ2F3YScqIConbm9hdXRvd3JpdGVhbGwnKiAqJ25vYXdhJyoKKydhdXRvd3JpdGVhbGwnICdhd2EnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUxpa2UgJ2F1dG93cml0ZScsIGJ1dCBhbHNvIHVzZWQgZm9yIGNvbW1hbmRzICI6ZWRpdCIsICI6ZW5ldyIsICI6cXVpdCIsCisJIjpxYWxsIiwgIjpleGl0IiwgIjp4aXQiLCAiOnJlY292ZXIiIGFuZCBjbG9zaW5nIHRoZSBWaW0gd2luZG93LgorCVNldHRpbmcgdGhpcyBvcHRpb24gYWxzbyBpbXBsaWVzIHRoYXQgVmltIGJlaGF2ZXMgbGlrZSAnYXV0b3dyaXRlJyBoYXMKKwliZWVuIHNldC4KKworCQkJCQkJCSonYmFja2dyb3VuZCcqIConYmcnKgorJ2JhY2tncm91bmQnICdiZycJc3RyaW5nCShkZWZhdWx0ICJkYXJrIiBvciAibGlnaHQiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gc2V0IHRvICJkYXJrIiwgVmltIHdpbGwgdHJ5IHRvIHVzZSBjb2xvcnMgdGhhdCBsb29rIGdvb2Qgb24gYQorCWRhcmsgYmFja2dyb3VuZC4gIFdoZW4gc2V0IHRvICJsaWdodCIsIFZpbSB3aWxsIHRyeSB0byB1c2UgY29sb3JzIHRoYXQKKwlsb29rIGdvb2Qgb24gYSBsaWdodCBiYWNrZ3JvdW5kLiAgQW55IG90aGVyIHZhbHVlIGlzIGlsbGVnYWwuCisJVmltIHRyaWVzIHRvIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHRlcm1pbmFsIHVzZWQuCisJVGhpcyB3aWxsIG5vdCBhbHdheXMgYmUgY29ycmVjdC4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgYmFja2dyb3VuZCBjb2xvciwgaXQgdGVsbHMgVmltCisJd2hhdCB0aGUgYmFja2dyb3VuZCBjb2xvciBsb29rcyBsaWtlLiAgRm9yIGNoYW5naW5nIHRoZSBiYWNrZ3JvdW5kCisJY29sb3IsIHNlZSB8OmhpLW5vcm1hbHwuCisKKwlXaGVuICdiYWNrZ3JvdW5kJyBpcyBzZXQgVmltIHdpbGwgYWRqdXN0IHRoZSBkZWZhdWx0IGNvbG9yIGdyb3VwcyBmb3IKKwl0aGUgbmV3IHZhbHVlLglCdXQgdGhlIGNvbG9ycyB1c2VkIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIHdpbGwgbm90CisJY2hhbmdlLgorCVdoZW4gYSBjb2xvciBzY2hlbWUgaXMgbG9hZGVkICh0aGUgImNvbG9yc19uYW1lIiB2YXJpYWJsZSBpcyBzZXQpCisJc2V0dGluZyAnYmFja2dyb3VuZCcgd2lsbCBjYXVzZSB0aGUgY29sb3Igc2NoZW1lIHRvIGJlIHJlbG9hZGVkLiAgSWYKKwl0aGUgY29sb3Igc2NoZW1lIGFkanVzdHMgdG8gdGhlIHZhbHVlIG9mICdiYWNrZ3JvdW5kJyB0aGlzIHdpbGwgd29yay4KKwlIb3dldmVyLCBpZiB0aGUgY29sb3Igc2NoZW1lIHNldHMgJ2JhY2tncm91bmQnIGl0c2VsZiB0aGUgZWZmZWN0IG1heQorCWJlIHVuZG9uZS4gIEZpcnN0IGRlbGV0ZSB0aGUgImNvbG9yc19uYW1lIiB2YXJpYWJsZSB3aGVuIG5lZWRlZC4KKworCVdoZW4gc2V0dGluZyAnYmFja2dyb3VuZCcgdG8gdGhlIGRlZmF1bHQgdmFsdWUgd2l0aDogPgorCQk6c2V0IGJhY2tncm91bmQmCis8CVZpbSB3aWxsIGd1ZXNzIHRoZSB2YWx1ZS4gIEluIHRoZSBHVUkgdGhpcyBzaG91bGQgd29yayBjb3JyZWN0bHksCisJaW4gb3RoZXIgY2FzZXMgVmltIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGd1ZXNzIHRoZSByaWdodCB2YWx1ZS4KKworCVdoZW4gc3RhcnRpbmcgdGhlIEdVSSwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yICdiYWNrZ3JvdW5kJyB3aWxsIGJlCisJImxpZ2h0Ii4gIFdoZW4gdGhlIHZhbHVlIGlzIG5vdCBzZXQgaW4gdGhlIC5ndmltcmMsIGFuZCBWaW0gZGV0ZWN0cworCXRoYXQgdGhlIGJhY2tncm91bmQgaXMgYWN0dWFsbHkgcXVpdGUgZGFyaywgJ2JhY2tncm91bmQnIGlzIHNldCB0bworCSJkYXJrIi4gIEJ1dCB0aGlzIGhhcHBlbnMgb25seSBBRlRFUiB0aGUgLmd2aW1yYyBmaWxlIGhhcyBiZWVuIHJlYWQKKwkoYmVjYXVzZSB0aGUgd2luZG93IG5lZWRzIHRvIGJlIG9wZW5lZCB0byBmaW5kIHRoZSBhY3R1YWwgYmFja2dyb3VuZAorCWNvbG9yKS4gIFRvIGdldCBhcm91bmQgdGhpcywgZm9yY2UgdGhlIEdVSSB3aW5kb3cgdG8gYmUgb3BlbmVkIGJ5CisJcHV0dGluZyBhICI6Z3VpIiBjb21tYW5kIGluIHRoZSAuZ3ZpbXJjIGZpbGUsIGJlZm9yZSB3aGVyZSB0aGUgdmFsdWUKKwlvZiAnYmFja2dyb3VuZCcgaXMgdXNlZCAoZS5nLiwgYmVmb3JlICI6c3ludGF4IG9uIikuCisJTm9ybWFsbHkgdGhpcyBvcHRpb24gd291bGQgYmUgc2V0IGluIHRoZSAudmltcmMgZmlsZS4gIFBvc3NpYmx5CisJZGVwZW5kaW5nIG9uIHRoZSB0ZXJtaW5hbCBuYW1lLiAgRXhhbXBsZTogPgorCQk6aWYgJnRlcm0gPT0gInBjdGVybSIKKwkJOiAgc2V0IGJhY2tncm91bmQ9ZGFyaworCQk6ZW5kaWYKKzwJV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgaGlnaGxpZ2h0IGdyb3VwcworCXdpbGwgY2hhbmdlLiAgVG8gdXNlIG90aGVyIHNldHRpbmdzLCBwbGFjZSAiOmhpZ2hsaWdodCIgY29tbWFuZHMgQUZURVIKKwl0aGUgc2V0dGluZyBvZiB0aGUgJ2JhY2tncm91bmQnIG9wdGlvbi4KKwlUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQgaW4gdGhlICIkVklNUlVOVElNRS9zeW50YXgvc3ludGF4LnZpbSIgZmlsZQorCXRvIHNlbGVjdCB0aGUgY29sb3JzIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nLiAgQWZ0ZXIgY2hhbmdpbmcgdGhpcworCW9wdGlvbiwgeW91IG11c3QgbG9hZCBzeW50YXgudmltIGFnYWluIHRvIHNlZSB0aGUgcmVzdWx0LiAgVGhpcyBjYW4gYmUKKwlkb25lIHdpdGggIjpzeW50YXggb24iLgorCisJCQkJCQkJKidiYWNrc3BhY2UnKiAqJ2JzJyoKKydiYWNrc3BhY2UnICdicycJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUluZmx1ZW5jZXMgdGhlIHdvcmtpbmcgb2YgPEJTPiwgPERlbD4sIENUUkwtVyBhbmQgQ1RSTC1VIGluIEluc2VydAorCW1vZGUuICBUaGlzIGlzIGEgbGlzdCBvZiBpdGVtcywgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIEVhY2ggaXRlbSBhbGxvd3MKKwlhIHdheSB0byBiYWNrc3BhY2Ugb3ZlciBzb21ldGhpbmc6CisJdmFsdWUJZWZmZWN0CX4KKwlpbmRlbnQJYWxsb3cgYmFja3NwYWNpbmcgb3ZlciBhdXRvaW5kZW50CisJZW9sCWFsbG93IGJhY2tzcGFjaW5nIG92ZXIgbGluZSBicmVha3MgKGpvaW4gbGluZXMpCisJc3RhcnQJYWxsb3cgYmFja3NwYWNpbmcgb3ZlciB0aGUgc3RhcnQgb2YgaW5zZXJ0OyBDVFJMLVcgYW5kIENUUkwtVQorCQlzdG9wIG9uY2UgYXQgdGhlIHN0YXJ0IG9mIGluc2VydC4KKworCVdoZW4gdGhlIHZhbHVlIGlzIGVtcHR5LCBWaSBjb21wYXRpYmxlIGJhY2tzcGFjaW5nIGlzIHVzZWQuCisKKwlGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9uIDUuNCBhbmQgZWFybGllcjoKKwl2YWx1ZQllZmZlY3QJfgorCSAgMAlzYW1lIGFzICI6c2V0IGJhY2tzcGFjZT0iIChWaSBjb21wYXRpYmxlKQorCSAgMQlzYW1lIGFzICI6c2V0IGJhY2tzcGFjZT1pbmRlbnQsZW9sIgorCSAgMglzYW1lIGFzICI6c2V0IGJhY2tzcGFjZT1pbmRlbnQsZW9sLHN0YXJ0IgorCisJU2VlIHw6Zml4ZGVsfCBpZiB5b3VyIDxCUz4gb3IgPERlbD4ga2V5IGRvZXMgbm90IGRvIHdoYXQgeW91IHdhbnQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvICIiIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCSonYmFja3VwJyogKidiaycqIConbm9iYWNrdXAnKiAqJ25vYmsnKgorJ2JhY2t1cCcgJ2JrJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTWFrZSBhIGJhY2t1cCBiZWZvcmUgb3ZlcndyaXRpbmcgYSBmaWxlLiAgTGVhdmUgaXQgYXJvdW5kIGFmdGVyIHRoZQorCWZpbGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uICBJZiB5b3UgZG8gbm90IHdhbnQgdG8ga2VlcCB0aGUKKwliYWNrdXAgZmlsZSwgYnV0IHlvdSBkbyB3YW50IGEgYmFja3VwIHdoaWxlIHRoZSBmaWxlIGlzIGJlaW5nCisJd3JpdHRlbiwgcmVzZXQgdGhpcyBvcHRpb24gYW5kIHNldCB0aGUgJ3dyaXRlYmFja3VwJyBvcHRpb24gKHRoaXMgaXMKKwl0aGUgZGVmYXVsdCkuICBJZiB5b3UgZG8gbm90IHdhbnQgYSBiYWNrdXAgZmlsZSBhdCBhbGwgcmVzZXQgYm90aAorCW9wdGlvbnMgKHVzZSB0aGlzIGlmIHlvdXIgZmlsZSBzeXN0ZW0gaXMgYWxtb3N0IGZ1bGwpLglTZWUgdGhlCisJfGJhY2t1cC10YWJsZXwgZm9yIG1vcmUgZXhwbGFuYXRpb25zLgorCVdoZW4gdGhlICdiYWNrdXBza2lwJyBwYXR0ZXJuIG1hdGNoZXMsIGEgYmFja3VwIGlzIG5vdCBtYWRlIGFueXdheS4KKwlXaGVuICdwYXRjaG1vZGUnIGlzIHNldCwgdGhlIGJhY2t1cCBtYXkgYmUgcmVuYW1lZCB0byBiZWNvbWUgdGhlCisJb2xkZXN0IHZlcnNpb24gb2YgYSBmaWxlLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidiYWNrdXBjb3B5JyogKidia2MnKgorJ2JhY2t1cGNvcHknICdia2MnCXN0cmluZwkoVmkgZGVmYXVsdCBmb3IgVW5peDogInllcyIsIG90aGVyd2lzZTogImF1dG8iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gd3JpdGluZyBhIGZpbGUgYW5kIGEgYmFja3VwIGlzIG1hZGUsIHRoaXMgb3B0aW9uIHRlbGxzIGhvdyBpdCdzCisJZG9uZS4gIFRoaXMgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB3b3Jkcy4KKworCVRoZSBtYWluIHZhbHVlcyBhcmU6CisJInllcyIJbWFrZSBhIGNvcHkgb2YgdGhlIGZpbGUgYW5kIG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgb25lCisJIm5vIglyZW5hbWUgdGhlIGZpbGUgYW5kIHdyaXRlIGEgbmV3IG9uZQorCSJhdXRvIglvbmUgb2YgdGhlIHByZXZpb3VzLCB3aGF0IHdvcmtzIGJlc3QKKworCUV4dHJhIHZhbHVlcyB0aGF0IGNhbiBiZSBjb21iaW5lZCB3aXRoIHRoZSBvbmVzIGFib3ZlIGFyZToKKwkiYnJlYWtzeW1saW5rIglhbHdheXMgYnJlYWsgc3ltbGlua3Mgd2hlbiB3cml0aW5nCisJImJyZWFraGFyZGxpbmsiCWFsd2F5cyBicmVhayBoYXJkbGlua3Mgd2hlbiB3cml0aW5nCisKKwlNYWtpbmcgYSBjb3B5IGFuZCBvdmVyd3JpdGluZyB0aGUgb3JpZ2luYWwgZmlsZToKKwktIFRha2VzIGV4dHJhIHRpbWUgdG8gY29weSB0aGUgZmlsZS4KKwkrIFdoZW4gdGhlIGZpbGUgaGFzIHNwZWNpYWwgYXR0cmlidXRlcywgaXMgYSAoaGFyZC9zeW1ib2xpYykgbGluayBvcgorCSAgaGFzIGEgcmVzb3VyY2UgZm9yaywgYWxsIHRoaXMgaXMgcHJlc2VydmVkLgorCS0gV2hlbiB0aGUgZmlsZSBpcyBhIGxpbmsgdGhlIGJhY2t1cCB3aWxsIGhhdmUgdGhlIG5hbWUgb2YgdGhlIGxpbmssCisJICBub3Qgb2YgdGhlIHJlYWwgZmlsZS4KKworCVJlbmFtaW5nIHRoZSBmaWxlIGFuZCB3cml0aW5nIGEgbmV3IG9uZToKKwkrIEl0J3MgZmFzdC4KKwktIFNvbWV0aW1lcyBub3QgYWxsIGF0dHJpYnV0ZXMgb2YgdGhlIGZpbGUgY2FuIGJlIGNvcGllZCB0byB0aGUgbmV3CisJICBmaWxlLgorCS0gV2hlbiB0aGUgZmlsZSBpcyBhIGxpbmsgdGhlIG5ldyBmaWxlIHdpbGwgbm90IGJlIGEgbGluay4KKworCVRoZSAiYXV0byIgdmFsdWUgaXMgdGhlIG1pZGRsZSB3YXk6IFdoZW4gVmltIHNlZXMgdGhhdCByZW5hbWluZyBmaWxlCisJaXMgcG9zc2libGUgd2l0aG91dCBzaWRlIGVmZmVjdHMgKHRoZSBhdHRyaWJ1dGVzIGNhbiBiZSBwYXNzZWQgb24gYW5kCisJYW5kIHRoZSBmaWxlIGlzIG5vdCBhIGxpbmspIHRoYXQgaXMgdXNlZC4gIFdoZW4gcHJvYmxlbXMgYXJlIGV4cGVjdGVkLAorCWEgY29weSB3aWxsIGJlIG1hZGUuCisKKwlUaGUgImJyZWFrc3ltbGluayIgYW5kICJicmVha2hhcmRsaW5rIiB2YWx1ZXMgY2FuIGJlIHVzZWQgaW4KKwljb21iaW5hdGlvbiB3aXRoIGFueSBvZiAieWVzIiwgIm5vIiBhbmQgImF1dG8iLiAgV2hlbiBpbmNsdWRlZCwgdGhleQorCWZvcmNlIFZpbSB0byBhbHdheXMgYnJlYWsgZWl0aGVyIHN5bWJvbGljIG9yIGhhcmQgbGlua3MgYnkgZG9pbmcKKwlleGFjdGx5IHdoYXQgdGhlICJubyIgb3B0aW9uIGRvZXMsIHJlbmFtaW5nIHRoZSBvcmlnaW5hbCBmaWxlIHRvCisJYmVjb21lIHRoZSBiYWNrdXAgYW5kIHdyaXRpbmcgYSBuZXcgZmlsZSBpbiBpdHMgcGxhY2UuICBUaGlzIGNhbiBiZQorCXVzZWZ1bCBmb3IgZXhhbXBsZSBpbiBzb3VyY2UgdHJlZXMgd2hlcmUgYWxsIHRoZSBmaWxlcyBhcmUgc3ltYm9saWMgb3IKKwloYXJkIGxpbmtzIGFuZCBhbnkgY2hhbmdlcyBzaG91bGQgc3RheSBpbiB0aGUgbG9jYWwgc291cmNlIHRyZWUsIG5vdAorCWJlIHByb3BhZ2F0ZWQgYmFjayB0byB0aGUgb3JpZ2luYWwgc291cmNlLgorCQkJCQkJCSpjcm9udGFiKgorCU9uZSBzaXR1YXRpb24gd2hlcmUgIm5vIiBhbmQgImF1dG8iIHdpbGwgY2F1c2UgcHJvYmxlbXM6IEEgcHJvZ3JhbQorCXRoYXQgb3BlbnMgYSBmaWxlLCBpbnZva2VzIFZpbSB0byBlZGl0IHRoYXQgZmlsZSwgYW5kIHRoZW4gdGVzdHMgaWYKKwl0aGUgb3BlbiBmaWxlIHdhcyBjaGFuZ2VkICh0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3IpIHdpbGwgY2hlY2sgdGhlCisJYmFja3VwIGZpbGUgaW5zdGVhZCBvZiB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlLgkiY3JvbnRhYiAtZSIgaXMgYW4KKwlleGFtcGxlLgorCisJV2hlbiBhIGNvcHkgaXMgbWFkZSwgdGhlIG9yaWdpbmFsIGZpbGUgaXMgdHJ1bmNhdGVkIGFuZCB0aGVuIGZpbGxlZAorCXdpdGggdGhlIG5ldyB0ZXh0LiAgVGhpcyBtZWFucyB0aGF0IHByb3RlY3Rpb24gYml0cywgb3duZXIgYW5kCisJc3ltYm9saWMgbGlua3Mgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXJlIHVubW9kaWZpZWQuICBUaGUgYmFja3VwIGZpbGUKKwlob3dldmVyLCBpcyBhIG5ldyBmaWxlLCBvd25lZCBieSB0aGUgdXNlciB3aG8gZWRpdGVkIHRoZSBmaWxlLglUaGUKKwlncm91cCBvZiB0aGUgYmFja3VwIGlzIHNldCB0byB0aGUgZ3JvdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUuICBJZiB0aGlzCisJZmFpbHMsIHRoZSBwcm90ZWN0aW9uIGJpdHMgZm9yIHRoZSBncm91cCBhcmUgbWFkZSB0aGUgc2FtZSBhcyBmb3IKKwlvdGhlcnMuCisKKwlXaGVuIHRoZSBmaWxlIGlzIHJlbmFtZWQgdGhpcyBpcyB0aGUgb3RoZXIgd2F5IGFyb3VuZDogVGhlIGJhY2t1cCBoYXMKKwl0aGUgc2FtZSBhdHRyaWJ1dGVzIG9mIHRoZSBvcmlnaW5hbCBmaWxlLCBhbmQgdGhlIG5ld2x5IHdyaXR0ZW4gZmlsZQorCWlzIG93bmVkIGJ5IHRoZSBjdXJyZW50IHVzZXIuICBXaGVuIHRoZSBmaWxlIHdhcyBhIChoYXJkL3N5bWJvbGljKQorCWxpbmssIHRoZSBuZXcgZmlsZSB3aWxsIG5vdCEgIFRoYXQncyB3aHkgdGhlICJhdXRvIiB2YWx1ZSBkb2Vzbid0CisJcmVuYW1lIHdoZW4gdGhlIGZpbGUgaXMgYSBsaW5rLiAgVGhlIG93bmVyIGFuZCBncm91cCBvZiB0aGUgbmV3bHkKKwl3cml0dGVuIGZpbGUgd2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgb25lcyBhcyB0aGUgb3JpZ2luYWwgZmlsZSwgYnV0CisJdGhlIHN5c3RlbSBtYXkgcmVmdXNlIHRvIGRvIHRoaXMuICBJbiB0aGF0IGNhc2UgdGhlICJhdXRvIiB2YWx1ZSB3aWxsCisJYWdhaW4gbm90IHJlbmFtZSB0aGUgZmlsZS4KKworCQkJCQkJKidiYWNrdXBkaXInKiAqJ2JkaXInKgorJ2JhY2t1cGRpcicgJ2JkaXInCXN0cmluZwkoZGVmYXVsdCBmb3IgQW1pZ2E6ICIuLHQ6IiwKKwkJCQkgZm9yIE1TLURPUyBhbmQgV2luMzI6ICIuLGM6L3RtcCxjOi90ZW1wIgorCQkJCSBmb3IgVW5peDogIi4sfi90bXAsfi8iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIHRoZSBiYWNrdXAgZmlsZSwgc2VwYXJhdGVkIHdpdGggY29tbWFzLgorCS0gVGhlIGJhY2t1cCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZmlyc3QgZGlyZWN0b3J5IGluIHRoZSBsaXN0CisJICB3aGVyZSB0aGlzIGlzIHBvc3NpYmxlLgorCS0gRW1wdHkgbWVhbnMgdGhhdCBubyBiYWNrdXAgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgKCdwYXRjaG1vZGUnIGlzCisJICBpbXBvc3NpYmxlISkuICBXcml0aW5nIG1heSBmYWlsIGJlY2F1c2Ugb2YgdGhpcy4KKwktIEEgZGlyZWN0b3J5ICIuIiBtZWFucyB0byBwdXQgdGhlIGJhY2t1cCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorCSAgYXMgdGhlIGVkaXRlZCBmaWxlLgorCS0gQSBkaXJlY3Rvcnkgc3RhcnRpbmcgd2l0aCAiLi8iIChvciAiLlwiIGZvciBNUy1ET1MgZXQuYWwuKSBtZWFucyB0bworCSAgcHV0IHRoZSBiYWNrdXAgZmlsZSByZWxhdGl2ZSB0byB3aGVyZSB0aGUgZWRpdGVkIGZpbGUgaXMuICBUaGUKKwkgIGxlYWRpbmcgIi4iIGlzIHJlcGxhY2VkIHdpdGggdGhlIHBhdGggbmFtZSBvZiB0aGUgZWRpdGVkIGZpbGUuCisJICAoIi4iIGluc2lkZSBhIGRpcmVjdG9yeSBuYW1lIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcpLgorCS0gU3BhY2VzIGFmdGVyIHRoZSBjb21tYSBhcmUgaWdub3JlZCwgb3RoZXIgc3BhY2VzIGFyZSBjb25zaWRlcmVkIHBhcnQKKwkgIG9mIHRoZSBkaXJlY3RvcnkgbmFtZS4gIFRvIGhhdmUgYSBzcGFjZSBhdCB0aGUgc3RhcnQgb2YgYSBkaXJlY3RvcnkKKwkgIG5hbWUsIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4KKwktIFRvIGluY2x1ZGUgYSBjb21tYSBpbiBhIGRpcmVjdG9yeSBuYW1lIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4KKwktIEEgZGlyZWN0b3J5IG5hbWUgbWF5IGVuZCBpbiBhbiAnLycuCisJLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCisJLSBDYXJlZnVsIHdpdGggJ1wnIGNoYXJhY3RlcnMsIHR5cGUgb25lIGJlZm9yZSBhIHNwYWNlLCB0eXBlIHR3byB0bworCSAgZ2V0IG9uZSBpbiB0aGUgb3B0aW9uIChzZWUgfG9wdGlvbi1iYWNrc2xhc2h8KSwgZm9yIGV4YW1wbGU6ID4KKwkgICAgOnNldCBiZGlyPWM6XFx0bXAsXCBkaXJcXCx3aXRoXFwsY29tbWFzLFxcXCBkaXJcIHdpdGhcIHNwYWNlcworPAktIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFZpbSB2ZXJzaW9uIDMuMCBhICc+JyBhdCB0aGUgc3RhcnQKKwkgIG9mIHRoZSBvcHRpb24gaXMgcmVtb3ZlZC4KKwlTZWUgYWxzbyAnYmFja3VwJyBhbmQgJ3dyaXRlYmFja3VwJyBvcHRpb25zLgorCUlmIHlvdSB3YW50IHRvIGhpZGUgeW91ciBiYWNrdXAgZmlsZXMgb24gVW5peCwgY29uc2lkZXIgdGhpcyB2YWx1ZTogPgorCQk6c2V0IGJhY2t1cGRpcj0uLy5iYWNrdXAsfi8uYmFja3VwLC4sL3RtcAorPAlZb3UgbXVzdCBjcmVhdGUgYSAiLmJhY2t1cCIgZGlyZWN0b3J5IGluIGVhY2ggZGlyZWN0b3J5IGFuZCBpbiB5b3VyCisJaG9tZSBkaXJlY3RvcnkgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS4KKwlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlkaXJlY3RvcmllcyBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ2JhY2t1cGV4dCcqIConYmV4JyogKkU1ODkqCisnYmFja3VwZXh0JyAnYmV4JwlzdHJpbmcJKGRlZmF1bHQgIn4iLCBmb3IgVk1TOiAiXyIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJU3RyaW5nIHdoaWNoIGlzIGFwcGVuZGVkIHRvIGEgZmlsZSBuYW1lIHRvIG1ha2UgdGhlIG5hbWUgb2YgdGhlCisJYmFja3VwIGZpbGUuICBUaGUgZGVmYXVsdCBpcyBxdWl0ZSB1bnVzdWFsLCBiZWNhdXNlIHRoaXMgYXZvaWRzCisJYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGV4aXN0aW5nIGZpbGVzIHdpdGggYSBiYWNrdXAgZmlsZS4gIFlvdSBtaWdodAorCXByZWZlciB1c2luZyAiLmJhayIsIGJ1dCBtYWtlIHN1cmUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBmaWxlcyB3aXRoCisJIi5iYWsiIHRoYXQgeW91IHdhbnQgdG8ga2VlcC4KKworCQkJCQkJKidiYWNrdXBza2lwJyogKidic2snKgorJ2JhY2t1cHNraXAnICdic2snCXN0cmluZwkoZGVmYXVsdDogIi90bXAvKiwkVE1QRElSLyosJFRNUC8qLCRURU1QLyoiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3dpbGRpZ25vcmV8CisJCQlmZWF0dXJlfQorCUEgbGlzdCBvZiBmaWxlIHBhdHRlcm5zLiAgV2hlbiBvbmUgb2YgdGhlIHBhdHRlcm5zIG1hdGNoZXMgd2l0aCB0aGUKKwluYW1lIG9mIHRoZSBmaWxlIHdoaWNoIGlzIHdyaXR0ZW4sIG5vIGJhY2t1cCBmaWxlIGlzIGNyZWF0ZWQuICBCb3RoCisJdGhlIHNwZWNpZmllZCBmaWxlIG5hbWUgYW5kIHRoZSBmdWxsIHBhdGggbmFtZSBvZiB0aGUgZmlsZSBhcmUgdXNlZC4KKwlUaGUgcGF0dGVybiBpcyB1c2VkIGxpa2Ugd2l0aCB8OmF1dG9jbWR8LCBzZWUgfGF1dG9jbWQtcGF0dGVybnN8LgorCVdhdGNoIG91dCBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzLCBzZWUgfG9wdGlvbi1iYWNrc2xhc2h8LgorCVdoZW4gJFRNUERJUiwgJFRNUCBvciAkVEVNUCBpcyBub3QgZGVmaW5lZCwgaXQgaXMgbm90IHVzZWQgZm9yIHRoZQorCWRlZmF1bHQgdmFsdWUuICIvdG1wLyoiIGlzIG9ubHkgdXNlZCBmb3IgVW5peC4KKworCQkJCQkJKidiYWxsb29uZGVsYXknKiAqJ2JkbGF5JyoKKydiYWxsb29uZGVsYXknICdiZGxheScJbnVtYmVyCShkZWZhdWx0OiA2MDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K2JhbGxvb25fZXZhbHwKKwkJCWZlYXR1cmV9CisJRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSBhIGJhbGxvb24gbWF5IHBvcCB1cC4gIFNlZSB8YmFsbG9vbi1ldmFsfC4KKworCQkgICAgICAgKidiYWxsb29uZXZhbCcqIConYmV2YWwnKiAqJ25vYmFsbG9vbmV2YWwnKiAqJ25vYmV2YWwnKgorJ2JhbGxvb25ldmFsJyAnYmV2YWwnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtiYWxsb29uX2V2YWx8CisJCQlhbmQgfCtzdW5fd29ya3Nob3B8IG9yIHwrbmV0YmVhbnNfaW50Z3wgZmVhdHVyZXN9CisJU3dpdGNoIG9uIHRoZSB8YmFsbG9vbi1ldmFsfCBmdW5jdGlvbmFsaXR5LgorCisJCQkJICAgICAqJ2JpbmFyeScqIConYmluJyogKidub2JpbmFyeScqIConbm9iaW4nKgorJ2JpbmFyeScgJ2JpbicJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIHNob3VsZCBiZSBzZXQgYmVmb3JlIGVkaXRpbmcgYSBiaW5hcnkgZmlsZS4gIFlvdSBjYW4gYWxzbworCXVzZSB0aGUgfC1ifCBWaW0gYXJndW1lbnQuICBXaGVuIHRoaXMgb3B0aW9uIGlzIHN3aXRjaGVkIG9uIGEgZmV3CisJb3B0aW9ucyB3aWxsIGJlIGNoYW5nZWQgKGFsc28gd2hlbiBpdCBhbHJlYWR5IHdhcyBvbik6CisJCSd0ZXh0d2lkdGgnICB3aWxsIGJlIHNldCB0byAwCisJCSd3cmFwbWFyZ2luJyB3aWxsIGJlIHNldCB0byAwCisJCSdtb2RlbGluZScgICB3aWxsIGJlIG9mZgorCQknZXhwYW5kdGFiJyAgd2lsbCBiZSBvZmYKKwlBbHNvLCAnZmlsZWZvcm1hdCcgYW5kICdmaWxlZm9ybWF0cycgb3B0aW9ucyB3aWxsIG5vdCBiZSB1c2VkLCB0aGUKKwlmaWxlIGlzIHJlYWQgYW5kIHdyaXR0ZW4gbGlrZSAnZmlsZWZvcm1hdCcgd2FzICJ1bml4IiAoYSBzaW5nbGUgPE5MPgorCXNlcGFyYXRlcyBsaW5lcykuCisJVGhlICdmaWxlZW5jb2RpbmcnIGFuZCAnZmlsZWVuY29kaW5ncycgb3B0aW9ucyB3aWxsIG5vdCBiZSB1c2VkLCB0aGUKKwlmaWxlIGlzIHJlYWQgd2l0aG91dCBjb252ZXJzaW9uLgorCU5PVEU6IFdoZW4geW91IHN0YXJ0IGVkaXRpbmcgYShub3RoZXIpIGZpbGUgd2hpbGUgdGhlICdiaW4nIG9wdGlvbiBpcworCW9uLCBzZXR0aW5ncyBmcm9tIGF1dG9jb21tYW5kcyBtYXkgY2hhbmdlIHRoZSBzZXR0aW5ncyBhZ2FpbiAoZS5nLiwKKwkndGV4dHdpZHRoJyksIGNhdXNpbmcgdHJvdWJsZSB3aGVuIGVkaXRpbmcuICBZb3UgbWlnaHQgd2FudCB0byBzZXQKKwknYmluJyBhZ2FpbiB3aGVuIHRoZSBmaWxlIGhhcyBiZWVuIGxvYWRlZC4KKwlUaGUgcHJldmlvdXMgdmFsdWVzIG9mIHRoZXNlIG9wdGlvbnMgYXJlIHJlbWVtYmVyZWQgYW5kIHJlc3RvcmVkIHdoZW4KKwknYmluJyBpcyBzd2l0Y2hlZCBmcm9tIG9uIHRvIG9mZi4gIEVhY2ggYnVmZmVyIGhhcyBpdHMgb3duIHNldCBvZgorCXNhdmVkIG9wdGlvbiB2YWx1ZXMuCisJVG8gZWRpdCBhIGZpbGUgd2l0aCAnYmluYXJ5JyBzZXQgeW91IGNhbiB1c2UgdGhlIHwrK2JpbnwgYXJndW1lbnQuCisJVGhpcyBhdm9pZHMgeW91IGhhdmUgdG8gZG8gIjpzZXQgYmluIiwgd2hpY2ggd291bGQgaGF2ZSBlZmZlY3QgZm9yIGFsbAorCWZpbGVzIHlvdSBlZGl0LgorCVdoZW4gd3JpdGluZyBhIGZpbGUgdGhlIDxFT0w+IGZvciB0aGUgbGFzdCBsaW5lIGlzIG9ubHkgd3JpdHRlbiBpZgorCXRoZXJlIHdhcyBvbmUgaW4gdGhlIG9yaWdpbmFsIGZpbGUgKG5vcm1hbGx5IFZpbSBhcHBlbmRzIGFuIDxFT0w+IHRvCisJdGhlIGxhc3QgbGluZSBpZiB0aGVyZSBpcyBub25lOyB0aGlzIHdvdWxkIG1ha2UgdGhlIGZpbGUgbG9uZ2VyKS4gIFNlZQorCXRoZSAnZW5kb2ZsaW5lJyBvcHRpb24uCisKKwkJCSonYmlvc2tleScqIConYmlvc2snKiAqJ25vYmlvc2tleScqIConbm9iaW9zaycqCisnYmlvc2tleScgJ2Jpb3NrJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfSAge29ubHkgZm9yIE1TLURPU30KKwlXaGVuIG9uIHRoZSBiaW9zIGlzIGNhbGxlZCB0byBvYnRhaW4gYSBrZXlib2FyZCBjaGFyYWN0ZXIuICBUaGlzIHdvcmtzCisJYmV0dGVyIHRvIGRldGVjdCBDVFJMLUMsIGJ1dCBvbmx5IHdvcmtzIGZvciB0aGUgY29uc29sZS4gIFdoZW4gdXNpbmcgYQorCXRlcm1pbmFsIG92ZXIgYSBzZXJpYWwgcG9ydCByZXNldCB0aGlzIG9wdGlvbi4KKwlBbHNvIHNlZSB8J2NvbnNrZXknfC4KKworCQkJCQkJCSonYm9tYicqIConbm9ib21iJyoKKydib21iJwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZX0KKwlXaGVuIHdyaXRpbmcgYSBmaWxlIGFuZCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldCwgYSBCT00gKEJ5dGUKKwlPcmRlciBNYXJrKSBpcyBwcmVwZW5kZWQgdG8gdGhlIGZpbGU6CisJLSB0aGlzIG9wdGlvbiBpcyBvbgorCS0gdGhlICdiaW5hcnknIG9wdGlvbiBpcyBvZmYKKwktICdmaWxlZW5jb2RpbmcnIGlzICJ1dGYtOCIsICJ1Y3MtMiIsICJ1Y3MtNCIgb3Igb25lIG9mIHRoZSBsaXR0bGUvYmlnCisJICBlbmRpYW4gdmFyaWFudHMuCisJU29tZSBhcHBsaWNhdGlvbnMgdXNlIHRoZSBCT00gdG8gcmVjb2duaXplIHRoZSBlbmNvZGluZyBvZiB0aGUgZmlsZS4KKwlPZnRlbiB1c2VkIGZvciBVQ1MtMiBmaWxlcyBvbiBNUy1XaW5kb3dzLiAgRm9yIG90aGVyIGFwcGxpY2F0aW9ucyBpdAorCWNhdXNlcyB0cm91YmxlLCBmb3IgZXhhbXBsZTogImNhdCBmaWxlMSBmaWxlMiIgbWFrZXMgdGhlIEJPTSBvZiBmaWxlMgorCWFwcGVhciBoYWxmd2F5IHRoZSByZXN1bHRpbmcgZmlsZS4KKwlXaGVuIFZpbSByZWFkcyBhIGZpbGUgYW5kICdmaWxlZW5jb2RpbmdzJyBzdGFydHMgd2l0aCAidWNzLWJvbSIsIGEKKwljaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBCT00gaXMgZG9uZSBhbmQgJ2JvbWInIHNldCBhY2NvcmRpbmdseS4KKwlVbmxlc3MgJ2JpbmFyeScgaXMgc2V0LCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIGZpcnN0IGxpbmUsIHNvIHRoYXQgeW91CisJZG9uJ3Qgc2VlIGl0IHdoZW4gZWRpdGluZy4gIFdoZW4geW91IGRvbid0IGNoYW5nZSB0aGUgb3B0aW9ucywgdGhlIEJPTQorCXdpbGwgYmUgcmVzdG9yZWQgd2hlbiB3cml0aW5nIHRoZSBmaWxlLgorCisJCQkJCQkqJ2JyZWFrYXQnKiAqJ2JyaycqCisnYnJlYWthdCcgJ2JyaycJCXN0cmluZwkoZGVmYXVsdCAiIF5JIUAqLSs7OiwuLz8iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSAgfCtsaW5lYnJlYWt8CisJCQlmZWF0dXJlfQorCVRoaXMgb3B0aW9uIGxldHMgeW91IGNob29zZSB3aGljaCBjaGFyYWN0ZXJzIG1pZ2h0IGNhdXNlIGEgbGluZQorCWJyZWFrIGlmICdsaW5lYnJlYWsnIGlzIG9uLgorCisJCQkJCQkqJ2Jyb3dzZWRpcicqIConYnNkaXInKgorJ2Jyb3dzZWRpcicgJ2JzZGlyJwlzdHJpbmcJKGRlZmF1bHQgZm9yICJsYXN0IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0ge29ubHkgZm9yIE1vdGlmIGFuZCBXaW4zMiBHVUl9CisJV2hpY2ggZGlyZWN0b3J5IHRvIHVzZSBmb3IgdGhlIGZpbGUgYnJvd3NlcjoKKwkgICBsYXN0CQlVc2Ugc2FtZSBkaXJlY3RvcnkgYXMgd2l0aCBsYXN0IGZpbGUgYnJvd3Nlci4KKwkgICBidWZmZXIJVXNlIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHJlbGF0ZWQgYnVmZmVyLgorCSAgIGN1cnJlbnQJVXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwkgICB7cGF0aH0JVXNlIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CisKKwkJCQkJCSonYnVmaGlkZGVuJyogKidiaCcqCisnYnVmaGlkZGVuJyAnYmgnCXN0cmluZyAoZGVmYXVsdDogIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrcXVpY2tmaXh8CisJCQlmZWF0dXJlfQorCVRoaXMgb3B0aW9uIHNwZWNpZmllcyB3aGF0IGhhcHBlbnMgd2hlbiBhIGJ1ZmZlciBpcyBubyBsb25nZXIKKwlkaXNwbGF5ZWQgaW4gYSB3aW5kb3c6CisJICA8ZW1wdHk+CWZvbGxvdyB0aGUgZ2xvYmFsICdoaWRkZW4nIG9wdGlvbgorCSAgaGlkZQkJaGlkZSB0aGUgYnVmZmVyIChkb24ndCB1bmxvYWQgaXQpLCBhbHNvIHdoZW4gJ2hpZGRlbicKKwkJCWlzIG5vdCBzZXQKKwkgIHVubG9hZAl1bmxvYWQgdGhlIGJ1ZmZlciwgYWxzbyB3aGVuICdoaWRkZW4nIGlzIHNldCBvciB1c2luZworCQkJfDpoaWRlfAorCSAgZGVsZXRlCWRlbGV0ZSB0aGUgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBsaXN0LCBhbHNvIHdoZW4KKwkJCSdoaWRkZW4nIGlzIHNldCBvciB1c2luZyB8OmhpZGV8LCBsaWtlIHVzaW5nCisJCQl8OmJkZWxldGV8CisJICB3aXBlCQl3aXBlIG91dCB0aGUgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBsaXN0LCBhbHNvIHdoZW4KKwkJCSdoaWRkZW4nIGlzIHNldCBvciB1c2luZyB8OmhpZGV8LCBsaWtlIHVzaW5nCisJCQl8OmJ3aXBlb3V0fAorCisJVGhpcyBvcHRpb24gaXMgdXNlZCB0b2dldGhlciB3aXRoICdidWZ0eXBlJyBhbmQgJ3N3YXBmaWxlJyB0byBzcGVjaWZ5CisJc3BlY2lhbCBraW5kcyBvZiBidWZmZXJzLiAgIFNlZSB8c3BlY2lhbC1idWZmZXJzfC4KKworCQkJKididWZsaXN0ZWQnKiAqJ2JsJyogKidub2J1Zmxpc3RlZCcqIConbm9ibCcqICpFODUqCisnYnVmbGlzdGVkJyAnYmwnCWJvb2xlYW4gKGRlZmF1bHQ6IG9uKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgYnVmZmVyIHNob3dzIHVwIGluIHRoZSBidWZmZXIgbGlzdC4gIElmCisJaXQgaXMgcmVzZXQgaXQgaXMgbm90IHVzZWQgZm9yICI6Ym5leHQiLCAibHMiLCB0aGUgQnVmZmVycyBtZW51LCBldGMuCisJVGhpcyBvcHRpb24gaXMgcmVzZXQgYnkgVmltIGZvciBidWZmZXJzIHRoYXQgYXJlIG9ubHkgdXNlZCB0byByZW1lbWJlcgorCWEgZmlsZSBuYW1lIG9yIG1hcmtzLiAgVmltIHNldHMgaXQgd2hlbiBzdGFydGluZyB0byBlZGl0IGEgYnVmZmVyLgorCUJ1dCBub3Qgd2hlbiBtb3ZpbmcgdG8gYSBidWZmZXIgd2l0aCAiOmJ1ZmZlciIuCisKKwkJCQkJCSonYnVmdHlwZScqIConYnQnKiAqRTM4MioKKydidWZ0eXBlJyAnYnQnCQlzdHJpbmcgKGRlZmF1bHQ6ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fAorCQkJZmVhdHVyZX0KKwlUaGUgdmFsdWUgb2YgdGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGEgYnVmZmVyOgorCSAgPGVtcHR5Pglub3JtYWwgYnVmZmVyCisJICBub2ZpbGUJYnVmZmVyIHdoaWNoIGlzIG5vdCByZWxhdGVkIHRvIGEgZmlsZSBhbmQgd2lsbCBub3QgYmUKKwkJCXdyaXR0ZW4KKwkgIG5vd3JpdGUJYnVmZmVyIHdoaWNoIHdpbGwgbm90IGJlIHdyaXR0ZW4KKwkgIHF1aWNrZml4CXF1aWNrZml4IGJ1ZmZlciwgY29udGFpbnMgbGlzdCBvZiBlcnJvcnMgfDpjd2luZG93fAorCSAgaGVscAkJaGVscCBidWZmZXIgKHlvdSBhcmUgbm90IHN1cHBvc2VkIHRvIHNldCB0aGlzCisJCQltYW51YWxseSkKKworCVRoaXMgb3B0aW9uIGlzIHVzZWQgdG9nZXRoZXIgd2l0aCAnYnVmaGlkZGVuJyBhbmQgJ3N3YXBmaWxlJyB0bworCXNwZWNpZnkgc3BlY2lhbCBraW5kcyBvZiBidWZmZXJzLiAgIFNlZSB8c3BlY2lhbC1idWZmZXJzfC4KKworCUJlIGNhcmVmdWwgd2l0aCBjaGFuZ2luZyB0aGlzIG9wdGlvbiwgaXQgY2FuIGhhdmUgbWFueSBzaWRlIGVmZmVjdHMhCisKKwlBICJxdWlja2ZpeCIgYnVmZmVyIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGVycm9yIGxpc3QuICBUaGlzIHZhbHVlIGlzCisJc2V0IGJ5IHRoZSB8OmN3aW5kb3d8IGNvbW1hbmQgYW5kIHlvdSBhcmUgbm90IHN1cHBvc2VkIHRvIGNoYW5nZSBpdC4KKworCSJub2ZpbGUiIGFuZCAibm93cml0ZSIgYnVmZmVycyBhcmUgc2ltaWxhcjoKKwlib3RoOgkJVGhlIGJ1ZmZlciBpcyBub3QgdG8gYmUgd3JpdHRlbiB0byBkaXNrLCAiOnciIGRvZXNuJ3QKKwkJCXdvcmsgKCI6dyBmaWxlbmFtZSIgZG9lcyB3b3JrIHRob3VnaCkuCisJYm90aDoJCVRoZSBidWZmZXIgaXMgbmV2ZXIgY29uc2lkZXJlZCB0byBiZSB8J21vZGlmaWVkJ3wuCisJCQlUaGVyZSBpcyBubyB3YXJuaW5nIHdoZW4gdGhlIGNoYW5nZXMgd2lsbCBiZSBsb3N0LCBmb3IKKwkJCWV4YW1wbGUgd2hlbiB5b3UgcXVpdCBWaW0uCisJYm90aDoJCUEgc3dhcCBmaWxlIGlzIG9ubHkgY3JlYXRlZCB3aGVuIHVzaW5nIHRvbyBtdWNoIG1lbW9yeQorCQkJKHdoZW4gJ3N3YXBmaWxlJyBoYXMgYmVlbiByZXNldCB0aGVyZSBpcyBuZXZlciBhIHN3YXAKKwkJCWZpbGUpLgorCW5vZmlsZSBvbmx5OglUaGUgYnVmZmVyIG5hbWUgaXMgZml4ZWQsIGl0IGlzIG5vdCBoYW5kbGVkIGxpa2UgYQorCQkJZmlsZSBuYW1lLiAgSXQgaXMgbm90IG1vZGlmaWVkIGluIHJlc3BvbnNlIHRvIGEgfDpjZHwKKwkJCWNvbW1hbmQuCisKKwkJCQkJCSonY2FzZW1hcCcqIConY21wJyoKKydjYXNlbWFwJyAnY21wJwkJc3RyaW5nCShkZWZhdWx0OiAiaW50ZXJuYWwsa2VlcGFzY2lpIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlTcGVjaWZpZXMgZGV0YWlscyBhYm91dCBjaGFuZ2luZyB0aGUgY2FzZSBvZiBsZXR0ZXJzLiAgSXQgbWF5IGNvbnRhaW4KKwl0aGVzZSB3b3Jkcywgc2VwYXJhdGVkIGJ5IGEgY29tbWE6CisJaW50ZXJuYWwJVXNlIGludGVybmFsIGNhc2UgbWFwcGluZyBmdW5jdGlvbnMsIHRoZSBjdXJyZW50CisJCQlsb2NhbGUgZG9lcyBub3QgY2hhbmdlIHRoZSBjYXNlIG1hcHBpbmcuICBUaGlzIG9ubHkKKwkJCW1hdHRlcnMgd2hlbiAnZW5jb2RpbmcnIGlzIGEgVW5pY29kZSBlbmNvZGluZy4JV2hlbgorCQkJImludGVybmFsIiBpcyBvbWl0dGVkLCB0aGUgdG93dXBwZXIoKSBhbmQgdG93bG93ZXIoKQorCQkJc3lzdGVtIGxpYnJhcnkgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gYXZhaWxhYmxlLgorCWtlZXBhc2NpaQlGb3IgdGhlIEFTQ0lJIGNoYXJhY3RlcnMgKDB4MDAgdG8gMHg3ZikgdXNlIHRoZSBVUworCQkJY2FzZSBtYXBwaW5nLCB0aGUgY3VycmVudCBsb2NhbGUgaXMgbm90IGVmZmVjdGl2ZS4KKwkJCVRoaXMgcHJvYmFibHkgb25seSBtYXR0ZXJzIGZvciBUdXJraXNoLgorCisJCQkJCQkqJ2NkcGF0aCcqIConY2QnKiAqRTM0NCogKkUzNDYqCisnY2RwYXRoJyAnY2QnCQlzdHJpbmcJKGRlZmF1bHQ6IGVxdWl2YWxlbnQgdG8gJENEUEFUSCBvciAiLCwiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtmaWxlX2luX3BhdGh8IGZlYXR1cmV9CisJVGhpcyBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2hpY2ggd2lsbCBiZSBzZWFyY2hlZCB3aGVuIHVzaW5nIHRoZQorCXw6Y2R8IGFuZCB8OmxjZHwgY29tbWFuZHMsIHByb3ZpZGVkIHRoYXQgdGhlIGRpcmVjdG9yeSBiZWluZyBzZWFyY2hlZAorCWZvciBoYXMgYSByZWxhdGl2ZSBwYXRoIChub3Qgc3RhcnRpbmcgd2l0aCAiLyIsICIuLyIgb3IgIi4uLyIpLgorCVRoZSAnY2RwYXRoJyBvcHRpb24ncyB2YWx1ZSBoYXMgdGhlIHNhbWUgZm9ybSBhbmQgc2VtYW50aWNzIGFzCisJfCdwYXRoJ3wuICBBbHNvIHNlZSB8ZmlsZS1zZWFyY2hpbmd8LgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzIHRha2VuIGZyb20gJENEUEFUSCwgd2l0aCBhICIsIiBwcmVwZW5kZWQgdG8gbG9vaworCWluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmaXJzdC4KKwlJZiB0aGUgZGVmYXVsdCB2YWx1ZSB0YWtlbiBmcm9tICRDRFBBVEggaXMgbm90IHdoYXQgeW91IHdhbnQsIGluY2x1ZGUKKwlhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHlvdXIgdmltcmMgZmlsZSB0bworCW92ZXJyaWRlIGl0OiA+CisJICA6bGV0ICZjZHBhdGggPSAnLCcgLiBzdWJzdGl0dXRlKHN1YnN0aXR1dGUoJENEUEFUSCwgJ1ssIF0nLCAnXFxcMCcsICdnJyksICc6JywgJywnLCAnZycpCis8CVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKwkocGFydHMgb2YgJ2NkcGF0aCcgY2FuIGJlIHBhc3NlZCB0byB0aGUgc2hlbGwgdG8gZXhwYW5kIGZpbGUgbmFtZXMpLgorCisJCQkJCQkqJ2NlZGl0JyoKKydjZWRpdCcJCQlzdHJpbmcJKFZpIGRlZmF1bHQ6ICIiLCBWaW0gZGVmYXVsdDogQ1RSTC1GKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3ZlcnRzcGxpdHwKKwkJCWZlYXR1cmV9CisJVGhlIGtleSB1c2VkIGluIENvbW1hbmQtbGluZSBNb2RlIHRvIG9wZW4gdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cuCisJVGhlIGRlZmF1bHQgaXMgQ1RSTC1GIHdoZW4gJ2NvbXBhdGlibGUnIGlzIG9mZi4KKwlPbmx5IG5vbi1wcmludGFibGUga2V5cyBhcmUgYWxsb3dlZC4KKwlUaGUga2V5IGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBidXQgaXQgaXMgZGlmZmljdWx0IHRvCisJdHlwZS4gIFRoZSBwcmVmZXJyZWQgd2F5IGlzIHRvIHVzZSB0aGUgPD4gbm90YXRpb24uICBFeGFtcGxlczogPgorCQk6c2V0IGNlZGl0PTxDLVk+CisJCTpzZXQgY2VkaXQ9PEVzYz4KKzwJfE52aXwgYWxzbyBoYXMgdGhpcyBvcHRpb24sIGJ1dCBpdCBvbmx5IHVzZXMgdGhlIGZpcnN0IGNoYXJhY3Rlci4KKwlTZWUgfGNtZHdpbnwuCisKKwkJCQkqJ2NoYXJjb252ZXJ0JyogKidjY3YnKiAqRTIwMiogKkUyMTQqICpFNTEzKgorJ2NoYXJjb252ZXJ0JyAnY2N2JwlzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmUgYW5kIHRoZSB8K2V2YWx8IGZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCUFuIGV4cHJlc3Npb24gdGhhdCBpcyB1c2VkIGZvciBjaGFyYWN0ZXIgZW5jb2RpbmcgY29udmVyc2lvbi4gIEl0IGlzCisJZXZhbHVhdGVkIHdoZW4gYSBmaWxlIHRoYXQgaXMgdG8gYmUgcmVhZCBvciBoYXMgYmVlbiB3cml0dGVuIGhhcyBhCisJZGlmZmVyZW50IGVuY29kaW5nIGZyb20gd2hhdCBpcyBkZXNpcmVkLgorCSdjaGFyY29udmVydCcgaXMgbm90IHVzZWQgd2hlbiB0aGUgaW50ZXJuYWwgaWNvbnYoKSBmdW5jdGlvbiBpcworCXN1cHBvcnRlZCBhbmQgaXMgYWJsZSB0byBkbyB0aGUgY29udmVyc2lvbi4gIFVzaW5nIGljb252KCkgaXMKKwlwcmVmZXJyZWQsIGJlY2F1c2UgaXQgaXMgbXVjaCBmYXN0ZXIuCisJJ2NoYXJjb252ZXJ0JyBpcyBub3QgdXNlZCB3aGVuIHJlYWRpbmcgc3RkaW4gfC0tfCwgYmVjYXVzZSB0aGVyZSBpcyBubworCWZpbGUgdG8gY29udmVydCBmcm9tLiAgWW91IHdpbGwgaGF2ZSB0byBzYXZlIHRoZSB0ZXh0IGluIGEgZmlsZSBmaXJzdC4KKwlUaGUgZXhwcmVzc2lvbiBtdXN0IHJldHVybiB6ZXJvIG9yIGFuIGVtcHR5IHN0cmluZyBmb3Igc3VjY2VzcywKKwlub24temVybyBmb3IgZmFpbHVyZS4KKwlUaGUgcG9zc2libGUgZW5jb2RpbmcgbmFtZXMgZW5jb3VudGVyZWQgYXJlIGluICdlbmNvZGluZycuCisJQWRkaXRpb25hbGx5LCBuYW1lcyBnaXZlbiBpbiAnZmlsZWVuY29kaW5ncycgYW5kICdmaWxlZW5jb2RpbmcnIGFyZQorCXVzZWQuCisJQ29udmVyc2lvbiBiZXR3ZWVuICJsYXRpbjEiLCAidW5pY29kZSIsICJ1Y3MtMiIsICJ1Y3MtNCIgYW5kICJ1dGYtOCIKKwlpcyBkb25lIGludGVybmFsbHkgYnkgVmltLCAnY2hhcmNvbnZlcnQnIGlzIG5vdCB1c2VkIGZvciB0aGlzLgorCSdjaGFyY29udmVydCcgaXMgYWxzbyB1c2VkIHRvIGNvbnZlcnQgdGhlIHZpbWluZm8gZmlsZSwgaWYgdGhlICdjJworCWZsYWcgaXMgcHJlc2VudCBpbiAndmltaW5mbycuICBBbHNvIHVzZWQgZm9yIFVuaWNvZGUgY29udmVyc2lvbi4KKwlFeGFtcGxlOiA+CisJCXNldCBjaGFyY29udmVydD1DaGFyQ29udmVydCgpCisJCWZ1biBDaGFyQ29udmVydCgpCisJCSAgc3lzdGVtKCJyZWNvZGUgIgorCQkJXCAuIHY6Y2hhcmNvbnZlcnRfZnJvbSAuICIuLiIgLiB2OmNoYXJjb252ZXJ0X3RvCisJCQlcIC4gIiA8IiAuIHY6Zm5hbWVfaW4gLiAiID4iIHY6Zm5hbWVfb3V0KQorCQkgIHJldHVybiB2OnNoZWxsX2Vycm9yCisJCWVuZGZ1bgorPAlUaGUgcmVsYXRlZCBWaW0gdmFyaWFibGVzIGFyZToKKwkJdjpjaGFyY29udmVydF9mcm9tCW5hbWUgb2YgdGhlIGN1cnJlbnQgZW5jb2RpbmcKKwkJdjpjaGFyY29udmVydF90bwluYW1lIG9mIHRoZSBkZXNpcmVkIGVuY29kaW5nCisJCXY6Zm5hbWVfaW4JCW5hbWUgb2YgdGhlIGlucHV0IGZpbGUKKwkJdjpmbmFtZV9vdXQJCW5hbWUgb2YgdGhlIG91dHB1dCBmaWxlCisJTm90ZSB0aGF0IHY6Zm5hbWVfaW4gYW5kIHY6Zm5hbWVfb3V0IHdpbGwgbmV2ZXIgYmUgdGhlIHNhbWUuCisJTm90ZSB0aGF0IHY6Y2hhcmNvbnZlcnRfZnJvbSBhbmQgdjpjaGFyY29udmVydF90byBtYXkgYmUgZGlmZmVyZW50CisJZnJvbSAnZW5jb2RpbmcnLiAgVmltIGludGVybmFsbHkgdXNlcyBVVEYtOCBpbnN0ZWFkIG9mIFVDUy0yIG9yIFVDUy00LgorCUVuY3J5cHRpb24gaXMgbm90IGRvbmUgYnkgVmltIHdoZW4gdXNpbmcgJ2NoYXJjb252ZXJ0Jy4gIElmIHlvdSB3YW50CisJdG8gZW5jcnlwdCB0aGUgZmlsZSBhZnRlciBjb252ZXJzaW9uLCAnY2hhcmNvbnZlcnQnIHNob3VsZCB0YWtlIGNhcmUKKwlvZiB0aGlzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCSAgIConY2luZGVudCcqIConY2luJyogKidub2NpbmRlbnQnKiAqJ25vY2luJyoKKydjaW5kZW50JyAnY2luJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY2luZGVudHwKKwkJCWZlYXR1cmV9CisJRW5hYmxlcyBhdXRvbWF0aWMgQyBwcm9ncmFtIGluZGVudGluZyAgU2VlICdjaW5rZXlzJyB0byBzZXQgdGhlIGtleXMKKwl0aGF0IHRyaWdnZXIgcmVpbmRlbnRpbmcgaW4gaW5zZXJ0IG1vZGUgYW5kICdjaW5vcHRpb25zJyB0byBzZXQgeW91cgorCXByZWZlcnJlZCBpbmRlbnQgc3R5bGUuCisJSWYgJ2luZGVudGV4cHInIGlzIG5vdCBlbXB0eSwgaXQgb3ZlcnJ1bGVzICdjaW5kZW50Jy4KKwlJZiAnbGlzcCcgaXMgbm90IG9uIGFuZCBib3RoICdpbmRlbnRleHByJyBhbmQgJ2VxdWFscHJnJyBhcmUgZW1wdHksCisJdGhlICI9IiBvcGVyYXRvciBpbmRlbnRzIHVzaW5nIHRoaXMgYWxnb3JpdGhtIHJhdGhlciB0aGFuIGNhbGxpbmcgYW4KKwlleHRlcm5hbCBwcm9ncmFtLgorCVNlZSB8Qy1pbmRlbnRpbmd8LgorCVdoZW4geW91IGRvbid0IGxpa2UgdGhlIHdheSAnY2luZGVudCcgd29ya3MsIHRyeSB0aGUgJ3NtYXJ0aW5kZW50JworCW9wdGlvbiBvciAnaW5kZW50ZXhwcicuCisJVGhpcyBvcHRpb24gaXMgbm90IHVzZWQgd2hlbiAncGFzdGUnIGlzIHNldC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCQkqJ2NpbmtleXMnKiAqJ2NpbmsnKgorJ2NpbmtleXMnICdjaW5rJwlzdHJpbmcJKGRlZmF1bHQgIjB7LDB9LDApLDosMCMsIV5GLG8sTyxlIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjaW5kZW50fAorCQkJZmVhdHVyZX0KKwlBIGxpc3Qgb2Yga2V5cyB0aGF0LCB3aGVuIHR5cGVkIGluIEluc2VydCBtb2RlLCBjYXVzZSByZWluZGVudGluZyBvZgorCXRoZSBjdXJyZW50IGxpbmUuICBPbmx5IHVzZWQgaWYgJ2NpbmRlbnQnIGlzIG9uIGFuZCAnaW5kZW50ZXhwcicgaXMKKwllbXB0eS4KKwlGb3IgdGhlIGZvcm1hdCBvZiB0aGlzIG9wdGlvbiBzZWUgfGNpbmtleXMtZm9ybWF0fC4KKwlTZWUgfEMtaW5kZW50aW5nfC4KKworCQkJCQkJKidjaW5vcHRpb25zJyogKidjaW5vJyoKKydjaW5vcHRpb25zJyAnY2lubycJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2NpbmRlbnR8CisJCQlmZWF0dXJlfQorCVRoZSAnY2lub3B0aW9ucycgYWZmZWN0IHRoZSB3YXkgJ2NpbmRlbnQnIHJlaW5kZW50cyBsaW5lcyBpbiBhIEMKKwlwcm9ncmFtLiAgU2VlIHxjaW5vcHRpb25zLXZhbHVlc3wgZm9yIHRoZSB2YWx1ZXMgb2YgdGhpcyBvcHRpb24sIGFuZAorCXxDLWluZGVudGluZ3wgZm9yIGluZm8gb24gQyBpbmRlbnRpbmcgaW4gZ2VuZXJhbC4KKworCisJCQkJCQkqJ2NpbndvcmRzJyogKidjaW53JyoKKydjaW53b3JkcycgJ2NpbncnCXN0cmluZwkoZGVmYXVsdCAiaWYsZWxzZSx3aGlsZSxkbyxmb3Isc3dpdGNoIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCBib3RoIHRoZQorCQkJfCtjaW5kZW50fCBhbmQgdGhlIHwrc21hcnRpbmRlbnR8IGZlYXR1cmVzfQorCVRoZXNlIGtleXdvcmRzIHN0YXJ0IGFuIGV4dHJhIGluZGVudCBpbiB0aGUgbmV4dCBsaW5lIHdoZW4KKwknc21hcnRpbmRlbnQnIG9yICdjaW5kZW50JyBpcyBzZXQuICBGb3IgJ2NpbmRlbnQnIHRoaXMgaXMgb25seSBkb25lIGF0CisJYW4gYXBwcm9wcmlhdGUgcGxhY2UgKGluc2lkZSB7fSkuCisJTm90ZSB0aGF0ICdpZ25vcmVjYXNlJyBpc24ndCB1c2VkIGZvciAnY2lud29yZHMnLiAgSWYgY2FzZSBkb2Vzbid0CisJbWF0dGVyLCBpbmNsdWRlIHRoZSBrZXl3b3JkIGJvdGggdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlOgorCSJpZixJZixJRiIuCisKKwkJCQkJCSonY2xpcGJvYXJkJyogKidjYicqCisnY2xpcGJvYXJkJyAnY2InCXN0cmluZwkoZGVmYXVsdCAiYXV0b3NlbGVjdCxleGNsdWRlOmNvbnNcfGxpbnV4IgorCQkJCQkJICBmb3IgWC13aW5kb3dzLCAiIiBvdGhlcndpc2UpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBpbiBHVUkgdmVyc2lvbnMgb3Igd2hlbiB0aGUgfCt4dGVybV9jbGlwYm9hcmR8CisJCQlmZWF0dXJlIGlzIGluY2x1ZGVkfQorCVRoaXMgb3B0aW9uIGlzIGEgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgbmFtZXMuCisJVGhlc2UgbmFtZXMgYXJlIHJlY29nbml6ZWQ6CisKKwl1bm5hbWVkCQlXaGVuIGluY2x1ZGVkLCBWaW0gd2lsbCB1c2UgdGhlIGNsaXBib2FyZCByZWdpc3RlciAnKicKKwkJCWZvciBhbGwgeWFuaywgZGVsZXRlLCBjaGFuZ2UgYW5kIHB1dCBvcGVyYXRpb25zIHdoaWNoCisJCQl3b3VsZCBub3JtYWxseSBnbyB0byB0aGUgdW5uYW1lZCByZWdpc3Rlci4gIFdoZW4gYQorCQkJcmVnaXN0ZXIgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIGl0IHdpbGwgYWx3YXlzIGJlCisJCQl1c2VkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciAidW5uYW1lZCIgaXMgaW4gJ2NsaXBib2FyZCcKKwkJCW9yIG5vdC4gIFRoZSBjbGlwYm9hcmQgcmVnaXN0ZXIgY2FuIGFsd2F5cyBiZQorCQkJZXhwbGljaXRseSBhY2Nlc3NlZCB1c2luZyB0aGUgIiogbm90YXRpb24uICBBbHNvIHNlZQorCQkJfGd1aS1jbGlwYm9hcmR8LgorCisJYXV0b3NlbGVjdAlXb3JrcyBsaWtlIHRoZSAnYScgZmxhZyBpbiAnZ3Vpb3B0aW9ucyc6IElmIHByZXNlbnQsCisJCQl0aGVuIHdoZW5ldmVyIFZpc3VhbCBtb2RlIGlzIHN0YXJ0ZWQsIG9yIHRoZSBWaXN1YWwKKwkJCWFyZWEgZXh0ZW5kZWQsIFZpbSB0cmllcyB0byBiZWNvbWUgdGhlIG93bmVyIG9mIHRoZQorCQkJd2luZG93aW5nIHN5c3RlbSdzIGdsb2JhbCBzZWxlY3Rpb24gb3IgcHV0IHRoZQorCQkJc2VsZWN0ZWQgdGV4dCBvbiB0aGUgY2xpcGJvYXJkIHVzZWQgYnkgdGhlIHNlbGVjdGlvbgorCQkJcmVnaXN0ZXIgIiouICBTZWUgfGd1aW9wdGlvbnNfYXwgYW5kIHxxdW90ZXN0YXJ8IGZvcgorCQkJZGV0YWlscy4gIFdoZW4gdGhlIEdVSSBpcyBhY3RpdmUsIHRoZSAnYScgZmxhZyBpbgorCQkJJ2d1aW9wdGlvbnMnIGlzIHVzZWQsIHdoZW4gdGhlIEdVSSBpcyBub3QgYWN0aXZlLCB0aGlzCisJCQkiYXV0b3NlbGVjdCIgZmxhZyBpcyB1c2VkLgorCQkJQWxzbyBhcHBsaWVzIHRvIHRoZSBtb2RlbGVzcyBzZWxlY3Rpb24uCisKKwlhdXRvc2VsZWN0bWwJTGlrZSAiYXV0b3NlbGVjdCIsIGJ1dCBmb3IgdGhlIG1vZGVsZXNzIHNlbGVjdGlvbgorCQkJb25seS4gIENvbXBhcmUgdG8gdGhlICdBJyBmbGFnIGluICdndWlvcHRpb25zJy4KKworCWV4Y2x1ZGU6e3BhdHRlcm59CisJCQlEZWZpbmVzIGEgcGF0dGVybiB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgbmFtZSBvZgorCQkJdGhlIHRlcm1pbmFsICd0ZXJtJy4gIElmIHRoZXJlIGlzIGEgbWF0Y2gsIG5vCisJCQljb25uZWN0aW9uIHdpbGwgYmUgbWFkZSB0byB0aGUgWCBzZXJ2ZXIuICBUaGlzIGlzCisJCQl1c2VmdWwgaW4gdGhpcyBzaXR1YXRpb246CisJCQktIFJ1bm5pbmcgVmltIGluIGEgY29uc29sZS4KKwkJCS0gJERJU1BMQVkgaXMgc2V0IHRvIHN0YXJ0IGFwcGxpY2F0aW9ucyBvbiBhbm90aGVyCisJCQkgIGRpc3BsYXkuCisJCQktIFlvdSBkbyBub3Qgd2FudCB0byBjb25uZWN0IHRvIHRoZSBYIHNlcnZlciBpbiB0aGUKKwkJCSAgY29uc29sZSwgYnV0IGRvIHdhbnQgdGhpcyBpbiBhIHRlcm1pbmFsIGVtdWxhdG9yLgorCQkJVG8gbmV2ZXIgY29ubmVjdCB0byB0aGUgWCBzZXJ2ZXIgdXNlOiA+CisJCQkJZXhjbHVkZTouKgorPAkJCVRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB1c2luZyB0aGUgfC1YfCBhcmd1bWVudC4KKwkJCU5vdGUgdGhhdCB3aGVuIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24gdG8gdGhlIFggc2VydmVyCisJCQl0aGUgd2luZG93IHRpdGxlIHdvbid0IGJlIHJlc3RvcmVkIGFuZCB0aGUgY2xpcGJvYXJkCisJCQljYW5ub3QgYmUgYWNjZXNzZWQuCisJCQlUaGUgdmFsdWUgb2YgJ21hZ2ljJyBpcyBpZ25vcmVkLCB7cGF0dGVybn0gaXMKKwkJCWludGVycHJldGVkIGFzIGlmICdtYWdpYycgd2FzIG9uLgorCQkJVGhlIHJlc3Qgb2YgdGhlIG9wdGlvbiB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yCisJCQl7cGF0dGVybn0sIHRoaXMgbXVzdCBiZSB0aGUgbGFzdCBlbnRyeS4KKworCQkJCQkJKidjbWRoZWlnaHQnKiAqJ2NoJyoKKydjbWRoZWlnaHQnICdjaCcJbnVtYmVyCShkZWZhdWx0IDEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTnVtYmVyIG9mIHNjcmVlbiBsaW5lcyB0byB1c2UgZm9yIHRoZSBjb21tYW5kLWxpbmUuICBIZWxwcyBhdm9pZGluZworCXxoaXQtZW50ZXJ8IHByb21wdHMuCisKKwkJCQkJCSonY21kd2luaGVpZ2h0JyogKidjd2gnKgorJ2NtZHdpbmhlaWdodCcgJ2N3aCcJbnVtYmVyCShkZWZhdWx0IDcpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdmVydHNwbGl0fAorCQkJZmVhdHVyZX0KKwlOdW1iZXIgb2Ygc2NyZWVuIGxpbmVzIHRvIHVzZSBmb3IgdGhlIGNvbW1hbmQtbGluZSB3aW5kb3cuIHxjbWR3aW58CisKKwkJCQkJCSonY29sdW1ucycqIConY28nKiAqRTU5NCoKKydjb2x1bW5zJyAnY28nCQludW1iZXIJKGRlZmF1bHQgODAgb3IgdGVybWluYWwgd2lkdGgpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIHNjcmVlbi4gIE5vcm1hbGx5IHRoaXMgaXMgc2V0IGJ5IHRoZSB0ZXJtaW5hbAorCWluaXRpYWxpemF0aW9uIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGJlIHNldCBieSBoYW5kLgorCVdoZW4gVmltIGlzIHJ1bm5pbmcgaW4gdGhlIEdVSSBvciBpbiBhIHJlc2l6YWJsZSB3aW5kb3csIHNldHRpbmcgdGhpcworCW9wdGlvbiB3aWxsIGNhdXNlIHRoZSB3aW5kb3cgc2l6ZSB0byBiZSBjaGFuZ2VkLiAgV2hlbiB5b3Ugb25seSB3YW50CisJdG8gdXNlIHRoZSBzaXplIGZvciB0aGUgR1VJLCBwdXQgdGhlIGNvbW1hbmQgaW4geW91ciB8Z3ZpbXJjfCBmaWxlLgorCVdoZW4geW91IHNldCB0aGlzIG9wdGlvbiBhbmQgVmltIGlzIHVuYWJsZSB0byBjaGFuZ2UgdGhlIHBoeXNpY2FsCisJbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIGRpc3BsYXksIHRoZSBkaXNwbGF5IG1heSBiZSBtZXNzZWQgdXAuCisKKwkJCQkJKidjb21tZW50cycqIConY29tJyogKkU1MjQqICpFNTI1KgorJ2NvbW1lbnRzJyAnY29tJwlzdHJpbmcJKGRlZmF1bHQKKwkJCQkiczE6LyosbWI6KixleDoqLyw6Ly8sYjojLDolLDpYQ09NTSxuOj4sZmI6LSIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY29tbWVudHN8CisJCQlmZWF0dXJlfQorCUEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGNhbiBzdGFydCBhIGNvbW1lbnQgbGluZS4gIFNlZQorCXxmb3JtYXQtY29tbWVudHN8LiAgU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCB1c2luZyBiYWNrc2xhc2hlcyB0bworCWluc2VydCBhIHNwYWNlLgorCisJCQkJCSonY29tbWVudHN0cmluZycqIConY21zJyogKkU1MzcqCisnY29tbWVudHN0cmluZycgJ2NtcycJc3RyaW5nCShkZWZhdWx0ICIvKiVzKi8iKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCUEgdGVtcGxhdGUgZm9yIGEgY29tbWVudC4gIFRoZSAiJXMiIGluIHRoZSB2YWx1ZSBpcyByZXBsYWNlZCB3aXRoIHRoZQorCWNvbW1lbnQgdGV4dC4gIEN1cnJlbnRseSBvbmx5IHVzZWQgdG8gYWRkIG1hcmtlcnMgZm9yIGZvbGRpbmcsIHNlZQorCXxmb2xkLW1hcmtlcnwuCisKKwkJCSonY29tcGF0aWJsZScqIConY3AnKiAqJ25vY29tcGF0aWJsZScqIConbm9jcCcqCisnY29tcGF0aWJsZScgJ2NwJwlib29sZWFuCShkZWZhdWx0IG9uLCBvZmYgd2hlbiBhIC52aW1yYyBmaWxlIGlzIGZvdW5kKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGhhcyB0aGUgZWZmZWN0IG9mIG1ha2luZyBWaW0gZWl0aGVyIG1vcmUgVmktY29tcGF0aWJsZSwgb3IKKwltYWtlIFZpbSBiZWhhdmUgaW4gYSBtb3JlIHVzZWZ1bCB3YXkuCisJVGhpcyBpcyBhIHNwZWNpYWwga2luZCBvZiBvcHRpb24sIGJlY2F1c2Ugd2hlbiBpdCdzIHNldCBvciByZXNldCwKKwlvdGhlciBvcHRpb25zIGFyZSBhbHNvIGNoYW5nZWQgYXMgYSBzaWRlIGVmZmVjdC4gIENBUkVGVUw6IFNldHRpbmcgb3IKKwlyZXNldHRpbmcgdGhpcyBvcHRpb24gY2FuIGhhdmUgYSBsb3Qgb2YgdW5leHBlY3RlZCBlZmZlY3RzOiBNYXBwaW5ncworCWFyZSBpbnRlcnByZXRlZCBpbiBhbm90aGVyIHdheSwgdW5kbyBiZWhhdmVzIGRpZmZlcmVudGx5LCBldGMuCUlmIHlvdQorCXNldCB0aGlzIG9wdGlvbiBpbiB5b3VyIHZpbXJjIGZpbGUsIHlvdSBzaG91bGQgcHJvYmFibHkgcHV0IGl0IGF0IHRoZQorCXZlcnkgc3RhcnQuCisJQnkgZGVmYXVsdCB0aGlzIG9wdGlvbiBpcyBvbiBhbmQgdGhlIFZpIGRlZmF1bHRzIGFyZSB1c2VkIGZvciB0aGUKKwlvcHRpb25zLiAgVGhpcyBkZWZhdWx0IHdhcyBjaG9zZW4gZm9yIHRob3NlIHBlb3BsZSB3aG8gd2FudCB0byB1c2UgVmltCisJanVzdCBsaWtlIFZpLCBhbmQgZG9uJ3QgZXZlbiAod2FudCB0bykga25vdyBhYm91dCB0aGUgJ2NvbXBhdGlibGUnCisJb3B0aW9uLgorCVdoZW4gYSAiLnZpbXJjIiBmaWxlIGlzIGZvdW5kIHdoaWxlIFZpbSBpcyBzdGFydGluZyB1cCwgdGhpcyBvcHRpb24gaXMKKwlzd2l0Y2hlZCBvZmYsIGFuZCBhbGwgb3B0aW9ucyB0aGF0IGhhdmUgbm90IGJlZW4gbW9kaWZpZWQgd2lsbCBiZSBzZXQKKwl0byB0aGUgVmltIGRlZmF1bHRzLiAgRWZmZWN0aXZlbHksIHRoaXMgbWVhbnMgdGhhdCB3aGVuIGEgIi52aW1yYyIKKwlmaWxlIGV4aXN0cywgVmltIHdpbGwgdXNlIHRoZSBWaW0gZGVmYXVsdHMsIG90aGVyd2lzZSBpdCB3aWxsIHVzZSB0aGUKKwlWaSBkZWZhdWx0cy4gIChOb3RlOiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGZvciB0aGUgc3lzdGVtLXdpZGUgdmltcmMKKwlmaWxlKS4JQWxzbyBzZWUgfGNvbXBhdGlibGUtZGVmYXVsdHwuCisJWW91IGNhbiBhbHNvIHNldCB0aGlzIG9wdGlvbiB3aXRoIHRoZSAiLUMiIGFyZ3VtZW50LCBhbmQgcmVzZXQgaXQgd2l0aAorCSItTiIuICBTZWUgfC1DfCBhbmQgfC1OfC4KKwlTd2l0Y2hpbmcgdGhpcyBvcHRpb24gb2ZmIG1ha2VzIHRoZSBWaW0gZGVmYXVsdHMgYmUgdXNlZCBmb3Igb3B0aW9ucworCXRoYXQgaGF2ZSBhIGRpZmZlcmVudCBWaSBhbmQgVmltIGRlZmF1bHQgdmFsdWUuICBTZWUgdGhlIG9wdGlvbnMKKwltYXJrZWQgd2l0aCBhICcrJyBiZWxvdy4gIE90aGVyIG9wdGlvbnMgYXJlIG5vdCBtb2RpZmllZC4KKwlBdCB0aGUgbW9tZW50IHRoaXMgb3B0aW9uIGlzIHNldCwgc2V2ZXJhbCBvdGhlciBvcHRpb25zIHdpbGwgYmUgc2V0CisJb3IgcmVzZXQgdG8gbWFrZSBWaW0gYXMgVmktY29tcGF0aWJsZSBhcyBwb3NzaWJsZS4gIFNlZSB0aGUgdGFibGUKKwliZWxvdy4JVGhpcyBjYW4gYmUgdXNlZCBpZiB5b3Ugd2FudCB0byByZXZlcnQgdG8gVmkgY29tcGF0aWJsZQorCWVkaXRpbmcuCisJU2VlIGFsc28gJ2Nwb3B0aW9ucycuCisKKwlvcHRpb24JCSsgc2V0IHZhbHVlCWVmZmVjdAl+CisKKwknYWxsb3dyZXZpbnMnCSAgb2ZmCQlubyBDVFJMLV8gY29tbWFuZAorCSdiYWNrdXBjb3B5JwkgIFVuaXg6ICJ5ZXMiCSAgYmFja3VwIGZpbGUgaXMgYSBjb3B5CisJCQkgIG90aGVyczogImF1dG8iICBjb3B5IG9yIHJlbmFtZSBiYWNrdXAgZmlsZQorCSdiYWNrc3BhY2UnCSAgIiIJCW5vcm1hbCBiYWNrc3BhY2UKKwknYmFja3VwJwkgIG9mZgkJbm8gYmFja3VwIGZpbGUKKwknY2luZGVudCcJICBvZmYJCW5vIEMgY29kZSBpbmRlbnRhdGlvbgorCSdjZWRpdCcJCSsgIiIJCW5vIGtleSB0byBvcGVuIHRoZSB8Y21kd2lufAorCSdjcG9wdGlvbnMnCSsgKGFsbCBmbGFncykJVmktY29tcGF0aWJsZSBmbGFncworCSdjc2NvcGV0YWcnCSAgb2ZmCQlkb24ndCB1c2UgY3Njb3BlIGZvciAiOnRhZyIKKwknY3Njb3BldGFnb3JkZXInICAwCQlzZWUgfGNzY29wZXRhZ29yZGVyfAorCSdjc2NvcGV2ZXJib3NlJwkgIG9mZgkJc2VlIHxjc2NvcGV2ZXJib3NlfAorCSdkaWdyYXBoJwkgIG9mZgkJbm8gZGlncmFwaHMKKwknZXNja2V5cycJKyBvZmYJCW5vIDxFc2M+LWtleXMgaW4gSW5zZXJ0IG1vZGUKKwknZXhwYW5kdGFiJwkgIG9mZgkJdGFicyBub3QgZXhwYW5kZWQgdG8gc3BhY2VzCisJJ2ZpbGVmb3JtYXRzJwkrICIiCQlubyBhdXRvbWF0aWMgZmlsZSBmb3JtYXQgZGV0ZWN0aW9uLAorCQkJICAiZG9zLHVuaXgiCWV4Y2VwdCBmb3IgRE9TLCBXaW5kb3dzIGFuZCBPUy8yCisJJ2Zvcm1hdG9wdGlvbnMnCSsgInZ0IgkJVmkgY29tcGF0aWJsZSBmb3JtYXR0aW5nCisJJ2dkZWZhdWx0JwkgIG9mZgkJbm8gZGVmYXVsdCAnZycgZmxhZyBmb3IgIjpzIgorCSdoaXN0b3J5JwkrIDAJCW5vIGNvbW1hbmRsaW5lIGhpc3RvcnkKKwknaGttYXAnCQkgIG9mZgkJbm8gSGVicmV3IGtleWJvYXJkIG1hcHBpbmcKKwknaGttYXBwJwkgIG9mZgkJbm8gcGhvbmV0aWMgSGVicmV3IGtleWJvYXJkIG1hcHBpbmcKKwknaGxzZWFyY2gnCSAgb2ZmCQlubyBoaWdobGlnaHRpbmcgb2Ygc2VhcmNoIG1hdGNoZXMKKwknaW5jc2VhcmNoJwkgIG9mZgkJbm8gaW5jcmVtZW50YWwgc2VhcmNoaW5nCisJJ2luZGVudGV4cHInCSAgIiIJCW5vIGluZGVudGluZyBieSBleHByZXNzaW9uCisJJ2luc2VydG1vZGUnCSAgb2ZmCQlkbyBub3Qgc3RhcnQgaW4gSW5zZXJ0IG1vZGUKKwknaXNrZXl3b3JkJwkrICJALDQ4LTU3LF8iCWtleXdvcmRzIGNvbnRhaW4gYWxwaGFudW1lcmljCisJCQkJCQljaGFyYWN0ZXJzIGFuZCAnXycKKwknam9pbnNwYWNlcycJICBvbgkJaW5zZXJ0IDIgc3BhY2VzIGFmdGVyIHBlcmlvZAorCSdtb2RlbGluZScJKyBvZmYJCW5vIG1vZGVsaW5lcworCSdtb3JlJwkJKyBvZmYJCW5vIHBhdXNlcyBpbiBsaXN0aW5ncworCSdyZXZpbnMnCSAgb2ZmCQlubyByZXZlcnNlIGluc2VydAorCSdydWxlcicJCSAgb2ZmCQlubyBydWxlcgorCSdzY3JvbGxqdW1wJwkgIDEJCW5vIGp1bXAgc2Nyb2xsCisJJ3Njcm9sbG9mZicJICAwCQlubyBzY3JvbGwgb2Zmc2V0CisJJ3NoaWZ0cm91bmQnCSAgb2ZmCQlpbmRlbnQgbm90IHJvdW5kZWQgdG8gc2hpZnR3aWR0aAorCSdzaG9ydG1lc3MnCSsgIiIJCW5vIHNob3J0ZW5pbmcgb2YgbWVzc2FnZXMKKwknc2hvd2NtZCcJKyBvZmYJCWNvbW1hbmQgY2hhcmFjdGVycyBub3Qgc2hvd24KKwknc2hvd21vZGUnCSsgb2ZmCQljdXJyZW50IG1vZGUgbm90IHNob3duCisJJ3NtYXJ0Y2FzZScJICBvZmYJCW5vIGF1dG9tYXRpYyBpZ25vcmUgY2FzZSBzd2l0Y2gKKwknc21hcnRpbmRlbnQnCSAgb2ZmCQlubyBzbWFydCBpbmRlbnRhdGlvbgorCSdzbWFydHRhYicJICBvZmYJCW5vIHNtYXJ0IHRhYiBzaXplCisJJ3NvZnR0YWJzdG9wJwkgIDAJCXRhYnMgYXJlIGFsd2F5cyAndGFic3RvcCcgcG9zaXRpb25zCisJJ3N0YXJ0b2ZsaW5lJwkgIG9uCQlnb3RvIHN0YXJ0b2ZsaW5lIHdpdGggc29tZSBjb21tYW5kcworCSd0YWdyZWxhdGl2ZScJKyBvZmYJCXRhZyBmaWxlIG5hbWVzIGFyZSBub3QgcmVsYXRpdmUKKwkndGV4dGF1dG8nCSsgb2ZmCQlubyBhdXRvbWF0aWMgdGV4dG1vZGUgZGV0ZWN0aW9uCisJJ3RleHR3aWR0aCcJICAwCQlubyBhdXRvbWF0aWMgbGluZSB3cmFwCisJJ3RpbGRlb3AnCSAgb2ZmCQl0aWxkZSBpcyBub3QgYW4gb3BlcmF0b3IKKwkndHRpbWVvdXQnCSAgb2ZmCQlubyB0ZXJtaW5hbCB0aW1lb3V0CisJJ3doaWNod3JhcCcJKyAiIgkJbGVmdC1yaWdodCBtb3ZlbWVudHMgZG9uJ3Qgd3JhcAorCSd3aWxkY2hhcicJKyBDVFJMLUUJb25seSB3aGVuIHRoZSBjdXJyZW50IHZhbHVlIGlzIDxUYWI+CisJCQkJCXVzZSBDVFJMLUUgZm9yIGNtZGxpbmUgY29tcGxldGlvbgorCSd3cml0ZWJhY2t1cCcJICBvbiBvciBvZmYJZGVwZW5kcyBvbiArd3JpdGViYWNrdXAgZmVhdHVyZQorCisJCQkJCQkqJ2NvbXBsZXRlJyogKidjcHQnKiAqRTUzNSoKKydjb21wbGV0ZScgJ2NwdCcJc3RyaW5nCShkZWZhdWx0OiAiLix3LGIsdSx0LGkiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIHNwZWNpZmllcyBob3cga2V5d29yZCBjb21wbGV0aW9uIHxpbnMtY29tcGxldGlvbnwgd29ya3MKKwl3aGVuIENUUkwtUCBvciBDVFJMLU4gYXJlIHVzZWQuICBJdCBpcyBhbHNvIHVzZWQgZm9yIHdob2xlLWxpbmUKKwljb21wbGV0aW9uIHxpX0NUUkwtWF9DVFJMLUx8LiAgSXQgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIGNvbXBsZXRpb24KKwlhbmQgdGhlIHBsYWNlcyB0byBzY2FuLiAgSXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmbGFnczoKKwkuCXNjYW4gdGhlIGN1cnJlbnQgYnVmZmVyICgnd3JhcHNjYW4nIGlzIGlnbm9yZWQpCisJdwlzY2FuIGJ1ZmZlcnMgZnJvbSBvdGhlciB3aW5kb3dzCisJYglzY2FuIG90aGVyIGxvYWRlZCBidWZmZXJzIHRoYXQgYXJlIGluIHRoZSBidWZmZXIgbGlzdAorCXUJc2NhbiB0aGUgdW5sb2FkZWQgYnVmZmVycyB0aGF0IGFyZSBpbiB0aGUgYnVmZmVyIGxpc3QKKwlVCXNjYW4gdGhlIGJ1ZmZlcnMgdGhhdCBhcmUgbm90IGluIHRoZSBidWZmZXIgbGlzdAorCWsJc2NhbiB0aGUgZmlsZXMgZ2l2ZW4gd2l0aCB0aGUgJ2RpY3Rpb25hcnknIG9wdGlvbgorCWt7ZGljdH0Jc2NhbiB0aGUgZmlsZSB7ZGljdH0uICBTZXZlcmFsICJrIiBmbGFncyBjYW4gYmUgZ2l2ZW4sCisJCXBhdHRlcm5zIGFyZSB2YWxpZCB0b28uICBGb3IgZXhhbXBsZTogPgorCQkJOnNldCBjcHQ9ay91c3IvZGljdC8qLGt+L3NwYW5pc2gKKzwJcwlzY2FuIHRoZSBmaWxlcyBnaXZlbiB3aXRoIHRoZSAndGhlc2F1cnVzJyBvcHRpb24KKwlze3Rzcn0Jc2NhbiB0aGUgZmlsZSB7dHNyfS4gIFNldmVyYWwgInMiIGZsYWdzIGNhbiBiZSBnaXZlbiwgcGF0dGVybnMKKwkJYXJlIHZhbGlkIHRvby4KKwlpCXNjYW4gY3VycmVudCBhbmQgaW5jbHVkZWQgZmlsZXMKKwlkCXNjYW4gY3VycmVudCBhbmQgaW5jbHVkZWQgZmlsZXMgZm9yIGRlZmluZWQgbmFtZSBvciBtYWNybworCQl8aV9DVFJMLVhfQ1RSTC1EfAorCV0JdGFnIGNvbXBsZXRpb24KKwl0CXNhbWUgYXMgIl0iCisKKwlVbmxvYWRlZCBidWZmZXJzIGFyZSBub3QgbG9hZGVkLCB0aHVzIHRoZWlyIGF1dG9jbWRzIHw6YXV0b2NtZHwgYXJlCisJbm90IGV4ZWN1dGVkLCB0aGlzIG1heSBsZWFkIHRvIHVuZXhwZWN0ZWQgY29tcGxldGlvbnMgZnJvbSBzb21lIGZpbGVzCisJKGd6aXBwZWQgZmlsZXMgZm9yIGV4YW1wbGUpLiAgVW5sb2FkZWQgYnVmZmVycyBhcmUgbm90IHNjYW5uZWQgZm9yCisJd2hvbGUtbGluZSBjb21wbGV0aW9uLgorCisJVGhlIGRlZmF1bHQgaXMgIi4sdyxiLHUsdCxpIiwgd2hpY2ggbWVhbnMgdG8gc2NhbjoKKwkgICAxLiB0aGUgY3VycmVudCBidWZmZXIKKwkgICAyLiBidWZmZXJzIGluIG90aGVyIHdpbmRvd3MKKwkgICAzLiBvdGhlciBsb2FkZWQgYnVmZmVycworCSAgIDQuIHVubG9hZGVkIGJ1ZmZlcnMKKwkgICA1LiB0YWdzCisJICAgNi4gaW5jbHVkZWQgZmlsZXMKKworCUFzIHlvdSBjYW4gc2VlLCBDVFJMLU4gYW5kIENUUkwtUCBjYW4gYmUgdXNlZCB0byBkbyBhbnkgJ2lza2V5d29yZCctCisJYmFzZWQgZXhwYW5zaW9uIChlZyBkaWN0aW9uYXJ5IHxpX0NUUkwtWF9DVFJMLUt8LCBpbmNsdWRlZCBwYXR0ZXJucworCXxpX0NUUkwtWF9DVFJMLUl8LCB0YWdzIHxpX0NUUkwtWF9DVFJMLV18IGFuZCBub3JtYWwgZXhwYW5zaW9ucykKKworCQkJCSonY29uZmlybScqIConY2YnKiAqJ25vY29uZmlybScqIConbm9jZicqCisnY29uZmlybScgJ2NmJwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiAnY29uZmlybScgaXMgb24sIGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vcm1hbGx5CisJZmFpbCBiZWNhdXNlIG9mIHVuc2F2ZWQgY2hhbmdlcyB0byBhIGJ1ZmZlciwgZS5nLiAiOnEiIGFuZCAiOmUiLAorCWluc3RlYWQgcmFpc2UgYSB8ZGlhbG9nfCBhc2tpbmcgaWYgeW91IHdpc2ggdG8gc2F2ZSB0aGUgY3VycmVudAorCWZpbGUocykuICBZb3UgY2FuIHN0aWxsIHVzZSBhICEgdG8gdW5jb25kaXRpb25hbGx5IHxhYmFuZG9ufCBhIGJ1ZmZlci4KKwlJZiAnY29uZmlybScgaXMgb2ZmIHlvdSBjYW4gc3RpbGwgYWN0aXZhdGUgY29uZmlybWF0aW9uIGZvciBvbmUKKwljb21tYW5kIG9ubHkgKHRoaXMgaXMgbW9zdCB1c2VmdWwgaW4gbWFwcGluZ3MpIHdpdGggdGhlIHw6Y29uZmlybXwKKwljb21tYW5kLgorCUFsc28gc2VlIHRoZSB8Y29uZmlybSgpfCBmdW5jdGlvbiBhbmQgdGhlICd2JyBmbGFnIGluICdndWlvcHRpb25zJy4KKworCQkJKidjb25za2V5JyogKidjb25zaycqIConbm9jb25za2V5JyogKidub2NvbnNrJyoKKydjb25za2V5JyAnY29uc2snCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfSAge29ubHkgZm9yIE1TLURPU30KKwlXaGVuIG9uIGRpcmVjdCBjb25zb2xlIEkvTyBpcyB1c2VkIHRvIG9idGFpbiBhIGtleWJvYXJkIGNoYXJhY3Rlci4KKwlUaGlzIHNob3VsZCB3b3JrIGluIG1vc3QgY2FzZXMuICBBbHNvIHNlZSB8J2Jpb3NrZXknfC4JVG9nZXRoZXIsCisJdGhyZWUgbWV0aG9kcyBvZiBjb25zb2xlIGlucHV0IGFyZSBhdmFpbGFibGU6CisJJ2NvbnNrZXknICAgJ2Jpb3NrZXknCSAgICBhY3Rpb24gfgorCSAgIG9uCSAgICAgb24gb3Igb2ZmCSAgICBkaXJlY3QgY29uc29sZSBpbnB1dAorCSAgIG9mZgkJb24JICAgIEJJT1MKKwkgICBvZmYJCW9mZgkgICAgU1RESU4KKworCQkJKidjb3B5aW5kZW50JyogKidjaScqIConbm9jb3B5aW5kZW50JyogKidub2NpJyoKKydjb3B5aW5kZW50JyAnY2knCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCUNvcHkgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZXhpc3RpbmcgbGluZXMgaW5kZW50IHdoZW4gYXV0b2luZGVudGluZyBhCisJbmV3IGxpbmUuICBOb3JtYWxseSB0aGUgbmV3IGluZGVudCBpcyByZWNvbnN0cnVjdGVkIGJ5IGEgc2VyaWVzIG9mCisJdGFicyBmb2xsb3dlZCBieSBzcGFjZXMgYXMgcmVxdWlyZWQgKHVubGVzcyB8J2V4cGFuZHRhYid8IGlzIGVuYWJsZWQsCisJaW4gd2hpY2ggY2FzZSBvbmx5IHNwYWNlcyBhcmUgdXNlZCkuICBFbmFibGluZyB0aGlzIG9wdGlvbiBtYWtlcyB0aGUKKwluZXcgbGluZSBjb3B5IHdoYXRldmVyIGNoYXJhY3RlcnMgd2VyZSB1c2VkIGZvciBpbmRlbnRpbmcgb24gdGhlCisJZXhpc3RpbmcgbGluZS4gIElmIHRoZSBuZXcgaW5kZW50IGlzIGdyZWF0ZXIgdGhhbiBvbiB0aGUgZXhpc3RpbmcKKwlsaW5lLCB0aGUgcmVtYWluaW5nIHNwYWNlIGlzIGZpbGxlZCBpbiB0aGUgbm9ybWFsIG1hbm5lci4KKwlOT1RFOiAnY29weWluZGVudCcgaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCUFsc28gc2VlICdwcmVzZXJ2ZWluZGVudCcuCisKKwkJCQkJCSonY3BvcHRpb25zJyogKidjcG8nKgorJ2Nwb3B0aW9ucycgJ2NwbycJc3RyaW5nCShWaW0gZGVmYXVsdDogImFBQmNlRnMiLAorCQkJCSBWaSBkZWZhdWx0OiAgYWxsIGZsYWdzKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUEgc2VxdWVuY2Ugb2Ygc2luZ2xlIGNoYXJhY3RlciBmbGFncy4gIFdoZW4gYSBjaGFyYWN0ZXIgaXMgcHJlc2VudAorCXRoaXMgaW5kaWNhdGVzIHZpLWNvbXBhdGlibGUgYmVoYXZpb3IuCVRoaXMgaXMgdXNlZCBmb3IgdGhpbmdzIHdoZXJlCisJbm90IGJlaW5nIHZpLWNvbXBhdGlibGUgaXMgbW9zdGx5IG9yIHNvbWV0aW1lcyBwcmVmZXJyZWQuCisJJ2Nwb3B0aW9ucycgc3RhbmRzIGZvciAiY29tcGF0aWJsZS1vcHRpb25zIi4KKwlDb21tYXMgY2FuIGJlIGFkZGVkIGZvciByZWFkYWJpbGl0eS4KKwlUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIGZsYWdzIHRoYXQgYXJlIGFkZGVkIGluIHRoZSBmdXR1cmUsIHVzZSB0aGUKKwkiKz0iIGFuZCAiLT0iIGZlYXR1cmUgb2YgIjpzZXQiIHxhZGQtb3B0aW9uLWZsYWdzfC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCSAgICBjb250YWlucwliZWhhdmlvcgl+CisJCQkJCQkJCSpjcG8tYSoKKwkJYQlXaGVuIGluY2x1ZGVkLCBhICI6cmVhZCIgY29tbWFuZCB3aXRoIGEgZmlsZSBuYW1lCisJCQlhcmd1bWVudCB3aWxsIHNldCB0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZSBmb3IgdGhlCisJCQljdXJyZW50IHdpbmRvdy4KKwkJCQkJCQkJKmNwby1BKgorCQlBCVdoZW4gaW5jbHVkZWQsIGEgIjp3cml0ZSIgY29tbWFuZCB3aXRoIGEgZmlsZSBuYW1lCisJCQlhcmd1bWVudCB3aWxsIHNldCB0aGUgYWx0ZXJuYXRlIGZpbGUgbmFtZSBmb3IgdGhlCisJCQljdXJyZW50IHdpbmRvdy4KKwkJCQkJCQkJKmNwby1iKgorCQliCSJcfCIgaW4gYSAiOm1hcCIgY29tbWFuZCBpcyByZWNvZ25pemVkIGFzIHRoZSBlbmQgb2YKKwkJCXRoZSBtYXAgY29tbWFuZC4gIFRoZSAnXCcgaXMgaW5jbHVkZWQgaW4gdGhlIG1hcHBpbmcsCisJCQl0aGUgdGV4dCBhZnRlciB0aGUgJ3wnIGlzIGludGVycHJldGVkIGFzIHRoZSBuZXh0CisJCQljb21tYW5kLiAgVXNlIGEgQ1RSTC1WIGluc3RlYWQgb2YgYSBiYWNrc2xhc2ggdG8KKwkJCWluY2x1ZGUgdGhlICd8JyBpbiB0aGUgbWFwcGluZy4gIEFwcGxpZXMgdG8gYWxsCisJCQltYXBwaW5nLCBhYmJyZXZpYXRpb24sIG1lbnUgYW5kIGF1dG9jbWQgY29tbWFuZHMuCisJCQlTZWUgYWxzbyB8bWFwX2JhcnwuCisJCQkJCQkJCSpjcG8tQioKKwkJQglBIGJhY2tzbGFzaCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGluIG1hcHBpbmdzLAorCQkJYWJicmV2aWF0aW9ucyBhbmQgdGhlICJ0byIgcGFydCBvZiB0aGUgbWVudSBjb21tYW5kcy4KKwkJCVJlbW92ZSB0aGlzIGZsYWcgdG8gYmUgYWJsZSB0byB1c2UgYSBiYWNrc2xhc2ggbGlrZSBhCisJCQlDVFJMLVYuICBGb3IgZXhhbXBsZSwgdGhlIGNvbW1hbmQgIjptYXAgWCBcPEVzYz4iCisJCQlyZXN1bHRzIGluIFggYmVpbmcgbWFwcGVkIHRvOgorCQkJCSdCJyBpbmNsdWRlZDoJIlxeWyIJICheWyBpcyBhIHJlYWwgPEVzYz4pCisJCQkJJ0InIGV4Y2x1ZGVkOgkiPEVzYz4iICAoNSBjaGFyYWN0ZXJzKQorCQkJCSgnPCcgZXhjbHVkZWQgaW4gYm90aCBjYXNlcykKKwkJCQkJCQkJKmNwby1jKgorCQljCVNlYXJjaGluZyBjb250aW51ZXMgYXQgdGhlIGVuZCBvZiBhbnkgbWF0Y2ggYXQgdGhlCisJCQljdXJzb3IgcG9zaXRpb24sIGJ1dCBub3QgZnVydGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGUKKwkJCW5leHQgbGluZS4gIFdoZW4gbm90IHByZXNlbnQgc2VhcmNoaW5nIGNvbnRpbnVlcworCQkJb25lIGNoYXJhY3RlciBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24uICBXaXRoICdjJworCQkJImFiYWJhYmFiYWJhYiIgb25seSBnZXRzIHRocmVlIG1hdGNoZXMgd2hlbiByZXBlYXRpbmcKKwkJCSIvYWJhYiIsIHdpdGhvdXQgJ2MnIHRoZXJlIGFyZSBmaXZlIG1hdGNoZXMuCisJCQkJCQkJCSpjcG8tQyoKKwkJQwlEbyBub3QgY29uY2F0ZW5hdGUgc291cmNlZCBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggYQorCQkJYmFja3NsYXNoLiAgU2VlIHxsaW5lLWNvbnRpbnVhdGlvbnwuCisJCQkJCQkJCSpjcG8tZCoKKwkJZAlVc2luZyAiLi8iIGluIHRoZSAndGFncycgb3B0aW9uIGRvZXNuJ3QgbWVhbiB0byB1c2UKKwkJCXRoZSB0YWdzIGZpbGUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZmlsZSwgYnV0IHRoZQorCQkJdGFncyBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwkJCQkJCQkJKmNwby1EKgorCQlECUNhbid0IHVzZSBDVFJMLUsgdG8gZW50ZXIgYSBkaWdyYXBoIGFmdGVyIE5vcm1hbCBtb2RlCisJCQljb21tYW5kcyB3aXRoIGEgY2hhcmFjdGVyIGFyZ3VtZW50LCBsaWtlIHxyfCwgfGZ8IGFuZAorCQkJfHR8LgorCQkJCQkJCQkqY3BvLWUqCisJCWUJV2hlbiBleGVjdXRpbmcgYSByZWdpc3RlciB3aXRoICI6QHIiLCBhbHdheXMgYWRkIGEKKwkJCTxDUj4gdG8gdGhlIGxhc3QgbGluZSwgYWxzbyB3aGVuIHRoZSByZWdpc3RlciBpcyBub3QKKwkJCWxpbmV3aXNlLiAgSWYgdGhpcyBmbGFnIGlzIG5vdCBwcmVzZW50LCB0aGUgcmVnaXN0ZXIKKwkJCWlzIG5vdCBsaW5ld2lzZSBhbmQgdGhlIGxhc3QgbGluZSBkb2VzIG5vdCBlbmQgaW4gYQorCQkJPENSPiwgdGhlbiB0aGUgbGFzdCBsaW5lIGlzIHB1dCBvbiB0aGUgY29tbWFuZC1saW5lCisJCQlhbmQgY2FuIGJlIGVkaXRlZCBiZWZvcmUgaGl0dGluZyA8Q1I+LgorCQkJCQkJCQkqY3BvLUUqCisJCUUJSXQgaXMgYW4gZXJyb3Igd2hlbiB1c2luZyAieSIsICJkIiwgImMiLCAiZ34iLCAiZ3UiIG9yCisJCQkiZ1UiIG9uIGFuIEVtcHR5IHJlZ2lvbi4gIFRoZSBvcGVyYXRvcnMgb25seSB3b3JrIHdoZW4KKwkJCWF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaXMgdG8gYmUgb3BlcmF0ZSBvbi4gIEV4YW1wbGU6CisJCQlUaGlzIG1ha2VzICJ5MCIgZmFpbCBpbiB0aGUgZmlyc3QgY29sdW1uLgorCQkJCQkJCQkqY3BvLWYqCisJCWYJV2hlbiBpbmNsdWRlZCwgYSAiOnJlYWQiIGNvbW1hbmQgd2l0aCBhIGZpbGUgbmFtZQorCQkJYXJndW1lbnQgd2lsbCBzZXQgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyLAorCQkJaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBhIGZpbGUgbmFtZSB5ZXQuCisJCQkJCQkJCSpjcG8tRioKKwkJRglXaGVuIGluY2x1ZGVkLCBhICI6d3JpdGUiIGNvbW1hbmQgd2l0aCBhIGZpbGUgbmFtZQorCQkJYXJndW1lbnQgd2lsbCBzZXQgdGhlIGZpbGUgbmFtZSBmb3IgdGhlIGN1cnJlbnQKKwkJCWJ1ZmZlciwgaWYgdGhlIGN1cnJlbnQgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBhIGZpbGUgbmFtZQorCQkJeWV0LgorCQkJCQkJCQkqY3BvLWcqCisJCWcJR290byBsaW5lIDEgd2hlbiB1c2luZyAiOmVkaXQiIHdpdGhvdXQgYXJndW1lbnQuCisJCQkJCQkJCSpjcG8taSoKKwkJaQlXaGVuIGluY2x1ZGVkLCBpbnRlcnJ1cHRpbmcgdGhlIHJlYWRpbmcgb2YgYSBmaWxlIHdpbGwKKwkJCWxlYXZlIGl0IG1vZGlmaWVkLgorCQkJCQkJCQkqY3BvLWoqCisJCWoJV2hlbiBqb2luaW5nIGxpbmVzLCBvbmx5IGFkZCB0d28gc3BhY2VzIGFmdGVyIGEgJy4nLAorCQkJbm90IGFmdGVyICchJyBvciAnPycuICBBbHNvIHNlZSAnam9pbnNwYWNlcycuCisJCQkJCQkJCSpjcG8tSioKKwkJSglBIHxzZW50ZW5jZXwgaGFzIHRvIGJlIGZvbGxvd2VkIGJ5IHR3byBzcGFjZXMgYWZ0ZXIKKwkJCXRoZSAnLicsICchJyBvciAnPycuIEEgPFRhYj4gaXMgbm90IHJlY29nbml6ZWQgYXMKKwkJCXdoaXRlIHNwYWNlLgorCQkJCQkJCQkqY3BvLWsqCisJCWsJRGlzYWJsZSB0aGUgcmVjb2duaXRpb24gb2YgcmF3IGtleSBjb2RlcyBpbgorCQkJbWFwcGluZ3MsIGFiYnJldmlhdGlvbnMsIGFuZCB0aGUgInRvIiBwYXJ0IG9mIG1lbnUKKwkJCWNvbW1hbmRzLiAgRm9yIGV4YW1wbGUsIGlmIDxLZXk+IHNlbmRzIF5bT0EgKHdoZXJlIF5bCisJCQlpcyA8RXNjPiksIHRoZSBjb21tYW5kICI6bWFwIFggXltPQSIgcmVzdWx0cyBpbiBYCisJCQliZWluZyBtYXBwZWQgdG86CisJCQkJJ2snIGluY2x1ZGVkOgkiXltPQSIJICgzIGNoYXJhY3RlcnMpCisJCQkJJ2snIGV4Y2x1ZGVkOgkiPEtleT4iICAob25lIGtleSBjb2RlKQorCQkJQWxzbyBzZWUgdGhlICc8JyBmbGFnIGJlbG93LgorCQkJCQkJCQkqY3BvLUsqCisJCUsJRG9uJ3Qgd2FpdCBmb3IgYSBrZXkgY29kZSB0byBjb21wbGV0ZSB3aGVuIGl0IGlzCisJCQloYWxmd2F5IGEgbWFwcGluZy4gIFRoaXMgYnJlYWtzIG1hcHBpbmcgPEYxPjxGMT4gd2hlbgorCQkJb25seSBwYXJ0IG9mIHRoZSBzZWNvbmQgPEYxPiBoYXMgYmVlbiByZWFkLiAgSXQKKwkJCWVuYWJsZXMgY2FuY2VsbGluZyB0aGUgbWFwcGluZyBieSB0eXBpbmcgPEYxPjxFc2M+LgorCQkJCQkJCQkqY3BvLWwqCisJCWwJQmFja3NsYXNoIGluIGEgW10gcmFuZ2UgaW4gYSBzZWFyY2ggcGF0dGVybiBpcyB0YWtlbgorCQkJbGl0ZXJhbGx5LCBvbmx5ICJcXSIgaXMgc3BlY2lhbCAgU2VlIHwvW118CisJCQkgICAnbCcgaW5jbHVkZWQ6ICIvWyBcdF0iICBmaW5kcyA8U3BhY2U+LCAnXCcgYW5kICd0JworCQkJICAgJ2wnIGV4Y2x1ZGVkOiAiL1sgXHRdIiAgZmluZHMgPFNwYWNlPiBhbmQgPFRhYj4KKwkJCQkJCQkJKmNwby1MKgorCQlMCVdoZW4gdGhlICdsaXN0JyBvcHRpb24gaXMgc2V0LCAnd3JhcG1hcmdpbicsCisJCQkndGV4dHdpZHRoJywgJ3NvZnR0YWJzdG9wJyBhbmQgVmlydHVhbCBSZXBsYWNlIG1vZGUKKwkJCShzZWUgfGdSfCkgY291bnQgYSA8VGFiPiBhcyB0d28gY2hhcmFjdGVycywgaW5zdGVhZCBvZgorCQkJdGhlIG5vcm1hbCBiZWhhdmlvciBvZiBhIDxUYWI+LgorCQkJCQkJCQkqY3BvLW0qCisJCW0JV2hlbiBpbmNsdWRlZCwgYSBzaG93bWF0Y2ggd2lsbCBhbHdheXMgd2FpdCBoYWxmIGEKKwkJCXNlY29uZC4gIFdoZW4gbm90IGluY2x1ZGVkLCBhIHNob3dtYXRjaCB3aWxsIHdhaXQgaGFsZgorCQkJYSBzZWNvbmQgb3IgdW50aWwgYSBjaGFyYWN0ZXIgaXMgdHlwZWQuICB8J3Nob3dtYXRjaCd8CisJCQkJCQkJCSpjcG8tTSoKKwkJTQlXaGVuIGV4Y2x1ZGVkLCAiJSIgbWF0Y2hpbmcgd2lsbCB0YWtlIGJhY2tzbGFzaGVzIGludG8KKwkJCWFjY291bnQuICBUaHVzIGluICIoIFwoICkiIGFuZCAiXCggKCBcKSIgdGhlIG91dGVyCisJCQlwYXJlbnRoZXNpcyBtYXRjaC4gIFdoZW4gaW5jbHVkZWQgIiUiIGlnbm9yZXMKKwkJCWJhY2tzbGFzaGVzLCB3aGljaCBpcyBWaSBjb21wYXRpYmxlLgorCQkJCQkJCQkqY3BvLW4qCisJCW4JV2hlbiBpbmNsdWRlZCwgdGhlIGNvbHVtbiB1c2VkIGZvciAnbnVtYmVyJyB3aWxsIGFsc28KKwkJCWJlIHVzZWQgZm9yIHRleHQgb2Ygd3JhcHBlZCBsaW5lcy4KKwkJCQkJCQkJKmNwby1vKgorCQlvCUxpbmUgb2Zmc2V0IHRvIHNlYXJjaCBjb21tYW5kIGlzIG5vdCByZW1lbWJlcmVkIGZvcgorCQkJbmV4dCBzZWFyY2guCisJCQkJCQkJCSpjcG8tTyoKKwkJTwlEb24ndCBjb21wbGFpbiBpZiBhIGZpbGUgaXMgYmVpbmcgb3ZlcndyaXR0ZW4sIGV2ZW4KKwkJCXdoZW4gaXQgZGlkbid0IGV4aXN0IHdoZW4gZWRpdGluZyBpdC4gIFRoaXMgaXMgYQorCQkJcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZmlsZSB1bmV4cGVjdGVkbHkgY3JlYXRlZCBieQorCQkJc29tZW9uZSBlbHNlLiAgVmkgZGlkbid0IGNvbXBsYWluIGFib3V0IHRoaXMuCisJCQkJCQkJCSpjcG8tcCoKKwkJcAlWaSBjb21wYXRpYmxlIExpc3AgaW5kZW50aW5nLiAgV2hlbiBub3QgcHJlc2VudCwgYQorCQkJc2xpZ2h0bHkgYmV0dGVyIGFsZ29yaXRobSBpcyB1c2VkLgorCQkJCQkJCQkqY3BvLXIqCisJCXIJUmVkbyAoIi4iIGNvbW1hbmQpIHVzZXMgIi8iIHRvIHJlcGVhdCBhIHNlYXJjaAorCQkJY29tbWFuZCwgaW5zdGVhZCBvZiB0aGUgYWN0dWFsbHkgdXNlZCBzZWFyY2ggc3RyaW5nLgorCQkJCQkJCQkqY3BvLVIqCisJCVIJUmVtb3ZlIG1hcmtzIGZyb20gZmlsdGVyZWQgbGluZXMuICBXaXRob3V0IHRoaXMgZmxhZworCQkJbWFya3MgYXJlIGtlcHQgbGlrZSB8OmtlZXBtYXJrc3wgd2FzIHVzZWQuCisJCQkJCQkJCSpjcG8tcyoKKwkJcwlTZXQgYnVmZmVyIG9wdGlvbnMgd2hlbiBlbnRlcmluZyB0aGUgYnVmZmVyIGZvciB0aGUKKwkJCWZpcnN0IHRpbWUuICBUaGlzIGlzIGxpa2UgaXQgaXMgaW4gVmltIHZlcnNpb24gMy4wLgorCQkJQW5kIGl0IGlzIHRoZSBkZWZhdWx0LglJZiBub3QgcHJlc2VudCB0aGUgb3B0aW9ucyBhcmUKKwkJCXNldCB3aGVuIHRoZSBidWZmZXIgaXMgY3JlYXRlZC4KKwkJCQkJCQkJKmNwby1TKgorCQlTCVNldCBidWZmZXIgb3B0aW9ucyBhbHdheXMgd2hlbiBlbnRlcmluZyBhIGJ1ZmZlcgorCQkJKGV4Y2VwdCAncmVhZG9ubHknLCAnZmlsZWZvcm1hdCcsICdmaWxldHlwZScgYW5kCisJCQknc3ludGF4JykuICBUaGlzIGlzIHRoZSAobW9zdCkgVmkgY29tcGF0aWJsZSBzZXR0aW5nLgorCQkJVGhlIG9wdGlvbnMgYXJlIHNldCB0byB0aGUgdmFsdWVzIGluIHRoZSBjdXJyZW50CisJCQlidWZmZXIuICBXaGVuIHlvdSBjaGFuZ2UgYW4gb3B0aW9uIGFuZCBnbyB0byBhbm90aGVyCisJCQlidWZmZXIsIHRoZSB2YWx1ZSBpcyBjb3BpZWQuICBFZmZlY3RpdmVseSBtYWtlcyB0aGUKKwkJCWJ1ZmZlciBvcHRpb25zIGdsb2JhbCB0byBhbGwgYnVmZmVycy4KKworCQkJJ3MnICAgICdTJyAgICAgY29weSBidWZmZXIgb3B0aW9ucworCQkJbm8gICAgIG5vICAgICAgd2hlbiBidWZmZXIgY3JlYXRlZAorCQkJeWVzICAgIG5vICAgICAgd2hlbiBidWZmZXIgZmlyc3QgZW50ZXJlZCAoZGVmYXVsdCkKKwkJCSBYICAgICB5ZXMgICAgIGVhY2ggdGltZSB3aGVuIGJ1ZmZlciBlbnRlcmVkICh2aSBjb21wLikKKwkJCQkJCQkJKmNwby10KgorCQl0CVNlYXJjaCBwYXR0ZXJuIGZvciB0aGUgdGFnIGNvbW1hbmQgaXMgcmVtZW1iZXJlZCBmb3IKKwkJCSJuIiBjb21tYW5kLiAgT3RoZXJ3aXNlIFZpbSBvbmx5IHB1dHMgdGhlIHBhdHRlcm4gaW4KKwkJCXRoZSBoaXN0b3J5IGZvciBzZWFyY2ggcGF0dGVybiwgYnV0IGRvZXNuJ3QgY2hhbmdlIHRoZQorCQkJbGFzdCB1c2VkIHNlYXJjaCBwYXR0ZXJuLgorCQkJCQkJCQkqY3BvLXUqCisJCXUJVW5kbyBpcyBWaSBjb21wYXRpYmxlLglTZWUgfHVuZG8tdHdvLXdheXN8LgorCQkJCQkJCQkqY3BvLXYqCisJCXYJQmFja3NwYWNlZCBjaGFyYWN0ZXJzIHJlbWFpbiB2aXNpYmxlIG9uIHRoZSBzY3JlZW4gaW4KKwkJCUluc2VydCBtb2RlLiAgV2l0aG91dCB0aGlzIGZsYWcgdGhlIGNoYXJhY3RlcnMgYXJlCisJCQllcmFzZWQgZnJvbSB0aGUgc2NyZWVuIHJpZ2h0IGF3YXkuICBXaXRoIHRoaXMgZmxhZyB0aGUKKwkJCXNjcmVlbiBuZXdseSB0eXBlZCB0ZXh0IG92ZXJ3cml0ZXMgYmFja3NwYWNlZAorCQkJY2hhcmFjdGVycy4KKwkJCQkJCQkJKmNwby13KgorCQl3CVdoZW4gdXNpbmcgImN3IiBvbiBhIGJsYW5rIGNoYXJhY3Rlciwgb25seSBjaGFuZ2Ugb25lCisJCQljaGFyYWN0ZXIgYW5kIG5vdCBhbGwgYmxhbmtzIHVudGlsIHRoZSBzdGFydCBvZiB0aGUKKwkJCW5leHQgd29yZC4KKwkJCQkJCQkJKmNwby1XKgorCQlXCURvbid0IG92ZXJ3cml0ZSBhIHJlYWRvbmx5IGZpbGUuICBXaGVuIG9taXR0ZWQsICI6dyEiCisJCQlvdmVyd3JpdGVzIGEgcmVhZG9ubHkgZmlsZSwgaWYgcG9zc2libGUuCisJCQkJCQkJCSpjcG8teCoKKwkJeAk8RXNjPiBvbiB0aGUgY29tbWFuZC1saW5lIGV4ZWN1dGVzIHRoZSBjb21tYW5kLWxpbmUuCisJCQlUaGUgZGVmYXVsdCBpbiBWaW0gaXMgdG8gYWJhbmRvbiB0aGUgY29tbWFuZC1saW5lLAorCQkJYmVjYXVzZSA8RXNjPiBub3JtYWxseSBhYm9ydHMgYSBjb21tYW5kLiAgfGNfPEVzYz58CisJCQkJCQkJCSpjcG8teSoKKwkJeQlBIHlhbmsgY29tbWFuZCBjYW4gYmUgcmVkb25lIHdpdGggIi4iLgorCQkJCQkJCQkqY3BvLSEqCisJCSEJV2hlbiByZWRvaW5nIGEgZmlsdGVyIGNvbW1hbmQsIHVzZSB0aGUgbGFzdCB1c2VkCisJCQlleHRlcm5hbCBjb21tYW5kLCB3aGF0ZXZlciBpdCB3YXMuICBPdGhlcndpc2UgdGhlIGxhc3QKKwkJCXVzZWQgLWZpbHRlci0gY29tbWFuZCBpcyB1c2VkLgorCQkJCQkJCQkqY3BvLSQqCisJCSQJV2hlbiBtYWtpbmcgYSBjaGFuZ2UgdG8gb25lIGxpbmUsIGRvbid0IHJlZGlzcGxheSB0aGUKKwkJCWxpbmUsIGJ1dCBwdXQgYSAnJCcgYXQgdGhlIGVuZCBvZiB0aGUgY2hhbmdlZCB0ZXh0LgorCQkJVGhlIGNoYW5nZWQgdGV4dCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdoZW4geW91IHR5cGUgdGhlCisJCQluZXcgdGV4dC4gIFRoZSBsaW5lIGlzIHJlZGlzcGxheWVkIGlmIHlvdSB0eXBlIGFueQorCQkJY29tbWFuZCB0aGF0IG1vdmVzIHRoZSBjdXJzb3IgZnJvbSB0aGUgaW5zZXJ0aW9uCisJCQlwb2ludC4KKwkJCQkJCQkJKmNwby0lKgorCQklCVZpLWNvbXBhdGlibGUgbWF0Y2hpbmcgaXMgZG9uZSBmb3IgdGhlICIlIiBjb21tYW5kLgorCQkJRG9lcyBub3QgcmVjb2duaXplICIjaWYiLCAiI2VuZGlmIiwgZXRjLgorCQkJRG9lcyBub3QgcmVjb2duaXplICIvKiIgYW5kICIqLyIuCisJCQlQYXJlbnMgaW5zaWRlIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlcyBhcmUgYWxzbworCQkJY291bnRlZCwgY2F1c2luZyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgcGFyZW4gdG8KKwkJCWRpc3R1cmIgdGhlIG1hdGNoaW5nLiAgRm9yIGV4YW1wbGUsIGluIGEgbGluZSBsaWtlCisJCQkiaWYgKHN0cmNtcCgiZm9vKCIsIHMpKSIgdGhlIGZpcnN0IHBhcmVuIGRvZXMgbm90CisJCQltYXRjaCB0aGUgbGFzdCBvbmUuICBXaGVuIHRoaXMgZmxhZyBpcyBub3QgaW5jbHVkZWQsCisJCQlwYXJlbnMgaW5zaWRlIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlcyBhcmUgdHJlYXRlZAorCQkJc3BlY2lhbGx5LiAgV2hlbiBtYXRjaGluZyBhIHBhcmVuIG91dHNpZGUgb2YgcXVvdGVzLAorCQkJZXZlcnl0aGluZyBpbnNpZGUgcXVvdGVzIGlzIGlnbm9yZWQuICBXaGVuIG1hdGNoaW5nIGEKKwkJCXBhcmVuIGluc2lkZSBxdW90ZXMsIGl0IHdpbGwgZmluZCB0aGUgbWF0Y2hpbmcgb25lIChpZgorCQkJdGhlcmUgaXMgb25lKS4JVGhpcyB3b3JrcyB2ZXJ5IHdlbGwgZm9yIEMgcHJvZ3JhbXMuCisJCQkJCQkJCSpjcG8tc3RhcioKKwkJKglVc2UgIjoqIiBpbiB0aGUgc2FtZSB3YXkgYXMgIjpAIi4gIFdoZW4gbm90IGluY2x1ZGVkLAorCQkJIjoqIiBpcyBhbiBhbGlhcyBmb3IgIjonPCwnPiIsIHNlbGVjdCB0aGUgVmlzdWFsIGFyZWEuCisJCQkJCQkJCSpjcG8tPCoKKwkJPAlEaXNhYmxlIHRoZSByZWNvZ25pdGlvbiBvZiBzcGVjaWFsIGtleSBjb2RlcyBpbiB8PD58CisJCQlmb3JtIGluIG1hcHBpbmdzLCBhYmJyZXZpYXRpb25zLCBhbmQgdGhlICJ0byIgcGFydCBvZgorCQkJbWVudSBjb21tYW5kcy4JRm9yIGV4YW1wbGUsIHRoZSBjb21tYW5kCisJCQkiOm1hcCBYIDxUYWI+IiByZXN1bHRzIGluIFggYmVpbmcgbWFwcGVkIHRvOgorCQkJCSc8JyBpbmNsdWRlZDoJIjxUYWI+IiAgKDUgY2hhcmFjdGVycykKKwkJCQknPCcgZXhjbHVkZWQ6CSJeSSIJICheSSBpcyBhIHJlYWwgPFRhYj4pCisJCQlBbHNvIHNlZSB0aGUgJ2snIGZsYWcgYWJvdmUuCisKKwkJCQkJCSonY3Njb3BlcGF0aGNvbXAnKiAqJ2NzcGMnKgorJ2NzY29wZXBhdGhjb21wJyAnY3NwYycJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjc2NvcGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlEZXRlcm1pbmVzIGhvdyBtYW55IGNvbXBvbmVudHMgb2YgdGhlIHBhdGggdG8gc2hvdyBpbiBhIGxpc3Qgb2YgdGFncy4KKwlTZWUgfGNzY29wZXBhdGhjb21wfC4KKworCQkJCQkJKidjc2NvcGVwcmcnKiAqJ2NzcHJnJyoKKydjc2NvcGVwcmcnICdjc3ByZycJc3RyaW5nCShkZWZhdWx0ICJjc2NvcGUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY3Njb3BlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJU3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUgY3Njb3BlLiAgU2VlIHxjc2NvcGVwcmd8LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidjc2NvcGVxdWlja2ZpeCcqIConY3NxZicqCisnY3Njb3BlcXVpY2tmaXgnICdjc3FmJyBzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjc2NvcGV8CisJCQlvciB8K3F1aWNrZml4fCBmZWF0dXJlc30KKwkJCXtub3QgaW4gVml9CisJU3BlY2lmaWVzIHdoZXRoZXIgdG8gdXNlIHF1aWNrZml4IHdpbmRvdyB0byBzaG93IGNzY29wZSByZXN1bHRzLgorCVNlZSB8Y3Njb3BlcXVpY2tmaXh8LgorCisJCQkJKidjc2NvcGV0YWcnKiAqJ2NzdCcqIConbm9jc2NvcGV0YWcnKiAqJ25vY3N0JyoKKydjc2NvcGV0YWcnICdjc3QnCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY3Njb3BlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJVXNlIGNzY29wZSBmb3IgdGFnIGNvbW1hbmRzLiAgU2VlIHxjc2NvcGUtb3B0aW9uc3wuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2NzY29wZXRhZ29yZGVyJyogKidjc3RvJyoKKydjc2NvcGV0YWdvcmRlcicgJ2NzdG8nCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrY3Njb3BlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJRGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggIjpjc3RhZyIgcGVyZm9ybXMgYSBzZWFyY2guICBTZWUKKwl8Y3Njb3BldGFnb3JkZXJ8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byAwIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkqJ2NzY29wZXZlcmJvc2UnKiAqJ2NzdmVyYicqCisJCQkJCSonbm9jc2NvcGV2ZXJib3NlJyogKidub2NzdmVyYicqCisnY3Njb3BldmVyYm9zZScgJ2NzdmVyYicgYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjc2NvcGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlHaXZlIG1lc3NhZ2VzIHdoZW4gYWRkaW5nIGEgY3Njb3BlIGRhdGFiYXNlLiAgU2VlIHxjc2NvcGV2ZXJib3NlfC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonZGVidWcnKgorJ2RlYnVnJwkJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHNldCB0byAibXNnIiwgZXJyb3IgbWVzc2FnZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgb21pdHRlZCB3aWxsCisJYmUgZ2l2ZW4gYW55d2F5LiAgVGhpcyBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcgJ2ZvbGRleHByJyBvcgorCSdpbmRlbnRleHByJy4KKworCQkJCQkJKidkZWZpbmUnKiAqJ2RlZicqCisnZGVmaW5lJyAnZGVmJwkJc3RyaW5nCShkZWZhdWx0ICJeXHMqI1xzKmRlZmluZSIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCVBhdHRlcm4gdG8gYmUgdXNlZCB0byBmaW5kIGEgbWFjcm8gZGVmaW5pdGlvbi4JSXQgaXMgYSBzZWFyY2gKKwlwYXR0ZXJuLCBqdXN0IGxpa2UgZm9yIHRoZSAiLyIgY29tbWFuZC4gIFRoaXMgb3B0aW9uIGlzIHVzZWQgZm9yIHRoZQorCWNvbW1hbmRzIGxpa2UgIltpIiBhbmQgIltkIiB8aW5jbHVkZS1zZWFyY2h8LiAgVGhlICdpc2lkZW50JyBvcHRpb24gaXMKKwl1c2VkIHRvIHJlY29nbml6ZSB0aGUgZGVmaW5lZCBuYW1lIGFmdGVyIHRoZSBtYXRjaDoKKwkJe21hdGNoIHdpdGggJ2RlZmluZSd9e25vbi1JRCBjaGFyc317ZGVmaW5lZCBuYW1lfXtub24tSUQgY2hhcn0KKwlTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluc2VydGluZyBiYWNrc2xhc2hlcyB0byBpbmNsdWRlIGEgc3BhY2UKKwlvciBiYWNrc2xhc2guCisJVGhlIGRlZmF1bHQgdmFsdWUgaXMgZm9yIEMgcHJvZ3JhbXMuICBGb3IgQysrIHRoaXMgdmFsdWUgd291bGQgYmUKKwl1c2VmdWwsIHRvIGluY2x1ZGUgY29uc3QgdHlwZSBkZWNsYXJhdGlvbnM6ID4KKwkJXlwoI1xzKmRlZmluZVx8W2Etel0qXHMqY29uc3RccypbYS16XSpcKQorPAlXaGVuIHVzaW5nIHRoZSAiOnNldCIgY29tbWFuZCwgeW91IG5lZWQgdG8gZG91YmxlIHRoZSBiYWNrc2xhc2hlcyEKKworCQkJKidkZWxjb21iaW5lJyogKidkZWNvJyogKidub2RlbGNvbWJpbmUnKiAqJ25vZGVjbycqCisnZGVsY29tYmluZScgJ2RlY28nCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZX0KKwlJZiBlZGl0aW5nIFVuaWNvZGUgYW5kIHRoaXMgb3B0aW9uIGlzIHNldCwgYmFja3NwYWNlIGFuZCBOb3JtYWwgbW9kZQorCSJ4IiBkZWxldGUgZWFjaCBjb21iaW5pbmcgY2hhcmFjdGVyIG9uIGl0cyBvd24uICBXaGVuIGl0IGlzIG9mZiAodGhlCisJZGVmYXVsdCkgdGhlIGNoYXJhY3RlciBhbG9uZyB3aXRoIGl0cyBjb21iaW5pbmcgY2hhcmFjdGVycyBhcmUKKwlkZWxldGVkLgorCU5vdGU6IFdoZW4gJ2RlbGNvbWJpbmUnIGlzIHNldCAieHgiIG1heSB3b3JrIGRpZmZlcmVudCBmcm9tICIyeCIhCisKKwlUaGlzIGlzIHVzZWZ1bCBmb3IgQXJhYmljLCBIZWJyZXcgYW5kIG1hbnkgb3RoZXIgbGFuZ3VhZ2VzIHdoZXJlIG9uZQorCW1heSBoYXZlIGNvbWJpbmluZyBjaGFyYWN0ZXJzIG92ZXJ0b3Agb2YgYmFzZSBjaGFyYWN0ZXJzLCBhbmQgd2FudAorCXRvIHJlbW92ZSBvbmx5IHRoZSBjb21iaW5pbmcgb25lcy4KKworCQkJCQkJKidkaWN0aW9uYXJ5JyogKidkaWN0JyoKKydkaWN0aW9uYXJ5JyAnZGljdCcJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlMaXN0IG9mIGZpbGUgbmFtZXMsIHNlcGFyYXRlZCBieSBjb21tYXMsIHRoYXQgYXJlIHVzZWQgdG8gbG9va3VwIHdvcmRzCisJZm9yIGtleXdvcmQgY29tcGxldGlvbiBjb21tYW5kcyB8aV9DVFJMLVhfQ1RSTC1LfC4gIEVhY2ggZmlsZSBzaG91bGQKKwljb250YWluIGEgbGlzdCBvZiB3b3Jkcy4gIFRoaXMgY2FuIGJlIG9uZSB3b3JkIHBlciBsaW5lLCBvciBzZXZlcmFsCisJd29yZHMgcGVyIGxpbmUsIHNlcGFyYXRlZCBieSBub24ta2V5d29yZCBjaGFyYWN0ZXJzICh3aGl0ZSBzcGFjZSBpcworCXByZWZlcnJlZCkuICBNYXhpbXVtIGxpbmUgbGVuZ3RoIGlzIDUxMCBieXRlcy4KKwlUbyBpbmNsdWRlIGEgY29tbWEgaW4gYSBmaWxlIG5hbWUgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoLglTcGFjZXMKKwlhZnRlciBhIGNvbW1hIGFyZSBpZ25vcmVkLCBvdGhlcndpc2Ugc3BhY2VzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmlsZQorCW5hbWUuICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IHVzaW5nIGJhY2tzbGFzaGVzLgorCVdoZXJlIHRvIGZpbmQgYSBsaXN0IG9mIHdvcmRzPworCS0gT24gRnJlZUJTRCwgdGhlcmUgaXMgdGhlIGZpbGUgIi91c3Ivc2hhcmUvZGljdC93b3JkcyIuCisJLSBJbiB0aGUgU2ltdGVsIGFyY2hpdmUsIGxvb2sgaW4gdGhlICJtc2Rvcy9saW5ndWlzdCIgZGlyZWN0b3J5LgorCS0gSW4gIm1pc2NmaWxlcyIgb2YgdGhlIEdOVSBjb2xsZWN0aW9uLgorCVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCWRpcmVjdG9yaWVzIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4KKwlCYWNrdGlja3MgY2Fubm90IGJlIHVzZWQgaW4gdGhpcyBvcHRpb24gZm9yIHNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCQkqJ2RpZmYnKiAqJ25vZGlmZicqCisnZGlmZicJCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtkaWZmfAorCQkJZmVhdHVyZX0KKwlKb2luIHRoZSBjdXJyZW50IHdpbmRvdyBpbiB0aGUgZ3JvdXAgb2Ygd2luZG93cyB0aGF0IHNob3dzIGRpZmZlcmVuY2VzCisJYmV0d2VlbiBmaWxlcy4JU2VlIHx2aW1kaWZmfC4KKworCQkJCQkJKidkZXgnKiAqJ2RpZmZleHByJyoKKydkaWZmZXhwcicgJ2RleCcJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2RpZmZ8CisJCQlmZWF0dXJlfQorCUV4cHJlc3Npb24gd2hpY2ggaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhbiBlZC1zdHlsZSBkaWZmIGZpbGUgZnJvbSB0d28KKwl2ZXJzaW9ucyBvZiBhIGZpbGUuICBTZWUgfGRpZmYtZGlmZmV4cHJ8LgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidkaXAnKiAqJ2RpZmZvcHQnKgorJ2RpZmZvcHQnICdkaXAnCQlzdHJpbmcJKGRlZmF1bHQgImZpbGxlciIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZGlmZnwKKwkJCWZlYXR1cmV9CisJT3B0aW9uIHNldHRpbmdzIGZvciBkaWZmIG1vZGUuCUl0IGNhbiBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcgaXRlbXMuCisJQWxsIGFyZSBvcHRpb25hbC4gIEl0ZW1zIG11c3QgYmUgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCisKKwkJZmlsbGVyCQlTaG93IGZpbGxlciBsaW5lcywgdG8ga2VlcCB0aGUgdGV4dAorCQkJCXN5bmNocm9uaXplZCB3aXRoIGEgd2luZG93IHRoYXQgaGFzIGluc2VydGVkCisJCQkJbGluZXMgYXQgdGhlIHNhbWUgcG9zaXRpb24uICBNb3N0bHkgdXNlZnVsCisJCQkJd2hlbiB3aW5kb3dzIGFyZSBzaWRlLWJ5LXNpZGUgYW5kICdzY3JvbGxiaW5kJworCQkJCWlzIHNldC4KKworCQljb250ZXh0OntufQlVc2UgYSBjb250ZXh0IG9mIHtufSBsaW5lcyBiZXR3ZWVuIGEgY2hhbmdlCisJCQkJYW5kIGEgZm9sZCB0aGF0IGNvbnRhaW5zIHVuY2hhbmdlZCBsaW5lcy4KKwkJCQlXaGVuIG9taXR0ZWQgYSBjb250ZXh0IG9mIHNpeCBsaW5lcyBpcyB1c2VkLgorCQkJCVNlZSB8Zm9sZC1kaWZmfC4KKworCQlpY2FzZQkJSWdub3JlIGNoYW5nZXMgaW4gY2FzZSBvZiB0ZXh0LiAgImEiIGFuZCAiQSIKKwkJCQlhcmUgY29uc2lkZXJlZCB0aGUgc2FtZS4gIEFkZHMgdGhlICItaSIgZmxhZworCQkJCXRvIHRoZSAiZGlmZiIgY29tbWFuZCBpZiAnZGlmZmV4cHInIGlzIGVtcHR5LgorCisJCWl3aGl0ZQkJSWdub3JlIGNoYW5nZXMgaW4gYW1vdW50IG9mIHdoaXRlIHNwYWNlLiAgQWRkcworCQkJCXRoZSAiLWIiIGZsYWcgdG8gdGhlICJkaWZmIiBjb21tYW5kIGlmCisJCQkJJ2RpZmZleHByJyBpcyBlbXB0eS4gIENoZWNrIHRoZSBkb2N1bWVudGF0aW9uCisJCQkJb2YgdGhlICJkaWZmIiBjb21tYW5kIGZvciB3aGF0IHRoaXMgZG9lcworCQkJCWV4YWN0bHkuICBJdCBzaG91bGQgaWdub3JlIGFkZGluZyB0cmFpbGluZworCQkJCXdoaXRlIHNwYWNlLCBidXQgbm90IGxlYWRpbmcgd2hpdGUgc3BhY2UuCisKKwlFeGFtcGxlczogPgorCisJCTpzZXQgZGlmZm9wdD1maWxsZXIsY29udGV4dDo0CisJCTpzZXQgZGlmZm9wdD0KKwkJOnNldCBkaWZmb3B0PWZpbGxlcgorPAorCQkJCSAgICAgKidkaWdyYXBoJyogKidkZycqIConbm9kaWdyYXBoJyogKidub2RnJyoKKydkaWdyYXBoJyAnZGcnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtkaWdyYXBoc3wKKwkJCWZlYXR1cmV9CisJRW5hYmxlIHRoZSBlbnRlcmluZyBvZiBkaWdyYXBocyBpbiBJbnNlcnQgbW9kZSB3aXRoIHtjaGFyMX0gPEJTPgorCXtjaGFyMn0uICBTZWUgfGRpZ3JhcGhzfC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonZGlyZWN0b3J5JyogKidkaXInKgorJ2RpcmVjdG9yeScgJ2RpcicJc3RyaW5nCShkZWZhdWx0IGZvciBBbWlnYTogIi4sdDoiLAorCQkJCSBmb3IgTVMtRE9TIGFuZCBXaW4zMjogIi4sYzpcdG1wLGM6XHRlbXAiCisJCQkJIGZvciBVbml4OiAiLix+L3RtcCwvdmFyL3RtcCwvdG1wIikKKwkJCWdsb2JhbAorCUxpc3Qgb2YgZGlyZWN0b3J5IG5hbWVzIGZvciB0aGUgc3dhcCBmaWxlLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMuCisJLSBUaGUgc3dhcCBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZmlyc3QgZGlyZWN0b3J5IHdoZXJlIHRoaXMgaXMKKwkgIHBvc3NpYmxlLgorCS0gRW1wdHkgbWVhbnMgdGhhdCBubyBzd2FwIGZpbGUgd2lsbCBiZSB1c2VkIChyZWNvdmVyeSBpcworCSAgaW1wb3NzaWJsZSEpLgorCS0gQSBkaXJlY3RvcnkgIi4iIG1lYW5zIHRvIHB1dCB0aGUgc3dhcCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcworCSAgdGhlIGVkaXRlZCBmaWxlLiAgT24gVW5peCwgYSBkb3QgaXMgcHJlcGVuZGVkIHRvIHRoZSBmaWxlIG5hbWUsIHNvCisJICBpdCBkb2Vzbid0IHNob3cgaW4gYSBkaXJlY3RvcnkgbGlzdGluZy4gIE9uIE1TLVdpbmRvd3MgdGhlICJoaWRkZW4iCisJICBhdHRyaWJ1dGUgaXMgc2V0IGFuZCBhIGRvdCBwcmVwZW5kZWQgaWYgcG9zc2libGUuCisJLSBBIGRpcmVjdG9yeSBzdGFydGluZyB3aXRoICIuLyIgKG9yICIuXCIgZm9yIE1TLURPUyBldC5hbC4pIG1lYW5zIHRvCisJICBwdXQgdGhlIHN3YXAgZmlsZSByZWxhdGl2ZSB0byB3aGVyZSB0aGUgZWRpdGVkIGZpbGUgaXMuICBUaGUgbGVhZGluZworCSAgIi4iIGlzIHJlcGxhY2VkIHdpdGggdGhlIHBhdGggbmFtZSBvZiB0aGUgZWRpdGVkIGZpbGUuCisJLSBGb3IgVW5peCBhbmQgV2luMzIsIGlmIGEgZGlyZWN0b3J5IGVuZHMgaW4gdHdvIHBhdGggc2VwYXJhdG9ycywgdGhlCisJICBzd2FwIGZpbGUgbmFtZSB3aWxsIGJlIGJ1aWx0IGZyb20gdGhlIGNvbXBsZXRlIHBhdGggdG8gdGhlIGZpbGUKKwkgIHdpdGggYWxsIHBhdGggc2VwYXJhdG9ycyBzdWJzdGl0dXRlZCB0byBwZXJjZW50ICclJyBzaWducy4gVGhpcyB3aWxsCisJICBlbnN1cmUgZmlsZSBuYW1lIHVuaXF1ZW5lc3MgaW4gdGhlIHByZXNlcnZlIGRpcmVjdG9yeS4KKwktIFNwYWNlcyBhZnRlciB0aGUgY29tbWEgYXJlIGlnbm9yZWQsIG90aGVyIHNwYWNlcyBhcmUgY29uc2lkZXJlZCBwYXJ0CisJICBvZiB0aGUgZGlyZWN0b3J5IG5hbWUuICBUbyBoYXZlIGEgc3BhY2UgYXQgdGhlIHN0YXJ0IG9mIGEgZGlyZWN0b3J5CisJICBuYW1lLCBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2guCisJLSBUbyBpbmNsdWRlIGEgY29tbWEgaW4gYSBkaXJlY3RvcnkgbmFtZSBwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2guCisJLSBBIGRpcmVjdG9yeSBuYW1lIG1heSBlbmQgaW4gYW4gJzonIG9yICcvJy4KKwktIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4KKwktIENhcmVmdWwgd2l0aCAnXCcgY2hhcmFjdGVycywgdHlwZSBvbmUgYmVmb3JlIGEgc3BhY2UsIHR5cGUgdHdvIHRvCisJICBnZXQgb25lIGluIHRoZSBvcHRpb24gKHNlZSB8b3B0aW9uLWJhY2tzbGFzaHwpLCBmb3IgZXhhbXBsZTogPgorCSAgICA6c2V0IGRpcj1jOlxcdG1wLFwgZGlyXFwsd2l0aFxcLGNvbW1hcyxcXFwgZGlyXCB3aXRoXCBzcGFjZXMKKzwJLSBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBWaW0gdmVyc2lvbiAzLjAgYSAnPicgYXQgdGhlIHN0YXJ0CisJICBvZiB0aGUgb3B0aW9uIGlzIHJlbW92ZWQuCisJVXNpbmcgIi4iIGZpcnN0IGluIHRoZSBsaXN0IGlzIHJlY29tbWVuZGVkLiAgVGhpcyBtZWFucyB0aGF0IGVkaXRpbmcKKwl0aGUgc2FtZSBmaWxlIHR3aWNlIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZy4gIFVzaW5nICIvdG1wIiBvbiBVbml4IGlzCisJZGlzY291cmFnZWQ6IFdoZW4gdGhlIHN5c3RlbSBjcmFzaGVzIHlvdSBsb3NlIHRoZSBzd2FwIGZpbGUuCisJIi92YXIvdG1wIiBpcyBvZnRlbiBub3QgY2xlYXJlZCB3aGVuIHJlYm9vdGluZywgdGh1cyBpcyBhIGJldHRlcgorCWNob2ljZSB0aGFuICIvdG1wIi4gIEJ1dCBpdCBjYW4gY29udGFpbiBhIGxvdCBvZiBmaWxlcywgeW91ciBzd2FwCisJZmlsZXMgZ2V0IGxvc3QgaW4gdGhlIGNyb3dkLiAgVGhhdCBpcyB3aHkgYSAidG1wIiBkaXJlY3RvcnkgaW4geW91cgorCWhvbWUgZGlyZWN0b3J5IGlzIHRyaWVkIGZpcnN0LgorCVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCWRpcmVjdG9yaWVzIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisJe1ZpOiBkaXJlY3RvcnkgdG8gcHV0IHRlbXAgZmlsZSBpbiwgZGVmYXVsdHMgdG8gIi90bXAifQorCisJCQkJCSonZGlzcGxheScqIConZHknKgorJ2Rpc3BsYXknICdkeScJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlDaGFuZ2UgdGhlIHdheSB0ZXh0IGlzIGRpc3BsYXllZC4gIFRoaXMgaXMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKKwlmbGFnczoKKwlsYXN0bGluZQlXaGVuIGluY2x1ZGVkLCBhcyBtdWNoIGFzIHBvc3NpYmxlIG9mIHRoZSBsYXN0IGxpbmUKKwkJCWluIGEgd2luZG93IHdpbGwgYmUgZGlzcGxheWVkLglXaGVuIG5vdCBpbmNsdWRlZCwgYQorCQkJbGFzdCBsaW5lIHRoYXQgZG9lc24ndCBmaXQgaXMgcmVwbGFjZWQgd2l0aCAiQCIgbGluZXMuCisJdWhleAkJU2hvdyB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGhleGFkZWNpbWFsIGFzIDx4eD4KKwkJCWluc3RlYWQgb2YgdXNpbmcgXkMgYW5kIH5DLgorCisJCQkJCQkqJ2VhZGlyZWN0aW9uJyogKidlYWQnKgorJ2VhZGlyZWN0aW9uJyAnZWFkJwlzdHJpbmcJKGRlZmF1bHQgImJvdGgiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArdmVydHNwbGl0CisJCQlmZWF0dXJlfQorCVRlbGxzIHdoZW4gdGhlICdlcXVhbGFsd2F5cycgb3B0aW9uIGFwcGxpZXM6CisJCXZlcgl2ZXJ0aWNhbGx5LCB3aWR0aCBvZiB3aW5kb3dzIGlzIG5vdCBhZmZlY3RlZAorCQlob3IJaG9yaXpvbnRhbGx5LCBoZWlnaHQgb2Ygd2luZG93cyBpcyBub3QgYWZmZWN0ZWQKKwkJYm90aAl3aWR0aCBhbmQgaGVpZ2h0IG9mIHdpbmRvd3MgaXMgYWZmZWN0ZWQKKworCQkJICAgKidlZCcqIConZWRjb21wYXRpYmxlJyogKidub2VkJyogKidub2VkY29tcGF0aWJsZScqCisnZWRjb21wYXRpYmxlJyAnZWQnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJTWFrZXMgdGhlICdnJyBhbmQgJ2MnIGZsYWdzIG9mIHRoZSAiOnN1YnN0aXR1dGUiIGNvbW1hbmQgdG8gYmUKKwl0b2dnbGVkIGVhY2ggdGltZSB0aGUgZmxhZyBpcyBnaXZlbi4gIFNlZSB8Y29tcGxleC1jaGFuZ2V8LiAgU2VlCisJYWxzbyAnZ2RlZmF1bHQnIG9wdGlvbi4KKwlTd2l0Y2hpbmcgdGhpcyBvcHRpb24gb24gaXMgZGlzY291cmFnZWQhCisKKwkJCQkJKidlbmNvZGluZycqIConZW5jJyogKkU1NDMqCisnZW5jb2RpbmcnICdlbmMnCXN0cmluZyAoZGVmYXVsdDogImxhdGluMSIgb3IgdmFsdWUgZnJvbSAkTEFORykKKwkJCWdsb2JhbAorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJU2V0cyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHVzZWQgaW5zaWRlIFZpbS4gIEl0IGFwcGxpZXMgdG8gdGV4dCBpbgorCXRoZSBidWZmZXJzLCByZWdpc3RlcnMsIFN0cmluZ3MgaW4gZXhwcmVzc2lvbnMsIHRleHQgc3RvcmVkIGluIHRoZQorCXZpbWluZm8gZmlsZSwgZXRjLiAgSXQgc2V0cyB0aGUga2luZCBvZiBjaGFyYWN0ZXJzIHdoaWNoIFZpbSBjYW4gd29yaworCXdpdGguICBTZWUgfGVuY29kaW5nLW5hbWVzfCBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcy4KKworCU5PVEU6IENoYW5naW5nIHRoaXMgb3B0aW9uIHdpbGwgbm90IGNoYW5nZSB0aGUgZW5jb2Rpbmcgb2YgdGhlCisJZXhpc3RpbmcgdGV4dCBpbiBWaW0uICBJdCBtYXkgY2F1c2UgbXVsdGktYnl0ZSB0ZXh0IHRvIGJlY29tZSBpbnZhbGlkLgorCUl0IHNob3VsZCBub3JtYWxseSBiZSBrZXB0IGF0IGl0cyBkZWZhdWx0IHZhbHVlLCBvciBzZXQgd2hlbiBWaW0KKwlzdGFydHMgdXAuICBTZWUgfG11bHRpYnl0ZXwuCisKKwlOT1RFOiBGb3IgR1RLKyAyIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBzZXQgJ2VuY29kaW5nJyB0bworCSJ1dGYtOCIuICBBbHRob3VnaCBjYXJlIGhhcyBiZWVuIHRha2VuIHRvIGFsbG93IGRpZmZlcmVudCB2YWx1ZXMgb2YKKwknZW5jb2RpbmcnLCAidXRmLTgiIGlzIHRoZSBuYXR1cmFsIGNob2ljZSBmb3IgdGhlIGVudmlyb25tZW50IGFuZAorCWF2b2lkcyB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uIG92ZXJoZWFkLiAgInV0Zi04IiBoYXMgbm90IGJlZW4gbWFkZQorCXRoZSBkZWZhdWx0IHRvIHByZXZlbnQgZGlmZmVyZW50IGJlaGF2aW91ciBvZiB0aGUgR1VJIGFuZCB0ZXJtaW5hbAorCXZlcnNpb25zLCBhbmQgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIGVuY29kaW5nIG9mIG5ld2x5IGNyZWF0ZWQgZmlsZXMKKwl3aXRob3V0IHlvdXIga25vd2xlZGdlIChpbiBjYXNlICdmaWxlZW5jb2RpbmdzJyBpcyBlbXB0eSkuCisKKwlUaGUgY2hhcmFjdGVyIGVuY29kaW5nIG9mIGZpbGVzIGNhbiBiZSBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnLgorCVRoaXMgaXMgc3BlY2lmaWVkIHdpdGggJ2ZpbGVlbmNvZGluZycuCVRoZSBjb252ZXJzaW9uIGlzIGRvbmUgd2l0aAorCWljb252KCkgb3IgYXMgc3BlY2lmaWVkIHdpdGggJ2NoYXJjb252ZXJ0Jy4KKworCU5vcm1hbGx5ICdlbmNvZGluZycgd2lsbCBiZSBlcXVhbCB0byB5b3VyIGN1cnJlbnQgbG9jYWxlLiAgVGhpcyB3aWxsCisJYmUgdGhlIGRlZmF1bHQgaWYgVmltIHJlY29nbml6ZXMgeW91ciBlbnZpcm9ubWVudCBzZXR0aW5ncy4gIElmCisJJ2VuY29kaW5nJyBpcyBub3Qgc2V0IHRvIHRoZSBjdXJyZW50IGxvY2FsZSwgJ3Rlcm1lbmNvZGluZycgbXVzdCBiZQorCXNldCB0byBjb252ZXJ0IHR5cGVkIGFuZCBkaXNwbGF5ZWQgdGV4dC4gIFNlZSB8ZW5jb2RpbmctdGFibGV8LgorCisJV2hlbiB5b3Ugc2V0IHRoaXMgb3B0aW9uLCBpdCBmaXJlcyB0aGUgfEVuY29kaW5nQ2hhbmdlZHwgYXV0b2NvbW1hbmQKKwlldmVudCBzbyB0aGF0IHlvdSBjYW4gc2V0IHVwIGZvbnRzIGlmIG5lY2Vzc2FyeS4KKworCVdoZW4gdGhlIG9wdGlvbiBpcyBzZXQsIHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLiAgVGh1cworCXlvdSBjYW4gc2V0IGl0IHdpdGggdXBwZXJjYXNlIHZhbHVlcyB0b28uICBVbmRlcnNjb3JlcyBhcmUgdHJhbnNsYXRlZAorCXRvICctJyBzaWducy4KKwlXaGVuIHRoZSBlbmNvZGluZyBpcyByZWNvZ25pemVkLCBpdCBpcyBjaGFuZ2VkIHRvIHRoZSBzdGFuZGFyZCBuYW1lLgorCUZvciBleGFtcGxlICJMYXRpbi0xIiBiZWNvbWVzICJsYXRpbjEiLCAiSVNPXzg4NTkyIiBiZWNvbWVzCisJImlzby04ODU5LTIiIGFuZCAidXRmOCIgYmVjb21lcyAidXRmLTgiLgorCisJTm90ZTogImxhdGluMSIgaXMgYWxzbyB1c2VkIHdoZW4gdGhlIGVuY29kaW5nIGNvdWxkIG5vdCBiZSBkZXRlY3RlZC4KKwlUaGlzIG9ubHkgd29ya3Mgd2hlbiBlZGl0aW5nIGZpbGVzIGluIHRoZSBzYW1lIGVuY29kaW5nISAgV2hlbiB0aGUKKwlhY3R1YWwgY2hhcmFjdGVyIHNldCBpcyBub3QgbGF0aW4xLCBtYWtlIHN1cmUgJ2ZpbGVlbmNvZGluZycgYW5kCisJJ2ZpbGVlbmNvZGluZ3MnIGFyZSBlbXB0eS4gIFdoZW4gY29udmVyc2lvbiBpcyBuZWVkZWQsIHN3aXRjaCB0byB1c2luZworCXV0Zi04LgorCisJV2hlbiAidW5pY29kZSIsICJ1Y3MtMiIgb3IgInVjcy00IiBpcyB1c2VkLCBWaW0gaW50ZXJuYWxseSB1c2VzIHV0Zi04LgorCVlvdSBkb24ndCBub3RpY2UgdGhpcyB3aGlsZSBlZGl0aW5nLCBidXQgaXQgZG9lcyBtYXR0ZXIgZm9yIHRoZQorCXx2aW1pbmZvLWZpbGV8LiAgQW5kIFZpbSBleHBlY3RzIHRoZSB0ZXJtaW5hbCB0byB1c2UgdXRmLTggdG9vLiAgVGh1cworCXNldHRpbmcgJ2VuY29kaW5nJyB0byBvbmUgb2YgdGhlc2UgdmFsdWVzIGluc3RlYWQgb2YgdXRmLTggb25seSBoYXMKKwllZmZlY3QgZm9yIGVuY29kaW5nIHVzZWQgZm9yIGZpbGVzIHdoZW4gJ2ZpbGVlbmNvZGluZycgaXMgZW1wdHkuCisKKwkgV2hlbiAnZW5jb2RpbmcnIGlzIHNldCB0byBhIFVuaWNvZGUgZW5jb2RpbmcsIGFuZCAnZmlsZWVuY29kaW5ncycgd2FzCisJIG5vdCBzZXQgeWV0LCB0aGUgZGVmYXVsdCBmb3IgJ2ZpbGVlbmNvZGluZ3MnIGlzIGNoYW5nZWQuCisKKwkJCSonZW5kb2ZsaW5lJyogKidlb2wnKiAqJ25vZW5kb2ZsaW5lJyogKidub2VvbCcqCisnZW5kb2ZsaW5lJyAnZW9sJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVdoZW4gd3JpdGluZyBhIGZpbGUgYW5kIHRoaXMgb3B0aW9uIGlzIG9mZiBhbmQgdGhlICdiaW5hcnknIG9wdGlvbgorCWlzIG9uLCBubyA8RU9MPiB3aWxsIGJlIHdyaXR0ZW4gZm9yIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUuCVRoaXMKKwlvcHRpb24gaXMgYXV0b21hdGljYWxseSBzZXQgd2hlbiBzdGFydGluZyB0byBlZGl0IGEgbmV3IGZpbGUsIHVubGVzcworCXRoZSBmaWxlIGRvZXMgbm90IGhhdmUgYW4gPEVPTD4gZm9yIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUsIGluCisJd2hpY2ggY2FzZSBpdCBpcyByZXNldC4gIE5vcm1hbGx5IHlvdSBkb24ndCBoYXZlIHRvIHNldCBvciByZXNldCB0aGlzCisJb3B0aW9uLiAgV2hlbiAnYmluYXJ5JyBpcyBvZmYgdGhlIHZhbHVlIGlzIG5vdCB1c2VkIHdoZW4gd3JpdGluZyB0aGUKKwlmaWxlLiAgV2hlbiAnYmluYXJ5JyBpcyBvbiBpdCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoZSBwcmVzZW5jZSBvZiBhCisJPEVPTD4gZm9yIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGZpbGUsIHNvIHRoYXQgd2hlbiB5b3Ugd3JpdGUgdGhlIGZpbGUKKwl0aGUgc2l0dWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGZpbGUgY2FuIGJlIGtlcHQuICBCdXQgeW91IGNhbiBjaGFuZ2UKKwlpdCBpZiB5b3Ugd2FudCB0by4KKworCQkJICAgICAqJ2VxdWFsYWx3YXlzJyogKidlYScqIConbm9lcXVhbGFsd2F5cycqIConbm9lYScqCisnZXF1YWxhbHdheXMnICdlYScJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uLCBhbGwgdGhlIHdpbmRvd3MgYXJlIGF1dG9tYXRpY2FsbHkgbWFkZSB0aGUgc2FtZSBzaXplIGFmdGVyCisJc3BsaXR0aW5nIG9yIGNsb3NpbmcgYSB3aW5kb3cuCVdoZW4gb2ZmLCBzcGxpdHRpbmcgYSB3aW5kb3cgd2lsbAorCXJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgY3VycmVudCB3aW5kb3cgYW5kIGxlYXZlIHRoZSBvdGhlciB3aW5kb3dzIHRoZQorCXNhbWUuICBXaGVuIGNsb3NpbmcgYSB3aW5kb3cgdGhlIGV4dHJhIGxpbmVzIGFyZSBnaXZlbiB0byB0aGUgd2luZG93CisJbmV4dCB0byBpdCAoZGVwZW5kaW5nIG9uICdzcGxpdGJlbG93JyBhbmQgJ3NwbGl0cmlnaHQnKS4KKwlXaGVuIG1peGluZyB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkgc3BsaXQgd2luZG93cywgYSBtaW5pbWFsIHNpemUKKwlpcyBjb21wdXRlZCBhbmQgc29tZSB3aW5kb3dzIG1heSBiZSBsYXJnZXIgaWYgdGhlcmUgaXMgcm9vbS4gIFRoZQorCSdlYWRpcmVjdGlvbicgb3B0aW9uIHRlbGxzIGluIHdoaWNoIGRpcmVjdGlvbiB0aGUgc2l6ZSBpcyBhZmZlY3RlZC4KKwlDaGFuZ2luZyB0aGUgaGVpZ2h0IG9mIGEgd2luZG93IGNhbiBiZSBhdm9pZGVkIGJ5IHNldHRpbmcKKwknd2luZml4aGVpZ2h0Jy4KKworCQkJCQkJKidlcXVhbHByZycqIConZXAnKgorJ2VxdWFscHJnJyAnZXAnCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCUV4dGVybmFsIHByb2dyYW0gdG8gdXNlIGZvciAiPSIgY29tbWFuZC4gIFdoZW4gdGhpcyBvcHRpb24gaXMgZW1wdHkKKwl0aGUgaW50ZXJuYWwgZm9ybWF0dGluZyBmdW5jdGlvbnMgYXJlIHVzZWQgKCdsaXNwJywgJ2NpbmRlbnQnIG9yCisJJ2luZGVudGV4cHInKS4KKwlFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwKKwlhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCSonZXJyb3JiZWxscycqIConZWInKiAqJ25vZXJyb3JiZWxscycqIConbm9lYicqCisnZXJyb3JiZWxscycgJ2ViJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCVJpbmcgdGhlIGJlbGwgKGJlZXAgb3Igc2NyZWVuIGZsYXNoKSBmb3IgZXJyb3IgbWVzc2FnZXMuICBUaGlzIG9ubHkKKwltYWtlcyBhIGRpZmZlcmVuY2UgZm9yIGVycm9yIG1lc3NhZ2VzLCB0aGUgYmVsbCB3aWxsIGJlIHVzZWQgYWx3YXlzCisJZm9yIGEgbG90IG9mIGVycm9ycyB3aXRob3V0IGEgbWVzc2FnZSAoZS5nLiwgaGl0dGluZyA8RXNjPiBpbiBOb3JtYWwKKwltb2RlKS4JU2VlICd2aXN1YWxiZWxsJyBvbiBob3cgdG8gbWFrZSB0aGUgYmVsbCBiZWhhdmUgbGlrZSBhIGJlZXAsCisJc2NyZWVuIGZsYXNoIG9yIGRvIG5vdGhpbmcuCisKKwkJCQkJCSonZXJyb3JmaWxlJyogKidlZicqCisnZXJyb3JmaWxlJyAnZWYnCXN0cmluZwkoQW1pZ2EgZGVmYXVsdDogIkF6dGVjQy5FcnIiLAorCQkJCQlvdGhlcnM6ICJlcnJvcnMuZXJyIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwKKwkJCWZlYXR1cmV9CisJTmFtZSBvZiB0aGUgZXJyb3JmaWxlIGZvciB0aGUgUXVpY2tGaXggbW9kZSAoc2VlIHw6Y2Z8KS4KKwlXaGVuIHRoZSAiLXEiIGNvbW1hbmQtbGluZSBhcmd1bWVudCBpcyB1c2VkLCAnZXJyb3JmaWxlJyBpcyBzZXQgdG8gdGhlCisJZm9sbG93aW5nIGFyZ3VtZW50LiAgU2VlIHwtcXwuCisJTk9UIHVzZWQgZm9yIHRoZSAiOm1ha2UiIGNvbW1hbmQuICBTZWUgJ21ha2VlZicgZm9yIHRoYXQuCisJRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LgorCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ2Vycm9yZm9ybWF0JyogKidlZm0nKgorJ2Vycm9yZm9ybWF0JyAnZWZtJwlzdHJpbmcJKGRlZmF1bHQgaXMgdmVyeSBsb25nKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwKKwkJCWZlYXR1cmV9CisJU2NhbmYtbGlrZSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0IGZvciB0aGUgbGluZXMgaW4gdGhlIGVycm9yIGZpbGUKKwkoc2VlIHxlcnJvcmZvcm1hdHwpLgorCisJCQkJICAgICAqJ2VzY2tleXMnKiAqJ2VrJyogKidub2VzY2tleXMnKiAqJ25vZWsnKgorJ2VzY2tleXMnICdlaycJCWJvb2xlYW4JKFZpbSBkZWZhdWx0OiBvbiwgVmkgZGVmYXVsdDogb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUZ1bmN0aW9uIGtleXMgdGhhdCBzdGFydCB3aXRoIGFuIDxFc2M+IGFyZSByZWNvZ25pemVkIGluIEluc2VydAorCW1vZGUuICBXaGVuIHRoaXMgb3B0aW9uIGlzIG9mZiwgdGhlIGN1cnNvciBhbmQgZnVuY3Rpb24ga2V5cyBjYW5ub3QgYmUKKwl1c2VkIGluIEluc2VydCBtb2RlIGlmIHRoZXkgc3RhcnQgd2l0aCBhbiA8RXNjPi4gIFRoZSBhZHZhbnRhZ2Ugb2YKKwl0aGlzIGlzIHRoYXQgdGhlIHNpbmdsZSA8RXNjPiBpcyByZWNvZ25pemVkIGltbWVkaWF0ZWx5LCBpbnN0ZWFkIG9mCisJYWZ0ZXIgb25lIHNlY29uZC4gIEluc3RlYWQgb2YgcmVzZXR0aW5nIHRoaXMgb3B0aW9uLCB5b3UgbWlnaHQgd2FudCB0bworCXRyeSBjaGFuZ2luZyB0aGUgdmFsdWVzIGZvciAndGltZW91dGxlbicgYW5kICd0dGltZW91dGxlbicuICBOb3RlIHRoYXQKKwl3aGVuICdlc2NrZXlzJyBpcyBvZmYsIHlvdSBjYW4gc3RpbGwgbWFwIGFueXRoaW5nLCBidXQgdGhlIGN1cnNvciBrZXlzCisJd29uJ3Qgd29yayBieSBkZWZhdWx0LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ2V2ZW50aWdub3JlJyogKidlaScqCisnZXZlbnRpZ25vcmUnICdlaScJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2F1dG9jbWR8CisJCQlmZWF0dXJlfQorCUEgbGlzdCBvZiBhdXRvY29tbWFuZCBldmVudCBuYW1lcywgd2hpY2ggYXJlIHRvIGJlIGlnbm9yZWQuCisJV2hlbiBzZXQgdG8gImFsbCIsIGFsbCBhdXRvY29tbWFuZCBldmVudHMgYXJlIGlnbm9yZWQsIGF1dG9jb21tYW5kcworCXdpbGwgbm90IGJlIGV4ZWN1dGVkLgorCU90aGVyd2lzZSB0aGlzIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZXZlbnQgbmFtZXMuICBFeGFtcGxlOiA+CisJICAgIDpzZXQgZWk9V2luRW50ZXIsV2luTGVhdmUKKzwKKwkJCQkgKidleHBhbmR0YWInKiAqJ2V0JyogKidub2V4cGFuZHRhYicqIConbm9ldCcqCisnZXhwYW5kdGFiJyAnZXQnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCUluIEluc2VydCBtb2RlOiBVc2UgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZiBzcGFjZXMgdG8gaW5zZXJ0IGEKKwk8VGFiPi4JU3BhY2VzIGFyZSB1c2VkIGluIGluZGVudHMgd2l0aCB0aGUgJz4nIGFuZCAnPCcgY29tbWFuZHMgYW5kCisJd2hlbiAnYXV0b2luZGVudCcgaXMgb24uICBUbyBpbnNlcnQgYSByZWFsIHRhYiB3aGVuICdleHBhbmR0YWInIGlzCisJb24sIHVzZSBDVFJMLVY8VGFiPi4gIFNlZSBhbHNvIHw6cmV0YWJ8IGFuZCB8aW5zLWV4cGFuZHRhYnwuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCSonZXhyYycqIConZXgnKiAqJ25vZXhyYycqIConbm9leCcqCisnZXhyYycgJ2V4JwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJRW5hYmxlcyB0aGUgcmVhZGluZyBvZiAudmltcmMsIC5leHJjIGFuZCAuZ3ZpbXJjIGluIHRoZSBjdXJyZW50CisJZGlyZWN0b3J5LiAgSWYgeW91IHN3aXRjaCB0aGlzIG9wdGlvbiBvbiB5b3Ugc2hvdWxkIGFsc28gY29uc2lkZXIKKwlzZXR0aW5nIHRoZSAnc2VjdXJlJyBvcHRpb24gKHNlZSB8aW5pdGlhbGl6YXRpb258KS4gIFVzaW5nIGEgbG9jYWwKKwkuZXhyYywgLnZpbXJjIG9yIC5ndmltcmMgaXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgbGVhaywgdXNlIHdpdGggY2FyZSEKKwlhbHNvIHNlZSB8LnZpbXJjfCBhbmQgfGd1aS1pbml0fC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkqJ2ZpbGVlbmNvZGluZycqIConZmVuYycqICpFMjEzKgorJ2ZpbGVlbmNvZGluZycgJ2ZlbmMnCXN0cmluZyAoZGVmYXVsdDogIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZXwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCVNldHMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgdGhlIGZpbGUgb2YgdGhpcyBidWZmZXIuCisJV2hlbiAnZmlsZWVuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbSAnZW5jb2RpbmcnLCBjb252ZXJzaW9uIHdpbGwgYmUKKwlkb25lIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0aGUgZmlsZS4KKwlXaGVuICdmaWxlZW5jb2RpbmcnIGlzIGVtcHR5LCB0aGUgc2FtZSB2YWx1ZSBhcyAnZW5jb2RpbmcnIHdpbGwgYmUKKwl1c2VkIChubyBjb252ZXJzaW9uIHdoZW4gcmVhZGluZyBvciB3cml0aW5nIGEgZmlsZSkuCisJCVdBUk5JTkc6IENvbnZlcnNpb24gY2FuIGNhdXNlIGxvc3Mgb2YgaW5mb3JtYXRpb24hICBXaGVuCisJCSdlbmNvZGluZycgaXMgInV0Zi04IiBjb252ZXJzaW9uIGlzIG1vc3QgbGlrZWx5IGRvbmUgaW4gYSB3YXkKKwkJdGhhdCB0aGUgcmV2ZXJzZSBjb252ZXJzaW9uIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dC4gIFdoZW4KKwkJJ2VuY29kaW5nJyBpcyBub3QgInV0Zi04IiBzb21lIGNoYXJhY3RlcnMgbWF5IGJlIGxvc3QhCisJU2VlICdlbmNvZGluZycgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuICBBZGRpdGlvbmFsbHksIHZhbHVlcyBtYXkgYmUKKwlzcGVjaWZpZWQgdGhhdCBjYW4gYmUgaGFuZGxlZCBieSB0aGUgY29udmVydGVyLCBzZWUKKwl8bWJ5dGUtY29udmVyc2lvbnwuCisJV2hlbiByZWFkaW5nIGEgZmlsZSAnZmlsZWVuY29kaW5nJyB3aWxsIGJlIHNldCBmcm9tICdmaWxlZW5jb2RpbmdzJy4KKwlUbyByZWFkIGEgZmlsZSBpbiBhIGNlcnRhaW4gZW5jb2RpbmcgaXQgd29uJ3Qgd29yayBieSBzZXR0aW5nCisJJ2ZpbGVlbmNvZGluZycsIHVzZSB0aGUgfCsrZW5jfCBhcmd1bWVudC4KKwlQcmVwZW5kaW5nICI4Yml0LSIgYW5kICIyYnl0ZS0iIGhhcyBubyBtZWFuaW5nIGhlcmUsIHRoZXkgYXJlIGlnbm9yZWQuCisJV2hlbiB0aGUgb3B0aW9uIGlzIHNldCwgdGhlIHZhbHVlIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuICBUaHVzCisJeW91IGNhbiBzZXQgaXQgd2l0aCB1cHBlcmNhc2UgdmFsdWVzIHRvby4gICdfJyBjaGFyYWN0ZXJzIGFyZQorCXJlcGxhY2VkIHdpdGggJy0nLiAgSWYgYSBuYW1lIGlzIHJlY29nbml6ZWQgZnJvbSB0aGUgbGlzdCBmb3IKKwknZW5jb2RpbmcnLCBpdCBpcyByZXBsYWNlZCBieSB0aGUgc3RhbmRhcmQgbmFtZS4gIEZvciBleGFtcGxlCisJIklTTzg4NTktMiIgYmVjb21lcyAiaXNvLTg4NTktMiIuCisJV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIGFmdGVyIHN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlLCB0aGUgJ21vZGlmaWVkJworCW9wdGlvbiBpcyBzZXQsIGJlY2F1c2UgdGhlIGZpbGUgd291bGQgYmUgZGlmZmVyZW50IHdoZW4gd3JpdHRlbi4KKwlJZiB5b3UgZG8gdGhpcyBpbiBhIG1vZGVsaW5lLCB5b3UgbWlnaHQgd2FudCB0byBzZXQgJ25vbW9kaWZpZWQnIHRvCisJYXZvaWQgdGhpcy4KKwlUaGlzIG9wdGlvbiBjYW4gbm90IGJlIGNoYW5nZWQgd2hlbiAnbW9kaWZpYWJsZScgaXMgb2ZmLgorCisJCQkJCQkJKidmZScqCisJTk9URTogQmVmb3JlIHZlcnNpb24gNi4wIHRoaXMgb3B0aW9uIHNwZWNpZmllZCB0aGUgZW5jb2RpbmcgZm9yIHRoZQorCXdob2xlIG9mIFZpbSwgdGhpcyB3YXMgYSBtaXN0YWtlLiAgTm93IHVzZSAnZW5jb2RpbmcnIGluc3RlYWQuCVRoZQorCW9sZCBzaG9ydCBuYW1lIHdhcyAnZmUnLCB3aGljaCBpcyBubyBsb25nZXIgdXNlZC4KKworCQkJCQkqJ2ZpbGVlbmNvZGluZ3MnKiAqJ2ZlbmNzJyoKKydmaWxlZW5jb2RpbmdzJyAnZmVuY3MnCXN0cmluZyAoZGVmYXVsdDogInVjcy1ib20iLCAidWNzLWJvbSx1dGYtOCxsYXRpbjEiCisJCQkJICAgIHdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gYSBVbmljb2RlIHZhbHVlKQorCQkJZ2xvYmFsCisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K211bHRpX2J5dGV8CisJCQlmZWF0dXJlfQorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGlzIGEgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzIGNvbnNpZGVyZWQgd2hlbiBzdGFydGluZyB0byBlZGl0CisJYW4gZXhpc3RpbmcgZmlsZS4gIFdoZW4gYSBmaWxlIGlzIHJlYWQsIFZpbSB0cmllcyB0byB1c2UgdGhlIGZpcnN0CisJbWVudGlvbmVkIGNoYXJhY3RlciBlbmNvZGluZy4gIElmIGFuIGVycm9yIGlzIGRldGVjdGVkLCB0aGUgbmV4dCBvbmUKKwlpbiB0aGUgbGlzdCBpcyB0cmllZC4gIFdoZW4gYW4gZW5jb2RpbmcgaXMgZm91bmQgdGhhdCB3b3JrcywKKwknZmlsZWVuY29kaW5nJyBpcyBzZXQgdG8gaXQuCUlmIGFsbCBmYWlsLCAnZmlsZWVuY29kaW5nJyBpcyBzZXQgdG8KKwlhbiBlbXB0eSBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoZSB2YWx1ZSBvZiAnZW5jb2RpbmcnIGlzIHVzZWQuCisJCVdBUk5JTkc6IENvbnZlcnNpb24gY2FuIGNhdXNlIGxvc3Mgb2YgaW5mb3JtYXRpb24hICBXaGVuCisJCSdlbmNvZGluZycgaXMgInV0Zi04IiAob3Igb25lIG9mIHRoZSBvdGhlciBVbmljb2RlIHZhcmlhbnRzKQorCQljb252ZXJzaW9uIGlzIG1vc3QgbGlrZWx5IGRvbmUgaW4gYSB3YXkgdGhhdCB0aGUgcmV2ZXJzZQorCQljb252ZXJzaW9uIHJlc3VsdHMgaW4gdGhlIHNhbWUgdGV4dC4gIFdoZW4gJ2VuY29kaW5nJyBpcyBub3QKKwkJInV0Zi04IiBzcGVjaWFsIGNoYXJhY3RlcnMgbWF5IGJlIGxvc3QhCisJRm9yIGFuIGVtcHR5IGZpbGUgb3IgYSBmaWxlIHdpdGggb25seSBBU0NJSSBjaGFyYWN0ZXJzIG1vc3QgZW5jb2RpbmdzCisJd2lsbCB3b3JrIGFuZCB0aGUgZmlyc3QgZW50cnkgb2YgJ2ZpbGVlbmNvZGluZ3MnIHdpbGwgYmUgdXNlZCAoZXhjZXB0CisJInVjcy1ib20iLCB3aGljaCByZXF1aXJlcyB0aGUgQk9NIHRvIGJlIHByZXNlbnQpLiAgSWYgeW91IHByZWZlcgorCWFub3RoZXIgZW5jb2RpbmcgdXNlIGFuIEJ1ZlJlYWRQb3N0IGF1dG9jb21tYW5kIGV2ZW50IHRvIHRlc3QgaWYgeW91cgorCXByZWZlcnJlZCBlbmNvZGluZyBpcyB0byBiZSB1c2VkLiAgRXhhbXBsZTogPgorCQlhdSBCdWZSZWFkUG9zdCAqIGlmIHNlYXJjaCgnXFMnLCAndycpID09IDAgfAorCQkJXCBzZXQgZmVuYz1pc28tMjAyMi1qcCB8IGVuZGlmCis8CVRoaXMgc2V0cyAnZmlsZWVuY29kaW5nJyB0byAiaXNvLTIwMjItanAiIGlmIHRoZSBmaWxlIGRvZXMgbm90IGNvbnRhaW4KKwlub24tYmxhbmsgY2hhcmFjdGVycy4KKwlOb3RlIHRoYXQgJ2ZpbGVlbmNvZGluZ3MnIGlzIG5vdCB1c2VkIGZvciBhbiBuZXcgZmlsZSwgJ2ZpbGVlbmNvZGluZycKKwlpcyBhbHdheXMgZW1wdHkgdGhlbi4gIFRoaXMgbWVhbnMgdGhhdCBhIG5vbi1leGlzdGluZyBmaWxlIG1heSBnZXQgYQorCWRpZmZlcmVudCBlbmNvZGluZyB0aGFuIGFuIGVtcHR5IGZpbGUuCisJVGhlIHNwZWNpYWwgdmFsdWUgInVjcy1ib20iIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGZvciBhIFVuaWNvZGUgQk9NCisJKEJ5dGUgT3JkZXIgTWFyaykgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLiAgSXQgbXVzdCBub3QgYmUgcHJlY2VkZWQKKwlieSAidXRmLTgiIG9yIGFub3RoZXIgVW5pY29kZSBlbmNvZGluZyBmb3IgdGhpcyB0byB3b3JrIHByb3Blcmx5LgorCUFuIGVudHJ5IGZvciBhbiA4LWJpdCBlbmNvZGluZyAoZS5nLiwgImxhdGluMSIpIHNob3VsZCBiZSB0aGUgbGFzdCwKKwliZWNhdXNlIFZpbSBjYW5ub3QgZGV0ZWN0IGFuIGVycm9yLCB0aHVzIHRoZSBlbmNvZGluZyBpcyBhbHdheXMKKwlhY2NlcHRlZC4KKwlXUk9ORyBWQUxVRVM6CQkJV0hBVCdTIFdST05HOgorCQlsYXRpbjEsdXRmLTgJCSJsYXRpbjEiIHdpbGwgYWx3YXlzIGJlIHVzZWQKKwkJdXRmLTgsdWNzLWJvbSxsYXRpbjEJQk9NIHdvbid0IGJlIHJlY29nbml6ZWQgaW4gYW4gdXRmLTgKKwkJCQkJZmlsZQorCQljcDEyNTAsbGF0aW4xCQkiY3AxMjUwIiB3aWxsIGFsd2F5cyBiZSB1c2VkCisJSWYgJ2ZpbGVlbmNvZGluZ3MnIGlzIGVtcHR5LCAnZmlsZWVuY29kaW5nJyBpcyBub3QgbW9kaWZpZWQuCisJU2VlICdmaWxlZW5jb2RpbmcnIGZvciB0aGUgcG9zc2libGUgdmFsdWVzLgorCVNldHRpbmcgdGhpcyBvcHRpb24gZG9lcyBub3QgaGF2ZSBhbiBlZmZlY3QgdW50aWwgdGhlIG5leHQgdGltZSBhIGZpbGUKKwlpcyByZWFkLgorCisJCQkJCSonZmlsZWZvcm1hdCcqIConZmYnKgorJ2ZpbGVmb3JtYXQnICdmZicJc3RyaW5nIChNUy1ET1MsIE1TLVdpbmRvd3MsIE9TLzIgZGVmYXVsdDogImRvcyIsCisJCQkJVW5peCBkZWZhdWx0OiAidW5peCIsCisJCQkJTWFjaW50b3NoIGRlZmF1bHQ6ICJtYWMiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVRoaXMgZ2l2ZXMgdGhlIDxFT0w+IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwgd2hpY2ggaXMgdXNlZCBmb3IKKwlyZWFkaW5nL3dyaXRpbmcgdGhlIGJ1ZmZlciBmcm9tL3RvIGEgZmlsZToKKwkgICAgZG9zCSAgICA8Q1I+IDxOTD4KKwkgICAgdW5peCAgICA8Tkw+CisJICAgIG1hYwkgICAgPENSPgorCVdoZW4gImRvcyIgaXMgdXNlZCwgQ1RSTC1aIGF0IHRoZSBlbmQgb2YgYSBmaWxlIGlzIGlnbm9yZWQuCisJU2VlIHxmaWxlLWZvcm1hdHN8IGFuZCB8ZmlsZS1yZWFkfC4KKwlGb3IgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBvZiB0aGUgZmlsZSBzZWUgJ2ZpbGVlbmNvZGluZycuCisJV2hlbiAnYmluYXJ5JyBpcyBzZXQsIHRoZSB2YWx1ZSBvZiAnZmlsZWZvcm1hdCcgaXMgaWdub3JlZCwgZmlsZSBJL08KKwl3b3JrcyBsaWtlIGl0IHdhcyBzZXQgdG8gInVuaXgnLgorCVRoaXMgb3B0aW9uIGlzIHNldCBhdXRvbWF0aWNhbGx5IHdoZW4gc3RhcnRpbmcgdG8gZWRpdCBhIGZpbGUgYW5kCisJJ2ZpbGVmb3JtYXRzJyBpcyBub3QgZW1wdHkgYW5kICdiaW5hcnknIGlzIG9mZi4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgYWZ0ZXIgc3RhcnRpbmcgdG8gZWRpdCBhIGZpbGUsIHRoZSAnbW9kaWZpZWQnCisJb3B0aW9uIGlzIHNldCwgYmVjYXVzZSB0aGUgZmlsZSB3b3VsZCBiZSBkaWZmZXJlbnQgd2hlbiB3cml0dGVuLgorCVRoaXMgb3B0aW9uIGNhbiBub3QgYmUgY2hhbmdlZCB3aGVuICdtb2RpZmlhYmxlJyBpcyBvZmYuCisJRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byAiZG9zIiwKKwkndGV4dG1vZGUnIGlzIHNldCwgb3RoZXJ3aXNlICd0ZXh0bW9kZScgaXMgcmVzZXQuCisKKwkJCQkJKidmaWxlZm9ybWF0cycqIConZmZzJyoKKydmaWxlZm9ybWF0cycgJ2ZmcycJc3RyaW5nIChkZWZhdWx0OgorCQkJCVZpbStWaQlNUy1ET1MsIE1TLVdpbmRvd3MgT1MvMjogImRvcyx1bml4IiwKKwkJCQlWaW0JVW5peDogInVuaXgsZG9zIiwKKwkJCQlWaW0JTWFjOiAibWFjLHVuaXgsZG9zIiwKKwkJCQlWaQlDeWd3aW46ICJ1bml4LGRvcyIsCisJCQkJVmkJb3RoZXJzOiAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGdpdmVzIHRoZSBlbmQtb2YtbGluZSAoPEVPTD4pIGZvcm1hdHMgdGhhdCB3aWxsIGJlIHRyaWVkIHdoZW4KKwlzdGFydGluZyB0byBlZGl0IGEgbmV3IGJ1ZmZlciBhbmQgd2hlbiByZWFkaW5nIGEgZmlsZSBpbnRvIGFuIGV4aXN0aW5nCisJYnVmZmVyOgorCS0gV2hlbiBlbXB0eSwgdGhlIGZvcm1hdCBkZWZpbmVkIHdpdGggJ2ZpbGVmb3JtYXQnIHdpbGwgYmUgdXNlZAorCSAgYWx3YXlzLiAgSXQgaXMgbm90IHNldCBhdXRvbWF0aWNhbGx5LgorCS0gV2hlbiBzZXQgdG8gb25lIG5hbWUsIHRoYXQgZm9ybWF0IHdpbGwgYmUgdXNlZCB3aGVuZXZlciBhIG5ldyBidWZmZXIKKwkgIGlzIG9wZW5lZC4gICdmaWxlZm9ybWF0JyBpcyBzZXQgYWNjb3JkaW5nbHkgZm9yIHRoYXQgYnVmZmVyLglUaGUKKwkgICdmaWxlZm9ybWF0cycgbmFtZSB3aWxsIGJlIHVzZWQgd2hlbiBhIGZpbGUgaXMgcmVhZCBpbnRvIGFuIGV4aXN0aW5nCisJICBidWZmZXIsIG5vIG1hdHRlciB3aGF0ICdmaWxlZm9ybWF0JyBmb3IgdGhhdCBidWZmZXIgaXMgc2V0IHRvLgorCS0gV2hlbiBtb3JlIHRoYW4gb25lIG5hbWUgaXMgcHJlc2VudCwgc2VwYXJhdGVkIGJ5IGNvbW1hcywgYXV0b21hdGljCisJICA8RU9MPiBkZXRlY3Rpb24gd2lsbCBiZSBkb25lIHdoZW4gcmVhZGluZyBhIGZpbGUuICBXaGVuIHN0YXJ0aW5nIHRvCisJICBlZGl0IGEgZmlsZSwgYSBjaGVjayBpcyBkb25lIGZvciB0aGUgPEVPTD46CisJICAxLiBJZiBhbGwgbGluZXMgZW5kIGluIDxDUj48Tkw+LCBhbmQgJ2ZpbGVmb3JtYXRzJyBpbmNsdWRlcyAiZG9zIiwKKwkgICAgICdmaWxlZm9ybWF0JyBpcyBzZXQgdG8gImRvcyIuCisJICAyLiBJZiBhIDxOTD4gaXMgZm91bmQgYW5kICdmaWxlZm9ybWF0cycgaW5jbHVkZXMgInVuaXgiLCAnZmlsZWZvcm1hdCcKKwkgICAgIGlzIHNldCB0byAidW5peCIuCU5vdGUgdGhhdCB3aGVuIGEgPE5MPiBpcyBmb3VuZCB3aXRob3V0IGEKKwkgICAgIHByZWNlZGluZyA8Q1I+LCAidW5peCIgaXMgcHJlZmVycmVkIG92ZXIgImRvcyIuCisJICAzLiBJZiAnZmlsZWZvcm1hdHMnIGluY2x1ZGVzICJtYWMiLCAnZmlsZWZvcm1hdCcgaXMgc2V0IHRvICJtYWMiLgorCSAgICAgVGhpcyBtZWFucyB0aGF0ICJtYWMiIGlzIG9ubHkgY2hvc2VuIHdoZW4gInVuaXgiIGlzIG5vdCBwcmVzZW50LAorCSAgICAgb3Igd2hlbiBubyA8Tkw+IGlzIGZvdW5kIGluIHRoZSBmaWxlLCBhbmQgd2hlbiAiZG9zIiBpcyBub3QKKwkgICAgIHByZXNlbnQsIG9yIG5vIDxDUj48Tkw+IGlzIHByZXNlbnQgaW4gdGhlIGZpbGUuCisJICAgICBBbHNvIGlmICJ1bml4IiB3YXMgZmlyc3QgY2hvc2VuLCBidXQgdGhlIGZpcnN0IDxDUj4gaXMgYmVmb3JlCisJICAgICB0aGUgZmlyc3QgPE5MPiBhbmQgdGhlcmUgYXBwZWFycyB0byBiZSBtb3JlIDxDUj4ncyB0aGFuIDxOTD4ncyBpbgorCSAgICAgdGhlIGZpbGUsIHRoZW4gJ2ZpbGVmb3JtYXQnIGlzIHNldCB0byAibWFjIi4KKwkgIDQuIElmICdmaWxlZm9ybWF0JyBpcyBzdGlsbCBub3Qgc2V0LCB0aGUgZmlyc3QgbmFtZSBmcm9tCisJICAgICAnZmlsZWZvcm1hdHMnIGlzIHVzZWQuCisJICBXaGVuIHJlYWRpbmcgYSBmaWxlIGludG8gYW4gZXhpc3RpbmcgYnVmZmVyLCB0aGUgc2FtZSBpcyBkb25lLCBidXQKKwkgIHRoaXMgaGFwcGVucyBsaWtlICdmaWxlZm9ybWF0JyBoYXMgYmVlbiBzZXQgYXBwcm9wcmlhdGVseSBmb3IgdGhhdAorCSAgZmlsZSBvbmx5LCB0aGUgb3B0aW9uIGlzIG5vdCBjaGFuZ2VkLgorCVdoZW4gJ2JpbmFyeScgaXMgc2V0LCB0aGUgdmFsdWUgb2YgJ2ZpbGVmb3JtYXRzJyBpcyBub3QgdXNlZC4KKworCUZvciBzeXN0ZW1zIHdpdGggYSBEb3MtbGlrZSA8RU9MPiAoPENSPjxOTD4pLCB3aGVuIHJlYWRpbmcgZmlsZXMgdGhhdAorCWFyZSAiOnNvdXJjZSJlZCBhbmQgZm9yIHZpbXJjIGZpbGVzLCBhdXRvbWF0aWMgPEVPTD4gZGV0ZWN0aW9uIG1heSBiZQorCWRvbmU6CisJLSBXaGVuICdmaWxlZm9ybWF0cycgaXMgZW1wdHksIHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBkZXRlY3Rpb24uICBEb3MKKwkgIGZvcm1hdCB3aWxsIGJlIHVzZWQuCisJLSBXaGVuICdmaWxlZm9ybWF0cycgaXMgc2V0IHRvIG9uZSBvciBtb3JlIG5hbWVzLCBhdXRvbWF0aWMgZGV0ZWN0aW9uCisJICBpcyBkb25lLiAgVGhpcyBpcyBiYXNlZCBvbiB0aGUgZmlyc3QgPE5MPiBpbiB0aGUgZmlsZTogSWYgdGhlcmUgaXMgYQorCSAgPENSPiBpbiBmcm9udCBvZiBpdCwgRG9zIGZvcm1hdCBpcyB1c2VkLCBvdGhlcndpc2UgVW5peCBmb3JtYXQgaXMKKwkgIHVzZWQuCisJQWxzbyBzZWUgfGZpbGUtZm9ybWF0c3wuCisJRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OiBXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCB0byBhbiBlbXB0eQorCXN0cmluZyBvciBvbmUgZm9ybWF0IChubyBjb21tYSBpcyBpbmNsdWRlZCksICd0ZXh0YXV0bycgaXMgcmVzZXQsCisJb3RoZXJ3aXNlICd0ZXh0YXV0bycgaXMgc2V0LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCSonZmlsZXR5cGUnKiAqJ2Z0JyoKKydmaWxldHlwZScgJ2Z0JwkJc3RyaW5nIChkZWZhdWx0OiAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCthdXRvY21kfAorCQkJZmVhdHVyZX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIEZpbGVUeXBlIGF1dG9jb21tYW5kIGV2ZW50IGlzIHRyaWdnZXJlZC4KKwlBbGwgYXV0b2NvbW1hbmRzIHRoYXQgbWF0Y2ggd2l0aCB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24gd2lsbCBiZQorCWV4ZWN1dGVkLiAgVGh1cyB0aGUgdmFsdWUgb2YgJ2ZpbGV0eXBlJyBpcyB1c2VkIGluIHBsYWNlIG9mIHRoZSBmaWxlCisJbmFtZS4KKwlPdGhlcndpc2UgdGhpcyBvcHRpb24gZG9lcyBub3QgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQgZmlsZSB0eXBlLgorCVRoaXMgb3B0aW9uIGlzIG5vcm1hbGx5IHNldCB3aGVuIHRoZSBmaWxlIHR5cGUgaXMgZGV0ZWN0ZWQuICBUbyBlbmFibGUKKwl0aGlzIHVzZSB0aGUgIjpmaWxldHlwZSBvbiIgY29tbWFuZC4gfDpmaWxldHlwZXwKKwlTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGEgZGlmZmVyZW50IHZhbHVlIGlzIG1vc3QgdXNlZnVsIGluIGEgbW9kZWxpbmUsCisJZm9yIGEgZmlsZSBmb3Igd2hpY2ggdGhlIGZpbGUgdHlwZSBpcyBub3QgYXV0b21hdGljYWxseSByZWNvZ25pemVkLgorCUV4YW1wbGUsIGZvciBpbiBhbiBJREwgZmlsZTogPgorCQkvKiB2aW06IHNldCBmaWxldHlwZT1pZGwgOiAqLworPAl8RmlsZVR5cGV8IHxmaWxldHlwZXN8CisJRG8gbm90IGNvbmZ1c2UgdGhpcyBvcHRpb24gd2l0aCAnb3NmaWxldHlwZScsIHdoaWNoIGlzIGZvciB0aGUgZmlsZQorCXR5cGUgdGhhdCBpcyBhY3R1YWxseSBzdG9yZWQgd2l0aCB0aGUgZmlsZS4KKwlUaGlzIG9wdGlvbiBpcyBub3QgY29waWVkIHRvIGFub3RoZXIgYnVmZmVyLCBpbmRlcGVuZGVudCBvZiB0aGUgJ3MnIG9yCisJJ1MnIGZsYWcgaW4gJ2Nwb3B0aW9ucycuCisKKwkJCQkJCSonZmlsbGNoYXJzJyogKidmY3MnKgorJ2ZpbGxjaGFycycgJ2ZjcycJc3RyaW5nCShkZWZhdWx0ICJ2ZXJ0OnwsZm9sZDotIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt3aW5kb3dzfAorCQkJYW5kIHwrZm9sZGluZ3wgZmVhdHVyZXN9CisJQ2hhcmFjdGVycyB0byBmaWxsIHRoZSBzdGF0dXNsaW5lcyBhbmQgdmVydGljYWwgc2VwYXJhdG9ycy4KKwlJdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGl0ZW1zOgorCisJICBpdGVtCQlkZWZhdWx0CQlVc2VkIGZvciB+CisJICBzdGw6YwkJJyAnIG9yICdeJwlzdGF0dXNsaW5lIG9mIHRoZSBjdXJyZW50IHdpbmRvdworCSAgc3RsbmM6YwknICcgb3IgJy0nCXN0YXR1c2xpbmUgb2YgdGhlIG5vbi1jdXJyZW50IHdpbmRvd3MKKwkgIHZlcnQ6YwknfCcJCXZlcnRpY2FsIHNlcGFyYXRvcnMgfDp2c3BsaXR8CisJICBmb2xkOmMJJy0nCQlmaWxsaW5nICdmb2xkdGV4dCcKKwkgIGRpZmY6YwknLScJCWRlbGV0ZWQgbGluZXMgb2YgdGhlICdkaWZmJyBvcHRpb24KKworCUFueSBvbmUgdGhhdCBpcyBvbWl0dGVkIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0LglGb3IgInN0bCIgYW5kCisJInN0bG5jIiB0aGUgc3BhY2Ugd2lsbCBiZSB1c2VkIHdoZW4gdGhlcmUgaXMgaGlnaGxpZ2h0aW5nLCAnXicgb3IgJy0nCisJb3RoZXJ3aXNlLgorCisJRXhhbXBsZTogPgorCSAgICA6c2V0IGZpbGxjaGFycz1zdGw6XixzdGxuYzotLHZlcnQ6XHwsZm9sZDotLGRpZmY6LQorPAlUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGRlZmF1bHQsIGV4Y2VwdCB0aGF0IHRoZXNlIGNoYXJhY3RlcnMgd2lsbCBhbHNvCisJYmUgdXNlZCB3aGVuIHRoZXJlIGlzIGhpZ2hsaWdodGluZy4KKworCVRoZSBoaWdobGlnaHRpbmcgdXNlZCBmb3IgdGhlc2UgaXRlbXM6CisJICBpdGVtCQloaWdobGlnaHQgZ3JvdXAgfgorCSAgc3RsOmMJCVN0YXR1c0xpbmUJCXxobC1TdGF0dXNMaW5lfAorCSAgc3RsbmM6YwlTdGF0dXNMaW5lTkMJCXxobC1TdGF0dXNMaW5lTkN8CisJICB2ZXJ0OmMJVmVydFNwbGl0CQl8aGwtVmVydFNwbGl0fAorCSAgZm9sZDpjCUZvbGRlZAkJCXxobC1Gb2xkZWR8CisJICBkaWZmOmMJRGlmZkRlbGV0ZQkJfGhsLURpZmZEZWxldGV8CisKKwkJCQkJKidma21hcCcqIConZmsnKiAqJ25vZmttYXAnKiAqJ25vZmsnKgorJ2ZrbWFwJyAnZmsnCQlib29sZWFuIChkZWZhdWx0IG9mZikJCQkqRTE5OCoKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCB0aGUga2V5Ym9hcmQgaXMgbWFwcGVkIGZvciB0aGUgRmFyc2kgY2hhcmFjdGVyIHNldC4KKwlOb3JtYWxseSB5b3Ugd291bGQgc2V0ICdhbGxvd3JldmlucycgYW5kIHVzZSBDVFJMLV8gaW4gaW5zZXJ0IG1vZGUgdG8KKwl0b2dnbGUgdGhpcyBvcHRpb24gfGlfQ1RSTC1ffC4JU2VlIHxmYXJzaS50eHR8LgorCisJCQkJCQkqJ2ZvbGRjbG9zZScqIConZmNsJyoKKydmb2xkY2xvc2UnICdmY2wnCXN0cmluZyAoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtmb2xkaW5nfAorCQkJZmVhdHVyZX0KKwlXaGVuIHNldCB0byAiYWxsIiwgYSBmb2xkIGlzIGNsb3NlZCB3aGVuIHRoZSBjdXJzb3IgaXNuJ3QgaW4gaXQgYW5kCisJaXRzIGxldmVsIGlzIGhpZ2hlciB0aGFuICdmb2xkbGV2ZWwnLiAgVXNlZnVsIGlmIHlvdSB3YW50IGZvbGRzIHRvCisJYXV0b21hdGljYWxseSBjbG9zZSB3aGVuIG1vdmluZyBvdXQgb2YgdGhlbS4KKworCQkJCQkJKidmb2xkY29sdW1uJyogKidmZGMnKgorJ2ZvbGRjb2x1bW4nICdmZGMnCW51bWJlciAoZGVmYXVsdCAwKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVdoZW4gbm9uLXplcm8sIGEgY29sdW1uIHdpdGggdGhlIHNwZWNpZmllZCB3aWR0aCBpcyBzaG93biBhdCB0aGUgc2lkZQorCW9mIHRoZSB3aW5kb3cgd2hpY2ggaW5kaWNhdGVzIG9wZW4gYW5kIGNsb3NlZCBmb2xkcy4gIFRoZSBtYXhpbXVtCisJdmFsdWUgaXMgMTIuCisJU2VlIHxmb2xkaW5nfC4KKworCQkJKidmb2xkZW5hYmxlJyogKidmZW4nKiAqJ25vZm9sZGVuYWJsZScqIConbm9mZW4nKgorJ2ZvbGRlbmFibGUnICdmZW4nCWJvb2xlYW4gKGRlZmF1bHQgb24pCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJV2hlbiBvZmYsIGFsbCBmb2xkcyBhcmUgb3Blbi4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkKKwlzd2l0Y2ggYmV0d2VlbiBzaG93aW5nIGFsbCB0ZXh0IHVuZm9sZGVkIGFuZCB2aWV3aW5nIHRoZSB0ZXh0IHdpdGgKKwlmb2xkcyAoaW5jbHVkaW5nIG1hbnVhbGx5IG9wZW5lZCBvciBjbG9zZWQgZm9sZHMpLiAgSXQgY2FuIGJlIHRvZ2dsZWQKKwl3aXRoIHRoZSB8eml8IGNvbW1hbmQuCVRoZSAnZm9sZGNvbHVtbicgd2lsbCByZW1haW4gYmxhbmsgd2hlbgorCSdmb2xkZW5hYmxlJyBpcyBvZmYuCisJVGhpcyBvcHRpb24gaXMgc2V0IGJ5IGNvbW1hbmRzIHRoYXQgY3JlYXRlIGEgbmV3IGZvbGQgb3IgY2xvc2UgYSBmb2xkLgorCVNlZSB8Zm9sZGluZ3wuCisKKwkJCQkJCSonZm9sZGV4cHInKiAqJ2ZkZScqCisnZm9sZGV4cHInICdmZGUnCXN0cmluZyAoZGVmYXVsdDogIjAiKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlvciB8K2V2YWx8IGZlYXR1cmV9CisJVGhlIGV4cHJlc3Npb24gdXNlZCBmb3Igd2hlbiAnZm9sZG1ldGhvZCcgaXMgImV4cHIiLiAgSXQgaXMgZXZhbHVhdGVkCisJZm9yIGVhY2ggbGluZSB0byBvYnRhaW4gaXRzIGZvbGQgbGV2ZWwuICBTZWUgfGZvbGQtZXhwcnwuICBBbHNvIHNlZQorCXxldmFsLXNhbmRib3h8LgorCisJCQkJCQkqJ2ZvbGRpZ25vcmUnKiAqJ2ZkaScqCisnZm9sZGlnbm9yZScgJ2ZkaScJc3RyaW5nIChkZWZhdWx0OiAiIyIpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJVXNlZCBvbmx5IHdoZW4gJ2ZvbGRtZXRob2QnIGlzICJpbmRlbnQiLiAgTGluZXMgc3RhcnRpbmcgd2l0aAorCWNoYXJhY3RlcnMgaW4gJ2ZvbGRpZ25vcmUnIHdpbGwgZ2V0IHRoZWlyIGZvbGQgbGV2ZWwgZnJvbSBzdXJyb3VuZGluZworCWxpbmVzLglXaGl0ZSBzcGFjZSBpcyBza2lwcGVkIGJlZm9yZSBjaGVja2luZyBmb3IgdGhpcyBjaGFyYWN0ZXIuCisJVGhlIGRlZmF1bHQgIiMiIHdvcmtzIHdlbGwgZm9yIEMgcHJvZ3JhbXMuICBTZWUgfGZvbGQtaW5kZW50fC4KKworCQkJCQkJKidmb2xkbGV2ZWwnKiAqJ2ZkbCcqCisnZm9sZGxldmVsJyAnZmRsJwludW1iZXIgKGRlZmF1bHQ6IDApCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJU2V0cyB0aGUgZm9sZCBsZXZlbDogRm9sZHMgd2l0aCBhIGhpZ2hlciBsZXZlbCB3aWxsIGJlIGNsb3NlZC4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIHplcm8gd2lsbCBjbG9zZSBhbGwgZm9sZHMuICBIaWdoZXIgbnVtYmVycyB3aWxsCisJY2xvc2UgZmV3ZXIgZm9sZHMuCisJVGhpcyBvcHRpb24gaXMgc2V0IGJ5IGNvbW1hbmRzIGxpa2UgfHptfCwgfHpNfCBhbmQgfHpSfC4KKwlTZWUgfGZvbGQtZm9sZGxldmVsfC4KKworCQkJCQkJKidmb2xkbGV2ZWxzdGFydCcqIConZmRscycqCisnZm9sZGxldmVsc3RhcnQnICdmZGxzJwludW1iZXIgKGRlZmF1bHQ6IC0xKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVNldHMgJ2ZvbGRsZXZlbCcgd2hlbiBzdGFydGluZyB0byBlZGl0IGFub3RoZXIgYnVmZmVyIGluIGEgd2luZG93LgorCVVzZWZ1bCB0byBhbHdheXMgc3RhcnQgZWRpdGluZyB3aXRoIGFsbCBmb2xkcyBjbG9zZWQgKHZhbHVlIHplcm8pLAorCXNvbWUgZm9sZHMgY2xvc2VkIChvbmUpIG9yIG5vIGZvbGRzIGNsb3NlZCAoOTkpLgorCVRoaXMgaXMgZG9uZSBiZWZvcmUgcmVhZGluZyBhbnkgbW9kZWxpbmUsIHRodXMgYSBzZXR0aW5nIGluIGEgbW9kZWxpbmUKKwlvdmVycnVsZXMgdGhpcyBvcHRpb24uCVN0YXJ0aW5nIHRvIGVkaXQgYSBmaWxlIGZvciB8ZGlmZi1tb2RlfCBhbHNvCisJaWdub3JlcyB0aGlzIG9wdGlvbiBhbmQgY2xvc2VzIGFsbCBmb2xkcy4KKwlJdCBpcyBhbHNvIGRvbmUgYmVmb3JlIEJ1ZlJlYWRQcmUgYXV0b2NvbW1hbmRzLCB0byBhbGxvdyBhbiBhdXRvY21kIHRvCisJb3ZlcnJ1bGUgdGhlICdmb2xkbGV2ZWwnIHZhbHVlIGZvciBzcGVjaWZpYyBmaWxlcy4KKwlXaGVuIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSwgaXQgaXMgbm90IHVzZWQuCisKKwkJCQkJCSonZm9sZG1hcmtlcicqIConZm1yJyogKkU1MzYqCisnZm9sZG1hcmtlcicgJ2ZtcicJc3RyaW5nIChkZWZhdWx0OiAie3t7LH19fSIpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJVGhlIHN0YXJ0IGFuZCBlbmQgbWFya2VyIHVzZWQgd2hlbiAnZm9sZG1ldGhvZCcgaXMgIm1hcmtlciIuICBUaGVyZQorCW11c3QgYmUgb25lIGNvbW1hLCB3aGljaCBzZXBhcmF0ZXMgdGhlIHN0YXJ0IGFuZCBlbmQgbWFya2VyLiAgVGhlCisJbWFya2VyIGlzIGEgbGl0ZXJhbCBzdHJpbmcgKGEgcmVndWxhciBleHByZXNzaW9uIHdvdWxkIGJlIHRvbyBzbG93KS4KKwlTZWUgfGZvbGQtbWFya2VyfC4KKworCQkJCQkJKidmb2xkbWV0aG9kJyogKidmZG0nKgorJ2ZvbGRtZXRob2QnICdmZG0nCXN0cmluZyAoZGVmYXVsdDogIm1hbnVhbCIpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJVGhlIGtpbmQgb2YgZm9sZGluZyB1c2VkIGZvciB0aGUgY3VycmVudCB3aW5kb3cuICBQb3NzaWJsZSB2YWx1ZXM6CisJfGZvbGQtbWFudWFsfAltYW51YWwJICAgIEZvbGRzIGFyZSBjcmVhdGVkIG1hbnVhbGx5LgorCXxmb2xkLWluZGVudHwJaW5kZW50CSAgICBMaW5lcyB3aXRoIGVxdWFsIGluZGVudCBmb3JtIGEgZm9sZC4KKwl8Zm9sZC1leHByfAlleHByCSAgICAnZm9sZGV4cHInIGdpdmVzIHRoZSBmb2xkIGxldmVsIG9mIGEgbGluZS4KKwl8Zm9sZC1tYXJrZXJ8CW1hcmtlcgkgICAgTWFya2VycyBhcmUgdXNlZCB0byBzcGVjaWZ5IGZvbGRzLgorCXxmb2xkLXN5bnRheHwJc3ludGF4CSAgICBTeW50YXggaGlnaGxpZ2h0aW5nIGl0ZW1zIHNwZWNpZnkgZm9sZHMuCisJfGZvbGQtZGlmZnwJZGlmZgkgICAgRm9sZCB0ZXh0IHRoYXQgaXMgbm90IGNoYW5nZWQuCisKKwkJCQkJCSonZm9sZG1pbmxpbmVzJyogKidmbWwnKgorJ2ZvbGRtaW5saW5lcycgJ2ZtbCcJbnVtYmVyIChkZWZhdWx0OiAxKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVNldHMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHNjcmVlbiBsaW5lcyBmb3IgYSBmb2xkIHRvIGJlIGRpc3BsYXllZAorCWNsb3NlZC4gIEFsc28gZm9yIG1hbnVhbGx5IGNsb3NlZCBmb2xkcy4KKwlOb3RlIHRoYXQgdGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qgb2Ygd2hhdCBpcyBkaXNwbGF5ZWQuICBBZnRlciB1c2luZworCSJ6YyIgdG8gY2xvc2UgYSBmb2xkLCB3aGljaCBpcyBkaXNwbGF5ZWQgb3BlbiBiZWNhdXNlIGl0J3Mgc21hbGxlcgorCXRoYW4gJ2ZvbGRtaW5saW5lcycsIGEgZm9sbG93aW5nICJ6YyIgbWF5IGNsb3NlIGEgY29udGFpbmluZyBmb2xkLgorCisJCQkJCQkqJ2ZvbGRuZXN0bWF4JyogKidmZG4nKgorJ2ZvbGRuZXN0bWF4JyAnZmRuJwludW1iZXIgKGRlZmF1bHQ6IDIwKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVNldHMgdGhlIG1heGltdW0gbmVzdGluZyBvZiBmb2xkcyBmb3IgdGhlICJpbmRlbnQiIGFuZCAic3ludGF4IgorCW1ldGhvZHMuICBUaGlzIGF2b2lkcyB0aGF0IHRvbyBtYW55IGZvbGRzIHdpbGwgYmUgY3JlYXRlZC4gIFVzaW5nIG1vcmUKKwl0aGFuIDIwIGRvZXNuJ3Qgd29yaywgYmVjYXVzZSB0aGUgaW50ZXJuYWwgbGltaXQgaXMgMjAuCisKKwkJCQkJCSonZm9sZG9wZW4nKiAqJ2ZkbycqCisnZm9sZG9wZW4nICdmZG8nCXN0cmluZyAoZGVmYXVsdDogImJsb2NrLGhvcixtYXJrLHBlcmNlbnQscXVpY2tmaXgsCisJCQkJCQkJICAgICBzZWFyY2gsdGFnLHVuZG8iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2ZvbGRpbmd8CisJCQlmZWF0dXJlfQorCVNwZWNpZmllcyBmb3Igd2hpY2ggdHlwZSBvZiBjb21tYW5kcyBmb2xkcyB3aWxsIGJlIG9wZW5lZCwgaWYgdGhlCisJY29tbWFuZCBtb3ZlcyB0aGUgY3Vyc29yIGludG8gYSBjbG9zZWQgZm9sZC4gIEl0IGlzIGEgY29tbWEgc2VwYXJhdGVkCisJbGlzdCBvZiBpdGVtcy4KKwkJaXRlbQkJY29tbWFuZHMgfgorCQlhbGwJCWFueQorCQlibG9jawkJIigiLCAieyIsICJbWyIsICJbeyIsIGV0Yy4KKwkJaG9yCQlob3Jpem9udGFsIG1vdmVtZW50czogImwiLCAidyIsICJmeCIsIGV0Yy4KKwkJaW5zZXJ0CQlhbnkgY29tbWFuZCBpbiBJbnNlcnQgbW9kZQorCQlqdW1wCQlmYXIganVtcHM6ICJHIiwgImdnIiwgZXRjLgorCQltYXJrCQlqdW1waW5nIHRvIGEgbWFyazogIidtIiwgQ1RSTC1PLCBldGMuCisJCXBlcmNlbnQJCSIlIgorCQlxdWlja2ZpeAkiOmNuIiwgIjpjcmV3IiwgIjptYWtlIiwgZXRjLgorCQlzZWFyY2gJCXNlYXJjaCBmb3IgYSBwYXR0ZXJuOiAiLyIsICJuIiwgIioiLCAiZ2QiLCBldGMuCisJCQkJKG5vdCBmb3IgYSBzZWFyY2ggcGF0dGVybiBpbiBhICI6IiBjb21tYW5kKQorCQl0YWcJCWp1bXBpbmcgdG8gYSB0YWc6ICI6dGEiLCBDVFJMLVQsIGV0Yy4KKwkJdW5kbwkJdW5kbyBvciByZWRvOiAidSIgYW5kIENUUkwtUgorCVdoZW4gdGhlIGNvbW1hbmQgaXMgcGFydCBvZiBhIG1hcHBpbmcgdGhpcyBvcHRpb24gaXMgbm90IHVzZWQuCUFkZAorCXRoZSB8enZ8IGNvbW1hbmQgdG8gdGhlIG1hcHBpbmcgdG8gZ2V0IHRoZSBzYW1lIGVmZmVjdC4KKwlXaGVuIGEgbW92ZW1lbnQgY29tbWFuZCBpcyB1c2VkIGZvciBhbiBvcGVyYXRvciAoZS5nLiwgImRsIiBvciAieSUiKQorCXRoaXMgb3B0aW9uIGlzIG5vdCB1c2VkLiAgVGhpcyBtZWFucyB0aGUgb3BlcmF0b3Igd2lsbCBpbmNsdWRlIHRoZQorCXdob2xlIGNsb3NlZCBmb2xkLgorCU5vdGUgdGhhdCB2ZXJ0aWNhbCBtb3ZlbWVudHMgYXJlIG5vdCBoZXJlLCBiZWNhdXNlIGl0IHdvdWxkIG1ha2UgaXQKKwl2ZXJ5IGRpZmZpY3VsdCB0byBtb3ZlIG9udG8gYSBjbG9zZWQgZm9sZC4KKwlJbiBpbnNlcnQgbW9kZSB0aGUgZm9sZHMgY29udGFpbmluZyB0aGUgY3Vyc29yIHdpbGwgYWx3YXlzIGJlIG9wZW4KKwl3aGVuIHRleHQgaXMgaW5zZXJ0ZWQuCisJVG8gY2xvc2UgZm9sZHMgeW91IGNhbiByZS1hcHBseSAnZm9sZGxldmVsJyB3aXRoIHRoZSB8enh8IGNvbW1hbmQgb3IKKwlzZXQgdGhlICdmb2xkY2xvc2UnIG9wdGlvbiB0byAiYWxsIi4KKworCQkJCQkJKidmb2xkdGV4dCcqIConZmR0JyoKKydmb2xkdGV4dCcgJ2ZkdCcJc3RyaW5nIChkZWZhdWx0OiAiZm9sZHRleHQoKSIpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrZm9sZGluZ3wKKwkJCWZlYXR1cmV9CisJQW4gZXhwcmVzc2lvbiB3aGljaCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHRleHQgZGlzcGxheWVkIGZvciBhIGNsb3NlZAorCWZvbGQuICBTZWUgfGZvbGQtZm9sZHRleHR8LgorCisJCQkJCSonZm9ybWF0b3B0aW9ucycqIConZm8nKgorJ2Zvcm1hdG9wdGlvbnMnICdmbycJc3RyaW5nIChWaW0gZGVmYXVsdDogInRjcSIsIFZpIGRlZmF1bHQ6ICJ2dCIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVGhpcyBpcyBhIHNlcXVlbmNlIG9mIGxldHRlcnMgd2hpY2ggZGVzY3JpYmVzIGhvdyBhdXRvbWF0aWMKKwlmb3JtYXR0aW5nIGlzIHRvIGJlIGRvbmUuICBTZWUgfGZvLXRhYmxlfC4gIFdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzCisJb24sIG5vIGZvcm1hdHRpbmcgaXMgZG9uZSAobGlrZSAnZm9ybWF0b3B0aW9ucycgaXMgZW1wdHkpLiAgQ29tbWFzIGNhbgorCWJlIGluc2VydGVkIGZvciByZWFkYWJpbGl0eS4KKwlUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIGZsYWdzIHRoYXQgYXJlIGFkZGVkIGluIHRoZSBmdXR1cmUsIHVzZSB0aGUKKwkiKz0iIGFuZCAiLT0iIGZlYXR1cmUgb2YgIjpzZXQiIHxhZGQtb3B0aW9uLWZsYWdzfC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkJKidmb3JtYXRwcmcnKiAqJ2ZwJyoKKydmb3JtYXRwcmcnICdmcCcJc3RyaW5nIChkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoZSBuYW1lIG9mIGFuIGV4dGVybmFsIHByb2dyYW0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gZm9ybWF0IHRoZSBsaW5lcworCXNlbGVjdGVkIHdpdGggdGhlICJncSIgY29tbWFuZC4gIFRoZSBwcm9ncmFtIG11c3QgdGFrZSB0aGUgaW5wdXQgb24KKwlzdGRpbiBhbmQgcHJvZHVjZSB0aGUgb3V0cHV0IG9uIHN0ZG91dC4gIFRoZSBVbml4IHByb2dyYW0gImZtdCIgaXMKKwlzdWNoIGEgcHJvZ3JhbS4gIElmIHRoaXMgb3B0aW9uIGlzIGFuIGVtcHR5IHN0cmluZywgdGhlIGludGVybmFsCisJZm9ybWF0IGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB8Qy1pbmRlbnRpbmd8LiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZQorCWV4cGFuZGVkIHw6c2V0X2VudnwuICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMKKwlhbmQgYmFja3NsYXNoZXMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJICAgKidnZGVmYXVsdCcqIConZ2QnKiAqJ25vZ2RlZmF1bHQnKiAqJ25vZ2QnKgorJ2dkZWZhdWx0JyAnZ2QnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uLCB0aGUgIjpzdWJzdGl0dXRlIiBmbGFnICdnJyBpcyBkZWZhdWx0IG9uLiAgVGhpcyBtZWFucyB0aGF0CisJYWxsIG1hdGNoZXMgaW4gYSBsaW5lIGFyZSBzdWJzdGl0dXRlZCBpbnN0ZWFkIG9mIG9uZS4gIFdoZW4gYSAnZycgZmxhZworCWlzIGdpdmVuIHRvIGEgIjpzdWJzdGl0dXRlIiBjb21tYW5kLCB0aGlzIHdpbGwgdG9nZ2xlIHRoZSBzdWJzdGl0dXRpb24KKwlvZiBhbGwgb3Igb25lIG1hdGNoLiAgU2VlIHxjb21wbGV4LWNoYW5nZXwuCisKKwkJY29tbWFuZAkJJ2dkZWZhdWx0JyBvbgknZ2RlZmF1bHQnIG9mZgl+CisJCTpzLy8vCQkgIHN1YnN0LiBhbGwJICBzdWJzdC4gb25lCisJCTpzLy8vZwkJICBzdWJzdC4gb25lCSAgc3Vic3QuIGFsbAorCQk6cy8vL2dnCQkgIHN1YnN0LiBhbGwJICBzdWJzdC4gb25lCisKKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonZ3JlcGZvcm1hdCcqIConZ2ZtJyoKKydncmVwZm9ybWF0JyAnZ2ZtJwlzdHJpbmcJKGRlZmF1bHQgIiVmOiVsJW0sJWYgICVsJW0iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUZvcm1hdCB0byByZWNvZ25pemUgZm9yIHRoZSAiOmdyZXAiIGNvbW1hbmQgb3V0cHV0LgorCVRoaXMgaXMgYSBzY2FuZi1saWtlIHN0cmluZyB0aGF0IHVzZXMgdGhlIHNhbWUgZm9ybWF0IGFzIHRoZQorCSdlcnJvcmZvcm1hdCcgb3B0aW9uOiBzZWUgfGVycm9yZm9ybWF0fC4KKworCQkJCQkJKidncmVwcHJnJyogKidncCcqCisnZ3JlcHByZycgJ2dwJwkJc3RyaW5nCShkZWZhdWx0ICJncmVwIC1uICIsCisJCQkJCVVuaXg6ICJncmVwIC1uICQqIC9kZXYvbnVsbCIsCisJCQkJCVdpbjMyOiAiZmluZHN0ciAvbiIgb3IgImdyZXAgLW4iLAorCQkJCQkJICAgICAgVk1TOiAiU0VBUkNIL05VTUJFUlMgIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJUHJvZ3JhbSB0byB1c2UgZm9yIHRoZSAiOmdyZXAiIGNvbW1hbmQuIFRoaXMgb3B0aW9uIG1heSBjb250YWluICclJworCWFuZCAnIycgY2hhcmFjdGVycywgd2hpY2ggYXJlIGV4cGFuZGVkIGxpa2Ugd2hlbiB1c2VkIGluIGEgY29tbWFuZC0KKwlsaW5lLiAgVGhlIHBsYWNlaG9sZGVyICIkKiIgaXMgYWxsb3dlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBhcmd1bWVudHMKKwl3aWxsIGJlIGluY2x1ZGVkLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LiAgU2VlCisJfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCVdoZW4geW91ciAiZ3JlcCIgYWNjZXB0cyB0aGUgIi1IIiBhcmd1bWVudCwgdXNlIHRoaXMgdG8gbWFrZSAiOmdyZXAiCisJYWxzbyB3b3JrIHdlbGwgd2l0aCBhIHNpbmdsZSBmaWxlOiA+CisJCTpzZXQgZ3JlcHByZz1ncmVwXCAtbkgKKzwJU2VlIGFsc28gdGhlIHNlY3Rpb24gfDptYWtlX21ha2Vwcmd8LCBzaW5jZSBtb3N0IG9mIHRoZSBjb21tZW50cyB0aGVyZQorCWFwcGx5IGVxdWFsbHkgdG8gJ2dyZXBwcmcnLgorCUZvciBXaW4zMiwgdGhlIGRlZmF1bHQgaXMgImZpbmRzdHIgL24iIGlmICJmaW5kc3RyLmV4ZSIgY2FuIGJlIGZvdW5kLAorCW90aGVyd2lzZSBpdCdzICJncmVwIC1uIi4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCSonZ3VpY3Vyc29yJyogKidnY3InKiAqRTU0NSogKkU1NDYqICpFNTQ4KiAqRTU0OSoKKydndWljdXJzb3InICdnY3InCXN0cmluZwkoZGVmYXVsdCAibi12LWM6YmxvY2stQ3Vyc29yL2xDdXJzb3IsCisJCQkJCXZlOnZlcjM1LUN1cnNvciwKKwkJCQkJbzpob3I1MC1DdXJzb3IsCisJCQkJCWktY2k6dmVyMjUtQ3Vyc29yL2xDdXJzb3IsCisJCQkJCXItY3I6aG9yMjAtQ3Vyc29yL2xDdXJzb3IsCisJCQkJCXNtOmJsb2NrLUN1cnNvcgorCQkJCQktYmxpbmt3YWl0MTc1LWJsaW5rb2ZmMTUwLWJsaW5rb24xNzUiLAorCQkJCWZvciBNUy1ET1MgYW5kIFdpbjMyIGNvbnNvbGU6CisJCQkJCSJuLXYtYzpibG9jayxvOmhvcjUwLGktY2k6aG9yMTUsCisJCQkJCXItY3I6aG9yMzAsc206YmxvY2siKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZCwgYW5kCisJCQlmb3IgTVMtRE9TIGFuZCBXaW4zMiBjb25zb2xlfQorCVRoaXMgb3B0aW9uIHRlbGxzIFZpbSB3aGF0IHRoZSBjdXJzb3Igc2hvdWxkIGxvb2sgbGlrZSBpbiBkaWZmZXJlbnQKKwltb2Rlcy4JSXQgZnVsbHkgd29ya3MgaW4gdGhlIEdVSS4gIEluIGFuIE1TRE9TIG9yIFdpbjMyIGNvbnNvbGUsIG9ubHkKKwl0aGUgaGVpZ2h0IG9mIHRoZSBjdXJzb3IgY2FuIGJlIGNoYW5nZWQuICBUaGlzIGNhbiBiZSBkb25lIGJ5CisJc3BlY2lmeWluZyBhIGJsb2NrIGN1cnNvciwgb3IgYSBwZXJjZW50YWdlIGZvciBhIHZlcnRpY2FsIG9yCisJaG9yaXpvbnRhbCBjdXJzb3IuCisKKwlUaGUgb3B0aW9uIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFydHMuCUVhY2ggcGFydCBjb25zaXN0IG9mIGEKKwltb2RlLWxpc3QgYW5kIGFuIGFyZ3VtZW50LWxpc3Q6CisJCW1vZGUtbGlzdDphcmd1bWVudC1saXN0LG1vZGUtbGlzdDphcmd1bWVudC1saXN0LC4uCisJVGhlIG1vZGUtbGlzdCBpcyBhIGRhc2ggc2VwYXJhdGVkIGxpc3Qgb2YgdGhlc2UgbW9kZXM6CisJCW4JTm9ybWFsIG1vZGUKKwkJdglWaXN1YWwgbW9kZQorCQl2ZQlWaXN1YWwgbW9kZSB3aXRoICdzZWxlY3Rpb24nICJleGNsdXNpdmUiIChzYW1lIGFzICd2JywKKwkJCWlmIG5vdCBzcGVjaWZpZWQpCisJCW8JT3BlcmF0b3ItcGVuZGluZyBtb2RlCisJCWkJSW5zZXJ0IG1vZGUKKwkJcglSZXBsYWNlIG1vZGUKKwkJYwlDb21tYW5kLWxpbmUgTm9ybWFsIChhcHBlbmQpIG1vZGUKKwkJY2kJQ29tbWFuZC1saW5lIEluc2VydCBtb2RlCisJCWNyCUNvbW1hbmQtbGluZSBSZXBsYWNlIG1vZGUKKwkJc20Jc2hvd21hdGNoIGluIEluc2VydCBtb2RlCisJCWEJYWxsIG1vZGVzCisJVGhlIGFyZ3VtZW50LWxpc3QgaXMgYSBkYXNoIHNlcGFyYXRlZCBsaXN0IG9mIHRoZXNlIGFyZ3VtZW50czoKKwkJaG9ye059CWhvcml6b250YWwgYmFyLCB7Tn0gcGVyY2VudCBvZiB0aGUgY2hhcmFjdGVyIGhlaWdodAorCQl2ZXJ7Tn0JdmVydGljYWwgYmFyLCB7Tn0gcGVyY2VudCBvZiB0aGUgY2hhcmFjdGVyIHdpZHRoCisJCWJsb2NrCWJsb2NrIGN1cnNvciwgZmlsbHMgdGhlIHdob2xlIGNoYXJhY3RlcgorCQkJW29ubHkgb25lIG9mIHRoZSBhYm92ZSB0aHJlZSBzaG91bGQgYmUgcHJlc2VudF0KKwkJYmxpbmt3YWl0e059CQkJCSpjdXJzb3ItYmxpbmtpbmcqCisJCWJsaW5rb257Tn0KKwkJYmxpbmtvZmZ7Tn0KKwkJCWJsaW5rIHRpbWVzIGZvciBjdXJzb3I6IGJsaW5rd2FpdCBpcyB0aGUgZGVsYXkgYmVmb3JlCisJCQl0aGUgY3Vyc29yIHN0YXJ0cyBibGlua2luZywgYmxpbmtvbiBpcyB0aGUgdGltZSB0aGF0CisJCQl0aGUgY3Vyc29yIGlzIHNob3duIGFuZCBibGlua29mZiBpcyB0aGUgdGltZSB0aGF0IHRoZQorCQkJY3Vyc29yIGlzIG5vdCBzaG93bi4gIFRoZSB0aW1lcyBhcmUgaW4gbXNlYy4gIFdoZW4gb25lCisJCQlvZiB0aGUgbnVtYmVycyBpcyB6ZXJvLCB0aGVyZSBpcyBubyBibGlua2luZy4gIFRoZQorCQkJZGVmYXVsdCBpczogImJsaW5rd2FpdDcwMC1ibGlua29uNDAwLWJsaW5rb2ZmMjUwIi4KKwkJCVRoZXNlIG51bWJlcnMgYXJlIHVzZWQgZm9yIGEgbWlzc2luZyBlbnRyeS4gIFRoaXMKKwkJCW1lYW5zIHRoYXQgYmxpbmtpbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiAgVG8gc3dpdGNoCisJCQlibGlua2luZyBvZmYgeW91IGNhbiB1c2UgImJsaW5rb24wIi4gIFRoZSBjdXJzb3Igb25seQorCQkJYmxpbmtzIHdoZW4gVmltIGlzIHdhaXRpbmcgZm9yIGlucHV0LCBub3Qgd2hpbGUKKwkJCWV4ZWN1dGluZyBhIGNvbW1hbmQuCisJCQlUbyBtYWtlIHRoZSBjdXJzb3IgYmxpbmsgaW4gYW4geHRlcm0sIHNlZQorCQkJfHh0ZXJtLWJsaW5rfC4KKwkJe2dyb3VwLW5hbWV9CisJCQlhIGhpZ2hsaWdodCBncm91cCBuYW1lLCB0aGF0IHNldHMgdGhlIGNvbG9yIGFuZCBmb250CisJCQlmb3IgdGhlIGN1cnNvcgorCQl7Z3JvdXAtbmFtZX0ve2dyb3VwLW5hbWV9CisJCQlUd28gaGlnaGxpZ2h0IGdyb3VwIG5hbWVzLCB0aGUgZmlyc3QgaXMgdXNlZCB3aGVuCisJCQlubyBsYW5ndWFnZSBtYXBwaW5ncyBhcmUgdXNlZCwgdGhlIG90aGVyIHdoZW4gdGhleQorCQkJYXJlLiB8bGFuZ3VhZ2UtbWFwcGluZ3wKKworCUV4YW1wbGVzIG9mIHBhcnRzOgorCSAgIG4tYy12OmJsb2NrLW5DdXJzb3IJaW4gTm9ybWFsLCBDb21tYW5kLWxpbmUgYW5kIFZpc3VhbCBtb2RlLCB1c2UgYQorCQkJCWJsb2NrIGN1cnNvciB3aXRoIGNvbG9ycyBmcm9tIHRoZSAibkN1cnNvciIKKwkJCQloaWdobGlnaHQgZ3JvdXAKKwkgICBpLWNpOnZlcjMwLWlDdXJzb3ItYmxpbmt3YWl0MzAwLWJsaW5rb24yMDAtYmxpbmtvZmYxNTAKKwkJCQlJbiBJbnNlcnQgYW5kIENvbW1hbmQtbGluZSBJbnNlcnQgbW9kZSwgdXNlIGEKKwkJCQkzMCUgdmVydGljYWwgYmFyIGN1cnNvciB3aXRoIGNvbG9ycyBmcm9tIHRoZQorCQkJCSJpQ3Vyc29yIiBoaWdobGlnaHQgZ3JvdXAuICBCbGluayBhIGJpdAorCQkJCWZhc3Rlci4KKworCVRoZSAnYScgbW9kZSBpcyBkaWZmZXJlbnQuICBJdCB3aWxsIHNldCB0aGUgZ2l2ZW4gYXJndW1lbnQtbGlzdCBmb3IKKwlhbGwgbW9kZXMuICBJdCBkb2VzIG5vdCByZXNldCBhbnl0aGluZyB0byBkZWZhdWx0cy4gIFRoaXMgY2FuIGJlIHVzZWQKKwl0byBkbyBhIGNvbW1vbiBzZXR0aW5nIGZvciBhbGwgbW9kZXMuICBGb3IgZXhhbXBsZSwgdG8gc3dpdGNoIG9mZgorCWJsaW5raW5nOiAiYTpibGlua29uMCIKKworCUV4YW1wbGVzIG9mIGN1cnNvciBoaWdobGlnaHRpbmc6ID4KKwkgICAgOmhpZ2hsaWdodCBDdXJzb3IgZ3VpPXJldmVyc2UgZ3VpZmc9Tk9ORSBndWliZz1OT05FCisJICAgIDpoaWdobGlnaHQgQ3Vyc29yIGd1aT1OT05FIGd1aWZnPWJnIGd1aWJnPWZnCis8CisJCQkJCSonZ3VpZm9udCcqIConZ2ZuJyoKKwkJCQkJCSAgICpFMjM1KiAqRTU5NiogKkU2MTAqICpFNjExKgorJ2d1aWZvbnQnICdnZm4nCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIEdVSSBlbmFibGVkfQorCVRoaXMgaXMgYSBsaXN0IG9mIGZvbnRzIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgdGhlIEdVSSB2ZXJzaW9uIG9mIFZpbS4KKwlJbiBpdHMgc2ltcGxlc3QgZm9ybSB0aGUgdmFsdWUgaXMganVzdCBvbmUgZm9udCBuYW1lLiAgV2hlbgorCXRoZSBmb250IGNhbm5vdCBiZSBmb3VuZCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgbWVzc2FnZS4gIFRvIHRyeSBvdGhlcgorCWZvbnQgbmFtZXMgYSBsaXN0IGNhbiBiZSBzcGVjaWZpZWQsIGZvbnQgbmFtZXMgc2VwYXJhdGVkIHdpdGggY29tbWFzLgorCVRoZSBmaXJzdCB2YWxpZCBmb250IGlzIHVzZWQuCisJV2hlbiAnZ3VpZm9udHNldCcgaXMgbm90IGVtcHR5LCAnZ3VpZm9udCcgaXMgbm90IHVzZWQuCisJU3BhY2VzIGFmdGVyIGEgY29tbWEgYXJlIGlnbm9yZWQuICBUbyBpbmNsdWRlIGEgY29tbWEgaW4gYSBmb250IG5hbWUKKwlwcmVjZWRlIGl0IHdpdGggYSBiYWNrc2xhc2guICBTZXR0aW5nIGFuIG9wdGlvbiByZXF1aXJlcyBhbiBleHRyYQorCWJhY2tzbGFzaCBiZWZvcmUgYSBzcGFjZSBhbmQgYSBiYWNrc2xhc2guICBTZWUgYWxzbworCXxvcHRpb24tYmFja3NsYXNofC4gIEZvciBleGFtcGxlOiA+CisJICAgIDpzZXQgZ3VpZm9udD1TY3JlZW4xNSxcIDd4MTMsZm9udFxcLHdpdGhcXCxjb21tYXMKKzwJd2lsbCBtYWtlIHZpbSB0cnkgdG8gdXNlIHRoZSBmb250ICJTY3JlZW4xNSIgZmlyc3QsIGFuZCBpZiBpdCBmYWlscyBpdAorCXdpbGwgdHJ5IHRvIHVzZSAiN3gxMyIgYW5kIHRoZW4gImZvbnQsd2l0aCxjb21tYXMiIGluc3RlYWQuCisJRm9yIHRoZSBHVEsrIDIgR1VJIHRoZSBmb250IG5hbWUgbG9va3MgbGlrZSB0aGlzOiA+CisJICAgIDpzZXQgZ3VpZm9udD1BbmRhbGVcIE1vbm9cIDExCis8CVRoYXQncyBhbGwuICBYTEZEcyBhcmUgbm8gbG9uZ2VyIGFjY2VwdGVkLgorCQkJCQkJCQkqRTIzNioKKwlOb3RlIHRoYXQgdGhlIGZvbnRzIG11c3QgYmUgbW9uby1zcGFjZWQgKGFsbCBjaGFyYWN0ZXJzIGhhdmUgdGhlIHNhbWUKKwl3aWR0aCkuCisJVG8gcHJldmlldyBhIGZvbnQgb24gWDExLCB5b3UgbWlnaHQgYmUgYWJsZSB0byB1c2UgdGhlICJ4Zm9udHNlbCIKKwlwcm9ncmFtLiAgVGhlICJ4bHNmb250cyIgcHJvZ3JhbSBnaXZlcyBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBmb250cy4KKwlGb3IgV2luMzIsIEdUSyBhbmQgUGhvdG9uIG9ubHk6ID4KKwkgICAgOnNldCBndWlmb250PSoKKzwJd2lsbCBicmluZyB1cCBhIGZvbnQgcmVxdWVzdGVyLCB3aGVyZSB5b3UgY2FuIHBpY2sgdGhlIGZvbnQgeW91IHdhbnQuCisJSWYgbm9uZSBvZiB0aGUgZm9udHMgY2FuIGJlIGxvYWRlZCwgdmltIHdpbGwga2VlcCB0aGUgY3VycmVudCBzZXR0aW5nLgorCUlmIGFuIGVtcHR5IGZvbnQgbGlzdCBpcyBnaXZlbiwgdmltIHdpbGwgdHJ5IHVzaW5nIG90aGVyIHJlc291cmNlCisJc2V0dGluZ3MgKGZvciBYLCBpdCB3aWxsIHVzZSB0aGUgVmltLmZvbnQgcmVzb3VyY2UpLCBhbmQgZmluYWxseSBpdAorCXdpbGwgdHJ5IHNvbWUgYnVpbHRpbiBkZWZhdWx0IHdoaWNoIHNob3VsZCBhbHdheXMgYmUgdGhlcmUgKCI3eDEzIiBpbgorCXRoZSBjYXNlIG9mIFgpLiAgVGhlIGZvbnQgbmFtZXMgZ2l2ZW4gc2hvdWxkIGJlICJub3JtYWwiIGZvbnRzLiAgVmltCisJd2lsbCB0cnkgdG8gZmluZCB0aGUgcmVsYXRlZCBib2xkIGFuZCBpdGFsaWMgZm9udHMuCisJRm9yIHRoZSBXaW4zMiBHVUkJCQkJCSpFMjQ0KiAqRTI0NSoKKwktIHRha2VzIHRoZXNlIG9wdGlvbnMgaW4gdGhlIGZvbnQgbmFtZToKKwkJaFhYIC0gaGVpZ2h0IGlzIFhYIChwb2ludHMsIGNhbiBiZSBmbG9hdGluZy1wb2ludCkKKwkJd1hYIC0gd2lkdGggaXMgWFggKHBvaW50cywgY2FuIGJlIGZsb2F0aW5nLXBvaW50KQorCQliICAgLSBib2xkCisJCWkgICAtIGl0YWxpYworCQl1ICAgLSB1bmRlcmxpbmUKKwkJcyAgIC0gc3RyaWtlb3V0CisJCWNYWCAtIGNoYXJhY3RlciBzZXQgWFguIHZhbGlkIGNoYXJzZXRzIGFyZTogQU5TSSwgQVJBQklDLAorCQkgICAgICBCQUxUSUMsIENISU5FU0VCSUc1LCBERUZBVUxULCBFQVNURVVST1BFLCBHQjIzMTIsIEdSRUVLLAorCQkgICAgICBIQU5HRVVMLCBIRUJSRVcsIEpPSEFCLCBNQUMsIE9FTSwgUlVTU0lBTiwgU0hJRlRKSVMsCisJCSAgICAgIFNZTUJPTCwgVEhBSSwgVFVSS0lTSCwgVklFVE5BTUVTRSBBTlNJIGFuZCBCQUxUSUMuCisKKwkgIFVzZSBhICc6JyB0byBzZXBhcmF0ZSB0aGUgb3B0aW9ucy4KKwktIEEgJ18nIGNhbiBiZSB1c2VkIGluIHRoZSBwbGFjZSBvZiBhIHNwYWNlLCBzbyB5b3UgZG9uJ3QgbmVlZCB0byB1c2UKKwkgIGJhY2tzbGFzaGVzIHRvIGVzY2FwZSB0aGUgc3BhY2VzLgorCS0gRXhhbXBsZXM6ID4KKwkgICAgOnNldCBndWlmb250PWNvdXJpZXJfbmV3OmgxMjp3NTpiOmNSVVNTSUFOCisJICAgIDpzZXQgZ3VpZm9udD1BbmRhbGVfTW9ubzpoNy41Onc0LjUKKzwJU2VlIGFsc28gfGZvbnQtc2l6ZXN8LgorCisJCQkJCSonZ3VpZm9udHNldCcqIConZ2ZzJyoKKwkJCQkJKkUyNTAqICpFMjUyKiAqRTIzNCogKkU1OTcqICpFNTk4KgorJ2d1aWZvbnRzZXQnICdnZnMnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggR1VJIGVuYWJsZWQgYW5kCisJCQl3aXRoIHRoZSB8K3hmb250c2V0fCBmZWF0dXJlfQorCQkJe25vdCBhdmFpbGFibGUgaW4gdGhlIEdUSysgMiBHVUl9CisJV2hlbiBub3QgZW1wdHksIHNwZWNpZmllcyB0d28gKG9yIG1vcmUpIGZvbnRzIHRvIGJlIHVzZWQuICBUaGUgZmlyc3QKKwlvbmUgZm9yIG5vcm1hbCBFbmdsaXNoLCB0aGUgc2Vjb25kIG9uZSBmb3IgeW91ciBzcGVjaWFsIGxhbmd1YWdlLiAgU2VlCisJfHhmb250c2V0fC4KKwlTZXR0aW5nIHRoaXMgb3B0aW9uIGFsc28gbWVhbnMgdGhhdCBhbGwgZm9udCBuYW1lcyB3aWxsIGJlIGhhbmRsZWQgYXMKKwlhIGZvbnRzZXQgbmFtZS4gIEFsc28gdGhlIG9uZXMgdXNlZCBmb3IgdGhlICJmb250IiBhcmd1bWVudCBvZiB0aGUKKwl8OmhpZ2hsaWdodHwgY29tbWFuZC4KKwlUaGUgZm9udHMgbXVzdCBtYXRjaCB3aXRoIHRoZSBjdXJyZW50IGxvY2FsZS4gIElmIGZvbnRzIGZvciB0aGUKKwljaGFyYWN0ZXIgc2V0cyB0aGF0IHRoZSBjdXJyZW50IGxvY2FsZSB1c2VzIGFyZSBub3QgaW5jbHVkZWQsIHNldHRpbmcKKwknZ3VpZm9udHNldCcgd2lsbCBmYWlsLgorCU5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAnZ3VpZm9udCcgYW5kICdndWlmb250c2V0JzogSW4gJ2d1aWZvbnQnCisJdGhlIGNvbW1hLXNlcGFyYXRlZCBuYW1lcyBhcmUgYWx0ZXJuYXRpdmUgbmFtZXMsIG9uZSBvZiB3aGljaCB3aWxsIGJlCisJdXNlZC4gIEluICdndWlmb250c2V0JyB0aGUgd2hvbGUgc3RyaW5nIGlzIG9uZSBmb250c2V0IG5hbWUsCisJaW5jbHVkaW5nIHRoZSBjb21tYXMuICBJdCBpcyBub3QgcG9zc2libGUgdG8gc3BlY2lmeSBhbHRlcm5hdGl2ZQorCWZvbnRzZXQgbmFtZXMuCisJVGhpcyBleGFtcGxlIHdvcmtzIG9uIG1hbnkgWDExIHN5c3RlbXM6ID4KKwkJOnNldCBndWlmb250c2V0PS0qLSotbWVkaXVtLXItbm9ybWFsLS0xNi0qLSotKi1jLSotKi0qCis8CisJCQkJKidndWlmb250d2lkZScqIConZ2Z3JyogKkUyMzEqICpFNTMzKiAqRTUzNCoKKydndWlmb250d2lkZScgJ2dmdycJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCBHVUkgZW5hYmxlZH0KKwlXaGVuIG5vdCBlbXB0eSwgc3BlY2lmaWVzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZm9udHMgdG8gYmUgdXNlZAorCWZvciBkb3VibGUtd2lkdGggY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBmb250IHRoYXQgY2FuIGJlIGxvYWRlZCBpcworCXVzZWQuCisJTm90ZTogVGhlIHNpemUgb2YgdGhlc2UgZm9udHMgbXVzdCBiZSBleGFjdGx5IHR3aWNlIGFzIHdpZGUgYXMgdGhlIG9uZQorCXNwZWNpZmllZCB3aXRoICdndWlmb250JyBhbmQgdGhlIHNhbWUgaGVpZ2h0LgorCisJQWxsIEdVSSB2ZXJzaW9ucyBidXQgR1RLKyAyOgorCisJJ2d1aWZvbnR3aWRlJyBpcyBvbmx5IHVzZWQgd2hlbiAnZW5jb2RpbmcnIGlzIHNldCB0byAidXRmLTgiIGFuZAorCSdndWlmb250c2V0JyBpcyBlbXB0eSBvciBpbnZhbGlkLgorCVdoZW4gJ2d1aWZvbnQnIGlzIHNldCBhbmQgYSB2YWxpZCBmb250IGlzIGZvdW5kIGluIGl0IGFuZAorCSdndWlmb250d2lkZScgaXMgZW1wdHkgVmltIHdpbGwgYXR0ZW1wdCB0byBmaW5kIGEgbWF0Y2hpbmcKKwlkb3VibGUtd2lkdGggZm9udCBhbmQgc2V0ICdndWlmb250d2lkZScgdG8gaXQuCisKKwlHVEsrIDIgR1VJIG9ubHk6CQkJKmd1aWZvbnR3aWRlX2d0azIqCisKKwlJZiBzZXQgYW5kIHZhbGlkLCAnZ3VpZm9udHdpZGUnIGlzIGFsd2F5cyB1c2VkIGZvciBkb3VibGUgd2lkdGgKKwljaGFyYWN0ZXJzLCBldmVuIGlmICdlbmNvZGluZycgaXMgbm90IHNldCB0byAidXRmLTgiLgorCVZpbSBkb2VzIG5vdCBhdHRlbXB0IHRvIGZpbmQgYW4gYXBwcm9wcmlhdGUgdmFsdWUgZm9yICdndWlmb250d2lkZScKKwlhdXRvbWF0aWNhbGx5LglJZiAnZ3VpZm9udHdpZGUnIGlzIGVtcHR5IFBhbmdvL1hmdCB3aWxsIGNob29zZSB0aGUKKwlmb250IGZvciBjaGFyYWN0ZXJzIG5vdCBhdmFpbGFibGUgaW4gJ2d1aWZvbnQnLiAgVGh1cyB5b3UgZG8gbm90IG5lZWQKKwl0byBzZXQgJ2d1aWZvbnR3aWRlJyBhdCBhbGwgdW5sZXNzIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBjaG9pY2UKKwltYWRlIGJ5IFBhbmdvL1hmdC4KKworCQkJCQkJKidndWloZWFkcm9vbScqIConZ2hyJyoKKydndWloZWFkcm9vbScgJ2docicJbnVtYmVyCShkZWZhdWx0IDUwKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfSB7b25seSBmb3IgR1RLIGFuZCBYMTEgR1VJfQorCVRoZSBudW1iZXIgb2YgcGl4ZWxzIHN1YnRyYWN0ZWQgZnJvbSB0aGUgc2NyZWVuIGhlaWdodCB3aGVuIGZpdHRpbmcKKwl0aGUgR1VJIHdpbmRvdyBvbiB0aGUgc2NyZWVuLiAgU2V0IHRoaXMgYmVmb3JlIHRoZSBHVUkgaXMgc3RhcnRlZCwKKwllLmcuLCBpbiB5b3VyIHxndmltcmN8IGZpbGUuICBXaGVuIHplcm8sIHRoZSB3aG9sZSBzY3JlZW4gaGVpZ2h0IHdpbGwKKwliZSB1c2VkIGJ5IHRoZSB3aW5kb3cuCVdoZW4gcG9zaXRpdmUsIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHBpeGVsCisJbGluZXMgd2lsbCBiZSBsZWZ0IGZvciB3aW5kb3cgZGVjb3JhdGlvbnMgYW5kIG90aGVyIGl0ZW1zIG9uIHRoZQorCXNjcmVlbi4gIFNldCBpdCB0byBhIG5lZ2F0aXZlIHZhbHVlIHRvIGFsbG93IHdpbmRvd3MgdGFsbGVyIHRoYW4gdGhlCisJc2NyZWVuLgorCisJCQkJCQkqJ2d1aW9wdGlvbnMnKiAqJ2dvJyoKKydndWlvcHRpb25zJyAnZ28nCXN0cmluZwkoZGVmYXVsdCAiZ21yTHRUIiAgIChNUy1XaW5kb3dzKSwKKwkJCQkJICJhZ2ltckx0VCIgKEdUSywgTW90aWYgYW5kIEF0aGVuYSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggR1VJIGVuYWJsZWR9CisJVGhpcyBvcHRpb24gb25seSBoYXMgYW4gZWZmZWN0IGluIHRoZSBHVUkgdmVyc2lvbiBvZiB2aW0uICBJdCBpcyBhCisJc2VxdWVuY2Ugb2YgbGV0dGVycyB3aGljaCBkZXNjcmliZXMgd2hhdCBjb21wb25lbnRzIGFuZCBvcHRpb25zIG9mIHRoZQorCUdVSSBzaG91bGQgYmUgdXNlZC4KKwlUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIGZsYWdzIHRoYXQgYXJlIGFkZGVkIGluIHRoZSBmdXR1cmUsIHVzZSB0aGUKKwkiKz0iIGFuZCAiLT0iIGZlYXR1cmUgb2YgIjpzZXQiIHxhZGQtb3B0aW9uLWZsYWdzfC4KKworCVZhbGlkIGxldHRlcnMgYXJlIGFzIGZvbGxvd3M6CisJCQkJCQkJKmd1aW9wdGlvbnNfYSoKKwkgICdhJwlBdXRvc2VsZWN0OiAgSWYgcHJlc2VudCwgdGhlbiB3aGVuZXZlciBWSVNVQUwgbW9kZSBpcyBzdGFydGVkLAorCQlvciB0aGUgVmlzdWFsIGFyZWEgZXh0ZW5kZWQsIFZpbSB0cmllcyB0byBiZWNvbWUgdGhlIG93bmVyIG9mCisJCXRoZSB3aW5kb3dpbmcgc3lzdGVtJ3MgZ2xvYmFsIHNlbGVjdGlvbi4gIFRoaXMgbWVhbnMgdGhhdCB0aGUKKwkJVmlzdWFsbHkgaGlnaGxpZ2h0ZWQgdGV4dCBpcyBhdmFpbGFibGUgZm9yIHBhc3RpbmcgaW50byBvdGhlcgorCQlhcHBsaWNhdGlvbnMgYXMgd2VsbCBhcyBpbnRvIFZpbSBpdHNlbGYuICBXaGVuIHRoZSBWaXN1YWwgbW9kZQorCQllbmRzLCBwb3NzaWJseSBkdWUgdG8gYW4gb3BlcmF0aW9uIG9uIHRoZSB0ZXh0LCBvciB3aGVuIGFuCisJCWFwcGxpY2F0aW9uIHdhbnRzIHRvIHBhc3RlIHRoZSBzZWxlY3Rpb24sIHRoZSBoaWdobGlnaHRlZCB0ZXh0CisJCWlzIGF1dG9tYXRpY2FsbHkgeWFua2VkIGludG8gdGhlICIqIHNlbGVjdGlvbiByZWdpc3Rlci4KKwkJVGh1cyB0aGUgc2VsZWN0aW9uIGlzIHN0aWxsIGF2YWlsYWJsZSBmb3IgcGFzdGluZyBpbnRvIG90aGVyCisJCWFwcGxpY2F0aW9ucyBhZnRlciB0aGUgVklTVUFMIG1vZGUgaGFzIGVuZGVkLgorCQkgICAgSWYgbm90IHByZXNlbnQsIHRoZW4gVmltIHdvbid0IGJlY29tZSB0aGUgb3duZXIgb2YgdGhlCisJCXdpbmRvd2luZyBzeXN0ZW0ncyBnbG9iYWwgc2VsZWN0aW9uIHVubGVzcyBleHBsaWNpdGx5IHRvbGQgdG8KKwkJYnkgYSB5YW5rIG9yIGRlbGV0ZSBvcGVyYXRpb24gZm9yIHRoZSAiKiByZWdpc3Rlci4KKwkJVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgbW9kZWxlc3Mgc2VsZWN0aW9uLgorCisJICAnQScJQXV0b3NlbGVjdCBmb3IgdGhlIG1vZGVsZXNzIHNlbGVjdGlvbi4JTGlrZSAnYScsIGJ1dCBvbmx5CisJCWFwcGxpZXMgdG8gdGhlIG1vZGVsZXNzIHNlbGVjdGlvbi4KKworCQkgICAgJ2d1aW9wdGlvbnMnICAgYXV0b3NlbGVjdCBWaXN1YWwgIGF1dG9zZWxlY3QgbW9kZWxlc3MgfgorCQkJICIiCQkgLQkJCSAtCisJCQkgImEiCQl5ZXMJCQl5ZXMKKwkJCSAiQSIJCSAtCQkJeWVzCisJCQkgImFBIgkJeWVzCQkJeWVzCisKKwkgICdjJwlVc2UgY29uc29sZSBkaWFsb2dzIGluc3RlYWQgb2YgcG9wdXAgZGlhbG9ncyBmb3Igc2ltcGxlCisJCWNob2ljZXMuCisKKwkgICdmJwlGb3JlZ3JvdW5kOiBEb24ndCB1c2UgZm9yaygpIHRvIGRldGFjaCB0aGUgR1VJIGZyb20gdGhlIHNoZWxsCisJCXdoZXJlIGl0IHdhcyBzdGFydGVkLiAgVXNlIHRoaXMgZm9yIHByb2dyYW1zIHRoYXQgd2FpdCBmb3IgdGhlCisJCWVkaXRvciB0byBmaW5pc2ggKGUuZy4sIGFuIGUtbWFpbCBwcm9ncmFtKS4gIEFsdGVybmF0aXZlbHkgeW91CisJCWNhbiB1c2UgImd2aW0gLWYiIG9yICI6Z3VpIC1mIiB0byBzdGFydCB0aGUgR1VJIGluIHRoZQorCQlmb3JlZ3JvdW5kLiAgfGd1aS1mb3JrfAorCQlOb3RlOiBTZXQgdGhpcyBvcHRpb24gaW4gdGhlIHZpbXJjIGZpbGUuICBUaGUgZm9ya2luZyBtYXkgaGF2ZQorCQloYXBwZW5lZCBhbHJlYWR5IHdoZW4gdGhlIGd2aW1yYyBmaWxlIGlzIHJlYWQuCisKKwkgICdpJwlVc2UgYSBWaW0gaWNvbi4gIEZvciBHVEsgd2l0aCBLREUgaXQgaXMgdXNlZCBpbiB0aGUgbGVmdC11cHBlcgorCQljb3JuZXIgb2YgdGhlIHdpbmRvdy4gIEl0J3MgYmxhY2smd2hpdGUgb24gbm9uLUdUSywgYmVjYXVzZSBvZgorCQlsaW1pdGF0aW9ucyBvZiBYMTEuICBGb3IgYSBjb2xvciBpY29uLCBzZWUgfFgxMS1pY29ufC4KKworCSAgJ20nCU1lbnUgYmFyIGlzIHByZXNlbnQuCisJICAnTScJVGhlIHN5c3RlbSBtZW51ICIkVklNUlVOVElNRS9tZW51LnZpbSIgaXMgbm90IHNvdXJjZWQuCU5vdGUKKwkJdGhhdCB0aGlzIGZsYWcgbXVzdCBiZSBhZGRlZCBpbiB0aGUgLnZpbXJjIGZpbGUsIGJlZm9yZQorCQlzd2l0Y2hpbmcgb24gc3ludGF4IG9yIGZpbGV0eXBlIHJlY29nbml0aW9uICh3aGVuIHRoZSAuZ3ZpbXJjCisJCWZpbGUgaXMgc291cmNlZCB0aGUgc3lzdGVtIG1lbnUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQ7IHRoZQorCQkiOnN5bnRheCBvbiIgYW5kICI6ZmlsZXR5cGUgb24iIGNvbW1hbmRzIGxvYWQgdGhlIG1lbnUgdG9vKS4KKwkgICdnJwlHcmV5IG1lbnUgaXRlbXM6IE1ha2UgbWVudSBpdGVtcyB0aGF0IGFyZSBub3QgYWN0aXZlIGdyZXkuICBJZgorCQknZycgaXMgbm90IGluY2x1ZGVkIGluYWN0aXZlIG1lbnUgaXRlbXMgYXJlIG5vdCBzaG93biBhdCBhbGwuCisJCUV4Y2VwdGlvbjogQXRoZW5hIHdpbGwgYWx3YXlzIHVzZSBncmV5IG1lbnUgaXRlbXMuCisKKwkgICd0JwlJbmNsdWRlIHRlYXJvZmYgbWVudSBpdGVtcy4gIEN1cnJlbnRseSBvbmx5IHdvcmtzIGZvciBXaW4zMiwKKwkJR1RLKywgYW5kIE1vdGlmIDEuMiBHVUkuCisJICAnVCcJSW5jbHVkZSBUb29sYmFyLiAgQ3VycmVudGx5IG9ubHkgaW4gV2luMzIsIEdUSyssIE1vdGlmLCBhbmQKKwkJQXRoZW5hIEdVSXMuCisKKwkgICdyJwlSaWdodC1oYW5kIHNjcm9sbGJhciBpcyBhbHdheXMgcHJlc2VudC4KKwkgICdSJwlSaWdodC1oYW5kIHNjcm9sbGJhciBpcyBwcmVzZW50IHdoZW4gdGhlcmUgaXMgYSB2ZXJ0aWNhbGx5CisJCXNwbGl0IHdpbmRvdy4KKwkgICdsJwlMZWZ0LWhhbmQgc2Nyb2xsYmFyIGlzIGFsd2F5cyBwcmVzZW50LgorCSAgJ0wnCUxlZnQtaGFuZCBzY3JvbGxiYXIgaXMgcHJlc2VudCB3aGVuIHRoZXJlIGlzIGEgdmVydGljYWxseQorCQlzcGxpdCB3aW5kb3cuCisJICAnYicJQm90dG9tIChob3Jpem9udGFsKSBzY3JvbGxiYXIgaXMgcHJlc2VudC4gIEl0cyBzaXplIGRlcGVuZHMgb24KKwkJdGhlIGxvbmdlc3QgdmlzaWJsZSBsaW5lLCBvciBvbiB0aGUgY3Vyc29yIGxpbmUgaWYgdGhlICdoJworCQlmbGFnIGlzIGluY2x1ZGVkLiB8Z3VpLWhvcml6LXNjcm9sbHwKKwkgICdoJwlMaW1pdCBob3Jpem9udGFsIHNjcm9sbGJhciBzaXplIHRvIHRoZSBsZW5ndGggb2YgdGhlIGN1cnNvcgorCQlsaW5lLiAgUmVkdWNlcyBjb21wdXRhdGlvbnMuIHxndWktaG9yaXotc2Nyb2xsfAorCisJQW5kIHllcywgeW91IG1heSBldmVuIGhhdmUgc2Nyb2xsYmFycyBvbiB0aGUgbGVmdCBBTkQgdGhlIHJpZ2h0IGlmCisJeW91IHJlYWxseSB3YW50IHRvIDotKS4gIFNlZSB8Z3VpLXNjcm9sbGJhcnN8IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJICAndicJVXNlIGEgdmVydGljYWwgYnV0dG9uIGxheW91dCBmb3IgZGlhbG9ncy4gIFdoZW4gbm90IGluY2x1ZGVkLAorCQlhIGhvcml6b250YWwgbGF5b3V0IGlzIHByZWZlcnJlZCwgYnV0IHdoZW4gaXQgZG9lc24ndCBmaXQgYQorCQl2ZXJ0aWNhbCBsYXlvdXQgaXMgdXNlZCBhbnl3YXkuCisJICAncCcJVXNlIFBvaW50ZXIgY2FsbGJhY2tzIGZvciBYMTEgR1VJLiAgVGhpcyBpcyByZXF1aXJlZCBmb3Igc29tZQorCQl3aW5kb3cgbWFuYWdlcnMuICBJZiB0aGUgY3Vyc29yIGlzIG5vdCBibGlua2luZyBvciBob2xsb3cgYXQKKwkJdGhlIHJpZ2h0IG1vbWVudCwgdHJ5IGFkZGluZyB0aGlzIGZsYWcuICBUaGlzIG11c3QgYmUgZG9uZQorCQliZWZvcmUgc3RhcnRpbmcgdGhlIEdVSS4gIFNldCBpdCBpbiB5b3VyIGd2aW1yYy4gIEFkZGluZyBvcgorCQlyZW1vdmluZyBpdCBhZnRlciB0aGUgR1VJIGhhcyBzdGFydGVkIGhhcyBubyBlZmZlY3QuCisJICAnRicJQWRkIGEgZm9vdGVyLiAgT25seSBmb3IgTW90aWYuCVNlZSB8Z3VpLWZvb3RlcnwuCisKKwkJCQkJCSonZ3VpcHR5JyogKidub2d1aXB0eScqCisnZ3VpcHR5JwkJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggR1VJIGVuYWJsZWR9CisJT25seSBpbiB0aGUgR1VJOiBJZiBvbiwgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG9wZW4gYSBwc2V1ZG8tdHR5IGZvcgorCUkvTyB0by9mcm9tIHNoZWxsIGNvbW1hbmRzLiAgU2VlIHxndWktcHR5fC4KKworCQkJCQkJKidoZWxwZmlsZScqIConaGYnKgorJ2hlbHBmaWxlJyAnaGYnCQlzdHJpbmcJKGRlZmF1bHQgKE1TRE9TKSAgIiRWSU1SVU5USU1FXGRvY1xoZWxwLnR4dCIKKwkJCQkJIChvdGhlcnMpICIkVklNUlVOVElNRS9kb2MvaGVscC50eHQiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU5hbWUgb2YgdGhlIG1haW4gaGVscCBmaWxlLiAgQWxsIGRpc3RyaWJ1dGVkIGhlbHAgZmlsZXMgc2hvdWxkIGJlCisJcGxhY2VkIHRvZ2V0aGVyIGluIG9uZSBkaXJlY3RvcnkuICBBZGRpdGlvbmFsbHksIGFsbCAiZG9jIiBkaXJlY3RvcmllcworCWluICdydW50aW1lcGF0aCcgd2lsbCBiZSB1c2VkLgorCUVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4gIEZvciBleGFtcGxlOgorCSIkVklNUlVOVElNRS9kb2MvaGVscC50eHQiLiAgSWYgJFZJTVJVTlRJTUUgaXMgbm90IHNldCwgJFZJTSBpcyBhbHNvCisJdHJpZWQuCUFsc28gc2VlIHwkVklNUlVOVElNRXwgYW5kIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcKKwlzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidoZWxwaGVpZ2h0JyogKidoaCcqCisnaGVscGhlaWdodCcgJ2hoJwludW1iZXIJKGRlZmF1bHQgMjApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt3aW5kb3dzCisJCQlmZWF0dXJlfQorCU1pbmltYWwgaW5pdGlhbCBoZWlnaHQgb2YgdGhlIGhlbHAgd2luZG93IHdoZW4gaXQgaXMgb3BlbmVkIHdpdGggdGhlCisJIjpoZWxwIiBjb21tYW5kLiAgVGhlIGluaXRpYWwgaGVpZ2h0IG9mIHRoZSBoZWxwIHdpbmRvdyBpcyBoYWxmIG9mIHRoZQorCWN1cnJlbnQgd2luZG93LCBvciAod2hlbiB0aGUgJ2VhJyBvcHRpb24gaXMgb24pIHRoZSBzYW1lIGFzIG90aGVyCisJd2luZG93cy4gIFdoZW4gdGhlIGhlaWdodCBpcyBsZXNzIHRoYW4gJ2hlbHBoZWlnaHQnLCB0aGUgaGVpZ2h0IGlzCisJc2V0IHRvICdoZWxwaGVpZ2h0Jy4gIFNldCB0byB6ZXJvIHRvIGRpc2FibGUuCisKKwkJCQkJCSonaGVscGxhbmcnKiAqJ2hsZycqCisnaGVscGxhbmcnICdobGcnCXN0cmluZwkoZGVmYXVsdDogbWVzc2FnZXMgbGFuZ3VhZ2Ugb3IgZW1wdHkpCisJCQlnbG9iYWwKKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfbGFuZ3wKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCUNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGxhbmd1YWdlcy4gIFZpbSB3aWxsIHVzZSB0aGUgZmlyc3QgbGFuZ3VhZ2UKKwlmb3Igd2hpY2ggdGhlIGRlc2lyZWQgaGVscCBjYW4gYmUgZm91bmQuICBUaGUgRW5nbGlzaCBoZWxwIHdpbGwgYWx3YXlzCisJYmUgdXNlZCBhcyBhIGxhc3QgcmVzb3J0LiAgWW91IGNhbiBhZGQgImVuIiB0byBwcmVmZXIgRW5nbGlzaCBvdmVyCisJYW5vdGhlciBsYW5ndWFnZSwgYnV0IHRoYXQgd2lsbCBvbmx5IGZpbmQgdGFncyB0aGF0IGV4aXN0IGluIHRoYXQKKwlsYW5ndWFnZSBhbmQgbm90IGluIHRoZSBFbmdsaXNoIGhlbHAuCisJRXhhbXBsZTogPgorCQk6c2V0IGhlbHBsYW5nPWRlLGl0Cis8CVRoaXMgd2lsbCBmaXJzdCBzZWFyY2ggR2VybWFuLCB0aGVuIEl0YWxpYW4gYW5kIGZpbmFsbHkgRW5nbGlzaCBoZWxwCisJZmlsZXMuCisJV2hlbiB1c2luZyB8Q1RSTC1dfCBhbmQgIjpoZWxwISIgaW4gYSBub24tRW5nbGlzaCBoZWxwIGZpbGUgVmltIHdpbGwKKwl0cnkgdG8gZmluZCB0aGUgdGFnIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlIGJlZm9yZSB1c2luZyB0aGlzIG9wdGlvbi4KKwlTZWUgfGhlbHAtdHJhbnNsYXRlZHwuCisKKwkJCQkgICAgIConaGlkZGVuJyogKidoaWQnKiAqJ25vaGlkZGVuJyogKidub2hpZCcqCisnaGlkZGVuJyAnaGlkJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvZmYgYSBidWZmZXIgaXMgdW5sb2FkZWQgd2hlbiBpdCBpcyB8YWJhbmRvbnxlZC4gIFdoZW4gb24gYQorCWJ1ZmZlciBiZWNvbWVzIGhpZGRlbiB3aGVuIGl0IGlzIHxhYmFuZG9ufGVkLiAgSWYgdGhlIGJ1ZmZlciBpcyBzdGlsbAorCWRpc3BsYXllZCBpbiBhbm90aGVyIHdpbmRvdywgaXQgZG9lcyBub3QgYmVjb21lIGhpZGRlbiwgb2YgY291cnNlLgorCVRoZSBjb21tYW5kcyB0aGF0IG1vdmUgdGhyb3VnaCB0aGUgYnVmZmVyIGxpc3Qgc29tZXRpbWVzIG1ha2UgYSBidWZmZXIKKwloaWRkZW4gYWx0aG91Z2ggdGhlICdoaWRkZW4nIG9wdGlvbiBpcyBvZmY6IFdoZW4gdGhlIGJ1ZmZlciBpcworCW1vZGlmaWVkLCAnYXV0b3dyaXRlJyBpcyBvZmYgb3Igd3JpdGluZyBpcyBub3QgcG9zc2libGUsIGFuZCB0aGUgJyEnCisJZmxhZyB3YXMgdXNlZC4JU2VlIGFsc28gfHdpbmRvd3MudHh0fC4KKwlUaGlzIG9wdGlvbiBpcyBzZXQgZm9yIG9uZSBjb21tYW5kIHdpdGggIjpoaWRlIHtjb21tYW5kfSIgfDpoaWRlfC4KKwlXQVJOSU5HOiBJdCdzIGVhc3kgdG8gZm9yZ2V0IHRoYXQgeW91IGhhdmUgY2hhbmdlcyBpbiBoaWRkZW4gYnVmZmVycy4KKwlUaGluayB0d2ljZSB3aGVuIHVzaW5nICI6cSEiIG9yICI6cWEhIi4KKworCQkJCQkJKidoaWdobGlnaHQnKiAqJ2hsJyoKKydoaWdobGlnaHQnICdobCcJc3RyaW5nCShkZWZhdWx0IChhcyBhIHNpbmdsZSBzdHJpbmcpOgorCQkJCSAgICAgIjg6U3BlY2lhbEtleSxAOk5vblRleHQsZDpEaXJlY3RvcnksCisJCQkJICAgICBlOkVycm9yTXNnLGk6SW5jU2VhcmNoLGw6U2VhcmNoLG06TW9yZU1zZywKKwkJCQkgICAgIE06TW9kZU1zZyxuOkxpbmVOcixyOlF1ZXN0aW9uLAorCQkJCSAgICAgczpTdGF0dXNMaW5lLFM6U3RhdHVzTGluZU5DLGM6VmVydFNwbGl0CisJCQkJICAgICB0OlRpdGxlLHY6VmlzdWFsLHc6V2FybmluZ01zZyxXOldpbGRNZW51LAorCQkJCSAgICAgZjpGb2xkZWQsRjpGb2xkQ29sdW1uLEE6RGlmZkFkZCwKKwkJCQkgICAgIEM6RGlmZkNoYW5nZSxEOkRpZmZEZWxldGUsVDpEaWZmVGV4dCwKKwkJCQkgICAgID46U2lnbkNvbHVtbiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc2V0IGhpZ2hsaWdodGluZyBtb2RlIGZvciB2YXJpb3VzCisJb2NjYXNpb25zLiAgSXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgcGFpcnMuICBUaGUKKwlmaXJzdCBjaGFyYWN0ZXIgaW4gYSBwYWlyIGdpdmVzIHRoZSBvY2Nhc2lvbiwgdGhlIHNlY29uZCB0aGUgbW9kZSB0bworCXVzZSBmb3IgdGhhdCBvY2Nhc2lvbi4JVGhlIG9jY2FzaW9ucyBhcmU6CisJfGhsLVNwZWNpYWxLZXl8CSA4ICBNZXRhIGFuZCBzcGVjaWFsIGtleXMgbGlzdGVkIHdpdGggIjptYXAiCisJfGhsLU5vblRleHR8CSBAICAnficgYW5kICdAJyBhdCB0aGUgZW5kIG9mIHRoZSB3aW5kb3cgYW5kCisJCQkgICAgY2hhcmFjdGVycyBmcm9tICdzaG93YnJlYWsnCisJfGhsLURpcmVjdG9yeXwJIGQgIGRpcmVjdG9yaWVzIGluIENUUkwtRCBsaXN0aW5nIGFuZCBvdGhlciBzcGVjaWFsCisJCQkgICAgdGhpbmdzIGluIGxpc3RpbmdzCisJfGhsLUVycm9yTXNnfAkgZSAgZXJyb3IgbWVzc2FnZXMKKwkJCSBoICAob2Jzb2xldGUsIGlnbm9yZWQpCisJfGhsLUluY1NlYXJjaHwJIGkgICdpbmNzZWFyY2gnIGhpZ2hsaWdodGluZworCXxobC1TZWFyY2h8CSBsICBsYXN0IHNlYXJjaCBwYXR0ZXJuIGhpZ2hsaWdodGluZyAoc2VlICdobHNlYXJjaCcpCisJfGhsLU1vcmVNc2d8CSBtICB8bW9yZS1wcm9tcHR8CisJfGhsLU1vZGVNc2d8CSBNICBNb2RlIChlLmcuLCAiLS0gSU5TRVJUIC0tIikKKwl8aGwtTGluZU5yfAkgbiAgbGluZSBudW1iZXIgZm9yICI6bnVtYmVyIiBhbmQgIjojIiBjb21tYW5kcworCXxobC1RdWVzdGlvbnwJIHIgIHxoaXQtZW50ZXJ8IHByb21wdCBhbmQgeWVzL25vIHF1ZXN0aW9ucworCXxobC1TdGF0dXNMaW5lfAkgcyAgc3RhdHVzIGxpbmUgb2YgY3VycmVudCB3aW5kb3cgfHN0YXR1cy1saW5lfAorCXxobC1TdGF0dXNMaW5lTkN8IFMgIHN0YXR1cyBsaW5lcyBvZiBub3QtY3VycmVudCB3aW5kb3dzCisJfGhsLVRpdGxlfAkgdCAgVGl0bGVzIGZvciBvdXRwdXQgZnJvbSAiOnNldCBhbGwiLCAiOmF1dG9jbWQiIGV0Yy4KKwl8aGwtVmVydFNwbGl0fAkgYyAgY29sdW1uIHVzZWQgdG8gc2VwYXJhdGUgdmVydGljYWxseSBzcGxpdCB3aW5kb3dzCisJfGhsLVZpc3VhbHwJIHYgIFZpc3VhbCBtb2RlCisJfGhsLVZpc3VhbE5PU3wJIFYgIFZpc3VhbCBtb2RlIHdoZW4gVmltIGRvZXMgaXMgIk5vdCBPd25pbmcgdGhlCisJCQkgICAgU2VsZWN0aW9uIiBPbmx5IFgxMSBHdWkncyB8Z3VpLXgxMXwgYW5kCisJCQkgICAgfHh0ZXJtLWNsaXBib2FyZHwuCisJfGhsLVdhcm5pbmdNc2d8CSB3ICB3YXJuaW5nIG1lc3NhZ2VzCisJfGhsLVdpbGRNZW51fAkgVyAgd2lsZGNhcmQgbWF0Y2hlcyBkaXNwbGF5ZWQgZm9yICd3aWxkbWVudScKKwl8aGwtRm9sZGVkfAkgZiAgbGluZSB1c2VkIGZvciBjbG9zZWQgZm9sZHMKKwl8aGwtRm9sZENvbHVtbnwJIEYgICdmb2xkY29sdW1uJworCXxobC1TaWduQ29sdW1ufAkgPiAgY29sdW1uIHVzZWQgZm9yIHxzaWduc3wKKworCVRoZSBkaXNwbGF5IG1vZGVzIGFyZToKKwkJcglyZXZlcnNlCQkodGVybWNhcCBlbnRyeSAibXIiIGFuZCAibWUiKQorCQlpCWl0YWxpYwkJKHRlcm1jYXAgZW50cnkgIlpIIiBhbmQgIlpSIikKKwkJYglib2xkCQkodGVybWNhcCBlbnRyeSAibWQiIGFuZCAibWUiKQorCQlzCXN0YW5kb3V0CSh0ZXJtY2FwIGVudHJ5ICJzbyIgYW5kICJzZSIpCisJCXUJdW5kZXJsaW5lCSh0ZXJtY2FwIGVudHJ5ICJ1cyIgYW5kICJ1ZSIpCisJCW4Jbm8gaGlnaGxpZ2h0aW5nCisJCS0Jbm8gaGlnaGxpZ2h0aW5nCisJCToJdXNlIGEgaGlnaGxpZ2h0IGdyb3VwCisJVGhlIGRlZmF1bHQgaXMgdXNlZCBmb3Igb2NjYXNpb25zIHRoYXQgYXJlIG5vdCBpbmNsdWRlZC4KKwlJZiB5b3Ugd2FudCB0byBjaGFuZ2Ugd2hhdCB0aGUgZGlzcGxheSBtb2RlcyBkbywgc2VlIHxkb3MtY29sb3JzfAorCWZvciBhbiBleGFtcGxlLgorCVdoZW4gdXNpbmcgdGhlICc6JyBkaXNwbGF5IG1vZGUsIHRoaXMgbXVzdCBiZSBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZgorCWEgaGlnaGxpZ2h0IGdyb3VwLiAgQSBoaWdobGlnaHQgZ3JvdXAgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGFueSB0eXBlCisJb2YgaGlnaGxpZ2h0aW5nLCBpbmNsdWRpbmcgdXNpbmcgY29sb3IuICBTZWUgfDpoaWdobGlnaHR8IG9uIGhvdyB0bworCWRlZmluZSBvbmUuICBUaGUgZGVmYXVsdCB1c2VzIGEgZGlmZmVyZW50IGdyb3VwIGZvciBlYWNoIG9jY2FzaW9uLgorCVNlZSB8aGlnaGxpZ2h0LWRlZmF1bHR8IGZvciB0aGUgZGVmYXVsdCBoaWdobGlnaHQgZ3JvdXBzLgorCisJCQkJIConaGxzZWFyY2gnKiAqJ2hscycqIConbm9obHNlYXJjaCcqIConbm9obHMnKgorJ2hsc2VhcmNoJyAnaGxzJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrZXh0cmFfc2VhcmNofCBmZWF0dXJlfQorCVdoZW4gdGhlcmUgaXMgYSBwcmV2aW91cyBzZWFyY2ggcGF0dGVybiwgaGlnaGxpZ2h0IGFsbCBpdHMgbWF0Y2hlcy4KKwlUaGUgdHlwZSBvZiBoaWdobGlnaHRpbmcgdXNlZCBjYW4gYmUgc2V0IHdpdGggdGhlICdsJyBvY2Nhc2lvbiBpbiB0aGUKKwknaGlnaGxpZ2h0JyBvcHRpb24uICBUaGlzIHVzZXMgdGhlICJTZWFyY2giIGhpZ2hsaWdodCBncm91cCBieQorCWRlZmF1bHQuICBOb3RlIHRoYXQgb25seSB0aGUgbWF0Y2hpbmcgdGV4dCBpcyBoaWdobGlnaHRlZCwgYW55IG9mZnNldHMKKwlhcmUgbm90IGFwcGxpZWQuCisJU2VlIGFsc286ICdpbmNzZWFyY2gnIGFuZCB8Om1hdGNofC4KKwlXaGVuIHlvdSBnZXQgYm9yZWQgbG9va2luZyBhdCB0aGUgaGlnaGxpZ2h0ZWQgbWF0Y2hlcywgeW91IGNhbiB0dXJuIGl0CisJb2ZmIHdpdGggfDpub2hsc2VhcmNofC4gIEFzIHNvb24gYXMgeW91IHVzZSBhIHNlYXJjaCBjb21tYW5kLCB0aGUKKwloaWdobGlnaHRpbmcgY29tZXMgYmFjay4KKwlXaGVuIHRoZSBzZWFyY2ggcGF0dGVybiBjYW4gbWF0Y2ggYW4gZW5kLW9mLWxpbmUsIFZpbSB3aWxsIHRyeSB0bworCWhpZ2hsaWdodCBhbGwgb2YgdGhlIG1hdGNoZWQgdGV4dC4gIEhvd2V2ZXIsIHRoaXMgZGVwZW5kcyBvbiB3aGVyZSB0aGUKKwlzZWFyY2ggc3RhcnRzLglUaGlzIHdpbGwgYmUgdGhlIGZpcnN0IGxpbmUgaW4gdGhlIHdpbmRvdyBvciB0aGUgZmlyc3QKKwlsaW5lIGJlbG93IGEgY2xvc2VkIGZvbGQuICBBIG1hdGNoIGluIGEgcHJldmlvdXMgbGluZSB3aGljaCBpcyBub3QKKwlkcmF3biBtYXkgbm90IGNvbnRpbnVlIGluIGFuIG5ld2x5IGRyYXduIGxpbmUuCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2hpc3RvcnknKiAqJ2hpJyoKKydoaXN0b3J5JyAnaGknCQludW1iZXIJKFZpbSBkZWZhdWx0OiAyMCwgVmkgZGVmYXVsdDogMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlBIGhpc3Rvcnkgb2YgIjoiIGNvbW1hbmRzLCBhbmQgYSBoaXN0b3J5IG9mIHByZXZpb3VzIHNlYXJjaCBwYXR0ZXJucworCWFyZSByZW1lbWJlcmVkLiAgVGhpcyBvcHRpb24gZGVjaWRlcyBob3cgbWFueSBlbnRyaWVzIG1heSBiZSBzdG9yZWQgaW4KKwllYWNoIG9mIHRoZXNlIGhpc3RvcmllcyAoc2VlIHxjbWRsaW5lLWVkaXRpbmd8KS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIFZpIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQgYW5kIHRvIHRoZSBWaW0gZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcyByZXNldC4KKworCQkJCQkgKidoa21hcCcqIConaGsnKiAqJ25vaGttYXAnKiAqJ25vaGsnKgorJ2hrbWFwJyAnaGsnCQlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCB0aGUga2V5Ym9hcmQgaXMgbWFwcGVkIGZvciB0aGUgSGVicmV3IGNoYXJhY3RlciBzZXQuCisJTm9ybWFsbHkgeW91IHdvdWxkIHNldCAnYWxsb3dyZXZpbnMnIGFuZCB1c2UgQ1RSTC1fIGluIGluc2VydCBtb2RlIHRvCisJdG9nZ2xlIHRoaXMgb3B0aW9uLiAgU2VlIHxyaWxlZnQudHh0fC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkgKidoa21hcHAnKiAqJ2hrcCcqIConbm9oa21hcHAnKiAqJ25vaGtwJyoKKydoa21hcHAnICdoa3AnCQlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCBwaG9uZXRpYyBrZXlib2FyZCBtYXBwaW5nIGlzIHVzZWQuICAnaGttYXAnIG11c3QgYWxzbyBiZSBvbi4KKwlUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgaGF2ZSBhIG5vbi1IZWJyZXcga2V5Ym9hcmQuCisJU2VlIHxyaWxlZnQudHh0fC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonaWNvbicqIConbm9pY29uJyoKKydpY29uJwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmLCBvbiB3aGVuIHRpdGxlIGNhbiBiZSByZXN0b3JlZCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt0aXRsZXwKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgdGhlIGljb24gdGV4dCBvZiB0aGUgd2luZG93IHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZgorCSdpY29uc3RyaW5nJyAoaWYgaXQgaXMgbm90IGVtcHR5KSwgb3IgdG8gdGhlIG5hbWUgb2YgdGhlIGZpbGUKKwljdXJyZW50bHkgYmVpbmcgZWRpdGVkLiAgT25seSB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBuYW1lIGlzIHVzZWQuCisJT3ZlcnJpZGRlbiBieSB0aGUgJ2ljb25zdHJpbmcnIG9wdGlvbi4KKwlPbmx5IHdvcmtzIGlmIHRoZSB0ZXJtaW5hbCBzdXBwb3J0cyBzZXR0aW5nIHdpbmRvdyBpY29ucyAoY3VycmVudGx5CisJb25seSBYMTEgR1VJIGFuZCB0ZXJtaW5hbHMgd2l0aCBhIG5vbi1lbXB0eSAndF9JUycgb3B0aW9uIC0gdGhlc2UgYXJlCisJVW5peCB4dGVybSBhbmQgaXJpcy1hbnNpIGJ5IGRlZmF1bHQsIHdoZXJlICd0X0lTJyBpcyB0YWtlbiBmcm9tIHRoZQorCWJ1aWx0aW4gdGVybWNhcCkuCisJV2hlbiBWaW0gd2FzIGNvbXBpbGVkIHdpdGggSEFWRV9YMTEgZGVmaW5lZCwgdGhlIG9yaWdpbmFsIGljb24gd2lsbCBiZQorCXJlc3RvcmVkIGlmIHBvc3NpYmxlIHxYMTF8LiBTZWUgfFgxMS1pY29ufCBmb3IgY2hhbmdpbmcgdGhlIGljb24gb24KKwlYMTEuCisKKwkJCQkJCSonaWNvbnN0cmluZycqCisnaWNvbnN0cmluZycJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt0aXRsZXwKKwkJCWZlYXR1cmV9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgZW1wdHksIGl0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGljb24gdGV4dCBvZgorCXRoZSB3aW5kb3cuICBUaGlzIGhhcHBlbnMgb25seSB3aGVuIHRoZSAnaWNvbicgb3B0aW9uIGlzIG9uLgorCU9ubHkgd29ya3MgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIHNldHRpbmcgd2luZG93IGljb24gdGV4dAorCShjdXJyZW50bHkgb25seSBYMTEgR1VJIGFuZCB0ZXJtaW5hbHMgd2l0aCBhIG5vbi1lbXB0eSAndF9JUycgb3B0aW9uKS4KKwlEb2VzIG5vdCB3b3JrIGZvciBNUyBXaW5kb3dzLgorCVdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIEhBVkVfWDExIGRlZmluZWQsIHRoZSBvcmlnaW5hbCBpY29uIHdpbGwgYmUKKwlyZXN0b3JlZCBpZiBwb3NzaWJsZSB8WDExfC4KKwlXaGVuIHRoaXMgb3B0aW9uIGNvbnRhaW5zIHByaW50Zi1zdHlsZSAnJScgaXRlbXMsIHRoZXkgd2lsbCBiZQorCWV4cGFuZGVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgdXNlZCBmb3IgJ3N0YXR1c2xpbmUnLglTZWUKKwkndGl0bGVzdHJpbmcnIGZvciBleGFtcGxlIHNldHRpbmdzLgorCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzdGF0dXNsaW5lfCBmZWF0dXJlfQorCisJCQkqJ2lnbm9yZWNhc2UnKiAqJ2ljJyogKidub2lnbm9yZWNhc2UnKiAqJ25vaWMnKgorJ2lnbm9yZWNhc2UnICdpYycJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwlJZ25vcmUgY2FzZSBpbiBzZWFyY2ggcGF0dGVybnMuICBBbHNvIHVzZWQgd2hlbiBzZWFyY2hpbmcgaW4gdGhlIHRhZ3MKKwlmaWxlLgorCUFsc28gc2VlICdzbWFydGNhc2UnLgorCUNhbiBiZSBvdmVycnVsZWQgYnkgdXNpbmcgIlxjIiBvciAiXEMiIGluIHRoZSBwYXR0ZXJuLCBzZWUKKwl8L2lnbm9yZWNhc2V8LgorCisJCQkJCQkqJ2ltYWN0aXZhdGVrZXknKiAqJ2ltYWsnKgorJ2ltYWN0aXZhdGVrZXknICdpbWFrJwlzdHJpbmcgKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHwreGltfCBhbmQKKwkJCXwrR1VJX0dUS3x9CisJU3BlY2lmaWVzIHRoZSBrZXkgdGhhdCB5b3VyIElucHV0IE1ldGhvZCBpbiBYLVdpbmRvd3MgdXNlcyBmb3IKKwlhY3RpdmF0aW9uLiAgV2hlbiB0aGlzIGlzIHNwZWNpZmllZCBjb3JyZWN0bHksIHZpbSBjYW4gZnVsbHkgY29udHJvbAorCUlNIHdpdGggJ2ltY21kbGluZScsICdpbWluc2VydCcgYW5kICdpbXNlYXJjaCcuCisJWW91IGNhbid0IHVzZSB0aGlzIG9wdGlvbiB0byBjaGFuZ2UgdGhlIGFjdGl2YXRpb24ga2V5LCB0aGUgb3B0aW9uCisJdGVsbHMgVmltIHdoYXQgdGhlIGtleSBpcy4KKwlGb3JtYXQ6CisJCVtNT0RJRklFUl9GTEFHLV1LRVlfU1RSSU5HCisKKwlUaGVzZSBjaGFyYWN0ZXJzIGNhbiBiZSB1c2VkIGZvciBNT0RJRklFUl9GTEFHIChjYXNlIGlzIGlnbm9yZWQpOgorCQlTCSAgICBTaGlmdCBrZXkKKwkJTAkgICAgTG9jayBrZXkKKwkJQwkgICAgQ29udHJvbCBrZXkKKwkJMQkgICAgTW9kMSBrZXkKKwkJMgkgICAgTW9kMiBrZXkKKwkJMwkgICAgTW9kMyBrZXkKKwkJNAkgICAgTW9kNCBrZXkKKwkJNQkgICAgTW9kNSBrZXkKKwlDb21iaW5hdGlvbnMgYXJlIGFsbG93ZWQsIGZvciBleGFtcGxlICJTLUMtc3BhY2UiIG9yICJTQy1zcGFjZSIgYXJlCisJYm90aCBzaGlmdCtjdHJsK3NwYWNlLgorCVNlZSA8WDExL2tleXN5bWRlZi5oPiBhbmQgWFN0cmluZ1RvS2V5c3ltIGZvciBLRVlfU1RSSU5HLgorCisJRXhhbXBsZTogPgorCQk6c2V0IGltYWN0aXZhdGVrZXk9Uy1zcGFjZQorPAkiUy1zcGFjZSIgbWVhbnMgc2hpZnQrc3BhY2UuICBUaGlzIGlzIHRoZSBhY3RpdmF0aW9uIGtleSBmb3Iga2lucHV0MiArCisJY2FubmEgKEphcGFuZXNlKSwgYW5kIGFtaSAoS29yZWFuKS4KKworCQkJCSonaW1jbWRsaW5lJyogKidpbWMnKiAqJ25vaW1jbWRsaW5lJyogKidub2ltYycqCisnaW1jbWRsaW5lJyAnaW1jJwlib29sZWFuIChkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwreGltfAorCQkJfCttdWx0aV9ieXRlX2ltZXwgb3IgfGdsb2JhbC1pbWV8IGZlYXR1cmV9CisJV2hlbiBzZXQgdGhlIElucHV0IE1ldGhvZCBpcyBhbHdheXMgb24gd2hlbiBzdGFydGluZyB0byBlZGl0IGEgY29tbWFuZAorCWxpbmUsIHVubGVzcyBlbnRlcmluZyBhIHNlYXJjaCBwYXR0ZXJuIChzZWUgJ2ltc2VhcmNoJyBmb3IgdGhhdCkuCisJU2V0dGluZyB0aGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3VyIGlucHV0IG1ldGhvZCBhbGxvd3MgZW50ZXJpbmcKKwlFbmdsaXNoIGNoYXJhY3RlcnMgZGlyZWN0bHksIGUuZy4sIHdoZW4gaXQncyB1c2VkIHRvIHR5cGUgYWNjZW50ZWQKKwljaGFyYWN0ZXJzIHdpdGggZGVhZCBrZXlzLgorCisJCQkJKidpbWRpc2FibGUnKiAqJ2ltZCcqIConbm9kaXNhYmxlJyogKidub2ltZCcqCisnaW1kaXNhYmxlJyAnaW1kJwlib29sZWFuIChkZWZhdWx0IG9mZiwgb24gZm9yIHNvbWUgc3lzdGVtcyAoU0dJKSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwreGltfAorCQkJfCttdWx0aV9ieXRlX2ltZXwgb3IgfGdsb2JhbC1pbWV8IGZlYXR1cmV9CisJV2hlbiBzZXQgdGhlIElucHV0IE1ldGhvZCBpcyBuZXZlciB1c2VkLiAgVGhpcyBpcyB1c2VmdWwgdG8gZGlzYWJsZQorCXRoZSBJTSB3aGVuIGl0IGRvZXNuJ3Qgd29yayBwcm9wZXJseS4KKwlDdXJyZW50bHkgdGhpcyBvcHRpb24gaXMgb24gYnkgZGVmYXVsdCBmb3IgU0dJL0lSSVggbWFjaGluZXMuICBUaGlzCisJbWF5IGNoYW5nZSBpbiBsYXRlciByZWxlYXNlcy4KKworCQkJCQkJKidpbWluc2VydCcqIConaW1pJyoKKydpbWluc2VydCcgJ2ltaScJbnVtYmVyIChkZWZhdWx0IDAsIDIgd2hlbiBhbiBpbnB1dCBtZXRob2QgaXMgc3VwcG9ydGVkKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCVNwZWNpZmllcyB3aGV0aGVyIDpsbWFwIG9yIGFuIElucHV0IE1ldGhvZCAoSU0pIGlzIHRvIGJlIHVzZWQgaW4KKwlJbnNlcnQgbW9kZS4gIFZhbGlkIHZhbHVlczoKKwkJMAk6bG1hcCBpcyBvZmYgYW5kIElNIGlzIG9mZgorCQkxCTpsbWFwIGlzIE9OIGFuZCBJTSBpcyBvZmYKKwkJMgk6bG1hcCBpcyBvZmYgYW5kIElNIGlzIE9OCisJMiBpcyBhdmFpbGFibGUgb25seSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbXVsdGlfYnl0ZV9pbWV8LCB8K3hpbXwKKwlvciB8Z2xvYmFsLWltZXwuCisJVG8gYWx3YXlzIHJlc2V0IHRoZSBvcHRpb24gdG8gemVybyB3aGVuIGxlYXZpbmcgSW5zZXJ0IG1vZGUgd2l0aCA8RXNjPgorCXRoaXMgY2FuIGJlIHVzZWQ6ID4KKwkJOmlub3JlbWFwIDxFU0M+IDxFU0M+OnNldCBpbWluc2VydD0wPENSPgorPAlUaGlzIG1ha2VzIDpsbWFwIGFuZCBJTSB0dXJuIG9mZiBhdXRvbWF0aWNhbGx5IHdoZW4gbGVhdmluZyBJbnNlcnQKKwltb2RlLgorCU5vdGUgdGhhdCB0aGlzIG9wdGlvbiBjaGFuZ2VzIHdoZW4gdXNpbmcgQ1RSTC1eIGluIEluc2VydCBtb2RlCisJfGlfQ1RSTC1efC4KKwlUaGUgdmFsdWUgaXMgc2V0IHRvIDEgd2hlbiBzZXR0aW5nICdrZXltYXAnIHRvIGEgdmFsaWQga2V5bWFwIG5hbWUuCisJSXQgaXMgYWxzbyB1c2VkIGZvciB0aGUgYXJndW1lbnQgb2YgY29tbWFuZHMgbGlrZSAiciIgYW5kICJmIi4KKwlUaGUgdmFsdWUgMCBtYXkgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggQXRoZW5hIGFuZCBNb3RpZiB3aXRoIHNvbWUgWElNCisJbWV0aG9kcy4gIFVzZSAnaW1kaXNhYmxlJyB0byBkaXNhYmxlIFhJTSB0aGVuLgorCisJCQkJCQkqJ2ltc2VhcmNoJyogKidpbXMnKgorJ2ltc2VhcmNoJyAnaW1zJwludW1iZXIgKGRlZmF1bHQgMCwgMiB3aGVuIGFuIGlucHV0IG1ldGhvZCBpcyBzdXBwb3J0ZWQpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJU3BlY2lmaWVzIHdoZXRoZXIgOmxtYXAgb3IgYW4gSW5wdXQgTWV0aG9kIChJTSkgaXMgdG8gYmUgdXNlZCB3aGVuCisJZW50ZXJpbmcgYSBzZWFyY2ggcGF0dGVybi4gIFZhbGlkIHZhbHVlczoKKwkJLTEJdGhlIHZhbHVlIG9mICdpbWluc2VydCcgaXMgdXNlZCwgbWFrZXMgaXQgbG9vayBsaWtlCisJCQknaW1pbnNlcnQnIGlzIGFsc28gdXNlZCB3aGVuIHR5cGluZyBhIHNlYXJjaCBwYXR0ZXJuCisJCTAJOmxtYXAgaXMgb2ZmIGFuZCBJTSBpcyBvZmYKKwkJMQk6bG1hcCBpcyBPTiBhbmQgSU0gaXMgb2ZmCisJCTIJOmxtYXAgaXMgb2ZmIGFuZCBJTSBpcyBPTgorCU5vdGUgdGhhdCB0aGlzIG9wdGlvbiBjaGFuZ2VzIHdoZW4gdXNpbmcgQ1RSTC1eIGluIENvbW1hbmQtbGluZSBtb2RlCisJfGNfQ1RSTC1efC4KKwlUaGUgdmFsdWUgaXMgc2V0IHRvIDEgd2hlbiBpdCBpcyBub3QgLTEgYW5kIHNldHRpbmcgdGhlICdrZXltYXAnCisJb3B0aW9uIHRvIGEgdmFsaWQga2V5bWFwIG5hbWUuCisJVGhlIHZhbHVlIDAgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSB3aXRoIEF0aGVuYSBhbmQgTW90aWYgd2l0aCBzb21lIFhJTQorCW1ldGhvZHMuICBVc2UgJ2ltZGlzYWJsZScgdG8gZGlzYWJsZSBYSU0gdGhlbi4KKworCQkJCQkJKidpbmNsdWRlJyogKidpbmMnKgorJ2luY2x1ZGUnICdpbmMnCQlzdHJpbmcJKGRlZmF1bHQgIl5ccyojXHMqaW5jbHVkZSIpCisJCQlnbG9iYWwgb3IgbG9jYWwgdG8gYnVmZmVyIHxnbG9iYWwtbG9jYWx8CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtmaW5kX2luX3BhdGh8IGZlYXR1cmV9CisJUGF0dGVybiB0byBiZSB1c2VkIHRvIGZpbmQgYW4gaW5jbHVkZSBjb21tYW5kLglJdCBpcyBhIHNlYXJjaAorCXBhdHRlcm4sIGp1c3QgbGlrZSBmb3IgdGhlICIvIiBjb21tYW5kIChTZWUgfHBhdHRlcm58KS4gIFRoZSBkZWZhdWx0CisJdmFsdWUgaXMgZm9yIEMgcHJvZ3JhbXMuICBUaGlzIG9wdGlvbiBpcyB1c2VkIGZvciB0aGUgY29tbWFuZHMgIltpIiwKKwkiXUkiLCAiW2QiLCBldGMuLiAgVGhlICdpc2ZuYW1lJyBvcHRpb24gaXMgdXNlZCB0byByZWNvZ25pemUgdGhlIGZpbGUKKwluYW1lIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIG1hdGNoZWQgcGF0dGVybi4gIFNlZSB8b3B0aW9uLWJhY2tzbGFzaHwKKwlhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKworCQkJCQkJKidpbmNsdWRlZXhwcicqIConaW5leCcqCisnaW5jbHVkZWV4cHInICdpbmV4JwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlCisJCQl8K2ZpbmRfaW5fcGF0aHwgb3IgfCtldmFsfCBmZWF0dXJlfQorCUV4cHJlc3Npb24gdG8gYmUgdXNlZCB0byB0cmFuc2Zvcm0gdGhlIHN0cmluZyBmb3VuZCB3aXRoIHRoZSAnaW5jbHVkZScKKwlvcHRpb24gdG8gYSBmaWxlIG5hbWUuCU1vc3RseSB1c2VmdWwgdG8gY2hhbmdlICIuIiB0byAiLyIgZm9yIEphdmE6ID4KKwkJOnNldCBpbmNsdWRlZXhwcj1zdWJzdGl0dXRlKHY6Zm5hbWUsJ1xcLicsJy8nLCdnJykKKzwJVGhlICJ2OmZuYW1lIiB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGUgZmlsZSBuYW1lIHRoYXQgd2FzIGRldGVjdGVkLgorCUV2YWx1YXRlZCBpbiB0aGUgfHNhbmRib3h8LgorCUFsc28gdXNlZCBmb3IgdGhlIHxnZnwgY29tbWFuZCBpZiBhbiB1bm1vZGlmaWVkIGZpbGUgbmFtZSBjYW4ndCBiZQorCWZvdW5kLglBbGxvd3MgZG9pbmcgImdmIiBvbiB0aGUgbmFtZSBhZnRlciBhbiAnaW5jbHVkZScgc3RhdGVtZW50LgorCUFsc28gdXNlZCBmb3IgfDxjZmlsZT58LgorCisJCQkJIConaW5jc2VhcmNoJyogKidpcycqIConbm9pbmNzZWFyY2gnKiAqJ25vaXMnKgorJ2luY3NlYXJjaCcgJ2lzJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrZXh0cmFfc2VhcmNofCBmZWF0dXJlfQorCVdoaWxlIHR5cGluZyBhIHNlYXJjaCBjb21tYW5kLCBzaG93IGltbWVkaWF0ZWx5IHdoZXJlIHRoZSBzbyBmYXIKKwl0eXBlZCBwYXR0ZXJuIG1hdGNoZXMuCVRoZSBtYXRjaGVkIHN0cmluZyBpcyBoaWdobGlnaHRlZC4gIElmIHRoZQorCXBhdHRlcm4gaXMgaW52YWxpZCBvciBub3QgZm91bmQsIG5vdGhpbmcgaXMgc2hvd24uICBUaGUgc2NyZWVuIHdpbGwKKwliZSB1cGRhdGVkIG9mdGVuLCB0aGlzIGlzIG9ubHkgdXNlZnVsIG9uIGZhc3QgdGVybWluYWxzLiAgTm90ZSB0aGF0CisJdGhlIG1hdGNoIHdpbGwgYmUgc2hvd24sIGJ1dCB0aGUgY3Vyc29yIGlzIG5vdCBhY3R1YWxseSBwb3NpdGlvbmVkCisJdGhlcmUuCVlvdSBzdGlsbCBuZWVkIHRvIGZpbmlzaCB0aGUgc2VhcmNoIGNvbW1hbmQgd2l0aCA8Q1I+IHRvIG1vdmUKKwl0aGUgY3Vyc29yLiAgVGhlIGhpZ2hsaWdodGluZyBjYW4gYmUgc2V0IHdpdGggdGhlICdpJyBmbGFnIGluCisJJ2hpZ2hsaWdodCcuICBTZWUgYWxzbzogJ2hsc2VhcmNoJy4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonaW5kZW50ZXhwcicqIConaW5kZScqCisnaW5kZW50ZXhwcicgJ2luZGUnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjaW5kZW50fAorCQkJb3IgfCtldmFsfCBmZWF0dXJlc30KKwlFeHByZXNzaW9uIHdoaWNoIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gdGhlIHByb3BlciBpbmRlbnQgZm9yIGEgbGluZS4KKwlJdCBpcyB1c2VkIHdoZW4gYSBuZXcgbGluZSBpcyBjcmVhdGVkLCBmb3IgdGhlIHw9fCBvcGVyYXRvciBhbmQKKwlpbiBJbnNlcnQgbW9kZSBhcyBzcGVjaWZpZWQgd2l0aCB0aGUgJ2luZGVudGtleXMnIG9wdGlvbi4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIG5vdCBlbXB0eSwgaXQgb3ZlcnJ1bGVzIHRoZSAnY2luZGVudCcgYW5kCisJJ3NtYXJ0aW5kZW50JyBpbmRlbnRpbmcuCisJV2hlbiAncGFzdGUnIGlzIHNldCB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZW50aW5nLgorCVRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCB3aXRoIHx2OmxudW18IHNldCB0byB0aGUgbGluZSBudW1iZXIgZm9yCisJd2hpY2ggdGhlIGluZGVudCBpcyB0byBiZSBjb21wdXRlZC4gIFRoZSBjdXJzb3IgaXMgYWxzbyBhcyB0aGlzIGxpbmUKKwl3aGVuIHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCAoYnV0IGl0IG1heSBiZSBtb3ZlZCBhcm91bmQpLgorCVRoZSBleHByZXNzaW9uIG11c3QgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3BhY2VzIHdvcnRoIG9mIGluZGVudC4gIEl0CisJY2FuIHJldHVybiAiLTEiIHRvIGtlZXAgdGhlIGN1cnJlbnQgaW5kZW50ICh0aGlzIG1lYW5zICdhdXRvaW5kZW50JyBpcworCXVzZWQgZm9yIHRoZSBpbmRlbnQpLgorCUZ1bmN0aW9ucyB1c2VmdWwgZm9yIGNvbXB1dGluZyB0aGUgaW5kZW50IGFyZSB8aW5kZW50KCl8LCB8Y2luZGVudCgpfAorCWFuZCB8bGlzcGluZGVudCgpfC4KKwlUaGUgZXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cyEgIEl0IG11c3QKKwlub3QgY2hhbmdlIHRoZSB0ZXh0LCBqdW1wIHRvIGFub3RoZXIgd2luZG93LCBldGMuICBBZnRlcndhcmRzIHRoZQorCWN1cnNvciBwb3NpdGlvbiBpcyBhbHdheXMgcmVzdG9yZWQsIHRodXMgdGhlIGN1cnNvciBtYXkgYmUgbW92ZWQuCisJTm9ybWFsbHkgdGhpcyBvcHRpb24gd291bGQgYmUgc2V0IHRvIGNhbGwgYSBmdW5jdGlvbjogPgorCQk6c2V0IGluZGVudGV4cHI9R2V0TXlJbmRlbnQoKQorPAlFcnJvciBtZXNzYWdlcyB3aWxsIGJlIHN1cHByZXNzZWQsIHVubGVzcyB0aGUgJ2RlYnVnJyBvcHRpb24gY29udGFpbnMKKwkibXNnIi4KKwlTZWUgfGluZGVudC1leHByZXNzaW9ufC4gIEFsc28gc2VlIHxldmFsLXNhbmRib3h8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIG1hZGUgZW1wdHkgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ2luZGVudGtleXMnKiAqJ2luZGsnKgorJ2luZGVudGtleXMnICdpbmRrJwlzdHJpbmcJKGRlZmF1bHQgIjB7LDB9LDosMCMsIV5GLG8sTyxlIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtjaW5kZW50fAorCQkJZmVhdHVyZX0KKwlBIGxpc3Qgb2Yga2V5cyB0aGF0LCB3aGVuIHR5cGVkIGluIEluc2VydCBtb2RlLCBjYXVzZSByZWluZGVudGluZyBvZgorCXRoZSBjdXJyZW50IGxpbmUuICBPbmx5IGhhcHBlbnMgaWYgJ2luZGVudGV4cHInIGlzbid0IGVtcHR5LgorCVRoZSBmb3JtYXQgaXMgaWRlbnRpY2FsIHRvICdjaW5rZXlzJywgc2VlIHxpbmRlbnRrZXlzLWZvcm1hdHwuCisJU2VlIHxDLWluZGVudGluZ3wgYW5kIHxpbmRlbnQtZXhwcmVzc2lvbnwuCisKKwkJCSonaW5mZXJjYXNlJyogKidpbmYnKiAqJ25vaW5mZXJjYXNlJyogKidub2luZicqCisnaW5mZXJjYXNlJyAnaW5mJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlXaGVuIGRvaW5nIGtleXdvcmQgY29tcGxldGlvbiBpbiBpbnNlcnQgbW9kZSB8aW5zLWNvbXBsZXRpb258LCBhbmQKKwknaWdub3JlY2FzZScgaXMgYWxzbyBvbiwgdGhlIGNhc2Ugb2YgdGhlIG1hdGNoIGlzIGFkanVzdGVkLiAgSWYgdGhlCisJdHlwZWQgdGV4dCBjb250YWlucyBhIGxvd2VyY2FzZSBsZXR0ZXIgd2hlcmUgdGhlIG1hdGNoIGhhcyBhbiB1cHBlcgorCWNhc2UgbGV0dGVyLCB0aGUgY29tcGxldGVkIHBhcnQgaXMgbWFkZSBsb3dlcmNhc2UuICBJZiB0aGUgdHlwZWQgdGV4dAorCWhhcyBubyBsb3dlcmNhc2UgbGV0dGVycyBhbmQgdGhlIG1hdGNoIGhhcyBhIGxvd2VyY2FzZSBsZXR0ZXIgd2hlcmUKKwl0aGUgdHlwZWQgdGV4dCBoYXMgYW4gdXBwZXJjYXNlIGxldHRlciwgYW5kIHRoZXJlIGlzIGEgbGV0dGVyIGJlZm9yZQorCWl0LCB0aGUgY29tcGxldGVkIHBhcnQgaXMgbWFkZSB1cHBlcmNhc2UuCisKKwkJCSonaW5zZXJ0bW9kZScqIConaW0nKiAqJ25vaW5zZXJ0bW9kZScqIConbm9pbScqCisnaW5zZXJ0bW9kZScgJ2ltJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYWtlcyBWaW0gd29yayBpbiBhIHdheSB0aGF0IEluc2VydCBtb2RlIGlzIHRoZSBkZWZhdWx0IG1vZGUuICBVc2VmdWwKKwlpZiB5b3Ugd2FudCB0byB1c2UgVmltIGFzIGEgbW9kZWxlc3MgZWRpdG9yLiAgVXNlZCBmb3IgfGV2aW18LgorCVRoZXNlIEluc2VydCBtb2RlIGNvbW1hbmRzIHdpbGwgYmUgdXNlZnVsOgorCS0gVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBtb3ZlIGFyb3VuZC4KKwktIFVzZSBDVFJMLU8gdG8gZXhlY3V0ZSBvbmUgTm9ybWFsIG1vZGUgY29tbWFuZCB8aV9DVFJMLU98KS4gIFdoZW4KKwkgIHRoaXMgaXMgYSBtYXBwaW5nLCBpdCBpcyBleGVjdXRlZCBhcyBpZiAnaW5zZXJ0bW9kZScgd2FzIG9mZi4KKwkgIE5vcm1hbCBtb2RlIHJlbWFpbnMgYWN0aXZlIHVudGlsIHRoZSBtYXBwaW5nIGlzIGZpbmlzaGVkLgorCQkJCQkJCQkqaV9DVFJMLUwqCisJLSBVc2UgQ1RSTC1MIHRvIGV4ZWN1dGUgYSBudW1iZXIgb2YgTm9ybWFsIG1vZGUgY29tbWFuZHMsIHRoZW4gdXNlCisJICA8RXNjPiB0byBnZXQgYmFjayB0byBJbnNlcnQgbW9kZS4KKworCVRoZXNlIGl0ZW1zIGNoYW5nZSB3aGVuICdpbnNlcnRtb2RlJyBpcyBzZXQ6CisJLSB3aGVuIHN0YXJ0aW5nIHRvIGVkaXQgb2YgYSBmaWxlLCBWaW0gZ29lcyB0byBJbnNlcnQgbW9kZS4KKwktIDxFc2M+IGluIEluc2VydCBtb2RlIGlzIGEgbm8tb3AgYW5kIGJlZXBzLgorCS0gPEVzYz4gaW4gTm9ybWFsIG1vZGUgbWFrZXMgVmltIGdvIHRvIEluc2VydCBtb2RlLgorCS0gQ1RSTC1MIGluIEluc2VydCBtb2RlIGlzIGEgY29tbWFuZCwgaXQgaXMgbm90IGluc2VydGVkLgorCS0gQ1RSTC1aIGluIEluc2VydCBtb2RlIHN1c3BlbmRzIFZpbSwgc2VlIHxDVFJMLVp8LgkqaV9DVFJMLVoqCisJSG93ZXZlciwgd2hlbiA8RXNjPiBpcyB1c2VkIGluc2lkZSBhIG1hcHBpbmcsIGl0IGJlaGF2ZXMgbGlrZQorCSdpbnNlcnRtb2RlJyB3YXMgbm90IHNldC4gIFRoaXMgd2FzIGRvbmUgdG8gYmUgYWJsZSB0byB1c2UgdGhlIHNhbWUKKwltYXBwaW5ncyB3aXRoICdpbnNlcnRtb2RlJyBzZXQgb3Igbm90IHNldC4KKwlXaGVuIGV4ZWN1dGluZyBjb21tYW5kcyB3aXRoIHw6bm9ybWFsfCAnaW5zZXJ0bW9kZScgaXMgbm90IHVzZWQuCisKKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJCSonaXNmbmFtZScqIConaXNmJyoKKydpc2ZuYW1lJyAnaXNmJwkJc3RyaW5nCShkZWZhdWx0IGZvciBNUy1ET1MsIFdpbjMyIGFuZCBPUy8yOgorCQkJICAgICAiQCw0OC01NywvLFwsLiwtLF8sKywsLCMsJCwlLHssfSxbLF0sOixALUAsISx+LD0iCisJCQkgICAgZm9yIEFNSUdBOiAiQCw0OC01NywvLC4sLSxfLCssLCwkLDoiCisJCQkgICAgZm9yIFZNUzogIkAsNDgtNTcsLywuLC0sXywrLCwsIywkLCUsPCw+LFssXSw6LDssfiIKKwkJCSAgICBmb3IgT1MvMzkwOiAiQCwyNDAtMjQ5LC8sLiwtLF8sKywsLCMsJCwlLH4sPSIKKwkJCSAgICBvdGhlcndpc2U6ICJALDQ4LTU3LC8sLiwtLF8sKywsLCMsJCwlLH4sPSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIGNoYXJhY3RlcnMgc3BlY2lmaWVkIGJ5IHRoaXMgb3B0aW9uIGFyZSBpbmNsdWRlZCBpbiBmaWxlIG5hbWVzIGFuZAorCXBhdGggbmFtZXMuICBGaWxlbmFtZXMgYXJlIHVzZWQgZm9yIGNvbW1hbmRzIGxpa2UgImdmIiwgIltpIiBhbmQgaW4KKwl0aGUgdGFncyBmaWxlLglJdCBpcyBhbHNvIHVzZWQgZm9yICJcZiIgaW4gYSB8cGF0dGVybnwuCisJTXVsdGktYnl0ZSBjaGFyYWN0ZXJzIDI1NiBhbmQgYWJvdmUgYXJlIGFsd2F5cyBpbmNsdWRlZCwgb25seSB0aGUKKwljaGFyYWN0ZXJzIHVwIHRvIDI1NSBhcmUgc3BlY2lmaWVkIHdpdGggdGhpcyBvcHRpb24uCisJRm9yIFVURi04IHRoZSBjaGFyYWN0ZXJzIDB4YTAgdG8gMHhmZiBhcmUgaW5jbHVkZWQgYXMgd2VsbC4KKworCU5vdGUgdGhhdCBvbiBzeXN0ZW1zIHVzaW5nIGEgYmFja3NsYXNoIGFzIHBhdGggc2VwYXJhdG9yLCBWaW0gdHJpZXMgdG8KKwlkbyBpdHMgYmVzdCB0byBtYWtlIGl0IHdvcmsgYXMgeW91IHdvdWxkIGV4cGVjdC4gIFRoYXQgaXMgYSBiaXQKKwl0cmlja3ksIHNpbmNlIFZpIG9yaWdpbmFsbHkgdXNlZCB0aGUgYmFja3NsYXNoIHRvIGVzY2FwZSBzcGVjaWFsCisJY2hhcmFjdGVycy4gIFZpbSB3aWxsIG5vdCByZW1vdmUgYSBiYWNrc2xhc2ggaW4gZnJvbnQgb2YgYSBub3JtYWwgZmlsZQorCW5hbWUgY2hhcmFjdGVyIG9uIHRoZXNlIHN5c3RlbXMsIGJ1dCBpdCB3aWxsIG9uIFVuaXggYW5kIGFsaWtlcy4gIFRoZQorCScmJyBhbmQgJ14nIGFyZSBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGVzZSBhcmUgc3BlY2lhbCBmb3IKKwljbWQuZXhlLgorCisJVGhlIGZvcm1hdCBvZiB0aGlzIG9wdGlvbiBpcyBhIGxpc3Qgb2YgcGFydHMsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4KKwlFYWNoIHBhcnQgY2FuIGJlIGEgc2luZ2xlIGNoYXJhY3RlciBudW1iZXIgb3IgYSByYW5nZS4JQSByYW5nZSBpcyB0d28KKwljaGFyYWN0ZXIgbnVtYmVycyB3aXRoICctJyBpbiBiZXR3ZWVuLglBIGNoYXJhY3RlciBudW1iZXIgY2FuIGJlIGEKKwlkZWNpbWFsIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NSBvciB0aGUgQVNDSUkgY2hhcmFjdGVyIGl0c2VsZiAoZG9lcworCW5vdCB3b3JrIGZvciBkaWdpdHMpLiAgRXhhbXBsZToKKwkJIl8sLSwxMjgtMTQwLCMtNDMiCShpbmNsdWRlICdfJyBhbmQgJy0nIGFuZCB0aGUgcmFuZ2UKKwkJCQkJMTI4IHRvIDE0MCBhbmQgJyMnIHRvIDQzKQorCUlmIGEgcGFydCBzdGFydHMgd2l0aCAnXicsIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIG51bWJlciBvciByYW5nZQorCXdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgb3B0aW9uLiAgVGhlIG9wdGlvbiBpcyBpbnRlcnByZXRlZCBmcm9tIGxlZnQKKwl0byByaWdodC4gIFB1dCB0aGUgZXhjbHVkZWQgY2hhcmFjdGVyIGFmdGVyIHRoZSByYW5nZSB3aGVyZSBpdCBpcworCWluY2x1ZGVkLiAgVG8gaW5jbHVkZSAnXicgaXRzZWxmIHVzZSBpdCBhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlCisJb3B0aW9uIG9yIHRoZSBlbmQgb2YgYSByYW5nZS4gIEV4YW1wbGU6CisJCSJeYS16LCMsXiIJKGV4Y2x1ZGUgJ2EnIHRvICd6JywgaW5jbHVkZSAnIycgYW5kICdeJykKKwlJZiB0aGUgY2hhcmFjdGVyIGlzICdAJywgYWxsIGNoYXJhY3RlcnMgd2hlcmUgaXNhbHBoYSgpIHJldHVybnMgVFJVRQorCWFyZSBpbmNsdWRlZC4gIE5vcm1hbGx5IHRoZXNlIGFyZSB0aGUgY2hhcmFjdGVycyBhIHRvIHogYW5kIEEgdG8gWiwKKwlwbHVzIGFjY2VudGVkIGNoYXJhY3RlcnMuICBUbyBpbmNsdWRlICdAJyBpdHNlbGYgdXNlICJALUAiLiAgRXhhbXBsZXM6CisJCSJALF5hLXoiCUFsbCBhbHBoYWJldGljIGNoYXJhY3RlcnMsIGV4Y2x1ZGluZyBsb3dlcgorCQkJCWNhc2UgbGV0dGVycy4KKwkJImEteixBLVosQC1AIglBbGwgbGV0dGVycyBwbHVzIHRoZSAnQCcgY2hhcmFjdGVyLgorCUEgY29tbWEgY2FuIGJlIGluY2x1ZGVkIGJ5IHVzaW5nIGl0IHdoZXJlIGEgY2hhcmFjdGVyIG51bWJlciBpcworCWV4cGVjdGVkLiAgRXhhbXBsZToKKwkJIjQ4LTU3LCwsXyIJRGlnaXRzLCBjb21tYSBhbmQgdW5kZXJzY29yZS4KKwlBIGNvbW1hIGNhbiBiZSBleGNsdWRlZCBieSBwcmVwZW5kaW5nIGEgJ14nLiAgRXhhbXBsZToKKwkJIiAtfixeLCw5IglBbGwgY2hhcmFjdGVycyBmcm9tIHNwYWNlIHRvICd+JywgZXhjbHVkaW5nCisJCQkJY29tbWEsIHBsdXMgPFRhYj4uCisJU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKworCQkJCQkJKidpc2lkZW50JyogKidpc2knKgorJ2lzaWRlbnQnICdpc2knCQlzdHJpbmcJKGRlZmF1bHQgZm9yIE1TLURPUywgV2luMzIgYW5kIE9TLzI6CisJCQkJCSAgICJALDQ4LTU3LF8sMTI4LTE2NywyMjQtMjM1IgorCQkJCW90aGVyd2lzZTogIkAsNDgtNTcsXywxOTItMjU1IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgY2hhcmFjdGVycyBnaXZlbiBieSB0aGlzIG9wdGlvbiBhcmUgaW5jbHVkZWQgaW4gaWRlbnRpZmllcnMuCisJSWRlbnRpZmllcnMgYXJlIHVzZWQgaW4gcmVjb2duaXppbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBhZnRlciBhCisJbWF0Y2ggb2YgdGhlICdkZWZpbmUnIG9wdGlvbi4gIEl0IGlzIGFsc28gdXNlZCBmb3IgIlxpIiBpbiBhCisJfHBhdHRlcm58LiBTZWUgJ2lzZm5hbWUnIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXQgb2YgdGhpcworCW9wdGlvbi4KKwlDYXJlZnVsOiBJZiB5b3UgY2hhbmdlIHRoaXMgb3B0aW9uLCBpdCBtaWdodCBicmVhayBleHBhbmRpbmcKKwllbnZpcm9ubWVudCB2YXJpYWJsZXMuCUUuZy4sIHdoZW4gJy8nIGlzIGluY2x1ZGVkIGFuZCBWaW0gdHJpZXMgdG8KKwlleHBhbmQgIiRIT01FLy52aW1pbmZvIi4gIE1heWJlIHlvdSBzaG91bGQgY2hhbmdlICdpc2tleXdvcmQnIGluc3RlYWQuCisKKwkJCQkJCSonaXNrZXl3b3JkJyogKidpc2snKgorJ2lza2V5d29yZCcgJ2lzaycJc3RyaW5nIChWaW0gZGVmYXVsdCBmb3IgTVMtRE9TIGFuZCBXaW4zMjoKKwkJCQkJICAgICJALDQ4LTU3LF8sMTI4LTE2NywyMjQtMjM1IgorCQkJCSAgIG90aGVyd2lzZTogICJALDQ4LTU3LF8sMTkyLTI1NSIKKwkJCQlWaSBkZWZhdWx0OiAiQCw0OC01NyxfIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlLZXl3b3JkcyBhcmUgdXNlZCBpbiBzZWFyY2hpbmcgYW5kIHJlY29nbml6aW5nIHdpdGggbWFueSBjb21tYW5kczoKKwkidyIsICIqIiwgIltpIiwgZXRjLiAgSXQgaXMgYWxzbyB1c2VkIGZvciAiXGsiIGluIGEgfHBhdHRlcm58LglTZWUKKwknaXNmbmFtZScgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCBvZiB0aGlzIG9wdGlvbi4gIEZvciBDCisJcHJvZ3JhbXMgeW91IGNvdWxkIHVzZSAiYS16LEEtWiw0OC01NyxfLC4sLSw+Ii4KKwlGb3IgYSBoZWxwIGZpbGUgaXQgaXMgc2V0IHRvIGFsbCBub24tYmxhbmsgcHJpbnRhYmxlIGNoYXJhY3RlcnMgZXhjZXB0CisJJyonLCAnIicgYW5kICd8JyAoc28gdGhhdCBDVFJMLV0gb24gYSBjb21tYW5kIGZpbmRzIHRoZSBoZWxwIGZvciB0aGF0CisJY29tbWFuZCkuCisJV2hlbiB0aGUgJ2xpc3AnIG9wdGlvbiBpcyBvbiB0aGUgJy0nIGNoYXJhY3RlciBpcyBhbHdheXMgaW5jbHVkZWQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSonaXNwcmludCcqIConaXNwJyoKKydpc3ByaW50JyAnaXNwJwlzdHJpbmcJKGRlZmF1bHQgZm9yIE1TLURPUywgV2luMzIsIE9TLzIgYW5kIE1hY2ludG9zaDoKKwkJCQkiQCx+LTI1NSI7IG90aGVyd2lzZTogIkAsMTYxLTI1NSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIGNoYXJhY3RlcnMgZ2l2ZW4gYnkgdGhpcyBvcHRpb24gYXJlIGRpc3BsYXllZCBkaXJlY3RseSBvbiB0aGUKKwlzY3JlZW4uICBJdCBpcyBhbHNvIHVzZWQgZm9yICJccCIgaW4gYSB8cGF0dGVybnwuICBUaGUgY2hhcmFjdGVycyBmcm9tCisJc3BhY2UgKEFTQ0lJIDMyKSB0byAnficgKEFTQ0lJIDEyNikgYXJlIGFsd2F5cyBkaXNwbGF5ZWQgZGlyZWN0bHksCisJZXZlbiB3aGVuIHRoZXkgYXJlIG5vdCBpbmNsdWRlZCBpbiAnaXNwcmludCcgb3IgZXhjbHVkZWQuICBTZWUKKwknaXNmbmFtZScgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdCBvZiB0aGlzIG9wdGlvbi4KKworCU5vbi1wcmludGFibGUgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIHdpdGggdHdvIGNoYXJhY3RlcnM6CisJCSAgMCAtICAzMQkiXkAiIC0gIl5fIgorCQkgMzIgLSAxMjYJYWx3YXlzIHNpbmdsZSBjaGFyYWN0ZXJzCisJCSAgIDEyNwkJIl4/IgorCQkxMjggLSAxNTkJIn5AIiAtICJ+XyIKKwkJMTYwIC0gMjU0CSJ8ICIgLSAifH4iCisJCSAgIDI1NQkJIn4/IgorCVdoZW4gJ2VuY29kaW5nJyBpcyBhIFVuaWNvZGUgb25lLCBpbGxlZ2FsIGJ5dGVzIGZyb20gMTI4IHRvIDI1NSBhcmUKKwlkaXNwbGF5ZWQgYXMgPHh4Piwgd2l0aCB0aGUgaGV4YWRlY2ltYWwgdmFsdWUgb2YgdGhlIGJ5dGUuCisJV2hlbiAnZGlzcGxheScgY29udGFpbnMgInVoZXgiIGFsbCB1bnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZQorCWRpc3BsYXllZCBhcyA8eHg+LgorCVRoZSBOb25UZXh0IGhpZ2hsaWdodGluZyB3aWxsIGJlIHVzZWQgZm9yIHVucHJpbnRhYmxlIGNoYXJhY3RlcnMuCisJfGhsLU5vblRleHR8CisKKwlNdWx0aS1ieXRlIGNoYXJhY3RlcnMgMjU2IGFuZCBhYm92ZSBhcmUgYWx3YXlzIGluY2x1ZGVkLCBvbmx5IHRoZQorCWNoYXJhY3RlcnMgdXAgdG8gMjU1IGFyZSBzcGVjaWZpZWQgd2l0aCB0aGlzIG9wdGlvbi4gIFdoZW4gYSBjaGFyYWN0ZXIKKwlpcyBwcmludGFibGUgYnV0IGl0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZm9udCwgYQorCXJlcGxhY2VtZW50IGNoYXJhY3RlciB3aWxsIGJlIHNob3duLgorCVVucHJpbnRhYmxlIGFuZCB6ZXJvLXdpZHRoIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgZGlzcGxheWVkIGFzIDx4eHh4Pi4KKwlUaGVyZSBpcyBubyBvcHRpb24gdG8gc3BlY2lmeSB0aGVzZSBjaGFyYWN0ZXJzLgorCisJCQkqJ2pvaW5zcGFjZXMnKiAqJ2pzJyogKidub2pvaW5zcGFjZXMnKiAqJ25vanMnKgorJ2pvaW5zcGFjZXMnICdqcycJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlJbnNlcnQgdHdvIHNwYWNlcyBhZnRlciBhICcuJywgJz8nIGFuZCAnIScgd2l0aCBhIGpvaW4gY29tbWFuZC4KKwlXaGVuICdjcG9wdGlvbnMnIGluY2x1ZGVzIHRoZSAnaicgZmxhZywgb25seSBkbyB0aGlzIGFmdGVyIGEgJy4nLgorCU90aGVyd2lzZSBvbmx5IG9uZSBzcGFjZSBpcyBpbnNlcnRlZC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkJKidrZXknKgorJ2tleScJCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVGhlIGtleSB0aGF0IGlzIHVzZWQgZm9yIGVuY3J5cHRpbmcgYW5kIGRlY3J5cHRpbmcgdGhlIGN1cnJlbnQgYnVmZmVyLgorCVNlZSB8ZW5jcnlwdGlvbnwuCisJQ2FyZWZ1bDogRG8gbm90IHNldCB0aGUga2V5IHZhbHVlIGJ5IGhhbmQsIHNvbWVvbmUgbWlnaHQgc2VlIHRoZSB0eXBlZAorCWtleS4gIFVzZSB0aGUgfDpYfCBjb21tYW5kLiAgQnV0IHlvdSBjYW4gbWFrZSAna2V5JyBlbXB0eTogPgorCQk6c2V0IGtleT0KKzwJSXQgaXMgbm90IHBvc3NpYmxlIHRvIGdldCB0aGUgdmFsdWUgb2YgdGhpcyBvcHRpb24gd2l0aCAiOnNldCBrZXkiIG9yCisJImVjaG8gJmtleSIuICBUaGlzIGlzIHRvIGF2b2lkIHNob3dpbmcgaXQgdG8gc29tZW9uZSB3aG8gc2hvdWxkbid0CisJa25vdy4gIEl0IGFsc28gbWVhbnMgeW91IGNhbm5vdCBzZWUgaXQgeW91cnNlbGYgb25jZSB5b3UgaGF2ZSBzZXQgaXQsCisJYmUgY2FyZWZ1bCBub3QgdG8gbWFrZSBhIHR5cGluZyBlcnJvciEKKworCQkJCQkqJ2tleW1hcCcqICona21wJyogKkU1NDQqCisna2V5bWFwJyAna21wJwkJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtrZXltYXB8CisJCQlmZWF0dXJlfQorCU5hbWUgb2YgYSBrZXlib2FyZCBtYXBwaW5nLiAgU2VlIHxtYnl0ZS1rZXltYXB8LgorCVNldHRpbmcgdGhpcyBvcHRpb24gdG8gYSB2YWxpZCBrZXltYXAgbmFtZSBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mCisJc2V0dGluZyAnaW1pbnNlcnQnIHRvIG9uZSwgc28gdGhhdCB0aGUga2V5bWFwIGJlY29tZXMgZWZmZWN0aXZlLgorCSdpbXNlYXJjaCcgaXMgYWxzbyBzZXQgdG8gb25lLCB1bmxlc3MgaXQgd2FzIC0xCisKKwkJCQkJKidrZXltb2RlbCcqICona20nKgorJ2tleW1vZGVsJyAna20nCQlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJTGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMsIHdoaWNoIGVuYWJsZSBzcGVjaWFsIHRoaW5ncyB0aGF0IGtleXMKKwljYW4gZG8uICBUaGVzZSB2YWx1ZXMgY2FuIGJlIHVzZWQ6CisJICAgc3RhcnRzZWwJVXNpbmcgYSBzaGlmdGVkIHNwZWNpYWwga2V5IHN0YXJ0cyBzZWxlY3Rpb24gKGVpdGhlcgorCQkJU2VsZWN0IG1vZGUgb3IgVmlzdWFsIG1vZGUsIGRlcGVuZGluZyBvbiAia2V5IiBiZWluZworCQkJcHJlc2VudCBpbiAnc2VsZWN0bW9kZScpLgorCSAgIHN0b3BzZWwJVXNpbmcgYSBub3Qtc2hpZnRlZCBzcGVjaWFsIGtleSBzdG9wcyBzZWxlY3Rpb24uCisJU3BlY2lhbCBrZXlzIGluIHRoaXMgY29udGV4dCBhcmUgdGhlIGN1cnNvciBrZXlzLCA8RW5kPiwgPEhvbWU+LAorCTxQYWdlVXA+IGFuZCA8UGFnZURvd24+LgorCVRoZSAna2V5bW9kZWwnIG9wdGlvbiBpcyBzZXQgYnkgdGhlIHw6YmVoYXZlfCBjb21tYW5kLgorCisJCQkJCSona2V5d29yZHByZycqICona3AnKgorJ2tleXdvcmRwcmcnICdrcCcJc3RyaW5nCShkZWZhdWx0ICJtYW4iIG9yICJtYW4gLXMiLCAgRE9TOiAiOmhlbHAiLAorCQkJCQkJT1MvMjogInZpZXcgLyIsIFZNUzogImhlbHAiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlQcm9ncmFtIHRvIHVzZSBmb3IgdGhlIHxLfCBjb21tYW5kLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZQorCWV4cGFuZGVkIHw6c2V0X2VudnwuICAiOmhlbHAiIG1heSBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgVmltIGludGVybmFsCisJaGVscC4gIChOb3RlIHRoYXQgcHJldmlvdXNseSBzZXR0aW5nIHRoZSBnbG9iYWwgb3B0aW9uIHRvIHRoZSBlbXB0eQorCXZhbHVlIGRpZCB0aGlzLCB3aGljaCBpcyBub3cgZGVwcmVjYXRlZC4pCisJV2hlbiAibWFuIiBpcyB1c2VkLCBWaW0gd2lsbCBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZSBhIGNvdW50IGZvciB0aGUKKwkiSyIgY29tbWFuZCB0byBhIHNlY3Rpb24gbnVtYmVyLiAgQWxzbyBmb3IgIm1hbiAtcyIsIGluIHdoaWNoIGNhc2UgdGhlCisJIi1zIiBpcyByZW1vdmVkIHdoZW4gdGhlcmUgaXMgbm8gY291bnQuCisJU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzIGFuZCBiYWNrc2xhc2hlcy4KKwlFeGFtcGxlOiA+CisJCTpzZXQga2V5d29yZHByZz1tYW5cIC1zCis8CVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkqJ2xhbmdtYXAnKiAqJ2xtYXAnKiAqRTM1NyogKkUzNTgqCisnbGFuZ21hcCcgJ2xtYXAnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbGFuZ21hcHwKKwkJCWZlYXR1cmV9CisJVGhpcyBvcHRpb24gYWxsb3dzIHN3aXRjaGluZyB5b3VyIGtleWJvYXJkIGludG8gYSBzcGVjaWFsIGxhbmd1YWdlCisJbW9kZS4JV2hlbiB5b3UgYXJlIHR5cGluZyB0ZXh0IGluIEluc2VydCBtb2RlIHRoZSBjaGFyYWN0ZXJzIGFyZQorCWluc2VydGVkIGRpcmVjdGx5LiAgV2hlbiBpbiBjb21tYW5kIG1vZGUgdGhlICdsYW5nbWFwJyBvcHRpb24gdGFrZXMKKwljYXJlIG9mIHRyYW5zbGF0aW5nIHRoZXNlIHNwZWNpYWwgY2hhcmFjdGVycyB0byB0aGUgb3JpZ2luYWwgbWVhbmluZworCW9mIHRoZSBrZXkuICBUaGlzIG1lYW5zIHlvdSBkb24ndCBoYXZlIHRvIGNoYW5nZSB0aGUga2V5Ym9hcmQgbW9kZSB0bworCWJlIGFibGUgdG8gZXhlY3V0ZSBOb3JtYWwgbW9kZSBjb21tYW5kcy4KKwlUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgJ2tleW1hcCcgb3B0aW9uLCB3aGVyZSBjaGFyYWN0ZXJzIGFyZQorCW1hcHBlZCBpbiBJbnNlcnQgbW9kZS4KKwlUaGlzIG9ubHkgd29ya3MgZm9yIDgtYml0IGNoYXJhY3RlcnMuICBUaGUgdmFsdWUgb2YgJ2xhbmdtYXAnIG1heSBiZQorCXNwZWNpZmllZCB3aXRoIG11bHRpLWJ5dGUgY2hhcmFjdGVycyAoZS5nLiwgVVRGLTgpLCBidXQgb25seSB0aGUgbG93ZXIKKwk4IGJpdHMgb2YgZWFjaCBjaGFyYWN0ZXIgd2lsbCBiZSB1c2VkLgorCisJRXhhbXBsZSAoZm9yIEdyZWVrKToJCQkJCSpncmVlayogID4KKwkgICAgOnNldCBsYW5nbWFwPcFBLMJCLNhDLMRELMVFLNZGLMNHLMdILMlJLM5KLMpLLMtMLMxNLM1OLM9PLNBQLFFRLNFSLNNTLNRULMhVLNlWLFdXLNdYLNVZLMZaLOFhLOJiLPhjLORkLOVlLPZmLONnLOdoLOlpLO5qLOprLOtsLOxtLO1uLO9vLPBwLHFxLPFyLPNzLPR0LOh1LPl2LPJ3LPd4LPV5LOZ6Cis8CUV4YW1wbGUgKGV4Y2hhbmdlcyBtZWFuaW5nIG9mIHogYW5kIHkgZm9yIGNvbW1hbmRzKTogPgorCSAgICA6c2V0IGxhbmdtYXA9enkseXosWlksWVoKKzwKKwlUaGUgJ2xhbmdtYXAnIG9wdGlvbiBpcyBhIGxpc3Qgb2YgcGFydHMsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcy4gIEVhY2gKKwlwYXJ0IGNhbiBiZSBpbiBvbmUgb2YgdHdvIGZvcm1zOgorCTEuICBBIGxpc3Qgb2YgcGFpcnMuICBFYWNoIHBhaXIgaXMgYSAiZnJvbSIgY2hhcmFjdGVyIGltbWVkaWF0ZWx5CisJICAgIGZvbGxvd2VkIGJ5IHRoZSAidG8iIGNoYXJhY3Rlci4gIEV4YW1wbGVzOiAiYUEiLCAiYUFiQmNDIi4KKwkyLiAgQSBsaXN0IG9mICJmcm9tIiBjaGFyYWN0ZXJzLCBhIHNlbWktY29sb24gYW5kIGEgbGlzdCBvZiAidG8iCisJICAgIGNoYXJhY3RlcnMuICBFeGFtcGxlOiAiYWJjO0FCQyIKKwlFeGFtcGxlOiAiYUEsZmdoO0ZHSCxjQ2REZUUiCisJU3BlY2lhbCBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgcHJlY2VkZWQgd2l0aCBhIGJhY2tzbGFzaC4gIFRoZXNlIGFyZQorCSI7IiwgJywnIGFuZCBiYWNrc2xhc2ggaXRzZWxmLgorCisJVGhpcyB3aWxsIGFsbG93IHlvdSB0byBhY3RpdmF0ZSB2aW0gYWN0aW9ucyB3aXRob3V0IGhhdmluZyB0byBzd2l0Y2gKKwliYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRoZSBsYW5ndWFnZXMuICBZb3VyIGxhbmd1YWdlIGNoYXJhY3RlcnMgd2lsbAorCWJlIHVuZGVyc3Rvb2QgYXMgbm9ybWFsIHZpbSBFbmdsaXNoIGNoYXJhY3RlcnMgKGFjY29yZGluZyB0byB0aGUKKwlsYW5nbWFwIG1hcHBpbmdzKSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOgorCSBvIE5vcm1hbC9WaXN1YWwgbW9kZSAoY29tbWFuZHMsIGJ1ZmZlci9yZWdpc3RlciBuYW1lcywgdXNlciBtYXBwaW5ncykKKwkgbyBJbnNlcnQvUmVwbGFjZSBNb2RlOiBSZWdpc3RlciBuYW1lcyBhZnRlciBDVFJMLVIKKwkgbyBJbnNlcnQvUmVwbGFjZSBNb2RlOiBNYXBwaW5ncworCUNoYXJhY3RlcnMgZW50ZXJlZCBpbiBDb21tYW5kLWxpbmUgbW9kZSB3aWxsIE5PVCBiZSBhZmZlY3RlZCBieQorCXRoaXMgb3B0aW9uLiAgIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBjYW4gYmUgY2hhbmdlZCBhdCBhbnkgdGltZQorCWFsbG93aW5nIHRvIHN3aXRjaCBiZXR3ZWVuIG1hcHBpbmdzIGZvciBkaWZmZXJlbnQgbGFuZ3VhZ2VzL2VuY29kaW5ncy4KKwlVc2UgYSBtYXBwaW5nIHRvIGF2b2lkIGhhdmluZyB0byB0eXBlIGl0IGVhY2ggdGltZSEKKworCQkJCQkqJ2xhbmdtZW51JyogKidsbScqCisnbGFuZ21lbnUnICdsbScJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrbWVudXwgYW5kCisJCQl8K211bHRpX2xhbmd8IGZlYXR1cmVzfQorCUxhbmd1YWdlIHRvIHVzZSBmb3IgbWVudSB0cmFuc2xhdGlvbi4gIFRlbGxzIHdoaWNoIGZpbGUgaXMgbG9hZGVkCisJZnJvbSB0aGUgImxhbmciIGRpcmVjdG9yeSBpbiAncnVudGltZXBhdGgnOiA+CisJCSJsYW5nL21lbnVfIiAuICZsYW5nbWVudSAuICIudmltIgorPAkod2l0aG91dCB0aGUgc3BhY2VzKS4gIEZvciBleGFtcGxlLCB0byBhbHdheXMgdXNlIHRoZSBEdXRjaCBtZW51cywgbm8KKwltYXR0ZXIgd2hhdCAkTEFORyBpcyBzZXQgdG86ID4KKwkJOnNldCBsYW5nbWVudT1ubF9OTC5JU09fODg1OS0xCis8CVdoZW4gJ2xhbmdtZW51JyBpcyBlbXB0eSwgfHY6bGFuZ3wgaXMgdXNlZC4KKwlJZiB5b3VyICRMQU5HIGlzIHNldCB0byBhIG5vbi1FbmdsaXNoIGxhbmd1YWdlIGJ1dCB5b3UgZG8gd2FudCB0byB1c2UKKwl0aGUgRW5nbGlzaCBtZW51czogPgorCQk6c2V0IGxhbmdtZW51PW5vbmUKKzwJVGhpcyBvcHRpb24gbXVzdCBiZSBzZXQgYmVmb3JlIGxvYWRpbmcgbWVudXMsIHN3aXRjaGluZyBvbiBmaWxldHlwZQorCWRldGVjdGlvbiBvciBzeW50YXggaGlnaGxpZ2h0aW5nLiAgT25jZSB0aGUgbWVudXMgYXJlIGRlZmluZWQgc2V0dGluZworCXRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuICBCdXQgeW91IGNvdWxkIGRvIHRoaXM6ID4KKwkJOnNvdXJjZSAkVklNUlVOVElNRS9kZWxtZW51LnZpbQorCQk6c2V0IGxhbmdtZW51PWRlX0RFLklTT184ODU5LTEKKwkJOnNvdXJjZSAkVklNUlVOVElNRS9tZW51LnZpbQorPAlXYXJuaW5nOiBUaGlzIGRlbGV0ZXMgYWxsIG1lbnVzIHRoYXQgeW91IGRlZmluZWQgeW91cnNlbGYhCisKKwkJCQkJKidsYXN0c3RhdHVzJyogKidscycqCisnbGFzdHN0YXR1cycgJ2xzJwludW1iZXIJKGRlZmF1bHQgMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgdmFsdWUgb2YgdGhpcyBvcHRpb24gaW5mbHVlbmNlcyB3aGVuIHRoZSBsYXN0IHdpbmRvdyB3aWxsIGhhdmUgYQorCXN0YXR1cyBsaW5lOgorCQkwOiBuZXZlcgorCQkxOiBvbmx5IGlmIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gd2luZG93cworCQkyOiBhbHdheXMKKwlUaGUgc2NyZWVuIGxvb2tzIG5pY2VyIHdpdGggYSBzdGF0dXMgbGluZSBpZiB5b3UgaGF2ZSBzZXZlcmFsCisJd2luZG93cywgYnV0IGl0IHRha2VzIGFub3RoZXIgc2NyZWVuIGxpbmUuIHxzdGF0dXMtbGluZXwKKworCQkJKidsYXp5cmVkcmF3JyogKidseicqIConbm9sYXp5cmVkcmF3JyogKidub2x6JyoKKydsYXp5cmVkcmF3JyAnbHonCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgc2NyZWVuIHdpbGwgbm90IGJlIHJlZHJhd24gd2hpbGUKKwlleGVjdXRpbmcgbWFjcm9zLCByZWdpc3RlcnMgYW5kIG90aGVyIGNvbW1hbmRzIHRoYXQgaGF2ZSBub3QgYmVlbgorCXR5cGVkLglBbHNvLCB1cGRhdGluZyB0aGUgd2luZG93IHRpdGxlIGlzIHBvc3Rwb25lZC4gIFRvIGZvcmNlIGFuCisJdXBkYXRlIHVzZSB8OnJlZHJhd3wuCisKKwkJCSonbGluZWJyZWFrJyogKidsYnInKiAqJ25vbGluZWJyZWFrJyogKidub2xicicqCisnbGluZWJyZWFrJyAnbGJyJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgIHwrbGluZWJyZWFrfAorCQkJZmVhdHVyZX0KKwlJZiBvbiBWaW0gd2lsbCB3cmFwIGxvbmcgbGluZXMgYXQgYSBjaGFyYWN0ZXIgaW4gJ2JyZWFrYXQnIHJhdGhlcgorCXRoYW4gYXQgdGhlIGxhc3QgY2hhcmFjdGVyIHRoYXQgZml0cyBvbiB0aGUgc2NyZWVuLiAgVW5saWtlCisJJ3dyYXBtYXJnaW4nIGFuZCAndGV4dHdpZHRoJywgdGhpcyBkb2VzIG5vdCBpbnNlcnQgPEVPTD5zIGluIHRoZSBmaWxlLAorCWl0IG9ubHkgYWZmZWN0cyB0aGUgd2F5IHRoZSBmaWxlIGlzIGRpc3BsYXllZCwgbm90IGl0cyBjb250ZW50cy4gIFRoZQorCXZhbHVlIG9mICdzaG93YnJlYWsnIGlzIHVzZWQgdG8gcHV0IGluIGZyb250IG9mIHdyYXBwZWQgbGluZXMuCisJVGhpcyBvcHRpb24gaXMgbm90IHVzZWQgd2hlbiB0aGUgJ3dyYXAnIG9wdGlvbiBpcyBvZmYgb3IgJ2xpc3QnIGlzIG9uLgorCU5vdGUgdGhhdCA8VGFiPiBjaGFyYWN0ZXJzIGFmdGVyIGFuIDxFT0w+IGFyZSBtb3N0bHkgbm90IGRpc3BsYXllZAorCXdpdGggdGhlIHJpZ2h0IGFtb3VudCBvZiB3aGl0ZSBzcGFjZS4KKworCQkJCQkJKidsaW5lcycqICpFNTkzKgorJ2xpbmVzJwkJCW51bWJlcgkoZGVmYXVsdCAyNCBvciB0ZXJtaW5hbCBoZWlnaHQpCisJCQlnbG9iYWwKKwlOdW1iZXIgb2YgbGluZXMgb2YgdGhlIFZpbSB3aW5kb3cuCisJTm9ybWFsbHkgeW91IGRvbid0IG5lZWQgdG8gc2V0IHRoaXMuICBJdCBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgdGhlCisJdGVybWluYWwgaW5pdGlhbGl6YXRpb24gY29kZS4KKwlXaGVuIFZpbSBpcyBydW5uaW5nIGluIHRoZSBHVUkgb3IgaW4gYSByZXNpemFibGUgd2luZG93LCBzZXR0aW5nIHRoaXMKKwlvcHRpb24gd2lsbCBjYXVzZSB0aGUgd2luZG93IHNpemUgdG8gYmUgY2hhbmdlZC4gIFdoZW4geW91IG9ubHkgd2FudAorCXRvIHVzZSB0aGUgc2l6ZSBmb3IgdGhlIEdVSSwgcHV0IHRoZSBjb21tYW5kIGluIHlvdXIgfGd2aW1yY3wgZmlsZS4KKwlWaW0gbGltaXRzIHRoZSBudW1iZXIgb2YgbGluZXMgdG8gd2hhdCBmaXRzIG9uIHRoZSBzY3JlZW4uICBZb3UgY2FuCisJdXNlIHRoaXMgY29tbWFuZCB0byBnZXQgdGhlIHRhbGxlc3Qgd2luZG93IHBvc3NpYmxlOiA+CisJCTpzZXQgbGluZXM9OTk5Cis8CUlmIHlvdSBnZXQgbGVzcyBsaW5lcyB0aGFuIGV4cGVjdGVkLCBjaGVjayB0aGUgJ2d1aWhlYWRyb29tJyBvcHRpb24uCisJV2hlbiB5b3Ugc2V0IHRoaXMgb3B0aW9uIGFuZCBWaW0gaXMgdW5hYmxlIHRvIGNoYW5nZSB0aGUgcGh5c2ljYWwKKwludW1iZXIgb2YgbGluZXMgb2YgdGhlIGRpc3BsYXksIHRoZSBkaXNwbGF5IG1heSBiZSBtZXNzZWQgdXAuCisKKwkJCQkJCSonbGluZXNwYWNlJyogKidsc3AnKgorJ2xpbmVzcGFjZScgJ2xzcCcJbnVtYmVyCShkZWZhdWx0IDAsIDEgZm9yIFdpbjMyIEdVSSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGluIHRoZSBHVUl9CisJTnVtYmVyIG9mIHBpeGVsIGxpbmVzIGluc2VydGVkIGJldHdlZW4gY2hhcmFjdGVycy4gIFVzZWZ1bCBpZiB0aGUgZm9udAorCXVzZXMgdGhlIGZ1bGwgY2hhcmFjdGVyIGNlbGwgaGVpZ2h0LCBtYWtpbmcgbGluZXMgdG91Y2ggZWFjaCBvdGhlci4KKwlXaGVuIG5vbi16ZXJvIHRoZXJlIGlzIHJvb20gZm9yIHVuZGVybGluaW5nLgorCisJCQkJCQkqJ2xpc3AnKiAqJ25vbGlzcCcqCisnbGlzcCcJCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2xpc3BpbmRlbnR8CisJCQlmZWF0dXJlfQorCUxpc3AgbW9kZTogV2hlbiA8RW50ZXI+IGlzIHR5cGVkIGluIGluc2VydCBtb2RlIHNldCB0aGUgaW5kZW50IGZvcgorCXRoZSBuZXh0IGxpbmUgdG8gTGlzcCBzdGFuZGFyZHMgKHdlbGwsIHNvcnQgb2YpLiAgQWxzbyBoYXBwZW5zIHdpdGgKKwkiY2MiIG9yICJTIi4gICdhdXRvaW5kZW50JyBtdXN0IGFsc28gYmUgb24gZm9yIHRoaXMgdG8gd29yay4gIFRoZSAncCcKKwlmbGFnIGluICdjcG9wdGlvbnMnIGNoYW5nZXMgdGhlIG1ldGhvZCBvZiBpbmRlbnRpbmc6IFZpIGNvbXBhdGlibGUgb3IKKwliZXR0ZXIuICBBbHNvIHNlZSAnbGlzcHdvcmRzJy4KKwlUaGUgJy0nIGNoYXJhY3RlciBpcyBpbmNsdWRlZCBpbiBrZXl3b3JkIGNoYXJhY3RlcnMuICBSZWRlZmluZXMgdGhlCisJIj0iIG9wZXJhdG9yIHRvIHVzZSB0aGlzIHNhbWUgaW5kZW50YXRpb24gYWxnb3JpdGhtIHJhdGhlciB0aGFuCisJY2FsbGluZyBhbiBleHRlcm5hbCBwcm9ncmFtIGlmICdlcXVhbHByZycgaXMgZW1wdHkuCisJVGhpcyBvcHRpb24gaXMgbm90IHVzZWQgd2hlbiAncGFzdGUnIGlzIHNldC4KKwl7Vmk6IERvZXMgaXQgYSBsaXR0bGUgYml0IGRpZmZlcmVudGx5fQorCisJCQkJCQkqJ2xpc3B3b3JkcycqIConbHcnKgorJ2xpc3B3b3JkcycgJ2x3JwlzdHJpbmcJKGRlZmF1bHQgaXMgdmVyeSBsb25nKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K2xpc3BpbmRlbnR8CisJCQlmZWF0dXJlfQorCUNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzIHRoYXQgaW5mbHVlbmNlIHRoZSBMaXNwIGluZGVudGluZy4KKwl8J2xpc3AnfAorCisJCQkJCQkqJ2xpc3QnKiAqJ25vbGlzdCcqCisnbGlzdCcJCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCUxpc3QgbW9kZTogU2hvdyB0YWJzIGFzIENUUkwtSSwgc2hvdyBlbmQgb2YgbGluZSB3aXRoICQuICBVc2VmdWwgdG8KKwlzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0YWJzIGFuZCBzcGFjZXMgYW5kIGZvciB0cmFpbGluZyBibGFua3MuCisJTm90ZSB0aGF0IHRoaXMgd2lsbCBhbHNvIGFmZmVjdCBmb3JtYXR0aW5nIChzZXQgd2l0aCAndGV4dHdpZHRoJyBvcgorCSd3cmFwbWFyZ2luJykgd2hlbiAnY3BvcHRpb25zJyBpbmNsdWRlcyAnTCcuICBTZWUgJ2xpc3RjaGFycycgZm9yCisJY2hhbmdpbmcgdGhlIHdheSB0YWJzIGFyZSBkaXNwbGF5ZWQuCisKKwkJCQkJCSonbGlzdGNoYXJzJyogKidsY3MnKgorJ2xpc3RjaGFycycgJ2xjcycJc3RyaW5nCShkZWZhdWx0ICJlb2w6JCIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJU3RyaW5ncyB0byB1c2UgaW4gJ2xpc3QnIG1vZGUuCUl0IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc3RyaW5nCisJc2V0dGluZ3MuCisJICBlb2w6YwkJQ2hhcmFjdGVyIHRvIHNob3cgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUuICBXaGVuCisJCQlvbWl0dGVkLCB0aGVyZSBpcyBubyBleHRyYSBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUKKwkJCWxpbmUuCisJICB0YWI6eHkJVHdvIGNoYXJhY3RlcnMgdG8gYmUgdXNlZCB0byBzaG93IGEgVGFiLiAgVGhlIGZpcnN0CisJCQljaGFyIGlzIHVzZWQgb25jZS4gIFRoZSBzZWNvbmQgY2hhciBpcyByZXBlYXRlZCB0bworCQkJZmlsbCB0aGUgc3BhY2UgdGhhdCB0aGUgVGFiIG5vcm1hbGx5IG9jY3VwaWVzLgorCQkJInRhYjo+LSIgd2lsbCBzaG93IGEgVGFiIHRoYXQgdGFrZXMgZm91ciBzcGFjZXMgYXMKKwkJCSI+LS0tIi4gIFdoZW4gb21pdHRlZCwgYSBUYWIgaXMgc2hvdyBhcyBeSS4KKwkgIHRyYWlsOmMJQ2hhcmFjdGVyIHRvIHNob3cgZm9yIHRyYWlsaW5nIHNwYWNlcy4JV2hlbiBvbWl0dGVkLAorCQkJdHJhaWxpbmcgc3BhY2VzIGFyZSBibGFuay4KKwkgIGV4dGVuZHM6YwlDaGFyYWN0ZXIgdG8gc2hvdyBpbiB0aGUgbGFzdCBjb2x1bW4sIHdoZW4gJ3dyYXAnIGlzCisJCQlvZmYgYW5kIHRoZSBsaW5lIGNvbnRpbnVlcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIHRoZQorCQkJc2NyZWVuLgorCSAgcHJlY2VkZXM6YwlDaGFyYWN0ZXIgdG8gc2hvdyBpbiB0aGUgZmlyc3QgY29sdW1uLCB3aGVuICd3cmFwJworCQkJaXMgb2ZmIGFuZCB0aGVyZSBpcyB0ZXh0IHByZWNlZGluZyB0aGUgY2hhcmFjdGVyCisJCQl2aXNpYmxlIGluIHRoZSBmaXJzdCBjb2x1bW4uCisKKwlUaGUgY2hhcmFjdGVycyAnOicgYW5kICcsJyBzaG91bGQgbm90IGJlIHVzZWQuCVVURi04IGNoYXJhY3RlcnMgY2FuCisJYmUgdXNlZCB3aGVuICdlbmNvZGluZycgaXMgInV0Zi04Iiwgb3RoZXJ3aXNlIG9ubHkgcHJpbnRhYmxlCisJY2hhcmFjdGVycyBhcmUgYWxsb3dlZC4KKworCUV4YW1wbGVzOiA+CisJICAgIDpzZXQgbGNzPXRhYjo+LSx0cmFpbDotCisJICAgIDpzZXQgbGNzPXRhYjo+LSxlb2w6PAorCSAgICA6c2V0IGxjcz1leHRlbmRzOj4scHJlY2VkZXM6PAorPAlUaGUgIk5vblRleHQiIGhpZ2hsaWdodGluZyB3aWxsIGJlIHVzZWQgZm9yICJlb2wiLCAiZXh0ZW5kcyIgYW5kCisJInByZWNlZGVzIi4gICJTcGVjaWFsS2V5IiBmb3IgInRhYiIgYW5kICJ0cmFpbCIuCisKKwkJCSonbHBsJyogKidub2xwbCcqIConbG9hZHBsdWdpbnMnKiAqJ25vbG9hZHBsdWdpbnMnKgorJ2xvYWRwbHVnaW5zJyAnbHBsJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24gdGhlIHBsdWdpbiBzY3JpcHRzIGFyZSBsb2FkZWQgd2hlbiBzdGFydGluZyB1cCB8bG9hZC1wbHVnaW5zfC4KKwlUaGlzIG9wdGlvbiBjYW4gYmUgcmVzZXQgaW4geW91ciB8dmltcmN8IGZpbGUgdG8gZGlzYWJsZSB0aGUgbG9hZGluZworCW9mIHBsdWdpbnMuCisJTm90ZSB0aGF0IHVzaW5nIHRoZSAiLXUgTk9ORSIgYW5kICItLW5vcGx1Z2luIiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisJcmVzZXQgdGhpcyBvcHRpb24uIHwtdXwgfC0tbm9wbHVnaW58CisKKwkJCQkJCSonbWFnaWMnKiAqJ25vbWFnaWMnKgorJ21hZ2ljJwkJCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwlDaGFuZ2VzIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCBpbiBzZWFyY2ggcGF0dGVybnMuCisJU2VlIHxwYXR0ZXJufC4KKwlOT1RFOiBUbyBhdm9pZCBwb3J0YWJpbGl0eSBwcm9ibGVtcyB3aXRoIHVzaW5nIHBhdHRlcm5zLCBhbHdheXMga2VlcAorCXRoaXMgb3B0aW9uIGF0IHRoZSBkZWZhdWx0ICJvbiIuICBPbmx5IHN3aXRjaCBpdCBvZmYgd2hlbiB3b3JraW5nIHdpdGgKKwlvbGQgVmkgc2NyaXB0cy4gIEluIGFueSBvdGhlciBzaXR1YXRpb24gd3JpdGUgcGF0dGVybnMgdGhhdCB3b3JrIHdoZW4KKwknbWFnaWMnIGlzIG9uLgorCisJCQkJCQkqJ21ha2VlZicqIConbWVmJyoKKydtYWtlZWYnICdtZWYnCQlzdHJpbmcJKGRlZmF1bHQ6ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3F1aWNrZml4fAorCQkJZmVhdHVyZX0KKwlOYW1lIG9mIHRoZSBlcnJvcmZpbGUgZm9yIHRoZSB8Om1ha2V8IGNvbW1hbmQgKHNlZSB8Om1ha2VfbWFrZXByZ3wpCisJYW5kIHRoZSB8OmdyZXB8IGNvbW1hbmQuCisJV2hlbiBpdCBpcyBlbXB0eSwgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgdGVtcCBmaWxlIHdpbGwgYmUgdXNlZC4KKwlXaGVuICIjIyIgaXMgaW5jbHVkZWQsIGl0IGlzIHJlcGxhY2VkIGJ5IGEgbnVtYmVyIHRvIG1ha2UgdGhlIG5hbWUKKwl1bmlxdWUuICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgIjptYWtlIiBjb21tYW5kIGRvZXNuJ3Qgb3ZlcndyaXRlIGFuCisJZXhpc3RpbmcgZmlsZS4KKwlOT1QgdXNlZCBmb3IgdGhlICI6Y2YiIGNvbW1hbmQuICBTZWUgJ2Vycm9yZmlsZScgZm9yIHRoYXQuCisJRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LgorCVNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ21ha2VwcmcnKiAqJ21wJyoKKydtYWtlcHJnJyAnbXAnCQlzdHJpbmcJKGRlZmF1bHQgIm1ha2UiLCBWTVM6ICJNTVMiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlQcm9ncmFtIHRvIHVzZSBmb3IgdGhlICI6bWFrZSIgY29tbWFuZC4gIFNlZSB8Om1ha2VfbWFrZXByZ3wuICBUaGlzCisJb3B0aW9uIG1heSBjb250YWluICclJyBhbmQgJyMnIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSBleHBhbmRlZCBsaWtlCisJd2hlbiB1c2VkIGluIGEgY29tbWFuZC1saW5lLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZAorCXw6c2V0X2VudnwuICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kCisJYmFja3NsYXNoZXMuICBOb3RlIHRoYXQgYSAnfCcgbXVzdCBiZSBlc2NhcGVkIHR3aWNlOiBvbmNlIGZvciAiOnNldCIKKwlhbmQgb25jZSBmb3IgdGhlIGludGVycHJldGF0aW9uIG9mIGEgY29tbWFuZC4gIFdoZW4geW91IHVzZSBhIGZpbHRlcgorCWNhbGxlZCAibXlmaWx0ZXIiIGRvIGl0IGxpa2UgdGhpczogPgorCSAgICA6c2V0IG1ha2Vwcmc9Z21ha2VcIFxcXHxcIG15ZmlsdGVyCis8CVRoZSBwbGFjZWhvbGRlciAiJCoiIGNhbiBiZSBnaXZlbiAoZXZlbiBtdWx0aXBsZSB0aW1lcykgdG8gc3BlY2lmeQorCXdoZXJlIHRoZSBhcmd1bWVudHMgd2lsbCBiZSBpbmNsdWRlZCwgZm9yIGV4YW1wbGU6ID4KKwkgICAgOnNldCBtYWtlcHJnPWxhdGV4XCBcXFxcbm9uc3RvcG1vZGVcIFxcXFxpbnB1dFxceyQqfQorPAlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonbWF0Y2hwYWlycycqIConbXBzJyoKKydtYXRjaHBhaXJzJyAnbXBzJwlzdHJpbmcJKGRlZmF1bHQgIig6KSx7On0sWzpdIikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlDaGFyYWN0ZXJzIHRoYXQgZm9ybSBwYWlycy4gIFRoZSB8JXwgY29tbWFuZCBqdW1wcyBmcm9tIG9uZSB0byB0aGUKKwlvdGhlci4JQ3VycmVudGx5IG9ubHkgc2luZ2xlIGNoYXJhY3RlciBwYWlycyBhcmUgYWxsb3dlZCwgYW5kIHRoZXkKKwltdXN0IGJlIGRpZmZlcmVudC4gIFRoZSBjaGFyYWN0ZXJzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IGEgY29sb24uICBUaGUKKwlwYWlycyBtdXN0IGJlIHNlcGFyYXRlZCBieSBhIGNvbW1hLiAgRXhhbXBsZSBmb3IgaW5jbHVkaW5nICc8JyBhbmQgJz4nCisJKEhUTUwpOiA+CisJCTpzZXQgbXBzKz08Oj4KKworPAlBIG1vcmUgZXhvdGljIGV4YW1wbGUsIHRvIGp1bXAgYmV0d2VlbiB0aGUgJz0nIGFuZCAnOycgaW4gYW4KKwlhc3NpZ25tZW50LCB1c2VmdWwgZm9yIGxhbmd1YWdlcyBsaWtlIEMgYW5kIEphdmE6ID4KKwkJOmF1IEZpbGVUeXBlIGMsY3BwLGphdmEgc2V0IG1wcys9PTo7CisKKzwJRm9yIGEgbW9yZSBhZHZhbmNlZCB3YXkgb2YgdXNpbmcgIiUiLCBzZWUgdGhlIG1hdGNoaXQudmltIHBsdWdpbiBpbgorCXRoZSAkVklNUlVOVElNRS9tYWNyb3MgZGlyZWN0b3J5LiB8YWRkLWxvY2FsLWhlbHB8CisKKwkJCQkJCSonbWF0Y2h0aW1lJyogKidtYXQnKgorJ21hdGNodGltZScgJ21hdCcJbnVtYmVyCShkZWZhdWx0IDUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9e2luIE52aX0KKwlUZW50aHMgb2YgYSBzZWNvbmQgdG8gc2hvdyB0aGUgbWF0Y2hpbmcgcGFyZW4sIHdoZW4gJ3Nob3dtYXRjaCcgaXMKKwlzZXQuICBOb3RlIHRoYXQgdGhpcyBpcyBub3QgaW4gbWlsbGlzZWNvbmRzLCBsaWtlIG90aGVyIG9wdGlvbnMgdGhhdAorCXNldCBhIHRpbWUuICBUaGlzIGlzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBOdmkuCisKKwkJCQkJCSonbWF4ZnVuY2RlcHRoJyogKidtZmQnKgorJ21heGZ1bmNkZXB0aCcgJ21mZCcJbnVtYmVyCShkZWZhdWx0IDEwMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYXhpbXVtIGRlcHRoIG9mIGZ1bmN0aW9uIGNhbGxzIGZvciB1c2VyIGZ1bmN0aW9ucy4gIFRoaXMgbm9ybWFsbHkKKwljYXRjaGVzIGVuZGxlc3MgcmVjdXJzaW9uLiAgV2hlbiB1c2luZyBhIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aXRoCisJbW9yZSBkZXB0aCwgc2V0ICdtYXhmdW5jZGVwdGgnIHRvIGEgYmlnZ2VyIG51bWJlci4gIEJ1dCB0aGlzIHdpbGwgdXNlCisJbW9yZSBtZW1vcnksIHRoZXJlIGlzIHRoZSBkYW5nZXIgb2YgZmFpbGluZyB3aGVuIG1lbW9yeSBpcyBleGhhdXN0ZWQuCisJU2VlIGFsc28gfDpmdW5jdGlvbnwuCisKKwkJCQkJCSonbWF4bWFwZGVwdGgnKiAqJ21tZCcqICpFMjIzKgorJ21heG1hcGRlcHRoJyAnbW1kJwludW1iZXIJKGRlZmF1bHQgMTAwMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYXhpbXVtIG51bWJlciBvZiB0aW1lcyBhIG1hcHBpbmcgaXMgZG9uZSB3aXRob3V0IHJlc3VsdGluZyBpbiBhCisJY2hhcmFjdGVyIHRvIGJlIHVzZWQuICBUaGlzIG5vcm1hbGx5IGNhdGNoZXMgZW5kbGVzcyBtYXBwaW5ncywgbGlrZQorCSI6bWFwIHggeSIgd2l0aCAiOm1hcCB5IHgiLiAgSXQgc3RpbGwgZG9lcyBub3QgY2F0Y2ggIjptYXAgZyB3ZyIsCisJYmVjYXVzZSB0aGUgJ3cnIGlzIHVzZWQgYmVmb3JlIHRoZSBuZXh0IG1hcHBpbmcgaXMgZG9uZS4gIFNlZSBhbHNvCisJfGtleS1tYXBwaW5nfC4KKworCQkJCQkJKidtYXhtZW0nKiAqJ21tJyoKKydtYXhtZW0nICdtbScJCW51bWJlcgkoZGVmYXVsdCBiZXR3ZWVuIDI1NiB0byA1MTIwIChzeXN0ZW0KKwkJCQkgZGVwZW5kZW50KSBvciBoYWxmIHRoZSBhbW91bnQgb2YgbWVtb3J5CisJCQkJIGF2YWlsYWJsZSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgKGluIEtieXRlKSB0byB1c2UgZm9yIG9uZSBidWZmZXIuICBXaGVuIHRoaXMKKwlsaW1pdCBpcyByZWFjaGVkIGFsbG9jYXRpbmcgZXh0cmEgbWVtb3J5IGZvciBhIGJ1ZmZlciB3aWxsIGNhdXNlCisJb3RoZXIgbWVtb3J5IHRvIGJlIGZyZWVkLiAgTWF4aW11bSB2YWx1ZSAyMDAwMDAwLiAgVXNlIHRoaXMgdG8gd29yaworCXdpdGhvdXQgYSBsaW1pdC4gIEFsc28gc2VlICdtYXhtZW10b3QnLgorCisJCQkJCQkqJ21heG1lbXRvdCcqIConbW10JyoKKydtYXhtZW10b3QnICdtbXQnCW51bWJlcgkoZGVmYXVsdCBiZXR3ZWVuIDIwNDggYW5kIDEwMjQwIChzeXN0ZW0KKwkJCQkgZGVwZW5kZW50KSBvciBoYWxmIHRoZSBhbW91bnQgb2YgbWVtb3J5CisJCQkJIGF2YWlsYWJsZSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgKGluIEtieXRlKSB0byB1c2UgZm9yIGFsbCBidWZmZXJzIHRvZ2V0aGVyLgorCU1heGltdW0gdmFsdWUgMjAwMDAwMC4JVXNlIHRoaXMgdG8gd29yayB3aXRob3V0IGEgbGltaXQuICBBbHNvIHNlZQorCSdtYXhtZW0nLgorCisJCQkJCQkqJ21lbnVpdGVtcycqIConbWlzJyoKKydtZW51aXRlbXMnICdtaXMnCW51bWJlcgkoZGVmYXVsdCAyNSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCttZW51fAorCQkJZmVhdHVyZX0KKwlNYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byB1c2UgaW4gYSBtZW51LiAgVXNlZCBmb3IgbWVudXMgdGhhdCBhcmUKKwlnZW5lcmF0ZWQgZnJvbSBhIGxpc3Qgb2YgaXRlbXMsIGUuZy4sIHRoZSBCdWZmZXJzIG1lbnUuICBDaGFuZ2luZyB0aGlzCisJb3B0aW9uIGhhcyBubyBkaXJlY3QgZWZmZWN0LCB0aGUgbWVudSBtdXN0IGJlIHJlZnJlc2hlZCBmaXJzdC4KKworCQkJCSAgIConbW9kZWxpbmUnKiAqJ21sJyogKidub21vZGVsaW5lJyogKidub21sJyoKKydtb2RlbGluZScgJ21sJwkJYm9vbGVhbgkoVmltIGRlZmF1bHQ6IG9uLCBWaSBkZWZhdWx0OiBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCQkJCSonbW9kZWxpbmVzJyogKidtbHMnKgorJ21vZGVsaW5lcycgJ21scycJbnVtYmVyCShkZWZhdWx0IDUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJSWYgJ21vZGVsaW5lJyBpcyBvbiAnbW9kZWxpbmVzJyBnaXZlcyB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgaXMKKwljaGVja2VkIGZvciBzZXQgY29tbWFuZHMuICBJZiAnbW9kZWxpbmUnIGlzIG9mZiBvciAnbW9kZWxpbmVzJyBpcyB6ZXJvCisJbm8gbGluZXMgYXJlIGNoZWNrZWQuICBTZWUgfG1vZGVsaW5lfC4KKwlOT1RFOiAnbW9kZWxpbmUnIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJKidtb2RpZmlhYmxlJyogKidtYScqIConbm9tb2RpZmlhYmxlJyogKidub21hJyoKKydtb2RpZmlhYmxlJyAnbWEnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CQkqRTIxKgorCVdoZW4gb2ZmIHRoZSBidWZmZXIgY29udGVudHMgY2Fubm90IGJlIGNoYW5nZWQuICBUaGUgJ2ZpbGVmb3JtYXQnIGFuZAorCSdmaWxlZW5jb2RpbmcnIG9wdGlvbnMgYWxzbyBjYW4ndCBiZSBjaGFuZ2VkLgorCUNhbiBiZSByZXNldCB3aXRoIHRoZSB8LU18IGNvbW1hbmQgbGluZSBhcmd1bWVudC4KKworCQkJCSonbW9kaWZpZWQnKiAqJ21vZCcqIConbm9tb2RpZmllZCcqIConbm9tb2QnKgorJ21vZGlmaWVkJyAnbW9kJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG9uLCB0aGUgYnVmZmVyIGlzIGNvbnNpZGVyZWQgdG8gYmUgbW9kaWZpZWQuICBUaGlzIG9wdGlvbiBpcyBzZXQKKwl3aGVuOgorCTEuIEEgY2hhbmdlIHdhcyBtYWRlIHRvIHRoZSB0ZXh0IHNpbmNlIGl0IHdhcyBsYXN0IHdyaXR0ZW4uICBVc2luZyB0aGUKKwkgICB8dW5kb3wgY29tbWFuZCB0byBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCB0ZXh0IHdpbGwgcmVzZXQgdGhlCisJICAgb3B0aW9uLiAgQnV0IHVuZG9pbmcgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBiZWZvcmUgd3JpdGluZyB0aGUKKwkgICBidWZmZXIgd2lsbCBzZXQgdGhlIG9wdGlvbiBhZ2Fpbiwgc2luY2UgdGhlIHRleHQgaXMgZGlmZmVyZW50IGZyb20KKwkgICB3aGVuIGl0IHdhcyB3cml0dGVuLgorCTIuICdmaWxlZm9ybWF0JyBvciAnZmlsZWVuY29kaW5nJyBpcyBkaWZmZXJlbnQgZnJvbSBpdHMgb3JpZ2luYWwKKwkgICB2YWx1ZS4gIFRoZSBvcmlnaW5hbCB2YWx1ZSBpcyBzZXQgd2hlbiB0aGUgYnVmZmVyIGlzIHJlYWQgb3IKKwkgICB3cml0dGVuLiAgQSAiOnNldCBub21vZGlmaWVkIiBjb21tYW5kIGFsc28gcmVzZXRzIHRoZSBvcmlnaW5hbAorCSAgIHZhbHVlcyB0byB0aGUgY3VycmVudCB2YWx1ZXMgYW5kIHRoZSAnbW9kaWZpZWQnIG9wdGlvbiB3aWxsIGJlCisJICAgcmVzZXQuCisJV2hlbiAnYnVmdHlwZScgaXMgIm5vd3JpdGUiIG9yICJub2ZpbGUiIHRoaXMgb3B0aW9uIG1heSBiZSBzZXQsIGJ1dAorCXdpbGwgYmUgaWdub3JlZC4KKworCQkJCQkJKidtb3JlJyogKidub21vcmUnKgorJ21vcmUnCQkJYm9vbGVhbgkoVmltIGRlZmF1bHQ6IG9uLCBWaSBkZWZhdWx0OiBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiwgbGlzdGluZ3MgcGF1c2Ugd2hlbiB0aGUgd2hvbGUgc2NyZWVuIGlzIGZpbGxlZC4gIFlvdSB3aWxsIGdldAorCXRoZSB8bW9yZS1wcm9tcHR8LiAgV2hlbiB0aGlzIG9wdGlvbiBpcyBvZmYgdGhlcmUgYXJlIG5vIHBhdXNlcywgdGhlCisJbGlzdGluZyBjb250aW51ZXMgdW50aWwgZmluaXNoZWQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSonbW91c2UnKiAqRTUzOCoKKydtb3VzZScJCQlzdHJpbmcJKGRlZmF1bHQgIiIsICJhIiBmb3IgR1VJLCBNUy1ET1MgYW5kIFdpbjMyKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUVuYWJsZSB0aGUgdXNlIG9mIHRoZSBtb3VzZS4gIE9ubHkgd29ya3MgZm9yIGNlcnRhaW4gdGVybWluYWxzCisJKHh0ZXJtLCBNUy1ET1MsIFdpbjMyIHx3aW4zMi1tb3VzZXwsIFFOWCBwdGVybSwgYW5kIExpbnV4IGNvbnNvbGUKKwl3aXRoIGdwbSkuICBGb3IgdXNpbmcgdGhlIG1vdXNlIGluIHRoZSBHVUksIHNlZSB8Z3VpLW1vdXNlfC4KKwlUaGUgbW91c2UgY2FuIGJlIGVuYWJsZWQgZm9yIGRpZmZlcmVudCBtb2RlczoKKwkJbglOb3JtYWwgbW9kZQorCQl2CVZpc3VhbCBtb2RlCisJCWkJSW5zZXJ0IG1vZGUKKwkJYwlDb21tYW5kLWxpbmUgbW9kZQorCQloCWFsbCBwcmV2aW91cyBtb2RlcyB3aGVuIGVkaXRpbmcgYSBoZWxwIGZpbGUKKwkJYQlhbGwgcHJldmlvdXMgbW9kZXMKKwkJcglmb3IgfGhpdC1lbnRlcnwgYW5kIHxtb3JlLXByb21wdHwgcHJvbXB0CisJCUEJYXV0by1zZWxlY3QgaW4gVmlzdWFsIG1vZGUKKwlOb3JtYWxseSB5b3Ugd291bGQgZW5hYmxlIHRoZSBtb3VzZSBpbiBhbGwgZm91ciBtb2RlcyB3aXRoOiA+CisJCTpzZXQgbW91c2U9YQorPAlXaGVuIHRoZSBtb3VzZSBpcyBub3QgZW5hYmxlZCwgdGhlIEdVSSB3aWxsIHN0aWxsIHVzZSB0aGUgbW91c2UgZm9yCisJbW9kZWxlc3Mgc2VsZWN0aW9uLiAgVGhpcyBkb2Vzbid0IG1vdmUgdGhlIHRleHQgY3Vyc29yLgorCisJU2VlIHxtb3VzZS11c2luZ3wuICBBbHNvIHNlZSB8J2NsaXBib2FyZCd8LgorCisJTm90ZTogV2hlbiBlbmFibGluZyB0aGUgbW91c2UgaW4gYSB0ZXJtaW5hbCwgY29weS9wYXN0ZSB3aWxsIHVzZSB0aGUKKwkiKiByZWdpc3RlciBpZiB0aGVyZSBpcyBhY2Nlc3MgdG8gYW4gWC1zZXJ2ZXIuCVRoZSB4dGVybSBoYW5kbGluZyBvZgorCXRoZSBtb3VzZSBidXR0b25zIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IGtlZXBpbmcgdGhlIHNoaWZ0IGtleSBwcmVzc2VkLgorCUFsc28gc2VlIHRoZSAnY2xpcGJvYXJkJyBvcHRpb24uCisKKwkJCSonbW91c2Vmb2N1cycqIConbW91c2VmJyogKidub21vdXNlZm9jdXMnKiAqJ25vbW91c2VmJyoKKydtb3VzZWZvY3VzJyAnbW91c2VmJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IHdvcmtzIGluIHRoZSBHVUl9CisJVGhlIHdpbmRvdyB0aGF0IHRoZSBtb3VzZSBwb2ludGVyIGlzIG9uIGlzIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkLgorCVdoZW4gY2hhbmdpbmcgdGhlIHdpbmRvdyBsYXlvdXQgb3Igd2luZG93IGZvY3VzIGluIGFub3RoZXIgd2F5LCB0aGUKKwltb3VzZSBwb2ludGVyIGlzIG1vdmVkIHRvIHRoZSB3aW5kb3cgd2l0aCBrZXlib2FyZCBmb2N1cy4gIE9mZiBpcyB0aGUKKwlkZWZhdWx0IGJlY2F1c2UgaXQgbWFrZXMgdXNpbmcgdGhlIHB1bGwgZG93biBtZW51cyBhIGxpdHRsZSBnb29meSwgYXMKKwlhIHBvaW50ZXIgdHJhbnNpdCBtYXkgYWN0aXZhdGUgYSB3aW5kb3cgdW5pbnRlbnRpb25hbGx5LgorCisJCQkqJ21vdXNlaGlkZScqIConbWgnKiAqJ25vbW91c2VoaWRlJyogKidub21oJyoKKydtb3VzZWhpZGUnICdtaCcJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IHdvcmtzIGluIHRoZSBHVUl9CisJV2hlbiBvbiwgdGhlIG1vdXNlIHBvaW50ZXIgaXMgaGlkZGVuIHdoZW4gY2hhcmFjdGVycyBhcmUgdHlwZWQuCisJVGhlIG1vdXNlIHBvaW50ZXIgaXMgcmVzdG9yZWQgd2hlbiB0aGUgbW91c2UgaXMgbW92ZWQuCisKKwkJCQkJCSonbW91c2Vtb2RlbCcqIConbW91c2VtJyoKKydtb3VzZW1vZGVsJyAnbW91c2VtJwlzdHJpbmcJKGRlZmF1bHQgImV4dGVuZCIsICJwb3B1cCIgZm9yIE1TLURPUyBhbmQgV2luMzIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJU2V0cyB0aGUgbW9kZWwgdG8gdXNlIGZvciB0aGUgbW91c2UuICBUaGUgbmFtZSBtb3N0bHkgc3BlY2lmaWVzIHdoYXQKKwl0aGUgcmlnaHQgbW91c2UgYnV0dG9uIGlzIHVzZWQgZm9yOgorCSAgIGV4dGVuZAlSaWdodCBtb3VzZSBidXR0b24gZXh0ZW5kcyBhIHNlbGVjdGlvbi4gIFRoaXMgd29ya3MKKwkJCWxpa2UgaW4gYW4geHRlcm0uCisJICAgcG9wdXAJUmlnaHQgbW91c2UgYnV0dG9uIHBvcHMgdXAgYSBtZW51LiAgVGhlIHNoaWZ0ZWQgbGVmdAorCQkJbW91c2UgYnV0dG9uIGV4dGVuZHMgYSBzZWxlY3Rpb24uICBUaGlzIHdvcmtzIGxpa2UKKwkJCXdpdGggTWljcm9zb2Z0IFdpbmRvd3MKKwkgICBwb3B1cF9zZXRwb3MgTGlrZSAicG9wdXAiLCBidXQgdGhlIGN1cnNvciB3aWxsIGJlIG1vdmVkIHRvIHRoZQorCQkJcG9zaXRpb24gd2hlcmUgdGhlIG1vdXNlIHdhcyBjbGlja2VkLCBhbmQgdGh1cyB0aGUKKwkJCXNlbGVjdGVkIG9wZXJhdGlvbiB3aWxsIGFjdCB1cG9uIHRoZSBjbGlja2VkIG9iamVjdC4KKwkJCUlmIGNsaWNraW5nIGluc2lkZSBhIHNlbGVjdGlvbiwgdGhhdCBzZWxlY3Rpb24gd2lsbAorCQkJYmUgYWN0ZWQgdXBvbiwgaWUuIG5vIGN1cnNvciBtb3ZlLiAgVGhpcyBpbXBsaWVzIG9mCisJCQljb3Vyc2UsIHRoYXQgcmlnaHQgY2xpY2tpbmcgb3V0c2lkZSBhIHNlbGVjdGlvbiB3aWxsCisJCQllbmQgVmlzdWFsIG1vZGUuCisJT3ZlcnZpZXcgb2Ygd2hhdCBidXR0b24gZG9lcyB3aGF0IGZvciBlYWNoIG1vZGVsOgorCW1vdXNlCQkgICAgZXh0ZW5kCQlwb3B1cChfc2V0cG9zKSB+CisJbGVmdCBjbGljawkgICAgcGxhY2UgY3Vyc29yCXBsYWNlIGN1cnNvcgorCWxlZnQgZHJhZwkgICAgc3RhcnQgc2VsZWN0aW9uCXN0YXJ0IHNlbGVjdGlvbgorCXNoaWZ0LWxlZnQJICAgIHNlYXJjaCB3b3JkCQlleHRlbmQgc2VsZWN0aW9uCisJcmlnaHQgY2xpY2sJICAgIGV4dGVuZCBzZWxlY3Rpb24JcG9wdXAgbWVudSAocGxhY2UgY3Vyc29yKQorCXJpZ2h0IGRyYWcJICAgIGV4dGVuZCBzZWxlY3Rpb24JLQorCW1pZGRsZSBjbGljawkgICAgcGFzdGUJCXBhc3RlCisKKwlJbiB0aGUgInBvcHVwIiBtb2RlbCB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIHByb2R1Y2VzIGEgcG9wLXVwIG1lbnUuCisJWW91IG5lZWQgdG8gZGVmaW5lIHRoaXMgZmlyc3QsIHNlZSB8cG9wdXAtbWVudXwuCisKKwlOb3RlIHRoYXQgeW91IGNhbiBmdXJ0aGVyIHJlZmluZSB0aGUgbWVhbmluZyBvZiBidXR0b25zIHdpdGggbWFwcGluZ3MuCisJU2VlIHxndWktbW91c2UtbWFwcGluZ3wuICBCdXQgbWFwcGluZ3MgYXJlIE5PVCB1c2VkIGZvciBtb2RlbGVzcworCXNlbGVjdGlvbiAoYmVjYXVzZSB0aGF0J3MgaGFuZGxlZCBpbiB0aGUgR1VJIGNvZGUgZGlyZWN0bHkpLgorCisJVGhlICdtb3VzZW1vZGVsJyBvcHRpb24gaXMgc2V0IGJ5IHRoZSB8OmJlaGF2ZXwgY29tbWFuZC4KKworCQkJCQkqJ21vdXNlc2hhcGUnKiAqJ21vdXNlcycqICpFNTQ3KgorJ21vdXNlc2hhcGUnICdtb3VzZXMnCXN0cmluZwkoZGVmYXVsdCAiaTpiZWFtLHI6YmVhbSxzOnVwZG93bixzZDpjcm9zcywKKwkJCQkJbTpubyxtbDp1cC1hcnJvdyx2OnJpZ2h0dXAtYXJyb3ciCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K21vdXNlc2hhcGV8CisJCQlmZWF0dXJlfQorCVRoaXMgb3B0aW9uIHRlbGxzIFZpbSB3aGF0IHRoZSBtb3VzZSBwb2ludGVyIHNob3VsZCBsb29rIGxpa2UgaW4KKwlkaWZmZXJlbnQgbW9kZXMuICBUaGUgb3B0aW9uIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFydHMsIG11Y2gKKwlsaWtlIHVzZWQgZm9yICdndWljdXJzb3InLiAgRWFjaCBwYXJ0IGNvbnNpc3Qgb2YgYSBtb2RlL2xvY2F0aW9uLWxpc3QKKwlhbmQgYW4gYXJndW1lbnQtbGlzdDoKKwkJbW9kZS1saXN0OnNoYXBlLG1vZGUtbGlzdDpzaGFwZSwuLgorCVRoZSBtb2RlLWxpc3QgaXMgYSBkYXNoIHNlcGFyYXRlZCBsaXN0IG9mIHRoZXNlIG1vZGVzL2xvY2F0aW9uczoKKwkJCUluIGEgbm9ybWFsIHdpbmRvdzogfgorCQluCU5vcm1hbCBtb2RlCisJCXYJVmlzdWFsIG1vZGUKKwkJdmUJVmlzdWFsIG1vZGUgd2l0aCAnc2VsZWN0aW9uJyAiZXhjbHVzaXZlIiAoc2FtZSBhcyAndicsCisJCQlpZiBub3Qgc3BlY2lmaWVkKQorCQlvCU9wZXJhdG9yLXBlbmRpbmcgbW9kZQorCQlpCUluc2VydCBtb2RlCisJCXIJUmVwbGFjZSBtb2RlCisKKwkJCU90aGVyczogfgorCQljCWFwcGVuZGluZyB0byB0aGUgY29tbWFuZC1saW5lCisJCWNpCWluc2VydGluZyBpbiB0aGUgY29tbWFuZC1saW5lCisJCWNyCXJlcGxhY2luZyBpbiB0aGUgY29tbWFuZC1saW5lCisJCW0JYXQgdGhlICdIaXQgRU5URVInIG9yICdNb3JlJyBwcm9tcHRzCisJCW1sCWlkZW0sIGJ1dCBjdXJzb3IgaW4gdGhlIGxhc3QgbGluZQorCQllCWFueSBtb2RlLCBwb2ludGVyIGJlbG93IGxhc3Qgd2luZG93CisJCXMJYW55IG1vZGUsIHBvaW50ZXIgb24gYSBzdGF0dXMgbGluZQorCQlzZAlhbnkgbW9kZSwgd2hpbGUgZHJhZ2dpbmcgYSBzdGF0dXMgbGluZQorCQl2cwlhbnkgbW9kZSwgcG9pbnRlciBvbiBhIHZlcnRpY2FsIHNlcGFyYXRvciBsaW5lCisJCXZkCWFueSBtb2RlLCB3aGlsZSBkcmFnZ2luZyBhIHZlcnRpY2FsIHNlcGFyYXRvciBsaW5lCisJCWEJZXZlcnl3aGVyZQorCisJVGhlIHNoYXBlIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCWF2YWlsCW5hbWUJCWxvb2tzIGxpa2UgfgorCXcgeAlhcnJvdwkJTm9ybWFsIG1vdXNlIHBvaW50ZXIKKwl3IHgJYmxhbmsJCW5vIHBvaW50ZXIgYXQgYWxsICh1c2Ugd2l0aCBjYXJlISkKKwl3IHgJYmVhbQkJSS1iZWFtCisJdyB4CXVwZG93bgkJdXAtZG93biBzaXppbmcgYXJyb3dzCisJdyB4CWxlZnRyaWdodAlsZWZ0LXJpZ2h0IHNpemluZyBhcnJvd3MKKwl3IHgJYnVzeQkJVGhlIHN5c3RlbSdzIHVzdWFsIGJ1c3kgcG9pbnRlcgorCXcgeAlubwkJVGhlIHN5c3RlbSdzIHVzdWFsICdubyBpbnB1dCcgcG9pbnRlcgorCSAgeAl1ZHNpemluZwlpbmRpY2F0ZXMgdXAtZG93biByZXNpemluZworCSAgeAlscnNpemluZwlpbmRpY2F0ZXMgbGVmdC1yaWdodCByZXNpemluZworCSAgeAljcm9zc2hhaXIJbGlrZSBhIGJpZyB0aGluICsKKwkgIHgJaGFuZDEJCWJsYWNrIGhhbmQKKwkgIHgJaGFuZDIJCXdoaXRlIGhhbmQKKwkgIHgJcGVuY2lsCQl3aGF0IHlvdSB3cml0ZSB3aXRoCisJICB4CXF1ZXN0aW9uCWJpZyA/CisJICB4CXJpZ2h0dXAtYXJyb3cJYXJyb3cgcG9pbnRpbmcgcmlnaHQtdXAKKwl3IHgJdXAtYXJyb3cJYXJyb3cgcG9pbnRpbmcgdXAKKwkgIHgJPG51bWJlcj4JYW55IFgxMSBwb2ludGVyIG51bWJlciAoc2VlIFgxMS9jdXJzb3Jmb250LmgpCisKKwlUaGUgImF2YWlsIiBjb2x1bW4gY29udGFpbnMgYSAndycgaWYgdGhlIHNoYXBlIGlzIGF2YWlsYWJsZSBmb3IgV2luMzIsCisJeCBmb3IgWDExLgorCUFueSBtb2RlcyBub3Qgc3BlY2lmaWVkIG9yIHNoYXBlcyBub3QgYXZhaWxhYmxlIHVzZSB0aGUgbm9ybWFsIG1vdXNlCisJcG9pbnRlci4KKworCUV4YW1wbGU6ID4KKwkJOnNldCBtb3VzZXNoYXBlPXM6dWRzaXppbmcsbTpubworPAl3aWxsIG1ha2UgdGhlIG1vdXNlIHR1cm4gdG8gYSBzaXppbmcgYXJyb3cgb3ZlciB0aGUgc3RhdHVzIGxpbmVzIGFuZAorCWluZGljYXRlIG5vIGlucHV0IHdoZW4gdGhlIGhpdC1lbnRlciBwcm9tcHQgaXMgZGlzcGxheWVkIChzaW5jZQorCWNsaWNraW5nIHRoZSBtb3VzZSBoYXMgbm8gZWZmZWN0IGluIHRoaXMgc3RhdGUuKQorCisJCQkJCQkqJ21vdXNldGltZScqIConbW91c2V0JyoKKydtb3VzZXRpbWUnICdtb3VzZXQnCW51bWJlcgkoZGVmYXVsdCA1MDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJT25seSBmb3IgR1VJLCBNUy1ET1MsIFdpbjMyIGFuZCBVbml4IHdpdGggeHRlcm0uICBEZWZpbmVzIHRoZSBtYXhpbXVtCisJdGltZSBpbiBtc2VjIGJldHdlZW4gdHdvIG1vdXNlIGNsaWNrcyBmb3IgdGhlIHNlY29uZCBjbGljayB0byBiZQorCXJlY29nbml6ZWQgYXMgYSBtdWx0aSBjbGljay4KKworCQkJCQkJCSonbnJmb3JtYXRzJyogKiduZicqCisnbnJmb3JtYXRzJyAnbmYnCXN0cmluZwkoZGVmYXVsdCAib2N0YWwsaGV4IikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGRlZmluZXMgd2hhdCBiYXNlcyBWaW0gd2lsbCBjb25zaWRlciBmb3IgbnVtYmVycyB3aGVuIHVzaW5nIHRoZQorCUNUUkwtQSBhbmQgQ1RSTC1YIGNvbW1hbmRzIGZvciBhZGRpbmcgdG8gYW5kIHN1YnRyYWN0aW5nIGZyb20gYSBudW1iZXIKKwlyZXNwZWN0aXZlbHk7IHNlZSB8Q1RSTC1BfCBmb3IgbW9yZSBpbmZvIG9uIHRoZXNlIGNvbW1hbmRzLgorCWFscGhhCWlmIGluY2x1ZGVkLCBzaW5nbGUgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgd2lsbCBiZQorCQlpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZC4gIFRoaXMgaXMgdXNlZnVsIGZvciBhIGxpc3Qgd2l0aCBhCisJCWxldHRlciBpbmRleCBhKSwgYiksIGV0Yy4KKwlvY3RhbAlpZiBpbmNsdWRlZCwgbnVtYmVycyB0aGF0IHN0YXJ0IHdpdGggYSB6ZXJvIHdpbGwgYmUgY29uc2lkZXJlZAorCQl0byBiZSBvY3RhbC4gIEV4YW1wbGU6IFVzaW5nIENUUkwtQSBvbiAiMDA3IiByZXN1bHRzIGluICIwMTAiLgorCWhleAlpZiBpbmNsdWRlZCwgbnVtYmVycyBzdGFydGluZyB3aXRoICIweCIgb3IgIjBYIiB3aWxsIGJlCisJCWNvbnNpZGVyZWQgdG8gYmUgaGV4YWRlY2ltYWwuICBFeGFtcGxlOiBVc2luZyBDVFJMLVggb24KKwkJIjB4MTAwIiByZXN1bHRzIGluICIweDBmZiIuCisJTnVtYmVycyB3aGljaCBzaW1wbHkgYmVnaW4gd2l0aCBhIGRpZ2l0IGluIHRoZSByYW5nZSAxLTkgYXJlIGFsd2F5cworCWNvbnNpZGVyZWQgZGVjaW1hbC4gIFRoaXMgYWxzbyBoYXBwZW5zIGZvciBudW1iZXJzIHRoYXQgYXJlIG5vdAorCXJlY29nbml6ZWQgYXMgb2N0YWwgb3IgaGV4LgorCisJCQkJKidudW1iZXInKiAqJ251JyogKidub251bWJlcicqIConbm9udScqCisnbnVtYmVyJyAnbnUnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCVByaW50IHRoZSBsaW5lIG51bWJlciBpbiBmcm9udCBvZiBlYWNoIGxpbmUuICBXaGVuIHRoZSAnbicgb3B0aW9uIGlzCisJZXhjbHVkZWQgZnJvbSAnY3BvcHRpb25zJyBhIHdyYXBwZWQgbGluZSB3aWxsIG5vdCB1c2UgdGhlIGNvbHVtbiBvZgorCWxpbmUgbnVtYmVycyAodGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuICdjb21wYXRpYmxlJyBpc24ndCBzZXQpLgorCVdoZW4gYSBsb25nLCB3cmFwcGVkIGxpbmUgZG9lc24ndCBzdGFydCB3aXRoIHRoZSBmaXJzdCBjaGFyYWN0ZXIsICctJworCWNoYXJhY3RlcnMgYXJlIHB1dCBiZWZvcmUgdGhlIG51bWJlci4KKwlTZWUgfGhsLUxpbmVOcnwgZm9yIHRoZSBoaWdobGlnaHRpbmcgdXNlZCBmb3IgdGhlIG51bWJlci4KKworCQkJCQkqJ29zZmlsZXR5cGUnKiAqJ29mdCcqICpFMzY2KgorJ29zZmlsZXR5cGUnICdvZnQnCXN0cmluZyAoUklTQy1PUyBkZWZhdWx0OiAiVGV4dCIsCisJCQkJb3RoZXJzIGRlZmF1bHQ6ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtvc2ZpbGV0eXBlfAorCQkJZmVhdHVyZX0KKwlTb21lIG9wZXJhdGluZyBzeXN0ZW1zIHN0b3JlIGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGJlc2lkZXMKKwluYW1lLCBkYXRlc3RhbXAgYW5kIHBlcm1pc3Npb25zLiAgVGhpcyBvcHRpb24gY29udGFpbnMgdGhlIGV4dHJhCisJaW5mb3JtYXRpb24sIHRoZSBuYXR1cmUgb2Ygd2hpY2ggd2lsbCB2YXJ5IGJldHdlZW4gc3lzdGVtcy4KKwlUaGUgdmFsdWUgb2YgdGhpcyBvcHRpb24gaXMgdXN1YWxseSBzZXQgd2hlbiB0aGUgZmlsZSBpcyBsb2FkZWQsIGFuZAorCXVzZSB0byBzZXQgdGhlIGZpbGUgdHlwZSB3aGVuIGZpbGUgaXMgd3JpdHRlbi4KKwlJdCBjYW4gYWZmZWN0IHRoZSBwYXR0ZXJuIG1hdGNoaW5nIG9mIHRoZSBhdXRvbWF0aWMgY29tbWFuZHMuCisJfGF1dG9jbWQtb3NmaWxldHlwZXN8CisKKwkJCQkJCSoncGFyYWdyYXBocycqIConcGFyYScqCisncGFyYWdyYXBocycgJ3BhcmEnCXN0cmluZwkoZGVmYXVsdCAiSVBMUFBQUVBQIExJcHBscGlwYnAiKQorCQkJZ2xvYmFsCisJU3BlY2lmaWVzIHRoZSBucm9mZiBtYWNyb3MgdGhhdCBzZXBhcmF0ZSBwYXJhZ3JhcGhzLiAgVGhlc2UgYXJlIHBhaXJzCisJb2YgdHdvIGxldHRlcnMgKHNlZSB8b2JqZWN0LW1vdGlvbnN8KS4KKworCQkJCQkJKidwYXN0ZScqIConbm9wYXN0ZScqCisncGFzdGUnCQkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJUHV0IFZpbSBpbiBQYXN0ZSBtb2RlLglUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjdXQgb3IgY29weQorCXNvbWUgdGV4dCBmcm9tIG9uZSB3aW5kb3cgYW5kIHBhc3RlIGl0IGluIFZpbS4JVGhpcyB3aWxsIGF2b2lkCisJdW5leHBlY3RlZCBlZmZlY3RzLgorCVNldHRpbmcgdGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4gdXNpbmcgVmltIGluIGEgdGVybWluYWwsIHdoZXJlIFZpbQorCWNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHR5cGVkIHRleHQgYW5kIHBhc3RlZCB0ZXh0LglJbiB0aGUgR1VJLCBWaW0KKwlrbm93cyBhYm91dCBwYXN0aW5nIGFuZCB3aWxsIG1vc3RseSBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aG91dCAncGFzdGUnCisJYmVpbmcgc2V0LiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYSB0ZXJtaW5hbCB3aGVyZSBWaW0gaGFuZGxlcyB0aGUKKwltb3VzZSBjbGlja3MgaXRzZWxmLgorCVdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHN3aXRjaGVkIG9uIChhbHNvIHdoZW4gaXQgd2FzIGFscmVhZHkgb24pOgorCQktIG1hcHBpbmcgaW4gSW5zZXJ0IG1vZGUgYW5kIENvbW1hbmQtbGluZSBtb2RlIGlzIGRpc2FibGVkCisJCS0gYWJicmV2aWF0aW9ucyBhcmUgZGlzYWJsZWQKKwkJLSAndGV4dHdpZHRoJyBpcyBzZXQgdG8gMAorCQktICd3cmFwbWFyZ2luJyBpcyBzZXQgdG8gMAorCQktICdhdXRvaW5kZW50JyBpcyByZXNldAorCQktICdzbWFydGluZGVudCcgaXMgcmVzZXQKKwkJLSAnc29mdHRhYnN0b3AnIGlzIHNldCB0byAwCisJCS0gJ3JldmlucycgaXMgcmVzZXQKKwkJLSAncnVsZXInIGlzIHJlc2V0CisJCS0gJ3Nob3dtYXRjaCcgaXMgcmVzZXQKKwkJLSAnZm9ybWF0b3B0aW9ucycgaXMgdXNlZCBsaWtlIGl0IGlzIGVtcHR5CisJVGhlc2Ugb3B0aW9ucyBrZWVwIHRoZWlyIHZhbHVlLCBidXQgdGhlaXIgZWZmZWN0IGlzIGRpc2FibGVkOgorCQktICdsaXNwJworCQktICdpbmRlbnRleHByJworCQktICdjaW5kZW50JworCU5PVEU6IFdoZW4geW91IHN0YXJ0IGVkaXRpbmcgYW5vdGhlciBmaWxlIHdoaWxlIHRoZSAncGFzdGUnIG9wdGlvbiBpcworCW9uLCBzZXR0aW5ncyBmcm9tIHRoZSBtb2RlbGluZXMgb3IgYXV0b2NvbW1hbmRzIG1heSBjaGFuZ2UgdGhlCisJc2V0dGluZ3MgYWdhaW4sIGNhdXNpbmcgdHJvdWJsZSB3aGVuIHBhc3RpbmcgdGV4dC4gIFlvdSBtaWdodCB3YW50IHRvCisJc2V0IHRoZSAncGFzdGUnIG9wdGlvbiBhZ2Fpbi4KKwlXaGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcyByZXNldCB0aGUgbWVudGlvbmVkIG9wdGlvbnMgYXJlIHJlc3RvcmVkIHRvCisJdGhlIHZhbHVlIGJlZm9yZSB0aGUgbW9tZW50ICdwYXN0ZScgd2FzIHN3aXRjaGVkIGZyb20gb2ZmIHRvIG9uLgorCVJlc2V0dGluZyAncGFzdGUnIGJlZm9yZSBldmVyIHNldHRpbmcgaXQgZG9lcyBub3QgaGF2ZSBhbnkgZWZmZWN0LgorCVNpbmNlIG1hcHBpbmcgZG9lc24ndCB3b3JrIHdoaWxlICdwYXN0ZScgaXMgYWN0aXZlLCB5b3UgbmVlZCB0byB1c2UKKwl0aGUgJ3Bhc3RldG9nZ2xlJyBvcHRpb24gdG8gdG9nZ2xlIHRoZSAncGFzdGUnIG9wdGlvbiB3aXRoIHNvbWUga2V5LgorCisJCQkJCQkqJ3Bhc3RldG9nZ2xlJyogKidwdCcqCisncGFzdGV0b2dnbGUnICdwdCcJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gbm9uLWVtcHR5LCBzcGVjaWZpZXMgdGhlIGtleSBzZXF1ZW5jZSB0aGF0IHRvZ2dsZXMgdGhlICdwYXN0ZScKKwlvcHRpb24uICBUaGlzIGlzIGxpa2Ugc3BlY2lmeWluZyBhIG1hcHBpbmc6ID4KKwkgICAgOm1hcCB7a2V5c30gOnNldCBpbnZwYXN0ZTxDUj4KKzwJV2hlcmUge2tleXN9IGlzIHRoZSB2YWx1ZSBvZiAncGFzdGV0b2dnbGUnLgorCVRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgd2lsbCB3b3JrIGV2ZW4gd2hlbiAncGFzdGUnIGlzIHNldC4KKwkncGFzdGV0b2dnbGUnIHdvcmtzIGluIEluc2VydCBtb2RlIGFuZCBOb3JtYWwgbW9kZSwgYnV0IG5vdCBpbgorCUNvbW1hbmQtbGluZSBtb2RlLgorCU1hcHBpbmdzIGFyZSBjaGVja2VkIGZpcnN0LCB0aHVzIG92ZXJydWxlICdwYXN0ZXRvZ2dsZScuICBIb3dldmVyLAorCXdoZW4gJ3Bhc3RlJyBpcyBvbiBtYXBwaW5ncyBhcmUgaWdub3JlZCBpbiBJbnNlcnQgbW9kZSwgdGh1cyB5b3UgY2FuIGRvCisJdGhpczogPgorCSAgICA6bWFwIDxGMTA+IDpzZXQgcGFzdGU8Q1I+CisJICAgIDptYXAgPEYxMT4gOnNldCBub3Bhc3RlPENSPgorCSAgICA6aW1hcCA8RjEwPiA8Qy1PPjpzZXQgcGFzdGU8Q1I+CisJICAgIDppbWFwIDxGMTE+IDxub3A+CisJICAgIDpzZXQgcGFzdGV0b2dnbGU9PEYxMT4KKzwJVGhpcyB3aWxsIG1ha2UgPEYxMD4gc3RhcnQgcGFzdGUgbW9kZSBhbmQgPEYxMT4gc3RvcCBwYXN0ZSBtb2RlLgorCU5vdGUgdGhhdCB0eXBpbmcgPEYxMD4gaW4gcGFzdGUgbW9kZSBpbnNlcnRzICI8RjEwPiIsIHNpbmNlIGluIHBhc3RlCisJbW9kZSBldmVyeXRoaW5nIGlzIGluc2VydGVkIGxpdGVyYWxseSwgZXhjZXB0IHRoZSAncGFzdGV0b2dnbGUnIGtleQorCXNlcXVlbmNlLgorCisJCQkJCQkqJ3BleCcqIConcGF0Y2hleHByJyoKKydwYXRjaGV4cHInICdwZXgnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtkaWZmfAorCQkJZmVhdHVyZX0KKwlFeHByZXNzaW9uIHdoaWNoIGlzIGV2YWx1YXRlZCB0byBhcHBseSBhIHBhdGNoIHRvIGEgZmlsZSBhbmQgZ2VuZXJhdGUKKwl0aGUgcmVzdWx0aW5nIG5ldyB2ZXJzaW9uIG9mIHRoZSBmaWxlLglTZWUgfGRpZmYtcGF0Y2hleHByfC4KKworCQkJCQkJKidwYXRjaG1vZGUnKiAqJ3BtJyogKkUyMDYqCisncGF0Y2htb2RlJyAncG0nCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIG5vbi1lbXB0eSB0aGUgb2xkZXN0IHZlcnNpb24gb2YgYSBmaWxlIGlzIGtlcHQuICBUaGlzIGNhbiBiZSB1c2VkCisJdG8ga2VlcCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiBhIGZpbGUgaWYgeW91IGFyZSBjaGFuZ2luZyBmaWxlcyBpbiBhCisJc291cmNlIGRpc3RyaWJ1dGlvbi4gIE9ubHkgdGhlIGZpcnN0IHRpbWUgdGhhdCBhIGZpbGUgaXMgd3JpdHRlbiBhCisJY29weSBvZiB0aGUgb3JpZ2luYWwgZmlsZSB3aWxsIGJlIGtlcHQuICBUaGUgbmFtZSBvZiB0aGUgY29weSBpcyB0aGUKKwluYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlIHdpdGggdGhlIHN0cmluZyBpbiB0aGUgJ3BhdGNobW9kZScgb3B0aW9uCisJYXBwZW5kZWQuICBUaGlzIG9wdGlvbiBzaG91bGQgc3RhcnQgd2l0aCBhIGRvdC4gIFVzZSBhIHN0cmluZyBsaWtlCisJIi5vcmciLiAgJ2JhY2t1cGRpcicgbXVzdCBub3QgYmUgZW1wdHkgZm9yIHRoaXMgdG8gd29yayAoRGV0YWlsOiBUaGUKKwliYWNrdXAgZmlsZSBpcyByZW5hbWVkIHRvIHRoZSBwYXRjaG1vZGUgZmlsZSBhZnRlciB0aGUgbmV3IGZpbGUgaGFzCisJYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbiwgdGhhdCdzIHdoeSBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvIHdyaXRlIGEKKwliYWNrdXAgZmlsZSkuICBJZiB0aGVyZSB3YXMgbm8gZmlsZSB0byBiZSBiYWNrZWQgdXAsIGFuIGVtcHR5IGZpbGUgaXMKKwljcmVhdGVkLgorCVdoZW4gdGhlICdiYWNrdXBza2lwJyBwYXR0ZXJuIG1hdGNoZXMsIGEgcGF0Y2htb2RlIGZpbGUgaXMgbm90IG1hZGUuCisJVXNpbmcgJ3BhdGNobW9kZScgZm9yIGNvbXByZXNzZWQgZmlsZXMgYXBwZW5kcyB0aGUgZXh0ZW5zaW9uIGF0IHRoZQorCWVuZCAoZS5nLiwgImZpbGUuZ3oub3JpZyIpLCB0aHVzIHRoZSByZXN1bHRpbmcgbmFtZSBpc24ndCBhbHdheXMKKwlyZWNvZ25pemVkIGFzIGEgY29tcHJlc3NlZCBmaWxlLgorCisJCQkJCSoncGF0aCcqIConcGEnKiAqRTM0MyogKkUzNDUqICpFMzQ3KgorJ3BhdGgnICdwYScJCXN0cmluZwkoZGVmYXVsdCBvbiBVbml4OiAiLiwvdXNyL2luY2x1ZGUsLCIKKwkJCQkgICBvbiBPUy8yOgkgICIuLC9lbXgvaW5jbHVkZSwsIgorCQkJCSAgIG90aGVyIHN5c3RlbXM6ICIuLCwiKQorCQkJZ2xvYmFsIG9yIGxvY2FsIHRvIGJ1ZmZlciB8Z2xvYmFsLWxvY2FsfAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIGlzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB3aGljaCB3aWxsIGJlIHNlYXJjaGVkIHdoZW4gdXNpbmcgdGhlCisJfGdmfCwgW2YsIF1mLCBeV2YsIHw6ZmluZHwgYW5kIG90aGVyIGNvbW1hbmRzLCBwcm92aWRlZCB0aGF0IHRoZSBmaWxlCisJYmVpbmcgc2VhcmNoZWQgZm9yIGhhcyBhIHJlbGF0aXZlIHBhdGggKG5vdCBzdGFydGluZyB3aXRoICcvJykuICBUaGUKKwlkaXJlY3RvcmllcyBpbiB0aGUgJ3BhdGgnIG9wdGlvbiBtYXkgYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuCisJLSBVc2UgY29tbWFzIHRvIHNlcGFyYXRlIGRpcmVjdG9yeSBuYW1lczogPgorCQk6c2V0IHBhdGg9LiwvdXNyL2xvY2FsL2luY2x1ZGUsL3Vzci9pbmNsdWRlCis8CS0gU3BhY2VzIGNhbiBhbHNvIGJlIHVzZWQgdG8gc2VwYXJhdGUgZGlyZWN0b3J5IG5hbWVzIChmb3IgYmFja3dhcmRzCisJICBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbiAzLjApLiAgVG8gaGF2ZSBhIHNwYWNlIGluIGEgZGlyZWN0b3J5CisJICBuYW1lLCBwcmVjZWRlIGl0IHdpdGggYW4gZXh0cmEgYmFja3NsYXNoLCBhbmQgZXNjYXBlIHRoZSBzcGFjZTogPgorCQk6c2V0IHBhdGg9LiwvZGlyL3dpdGhcXFwgc3BhY2UKKzwJLSBUbyBpbmNsdWRlIGEgY29tbWEgaW4gYSBkaXJlY3RvcnkgbmFtZSBwcmVjZWRlIGl0IHdpdGggYW4gZXh0cmEKKwkgIGJhY2tzbGFzaDogPgorCQk6c2V0IHBhdGg9LiwvZGlyL3dpdGhcXCxjb21tYQorPAktIFRvIHNlYXJjaCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IGZpbGUsIHVzZTogPgorCQk6c2V0IHBhdGg9LgorPAktIFRvIHNlYXJjaCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgdXNlIGFuIGVtcHR5IHN0cmluZyBiZXR3ZWVuIHR3bworCSAgY29tbWFzOiA+CisJCTpzZXQgcGF0aD0sLAorPAktIEEgZGlyZWN0b3J5IG5hbWUgbWF5IGVuZCBpbiBhICc6JyBvciAnLycuCisJLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHw6c2V0X2VudnwuCisJLSBXaGVuIHVzaW5nIHxuZXRydy52aW18IFVSTHMgY2FuIGJlIHVzZWQuICBGb3IgZXhhbXBsZSwgYWRkaW5nCisJICAiaHR0cDovL3d3dy52aW0ub3JnIiB3aWxsIG1ha2UgIjpmaW5kIGluZGV4Lmh0bWwiIHdvcmsuCisJLSBTZWFyY2ggdXB3YXJkcyBhbmQgZG93bndhcmRzIGluIGEgZGlyZWN0b3J5IHRyZWU6CisJICAxKSAiKiIgbWF0Y2hlcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIGUuZy46ID4KKwkJOnNldCBwYXRoPS91c3IvaW5jbHVkZS8qCis8CSAgICAgbWVhbnMgYWxsIHN1YmRpcmVjdG9yaWVzIGluIC91c3IvaW5jbHVkZSAoYnV0IG5vdCAvdXNyL2luY2x1ZGUKKwkgICAgIGl0c2VsZikuID4KKwkJOnNldCBwYXRoPS91c3IvKmMKKzwJICAgICBtYXRjaGVzIC91c3IvZG9jIGFuZCAvdXNyL3NyYy4KKwkgIDIpICIqKiIgbWF0Y2hlcyBhIHN1YnRyZWUsIHVwIHRvIDEwMCBkaXJlY3RvcmllcyBkZWVwLiAgRXhhbXBsZTogPgorCQk6c2V0IHBhdGg9L2hvbWUvdXNlcl94L3NyYy8qKgorPAkgICAgIG1lYW5zIHNlYXJjaCBpbiB0aGUgd2hvbGUgc3VidHJlZSB1bmRlciAiL2hvbWUvdXNyX3gvc3JjIi4KKwkgIDMpIElmIHRoZSBwYXRoIGVuZHMgd2l0aCBhICc7JywgdGhpcyBwYXRoIGlzIHRoZSBzdGFydHBvaW50CisJICAgICBmb3IgdXB3YXJkIHNlYXJjaC4KKwkgIFNlZSB8ZmlsZS1zZWFyY2hpbmd8IGZvciBtb3JlIGluZm8gYW5kIGV4YWN0IHN5bnRheC4KKwkgIHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtwYXRoX2V4dHJhfCBmZWF0dXJlfQorCS0gQ2FyZWZ1bCB3aXRoICdcJyBjaGFyYWN0ZXJzLCB0eXBlIHR3byB0byBnZXQgb25lIGluIHRoZSBvcHRpb246ID4KKwkJOnNldCBwYXRoPS4sYzpcXGluY2x1ZGUKKzwJICBPciBqdXN0IHVzZSAnLycgaW5zdGVhZDogPgorCQk6c2V0IHBhdGg9LixjOi9pbmNsdWRlCis8CURvbid0IGZvcmdldCAiLiIgb3IgZmlsZXMgd29uJ3QgZXZlbiBiZSBmb3VuZCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMKKwl0aGUgZmlsZSEKKwlUaGUgbWF4aW11bSBsZW5ndGggaXMgbGltaXRlZC4JSG93IG11Y2ggZGVwZW5kcyBvbiB0aGUgc3lzdGVtLCBtb3N0bHkKKwlpdCBpcyBzb21ldGhpbmcgbGlrZSAyNTYgb3IgMTAyNCBjaGFyYWN0ZXJzLgorCVlvdSBjYW4gY2hlY2sgaWYgYWxsIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBmb3VuZCwgdXNpbmcgdGhlIHZhbHVlIG9mCisJJ3BhdGgnLCBzZWUgfDpjaGVja3BhdGh8LgorCVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCWRpcmVjdG9yaWVzIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4gIFRvIHJlbW92ZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgdXNlOiA+CisJCTpzZXQgcGF0aC09Cis8CVRvIGFkZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgdXNlOiA+CisJCTpzZXQgcGF0aCs9Cis8CVRvIHVzZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgeW91IHByb2JhYmx5IG5lZWQgdG8gcmVwbGFjZSB0aGUKKwlzZXBhcmF0b3IuICBIZXJlIGlzIGFuIGV4YW1wbGUgdG8gYXBwZW5kICRJTkNMLCBpbiB3aGljaCBkaXJlY3RvcnkKKwluYW1lcyBhcmUgc2VwYXJhdGVkIHdpdGggYSBzZW1pLWNvbG9uOiA+CisJCTpsZXQgJnBhdGggPSAmcGF0aCAuICIsIiAuIHN1YnN0aXR1dGUoJElOQ0wsICc7JywgJywnLCAnZycpCis8CVJlcGxhY2UgdGhlICc7JyB3aXRoIGEgJzonIG9yIHdoYXRldmVyIHNlcGFyYXRvciBpcyB1c2VkLiAgTm90ZSB0aGF0CisJdGhpcyBkb2Vzbid0IHdvcmsgd2hlbiAkSU5DTCBjb250YWlucyBhIGNvbW1hIG9yIHdoaXRlIHNwYWNlLgorCisJCQkqJ3ByZXNlcnZlaW5kZW50JyogKidwaScqIConbm9wcmVzZXJ2ZWluZGVudCcqIConbm9waScqCisncHJlc2VydmVpbmRlbnQnICdwaScJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJV2hlbiBjaGFuZ2luZyB0aGUgaW5kZW50IG9mIHRoZSBjdXJyZW50IGxpbmUsIHByZXNlcnZlIGFzIG11Y2ggb2YgdGhlCisJaW5kZW50IHN0cnVjdHVyZSBhcyBwb3NzaWJsZS4gIE5vcm1hbGx5IHRoZSBpbmRlbnQgaXMgcmVwbGFjZWQgYnkgYQorCXNlcmllcyBvZiB0YWJzIGZvbGxvd2VkIGJ5IHNwYWNlcyBhcyByZXF1aXJlZCAodW5sZXNzIHwnZXhwYW5kdGFiJ3wgaXMKKwllbmFibGVkLCBpbiB3aGljaCBjYXNlIG9ubHkgc3BhY2VzIGFyZSB1c2VkKS4gIEVuYWJsaW5nIHRoaXMgb3B0aW9uCisJbWVhbnMgdGhlIGluZGVudCB3aWxsIHByZXNlcnZlIGFzIG1hbnkgZXhpc3RpbmcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZQorCWZvciBpbmRlbnRpbmcsIGFuZCBvbmx5IGFkZCBhZGRpdGlvbmFsIHRhYnMgb3Igc3BhY2VzIGFzIHJlcXVpcmVkLgorCU5PVEU6IFdoZW4gdXNpbmcgIj4+IiBtdWx0aXBsZSB0aW1lcyB0aGUgcmVzdWx0aW5nIGluZGVudCBpcyBhIG1peCBvZgorCXRhYnMgYW5kIHNwYWNlcy4gIFlvdSBtaWdodCBub3QgbGlrZSB0aGlzLgorCU5PVEU6ICdwcmVzZXJ2ZWluZGVudCcgaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCUFsc28gc2VlICdjb3B5aW5kZW50Jy4KKwlVc2UgfDpyZXRhYnwgdG8gY2xlYW4gdXAgd2hpdGUgc3BhY2UuCisKKwkJCQkJKidwcmV2aWV3aGVpZ2h0JyogKidwdmgnKgorJ3ByZXZpZXdoZWlnaHQnICdwdmgnCW51bWJlciAoZGVmYXVsdCAxMikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt3aW5kb3dzfCBvcgorCQkJfCtxdWlja2ZpeHwgZmVhdHVyZX0KKwlEZWZhdWx0IGhlaWdodCBmb3IgYSBwcmV2aWV3IHdpbmRvdy4gIFVzZWQgZm9yIHw6cHRhZ3wgYW5kIGFzc29jaWF0ZWQKKwljb21tYW5kcy4gIFVzZWQgZm9yIHxDVFJMLVdffXwgd2hlbiBubyBjb3VudCBpcyBnaXZlbi4KKworCQkJCQkqJ3ByZXZpZXd3aW5kb3cnKiAqJ25vcHJldmlld3dpbmRvdycqCisJCQkJCSoncHZ3JyogKidub3B2dycqICpFNTkwKgorJ3ByZXZpZXd3aW5kb3cnICdwdncnCWJvb2xlYW4gKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3dpbmRvd3N8IG9yCisJCQl8K3F1aWNrZml4fCBmZWF0dXJlfQorCUlkZW50aWZpZXMgdGhlIHByZXZpZXcgd2luZG93LglPbmx5IG9uZSB3aW5kb3cgY2FuIGhhdmUgdGhpcyBvcHRpb24KKwlzZXQuICBJdCdzIG5vcm1hbGx5IG5vdCBzZXQgZGlyZWN0bHksIGJ1dCBieSB1c2luZyBvbmUgb2YgdGhlIGNvbW1hbmRzCisJfDpwdGFnfCwgfDpwZWRpdHwsIGV0Yy4KKworCQkJCQkJKidwcmludGRldmljZScqIConcGRldicqCisncHJpbnRkZXZpY2UnICdwZGV2JwlzdHJpbmcJKGRlZmF1bHQgZW1wdHkpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CisJCQlmZWF0dXJlfQorCVRoaXMgZGVmaW5lcyB0aGUgbmFtZSBvZiB0aGUgcHJpbnRlciB0byBiZSB1c2VkIHdoZW4gdGhlIHw6aGFyZGNvcHl8CisJY29tbWFuZCBpcyBpc3N1ZWQgd2l0aCBhIGJhbmcgKCEpIHRvIHNraXAgdGhlIHByaW50ZXIgc2VsZWN0aW9uCisJZGlhbG9nLiAgT24gV2luMzIsIGl0IHNob3VsZCBiZSB0aGUgcHJpbnRlciBuYW1lIGV4YWN0bHkgYXMgaXQgYXBwZWFycworCWluIHRoZSBzdGFuZGFyZCBwcmludGVyIGRpYWxvZy4KKwlJZiB0aGUgb3B0aW9uIGlzIGVtcHR5LCB0aGVuIHZpbSB3aWxsIHVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgcHJpbnRlcgorCWZvciAiOmhhcmRjb3B5ISIKKworCQkJCQkqJ3ByaW50ZW5jb2RpbmcnKiAqJ3BlbmMnKiAqRTYyMCoKKydwcmludGVuY29kaW5nJyAncGVuYycJU3RyaW5nCShkZWZhdWx0IGVtcHR5LCBleGNlcHQgZm9yOgorCQkJCQlXaW5kb3dzLCBPUy8yOiBjcDEyNTIsCisJCQkJCU1hY2ludG9zaDogbWFjLXJvbWFuLAorCQkJCQlWTVM6IGRlYy1tY3MsCisJCQkJCUhQVVg6IGhwLXJvbWFuOCwKKwkJCQkJRUJDRElDOiBlYmNkaWMtdWspCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CisJCQlhbmQgfCtwb3N0c2NyaXB0fCBmZWF0dXJlc30KKwlTZXRzIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdXNlZCB3aGVuIHByaW50aW5nLiAgVGhpcyBvcHRpb24gdGVsbHMgVklNCisJd2hpY2ggcHJpbnQgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGUgZnJvbSB0aGUgInByaW50IiBkaXJlY3RvcnkgaW4KKwkncnVudGltZXBhdGgnIHRvIHVzZS4KKworCVRoaXMgb3B0aW9uIHdpbGwgYWNjZXB0IGFueSB2YWx1ZSBmcm9tIHxlbmNvZGluZy1uYW1lc3wuICBBbnkKKwlyZWNvZ25pemVkIG5hbWVzIGFyZSBjb252ZXJ0ZWQgdG8gVklNIHN0YW5kYXJkIG5hbWVzIC0gc2VlICdlbmNvZGluZycKKwlmb3IgbW9yZSBkZXRhaWxzLiAgTmFtZXMgbm90IHJlY29nbml6ZWQgYnkgVklNIHdpbGwganVzdCBiZSBjb252ZXJ0ZWQKKwl0byBsb3dlciBjYXNlIGFuZCB1bmRlcnNjb3JlcyByZXBsYWNlZCB3aXRoICctJyBzaWducy4KKworCUlmICdwcmludGVuY29kaW5nJyBpcyBlbXB0eSBvciBWSU0gY2Fubm90IGZpbmQgdGhlIGZpbGUgdGhlbiBpdCB3aWxsCisJdXNlICdlbmNvZGluZycgKGlmIFZJTSBpcyBjb21waWxlZCB3aXRoIHwrbXVsdGlfYnl0ZXwgYW5kIGl0IGlzIHNldCBhbgorCTgtYml0IGVuY29kaW5nKSB0byBmaW5kIHRoZSBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZS4gIElmIFZJTSBpcworCXVuYWJsZSB0byBmaW5kIGEgY2hhcmFjdGVyIGVuY29kaW5nIGZpbGUgdGhlbiBpdCB3aWxsIHVzZSB0aGUgImxhdGluMSIKKwlwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZS4KKworCVdoZW4gJ2VuY29kaW5nJyBpcyBzZXQgdG8gYSBtdWx0aS1ieXRlIGVuY29kaW5nLCBWSU0gd2lsbCB0cnkgdG8KKwljb252ZXJ0IGNoYXJhY3RlcnMgdG8gdGhlIHByaW50aW5nIGVuY29kaW5nIGZvciBwcmludGluZyAoaWYKKwkncHJpbnRlbmNvZGluZycgaXMgZW1wdHkgdGhlbiB0aGUgY29udmVyc2lvbiB3aWxsIGJlIHRvIGxhdGluMSkuCisJQ29udmVyc2lvbiB0byBhIHByaW50aW5nIGVuY29kaW5nIG90aGVyIHRoYW4gbGF0aW4xIHdpbGwgcmVxdWlyZSBWSU0KKwl0byBiZSBjb21waWxlZCB3aXRoIHRoZSB8K2ljb252fCBmZWF0dXJlLiAgSWYgbm8gY29udmVyc2lvbiBpcworCXBvc3NpYmxlIHRoZW4gcHJpbnRpbmcgd2lsbCBmYWlsLiAgQW55IGNoYXJhY3RlcnMgdGhhdCBjYW5ub3QgYmUKKwljb252ZXJ0ZWQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHVwc2lkZSBkb3duIHF1ZXN0aW9uIG1hcmtzLgorCisJRm91ciBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgZmlsZXMgYXJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgZGVmYXVsdAorCU1hYywgVk1TLCBIUFVYLCBhbmQgRUJDRElDIGNoYXJhY3RlciBlbmNvZGluZ3MgYW5kIGFyZSB1c2VkIGJ5IGRlZmF1bHQKKwlvbiB0aGVzZSBwbGF0Zm9ybXMuICBDb2RlIHBhZ2UgMTI1MiBwcmludCBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMgdXNlZAorCWJ5IGRlZmF1bHQgb24gV2luZG93cyBhbmQgT1MvMiBwbGF0Zm9ybXMuCisKKworCQkJCQkJKidwcmludGV4cHInKiAqJ3BleHByJyoKKydwcmludGV4cHInICdwZXhwcicJU3RyaW5nCShkZWZhdWx0OiBzZWUgYmVsb3cpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3ByaW50ZXJ8CisJCQlhbmQgfCtwb3N0c2NyaXB0fCBmZWF0dXJlc30KKwlFeHByZXNzaW9uIHRoYXQgaXMgZXZhbHVhdGVkIHRvIHByaW50IHRoZSBQb3N0U2NyaXB0IHByb2R1Y2VkIHdpdGgKKwkiOmhhcmRjb3B5Ii4KKwlUaGUgZmlsZSBuYW1lIHRvIGJlIHByaW50ZWQgaXMgaW4gfHY6Zm5hbWVfaW58LgorCVRoZSBhcmd1bWVudHMgdG8gdGhlICI6aGFyZGNvcHkiIGNvbW1hbmQgYXJlIGluIHx2OmNtZGFyZ3wuCisJVGhlIGV4cHJlc3Npb24gbXVzdCB0YWtlIGNhcmUgb2YgZGVsZXRpbmcgdGhlIGZpbGUgYWZ0ZXIgcHJpbnRpbmcgaXQuCisJV2hlbiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlIGV4cHJlc3Npb24gbXVzdCByZXR1cm4gYSBub24temVybyBudW1iZXIuCisJSWYgdGhlcmUgaXMgbm8gZXJyb3IsIHJldHVybiB6ZXJvIG9yIGFuIGVtcHR5IHN0cmluZy4KKwlUaGUgZGVmYXVsdCBmb3Igbm9uIE1TLVdpbmRvd3Mgb3IgVk1TIHN5c3RlbXMgaXMgdG8gc2ltcGx5IHVzZSAibHByIgorCXRvIHByaW50IHRoZSBmaWxlOiA+CisKKwkgICAgc3lzdGVtKCdscHInIC4gKCZwcmludGRldmljZSA9PSAnJyA/ICcnIDogJyAtUCcgLiAmcHJpbnRkZXZpY2UpCisJCS4gJyAnIC4gdjpmbmFtZV9pbikgLiBkZWxldGUodjpmbmFtZV9pbikgKyB2OnNoZWxsX2Vycm9yCis8CisJT24gTVMtV2luZG93cyBtYWNoaW5lcyB0aGUgZGVmYXVsdCBpcyB0byBjb3B5IHRoZSBmaWxlIHRvIHRoZQorCWN1cnJlbnRseSBzcGVjaWZpZWQgcHJpbnRkZXZpY2U6ID4KKworCSAgICBzeXN0ZW0oJ2NvcHknIC4gJyAnIC4gdjpmbmFtZV9pbiAuICcgIicgLiAmcHJpbnRkZXZpY2UgLiAnIicpCisJCQkuIGRlbGV0ZSh2OmZuYW1lX2luKQorPAorCU9uIFZNUyBtYWNoaW5lcyB0aGUgZGVmYXVsdCBpcyB0byBzZW5kIHRoZSBmaWxlIHRvIGVpdGhlciB0aGUgZGVmYXVsdAorCW9yIGN1cnJlbnRseSBzcGVjaWZpZWQgcHJpbnRkZXZpY2U6ID4KKworCSAgICBzeXN0ZW0oJ3ByaW50JyAuICgmcHJpbnRkZXZpY2UgPT0gJycgPyAnJyA6ICcgL3F1ZXVlPScgLgorCQkJJnByaW50ZGV2aWNlKSAuICcgJyAuIHY6Zm5hbWVfaW4pIC4gZGVsZXRlKHY6Zm5hbWVfaW4pCis8CisJSWYgeW91IGNoYW5nZSB0aGlzIG9wdGlvbiwgdXNpbmcgYSBmdW5jdGlvbiBpcyBhbiBlYXN5IHdheSB0byBhdm9pZAorCWhhdmluZyB0byBlc2NhcGUgYWxsIHRoZSBzcGFjZXMuICBFeGFtcGxlOiA+CisKKwkJOnNldCBwcmludGV4cHI9UHJpbnRGaWxlKHY6Zm5hbWVfaW4pCisJCTpmdW5jdGlvbiBQcmludEZpbGUoZm5hbWUpCisJCTogIGNhbGwgc3lzdGVtKCJnaG9zdHZpZXcgIiAuIGE6Zm5hbWUpCisJCTogIGNhbGwgZGVsZXRlKGE6Zm5hbWUpCisJCTogIHJldHVybiB2OnNoZWxsX2Vycm9yCisJCTplbmRmdW5jCisKKzwJQmUgYXdhcmUgdGhhdCBzb21lIHByaW50IHByb2dyYW1zIHJldHVybiBjb250cm9sIGJlZm9yZSB0aGV5IGhhdmUgcmVhZAorCXRoZSBmaWxlLiAgSWYgeW91IGRlbGV0ZSB0aGUgZmlsZSB0b28gc29vbiBpdCB3aWxsIG5vdCBiZSBwcmludGVkLgorCVRoZXNlIHByb2dyYW1zIHVzdWFsbHkgb2ZmZXIgYW4gb3B0aW9uIHRvIGhhdmUgdGhlbSByZW1vdmUgdGhlIGZpbGUKKwl3aGVuIHByaW50aW5nIGlzIGRvbmUuCisJCQkJCQkJCSpFMzY1KgorCUlmIGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb24gZmFpbHMgb3IgaXQgcmVzdWx0cyBpbiBhIG5vbi16ZXJvIG51bWJlciwKKwl5b3UgZ2V0IGFuIGVycm9yIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UgVmltIHdpbGwgZGVsZXRlIHRoZQorCWZpbGUuICBJbiB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Igbm9uLU1TLVdpbmRvd3MgYSB0cmljayBpcyB1c2VkOiBBZGRpbmcKKwkidjpzaGVsbF9lcnJvciIgd2lsbCByZXN1bHQgaW4gYSBub24temVybyBudW1iZXIgd2hlbiB0aGUgc3lzdGVtKCkKKwljYWxsIGZhaWxzLgorCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkJKidwcmludGZvbnQnKiAqJ3BmbicqICpFNjEzKgorJ3ByaW50Zm9udCcgJ3BmbicJc3RyaW5nCShkZWZhdWx0ICJjb3VyaWVyIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcHJpbnRlcnwKKwkJCWZlYXR1cmV9CisJVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZm9udCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIHw6aGFyZGNvcHl8CisJY29tbWFuZCdzIG91dHB1dC4gIEl0IGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlICdndWlmb250JyBvcHRpb24sCisJZXhjZXB0IHRoYXQgb25seSBvbmUgZm9udCBtYXkgYmUgbmFtZWQsIGFuZCB0aGUgc3BlY2lhbCAiZ3VpZm9udD0qIgorCXN5bnRheCBpcyBub3QgYXZhaWxhYmxlLgorCUluIHRoZSBXaW4zMiBHVUkgdmVyc2lvbiB0aGlzIHNwZWNpZmllcyBhIGZvbnQgbmFtZSB3aXRoIGl0cyBleHRyYQorCWF0dHJpYnV0ZXMsIGFzIHdpdGggdGhlICdndWlmb250JyBvcHRpb24uCisJRm9yIG90aGVyIHN5c3RlbXMsIG9ubHkgIjpoMTEiIGlzIHJlY29nbml6ZWQsIHdoZXJlICIxMSIgaXMgdGhlIHBvaW50CisJc2l6ZSBvZiB0aGUgZm9udC4gIFdoZW4gb21pdHRlZCwgdGhlIHBvaW50IHNpemUgaXMgMTAuCisKKwkJCQkJCSoncHJpbnRoZWFkZXInKiAqJ3BoZWFkZXInKgorJ3ByaW50aGVhZGVyJyAncGhlYWRlcicgIHN0cmluZyAgKGRlZmF1bHQgIiU8JWYlaCVtJT1QYWdlICVOIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcHJpbnRlcnwKKwkJCWZlYXR1cmV9CisJVGhpcyBkZWZpbmVzIHRoZSBmb3JtYXQgb2YgdGhlIGhlYWRlciBwcm9kdWNlZCBpbiB8OmhhcmRjb3B5fCBvdXRwdXQuCisJVGhlIG9wdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgJ3N0YXR1c2xpbmUnIG9wdGlvbi4KKwlJZiBWaW0gaGFzIG5vdCBiZWVuIGNvbXBpbGVkIHdpdGggdGhlIHwrc3RhdHVzbGluZXwgZmVhdHVyZSwgdGhpcworCW9wdGlvbiBoYXMgbm8gZWZmZWN0IGFuZCBhIHNpbXBsZSBkZWZhdWx0IGhlYWRlciBpcyB1c2VkLCB3aGljaCBzaG93cworCXRoZSBwYWdlIG51bWJlci4KKworCQkJCQkJKidwcmludG9wdGlvbnMnKiAqJ3BvcHQnKgorJ3ByaW50b3B0aW9ucycgJ3BvcHQnIHN0cmluZyAoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggfCtwcmludGVyfCBmZWF0dXJlfQorCVRoaXMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpdGVtcyB0aGF0IGNvbnRyb2wgdGhlIGZvcm1hdCBvZgorCXRoZSBvdXRwdXQgb2YgfDpoYXJkY29weXw6CisKKwkgIGxlZnQ6e3NwZWN9CQlsZWZ0IG1hcmdpbiAoZGVmYXVsdDogMTBwYykKKwkgIHJpZ2h0OntzcGVjfQkJcmlnaHQgbWFyZ2luIChkZWZhdWx0OiA1cGMpCisJICB0b3A6e3NwZWN9CQl0b3AgbWFyZ2luIChkZWZhdWx0OiA1cGMpCisJICBib3R0b206e3NwZWN9CQlib3R0b20gbWFyZ2luIChkZWZhdWx0OiA1cGMpCisJCQkJe3NwZWN9IGlzIGEgbnVtYmVyIGZvbGxvd2VkIGJ5ICJpbiIgZm9yCisJCQkJaW5jaGVzLCAicHQiIGZvciBwb2ludHMgKDEgcG9pbnQgaXMgMS83MiBvZiBhbgorCQkJCWluY2gpLCAibW0iIGZvciBtaWxsaW1ldGVycyBvciAicGMiIGZvciBhCisJCQkJcGVyY2VudGFnZSBvZiB0aGUgbWVkaWEgc2l6ZS4KKwkJCQlXZWlyZCBleGFtcGxlOgorCQkJCSAgICBsZWZ0OjJpbix0b3A6MzBwdCxyaWdodDoxNm1tLGJvdHRvbTozcGMKKwkJCQlJZiB0aGUgdW5pdCBpcyBub3QgcmVjb2duaXplZCB0aGVyZSBpcyBubworCQkJCWVycm9yIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkLgorCisJICBoZWFkZXI6e25yfQkJTnVtYmVyIG9mIGxpbmVzIHRvIHJlc2VydmUgZm9yIHRoZSBoZWFkZXIuCisJCQkJT25seSB0aGUgZmlyc3QgbGluZSBpcyBhY3R1YWxseSBmaWxsZWQsIHRodXMKKwkJCQl3aGVuIHtucn0gaXMgMiB0aGVyZSBpcyBvbmUgZW1wdHkgbGluZS4gIFRoZQorCQkJCWhlYWRlciBpcyBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvCisJCQkJJ3ByaW50aGVhZGVyJy4KKwkgIGhlYWRlcjowCQlEbyBub3QgcHJpbnQgYSBoZWFkZXIuCisJICBoZWFkZXI6MiAgKGRlZmF1bHQpCVVzZSB0d28gbGluZXMgZm9yIHRoZSBoZWFkZXIKKworCSAgc3ludGF4Om4JCURvIG5vdCB1c2Ugc3ludGF4IGhpZ2hsaWdodGluZy4gIFRoaXMgaXMKKwkJCQlmYXN0ZXIgYW5kIHRodXMgdXNlZnVsIHdoZW4gcHJpbnRpbmcgbGFyZ2UKKwkJCQlmaWxlcy4KKwkgIHN5bnRheDp5CQlEbyBzeW50YXggaGlnaGxpZ2h0aW5nLgorCSAgc3ludGF4OmEgIChkZWZhdWx0KQlVc2Ugc3ludGF4IGhpZ2hsaWdodGluZyBpZiB0aGUgcHJpbnRlciBhcHBlYXJzCisJCQkJdG8gYmUgYWJsZSB0byBwcmludCBjb2xvciBvciBncmV5LgorCisJICBudW1iZXI6eQkJSW5jbHVkZSBsaW5lIG51bWJlcnMgaW4gdGhlIHByaW50ZWQgb3V0cHV0LgorCSAgbnVtYmVyOm4gIChkZWZhdWx0KQlObyBsaW5lIG51bWJlcnMuCisKKwkgIHdyYXA6eSAgICAoZGVmYXVsdCkJV3JhcCBsb25nIGxpbmVzLgorCSAgd3JhcDpuCQlUcnVuY2F0ZSBsb25nIGxpbmVzLgorCisJICBkdXBsZXg6b2ZmCQlQcmludCBvbiBvbmUgc2lkZS4KKwkgIGR1cGxleDpsb25nIChkZWZhdWx0KQlQcmludCBvbiBib3RoIHNpZGVzICh3aGVuIHBvc3NpYmxlKSwgYmluZCBvbgorCQkJCWxvbmcgc2lkZS4KKwkgIGR1cGxleDpzaG9ydAkJUHJpbnQgb24gYm90aCBzaWRlcyAod2hlbiBwb3NzaWJsZSksIGJpbmQgb24KKwkJCQlzaG9ydCBzaWRlLgorCisJICBjb2xsYXRlOnkgIChkZWZhdWx0KQlDb2xsYXRpbmc6IDEgMiAzLCAxIDIgMywgMSAyIDMKKwkgIGNvbGxhdGU6bgkJTm8gY29sbGF0aW5nOiAxIDEgMSwgMiAyIDIsIDMgMyAzCisKKwkgIGpvYnNwbGl0Om4gKGRlZmF1bHQpCURvIGFsbCBjb3BpZXMgaW4gb25lIHByaW50IGpvYgorCSAgam9ic3BsaXQ6eQkJRG8gZWFjaCBjb3B5IGFzIGEgc2VwYXJhdGUgcHJpbnQgam9iLiAgVXNlZnVsCisJCQkJd2hlbiBkb2luZyBOLXVwIHBvc3Rwcm9jZXNzaW5nLgorCisJICBwb3J0cmFpdDp5IChkZWZhdWx0KQlPcmllbnRhdGlvbiBpcyBwb3J0cmFpdC4KKwkgIHBvcnRyYWl0Om4JCU9yaWVudGF0aW9uIGlzIGxhbmRzY2FwZS4KKwkJCQkJCQkqYTQqICpsZXR0ZXIqCisJICBwYXBlcjpBNCAgIChkZWZhdWx0KQlQYXBlciBzaXplOiBBNAorCSAgcGFwZXI6e25hbWV9CQlQYXBlciBzaXplIGZyb20gdGhpcyB0YWJsZToKKwkJCQl7bmFtZX0JICAgIHNpemUgaW4gY20JICAgICBzaXplIGluIGluY2ggfgorCQkJCTEweDE0CSAgICAyNS40ICB4IDM1LjU3ICAgIDEwICAgIHggMTQKKwkJCQlBMwkgICAgMjkuNyAgeCA0MgkgICAgIDExLjY5IHggMTYuNTQKKwkJCQlBNAkgICAgMjEJICB4IDI5LjcgICAgICA4LjI3IHggMTEuNjkKKwkJCQlBNQkgICAgMTQuOCAgeCAyMQkgICAgICA1LjgzIHggIDguMjcKKwkJCQlCNAkgICAgMjUJICB4IDM1LjMgICAgIDEwLjEyIHggMTQuMzMKKwkJCQlCNQkgICAgMTcuNiAgeCAyNQkgICAgICA3LjE3IHggMTAuMTIKKwkJCQlleGVjdXRpdmUgICAxOC40MiB4IDI2LjY3ICAgICA3LjI1IHggMTAuNQorCQkJCWZvbGlvCSAgICAyMQkgIHggMzMJICAgICAgOC4yNyB4IDEzCisJCQkJbGVkZ2VyCSAgICA0My4xMyB4IDI3Ljk2ICAgIDE3ICAgIHggMTEKKwkJCQlsZWdhbAkgICAgMjEuNTkgeCAzNS41NyAgICAgOC41ICB4IDE0CisJCQkJbGV0dGVyCSAgICAyMS41OSB4IDI3Ljk2ICAgICA4LjUgIHggMTEKKwkJCQlxdWFydG8JICAgIDIxLjU5IHggMjcuNSAgICAgIDguNSAgeCAxMC44MworCQkJCXN0YXRlbWVudCAgIDEzLjk3IHggMjEuNTkgICAgIDUuNSAgeCAgOC41CisJCQkJdGFibG9pZCAgICAgMjcuOTYgeCA0My4xMyAgICAxMSAgICB4IDE3CisKKwkgIGZvcm1mZWVkOm4gKGRlZmF1bHQpCVRyZWF0IGZvcm0gZmVlZCBjaGFyYWN0ZXJzICgweDBjKSBhcyBhIG5vcm1hbAorCQkJCXByaW50IGNoYXJhY3Rlci4KKwkgIGZvcm1mZWVkOnkJCVdoZW4gYSBmb3JtIGZlZWQgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLAorCQkJCWNvbnRpbnVlIHByaW50aW5nIG9mIHRoZSBjdXJyZW50IGxpbmUgYXQgdGhlCisJCQkJYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBsaW5lIG9uIGEgbmV3IHBhZ2UuCisKKwlUaGUgaXRlbSBpbmRpY2F0ZWQgd2l0aCAoZGVmYXVsdCkgaXMgdXNlZCB3aGVuIHRoZSBpdGVtIGlzIG5vdAorCXByZXNlbnQuICBUaGUgdmFsdWVzIGFyZSBub3QgYWx3YXlzIHVzZWQsIGVzcGVjaWFsbHkgd2hlbiB1c2luZyBhCisJZGlhbG9nIHRvIHNlbGVjdCB0aGUgcHJpbnRlciBhbmQgb3B0aW9ucy4KKwlFeGFtcGxlOiA+CisJCTpzZXQgcHJpbnRvcHRpb25zPXBhcGVyOmxldHRlcixkdXBsZXg6b2ZmCis8CisJCQkJICAgKidyZWFkb25seScqIConcm8nKiAqJ25vcmVhZG9ubHknKiAqJ25vcm8nKgorJ3JlYWRvbmx5JyAncm8nCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCUlmIG9uLCB3cml0ZXMgZmFpbCB1bmxlc3MgeW91IHVzZSBhICchJy4gIFByb3RlY3RzIHlvdSBmcm9tCisJYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIGEgZmlsZS4gIERlZmF1bHQgb24gd2hlbiBWaW0gaXMgc3RhcnRlZAorCWluIHJlYWQtb25seSBtb2RlICgidmltIC1SIikgb3Igd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBjYWxsZWQgInZpZXciLgorCXtub3QgaW4gVmk6fSAgV2hlbiB1c2luZyB0aGUgIjp2aWV3IiBjb21tYW5kIHRoZSAncmVhZG9ubHknIG9wdGlvbiBpcworCXNldCBmb3IgdGhlIG5ld2x5IGVkaXRlZCBidWZmZXIuICBXaGVuIHVzaW5nICI6dyEiIHRoZSAncmVhZG9ubHknCisJb3B0aW9uIGlzIHJlc2V0IGZvciB0aGUgY3VycmVudCBidWZmZXIuCisKKwkJCQkJCSoncmVtYXAnKiAqJ25vcmVtYXAnKgorJ3JlbWFwJwkJCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwlBbGxvd3MgZm9yIG1hcHBpbmdzIHRvIHdvcmsgcmVjdXJzaXZlbHkuICBJZiB5b3UgZG8gbm90IHdhbnQgdGhpcyBmb3IKKwlhIHNpbmdsZSBlbnRyeSwgdXNlIHRoZSA6bm9yZW1hcFshXSBjb21tYW5kLgorCisJCQkJCQkqJ3JlcG9ydCcqCisncmVwb3J0JwkJbnVtYmVyCShkZWZhdWx0IDIpCisJCQlnbG9iYWwKKwlUaHJlc2hvbGQgZm9yIHJlcG9ydGluZyBudW1iZXIgb2YgbGluZXMgY2hhbmdlZC4gIFdoZW4gdGhlIG51bWJlciBvZgorCWNoYW5nZWQgbGluZXMgaXMgbW9yZSB0aGFuICdyZXBvcnQnIGEgbWVzc2FnZSB3aWxsIGJlIGdpdmVuIGZvciBtb3N0CisJIjoiIGNvbW1hbmRzLiAgSWYgeW91IHdhbnQgaXQgYWx3YXlzLCBzZXQgJ3JlcG9ydCcgdG8gMC4KKwlGb3IgdGhlICI6c3Vic3RpdHV0ZSIgY29tbWFuZCB0aGUgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgaXMgdXNlZAorCWluc3RlYWQgb2YgdGhlIG51bWJlciBvZiBsaW5lcy4KKworCQkJIConcmVzdG9yZXNjcmVlbicqIConcnMnKiAqJ25vcmVzdG9yZXNjcmVlbicqIConbm9ycycqCisncmVzdG9yZXNjcmVlbicgJ3JzJwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfSAge29ubHkgaW4gV2luZG93cyA5NS9OVCBjb25zb2xlIHZlcnNpb259CisJV2hlbiBzZXQsIHRoZSBzY3JlZW4gY29udGVudHMgaXMgcmVzdG9yZWQgd2hlbiBleGl0aW5nIFZpbS4gIFRoaXMgYWxzbworCWhhcHBlbnMgd2hlbiBleGVjdXRpbmcgZXh0ZXJuYWwgY29tbWFuZHMuCisKKwlGb3Igbm9uLVdpbmRvd3MgVmltOiBZb3UgY2FuIHNldCBvciByZXNldCB0aGUgJ3RfdGknIGFuZCAndF90ZScKKwlvcHRpb25zIGluIHlvdXIgLnZpbXJjLiAgVG8gZGlzYWJsZSByZXN0b3Jpbmc6CisJCXNldCB0X3RpPSB0X3RlPQorCVRvIGVuYWJsZSByZXN0b3JpbmcgKGZvciBhbiB4dGVybSk6CisJCXNldCB0X3RpPV5bN15bW3JeW1s/NDdoIHRfdGU9XltbPzQ3bF5bOAorCShXaGVyZSBeWyBpcyBhbiA8RXNjPiwgdHlwZSBDVFJMLVYgPEVzYz4gdG8gaW5zZXJ0IGl0KQorCisJCQkJKidyZXZpbnMnKiAqJ3JpJyogKidub3JldmlucycqIConbm9yaScqCisncmV2aW5zJyAncmknCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlJbnNlcnRpbmcgY2hhcmFjdGVycyBpbiBJbnNlcnQgbW9kZSB3aWxsIHdvcmsgYmFja3dhcmRzLiAgU2VlICJ0eXBpbmcKKwliYWNrd2FyZHMiIHxpbnMtcmV2ZXJzZXwuICBUaGlzIG9wdGlvbiBjYW4gYmUgdG9nZ2xlZCB3aXRoIHRoZSBDVFJMLV8KKwljb21tYW5kIGluIEluc2VydCBtb2RlLCB3aGVuICdhbGxvd3JldmlucycgaXMgc2V0LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIG9yICdwYXN0ZScgaXMgc2V0LgorCisJCQkJIConcmlnaHRsZWZ0JyogKidybCcqIConbm9yaWdodGxlZnQnKiAqJ25vcmwnKgorJ3JpZ2h0bGVmdCcgJ3JsJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrcmlnaHRsZWZ0fAorCQkJZmVhdHVyZX0KKwlXaGVuIG9uLCBkaXNwbGF5IG9yaWVudGF0aW9uIGJlY29tZXMgcmlnaHQtdG8tbGVmdCwgaS5lLiwgY2hhcmFjdGVycworCXRoYXQgYXJlIHN0b3JlZCBpbiB0aGUgZmlsZSBhcHBlYXIgZnJvbSB0aGUgcmlnaHQgdG8gdGhlIGxlZnQuCisJVXNpbmcgdGhpcyBvcHRpb24sIGl0IGlzIHBvc3NpYmxlIHRvIGVkaXQgZmlsZXMgZm9yIGxhbmd1YWdlcyB0aGF0CisJYXJlIHdyaXR0ZW4gZnJvbSB0aGUgcmlnaHQgdG8gdGhlIGxlZnQgc3VjaCBhcyBIZWJyZXcgYW5kIEFyYWJpYy4KKwlUaGlzIG9wdGlvbiBpcyBwZXIgd2luZG93LCBzbyBpdCBpcyBwb3NzaWJsZSB0byBlZGl0IG1peGVkIGZpbGVzCisJc2ltdWx0YW5lb3VzbHksIG9yIHRvIHZpZXcgdGhlIHNhbWUgZmlsZSBpbiBib3RoIHdheXMgKHRoaXMgaXMKKwl1c2VmdWwgd2hlbmV2ZXIgeW91IGhhdmUgYSBtaXhlZCB0ZXh0IGZpbGUgd2l0aCBib3RoIHJpZ2h0LXRvLWxlZnQKKwlhbmQgbGVmdC10by1yaWdodCBzdHJpbmdzIHNvIHRoYXQgYm90aCBzZXRzIGFyZSBkaXNwbGF5ZWQgcHJvcGVybHkKKwlpbiBkaWZmZXJlbnQgd2luZG93cykuICBBbHNvIHNlZSB8cmlsZWZ0LnR4dHwuCisKKwkJCSoncmlnaHRsZWZ0Y21kJyogKidybGMnKiAqJ25vcmlnaHRsZWZ0Y21kJyogKidub3JsYycqCisncmlnaHRsZWZ0Y21kJyAncmxjJwlzdHJpbmcJKGRlZmF1bHQgInNlYXJjaCIpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7b25seSBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRoIHRoZSB8K3JpZ2h0bGVmdHwKKwkJCWZlYXR1cmV9CisJRWFjaCB3b3JkIGluIHRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGNvbW1hbmQgbGluZSBlZGl0aW5nIHRvIHdvcmsgaW4KKwlyaWdodC10by1sZWZ0IG1vZGUgZm9yIGEgZ3JvdXAgb2YgY29tbWFuZHM6CisKKwkJc2VhcmNoCQkiLyIgYW5kICI/IiBjb21tYW5kcworCisJVGhpcyBpcyB1c2VmdWwgZm9yIGxhbmd1YWdlcyBzdWNoIGFzIEhlYnJldywgQXJhYmljIGFuZCBGYXJzaS4KKwlUaGUgJ3JpZ2h0bGVmdCcgb3B0aW9uIG11c3QgYmUgc2V0IGZvciAncmlnaHRsZWZ0Y21kJyB0byB0YWtlIGVmZmVjdC4KKworCQkJCQkgKidydWxlcicqIConcnUnKiAqJ25vcnVsZXInKiAqJ25vcnUnKgorJ3J1bGVyJyAncnUnCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrY21kbGluZV9pbmZvfCBmZWF0dXJlfQorCVNob3cgdGhlIGxpbmUgYW5kIGNvbHVtbiBudW1iZXIgb2YgdGhlIGN1cnNvciBwb3NpdGlvbiwgc2VwYXJhdGVkIGJ5IGEKKwljb21tYS4JV2hlbiB0aGVyZSBpcyByb29tLCB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXllZAorCXRleHQgaW4gdGhlIGZpbGUgaXMgc2hvd24gb24gdGhlIGZhciByaWdodDoKKwkJVG9wCWZpcnN0IGxpbmUgaXMgdmlzaWJsZQorCQlCb3QJbGFzdCBsaW5lIGlzIHZpc2libGUKKwkJQWxsCWZpcnN0IGFuZCBsYXN0IGxpbmUgYXJlIHZpc2libGUKKwkJNDUlCXJlbGF0aXZlIHBvc2l0aW9uIGluIHRoZSBmaWxlCisJSWYgJ3J1bGVyZm9ybWF0JyBpcyBzZXQsIGl0IHdpbGwgZGV0ZXJtaW5lIHRoZSBjb250ZW50cyBvZiB0aGUgcnVsZXIuCisJRWFjaCB3aW5kb3cgaGFzIGl0cyBvd24gcnVsZXIuCUlmIGEgd2luZG93IGhhcyBhIHN0YXR1cyBsaW5lLCB0aGUKKwlydWxlciBpcyBzaG93biB0aGVyZS4gIE90aGVyd2lzZSBpdCBpcyBzaG93biBpbiB0aGUgbGFzdCBsaW5lIG9mIHRoZQorCXNjcmVlbi4gIElmIHRoZSBzdGF0dXNsaW5lIGlzIGdpdmVuIGJ5ICdzdGF0dXNsaW5lJyAoaWUuIG5vdCBlbXB0eSksCisJdGhpcyBvcHRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyICdydWxlcicgYW5kICdydWxlcmZvcm1hdCcKKwlJZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZGlzcGxheWVkIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBudW1iZXIgb2YKKwlieXRlcyBpbiB0aGUgdGV4dCAoZS5nLiwgZm9yIGEgVEFCIG9yIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIpLCBib3RoCisJdGhlIHRleHQgY29sdW1uIChieXRlIG51bWJlcikgYW5kIHRoZSBzY3JlZW4gY29sdW1uIGFyZSBzaG93biwKKwlzZXBhcmF0ZWQgd2l0aCBhIGRhc2guCisJRm9yIGFuIGVtcHR5IGxpbmUgIjAtMSIgaXMgc2hvd24uCisJRm9yIGFuIGVtcHR5IGJ1ZmZlciB0aGUgbGluZSBudW1iZXIgd2lsbCBhbHNvIGJlIHplcm86ICIwLDAtMSIuCisJVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgc2V0LgorCUlmIHlvdSBkb24ndCB3YW50IHRvIHNlZSB0aGUgcnVsZXIgYWxsIHRoZSB0aW1lIGJ1dCB3YW50IHRvIGtub3cgd2hlcmUKKwl5b3UgYXJlLCB1c2UgImcgQ1RSTC1HIiB8Z19DVFJMLUd8LgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidydWxlcmZvcm1hdCcqIConcnVmJyoKKydydWxlcmZvcm1hdCcgJ3J1ZicJc3RyaW5nCShkZWZhdWx0IGVtcHR5KQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSB8K3N0YXR1c2xpbmV8CisJCQlmZWF0dXJlfQorCVdoZW4gdGhpcyBvcHRpb24gaXMgbm90IGVtcHR5LCBpdCBkZXRlcm1pbmVzIHRoZSBjb250ZW50IG9mIHRoZSBydWxlcgorCXN0cmluZywgYXMgZGlzcGxheWVkIGZvciB0aGUgJ3J1bGVyJyBvcHRpb24uCisJVGhlIGZvcm1hdCBvZiB0aGlzIG9wdGlvbiwgaXMgbGlrZSB0aGF0IG9mICdzdGF0dXNsaW5lJy4KKwlUaGUgZGVmYXVsdCBydWxlciB3aWR0aCBpcyAxNyBjaGFyYWN0ZXJzLiAgVG8gbWFrZSB0aGUgcnVsZXIgMTUKKwljaGFyYWN0ZXJzIHdpZGUsIHB1dCAiJTE1KCIgYXQgdGhlIHN0YXJ0IGFuZCAiJSkiIGF0IHRoZSBlbmQuCisJRXhhbXBsZTogPgorCQk6c2V0IHJ1bGVyZm9ybWF0PSUxNSglYyVWXCAlcCUlJSkKKzwKKwkJCQkqJ3J1bnRpbWVwYXRoJyogKidydHAnKiAqdmltZmlsZXMqCisncnVudGltZXBhdGgnICdydHAnCXN0cmluZwkoZGVmYXVsdDoKKwkJCQkJVW5peDogIiRIT01FLy52aW0sCisJCQkJCQkkVklNL3ZpbWZpbGVzLAorCQkJCQkJJFZJTVJVTlRJTUUsCisJCQkJCQkkVklNL3ZpbWZpbGVzL2FmdGVyLAorCQkJCQkJJEhPTUUvLnZpbS9hZnRlciIKKwkJCQkJQW1pZ2E6ICJob21lOnZpbWZpbGVzLAorCQkJCQkJJFZJTS92aW1maWxlcywKKwkJCQkJCSRWSU1SVU5USU1FLAorCQkJCQkJJFZJTS92aW1maWxlcy9hZnRlciwKKwkJCQkJCWhvbWU6dmltZmlsZXMvYWZ0ZXIiCisJCQkJCVBDLCBPUy8yOiAiJEhPTUUvdmltZmlsZXMsCisJCQkJCQkkVklNL3ZpbWZpbGVzLAorCQkJCQkJJFZJTVJVTlRJTUUsCisJCQkJCQkkVklNL3ZpbWZpbGVzL2FmdGVyLAorCQkJCQkJJEhPTUUvdmltZmlsZXMvYWZ0ZXIiCisJCQkJCU1hY2ludG9zaDogIiRWSU06dmltZmlsZXMsCisJCQkJCQkkVklNUlVOVElNRSwKKwkJCQkJCSRWSU06dmltZmlsZXM6YWZ0ZXIiCisJCQkJCVJJU0MtT1M6ICJDaG9pY2VzOnZpbWZpbGVzLAorCQkJCQkJJFZJTVJVTlRJTUUsCisJCQkJCQlDaG9pY2VzOnZpbWZpbGVzL2FmdGVyIgorCQkJCQlWTVM6ICJzeXMkbG9naW46dmltZmlsZXMsCisJCQkJCQkkVklNL3ZpbWZpbGVzLAorCQkJCQkJJFZJTVJVTlRJTUUsCisJCQkJCQkkVklNL3ZpbWZpbGVzL2FmdGVyLAorCQkJCQkJc3lzJGxvZ2luOnZpbWZpbGVzL2FmdGVyIgorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgaXMgYSBsaXN0IG9mIGRpcmVjdG9yaWVzIHdoaWNoIHdpbGwgYmUgc2VhcmNoZWQgZm9yIHJ1bnRpbWUKKwlmaWxlczoKKwkgIGZpbGV0eXBlLnZpbQlmaWxldHlwZXMgYnkgZmlsZSBuYW1lIHxuZXctZmlsZXR5cGV8CisJICBzY3JpcHRzLnZpbQlmaWxldHlwZXMgYnkgZmlsZSBjb250ZW50cyB8bmV3LWZpbGV0eXBlLXNjcmlwdHN8CisJICBjb2xvcnMvCWNvbG9yIHNjaGVtZSBmaWxlcyB8OmNvbG9yc2NoZW1lfAorCSAgY29tcGlsZXIvCWNvbXBpbGVyIGZpbGVzIHw6Y29tcGlsZXJ8CisJICBkb2MvCQlkb2N1bWVudGF0aW9uIHx3cml0ZS1sb2NhbC1oZWxwfAorCSAgZnRwbHVnaW4vCWZpbGV0eXBlIHBsdWdpbnMgfHdyaXRlLWZpbGV0eXBlLXBsdWdpbnwKKwkgIGluZGVudC8JaW5kZW50IHNjcmlwdHMgfGluZGVudC1leHByZXNzaW9ufAorCSAga2V5bWFwLwlrZXkgbWFwcGluZyBmaWxlcyB8bWJ5dGUta2V5bWFwfAorCSAgbGFuZy8JCW1lbnUgdHJhbnNsYXRpb25zIHw6bWVudXRyYW5zfAorCSAgbWVudS52aW0JR1VJIG1lbnVzIHxtZW51LnZpbXwKKwkgIHBsdWdpbi8JcGx1Z2luIHNjcmlwdHMgfHdyaXRlLXBsdWdpbnwKKwkgIHByaW50LwlmaWxlcyBmb3IgcHJpbnRpbmcgfHBvc3RzY3JpcHQtcHJpbnQtZW5jb2Rpbmd8CisJICBzeW50YXgvCXN5bnRheCBmaWxlcyB8bXlzeW50YXhmaWxlfAorCSAgdHV0b3IvCWZpbGVzIGZvciB2aW10dXRvciB8dHV0b3J8CisKKwlBbmQgYW55IG90aGVyIGZpbGUgc2VhcmNoZWQgZm9yIHdpdGggdGhlIHw6cnVudGltZXwgY29tbWFuZC4KKworCVRoZSBkZWZhdWx0cyBmb3IgbW9zdCBzeXN0ZW1zIGFyZSBzZXR1cCB0byBzZWFyY2ggZml2ZSBsb2NhdGlvbnM6CisJMS4gSW4geW91ciBob21lIGRpcmVjdG9yeSwgZm9yIHlvdXIgcGVyc29uYWwgcHJlZmVyZW5jZXMuCisJMi4gSW4gYSBzeXN0ZW0td2lkZSBWaW0gZGlyZWN0b3J5LCBmb3IgcHJlZmVyZW5jZXMgZnJvbSB0aGUgc3lzdGVtCisJICAgYWRtaW5pc3RyYXRvci4KKwkzLiBJbiAkVklNUlVOVElNRSwgZm9yIGZpbGVzIGRpc3RyaWJ1dGVkIHdpdGggVmltLgorCQkJCQkJCSphZnRlci1kaXJlY3RvcnkqCisJNC4gSW4gdGhlICJhZnRlciIgZGlyZWN0b3J5IGluIHRoZSBzeXN0ZW0td2lkZSBWaW0gZGlyZWN0b3J5LiAgVGhpcyBpcworCSAgIGZvciB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3IgdG8gb3ZlcnJ1bGUgb3IgYWRkIHRvIHRoZSBkaXN0cmlidXRlZAorCSAgIGRlZmF1bHRzIChyYXJlbHkgbmVlZGVkKQorCTUuIEluIHRoZSAiYWZ0ZXIiIGRpcmVjdG9yeSBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5LiAgVGhpcyBpcyBmb3IKKwkgICBwZXJzb25hbCBwcmVmZXJlbmNlcyB0byBvdmVycnVsZSBvciBhZGQgdG8gdGhlIGRpc3RyaWJ1dGVkIGRlZmF1bHRzCisJICAgb3Igc3lzdGVtLXdpZGUgc2V0dGluZ3MgKHJhcmVseSBuZWVkZWQpLgorCisJTm90ZSB0aGF0LCB1bmxpa2UgJ3BhdGgnLCBubyB3aWxkY2FyZHMgbGlrZSAiKioiIGFyZSBhbGxvd2VkLiAgTm9ybWFsCisJd2lsZGNhcmRzIGFyZSBhbGxvd2VkLCBidXQgY2FuIHNpZ25pZmljYW50bHkgc2xvdyBkb3duIHNlYXJjaGluZyBmb3IKKwlydW50aW1lIGZpbGVzLglGb3Igc3BlZWQsIHVzZSBhcyBmZXcgaXRlbXMgYXMgcG9zc2libGUgYW5kIGF2b2lkCisJd2lsZGNhcmRzLgorCVNlZSB8OnJ1bnRpbWV8LgorCUV4YW1wbGU6ID4KKwkJOnNldCBydW50aW1lcGF0aD1+L3ZpbXJ1bnRpbWUsL215Z3JvdXAvdmltLCRWSU1SVU5USU1FCis8CVRoaXMgd2lsbCB1c2UgdGhlIGRpcmVjdG9yeSAifi92aW1ydW50aW1lIiBmaXJzdCAoY29udGFpbmluZyB5b3VyCisJcGVyc29uYWwgVmltIHJ1bnRpbWUgZmlsZXMpLCB0aGVuICIvbXlncm91cC92aW0iIChzaGFyZWQgYmV0d2VlbiBhCisJZ3JvdXAgb2YgcGVvcGxlKSBhbmQgZmluYWxseSAiJFZJTVJVTlRJTUUiICh0aGUgZGlzdHJpYnV0ZWQgcnVudGltZQorCWZpbGVzKS4KKwlZb3UgcHJvYmFibHkgc2hvdWxkIGFsd2F5cyBpbmNsdWRlICRWSU1SVU5USU1FIHNvbWV3aGVyZSwgdG8gdXNlIHRoZQorCWRpc3RyaWJ1dGVkIHJ1bnRpbWUgZmlsZXMuICBZb3UgY2FuIHB1dCBhIGRpcmVjdG9yeSBiZWZvcmUgJFZJTVJVTlRJTUUKKwl0byBmaW5kIGZpbGVzIHdoaWNoIHJlcGxhY2UgYSBkaXN0cmlidXRlZCBydW50aW1lIGZpbGVzLiAgWW91IGNhbiBwdXQKKwlhIGRpcmVjdG9yeSBhZnRlciAkVklNUlVOVElNRSB0byBmaW5kIGZpbGVzIHdoaWNoIGFkZCB0byBkaXN0cmlidXRlZAorCXJ1bnRpbWUgZmlsZXMuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3Njcm9sbCcqIConc2NyJyoKKydzY3JvbGwnICdzY3InCQludW1iZXIJKGRlZmF1bHQ6IGhhbGYgdGhlIHdpbmRvdyBoZWlnaHQpCisJCQlsb2NhbCB0byB3aW5kb3cKKwlOdW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIHdpdGggQ1RSTC1VIGFuZCBDVFJMLUQgY29tbWFuZHMuICBXaWxsIGJlCisJc2V0IHRvIGhhbGYgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgd2luZG93IHdoZW4gdGhlIHdpbmRvdyBzaXplCisJY2hhbmdlcy4gIElmIHlvdSBnaXZlIGEgY291bnQgdG8gdGhlIENUUkwtVSBvciBDVFJMLUQgY29tbWFuZCBpdCB3aWxsCisJYmUgdXNlZCBhcyB0aGUgbmV3IHZhbHVlIGZvciAnc2Nyb2xsJy4JUmVzZXQgdG8gaGFsZiB0aGUgd2luZG93CisJaGVpZ2h0IHdpdGggIjpzZXQgc2Nyb2xsPTAiLiAgIHtWaSBpcyBhIGJpdCBkaWZmZXJlbnQ6ICdzY3JvbGwnIGdpdmVzCisJdGhlIG51bWJlciBvZiBzY3JlZW4gbGluZXMgaW5zdGVhZCBvZiBmaWxlIGxpbmVzLCBtYWtlcyBhIGRpZmZlcmVuY2UKKwl3aGVuIGxpbmVzIHdyYXB9CisKKwkJCSonc2Nyb2xsYmluZCcqIConc2NiJyogKidub3Njcm9sbGJpbmQnKiAqJ25vc2NiJyoKKydzY3JvbGxiaW5kJyAnc2NiJwlib29sZWFuICAoZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byB3aW5kb3cKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrc2Nyb2xsYmluZHwKKwkJCWZlYXR1cmV9CisJU2VlIGFsc28gfHNjcm9sbC1iaW5kaW5nfC4gIFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgY3VycmVudAorCXdpbmRvdyBzY3JvbGxzIGFzIG90aGVyIHNjcm9sbGJpbmQgd2luZG93cyAod2luZG93cyB0aGF0IGFsc28gaGF2ZQorCXRoaXMgb3B0aW9uIHNldCkgc2Nyb2xsLiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciB2aWV3aW5nIHRoZQorCWRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHZlcnNpb25zIG9mIGEgZmlsZSwgc2VlICdkaWZmJy4KKwlTZWUgfCdzY3JvbGxvcHQnfCBmb3Igb3B0aW9ucyB0aGF0IGRldGVybWluZSBob3cgdGhpcyBvcHRpb24gc2hvdWxkIGJlCisJaW50ZXJwcmV0ZWQuCisJVGhpcyBvcHRpb24gaXMgbW9zdGx5IHJlc2V0IHdoZW4gc3BsaXR0aW5nIGEgd2luZG93IHRvIGVkaXQgYW5vdGhlcgorCWZpbGUuICBUaGlzIG1lYW5zIHRoYXQgIjpzcGxpdCB8IGVkaXQgZmlsZSIgcmVzdWx0cyBpbiB0d28gd2luZG93cworCXdpdGggc2Nyb2xsLWJpbmRpbmcsIGJ1dCAiOnNwbGl0IGZpbGUiIGRvZXMgbm90LgorCisJCQkJCQkqJ3Njcm9sbGp1bXAnKiAqJ3NqJyoKKydzY3JvbGxqdW1wJyAnc2onCW51bWJlcgkoZGVmYXVsdCAxKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1pbmltYWwgbnVtYmVyIG9mIGxpbmVzIHRvIHNjcm9sbCB3aGVuIHRoZSBjdXJzb3IgZ2V0cyBvZmYgdGhlCisJc2NyZWVuIChlLmcuLCB3aXRoICJqIikuICBOb3QgdXNlZCBmb3Igc2Nyb2xsIGNvbW1hbmRzIChlLmcuLCBDVFJMLUUsCisJQ1RSTC1EKS4gIFVzZWZ1bCBpZiB5b3VyIHRlcm1pbmFsIHNjcm9sbHMgdmVyeSBzbG93bHkuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIDEgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ3Njcm9sbG9mZicqIConc28nKgorJ3Njcm9sbG9mZicgJ3NvJwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlNaW5pbWFsIG51bWJlciBvZiBzY3JlZW4gbGluZXMgdG8ga2VlcCBhYm92ZSBhbmQgYmVsb3cgdGhlIGN1cnNvci4KKwlUaGlzIHdpbGwgbWFrZSBzb21lIGNvbnRleHQgdmlzaWJsZSBhcm91bmQgd2hlcmUgeW91IGFyZSB3b3JraW5nLiAgSWYKKwl5b3Ugc2V0IGl0IHRvIGEgdmVyeSBsYXJnZSB2YWx1ZSAoOTk5KSB0aGUgY3Vyc29yIGxpbmUgd2lsbCBhbHdheXMgYmUKKwlpbiB0aGUgbWlkZGxlIG9mIHRoZSB3aW5kb3cgKGV4Y2VwdCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBmaWxlIG9yCisJd2hlbiBsb25nIGxpbmVzIHdyYXApLgorCUZvciBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5IHNlZSAnc2lkZXNjcm9sbG9mZicuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIDAgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ3Njcm9sbG9wdCcqIConc2JvJyoKKydzY3JvbGxvcHQnICdzYm8nCXN0cmluZwkoZGVmYXVsdCAidmVyLGp1bXAiKQorCQkJZ2xvYmFsCisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrc2Nyb2xsYmluZHwKKwkJCWZlYXR1cmV9CisJCQl7bm90IGluIFZpfQorCVRoaXMgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB3b3JkcyB0aGF0IHNwZWNpZmllcyBob3cKKwknc2Nyb2xsYmluZCcgd2luZG93cyBzaG91bGQgYmVoYXZlLgorCVRoZSBmb2xsb3dpbmcgd29yZHMgYXJlIGF2YWlsYWJsZToKKwkgICAgdmVyCQlCaW5kIHZlcnRpY2FsIHNjcm9sbGluZyBmb3IgJ3Njcm9sbGJpbmQnIHdpbmRvd3MKKwkgICAgaG9yCQlCaW5kIGhvcml6b250YWwgc2Nyb2xsaW5nIGZvciAnc2Nyb2xsYmluZCcgd2luZG93cworCSAgICBqdW1wCUFwcGxpZXMgdG8gdGhlIG9mZnNldCBiZXR3ZWVuIHR3byB3aW5kb3dzIGZvciB2ZXJ0aWNhbAorCQkJc2Nyb2xsaW5nLiAgVGhpcyBvZmZzZXQgaXMgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIGZpcnN0CisJCQlkaXNwbGF5ZWQgbGluZSBvZiB0aGUgYm91bmQgd2luZG93cy4gIFdoZW4gbW92aW5nCisJCQlhcm91bmQgaW4gYSB3aW5kb3csIGFub3RoZXIgJ3Njcm9sbGJpbmQnIHdpbmRvdyBtYXkKKwkJCXJlYWNoIGEgcG9zaXRpb24gYmVmb3JlIHRoZSBzdGFydCBvciBhZnRlciB0aGUgZW5kIG9mCisJCQl0aGUgYnVmZmVyLiAgVGhlIG9mZnNldCBpcyBub3QgY2hhbmdlZCB0aG91Z2gsIHdoZW4KKwkJCW1vdmluZyBiYWNrIHRoZSAnc2Nyb2xsYmluZCcgd2luZG93IHdpbGwgdHJ5IHRvIHNjcm9sbAorCQkJdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24gd2hlbiBwb3NzaWJsZS4KKwkJCVdoZW4gbm93IG1ha2luZyB0aGF0IHdpbmRvdyB0aGUgY3VycmVudCBvbmUsIHR3bworCQkJdGhpbmdzIGNhbiBiZSBkb25lIHdpdGggdGhlIHJlbGF0aXZlIG9mZnNldDoKKwkJCTEuIFdoZW4gImp1bXAiIGlzIG5vdCBpbmNsdWRlZCwgdGhlIHJlbGF0aXZlIG9mZnNldCBpcworCQkJICAgYWRqdXN0ZWQgZm9yIHRoZSBzY3JvbGwgcG9zaXRpb24gaW4gdGhlIG5ldyBjdXJyZW50CisJCQkgICB3aW5kb3cuICBXaGVuIGdvaW5nIGJhY2sgdG8gdGhlIG90aGVyIHdpbmRvdywgdGhlCisJCQkgICB0aGUgbmV3IHJlbGF0aXZlIG9mZnNldCB3aWxsIGJlIHVzZWQuCisJCQkyLiBXaGVuICJqdW1wIiBpcyBpbmNsdWRlZCwgdGhlIG90aGVyIHdpbmRvd3MgYXJlCisJCQkgICBzY3JvbGxlZCB0byBrZWVwIHRoZSBzYW1lIHJlbGF0aXZlIG9mZnNldC4gIFdoZW4KKwkJCSAgIGdvaW5nIGJhY2sgdG8gdGhlIG90aGVyIHdpbmRvdywgaXQgc3RpbGwgdXNlcyB0aGUKKwkJCSAgIHNhbWUgcmVsYXRpdmUgb2Zmc2V0LgorCUFsc28gc2VlIHxzY3JvbGwtYmluZGluZ3wuCisKKwkJCQkJCSonc2VjdGlvbnMnKiAqJ3NlY3QnKgorJ3NlY3Rpb25zJyAnc2VjdCcJc3RyaW5nCShkZWZhdWx0ICJTSE5ISCBIVW5oc2giKQorCQkJZ2xvYmFsCisJU3BlY2lmaWVzIHRoZSBucm9mZiBtYWNyb3MgdGhhdCBzZXBhcmF0ZSBzZWN0aW9ucy4gIFRoZXNlIGFyZSBwYWlycyBvZgorCXR3byBsZXR0ZXJzIChTZWUgfG9iamVjdC1tb3Rpb25zfCkuICBUaGUgZGVmYXVsdCBtYWtlcyBhIHNlY3Rpb24gc3RhcnQKKwlhdCB0aGUgbnJvZmYgbWFjcm9zICIuU0giLCAiLk5IIiwgIi5IIiwgIi5IVSIsICIubmgiIGFuZCAiLnNoIi4KKworCQkJCQkJKidzZWN1cmUnKiAqJ25vc2VjdXJlJyogKkU1MjMqCisnc2VjdXJlJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiwgIjphdXRvY21kIiwgc2hlbGwgYW5kIHdyaXRlIGNvbW1hbmRzIGFyZSBub3QgYWxsb3dlZCBpbgorCSIudmltcmMiIGFuZCAiLmV4cmMiIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbWFwIGNvbW1hbmRzIGFyZQorCWRpc3BsYXllZC4gIFN3aXRjaCBpdCBvZmYgb25seSBpZiB5b3Uga25vdyB0aGF0IHlvdSB3aWxsIG5vdCBydW4gaW50bworCXByb2JsZW1zLCBvciB3aGVuIHRoZSAnZXhyYycgb3B0aW9uIGlzIG9mZi4gIE9uIFVuaXggdGhpcyBvcHRpb24gaXMKKwlvbmx5IHVzZWQgaWYgdGhlICIudmltcmMiIG9yICIuZXhyYyIgaXMgbm90IG93bmVkIGJ5IHlvdS4gIFRoaXMgY2FuIGJlCisJZGFuZ2Vyb3VzIGlmIHRoZSBzeXN0ZW1zIGFsbG93cyB1c2VycyB0byBkbyBhICJjaG93biIuCVlvdSBiZXR0ZXIgc2V0CisJJ3NlY3VyZScgYXQgdGhlIGVuZCBvZiB5b3VyIH4vLnZpbXJjIHRoZW4uCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3NlbGVjdGlvbicqIConc2VsJyoKKydzZWxlY3Rpb24nICdzZWwnCXN0cmluZwkoZGVmYXVsdCAiaW5jbHVzaXZlIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBiZWhhdmlvciBvZiB0aGUgc2VsZWN0aW9uLiAgSXQgaXMgb25seSB1c2VkCisJaW4gVmlzdWFsIGFuZCBTZWxlY3QgbW9kZS4KKwlQb3NzaWJsZSB2YWx1ZXM6CisJICAgdmFsdWUJcGFzdCBsaW5lICAgICBpbmNsdXNpdmUgfgorCSAgIG9sZAkJICAgbm8JCXllcworCSAgIGluY2x1c2l2ZQkgICB5ZXMJCXllcworCSAgIGV4Y2x1c2l2ZQkgICB5ZXMJCW5vCisJInBhc3QgbGluZSIgbWVhbnMgdGhhdCB0aGUgY3Vyc29yIGlzIGFsbG93ZWQgdG8gYmUgcG9zaXRpb25lZCBvbmUKKwljaGFyYWN0ZXIgcGFzdCB0aGUgbGluZS4KKwkiaW5jbHVzaXZlIiBtZWFucyB0aGF0IHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgc2VsZWN0aW9uIGlzIGluY2x1ZGVkCisJaW4gYW4gb3BlcmF0aW9uLiAgRm9yIGV4YW1wbGUsIHdoZW4gIngiIGlzIHVzZWQgdG8gZGVsZXRlIHRoZQorCXNlbGVjdGlvbi4KKwlOb3RlIHRoYXQgd2hlbiAiZXhjbHVzaXZlIiBpcyB1c2VkIGFuZCBzZWxlY3RpbmcgZnJvbSB0aGUgZW5kCisJYmFja3dhcmRzLCB5b3UgY2Fubm90IGluY2x1ZGUgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIGEgbGluZSwgd2hlbgorCXN0YXJ0aW5nIGluIE5vcm1hbCBtb2RlIGFuZCAndmlydHVhbGVkaXQnIGVtcHR5LgorCisJVGhlICdzZWxlY3Rpb24nIG9wdGlvbiBpcyBzZXQgYnkgdGhlIHw6YmVoYXZlfCBjb21tYW5kLgorCisJCQkJCQkqJ3NlbGVjdG1vZGUnKiAqJ3NsbScqCisnc2VsZWN0bW9kZScgJ3NsbScJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgaXMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB3b3Jkcywgd2hpY2ggc3BlY2lmaWVzIHdoZW4gdG8gc3RhcnQKKwlTZWxlY3QgbW9kZSBpbnN0ZWFkIG9mIFZpc3VhbCBtb2RlLCB3aGVuIGEgc2VsZWN0aW9uIGlzIHN0YXJ0ZWQuCisJUG9zc2libGUgdmFsdWVzOgorCSAgIG1vdXNlCXdoZW4gdXNpbmcgdGhlIG1vdXNlCisJICAga2V5CQl3aGVuIHVzaW5nIHNoaWZ0ZWQgc3BlY2lhbCBrZXlzCisJICAgY21kCQl3aGVuIHVzaW5nICJ2IiwgIlYiIG9yIENUUkwtVgorCVNlZSB8U2VsZWN0LW1vZGV8LgorCVRoZSAnc2VsZWN0bW9kZScgb3B0aW9uIGlzIHNldCBieSB0aGUgfDpiZWhhdmV8IGNvbW1hbmQuCisKKwkJCQkJCSonc2Vzc2lvbm9wdGlvbnMnKiAqJ3Nzb3AnKgorJ3Nlc3Npb25vcHRpb25zJyAnc3NvcCcJc3RyaW5nCShkZWZhdWx0OiAiYmxhbmssYnVmZmVycyxjdXJkaXIsZm9sZHMsCisJCQkJCQkJaGVscCxvcHRpb25zLHdpbnNpemUiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArbWtzZXNzaW9uCisJCQlmZWF0dXJlfQorCUNoYW5nZXMgdGhlIGVmZmVjdCBvZiB0aGUgfDpta3Nlc3Npb258IGNvbW1hbmQuICBJdCBpcyBhIGNvbW1hCisJc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMuICBFYWNoIHdvcmQgZW5hYmxlcyBzYXZpbmcgYW5kIHJlc3RvcmluZworCXNvbWV0aGluZzoKKwkgICB3b3JkCQlzYXZlIGFuZCByZXN0b3JlIH4KKwkgICBibGFuawllbXB0eSB3aW5kb3dzCisJICAgYnVmZmVycwloaWRkZW4gYW5kIHVubG9hZGVkIGJ1ZmZlcnMsIG5vdCBqdXN0IHRob3NlIGluIHdpbmRvd3MKKwkgICBjdXJkaXIJdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisJICAgZm9sZHMJbWFudWFsbHkgY3JlYXRlZCBmb2xkcywgb3BlbmVkL2Nsb3NlZCBmb2xkcyBhbmQgbG9jYWwKKwkJCWZvbGQgb3B0aW9ucworCSAgIGdsb2JhbHMJZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlIGxldHRlcgorCQkJYW5kIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBsZXR0ZXIuCisJICAgaGVscAkJdGhlIGhlbHAgd2luZG93CisJICAgbG9jYWxvcHRpb25zCW9wdGlvbnMgYW5kIG1hcHBpbmdzIGxvY2FsIHRvIGEgd2luZG93IG9yIGJ1ZmZlciAobm90CisJCQlnbG9iYWwgdmFsdWVzIGZvciBsb2NhbCBvcHRpb25zKQorCSAgIG9wdGlvbnMJYWxsIG9wdGlvbnMgYW5kIG1hcHBpbmdzIChhbHNvIGdsb2JhbCB2YWx1ZXMgZm9yIGxvY2FsCisJCQlvcHRpb25zKQorCSAgIHJlc2l6ZQlzaXplIG9mIHRoZSBWaW0gd2luZG93OiAnbGluZXMnIGFuZCAnY29sdW1ucycKKwkgICBzZXNkaXIJdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgc2Vzc2lvbiBmaWxlIGlzIGxvY2F0ZWQKKwkJCXdpbGwgYmVjb21lIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAodXNlZnVsIHdpdGgKKwkJCXByb2plY3RzIGFjY2Vzc2VkIG92ZXIgYSBuZXR3b3JrIGZyb20gZGlmZmVyZW50CisJCQlzeXN0ZW1zKQorCSAgIHNsYXNoCWJhY2tzbGFzaGVzIGluIGZpbGUgbmFtZXMgcmVwbGFjZWQgd2l0aCBmb3J3YXJkCisJCQlzbGFzaGVzCisJICAgdW5peAkJd2l0aCBVbml4IGVuZC1vZi1saW5lIGZvcm1hdCAoc2luZ2xlIDxOTD4pLCBldmVuIHdoZW4KKwkJCW9uIFdpbmRvd3Mgb3IgRE9TCisJICAgd2lucG9zCXBvc2l0aW9uIG9mIHRoZSB3aG9sZSBWaW0gd2luZG93CisJICAgd2luc2l6ZQl3aW5kb3cgc2l6ZXMKKworCURvbid0IGluY2x1ZGUgYm90aCAiY3VyZGlyIiBhbmQgInNlc2RpciIuCisJV2hlbiAiY3VyZGlyIiBub3IgInNlc2RpciIgaXMgaW5jbHVkZWQsIGZpbGUgbmFtZXMgYXJlIHN0b3JlZCB3aXRoCisJYWJzb2x1dGUgcGF0aHMuCisJInNsYXNoIiBhbmQgInVuaXgiIGFyZSB1c2VmdWwgb24gV2luZG93cyB3aGVuIHNoYXJpbmcgc2Vzc2lvbiBmaWxlcworCXdpdGggVW5peC4gIFRoZSBVbml4IHZlcnNpb24gb2YgVmltIGNhbm5vdCBzb3VyY2UgZG9zIGZvcm1hdCBzY3JpcHRzLAorCWJ1dCB0aGUgV2luZG93cyB2ZXJzaW9uIG9mIFZpbSBjYW4gc291cmNlIHVuaXggZm9ybWF0IHNjcmlwdHMuCisKKwkJCQkJCSonc2hlbGwnKiAqJ3NoJyogKkU5MSoKKydzaGVsbCcgJ3NoJwkJc3RyaW5nCShkZWZhdWx0ICRTSEVMTCBvciAic2giLAorCQkJCQlNUy1ET1MgYW5kIFdpbjMyOiAiY29tbWFuZC5jb20iIG9yCisJCQkJCSJjbWQuZXhlIiwgT1MvMjogImNtZCIpCisJCQlnbG9iYWwKKwlOYW1lIG9mIHRoZSBzaGVsbCB0byB1c2UgZm9yICEgYW5kIDohIGNvbW1hbmRzLiAgV2hlbiBjaGFuZ2luZyB0aGUKKwl2YWx1ZSBhbHNvIGNoZWNrIHRoZXNlIG9wdGlvbnM6ICdzaGVsbHR5cGUnLCAnc2hlbGxwaXBlJywgJ3NoZWxsc2xhc2gnCisJJ3NoZWxscmVkaXInLCAnc2hlbGxxdW90ZScsICdzaGVsbHhxdW90ZScgYW5kICdzaGVsbGNtZGZsYWcnLgorCUl0IGlzIGFsbG93ZWQgdG8gZ2l2ZSBhbiBhcmd1bWVudCB0byB0aGUgY29tbWFuZCwgZS5nLgkiY3NoIC1mIi4KKwlTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0IGluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzLgorCUVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4KKwlJZiB0aGUgbmFtZSBvZiB0aGUgc2hlbGwgY29udGFpbnMgYSBzcGFjZSwgeW91IG1pZ2h0IG5lZWQgdG8gZW5jbG9zZQorCWl0IGluIHF1b3Rlcy4gIEV4YW1wbGU6ID4KKwkJOnNldCBzaGVsbD1cImM6XHByb2dyYW1cIGZpbGVzXHVuaXhcc2guZXhlXCJcIC1mCis8CU5vdGUgdGhlIGJhY2tzbGFzaCBiZWZvcmUgZWFjaCBxdW90ZSAodG8gYXZvaWQgc3RhcnRpbmcgYSBjb21tZW50KSBhbmQKKwllYWNoIHNwYWNlICh0byBhdm9pZCBlbmRpbmcgdGhlIG9wdGlvbiB2YWx1ZSkuCUFsc28gbm90ZSB0aGF0IHRoZQorCSItZiIgaXMgbm90IGluc2lkZSB0aGUgcXVvdGVzLCBiZWNhdXNlIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjb21tYW5kCisJbmFtZS4gIEFuZCBWaW0gYXV0b21hZ2ljYWxseSByZWNvZ25pemVzIHRoZSBiYWNrc2xhc2hlcyB0aGF0IGFyZSBwYXRoCisJc2VwYXJhdG9ycy4KKwlGb3IgRG9zIDMyIGJpdHMgKERKR1BQKSwgeW91IGNhbiBzZXQgdGhlICRESlNZU0ZMQUdTIGVudmlyb25tZW50CisJdmFyaWFibGUgdG8gY2hhbmdlIHRoZSB3YXkgZXh0ZXJuYWwgY29tbWFuZHMgYXJlIGV4ZWN1dGVkLiAgU2VlIHRoZQorCWxpYmMuaW5mIGZpbGUgb2YgREpHUFAuCisJVW5kZXIgTVMtV2luZG93cywgd2hlbiB0aGUgZXhlY3V0YWJsZSBlbmRzIGluICIuY29tIiBpdCBtdXN0IGJlCisJaW5jbHVkZWQuICBUaHVzIHNldHRpbmcgdGhlIHNoZWxsIHRvICJjb21tYW5kLmNvbSIgb3IgIjRkb3MuY29tIgorCXdvcmtzLCBidXQgImNvbW1hbmQiIGFuZCAiNGRvcyIgZG8gbm90IHdvcmsgZm9yIGFsbCBjb21tYW5kcyAoZS5nLiwKKwlmaWx0ZXJpbmcpLgorCUZvciB1bmtub3duIHJlYXNvbnMsIHdoZW4gdXNpbmcgIjRkb3MuY29tIiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMKKwljaGFuZ2VkIHRvICJDOlwiLiAgVG8gYXZvaWQgdGhpcyBzZXQgJ3NoZWxsJyBsaWtlIHRoaXM6ID4KKwkJOnNldCBzaGVsbD1jb21tYW5kLmNvbVwgL2NcIDRkb3MKKzwJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3NoZWxsY21kZmxhZycqIConc2hjZicqCisnc2hlbGxjbWRmbGFnJyAnc2hjZicJc3RyaW5nCShkZWZhdWx0OiAiLWMiLCBNUy1ET1MgYW5kIFdpbjMyLCB3aGVuICdzaGVsbCcKKwkJCQkJZG9lcyBub3QgY29udGFpbiAic2giIHNvbWV3aGVyZTogIi9jIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlGbGFnIHBhc3NlZCB0byB0aGUgc2hlbGwgdG8gZXhlY3V0ZSAiISIgYW5kICI6ISIgY29tbWFuZHM7IGUuZy4sCisJImJhc2guZXhlIC1jIGxzIiBvciAiY29tbWFuZC5jb20gL2MgZGlyIi4gIEZvciB0aGUgTVMtRE9TLWxpa2UKKwlzeXN0ZW1zLCB0aGUgZGVmYXVsdCBpcyBzZXQgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiAnc2hlbGwnLCB0bworCXJlZHVjZSB0aGUgbmVlZCB0byBzZXQgdGhpcyBvcHRpb24gYnkgdGhlIHVzZXIuICBJdCdzIG5vdCB1c2VkIGZvcgorCU9TLzIgKEVNWCBmaWd1cmVzIHRoaXMgb3V0IGl0c2VsZikuICBTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0CisJaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuICBTZWUgfGRvcy1zaGVsbHwuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3NoZWxscGlwZScqIConc3AnKgorJ3NoZWxscGlwZScgJ3NwJwlzdHJpbmcJKGRlZmF1bHQgIj4iLCAifCB0ZWUiLCAifCYgdGVlIiBvciAiMj4mMXwgdGVlIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtxdWlja2ZpeHwKKwkJCWZlYXR1cmV9CisJU3RyaW5nIHRvIGJlIHVzZWQgdG8gcHV0IHRoZSBvdXRwdXQgb2YgdGhlICI6bWFrZSIgY29tbWFuZCBpbiB0aGUKKwllcnJvciBmaWxlLiAgU2VlIGFsc28gfDptYWtlX21ha2Vwcmd8LglTZWUgfG9wdGlvbi1iYWNrc2xhc2h8IGFib3V0CisJaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMuCisJVGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGNhbiBiZSByZXByZXNlbnRlZCBieSAiJXMiIGlmIG5lY2Vzc2FyeQorCSh0aGUgZmlsZSBuYW1lIGlzIGFwcGVuZGVkIGF1dG9tYXRpY2FsbHkgaWYgbm8gJXMgYXBwZWFycyBpbiB0aGUgdmFsdWUKKwlvZiB0aGlzIG9wdGlvbikuCisJRm9yIHRoZSBBbWlnYSBhbmQgTVMtRE9TIHRoZSBkZWZhdWx0IGlzICI+Ii4gIFRoZSBvdXRwdXQgaXMgZGlyZWN0bHkKKwlzYXZlZCBpbiBhIGZpbGUgYW5kIG5vdCBlY2hvZWQgdG8gdGhlIHNjcmVlbi4KKwlGb3IgVW5peCB0aGUgZGVmYXVsdCBpdCAifCB0ZWUiLiAgVGhlIHN0ZG91dCBvZiB0aGUgY29tcGlsZXIgaXMgc2F2ZWQKKwlpbiBhIGZpbGUgYW5kIGVjaG9lZCB0byB0aGUgc2NyZWVuLiAgSWYgdGhlICdzaGVsbCcgb3B0aW9uIGlzICJjc2giIG9yCisJInRjc2giIGFmdGVyIGluaXRpYWxpemF0aW9ucywgdGhlIGRlZmF1bHQgYmVjb21lcyAifCYgdGVlIi4gIElmIHRoZQorCSdzaGVsbCcgb3B0aW9uIGlzICJzaCIsICJrc2giLCAienNoIiBvciAiYmFzaCIgdGhlIGRlZmF1bHQgYmVjb21lcworCSIyPiYxfCB0ZWUiLiAgVGhpcyBtZWFucyB0aGF0IHN0ZGVyciBpcyBhbHNvIGluY2x1ZGVkLgorCVRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIG9wdGlvbiBpcyBkb25lIGFmdGVyIHJlYWRpbmcgdGhlICIudmltcmMiCisJYW5kIHRoZSBvdGhlciBpbml0aWFsaXphdGlvbnMsIHNvIHRoYXQgd2hlbiB0aGUgJ3NoZWxsJyBvcHRpb24gaXMgc2V0CisJdGhlcmUsIHRoZSAnc2hlbGxwaXBlJyBvcHRpb24gY2hhbmdlcyBhdXRvbWF0aWNhbGx5LCB1bmxlc3MgaXQgd2FzCisJZXhwbGljaXRseSBzZXQgYmVmb3JlLgorCVdoZW4gJ3NoZWxscGlwZScgaXMgc2V0IHRvIGFuIGVtcHR5IHN0cmluZywgbm8gcmVkaXJlY3Rpb24gb2YgdGhlCisJIjptYWtlIiBvdXRwdXQgd2lsbCBiZSBkb25lLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHVzZSBhICdtYWtlcHJnJworCXRoYXQgd3JpdGVzIHRvICdtYWtlZWYnIGJ5IGl0c2VsZi4gIElmIHlvdSB3YW50IG5vIHBpcGluZywgYnV0IGRvCisJd2FudCB0byBpbmNsdWRlIHRoZSAnbWFrZWVmJywgc2V0ICdzaGVsbHBpcGUnIHRvIGEgc2luZ2xlIHNwYWNlLgorCURvbid0IGZvcmdldCB0byBwcmVjZWRlIHRoZSBzcGFjZSB3aXRoIGEgYmFja3NsYXNoOiAiOnNldCBzcD1cICIuCisJSW4gdGhlIGZ1dHVyZSBwaXBlcyBtYXkgYmUgdXNlZCBmb3IgZmlsdGVyaW5nIGFuZCB0aGlzIG9wdGlvbiB3aWxsCisJYmVjb21lIG9ic29sZXRlIChhdCBsZWFzdCBmb3IgVW5peCkuCisJVGhpcyBvcHRpb24gY2Fubm90IGJlIHNldCBmcm9tIGEgfG1vZGVsaW5lfCBvciBpbiB0aGUgfHNhbmRib3h8LCBmb3IKKwlzZWN1cml0eSByZWFzb25zLgorCisJCQkJCQkqJ3NoZWxscXVvdGUnKiAqJ3NocScqCisnc2hlbGxxdW90ZScgJ3NocScJc3RyaW5nCShkZWZhdWx0OiAiIjsgTVMtRE9TIGFuZCBXaW4zMiwgd2hlbiAnc2hlbGwnCisJCQkJCWNvbnRhaW5zICJzaCIgc29tZXdoZXJlOiAiXCIiKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVF1b3RpbmcgY2hhcmFjdGVyKHMpLCBwdXQgYXJvdW5kIHRoZSBjb21tYW5kIHBhc3NlZCB0byB0aGUgc2hlbGwsIGZvcgorCXRoZSAiISIgYW5kICI6ISIgY29tbWFuZHMuICBUaGUgcmVkaXJlY3Rpb24gaXMga2VwdCBvdXRzaWRlIG9mIHRoZQorCXF1b3RpbmcuICBTZWUgJ3NoZWxseHF1b3RlJyB0byBpbmNsdWRlIHRoZSByZWRpcmVjdGlvbi4gIEl0J3MKKwlwcm9iYWJseSBub3QgdXNlZnVsIHRvIHNldCBib3RoIG9wdGlvbnMuCisJVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4gIE9ubHkga25vd24gdG8gYmUgdXNlZnVsIGZvcgorCXRoaXJkLXBhcnR5IHNoZWxscyBvbiBNUy1ET1MtbGlrZSBzeXN0ZW1zLCBzdWNoIGFzIHRoZSBNS1MgS29ybiBTaGVsbAorCW9yIGJhc2gsIHdoZXJlIGl0IHNob3VsZCBiZSAiXCIiLiAgVGhlIGRlZmF1bHQgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nCisJdGhlIHZhbHVlIG9mICdzaGVsbCcsIHRvIHJlZHVjZSB0aGUgbmVlZCB0byBzZXQgdGhpcyBvcHRpb24gYnkgdGhlCisJdXNlci4gIFNlZSB8ZG9zLXNoZWxsfC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSonc2hlbGxyZWRpcicqIConc3JyJyoKKydzaGVsbHJlZGlyJyAnc3JyJwlzdHJpbmcJKGRlZmF1bHQgIj4iLCAiPiYiIG9yICI+JXMgMj4mMSIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJU3RyaW5nIHRvIGJlIHVzZWQgdG8gcHV0IHRoZSBvdXRwdXQgb2YgYSBmaWx0ZXIgY29tbWFuZCBpbiBhIHRlbXBvcmFyeQorCWZpbGUuICBTZWUgYWxzbyB8OiF8LiAgU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCBpbmNsdWRpbmcgc3BhY2VzCisJYW5kIGJhY2tzbGFzaGVzLgorCVRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgIiVzIiBpZiBuZWNlc3NhcnkKKwkodGhlIGZpbGUgbmFtZSBpcyBhcHBlbmRlZCBhdXRvbWF0aWNhbGx5IGlmIG5vICVzIGFwcGVhcnMgaW4gdGhlIHZhbHVlCisJb2YgdGhpcyBvcHRpb24pLgorCVRoZSBkZWZhdWx0IGlzICI+Ii4gIEZvciBVbml4LCBpZiB0aGUgJ3NoZWxsJyBvcHRpb24gaXMgImNzaCIsICJ0Y3NoIgorCW9yICJ6c2giIGR1cmluZyBpbml0aWFsaXphdGlvbnMsIHRoZSBkZWZhdWx0IGJlY29tZXMgIj4mIi4gIElmIHRoZQorCSdzaGVsbCcgb3B0aW9uIGlzICJzaCIsICJrc2giIG9yICJiYXNoIiB0aGUgZGVmYXVsdCBiZWNvbWVzCisJIj4lcyAyPiYxIi4gIFRoaXMgbWVhbnMgdGhhdCBzdGRlcnIgaXMgYWxzbyBpbmNsdWRlZC4KKwlGb3IgV2luMzIsIHRoZSBVbml4IGNoZWNrcyBhcmUgZG9uZSBhbmQgYWRkaXRpb25hbGx5ICJjbWQiIGlzIGNoZWNrZWQKKwlmb3IsIHdoaWNoIG1ha2VzIHRoZSBkZWZhdWx0ICI+JXMgMj4mMSIuICBBbHNvLCB0aGUgc2FtZSBuYW1lcyB3aXRoCisJIi5leGUiIGFwcGVuZGVkIGFyZSBjaGVja2VkIGZvci4KKwlUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBvcHRpb24gaXMgZG9uZSBhZnRlciByZWFkaW5nIHRoZSAiLnZpbXJjIgorCWFuZCB0aGUgb3RoZXIgaW5pdGlhbGl6YXRpb25zLCBzbyB0aGF0IHdoZW4gdGhlICdzaGVsbCcgb3B0aW9uIGlzIHNldAorCXRoZXJlLCB0aGUgJ3NoZWxscmVkaXInIG9wdGlvbiBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkgdW5sZXNzIGl0IHdhcworCWV4cGxpY2l0bHkgc2V0IGJlZm9yZS4KKwlJbiB0aGUgZnV0dXJlIHBpcGVzIG1heSBiZSB1c2VkIGZvciBmaWx0ZXJpbmcgYW5kIHRoaXMgb3B0aW9uIHdpbGwKKwliZWNvbWUgb2Jzb2xldGUgKGF0IGxlYXN0IGZvciBVbml4KS4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCSonc2hlbGxzbGFzaCcqIConc3NsJyogKidub3NoZWxsc2xhc2gnKiAqJ25vc3NsJyoKKydzaGVsbHNsYXNoJyAnc3NsJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0ge29ubHkgZm9yIE1TRE9TLCBNUy1XaW5kb3dzIGFuZCBPUy8yfQorCVdoZW4gc2V0LCBhIGZvcndhcmQgc2xhc2ggaXMgdXNlZCB3aGVuIGV4cGFuZGluZyBmaWxlIG5hbWVzLiAgVGhpcyBpcworCXVzZWZ1bCB3aGVuIGEgVW5peC1saWtlIHNoZWxsIGlzIHVzZWQgaW5zdGVhZCBvZiBjb21tYW5kLmNvbSBvcgorCWNtZC5leGUuICBCYWNrd2FyZCBzbGFzaGVzIGNhbiBzdGlsbCBiZSB0eXBlZCwgYnV0IHRoZXkgYXJlIGNoYW5nZWQgdG8KKwlmb3J3YXJkIHNsYXNoZXMgYnkgVmltLgorCU5vdGUgdGhhdCBzZXR0aW5nIG9yIHJlc2V0dGluZyB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGZvciBzb21lCisJZXhpc3RpbmcgZmlsZSBuYW1lcywgdGh1cyB0aGlzIG9wdGlvbiBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIG9wZW5pbmcKKwlhbnkgZmlsZSBmb3IgYmVzdCByZXN1bHRzLiAgVGhpcyBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKwknc2hlbGxzbGFzaCcgb25seSB3b3JrcyB3aGVuIGEgYmFja3NsYXNoIGNhbiBiZSB1c2VkIGFzIGEgcGF0aAorCXNlcGFyYXRvci4gIFRvIHRlc3QgaWYgdGhpcyBpcyBzbyB1c2U6ID4KKwkJaWYgZXhpc3RzKCcrc2hlbGxzbGFzaCcpCis8CisJCQkJCQkqJ3NoZWxsdHlwZScqIConc3QnKgorJ3NoZWxsdHlwZScgJ3N0JwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0ge29ubHkgZm9yIHRoZSBBbWlnYX0KKwlPbiB0aGUgQW1pZ2EgdGhpcyBvcHRpb24gaW5mbHVlbmNlcyB0aGUgd2F5IGhvdyB0aGUgY29tbWFuZHMgd29yaworCXdoaWNoIHVzZSBhIHNoZWxsLgorCTAgYW5kIDE6IGFsd2F5cyB1c2UgdGhlIHNoZWxsCisJMiBhbmQgMzogdXNlIHRoZSBzaGVsbCBvbmx5IHRvIGZpbHRlciBsaW5lcworCTQgYW5kIDU6IHVzZSBzaGVsbCBvbmx5IGZvciAnOnNoJyBjb21tYW5kCisJV2hlbiBub3QgdXNpbmcgdGhlIHNoZWxsLCB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCBkaXJlY3RseS4KKworCTAgYW5kIDI6IHVzZSAic2hlbGwgJ3NoZWxsY21kZmxhZycgY21kIiB0byBzdGFydCBleHRlcm5hbCBjb21tYW5kcworCTEgYW5kIDM6IHVzZSAic2hlbGwgY21kIiB0byBzdGFydCBleHRlcm5hbCBjb21tYW5kcworCisJCQkJCQkqJ3NoZWxseHF1b3RlJyogKidzeHEnKgorJ3NoZWxseHF1b3RlJyAnc3hxJwlzdHJpbmcJKGRlZmF1bHQ6ICIiOworCQkJCQlmb3IgV2luMzIsIHdoZW4gJ3NoZWxsJyBjb250YWlucyAic2giCisJCQkJCXNvbWV3aGVyZTogIlwiIgorCQkJCQlmb3IgVW5peCwgd2hlbiB1c2luZyBzeXN0ZW0oKTogIlwiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlRdW90aW5nIGNoYXJhY3RlcihzKSwgcHV0IGFyb3VuZCB0aGUgY29tbWFuZCBwYXNzZWQgdG8gdGhlIHNoZWxsLCBmb3IKKwl0aGUgIiEiIGFuZCAiOiEiIGNvbW1hbmRzLiAgSW5jbHVkZXMgdGhlIHJlZGlyZWN0aW9uLiAgU2VlCisJJ3NoZWxscXVvdGUnIHRvIGV4Y2x1ZGUgdGhlIHJlZGlyZWN0aW9uLiAgSXQncyBwcm9iYWJseSBub3QgdXNlZnVsCisJdG8gc2V0IGJvdGggb3B0aW9ucy4KKwlUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LiAgS25vd24gdG8gYmUgdXNlZnVsIGZvcgorCXRoaXJkLXBhcnR5IHNoZWxscyB3aGVuIHVzaW5nIHRoZSBXaW4zMiB2ZXJzaW9uLCBzdWNoIGFzIHRoZSBNS1MgS29ybgorCVNoZWxsIG9yIGJhc2gsIHdoZXJlIGl0IHNob3VsZCBiZSAiXCIiLiAgVGhlIGRlZmF1bHQgaXMgYWRqdXN0ZWQKKwlhY2NvcmRpbmcgdGhlIHZhbHVlIG9mICdzaGVsbCcsIHRvIHJlZHVjZSB0aGUgbmVlZCB0byBzZXQgdGhpcyBvcHRpb24KKwlieSB0aGUgdXNlci4gIFNlZSB8ZG9zLXNoZWxsfC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCSonc2hpZnRyb3VuZCcqIConc3InKiAqJ25vc2hpZnRyb3VuZCcqIConbm9zcicqCisnc2hpZnRyb3VuZCcgJ3NyJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlSb3VuZCBpbmRlbnQgdG8gbXVsdGlwbGUgb2YgJ3NoaWZ0d2lkdGgnLiAgQXBwbGllcyB0byA+IGFuZCA8CisJY29tbWFuZHMuICBDVFJMLVQgYW5kIENUUkwtRCBpbiBJbnNlcnQgbW9kZSBhbHdheXMgcm91bmQgdGhlIGluZGVudCB0bworCWEgbXVsdGlwbGUgb2YgJ3NoaWZ0d2lkdGgnICh0aGlzIGlzIFZpIGNvbXBhdGlibGUpLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKidzaGlmdHdpZHRoJyogKidzdycqCisnc2hpZnR3aWR0aCcgJ3N3JwludW1iZXIJKGRlZmF1bHQgOCkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCU51bWJlciBvZiBzcGFjZXMgdG8gdXNlIGZvciBlYWNoIHN0ZXAgb2YgKGF1dG8paW5kZW50LglVc2VkIGZvcgorCXwnY2luZGVudCd8LCB8Pj58LCB8PDx8LCBldGMuCisKKwkJCQkJCSonc2hvcnRtZXNzJyogKidzaG0nKgorJ3Nob3J0bWVzcycgJ3NobScJc3RyaW5nCShWaW0gZGVmYXVsdCAiZmlsbnh0VG9PIiwgVmkgZGVmYXVsdDogIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gaGVscHMgdG8gYXZvaWQgYWxsIHRoZSB8aGl0LWVudGVyfCBwcm9tcHRzIGNhdXNlZCBieSBmaWxlCisJbWVzc2FnZXMsIGZvciBleGFtcGxlICB3aXRoIENUUkwtRywgYW5kIHRvIGF2b2lkIHNvbWUgb3RoZXIgbWVzc2FnZXMuCisJSXQgaXMgYSBsaXN0IG9mIGZsYWdzOgorCSBmbGFnCW1lYW5pbmcgd2hlbiBwcmVzZW50CX4KKwkgIGYJdXNlICIoMyBvZiA1KSIgaW5zdGVhZCBvZiAiKGZpbGUgMyBvZiA1KSIKKwkgIGkJdXNlICJbbm9lb2xdIiBpbnN0ZWFkIG9mICJbSW5jb21wbGV0ZSBsYXN0IGxpbmVdIgorCSAgbAl1c2UgIjk5OUwsIDg4OEMiIGluc3RlYWQgb2YgIjk5OSBsaW5lcywgODg4IGNoYXJhY3RlcnMiCisJICBtCXVzZSAiWytdIiBpbnN0ZWFkIG9mICJbTW9kaWZpZWRdIgorCSAgbgl1c2UgIltOZXddIiBpbnN0ZWFkIG9mICJbTmV3IEZpbGVdIgorCSAgcgl1c2UgIltST10iIGluc3RlYWQgb2YgIltyZWFkb25seV0iCisJICB3CXVzZSAiW3ddIiBpbnN0ZWFkIG9mICJ3cml0dGVuIiBmb3IgZmlsZSB3cml0ZSBtZXNzYWdlCisJCWFuZCAiW2FdIiBpbnN0ZWFkIG9mICJhcHBlbmRlZCIgZm9yICc6dyA+PiBmaWxlJyBjb21tYW5kCisJICB4CXVzZSAiW2Rvc10iIGluc3RlYWQgb2YgIltkb3MgZm9ybWF0XSIsICJbdW5peF0iIGluc3RlYWQgb2YKKwkJIlt1bml4IGZvcm1hdF0iIGFuZCAiW21hY10iIGluc3RlYWQgb2YgIlttYWMgZm9ybWF0XSIuCisJICBhCWFsbCBvZiB0aGUgYWJvdmUgYWJicmV2aWF0aW9ucworCisJICBvCW92ZXJ3cml0ZSBtZXNzYWdlIGZvciB3cml0aW5nIGEgZmlsZSB3aXRoIHN1YnNlcXVlbnQgbWVzc2FnZQorCQlmb3IgcmVhZGluZyBhIGZpbGUgKHVzZWZ1bCBmb3IgIjp3biIgb3Igd2hlbiAnYXV0b3dyaXRlJyBvbikKKwkgIE8JbWVzc2FnZSBmb3IgcmVhZGluZyBhIGZpbGUgb3ZlcndyaXRlcyBhbnkgcHJldmlvdXMgbWVzc2FnZS4KKwkJQWxzbyBmb3IgcXVpY2tmaXggbWVzc2FnZSAoZS5nLiwgIjpjbiIpLgorCSAgcwlkb24ndCBnaXZlICJzZWFyY2ggaGl0IEJPVFRPTSwgY29udGludWluZyBhdCBUT1AiIG9yICJzZWFyY2gKKwkJaGl0IFRPUCwgY29udGludWluZyBhdCBCT1RUT00iIG1lc3NhZ2VzCisJICB0CXRydW5jYXRlIGZpbGUgbWVzc2FnZSBhdCB0aGUgc3RhcnQgaWYgaXQgaXMgdG9vIGxvbmcgdG8gZml0CisJCW9uIHRoZSBjb21tYW5kLWxpbmUsICI8IiB3aWxsIGFwcGVhciBpbiB0aGUgbGVmdCBtb3N0IGNvbHVtbi4KKwkJSWdub3JlZCBpbiBFeCBtb2RlLgorCSAgVAl0cnVuY2F0ZSBvdGhlciBtZXNzYWdlcyBpbiB0aGUgbWlkZGxlIGlmIHRoZXkgYXJlIHRvbyBsb25nIHRvCisJCWZpdCBvbiB0aGUgY29tbWFuZCBsaW5lLiAiLi4uIiB3aWxsIGFwcGVhciBpbiB0aGUgbWlkZGxlLgorCQlJZ25vcmVkIGluIEV4IG1vZGUuCisJICBXCWRvbid0IGdpdmUgIndyaXR0ZW4iIG9yICJbd10iIHdoZW4gd3JpdGluZyBhIGZpbGUKKwkgIEEJZG9uJ3QgZ2l2ZSB0aGUgIkFUVEVOVElPTiIgbWVzc2FnZSB3aGVuIGFuIGV4aXN0aW5nIHN3YXAgZmlsZQorCQlpcyBmb3VuZC4KKwkgIEkJZG9uJ3QgZ2l2ZSB0aGUgaW50cm8gbWVzc2FnZSB3aGVuIHN0YXJ0aW5nIFZpbSB8OmludHJvfC4KKworCVRoaXMgZ2l2ZXMgeW91IHRoZSBvcHBvcnR1bml0eSB0byBhdm9pZCB0aGF0IGEgY2hhbmdlIGJldHdlZW4gYnVmZmVycworCXJlcXVpcmVzIHlvdSB0byBoaXQgPEVudGVyPiwgYnV0IHN0aWxsIGdpdmVzIGFzIHVzZWZ1bCBhIG1lc3NhZ2UgYXMKKwlwb3NzaWJsZSBmb3IgdGhlIHNwYWNlIGF2YWlsYWJsZS4gIFRvIGdldCB0aGUgd2hvbGUgbWVzc2FnZSB0aGF0IHlvdQorCXdvdWxkIGhhdmUgZ290IHdpdGggJ3NobScgZW1wdHksIHVzZSAiOmZpbGUhIgorCVVzZWZ1bCB2YWx1ZXM6CisJICAgIHNobT0JTm8gYWJicmV2aWF0aW9uIG9mIG1lc3NhZ2UuCisJICAgIHNobT1hCUFiYnJldmlhdGlvbiwgYnV0IG5vIGxvc3Mgb2YgaW5mb3JtYXRpb24uCisJICAgIHNobT1hdAlBYmJyZXZpYXRpb24sIGFuZCB0cnVuY2F0ZSBtZXNzYWdlIHdoZW4gbmVjZXNzYXJ5LgorCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkgKidzaG9ydG5hbWUnKiAqJ3NuJyogKidub3Nob3J0bmFtZScqIConbm9zbicqCisnc2hvcnRuYW1lJyAnc24nCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpLCBub3QgaW4gTVMtRE9TIHZlcnNpb25zfQorCUZpbGVuYW1lcyBhcmUgYXNzdW1lZCB0byBiZSA4IGNoYXJhY3RlcnMgcGx1cyBvbmUgZXh0ZW5zaW9uIG9mIDMKKwljaGFyYWN0ZXJzLiAgTXVsdGlwbGUgZG90cyBpbiBmaWxlIG5hbWVzIGFyZSBub3QgYWxsb3dlZC4gIFdoZW4gdGhpcworCW9wdGlvbiBpcyBvbiwgZG90cyBpbiBmaWxlIG5hbWVzIGFyZSByZXBsYWNlZCB3aXRoIHVuZGVyc2NvcmVzIHdoZW4KKwlhZGRpbmcgYW4gZXh0ZW5zaW9uICgiLn4iIG9yICIuc3dwIikuICBUaGlzIG9wdGlvbiBpcyBub3QgYXZhaWxhYmxlCisJZm9yIE1TLURPUywgYmVjYXVzZSB0aGVuIGl0IHdvdWxkIGFsd2F5cyBiZSBvbi4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bAorCXdoZW4gZWRpdGluZyBmaWxlcyBvbiBhbiBNUy1ET1MgY29tcGF0aWJsZSBmaWxlc3lzdGVtLCBlLmcuLCBtZXNzeWRvcworCW9yIGNyb3NzZG9zLiAgV2hlbiBydW5uaW5nIHRoZSBXaW4zMiBHVUkgdmVyc2lvbiB1bmRlciBXaW4zMnMsIHRoaXMKKwlvcHRpb24gaXMgYWx3YXlzIG9uIGJ5IGRlZmF1bHQuCisKKwkJCQkJCSonc2hvd2JyZWFrJyogKidzYnInKiAqRTU5NSoKKydzaG93YnJlYWsnICdzYnInCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgIHwrbGluZWJyZWFrfAorCQkJZmVhdHVyZX0KKwlTdHJpbmcgdG8gcHV0IGF0IHRoZSBzdGFydCBvZiBsaW5lcyB0aGF0IGhhdmUgYmVlbiB3cmFwcGVkLiAgVXNlZnVsCisJdmFsdWVzIGFyZSAiPiAiIG9yICIrKysgIi4KKwlPbmx5IHByaW50YWJsZSBzaW5nbGUtY2VsbCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkLCBleGNsdWRpbmcgPFRhYj4gYW5kCisJY29tbWEgKGluIGEgZnV0dXJlIHZlcnNpb24gdGhlIGNvbW1hIG1pZ2h0IGJlIHVzZWQgdG8gc2VwYXJhdGUgdGhlCisJcGFydCB0aGF0IGlzIHNob3duIGF0IHRoZSBlbmQgYW5kIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUpLgorCVRoZSBjaGFyYWN0ZXJzIGFyZSBoaWdobGlnaHRlZCBhY2NvcmRpbmcgdG8gdGhlICdAJyBmbGFnIGluCisJJ2hpZ2hsaWdodCcuCisJTm90ZSB0aGF0IHRhYnMgYWZ0ZXIgdGhlIHNob3dicmVhayB3aWxsIGJlIGRpc3BsYXllZCBkaWZmZXJlbnRseS4KKwlJZiB5b3Ugd2FudCB0aGUgJ3Nob3dicmVhaycgdG8gYXBwZWFyIGluIGJldHdlZW4gbGluZSBudW1iZXJzLCBhZGQgdGhlCisJIm4iIGZsYWcgdG8gJ2Nwb3B0aW9ucycuCisKKwkJCQkgICAgIConc2hvd2NtZCcqIConc2MnKiAqJ25vc2hvd2NtZCcqIConbm9zYycqCisnc2hvd2NtZCcgJ3NjJwkJYm9vbGVhbgkoVmltIGRlZmF1bHQ6IG9uLCBvZmYgZm9yIFVuaXgsIFZpIGRlZmF1bHQ6CisJCQkJIG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrY21kbGluZV9pbmZvfCBmZWF0dXJlfQorCVNob3cgKHBhcnRpYWwpIGNvbW1hbmQgaW4gc3RhdHVzIGxpbmUuCVNldCB0aGlzIG9wdGlvbiBvZmYgaWYgeW91cgorCXRlcm1pbmFsIGlzIHNsb3cuCisJSW4gVmlzdWFsIG1vZGUgdGhlIHNpemUgb2YgdGhlIHNlbGVjdGVkIGFyZWEgaXMgc2hvd246CisJLSBXaGVuIHNlbGVjdGluZyBjaGFyYWN0ZXJzIHdpdGhpbiBhIGxpbmUsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycy4KKwktIFdoZW4gc2VsZWN0aW5nIG1vcmUgdGhhbiBvbmUgbGluZSwgdGhlIG51bWJlciBvZiBsaW5lcy4KKwktIFdoZW4gc2VsZWN0aW5nIGEgYmxvY2ssIHRoZSBzaXplIGluIHNjcmVlbiBjaGFyYWN0ZXJzOiBsaW5lc3hjb2x1bW5zLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkqJ3Nob3dmdWxsdGFnJyogKidzZnQnKiAqJ25vc2hvd2Z1bGx0YWcnKiAqJ25vc2Z0JyoKKydzaG93ZnVsbHRhZycgJ3NmdCcJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBjb21wbGV0aW5nIGEgd29yZCBpbiBpbnNlcnQgbW9kZSAoc2VlIHxpbnMtY29tcGxldGlvbnwpIGZyb20gdGhlCisJdGFncyBmaWxlLCBzaG93IGJvdGggdGhlIHRhZyBuYW1lIGFuZCBhIHRpZGllZC11cCBmb3JtIG9mIHRoZSBzZWFyY2gKKwlwYXR0ZXJuIChpZiB0aGVyZSBpcyBvbmUpIGFzIHBvc3NpYmxlIG1hdGNoZXMuCVRodXMsIGlmIHlvdSBoYXZlCisJbWF0Y2hlZCBhIEMgZnVuY3Rpb24sIHlvdSBjYW4gc2VlIGEgdGVtcGxhdGUgZm9yIHdoYXQgYXJndW1lbnRzIGFyZQorCXJlcXVpcmVkIChjb2Rpbmcgc3R5bGUgcGVybWl0dGluZykuCisKKwkJCQkgKidzaG93bWF0Y2gnKiAqJ3NtJyogKidub3Nob3dtYXRjaCcqIConbm9zbScqCisnc2hvd21hdGNoJyAnc20nCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJV2hlbiBhIGJyYWNrZXQgaXMgaW5zZXJ0ZWQsIGJyaWVmbHkganVtcCB0byB0aGUgbWF0Y2hpbmcgb25lLiAgVGhlCisJanVtcCBpcyBvbmx5IGRvbmUgaWYgdGhlIG1hdGNoIGNhbiBiZSBzZWVuIG9uIHRoZSBzY3JlZW4uICBUaGUgdGltZSB0bworCXNob3cgdGhlIG1hdGNoIGNhbiBiZSBzZXQgd2l0aCAnbWF0Y2h0aW1lJy4KKwlBIEJlZXAgaXMgZ2l2ZW4gaWYgdGhlcmUgaXMgbm8gbWF0Y2ggKG5vIG1hdHRlciBpZiB0aGUgbWF0Y2ggY2FuIGJlCisJc2VlbiBvciBub3QpLiAgVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiB0aGUgJ3Bhc3RlJyBvcHRpb24gaXMgc2V0LgorCVdoZW4gdGhlICdtJyBmbGFnIGlzIG5vdCBpbmNsdWRlZCBpbiAnY3BvcHRpb25zJywgdHlwaW5nIGEgY2hhcmFjdGVyCisJd2lsbCBpbW1lZGlhdGVseSBtb3ZlIHRoZSBjdXJzb3IgYmFjayB0byB3aGVyZSBpdCBiZWxvbmdzLgorCVNlZSB0aGUgInNtIiBmaWVsZCBpbiAnZ3VpY3Vyc29yJyBmb3Igc2V0dGluZyB0aGUgY3Vyc29yIHNoYXBlIGFuZAorCWJsaW5raW5nIHdoZW4gc2hvd2luZyB0aGUgbWF0Y2guCisJVGhlICdtYXRjaHBhaXJzJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY2hhcmFjdGVycyB0byBzaG93CisJbWF0Y2hlcyBmb3IuICAncmlnaHRsZWZ0JyBhbmQgJ3JldmlucycgYXJlIHVzZWQgdG8gbG9vayBmb3Igb3Bwb3NpdGUKKwltYXRjaGVzLgorCU5vdGU6IEZvciB0aGUgdXNlIG9mIHRoZSBzaG9ydCBmb3JtIHBhcmVudGFsIGd1aWRhbmNlIGlzIGFkdmlzZWQuCisKKwkJCQkgKidzaG93bW9kZScqIConc21kJyogKidub3Nob3dtb2RlJyogKidub3NtZCcqCisnc2hvd21vZGUnICdzbWQnCWJvb2xlYW4JKFZpbSBkZWZhdWx0OiBvbiwgVmkgZGVmYXVsdDogb2ZmKQorCQkJZ2xvYmFsCisJSWYgaW4gSW5zZXJ0LCBSZXBsYWNlIG9yIFZpc3VhbCBtb2RlIHB1dCBhIG1lc3NhZ2Ugb24gdGhlIGxhc3QgbGluZS4KKwlVc2UgdGhlICdNJyBmbGFnIGluICdoaWdobGlnaHQnIHRvIHNldCB0aGUgdHlwZSBvZiBoaWdobGlnaHRpbmcgZm9yCisJdGhpcyBtZXNzYWdlLgorCVdoZW4gfFhJTXwgbWF5IGJlIHVzZWQgdGhlIG1lc3NhZ2Ugd2lsbCBpbmNsdWRlICJYSU0iLglCdXQgdGhpcworCWRvZXNuJ3QgbWVhbiBYSU0gaXMgcmVhbGx5IGFjdGl2ZSwgZXNwZWNpYWxseSB3aGVuICdpbWFjdGl2YXRla2V5JyBpcworCW5vdCBzZXQuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSonc2lkZXNjcm9sbCcqIConc3MnKgorJ3NpZGVzY3JvbGwnICdzcycJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIG1pbmltYWwgbnVtYmVyIG9mIGNvbHVtbnMgdG8gc2Nyb2xsIGhvcml6b250YWxseS4gIFVzZWQgb25seSB3aGVuCisJdGhlICd3cmFwJyBvcHRpb24gaXMgb2ZmIGFuZCB0aGUgY3Vyc29yIGlzIG1vdmVkIG9mZiBvZiB0aGUgc2NyZWVuLgorCVdoZW4gaXQgaXMgemVybyB0aGUgY3Vyc29yIHdpbGwgYmUgcHV0IGluIHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbi4KKwlXaGVuIHVzaW5nIGEgc2xvdyB0ZXJtaW5hbCBzZXQgaXQgdG8gYSBsYXJnZSBudW1iZXIgb3IgMC4gIFdoZW4gdXNpbmcKKwlhIGZhc3QgdGVybWluYWwgdXNlIGEgc21hbGwgbnVtYmVyIG9yIDEuICBOb3QgdXNlZCBmb3IgInpoIiBhbmQgInpsIgorCWNvbW1hbmRzLgorCisJCQkJCQkqJ3NpZGVzY3JvbGxvZmYnKiAqJ3Npc28nKgorJ3NpZGVzY3JvbGxvZmYnICdzaXNvJwludW1iZXIgKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlUaGUgbWluaW1hbCBudW1iZXIgb2Ygc2NyZWVuIGNvbHVtbnMgdG8ga2VlcCB0byB0aGUgbGVmdCBhbmQgdG8gdGhlCisJcmlnaHQgb2YgdGhlIGN1cnNvciBpZiAnbm93cmFwJyBpcyBzZXQuIFNldHRpbmcgdGhpcyBvcHRpb24gdG8gYSB2YWx1ZQorCWdyZWF0ZXIgdGhhbiAwIHdoaWxlIGhhdmluZyB8J3NpZGVzY3JvbGwnfCBhbHNvIGF0IGEgbm9uLXplcm8gdmFsdWUKKwltYWtlcyBzb21lIGNvbnRleHQgdmlzaWJsZSBpbiB0aGUgbGluZSB5b3UgYXJlIHNjcm9sbGluZyBpbgorCWhvcml6b250YWxseSAoZXhjZXB0IGF0IHRoZSBlbmQgYW5kIGJlZ2lubmluZyBvZiB0aGUgbGluZSkuICBTZXR0aW5nCisJdGhpcyBvcHRpb24gdG8gYSBsYXJnZSB2YWx1ZSAobGlrZSA5OTkpIGhhcyB0aGUgZWZmZWN0IG9mIGtlZXBpbmcgdGhlCisJY3Vyc29yIGhvcml6b250YWxseSBjZW50ZXJlZCBpbiB0aGUgd2luZG93LCBhcyBsb25nIGFzIG9uZSBkb2VzIG5vdAorCWNvbWUgdG9vIGNsb3NlIHRvIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBsaW5lLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byAwIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCUV4YW1wbGU6IFRyeSB0aGlzIHRvZ2V0aGVyIHdpdGggJ3NpZGVzY3JvbGwnIGFuZCAnbGlzdGNoYXJzJyBhcworCQkgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIHRvIG5ldmVyIGFsbG93IHRoZSBjdXJzb3IgdG8gbW92ZQorCQkgb250byB0aGUgImV4dGVuZHMiIGNoYXJhY3RlcjoKKworCQkgOnNldCBub3dyYXAgc2lkZXNjcm9sbD0xIGxpc3RjaGFycz1leHRlbmRzOj4scHJlY2VkZXM6PAorCQkgOnNldCBzaWRlc2Nyb2xsb2ZmPTEKKworCisJCQkqJ3NtYXJ0Y2FzZScqIConc2NzJyogKidub3NtYXJ0Y2FzZScqIConbm9zY3MnKgorJ3NtYXJ0Y2FzZScgJ3NjcycJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJT3ZlcnJpZGUgdGhlICdpZ25vcmVjYXNlJyBvcHRpb24gaWYgdGhlIHNlYXJjaCBwYXR0ZXJuIGNvbnRhaW5zIHVwcGVyCisJY2FzZSBjaGFyYWN0ZXJzLiAgT25seSB1c2VkIHdoZW4gdGhlIHNlYXJjaCBwYXR0ZXJuIGlzIHR5cGVkIGFuZAorCSdpZ25vcmVjYXNlJyBvcHRpb24gaXMgb24uICBVc2VkIGZvciB0aGUgY29tbWFuZHMgIi8iLCAiPyIsICJuIiwgIk4iLAorCSI6ZyIgYW5kICI6cyIuCU5vdCB1c2VkIGZvciAiKiIsICIjIiwgImdkIiwgdGFnIHNlYXJjaCwgZXRjLi4JQWZ0ZXIKKwkiKiIgYW5kICIjIiB5b3UgY2FuIG1ha2UgJ3NtYXJ0Y2FzZScgdXNlZCBieSBkb2luZyBhICIvIiBjb21tYW5kLAorCXJlY2FsbGluZyB0aGUgc2VhcmNoIHBhdHRlcm4gZnJvbSBoaXN0b3J5IGFuZCBoaXR0aW5nIDxFbnRlcj4uCisJTk9URTogVGhpcyBvcHRpb24gaXMgcmVzZXQgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkgICAgIConc21hcnRpbmRlbnQnKiAqJ3NpJyogKidub3NtYXJ0aW5kZW50JyogKidub3NpJyoKKydzbWFydGluZGVudCcgJ3NpJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrc21hcnRpbmRlbnR8IGZlYXR1cmV9CisJRG8gc21hcnQgYXV0b2luZGVudGluZyB3aGVuIHN0YXJ0aW5nIGEgbmV3IGxpbmUuICBXb3JrcyBmb3IgQy1saWtlCisJcHJvZ3JhbXMsIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGZvciBvdGhlciBsYW5ndWFnZXMuICAnY2luZGVudCcgZG9lcworCXNvbWV0aGluZyBsaWtlIHRoaXMsIHdvcmtzIGJldHRlciBpbiBtb3N0IGNhc2VzLCBidXQgaXMgbW9yZSBzdHJpY3QsCisJc2VlIHxDLWluZGVudGluZ3wuICBXaGVuICdjaW5kZW50JyBpcyBvbiwgc2V0dGluZyAnc2knIGhhcyBubyBlZmZlY3QuCisJJ2luZGVudGV4cHInIGlzIGEgbW9yZSBhZHZhbmNlZCBhbHRlcm5hdGl2ZS4KKwlOb3JtYWxseSAnYXV0b2luZGVudCcgc2hvdWxkIGFsc28gYmUgb24gd2hlbiB1c2luZyAnc21hcnRpbmRlbnQnLgorCUFuIGluZGVudCBpcyBhdXRvbWF0aWNhbGx5IGluc2VydGVkOgorCS0gQWZ0ZXIgYSBsaW5lIGVuZGluZyBpbiAneycuCisJLSBBZnRlciBhIGxpbmUgc3RhcnRpbmcgd2l0aCBhIGtleXdvcmQgZnJvbSAnY2lud29yZHMnLgorCS0gQmVmb3JlIGEgbGluZSBzdGFydGluZyB3aXRoICd9JyAob25seSB3aXRoIHRoZSAiTyIgY29tbWFuZCkuCisJV2hlbiB0eXBpbmcgJ30nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBuZXcgbGluZSwgdGhhdCBsaW5lIGlzCisJZ2l2ZW4gdGhlIHNhbWUgaW5kZW50IGFzIHRoZSBtYXRjaGluZyAneycuCisJV2hlbiB0eXBpbmcgJyMnIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBuZXcgbGluZSwgdGhlIGluZGVudCBmb3IKKwl0aGF0IGxpbmUgaXMgcmVtb3ZlZCwgdGhlICcjJyBpcyBwdXQgaW4gdGhlIGZpcnN0IGNvbHVtbi4gIFRoZSBpbmRlbnQKKwlpcyByZXN0b3JlZCBmb3IgdGhlIG5leHQgbGluZS4JSWYgeW91IGRvbid0IHdhbnQgdGhpcywgdXNlIHRoaXMKKwltYXBwaW5nOiAiOmlub3JlbWFwICMgWF5IIyIsIHdoZXJlIF5IIGlzIGVudGVyZWQgd2l0aCBDVFJMLVYgQ1RSTC1ILgorCVdoZW4gdXNpbmcgdGhlICI+PiIgY29tbWFuZCwgbGluZXMgc3RhcnRpbmcgd2l0aCAnIycgYXJlIG5vdCBzaGlmdGVkCisJcmlnaHQuCisJTk9URTogJ3NtYXJ0aW5kZW50JyBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCVdoZW4gJ3Bhc3RlJworCWlzIHNldCBzbWFydCBpbmRlbnRpbmcgaXMgZGlzYWJsZWQuCisKKwkJCQkgKidzbWFydHRhYicqIConc3RhJyogKidub3NtYXJ0dGFiJyogKidub3N0YScqCisnc21hcnR0YWInICdzdGEnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVdoZW4gb24sIGEgPFRhYj4gaW4gZnJvbnQgb2YgYSBsaW5lIGluc2VydHMgYmxhbmtzIGFjY29yZGluZyB0bworCSdzaGlmdHdpZHRoJy4gICd0YWJzdG9wJyBpcyB1c2VkIGluIG90aGVyIHBsYWNlcy4gIEEgPEJTPiB3aWxsIGRlbGV0ZQorCWEgJ3NoaWZ0d2lkdGgnIHdvcnRoIG9mIHNwYWNlIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZS4KKwlXaGVuIG9mZiBhIDxUYWI+IGFsd2F5cyBpbnNlcnRzIGJsYW5rcyBhY2NvcmRpbmcgdG8gJ3RhYnN0b3AnLgorCSdzaGlmdHdpZHRoJyBpcyBvbmx5IHVzZWQgZm9yIHNoaWZ0aW5nIHRleHQgbGVmdCBvciByaWdodAorCXxzaGlmdC1sZWZ0LXJpZ2h0fC4KKwlXaGF0IGdldHMgaW5zZXJ0ZWQgKGEgVGFiIG9yIHNwYWNlcykgZGVwZW5kcyBvbiB0aGUgJ2V4cGFuZHRhYicKKwlvcHRpb24uICBBbHNvIHNlZSB8aW5zLWV4cGFuZHRhYnwuICBXaGVuICdleHBhbmR0YWInIGlzIG5vdCBzZXQsIHRoZQorCW51bWJlciBvZiBzcGFjZXMgbWluaW1pemVkIGJ5IHVzaW5nIDxUYWI+cy4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkJKidzb2Z0dGFic3RvcCcqIConc3RzJyoKKydzb2Z0dGFic3RvcCcgJ3N0cycJbnVtYmVyCShkZWZhdWx0IDApCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJTnVtYmVyIG9mIHNwYWNlcyB0aGF0IGEgPFRhYj4gY291bnRzIGZvciB3aGlsZSBwZXJmb3JtaW5nIGVkaXRpbmcKKwlvcGVyYXRpb25zLCBsaWtlIGluc2VydGluZyBhIDxUYWI+IG9yIHVzaW5nIDxCUz4uICBJdCAiZmVlbHMiIGxpa2UKKwk8VGFiPnMgYXJlIGJlaW5nIGluc2VydGVkLCB3aGlsZSBpbiBmYWN0IGEgbWl4IG9mIHNwYWNlcyBhbmQgPFRhYj5zIGlzCisJdXNlZC4gIFRoaXMgaXMgdXNlZnVsIHRvIGtlZXAgdGhlICd0cycgc2V0dGluZyBhdCBpdHMgc3RhbmRhcmQgdmFsdWUKKwlvZiA4LCB3aGlsZSBiZWluZyBhYmxlIHRvIGVkaXQgbGlrZSBpdCBpcyBzZXQgdG8gJ3N0cycuICBIb3dldmVyLAorCWNvbW1hbmRzIGxpa2UgIngiIHN0aWxsIHdvcmsgb24gdGhlIGFjdHVhbCBjaGFyYWN0ZXJzLgorCVdoZW4gJ3N0cycgaXMgemVybywgdGhpcyBmZWF0dXJlIGlzIG9mZi4KKwknc29mdHRhYnN0b3AnIGlzIHNldCB0byAwIHdoZW4gdGhlICdwYXN0ZScgb3B0aW9uIGlzIHNldC4KKwlTZWUgYWxzbyB8aW5zLWV4cGFuZHRhYnwuICBXaGVuICdleHBhbmR0YWInIGlzIG5vdCBzZXQsIHRoZSBudW1iZXIgb2YKKwlzcGFjZXMgaXMgbWluaW1pemVkIGJ5IHVzaW5nIDxUYWI+cy4KKwlUaGUgJ0wnIGZsYWcgaW4gJ2Nwb3B0aW9ucycgY2hhbmdlcyBob3cgdGFicyBhcmUgdXNlZCB3aGVuICdsaXN0JyBpcworCXNldC4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gMCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCSonc3BsaXRiZWxvdycqIConc2InKiAqJ25vc3BsaXRiZWxvdycqIConbm9zYicqCisnc3BsaXRiZWxvdycgJ3NiJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3dpbmRvd3MKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgc3BsaXR0aW5nIGEgd2luZG93IHdpbGwgcHV0IHRoZSBuZXcgd2luZG93IGJlbG93IHRoZSBjdXJyZW50CisJb25lLiB8OnNwbGl0fAorCisJCQkqJ3NwbGl0cmlnaHQnKiAqJ3NwcicqIConbm9zcGxpdHJpZ2h0JyogKidub3NwcicqCisnc3BsaXRyaWdodCcgJ3NwcicJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2ZXJ0c3BsaXQKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgc3BsaXR0aW5nIGEgd2luZG93IHdpbGwgcHV0IHRoZSBuZXcgd2luZG93IHJpZ2h0IG9mIHRoZQorCWN1cnJlbnQgb25lLiB8OnZzcGxpdHwKKworCQkJICAgKidzdGFydG9mbGluZScqIConc29sJyogKidub3N0YXJ0b2ZsaW5lJyogKidub3NvbCcqCisnc3RhcnRvZmxpbmUnICdzb2wnCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiAib24iIHRoZSBjb21tYW5kcyBsaXN0ZWQgYmVsb3cgbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdAorCWJsYW5rIG9mIHRoZSBsaW5lLiAgV2hlbiBvZmYgdGhlIGN1cnNvciBpcyBrZXB0IGluIHRoZSBzYW1lIGNvbHVtbgorCShpZiBwb3NzaWJsZSkuCVRoaXMgYXBwbGllcyB0byB0aGUgY29tbWFuZHM6IENUUkwtRCwgQ1RSTC1VLCBDVFJMLUIsCisJQ1RSTC1GLCAiRyIsICJIIiwgIk0iLCAiTCIsICwgYW5kIHRvIHRoZSBjb21tYW5kcyAiZCIsICI8PCIgYW5kICI+PiIKKwl3aXRoIGEgbGluZXdpc2Ugb3BlcmF0b3IsIHdpdGggIiUiIHdpdGggYSBjb3VudCBhbmQgdG8gYnVmZmVyIGNoYW5naW5nCisJY29tbWFuZHMgKENUUkwtXiwgOmJuZXh0LCA6Yk5leHQsIGV0Yy4pLiAgQWxzbyBmb3IgYW4gRXggY29tbWFuZCB0aGF0CisJb25seSBoYXMgYSBsaW5lIG51bWJlciwgZS5nLiwgIjoyNSIgb3IgIjorIi4KKwlJbiBjYXNlIG9mIGJ1ZmZlciBjaGFuZ2luZyBjb21tYW5kcyB0aGUgY3Vyc29yIGlzIHBsYWNlZCBhdCB0aGUgY29sdW1uCisJd2hlcmUgaXQgd2FzIHRoZSBsYXN0IHRpbWUgdGhlIGJ1ZmZlciB3YXMgZWRpdGVkLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCSAgIConc3RhdHVzbGluZScqIConc3RsJyogKkU1NDAqICpFNTQxKiAqRTU0MioKKydzdGF0dXNsaW5lJyAnc3RsJwlzdHJpbmcJKGRlZmF1bHQgZW1wdHkpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrc3RhdHVzbGluZXwKKwkJCWZlYXR1cmV9CisJV2hlbiBub25lbXB0eSwgdGhpcyBvcHRpb24gZGV0ZXJtaW5lcyB0aGUgY29udGVudCBvZiB0aGUgc3RhdHVzIGxpbmUuCisJQWxzbyBzZWUgfHN0YXR1cy1saW5lfC4KKworCVRoZSBvcHRpb24gY29uc2lzdHMgb2YgcHJpbnRmIHN0eWxlICclJyBpdGVtcyBpbnRlcnNwZXJzZWQgd2l0aAorCW5vcm1hbCB0ZXh0LiAgRWFjaCBzdGF0dXMgbGluZSBpdGVtIGlzIG9mIHRoZSBmb3JtOgorCSAgJS0we21pbndpZH0ue21heHdpZH17aXRlbX0KKwlBbGwgZmllbGRzIGV4Y2VwdCB0aGUge2l0ZW19IGlzIG9wdGlvbmFsLiAgQSBzaW5nbGUgcGVyY2VudCBzaWduIGNhbgorCWJlIGdpdmVuIGFzICIlJSIuICBVcCB0byA4MCBpdGVtcyBjYW4gYmUgc3BlY2lmaWVkLgorCisJTm90ZSB0aGF0IHRoZSBvbmx5IGVmZmVjdCBvZiAncnVsZXInIHdoZW4gdGhpcyBvcHRpb24gaXMgc2V0IChhbmQKKwknbGFzdHN0YXR1cycgaXMgMikgaXMgY29udHJvbGxpbmcgdGhlIG91dHB1dCBvZiB8Q1RSTC1HfC4KKworCWZpZWxkCSAgICBtZWFuaW5nIH4KKwktCSAgICBMZWZ0IGp1c3RpZnkgdGhlIGl0ZW0uIFRoZSBkZWZhdWx0IGlzIHJpZ2h0IGp1c3RpZmllZAorCQkgICAgd2hlbiBtaW53aWQgaXMgbGFyZ2VyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgaXRlbS4KKwkwCSAgICBMZWFkaW5nIHplcm9lcyBpbiBudW1lcmljIGl0ZW1zLiBPdmVycmlkZGVuIGJ5ICctJy4KKwltaW53aWQJICAgIE1pbmltdW0gd2lkdGggb2YgdGhlIGl0ZW0sIHBhZGRpbmcgYXMgc2V0IGJ5ICctJyAmICcwJy4KKwkJICAgIFZhbHVlIG11c3QgYmUgNTAgb3IgbGVzcy4KKwltYXh3aWQJICAgIE1heGltdW0gd2lkdGggb2YgdGhlIGl0ZW0uCVRydW5jYXRpb24gb2NjdXJzIHdpdGggYSAnPCcKKwkJICAgIG9uIHRoZSBsZWZ0IGZvciB0ZXh0IGl0ZW1zLiAgTnVtZXJpYyBpdGVtcyB3aWxsIGJlCisJCSAgICBzaGlmdGVkIGRvd24gdG8gbWF4d2lkLTIgZGlnaXRzIGZvbGxvd2VkIGJ5ICc+J251bWJlcgorCQkgICAgd2hlcmUgbnVtYmVyIGlzIHRoZSBhbW91bnQgb2YgbWlzc2luZyBkaWdpdHMsIG11Y2ggbGlrZQorCQkgICAgYW4gZXhwb25lbnRpYWwgbm90YXRpb24uCisJaXRlbQkgICAgQSBvbmUgbGV0dGVyIGNvZGUgYXMgZGVzY3JpYmVkIGJlbG93LgorCisJRm9sbG93aW5nIGlzIGEgZGVzY3JpcHRpb24gb2YgdGhlIHBvc3NpYmxlIHN0YXR1c2xpbmUgaXRlbXMuICBUaGUKKwlzZWNvbmQgY2hhcmFjdGVyIGluICJpdGVtIiBpcyB0aGUgdHlwZToKKwkJTiBmb3IgbnVtYmVyCisJCVMgZm9yIHN0cmluZworCQlGIGZvciBmbGFncyBhcyBkZXNjcmliZWQgYmVsb3cKKwkJLSBub3QgYXBwbGljYWJsZQorCisJaXRlbSAgbWVhbmluZyB+CisJZiBTICAgUGF0aCB0byB0aGUgZmlsZSBpbiB0aGUgYnVmZmVyLCByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeS4KKwlGIFMgICBGdWxsIHBhdGggdG8gdGhlIGZpbGUgaW4gdGhlIGJ1ZmZlci4KKwl0IFMgICBGaWxlIG5hbWUgKHRhaWwpIG9mIGZpbGUgaW4gdGhlIGJ1ZmZlci4KKwltIEYgICBNb2RpZmllZCBmbGFnLCB0ZXh0IGlzICIgWytdIjsgIiBbLV0iIGlmICdtb2RpZmlhYmxlJyBpcyBvZmYuCisJTSBGICAgTW9kaWZpZWQgZmxhZywgdGV4dCBpcyAiLCsiIG9yICIsLSIuCisJciBGICAgUmVhZG9ubHkgZmxhZywgdGV4dCBpcyAiIFtST10iLgorCVIgRiAgIFJlYWRvbmx5IGZsYWcsIHRleHQgaXMgIixSTyIuCisJaCBGICAgSGVscCBidWZmZXIgZmxhZywgdGV4dCBpcyAiIFtoZWxwXSIuCisJSCBGICAgSGVscCBidWZmZXIgZmxhZywgdGV4dCBpcyAiLEhMUCIuCisJdyBGICAgUHJldmlldyB3aW5kb3cgZmxhZywgdGV4dCBpcyAiIFtQcmV2aWV3XSIuCisJVyBGICAgUHJldmlldyB3aW5kb3cgZmxhZywgdGV4dCBpcyAiLFBSViIuCisJeSBGICAgVHlwZSBvZiBmaWxlIGluIHRoZSBidWZmZXIsIGUuZy4sICIgW3ZpbV0iLiAgU2VlICdmaWxldHlwZScuCisJWSBGICAgVHlwZSBvZiBmaWxlIGluIHRoZSBidWZmZXIsIGUuZy4sICIsVklNIi4gIFNlZSAnZmlsZXR5cGUnLgorCSAgICAgIHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB8K2F1dG9jbWR8IGZlYXR1cmV9CisJayBTICAgVmFsdWUgb2YgImI6a2V5bWFwX25hbWUiIG9yICdrZXltYXAnIHdoZW4gfDpsbWFwfCBtYXBwaW5ncyBhcmUKKwkgICAgICBiZWluZyB1c2VkOiAiPGtleW1hcD4iCisJbiBOICAgQnVmZmVyIG51bWJlci4KKwliIE4gICBWYWx1ZSBvZiBieXRlIHVuZGVyIGN1cnNvci4KKwlCIE4gICBBcyBhYm92ZSwgaW4gaGV4YWRlY2ltYWwuCisJbyBOICAgQnl0ZSBudW1iZXIgaW4gZmlsZSBvZiBieXRlIHVuZGVyIGN1cnNvciwgZmlyc3QgYnl0ZSBpcyAxLgorCSAgICAgIE1uZW1vbmljOiBPZmZzZXQgZnJvbSBzdGFydCBvZiBmaWxlICh3aXRoIG9uZSBhZGRlZCkKKwkgICAgICB7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgfCtieXRlX29mZnNldHwgZmVhdHVyZX0KKwlPIE4gICBBcyBhYm92ZSwgaW4gaGV4YWRlY2ltYWwuCisJTiBOICAgUHJpbnRlciBwYWdlIG51bWJlci4gKE9ubHkgd29ya3MgaW4gdGhlICdwcmludGhlYWRlcicgb3B0aW9uLikKKwlsIE4gICBMaW5lIG51bWJlci4KKwlMIE4gICBOdW1iZXIgb2YgbGluZXMgaW4gYnVmZmVyLgorCWMgTiAgIENvbHVtbiBudW1iZXIuCisJdiBOICAgVmlydHVhbCBjb2x1bW4gbnVtYmVyLgorCVYgTiAgIFZpcnR1YWwgY29sdW1uIG51bWJlciBhcyAte251bX0uCU5vdCBkaXNwbGF5ZWQgaWYgZXF1YWwgdG8gJ2MnLgorCXAgTiAgIFBlcmNlbnRhZ2UgdGhyb3VnaCBmaWxlIGluIGxpbmVzIGFzIGluIHxDVFJMLUd8LgorCVAgUyAgIFBlcmNlbnRhZ2UgdGhyb3VnaCBmaWxlIG9mIGRpc3BsYXllZCB3aW5kb3cuICBUaGlzIGlzIGxpa2UgdGhlCisJICAgICAgcGVyY2VudGFnZSBkZXNjcmliZWQgZm9yICdydWxlcicuICBBbHdheXMgMyBpbiBsZW5ndGguCisJYSBTICAgQXJndW1lbnQgbGlzdCBzdGF0dXMgYXMgaW4gZGVmYXVsdCB0aXRsZS4gKHtjdXJyZW50fSBvZiB7bWF4fSkKKwkgICAgICBFbXB0eSBpZiB0aGUgYXJndW1lbnQgZmlsZSBjb3VudCBpcyB6ZXJvIG9yIG9uZS4KKwl7IE5GICBFdmFsdWF0ZSBleHByZXNzaW9uIGJldHdlZW4gJ3snIGFuZCAnfScgYW5kIHN1YnN0aXR1dGUgcmVzdWx0LgorCSggLSAgIFN0YXJ0IG9mIGl0ZW0gZ3JvdXAuICBDYW4gYmUgdXNlZCBmb3Igc2V0dGluZyB0aGUgd2lkdGggYW5kCisJICAgICAgYWxpZ25tZW50IG9mIGEgc2VjdGlvbi4gIE11c3QgYmUgZm9sbG93ZWQgYnkgJSkgc29tZXdoZXJlLgorCSkgLSAgIEVuZCBvZiBpdGVtIGdyb3VwLiAgTm8gd2lkdGggZmllbGRzIGFsbG93ZWQuCisJPCAtICAgV2hlcmUgdG8gdHJ1bmNhdGUgbGluZSBpZiB0b28gbG9uZy4gIERlZmF1bHQgaXMgYXQgdGhlIHN0YXJ0LgorCSAgICAgIE5vIHdpZHRoIGZpZWxkcyBhbGxvd2VkLgorCT0gLSAgIFNlcGFyYXRpb24gcG9pbnQgYmV0d2VlbiBsZWZ0IGFuZCByaWdodCBhbGlnbmVkIGl0ZW1zLgorCSAgICAgIE5vIHdpZHRoIGZpZWxkcyBhbGxvd2VkLgorCSogLSAgIFNldCBoaWdobGlnaHQgZ3JvdXAgdG8gVXNlcntOfSwgd2hlcmUge059IGlzIHRha2VuIGZyb20gdGhlCisJICAgICAgbWlud2lkIGZpZWxkLiBlZy4gJTEqLiAgUmVzdG9yZSBub3JtYWwgaGlnaGxpZ2h0IHdpdGggJSogb3IgJTAqLgorCSAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVXNlcntOfSBhbmQgU3RhdHVzTGluZSAgd2lsbCBiZSBhcHBsaWVkCisJICAgICAgdG8gU3RhdHVzTGluZU5DIGZvciB0aGUgc3RhdHVzbGluZSBvZiBub24tY3VycmVudCB3aW5kb3dzLgorCSAgICAgIFRoZSBudW1iZXIgTiBtdXN0IGJlIGJldHdlZW4gMSBhbmQgOS4gIFNlZSB8aGwtVXNlcjEuLjl8CisKKwlEaXNwbGF5IG9mIGZsYWdzIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBmb2xsb3dpbmcgaGV1cmlzdGljOgorCUlmIGEgZmxhZyB0ZXh0IHN0YXJ0cyB3aXRoIGNvbW1hIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCB3YW50cyB0bworCXNlcGFyYXRlIGl0c2VsZiBmcm9tIGFueXRoaW5nIGJ1dCBwcmVjZWRpbmcgcGxhaW50ZXh0LglJZiBpdCBzdGFydHMKKwl3aXRoIGEgc3BhY2UgaXQgaXMgYXNzdW1lZCB0aGF0IGl0IHdhbnRzIHRvIHNlcGFyYXRlIGl0c2VsZiBmcm9tCisJYW55dGhpbmcgYnV0IG90aGVyIGZsYWdzLiAgVGhhdCBpczogQSBsZWFkaW5nIGNvbW1hIGlzIHJlbW92ZWQgaWYgdGhlCisJcHJlY2VkaW5nIGNoYXJhY3RlciBzdGVtcyBmcm9tIHBsYWludGV4dC4gIEEgbGVhZGluZyBzcGFjZSBpcyByZW1vdmVkCisJaWYgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIgc3RlbXMgZnJvbSBhbm90aGVyIGFjdGl2ZSBmbGFnLiBUaGlzIHdpbGwKKwltYWtlIGEgbmljZSBkaXNwbGF5IHdoZW4gZmxhZ3MgYXJlIHVzZWQgbGlrZSBpbiB0aGUgZXhhbXBsZXMgYmVsb3cuCisKKwlXaGVuIGFsbCBpdGVtcyBpbiBhIGdyb3VwIGJlY29tZXMgYW4gZW1wdHkgc3RyaW5nIChpZS4gZmxhZ3MgdGhhdCBhcmUKKwlub3Qgc2V0KSBhbmQgYSBtaW53aWQgaXMgbm90IHNldCBmb3IgdGhlIGdyb3VwLCB0aGUgd2hvbGUgZ3JvdXAgd2lsbAorCWJlY29tZSBlbXB0eS4gIFRoaXMgd2lsbCBtYWtlIGEgZ3JvdXAgbGlrZSB0aGUgZm9sbG93aW5nIGRpc2FwcGVhcgorCWNvbXBsZXRlbHkgZnJvbSB0aGUgc3RhdHVzbGluZSB3aGVuIG5vbmUgb2YgdGhlIGZsYWdzIGFyZSBzZXQuID4KKwkJOnNldCBzdGF0dXNsaW5lPS4uLiUoXCBbJU0lUiVIXSUpLi4uCis8CisJQmV3YXJlIHRoYXQgYW4gZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgZWFjaCBhbmQgZXZlcnkgdGltZSB0aGUgc3RhdHVzCisJbGluZSBpcyBkaXNwbGF5ZWQuICBUaGUgY3VycmVudCBidWZmZXIgYW5kIGN1cnJlbnQgd2luZG93IHdpbGwgYmUgc2V0CisJdGVtcG9yYXJpbHkgdG8gdGhhdCBvZiB0aGUgd2luZG93IChhbmQgYnVmZmVyKSB3aG9zZSBzdGF0dXNsaW5lIGlzCisJY3VycmVudGx5IGJlaW5nIGRyYXduLiBUaGUgZXhwcmVzc2lvbiB3aWxsIGV2YWx1YXRlIGluIHRoaXMgY29udGV4dC4KKwlUaGUgdmFyaWFibGUgImFjdHVhbF9jdXJidWYiIGlzIHNldCB0byB0aGUgJ2J1Zm5yKCknIG51bWJlciBvZiB0aGUKKwlyZWFsIGN1cnJlbnQgYnVmZmVyLiAgVGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGluIHRoZSB8c2FuZGJveHwuCisKKwlJZiB0aGUgc3RhdHVzbGluZSBpcyBub3QgdXBkYXRlZCB3aGVuIHlvdSB3YW50IGl0IChlLmcuLCBhZnRlciBzZXR0aW5nCisJYSB2YXJpYWJsZSB0aGF0J3MgdXNlZCBpbiBhbiBleHByZXNzaW9uKSwgeW91IGNhbiBmb3JjZSBhbiB1cGRhdGUgYnkKKwlzZXR0aW5nIGFuIG9wdGlvbiB3aXRob3V0IGNoYW5naW5nIGl0cyB2YWx1ZS4gIEV4YW1wbGU6ID4KKwkJOmxldCAmcm8gPSAmcm8KKworPAlBIHJlc3VsdCBvZiBhbGwgZGlnaXRzIGlzIHJlZ2FyZGVkIGEgbnVtYmVyIGZvciBkaXNwbGF5IHB1cnBvc2VzLgorCU90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIHRha2VuIGFzIGZsYWcgdGV4dCBhbmQgYXBwbGllZCB0byB0aGUgcnVsZXMKKwlkZXNjcmliZWQgYWJvdmUuCisKKwlXYXRjaCBvdXQgZm9yIGVycm9ycyBpbiBleHByZXNzaW9ucy4gIFRoZXkgbWF5IHJlbmRlciBWaW0gdW51c2FibGUgIQorCUlmIHlvdSBhcmUgc3R1Y2ssIGhvbGQgZG93biAnOicgb3IgJ1EnIHRvIGdldCBhIHByb21wdCwgdGhlbiBxdWl0IGFuZAorCWVkaXQgeW91ciAudmltcmMgb3Igd2hhdGV2ZXIgd2l0aCAidmltIC11IE5PTkUiIHRvIGdldCBpdCByaWdodC4KKworCUV4YW1wbGVzOgorCUVtdWxhdGUgc3RhbmRhcmQgc3RhdHVzIGxpbmUgd2l0aCAncnVsZXInIHNldCA+CisJICA6c2V0IHN0YXR1c2xpbmU9JTwlZlwgJWglbSVyJT0lLTE0LiglbCwlYyVWJSlcICVQCis8CVNpbWlsYXIsIGJ1dCBhZGQgQVNDSUkgdmFsdWUgb2YgY2hhciB1bmRlciB0aGUgY3Vyc29yIChsaWtlICJnYSIpID4KKwkgIDpzZXQgc3RhdHVzbGluZT0lPCVmJWglbSVyJT0lYlwgMHglQlwgXCAlbCwlYyVWXCAlUAorPAlEaXNwbGF5IGJ5dGUgY291bnQgYW5kIGJ5dGUgdmFsdWUsIG1vZGlmaWVkIGZsYWcgaW4gcmVkLiA+CisJICA6c2V0IHN0YXR1c2xpbmU9JTwlZiU9XCBbJTEqJU0lKiVuJVIlSF1cICUtMTkoJTNsLCUwMmMlMDNWJSklTyclMDJiJworCSAgOmhpIFVzZXIxIHRlcm09aW52ZXJzZSxib2xkIGN0ZXJtPWludmVyc2UsYm9sZCBjdGVybWZnPXJlZAorPAlEaXNwbGF5IGEgLEdaIGZsYWcgaWYgYSBjb21wcmVzc2VkIGZpbGUgaXMgbG9hZGVkID4KKwkgIDpzZXQgc3RhdHVzbGluZT0uLi4lciV7VmFyRXhpc3RzKCdiOmd6ZmxhZycsJ1wgW0daXScpfSVoLi4uCis8CUluIHRoZSB8OmF1dG9jbWR8J3M6ID4KKwkgIDpsZXQgYjpnemZsYWcgPSAxCis8CUFuZDogPgorCSAgOnVubGV0IGI6Z3pmbGFnCis8CUFuZCBkZWZpbmUgdGhpcyBmdW5jdGlvbjogPgorCSAgOmZ1bmN0aW9uIFZhckV4aXN0cyh2YXIsIHZhbCkKKwkgIDogICAgaWYgZXhpc3RzKGE6dmFyKSB8IHJldHVybiBhOnZhbCB8IGVsc2UgfCByZXR1cm4gJycgfCBlbmRpZgorCSAgOmVuZGZ1bmN0aW9uCis8CisJCQkJCQkqJ3N1ZmZpeGVzJyogKidzdScqCisnc3VmZml4ZXMnICdzdScJCXN0cmluZwkoZGVmYXVsdCAiLmJhayx+LC5vLC5oLC5pbmZvLC5zd3AsLm9iaiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJRmlsZXMgd2l0aCB0aGVzZSBzdWZmaXhlcyBnZXQgYSBsb3dlciBwcmlvcml0eSB3aGVuIG11bHRpcGxlIGZpbGVzCisJbWF0Y2ggYSB3aWxkY2FyZC4gIFNlZSB8c3VmZml4ZXN8LiAgQ29tbWFzIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIHRoZQorCXN1ZmZpeGVzLiAgU3BhY2VzIGFmdGVyIHRoZSBjb21tYSBhcmUgaWdub3JlZC4JQSBkb3QgaXMgYWxzbyBzZWVuIGFzCisJdGhlIHN0YXJ0IG9mIGEgc3VmZml4LglUbyBhdm9pZCBhIGRvdCBvciBjb21tYSBiZWluZyByZWNvZ25pemVkIGFzIGEKKwlzZXBhcmF0b3IsIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaCAoc2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dAorCWluY2x1ZGluZyBzcGFjZXMgYW5kIGJhY2tzbGFzaGVzKS4KKwlTZWUgJ3dpbGRpZ25vcmUnIGZvciBjb21wbGV0ZWx5IGlnbm9yaW5nIGZpbGVzLgorCVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCXN1ZmZpeGVzIGZyb20gdGhlIGxpc3QuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyB3aGVuIGEgZnV0dXJlIHZlcnNpb24KKwl1c2VzIGFub3RoZXIgZGVmYXVsdC4KKworCQkJCQkJKidzdWZmaXhlc2FkZCcqIConc3VhJyoKKydzdWZmaXhlc2FkZCcgJ3N1YScJc3RyaW5nCShkZWZhdWx0ICIiKQorCQkJbG9jYWwgdG8gYnVmZmVyCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZQorCQkJfCtmaWxlX2luX3BhdGh8IGZlYXR1cmV9CisJQ29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc3VmZml4ZXMsIHdoaWNoIGFyZSB1c2VkIHdoZW4gc2VhcmNoaW5nIGZvciBhCisJZmlsZSBmb3IgdGhlICJnZiIsICJbSSIsIGV0Yy4gY29tbWFuZHMuICBFeGFtcGxlOiA+CisJCTpzZXQgc3VmZml4ZXNhZGQ9LmphdmEKKzwKKwkJCQkqJ3N3YXBmaWxlJyogKidzd2YnKiAqJ25vc3dhcGZpbGUnKiAqJ25vc3dmJyoKKydzd2FwZmlsZScgJ3N3ZicJYm9vbGVhbiAoZGVmYXVsdCBvbikKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlVc2UgYSBzd2FwZmlsZSBmb3IgdGhlIGJ1ZmZlci4JVGhpcyBvcHRpb24gY2FuIGJlIHJlc2V0IHdoZW4gYQorCXN3YXBmaWxlIGlzIG5vdCB3YW50ZWQgZm9yIGEgc3BlY2lmaWMgYnVmZmVyLiAgRm9yIGV4YW1wbGUsIHdpdGgKKwljb25maWRlbnRpYWwgaW5mb3JtYXRpb24gdGhhdCBldmVuIHJvb3QgbXVzdCBub3QgYmUgYWJsZSB0byBhY2Nlc3MuCisJQ2FyZWZ1bDogQWxsIHRleHQgd2lsbCBiZSBpbiBtZW1vcnk6CisJCS0gRG9uJ3QgdXNlIHRoaXMgZm9yIGJpZyBmaWxlcy4KKwkJLSBSZWNvdmVyeSB3aWxsIGJlIGltcG9zc2libGUhCisJQSBzd2FwZmlsZSB3aWxsIG9ubHkgYmUgcHJlc2VudCB3aGVuIHwndXBkYXRlY291bnQnfCBpcyBub24temVybyBhbmQKKwknc3dhcGZpbGUnIGlzIHNldC4KKwlXaGVuICdzd2FwZmlsZScgaXMgcmVzZXQsIHRoZSBzd2FwIGZpbGUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciBpcworCWltbWVkaWF0ZWx5IGRlbGV0ZWQuICBXaGVuICdzd2FwZmlsZScgaXMgc2V0LCBhbmQgJ3VwZGF0ZWNvdW50JyBpcworCW5vbi16ZXJvLCBhIHN3YXAgZmlsZSBpcyBpbW1lZGlhdGVseSBjcmVhdGVkLgorCUFsc28gc2VlIHxzd2FwLWZpbGV8IGFuZCB8J3N3YXBzeW5jJ3wuCisKKwlUaGlzIG9wdGlvbiBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggJ2J1ZmhpZGRlbicgYW5kICdidWZ0eXBlJyB0bworCXNwZWNpZnkgc3BlY2lhbCBraW5kcyBvZiBidWZmZXJzLiAgIFNlZSB8c3BlY2lhbC1idWZmZXJzfC4KKworCQkJCQkJKidzd2Fwc3luYycqIConc3dzJyoKKydzd2Fwc3luYycgJ3N3cycJc3RyaW5nCShkZWZhdWx0ICJmc3luYyIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgZW1wdHkgYSBzd2FwIGZpbGUgaXMgc3luY2VkIHRvIGRpc2sgYWZ0ZXIKKwl3cml0aW5nIHRvIGl0LglUaGlzIHRha2VzIHNvbWUgdGltZSwgZXNwZWNpYWxseSBvbiBidXN5IHVuaXggc3lzdGVtcy4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIGVtcHR5IHBhcnRzIG9mIHRoZSBzd2FwIGZpbGUgbWF5IGJlIGluIG1lbW9yeSBhbmQKKwlub3Qgd3JpdHRlbiB0byBkaXNrLiAgV2hlbiB0aGUgc3lzdGVtIGNyYXNoZXMgeW91IG1heSBsb3NlIG1vcmUgd29yay4KKwlPbiBVbml4IHRoZSBzeXN0ZW0gZG9lcyBhIHN5bmMgbm93IGFuZCB0aGVuIHdpdGhvdXQgVmltIGFza2luZyBmb3IgaXQsCisJc28gdGhlIGRpc2FkdmFudGFnZSBvZiBzZXR0aW5nIHRoaXMgb3B0aW9uIG9mZiBpcyBzbWFsbC4gIE9uIHNvbWUKKwlzeXN0ZW1zIHRoZSBzd2FwIGZpbGUgd2lsbCBub3QgYmUgd3JpdHRlbiBhdCBhbGwuICBGb3IgYSB1bml4IHN5c3RlbQorCXNldHRpbmcgaXQgdG8gInN5bmMiIHdpbGwgdXNlIHRoZSBzeW5jKCkgY2FsbCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisJZnN5bmMoKSwgd2hpY2ggbWF5IHdvcmsgYmV0dGVyIG9uIHNvbWUgc3lzdGVtcy4KKworCQkJCQkJKidzd2l0Y2hidWYnKiAqJ3N3YicqCisnc3dpdGNoYnVmJyAnc3diJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gY29udHJvbHMgdGhlIGJlaGF2aW9yIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gYnVmZmVycy4KKwlQb3NzaWJsZSB2YWx1ZXMgKGNvbW1hIHNlcGFyYXRlZCBsaXN0KToKKwkgICB1c2VvcGVuCUlmIGluY2x1ZGVkLCBqdW1wIHRvIHRoZSBmaXJzdCBvcGVuIHdpbmRvdyB0aGF0CisJCQljb250YWlucyB0aGUgc3BlY2lmaWVkIGJ1ZmZlciAoaWYgdGhlcmUgaXMgb25lKS4KKwkJCU90aGVyd2lzZTogRG8gbm90IGV4YW1pbmUgb3RoZXIgd2luZG93cy4KKwkJCVRoaXMgc2V0dGluZyBpcyBjaGVja2VkIHdpdGggfHF1aWNrZml4fCBjb21tYW5kcywgd2hlbgorCQkJanVtcGluZyB0byBlcnJvcnMgKCI6Y2MiLCAiOmNuIiwgImNwIiwgZXRjLikuICBJdCBpcworCQkJYWxzbyB1c2VkIGluIGFsbCBidWZmZXIgcmVsYXRlZCBzcGxpdCBjb21tYW5kcywgZm9yCisJCQlleGFtcGxlICI6c2J1ZmZlciIsICI6c2JuZXh0Iiwgb3IgIjpzYnJld2luZCIuCisJICAgc3BsaXQJSWYgaW5jbHVkZWQsIHNwbGl0IHRoZSBjdXJyZW50IHdpbmRvdyBiZWZvcmUgbG9hZGluZworCQkJYSBidWZmZXIuIE90aGVyd2lzZTogZG8gbm90IHNwbGl0LCB1c2UgY3VycmVudCB3aW5kb3cuCisJCQlTdXBwb3J0ZWQgaW4gfHF1aWNrZml4fCBjb21tYW5kcyB0aGF0IGRpc3BsYXkgZXJyb3JzLgorCisJCQkJCQkqJ3N5bnRheCcqIConc3luJyoKKydzeW50YXgnICdzeW4nCQlzdHJpbmcJKGRlZmF1bHQgZW1wdHkpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrc3ludGF4fAorCQkJZmVhdHVyZX0KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHN5bnRheCB3aXRoIHRoaXMgbmFtZSBpcyBsb2FkZWQsIHVubGVzcworCXN5bnRheCBoaWdobGlnaHRpbmcgaGFzIGJlZW4gc3dpdGNoZWQgb2ZmIHdpdGggIjpzeW50YXggb2ZmIi4KKwlPdGhlcndpc2UgdGhpcyBvcHRpb24gZG9lcyBub3QgYWx3YXlzIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3ludGF4ICh0aGUKKwliOmN1cnJlbnRfc3ludGF4IHZhcmlhYmxlIGRvZXMpLgorCVRoaXMgb3B0aW9uIGlzIG1vc3QgdXNlZnVsIGluIGEgbW9kZWxpbmUsIGZvciBhIGZpbGUgd2hpY2ggc3ludGF4IGlzCisJbm90IGF1dG9tYXRpY2FsbHkgcmVjb2duaXplZC4gIEV4YW1wbGUsIGZvciBpbiBhbiBJREwgZmlsZTogPgorCQkvKiB2aW06IHNldCBzeW50YXg9aWRsIDogKi8KKzwJVG8gc3dpdGNoIG9mZiBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciB0aGUgY3VycmVudCBmaWxlLCB1c2U6ID4KKwkJOnNldCBzeW50YXg9T0ZGCis8CVRvIHN3aXRjaCBzeW50YXggaGlnaGxpZ2h0aW5nIG9uIGFjY29yZGluZyB0byB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKKwknZmlsZXR5cGUnIG9wdGlvbjogPgorCQk6c2V0IHN5bnRheD1PTgorPAlXaGF0IGFjdHVhbGx5IGhhcHBlbnMgd2hlbiBzZXR0aW5nIHRoZSAnc3ludGF4JyBvcHRpb24gaXMgdGhhdCB0aGUKKwlTeW50YXggYXV0b2NvbW1hbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHdpdGggdGhlIHZhbHVlIGFzIGFyZ3VtZW50LgorCVRoaXMgb3B0aW9uIGlzIG5vdCBjb3BpZWQgdG8gYW5vdGhlciBidWZmZXIsIGluZGVwZW5kZW50IG9mIHRoZSAncycgb3IKKwknUycgZmxhZyBpbiAnY3BvcHRpb25zJy4KKworCQkJCQkqJ3RhYnN0b3AnKiAqJ3RzJyoKKyd0YWJzdG9wJyAndHMnCQludW1iZXIJKGRlZmF1bHQgOCkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCU51bWJlciBvZiBzcGFjZXMgdGhhdCBhIDxUYWI+IGluIHRoZSBmaWxlIGNvdW50cyBmb3IuICBBbHNvIHNlZQorCXw6cmV0YWJ8IGNvbW1hbmQsIGFuZCAnc29mdHRhYnN0b3AnIG9wdGlvbi4KKworCU5vdGU6IFNldHRpbmcgJ3RhYnN0b3AnIHRvIGFueSBvdGhlciB2YWx1ZSB0aGFuIDggY2FuIG1ha2UgeW91ciBmaWxlCisJYXBwZWFyIHdyb25nIGluIG1hbnkgcGxhY2VzIChlLmcuLCB3aGVuIHByaW50aW5nIGl0KS4KKworCVRoZXJlIGFyZSBmb3VyIG1haW4gd2F5cyB0byB1c2UgdGFicyBpbiBWaW06CisJMS4gQWx3YXlzIGtlZXAgJ3RhYnN0b3AnIGF0IDgsIHNldCAnc29mdHRhYnN0b3AnIGFuZCAnc2hpZnR3aWR0aCcgdG8gNAorCSAgIChvciAzIG9yIHdoYXRldmVyIHlvdSBwcmVmZXIpIGFuZCB1c2UgJ25vZXhwYW5kdGFiJy4gIFRoZW4gVmltCisJICAgd2lsbCB1c2UgYSBtaXggb2YgdGFicyBhbmQgc3BhY2VzLCBidXQgdHlwaW5nIFRhYiBhbmQgQlMgd2lsbAorCSAgIGJlaGF2ZSBsaWtlIGEgdGFiIGFwcGVhcnMgZXZlcnkgNCAob3IgMykgY2hhcmFjdGVycy4KKwkyLiBTZXQgJ3RhYnN0b3AnIGFuZCAnc2hpZnR3aWR0aCcgdG8gd2hhdGV2ZXIgeW91IHByZWZlciBhbmQgdXNlCisJICAgJ2V4cGFuZHRhYicuICBUaGlzIHdheSB5b3Ugd2lsbCBhbHdheXMgaW5zZXJ0IHNwYWNlcy4gIFRoZQorCSAgIGZvcm1hdHRpbmcgd2lsbCBuZXZlciBiZSBtZXNzZWQgdXAgd2hlbiAndGFic3RvcCcgaXMgY2hhbmdlZC4KKwkzLiBTZXQgJ3RhYnN0b3AnIGFuZCAnc2hpZnR3aWR0aCcgdG8gd2hhdGV2ZXIgeW91IHByZWZlciBhbmQgdXNlIGEKKwkgICB8bW9kZWxpbmV8IHRvIHNldCB0aGVzZSB2YWx1ZXMgd2hlbiBlZGl0aW5nIHRoZSBmaWxlIGFnYWluLglPbmx5CisJICAgd29ya3Mgd2hlbiB1c2luZyBWaW0gdG8gZWRpdCB0aGUgZmlsZS4KKwk0LiBBbHdheXMgc2V0ICd0YWJzdG9wJyBhbmQgJ3NoaWZ0d2lkdGgnIHRvIHRoZSBzYW1lIHZhbHVlLCBhbmQKKwkgICAnbm9leHBhbmR0YWInLiAgVGhpcyBzaG91bGQgdGhlbiB3b3JrIChmb3IgaW5pdGlhbCBpbmRlbnRzIG9ubHkpCisJICAgZm9yIGFueSB0YWJzdG9wIHNldHRpbmcgdGhhdCBwZW9wbGUgdXNlLiAgSXQgbWlnaHQgYmUgbmljZSB0byBoYXZlCisJICAgdGFicyBhZnRlciB0aGUgZmlyc3Qgbm9uLWJsYW5rIGluc2VydGVkIGFzIHNwYWNlcyBpZiB5b3UgZG8gdGhpcworCSAgIHRob3VnaC4gIE90aGVyd2lzZSBhbGlnbmVkIGNvbW1lbnRzIHdpbGwgYmUgd3Jvbmcgd2hlbiAndGFic3RvcCcgaXMKKwkgICBjaGFuZ2VkLgorCisJCQkqJ3RhZ2JzZWFyY2gnKiAqJ3RicycqIConbm90YWdic2VhcmNoJyogKidub3RicycqCisndGFnYnNlYXJjaCcgJ3RicycJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlXaGVuIHNlYXJjaGluZyBmb3IgYSB0YWcgKGUuZy4sIGZvciB0aGUgfDp0YXwgY29tbWFuZCksIFZpbSBjYW4gZWl0aGVyCisJdXNlIGEgYmluYXJ5IHNlYXJjaCBvciBhIGxpbmVhciBzZWFyY2ggaW4gYSB0YWdzIGZpbGUuCUJpbmFyeQorCXNlYXJjaGluZyBtYWtlcyBzZWFyY2hpbmcgZm9yIGEgdGFnIGEgTE9UIGZhc3RlciwgYnV0IGEgbGluZWFyIHNlYXJjaAorCXdpbGwgZmluZCBtb3JlIHRhZ3MgaWYgdGhlIHRhZ3MgZmlsZSB3YXNuJ3QgcHJvcGVybHkgc29ydGVkLgorCVZpbSBub3JtYWxseSBhc3N1bWVzIHRoYXQgeW91ciB0YWdzIGZpbGVzIGFyZSBzb3J0ZWQsIG9yIGluZGljYXRlIHRoYXQKKwl0aGV5IGFyZSBub3Qgc29ydGVkLiAgT25seSB3aGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlIGRvZXMgdGhlCisJJ3RhZ2JzZWFyY2gnIG9wdGlvbiBuZWVkIHRvIGJlIHN3aXRjaGVkIG9mZi4KKworCVdoZW4gJ3RhZ2JzZWFyY2gnIGlzIG9uLCBiaW5hcnkgc2VhcmNoaW5nIGlzIGZpcnN0IHVzZWQgaW4gdGhlIHRhZ3MKKwlmaWxlcy4JSW4gY2VydGFpbiBzaXR1YXRpb25zLCBWaW0gd2lsbCBkbyBhIGxpbmVhciBzZWFyY2ggaW5zdGVhZCBmb3IKKwljZXJ0YWluIGZpbGVzLCBvciByZXRyeSBhbGwgZmlsZXMgd2l0aCBhIGxpbmVhciBzZWFyY2guICBXaGVuCisJJ3RhZ2JzZWFyY2gnIGlzIG9mZiwgb25seSBhIGxpbmVhciBzZWFyY2ggaXMgZG9uZS4KKworCUxpbmVhciBzZWFyY2hpbmcgaXMgZG9uZSBhbnl3YXksIGZvciBvbmUgZmlsZSwgd2hlbiBWaW0gZmluZHMgYSBsaW5lCisJYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIGluZGljYXRpbmcgdGhhdCBpdCdzIG5vdCBzb3J0ZWQ6ID4KKyAgICFfVEFHX0ZJTEVfU09SVEVECTAJL3NvbWUgY29tbWFuZC8KKzwJW1RoZSB3aGl0ZXNwYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlICcwJyBtdXN0IGJlIGEgc2luZ2xlIDxUYWI+XQorCisJV2hlbiBhIGJpbmFyeSBzZWFyY2ggd2FzIGRvbmUgYW5kIG5vIG1hdGNoIHdhcyBmb3VuZCBpbiBhbnkgb2YgdGhlCisJZmlsZXMgbGlzdGVkIGluICd0YWdzJywgYW5kICdpZ25vcmVjYXNlJyBpcyBzZXQgb3IgYSBwYXR0ZXJuIGlzIHVzZWQKKwlpbnN0ZWFkIG9mIGEgbm9ybWFsIHRhZyBuYW1lLCBhIHJldHJ5IGlzIGRvbmUgd2l0aCBhIGxpbmVhciBzZWFyY2guCisJVGFncyBpbiB1bnNvcnRlZCB0YWdzIGZpbGVzLCBhbmQgbWF0Y2hlcyB3aXRoIGRpZmZlcmVudCBjYXNlIHdpbGwgb25seQorCWJlIGZvdW5kIGluIHRoZSByZXRyeS4KKworCUlmIGEgdGFnIGZpbGUgaW5kaWNhdGVzIHRoYXQgaXMgaXMgY2FzZS1mb2xkIHNvcnRlZCwgdGhlIHNlY29uZCwKKwlsaW5lYXIgc2VhcmNoIGNhbiBiZSBhdm9pZGVkIGZvciB0aGUgJ2lnbm9yZWNhc2UnIGNhc2UuICBVc2UgYSB2YWx1ZQorCW9mICcyJyBpbiB0aGUgIiFfVEFHX0ZJTEVfU09SVEVEIiBsaW5lIGZvciB0aGlzLiAgQSB0YWcgZmlsZSBjYW4gYmUKKwljYXNlLWZvbGQgc29ydGVkIHdpdGggdGhlIC1mIHN3aXRjaCB0byAic29ydCIgaW4gbW9zdCB1bmljZXMsIGFzIGluCisJdGhlIGNvbW1hbmQ6ICJzb3J0IC1mIC1vIHRhZ3MgdGFncyIuICBGb3IgIkV4dWJlcmFudCBjdGFncyIgdmVyc2lvbgorCTUuMyBvciBoaWdoZXIgdGhlIC1mIG9yIC0tZm9sZC1jYXNlLXNvcnQgc3dpdGNoIGNhbiBiZSB1c2VkIGZvciB0aGlzCisJYXMgd2VsbC4gIE5vdGUgdGhhdCBjYXNlIG11c3QgYmUgZm9sZGVkIHRvIHVwcGVyY2FzZSBmb3IgdGhpcyB0byB3b3JrLgorCisJV2hlbiAndGFnYnNlYXJjaCcgaXMgb2ZmLCB0YWdzIHNlYXJjaGluZyBpcyBzbG93ZXIgd2hlbiBhIGZ1bGwgbWF0Y2gKKwlleGlzdHMsIGJ1dCBmYXN0ZXIgd2hlbiBubyBmdWxsIG1hdGNoIGV4aXN0cy4gIFRhZ3MgaW4gdW5zb3J0ZWQgdGFncworCWZpbGVzIG1heSBvbmx5IGJlIGZvdW5kIHdpdGggJ3RhZ2JzZWFyY2gnIG9mZi4KKwlXaGVuIHRoZSB0YWdzIGZpbGUgaXMgbm90IHNvcnRlZCwgb3Igc29ydGVkIGluIGEgd3Jvbmcgd2F5IChub3Qgb24KKwlBU0NJSSBieXRlIHZhbHVlKSwgJ3RhZ2JzZWFyY2gnIHNob3VsZCBiZSBvZmYsIG9yIHRoZSBsaW5lIGdpdmVuIGFib3ZlCisJbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgdGFncyBmaWxlLgorCVRoaXMgb3B0aW9uIGRvZXNuJ3QgYWZmZWN0IGNvbW1hbmRzIHRoYXQgZmluZCBhbGwgbWF0Y2hpbmcgdGFncyAoZS5nLiwKKwljb21tYW5kLWxpbmUgY29tcGxldGlvbiBhbmQgIjpoZWxwIikuCisJe1ZpOiBhbHdheXMgdXNlcyBiaW5hcnkgc2VhcmNoIGluIHNvbWUgdmVyc2lvbnN9CisKKwkJCQkJCSondGFnbGVuZ3RoJyogKid0bCcqCisndGFnbGVuZ3RoJyAndGwnCW51bWJlcgkoZGVmYXVsdCAwKQorCQkJZ2xvYmFsCisJSWYgbm9uLXplcm8sIHRhZ3MgYXJlIHNpZ25pZmljYW50IHVwIHRvIHRoaXMgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCisKKwkJCSondGFncmVsYXRpdmUnKiAqJ3RyJyogKidub3RhZ3JlbGF0aXZlJyogKidub3RyJyoKKyd0YWdyZWxhdGl2ZScgJ3RyJwlib29sZWFuCShWaW0gZGVmYXVsdDogb24sIFZpIGRlZmF1bHQ6IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlJZiBvbiBhbmQgdXNpbmcgYSB0YWcgZmlsZSBpbiBhbm90aGVyIGRpcmVjdG9yeSwgZmlsZSBuYW1lcyBpbiB0aGF0CisJdGFnIGZpbGUgYXJlIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHRhZyBmaWxlIGlzLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ3RhZ3MnKiAqJ3RhZycqICpFNDMzKgorJ3RhZ3MnICd0YWcnCQlzdHJpbmcJKGRlZmF1bHQgIi4vdGFncyx0YWdzIiwgd2hlbiBjb21waWxlZCB3aXRoCisJCQkJfCtlbWFjc190YWdzfDogIi4vdGFncywuL1RBR1MsdGFncyxUQUdTIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwlGaWxlbmFtZXMgZm9yIHRoZSB0YWcgY29tbWFuZCwgc2VwYXJhdGVkIGJ5IHNwYWNlcyBvciBjb21tYXMuICBUbworCWluY2x1ZGUgYSBzcGFjZSBvciBjb21tYSBpbiBhIGZpbGUgbmFtZSwgcHJlY2VkZSBpdCB3aXRoIGEgYmFja3NsYXNoCisJKHNlZSB8b3B0aW9uLWJhY2tzbGFzaHwgYWJvdXQgaW5jbHVkaW5nIHNwYWNlcyBhbmQgYmFja3NsYXNoZXMpLgorCVdoZW4gYSBmaWxlIG5hbWUgc3RhcnRzIHdpdGggIi4vIiwgdGhlICcuJyBpcyByZXBsYWNlZCB3aXRoIHRoZSBwYXRoCisJb2YgdGhlIGN1cnJlbnQgZmlsZS4gIEJ1dCBvbmx5IHdoZW4gdGhlICdkJyBmbGFnIGlzIG5vdCBpbmNsdWRlZCBpbgorCSdjcG9wdGlvbnMnLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCB8OnNldF9lbnZ8LiAgQWxzbyBzZWUKKwl8dGFncy1vcHRpb258LgorCSIqIiwgIioqIiBhbmQgb3RoZXIgd2lsZGNhcmRzIGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgdGFncyBmaWxlcyBpbgorCWEgZGlyZWN0b3J5IHRyZWUuICBTZWUgfGZpbGUtc2VhcmNoaW5nfC4gIHtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQKKwl3aXRob3V0IHRoZSB8K3BhdGhfZXh0cmF8IGZlYXR1cmV9CisJSWYgVmltIHdhcyBjb21waWxlZCB3aXRoIHRoZSB8K2VtYWNzX3RhZ3N8IGZlYXR1cmUsIEVtYWNzLXN0eWxlIHRhZworCWZpbGVzIGFyZSBhbHNvIHN1cHBvcnRlZC4gIFRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgcmVjb2duaXplZC4gIFRoZQorCWRlZmF1bHQgdmFsdWUgYmVjb21lcyAiLi90YWdzLC4vVEFHUyx0YWdzLFRBR1MiLCB1bmxlc3MgY2FzZQorCWRpZmZlcmVuY2VzIGFyZSBpZ25vcmVkIChNUy1XaW5kb3dzKS4gIHxlbWFjcy10YWdzfAorCVRoZSB1c2Ugb2YgfDpzZXQrPXwgYW5kIHw6c2V0LT18IGlzIHByZWZlcnJlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZworCWZpbGUgbmFtZXMgZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LgorCXtWaTogZGVmYXVsdCBpcyAidGFncyAvdXNyL2xpYi90YWdzIn0KKworCQkJCSondGFnc3RhY2snKiAqJ3Rnc3QnKiAqJ25vdGFnc3RhY2snKiAqJ25vdGdzdCcqCisndGFnc3RhY2snICd0Z3N0Jwlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIGFsbCB2ZXJzaW9ucyBvZiBWaX0KKwlXaGVuIG9uLCB0aGUgfHRhZ3N0YWNrfCBpcyB1c2VkIG5vcm1hbGx5LiAgV2hlbiBvZmYsIGEgIjp0YWciIG9yCisJIjp0c2VsZWN0IiBjb21tYW5kIHdpdGggYW4gYXJndW1lbnQgd2lsbCBub3QgcHVzaCB0aGUgdGFnIG9udG8gdGhlCisJdGFnc3RhY2suICBBIGZvbGxvd2luZyAiOnRhZyIgd2l0aG91dCBhbiBhcmd1bWVudCwgYSAiOnBvcCIgY29tbWFuZCBvcgorCWFueSBvdGhlciBjb21tYW5kIHRoYXQgdXNlcyB0aGUgdGFnc3RhY2sgd2lsbCB1c2UgdGhlIHVubW9kaWZpZWQKKwl0YWdzdGFjaywgYnV0IGRvZXMgY2hhbmdlIHRoZSBwb2ludGVyIHRvIHRoZSBhY3RpdmUgZW50cnkuCisJUmVzZXR0aW5nIHRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIGEgIjp0YWciIGNvbW1hbmQgaW4gYQorCW1hcHBpbmcgd2hpY2ggc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIHRhZ3N0YWNrLgorCisJCQkJCQkqJ3Rlcm0nKiAqRTUyOSogKkU1MzAqICpFNTMxKgorJ3Rlcm0nCQkJc3RyaW5nCShkZWZhdWx0IGlzICRURVJNLCBpZiB0aGF0IGZhaWxzOgorCQkJCSAgICAgIGluIHRoZSBHVUk6ICJidWlsdGluX2d1aSIKKwkJCQkJb24gQW1pZ2E6ICJhbWlnYSIKKwkJCQkJIG9uIEJlT1M6ICJiZW9zLWFuc2kiCisJCQkJCSAgb24gTWFjOiAibWFjLWFuc2kiCisJCQkJCSBvbiBNaU5UOiAidnQ1MiIKKwkJCQkgICAgICAgb24gTVMtRE9TOiAicGN0ZXJtIgorCQkJCQkgb24gT1MvMjogIm9zMmFuc2kiCisJCQkJCSBvbiBVbml4OiAiYW5zaSIKKwkJCQkJICBvbiBWTVM6ICJhbnNpIgorCQkJCSAgICAgICBvbiBXaW4gMzI6ICJ3aW4zMiIpCisJCQlnbG9iYWwKKwlOYW1lIG9mIHRoZSB0ZXJtaW5hbC4gIFVzZWQgZm9yIGNob29zaW5nIHRoZSB0ZXJtaW5hbCBjb250cm9sCisJY2hhcmFjdGVycy4gIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgfDpzZXRfZW52fC4KKwlGb3IgZXhhbXBsZTogPgorCQk6c2V0IHRlcm09JFRFUk0KKzwJU2VlIHx0ZXJtY2FwfC4KKworCQkJCQkJKid0ZXJtYmlkaScqICondGJpZGknKgorCQkJCQkJKidub3Rlcm1iaWRpJyogKidub3RiaWRpJyoKKyd0ZXJtYmlkaScgJ3RiaWRpJwlib29sZWFuIChkZWZhdWx0IG9mZiwgb24gZm9yICJtbHRlcm0iKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCthcmFiaWN8CisJCQlmZWF0dXJlfQorCVRoZSB0ZXJtaW5hbCBpcyBpbiBjaGFyZ2Ugb2YgQmktZGlyZWN0aW9uYWxpdHkgb2YgdGV4dCAoYXMgc3BlY2lmaWVkCisJYnkgVW5pY29kZSkuICBUaGUgdGVybWluYWwgaXMgYWxzbyBleHBlY3RlZCB0byBkbyB0aGUgcmVxdWlyZWQgc2hhcGluZworCXRoYXQgc29tZSBsYW5ndWFnZXMgKHN1Y2ggYXMgQXJhYmljKSByZXF1aXJlLgorCVNldHRpbmcgdGhpcyBvcHRpb24gaW1wbGllcyB0aGF0ICdyaWdodGxlZnQnIHdpbGwgbm90IGJlIHNldCB3aGVuCisJJ2FyYWJpYycgaXMgc2V0IGFuZCB0aGUgdmFsdWUgb2YgJ2FyYWJpY3NoYXBlJyB3aWxsIGJlIGlnbm9yZWQuCisJTm90ZSB0aGF0IHNldHRpbmcgJ3Rlcm1iaWRpJyBoYXMgdGhlIGltbWVkaWF0ZSBlZmZlY3QgdGhhdAorCSdhcmFiaWNzaGFwZScgaXMgaWdub3JlZCwgYnV0ICdyaWdodGxlZnQnIGlzbid0IGNoYW5nZWQgYXV0b21hdGljYWxseS4KKwlUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuIHRoZSBHVUkgaXMgc3RhcnRlZC4KKwlGb3IgZnVydGhlciBkZXRhaWxzIHNlZSB8YXJhYmljLnR4dHwuCisKKwkJCQkJKid0ZXJtZW5jb2RpbmcnKiAqJ3RlbmMnKgorJ3Rlcm1lbmNvZGluZycgJ3RlbmMnCXN0cmluZwkoZGVmYXVsdCAiIjsgd2l0aCBHVEsrIDIgR1VJOiAidXRmLTgiOyB3aXRoCisJCQkJCQkgICAgTWFjaW50b3NoIEdVSTogIm1hY3JvbWFuIikKKwkJCWdsb2JhbAorCQkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCttdWx0aV9ieXRlfAorCQkJZmVhdHVyZX0KKwkJCXtub3QgaW4gVml9CisJRW5jb2RpbmcgdXNlZCBmb3IgdGhlIHRlcm1pbmFsLiAgVGhpcyBzcGVjaWZpZXMgd2hhdCBjaGFyYWN0ZXIKKwllbmNvZGluZyB0aGUga2V5Ym9hcmQgcHJvZHVjZXMgYW5kIHRoZSBkaXNwbGF5IHdpbGwgdW5kZXJzdGFuZC4gIEZvcgorCXRoZSBHVUkgaXQgb25seSBhcHBsaWVzIHRvIHRoZSBrZXlib2FyZCAoJ2VuY29kaW5nJyBpcyB1c2VkIGZvciB0aGUKKwlkaXNwbGF5KS4KKwlJbiB0aGUgV2luMzIgY29uc29sZSB2ZXJzaW9uIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjb25zb2xlIGNvZGVwYWdlCisJd2hlbiBpdCBkaWZmZXJzIGZyb20gdGhlIEFOU0kgY29kZXBhZ2UuCisJCQkJCQkJCSpFNjE3KgorCU5vdGU6IFRoaXMgZG9lcyBub3QgYXBwbHkgdG8gdGhlIEdUSysgMiBHVUkuICBBZnRlciB0aGUgR1VJIGhhcyBiZWVuCisJc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLCAndGVybWVuY29kaW5nJyBpcyBmb3JjaWJseSBzZXQgdG8gInV0Zi04Ii4KKwlBbnkgYXR0ZW1wdHMgdG8gc2V0IGEgZGlmZmVyZW50IHZhbHVlIHdpbGwgYmUgcmVqZWN0ZWQsIGFuZCBhbiBlcnJvcgorCW1lc3NhZ2UgaXMgc2hvd24uCisJRm9yIHRoZSBXaW4zMiBHVUkgJ3Rlcm1lbmNvZGluZycgaXMgbm90IHVzZWQgZm9yIHR5cGVkIGNoYXJhY3RlcnMsCisJYmVjYXVzZSB0aGUgV2luMzIgc3lzdGVtIGFsd2F5cyBwYXNzZXMgVW5pY29kZSBjaGFyYWN0ZXJzLgorCVdoZW4gZW1wdHksIHRoZSBzYW1lIGVuY29kaW5nIGlzIHVzZWQgYXMgZm9yIHRoZSAnZW5jb2RpbmcnIG9wdGlvbi4KKwlUaGlzIGlzIHRoZSBub3JtYWwgdmFsdWUuCisJTm90IGFsbCBjb21iaW5hdGlvbnMgZm9yICd0ZXJtZW5jb2RpbmcnIGFuZCAnZW5jb2RpbmcnIGFyZSB2YWxpZC4gIFNlZQorCXxlbmNvZGluZy10YWJsZXwuCisJVGhlIHZhbHVlIGZvciB0aGlzIG9wdGlvbiBtdXN0IGJlIHN1cHBvcnRlZCBieSBpbnRlcm5hbCBjb252ZXJzaW9ucyBvcgorCWljb252KCkuICBXaGVuIHRoaXMgaXMgbm90IHBvc3NpYmxlIG5vIGNvbnZlcnNpb24gd2lsbCBiZSBkb25lIGFuZCB5b3UKKwl3aWxsIHByb2JhYmx5IGV4cGVyaWVuY2UgcHJvYmxlbXMgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycy4KKwlFeGFtcGxlOiBZb3UgYXJlIHdvcmtpbmcgd2l0aCB0aGUgbG9jYWxlIHNldCB0byBldWMtanAgKEphcGFuZXNlKSBhbmQKKwl3YW50IHRvIGVkaXQgYSBVVEYtOCBmaWxlOiA+CisJCTpsZXQgJnRlcm1lbmNvZGluZyA9ICZlbmNvZGluZworCQk6c2V0IGVuY29kaW5nPXV0Zi04Cis8CVlvdSBuZWVkIHRvIGRvIHRoaXMgd2hlbiB5b3VyIHN5c3RlbSBoYXMgbm8gbG9jYWxlIHN1cHBvcnQgZm9yIFVURi04LgorCisJCQkJCQkqJ3RlcnNlJyogKidub3RlcnNlJyoKKyd0ZXJzZScJCQlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCVdoZW4gc2V0OiBBZGQgJ3MnIGZsYWcgdG8gJ3Nob3J0bWVzcycgb3B0aW9uICh0aGlzIG1ha2VzIHRoZSBtZXNzYWdlCisJZm9yIGEgc2VhcmNoIHRoYXQgaGl0cyB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBmaWxlIG5vdCBiZWluZworCWRpc3BsYXllZCkuICBXaGVuIHJlc2V0OiBSZW1vdmUgJ3MnIGZsYWcgZnJvbSAnc2hvcnRtZXNzJyBvcHRpb24uICB7VmkKKwlzaG9ydGVucyBhIGxvdCBvZiBtZXNzYWdlc30KKworCQkJCSAgICondGV4dGF1dG8nKiAqJ3RhJyogKidub3RleHRhdXRvJyogKidub3RhJyoKKyd0ZXh0YXV0bycgJ3RhJwkJYm9vbGVhbgkoVmltIGRlZmF1bHQ6IG9uLCBWaSBkZWZhdWx0OiBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gaXMgb2Jzb2xldGUuICBVc2UgJ2ZpbGVmb3JtYXRzJy4KKwlGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gJ3RleHRhdXRvJyBpcyBzZXQsICdmaWxlZm9ybWF0cycgaXMKKwlzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHN5c3RlbS4gIFdoZW4gJ3RleHRhdXRvJyBpcworCXJlc2V0LCAnZmlsZWZvcm1hdHMnIGlzIG1hZGUgZW1wdHkuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkgICAqJ3RleHRtb2RlJyogKid0eCcqIConbm90ZXh0bW9kZScqIConbm90eCcqCisndGV4dG1vZGUnICd0eCcJCWJvb2xlYW4JKE1TLURPUywgV2luMzIgYW5kIE9TLzI6IGRlZmF1bHQgb24sCisJCQkJIG90aGVyczogZGVmYXVsdCBvZmYpCisJCQlsb2NhbCB0byBidWZmZXIKKwkJCXtub3QgaW4gVml9CisJVGhpcyBvcHRpb24gaXMgb2Jzb2xldGUuICBVc2UgJ2ZpbGVmb3JtYXQnLgorCUZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hlbiAndGV4dG1vZGUnIGlzIHNldCwgJ2ZpbGVmb3JtYXQnIGlzCisJc2V0IHRvICJkb3MiLiAgV2hlbiAndGV4dG1vZGUnIGlzIHJlc2V0LCAnZmlsZWZvcm1hdCcgaXMgc2V0IHRvCisJInVuaXgiLgorCisJCQkJCQkqJ3RleHR3aWR0aCcqICondHcnKgorJ3RleHR3aWR0aCcgJ3R3JwludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWxvY2FsIHRvIGJ1ZmZlcgorCQkJe25vdCBpbiBWaX0KKwlNYXhpbXVtIHdpZHRoIG9mIHRleHQgdGhhdCBpcyBiZWluZyBpbnNlcnRlZC4gIEEgbG9uZ2VyIGxpbmUgd2lsbCBiZQorCWJyb2tlbiBhZnRlciB3aGl0ZSBzcGFjZSB0byBnZXQgdGhpcyB3aWR0aC4gIEEgemVybyB2YWx1ZSBkaXNhYmxlcworCXRoaXMuICAndGV4dHdpZHRoJyBpcyBzZXQgdG8gMCB3aGVuIHRoZSAncGFzdGUnIG9wdGlvbiBpcyBzZXQuCVdoZW4KKwkndGV4dHdpZHRoJyBpcyB6ZXJvLCAnd3JhcG1hcmdpbicgbWF5IGJlIHVzZWQuCVNlZSBhbHNvCisJJ2Zvcm1hdG9wdGlvbnMnIGFuZCB8aW5zLXRleHR3aWR0aHwuCisJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIDAgd2hlbiAnY29tcGF0aWJsZScgaXMgc2V0LgorCisJCQkJCQkqJ3RoZXNhdXJ1cycqICondHNyJyoKKyd0aGVzYXVydXMnICd0c3InCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbCBvciBsb2NhbCB0byBidWZmZXIgfGdsb2JhbC1sb2NhbHwKKwkJCXtub3QgaW4gVml9CisJTGlzdCBvZiBmaWxlIG5hbWVzLCBzZXBhcmF0ZWQgYnkgY29tbWFzLCB0aGF0IGFyZSB1c2VkIHRvIGxvb2t1cCB3b3JkcworCWZvciB0aGVzYXVydXMgY29tcGxldGlvbiBjb21tYW5kcyB8aV9DVFJMLVhfQ1RSTC1UfC4JRWFjaCBsaW5lIGluCisJdGhlIGZpbGUgc2hvdWxkIGNvbnRhaW4gd29yZHMgd2l0aCBzaW1pbGFyIG1lYW5pbmcsIHNlcGFyYXRlZCBieQorCW5vbi1rZXl3b3JkIGNoYXJhY3RlcnMgKHdoaXRlIHNwYWNlIGlzIHByZWZlcnJlZCkuICBNYXhpbXVtIGxpbmUKKwlsZW5ndGggaXMgNTEwIGJ5dGVzLgorCVRvIG9idGFpbiBhIGZpbGUgdG8gYmUgdXNlZCBoZXJlLCBjaGVjayBvdXQgdGhlIHdvcmRsaXN0IEZBUSBhdAorCWh0dHA6Ly93d3cuaHlwaGVub2xvZ2lzdC5jby51ayAuCisJVG8gaW5jbHVkZSBhIGNvbW1hIGluIGEgZmlsZSBuYW1lIHByZWNlZGUgaXQgd2l0aCBhIGJhY2tzbGFzaC4JU3BhY2VzCisJYWZ0ZXIgYSBjb21tYSBhcmUgaWdub3JlZCwgb3RoZXJ3aXNlIHNwYWNlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZpbGUKKwluYW1lLiAgU2VlIHxvcHRpb24tYmFja3NsYXNofCBhYm91dCB1c2luZyBiYWNrc2xhc2hlcy4KKwlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlkaXJlY3RvcmllcyBmcm9tIHRoZSBsaXN0LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBhIGZ1dHVyZSB2ZXJzaW9uCisJdXNlcyBhbm90aGVyIGRlZmF1bHQuCisJQmFja3RpY2tzIGNhbm5vdCBiZSB1c2VkIGluIHRoaXMgb3B0aW9uIGZvciBzZWN1cml0eSByZWFzb25zLgorCisJCQkgICAgICondGlsZGVvcCcqICondG9wJyogKidub3RpbGRlb3AnKiAqJ25vdG9wJyoKKyd0aWxkZW9wJyAndG9wJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbjogVGhlIHRpbGRlIGNvbW1hbmQgIn4iIGJlaGF2ZXMgbGlrZSBhbiBvcGVyYXRvci4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyByZXNldCB3aGVuICdjb21wYXRpYmxlJyBpcyBzZXQuCisKKwkJCQkqJ3RpbWVvdXQnKiAqJ3RvJyogKidub3RpbWVvdXQnKiAqJ25vdG8nKgorJ3RpbWVvdXQnICd0bycJCWJvb2xlYW4gKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCQkJCSondHRpbWVvdXQnKiAqJ25vdHRpbWVvdXQnKgorJ3R0aW1lb3V0JwkJYm9vbGVhbiAoZGVmYXVsdCBvZmYpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlc2UgdHdvIG9wdGlvbnMgdG9nZXRoZXIgZGV0ZXJtaW5lIHRoZSBiZWhhdmlvciB3aGVuIHBhcnQgb2YgYQorCW1hcHBlZCBrZXkgc2VxdWVuY2Ugb3Iga2V5Ym9hcmQgY29kZSBoYXMgYmVlbiByZWNlaXZlZDoKKworCSd0aW1lb3V0JyAgICAndHRpbWVvdXQnCQlhY3Rpb24JfgorCSAgIG9mZgkJb2ZmCQlkbyBub3QgdGltZSBvdXQKKwkgICBvbgkJb24gb3Igb2ZmCXRpbWUgb3V0IG9uIDptYXBwaW5ncyBhbmQga2V5IGNvZGVzCisJICAgb2ZmCQlvbgkJdGltZSBvdXQgb24ga2V5IGNvZGVzCisKKwlJZiBib3RoIG9wdGlvbnMgYXJlIG9mZiwgVmltIHdpbGwgd2FpdCB1bnRpbCBlaXRoZXIgdGhlIGNvbXBsZXRlCisJbWFwcGluZyBvciBrZXkgc2VxdWVuY2UgaGFzIGJlZW4gcmVjZWl2ZWQsIG9yIGl0IGlzIGNsZWFyIHRoYXQgdGhlcmUKKwlpcyBubyBtYXBwaW5nIG9yIGtleSBzZXF1ZW5jZSBmb3IgdGhlIHJlY2VpdmVkIGNoYXJhY3RlcnMuICBGb3IKKwlleGFtcGxlOiBpZiB5b3UgaGF2ZSBtYXBwZWQgInZsIiBhbmQgVmltIGhhcyByZWNlaXZlZCAndicsIHRoZSBuZXh0CisJY2hhcmFjdGVyIGlzIG5lZWRlZCB0byBzZWUgaWYgdGhlICd2JyBpcyBmb2xsb3dlZCBieSBhbiAnbCcuCisJV2hlbiBvbmUgb2YgdGhlIG9wdGlvbnMgaXMgb24sIFZpbSB3aWxsIHdhaXQgZm9yIGFib3V0IDEgc2Vjb25kIGZvcgorCXRoZSBuZXh0IGNoYXJhY3RlciB0byBhcnJpdmUuICBBZnRlciB0aGF0IHRoZSBhbHJlYWR5IHJlY2VpdmVkCisJY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgc2luZ2xlIGNoYXJhY3RlcnMuICBUaGUgd2FpdGluZyB0aW1lIGNhbgorCWJlIGNoYW5nZWQgd2l0aCB0aGUgJ3RpbWVvdXRsZW4nIG9wdGlvbi4KKwlPbiBzbG93IHRlcm1pbmFscyBvciB2ZXJ5IGJ1c3kgc3lzdGVtcyB0aW1pbmcgb3V0IG1heSBjYXVzZQorCW1hbGZ1bmN0aW9uaW5nIGN1cnNvciBrZXlzLiAgSWYgYm90aCBvcHRpb25zIGFyZSBvZmYsIFZpbSB3YWl0cworCWZvcmV2ZXIgYWZ0ZXIgYW4gZW50ZXJlZCA8RXNjPiBpZiB0aGVyZSBhcmUga2V5IGNvZGVzIHRoYXQgc3RhcnQKKwl3aXRoIDxFc2M+LiAgWW91IHdpbGwgaGF2ZSB0byB0eXBlIDxFc2M+IHR3aWNlLiAgSWYgeW91IGRvIG5vdCBoYXZlCisJcHJvYmxlbXMgd2l0aCBrZXkgY29kZXMsIGJ1dCB3b3VsZCBsaWtlIHRvIGhhdmUgOm1hcHBlZCBrZXkKKwlzZXF1ZW5jZXMgbm90IHRpbWluZyBvdXQgaW4gMSBzZWNvbmQsIHNldCB0aGUgJ3R0aW1lb3V0JyBvcHRpb24gYW5kCisJcmVzZXQgdGhlICd0aW1lb3V0JyBvcHRpb24uCisKKwlOT1RFOiAndHRpbWVvdXQnIGlzIHJlc2V0IHdoZW4gJ2NvbXBhdGlibGUnIGlzIHNldC4KKworCQkJCQkJKid0aW1lb3V0bGVuJyogKid0bScqCisndGltZW91dGxlbicgJ3RtJwludW1iZXIJKGRlZmF1bHQgMTAwMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBhbGwgdmVyc2lvbnMgb2YgVml9CisJCQkJCQkqJ3R0aW1lb3V0bGVuJyogKid0dG0nKgorJ3R0aW1lb3V0bGVuJyAndHRtJwludW1iZXIJKGRlZmF1bHQgLTEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRoYXQgaXMgd2FpdGVkIGZvciBhIGtleSBjb2RlIG9yIG1hcHBlZCBrZXkKKwlzZXF1ZW5jZSB0byBjb21wbGV0ZS4gIEFsc28gdXNlZCBmb3IgQ1RSTC1cIENUUkwtTiBhbmQgQ1RSTC1cIENUUkwtRworCXdoZW4gcGFydCBvZiBhIGNvbW1hbmQgaGFzIGJlZW4gdHlwZWQuCisJTm9ybWFsbHkgb25seSAndGltZW91dGxlbicgaXMgdXNlZCBhbmQgJ3R0aW1lb3V0bGVuJyBpcyAtMS4gIFdoZW4gYQorCWRpZmZlcmVudCB0aW1lb3V0IHZhbHVlIGZvciBrZXkgY29kZXMgaXMgZGVzaXJlZCBzZXQgJ3R0aW1lb3V0bGVuJyB0bworCWEgbm9uLW5lZ2F0aXZlIG51bWJlci4KKworCQl0dGltZW91dGxlbgltYXBwaW5nIGRlbGF5CSAgIGtleSBjb2RlIGRlbGF5CX4KKwkJICAgPCAwCQkndGltZW91dGxlbicJICAgJ3RpbWVvdXRsZW4nCisJCSAgPj0gMAkJJ3RpbWVvdXRsZW4nCSAgICd0dGltZW91dGxlbicKKworCVRoZSB0aW1lb3V0IG9ubHkgaGFwcGVucyB3aGVuIHRoZSAndGltZW91dCcgYW5kICd0dGltZW91dCcgb3B0aW9ucworCXRlbGwgc28uICBBIHVzZWZ1bCBzZXR0aW5nIHdvdWxkIGJlID4KKwkJOnNldCB0aW1lb3V0IHRpbWVvdXRsZW49MzAwMCB0dGltZW91dGxlbj0xMDAKKzwJKHRpbWUgb3V0IG9uIG1hcHBpbmcgYWZ0ZXIgdGhyZWUgc2Vjb25kcywgdGltZSBvdXQgb24ga2V5IGNvZGVzIGFmdGVyCisJYSB0ZW50aCBvZiBhIHNlY29uZCkuCisKKwkJCQkJCSondGl0bGUnKiAqJ25vdGl0bGUnKgorJ3RpdGxlJwkJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmLCBvbiB3aGVuIHRpdGxlIGNhbiBiZSByZXN0b3JlZCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt0aXRsZXwKKwkJCWZlYXR1cmV9CisJV2hlbiBvbiwgdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mCisJJ3RpdGxlc3RyaW5nJyAoaWYgaXQgaXMgbm90IGVtcHR5KSwgb3IgdG86CisJCWZpbGVuYW1lIFsrPS1dIChwYXRoKSAtIFZJTQorCVdoZXJlOgorCQlmaWxlbmFtZQl0aGUgbmFtZSBvZiB0aGUgZmlsZSBiZWluZyBlZGl0ZWQKKwkJLQkJaW5kaWNhdGVzIHRoZSBmaWxlIGNhbm5vdCBiZSBtb2RpZmllZCwgJ21hJyBvZmYKKwkJKwkJaW5kaWNhdGVzIHRoZSBmaWxlIHdhcyBtb2RpZmllZAorCQk9CQlpbmRpY2F0ZXMgdGhlIGZpbGUgaXMgcmVhZC1vbmx5CisJCT0rCQlpbmRpY2F0ZXMgdGhlIGZpbGUgaXMgcmVhZC1vbmx5IGFuZCBtb2RpZmllZAorCQkocGF0aCkJCWlzIHRoZSBwYXRoIG9mIHRoZSBmaWxlIGJlaW5nIGVkaXRlZAorCQktIFZJTQkJdGhlIHNlcnZlciBuYW1lIHx2OnNlcnZlcm5hbWV8IG9yICJWSU0iCisJT25seSB3b3JrcyBpZiB0aGUgdGVybWluYWwgc3VwcG9ydHMgc2V0dGluZyB3aW5kb3cgdGl0bGVzCisJKGN1cnJlbnRseSBBbWlnYSBjb25zb2xlLCBXaW4zMiBjb25zb2xlLCBhbGwgR1VJIHZlcnNpb25zIGFuZAorCXRlcm1pbmFscyB3aXRoIGEgbm9uLSBlbXB0eSAndF90cycgb3B0aW9uIC0gdGhlc2UgYXJlIFVuaXggeHRlcm0gYW5kCisJaXJpcy1hbnNpIGJ5IGRlZmF1bHQsIHdoZXJlICd0X3RzJyBpcyB0YWtlbiBmcm9tIHRoZSBidWlsdGluIHRlcm1jYXApLgorCQkJCQkJCQkqWDExKgorCVdoZW4gVmltIHdhcyBjb21waWxlZCB3aXRoIEhBVkVfWDExIGRlZmluZWQsIHRoZSBvcmlnaW5hbCB0aXRsZSB3aWxsCisJYmUgcmVzdG9yZWQgaWYgcG9zc2libGUuICBUaGUgb3V0cHV0IG9mICI6dmVyc2lvbiIgd2lsbCBpbmNsdWRlICIrWDExIgorCXdoZW4gSEFWRV9YMTEgd2FzIGRlZmluZWQsIG90aGVyd2lzZSBpdCB3aWxsIGJlICItWDExIi4gIFRoaXMgYWxzbworCXdvcmtzIGZvciB0aGUgaWNvbiBuYW1lIHwnaWNvbid8LgorCUJ1dDogV2hlbiBWaW0gd2FzIHN0YXJ0ZWQgd2l0aCB0aGUgfC1YfCBhcmd1bWVudCwgcmVzdG9yaW5nIHRoZSB0aXRsZQorCXdpbGwgbm90IHdvcmsgKGV4Y2VwdCBpbiB0aGUgR1VJKS4KKwlJZiB0aGUgdGl0bGUgY2Fubm90IGJlIHJlc3RvcmVkLCBpdCBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mICd0aXRsZW9sZCcuCisJWW91IG1pZ2h0IHdhbnQgdG8gcmVzdG9yZSB0aGUgdGl0bGUgb3V0c2lkZSBvZiBWaW0gdGhlbi4KKwlXaGVuIHVzaW5nIGFuIHh0ZXJtIGZyb20gYSByZW1vdGUgbWFjaGluZSB5b3UgY2FuIHVzZSB0aGlzIGNvbW1hbmQ6CisJICAgIHJzaCBtYWNoaW5lX25hbWUgeHRlcm0gLWRpc3BsYXkgJERJU1BMQVkgJgorCXRoZW4gdGhlIFdJTkRPV0lEIGVudmlyb25tZW50IHZhcmlhYmxlIHNob3VsZCBiZSBpbmhlcml0ZWQgYW5kIHRoZQorCXRpdGxlIG9mIHRoZSB3aW5kb3cgc2hvdWxkIGNoYW5nZSBiYWNrIHRvIHdoYXQgaXQgc2hvdWxkIGJlIGFmdGVyCisJZXhpdGluZyBWaW0uCisKKwkJCQkJCQkJKid0aXRsZWxlbicqCisndGl0bGVsZW4nCQludW1iZXIJKGRlZmF1bHQgODUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrdGl0bGV8CisJCQlmZWF0dXJlfQorCUdpdmVzIHRoZSBwZXJjZW50YWdlIG9mICdjb2x1bW5zJyB0byB1c2UgZm9yIHRoZSBsZW5ndGggb2YgdGhlIHdpbmRvdworCXRpdGxlLglXaGVuIHRoZSB0aXRsZSBpcyBsb25nZXIsIG9ubHkgdGhlIGVuZCBvZiB0aGUgcGF0aCBuYW1lIGlzCisJc2hvd24uCUEgJzwnIGNoYXJhY3RlciBiZWZvcmUgdGhlIHBhdGggbmFtZSBpcyB1c2VkIHRvIGluZGljYXRlIHRoaXMuCisJVXNpbmcgYSBwZXJjZW50YWdlIG1ha2VzIHRoaXMgYWRhcHQgdG8gdGhlIHdpZHRoIG9mIHRoZSB3aW5kb3cuICBCdXQKKwlpdCB3b24ndCB3b3JrIHBlcmZlY3RseSwgYmVjYXVzZSB0aGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzCisJYXZhaWxhYmxlIGFsc28gZGVwZW5kcyBvbiB0aGUgZm9udCB1c2VkIGFuZCBvdGhlciB0aGluZ3MgaW4gdGhlIHRpdGxlCisJYmFyLiAgV2hlbiAndGl0bGVsZW4nIGlzIHplcm8gdGhlIGZ1bGwgcGF0aCBpcyB1c2VkLiAgT3RoZXJ3aXNlLAorCXZhbHVlcyBmcm9tIDEgdG8gMzAwMDAgcGVyY2VudCBjYW4gYmUgdXNlZC4KKwkndGl0bGVsZW4nIGlzIGFsc28gdXNlZCBmb3IgdGhlICd0aXRsZXN0cmluZycgb3B0aW9uLgorCisJCQkJCQkqJ3RpdGxlb2xkJyoKKyd0aXRsZW9sZCcJCXN0cmluZwkoZGVmYXVsdCAiVGhhbmtzIGZvciBmbHlpbmcgVmltIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGggdGhlIHwrdGl0bGV8CisJCQlmZWF0dXJlfQorCVRoaXMgb3B0aW9uIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHdpbmRvdyB0aXRsZSB3aGVuIGV4aXRpbmcgVmltIGlmIHRoZQorCW9yaWdpbmFsIHRpdGxlIGNhbm5vdCBiZSByZXN0b3JlZC4gIE9ubHkgaGFwcGVucyBpZiAndGl0bGUnIGlzIG9uIG9yCisJJ3RpdGxlc3RyaW5nJyBpcyBub3QgZW1wdHkuCisJCQkJCQkqJ3RpdGxlc3RyaW5nJyoKKyd0aXRsZXN0cmluZycJCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCt0aXRsZXwKKwkJCWZlYXR1cmV9CisJV2hlbiB0aGlzIG9wdGlvbiBpcyBub3QgZW1wdHksIGl0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIHRpdGxlIG9mIHRoZQorCXdpbmRvdy4gIFRoaXMgaGFwcGVucyBvbmx5IHdoZW4gdGhlICd0aXRsZScgb3B0aW9uIGlzIG9uLgorCU9ubHkgd29ya3MgaWYgdGhlIHRlcm1pbmFsIHN1cHBvcnRzIHNldHRpbmcgd2luZG93IHRpdGxlcyAoY3VycmVudGx5CisJQW1pZ2EgY29uc29sZSwgV2luMzIgY29uc29sZSwgYWxsIEdVSSB2ZXJzaW9ucyBhbmQgdGVybWluYWxzIHdpdGggYQorCW5vbi1lbXB0eSAndF90cycgb3B0aW9uKS4KKwlXaGVuIFZpbSB3YXMgY29tcGlsZWQgd2l0aCBIQVZFX1gxMSBkZWZpbmVkLCB0aGUgb3JpZ2luYWwgdGl0bGUgd2lsbAorCWJlIHJlc3RvcmVkIGlmIHBvc3NpYmxlIHxYMTF8LgorCVdoZW4gdGhpcyBvcHRpb24gY29udGFpbnMgcHJpbnRmLXN0eWxlICclJyBpdGVtcywgdGhleSB3aWxsIGJlCisJZXhwYW5kZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyB1c2VkIGZvciAnc3RhdHVzbGluZScuCisJRXhhbXBsZTogPgorICAgIDphdXRvIEJ1ZkVudGVyICogbGV0ICZ0aXRsZXN0cmluZyA9IGhvc3RuYW1lKCkgLiAiLyIgLiBleHBhbmQoIiU6cCIpCisgICAgOnNldCB0aXRsZSB0aXRsZXN0cmluZz0lPCVGJT0lbC8lTC0lUCB0aXRsZWxlbj03MAorPAlUaGUgdmFsdWUgb2YgJ3RpdGxlbGVuJyBpcyB1c2VkIHRvIGFsaWduIGl0ZW1zIGluIHRoZSBtaWRkbGUgb3IgcmlnaHQKKwlvZiB0aGUgYXZhaWxhYmxlIHNwYWNlLgorCVNvbWUgcGVvcGxlIHByZWZlciB0byBoYXZlIHRoZSBmaWxlIG5hbWUgZmlyc3Q6ID4KKyAgICA6c2V0IHRpdGxlc3RyaW5nPSV0JShcICVNJSklKFwgKCV7ZXhwYW5kKFwiJTp+Oi46aFwiKX0pJSklKFwgJWElKQorPAlOb3RlIHRoZSB1c2Ugb2YgIiV7IH0iIGFuZCBhbiBleHByZXNzaW9uIHRvIGdldCB0aGUgcGF0aCBvZiB0aGUgZmlsZSwKKwl3aXRob3V0IHRoZSBmaWxlIG5hbWUuCVRoZSAiJSggJSkiIGNvbnN0cnVjdHMgYXJlIHVzZWQgdG8gYWRkIGEKKwlzZXBhcmF0aW5nIHNwYWNlIG9ubHkgd2hlbiBuZWVkZWQuCisJTk9URTogVXNlIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBpbiAndGl0bGVzdHJpbmcnIG1heSBjYXVzZSB0aGUgZGlzcGxheQorCXRvIGJlIGdhcmJsZWQgKGUuZy4sIHdoZW4gaXQgY29udGFpbnMgYSBDUiBvciBOTCBjaGFyYWN0ZXIpLgorCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCtzdGF0dXNsaW5lfCBmZWF0dXJlfQorCisJCQkJKid0b29sYmFyJyogKid0YicqCisndG9vbGJhcicgJ3RiJwkJc3RyaW5nCShkZWZhdWx0ICJpY29ucyx0b29sdGlwcyIpCisJCQlnbG9iYWwKKwkJCXtvbmx5IGZvciB8K0dVSV9HVEt8LCB8K0dVSV9BdGhlbmF8LCB8K0dVSV9Nb3RpZnwgYW5kCisJCQl8K0dVSV9QaG90b258fQorCVRoZSBjb250ZW50cyBvZiB0aGlzIG9wdGlvbiBjb250cm9scyB2YXJpb3VzIHRvb2xiYXIgc2V0dGluZ3MuCVRoZQorCXBvc3NpYmxlIHZhbHVlcyBhcmU6CisJCWljb25zCQlUb29sYmFyIGJ1dHRvbnMgYXJlIHNob3duIHdpdGggaWNvbnMuCisJCXRleHQJCVRvb2xiYXIgYnV0dG9ucyBzaG93biB3aXRoIHRleHQuCisJCWhvcml6CQlJY29uIGFuZCB0ZXh0IG9mIGEgdG9vbGJhciBidXR0b24gYXJlCisJCQkJaG9yaXpvbnRhbGx5IGFycmFuZ2VkLgl7b25seSBpbiBHVEsrIDIgR1VJfQorCQl0b29sdGlwcwlUb29sdGlwcyBhcmUgYWN0aXZlIGZvciB0b29sYmFyIGJ1dHRvbnMuCisJVG9vbHRpcHMgcmVmZXIgdG8gdGhlIHBvcHVwIGhlbHAgdGV4dCB3aGljaCBhcHBlYXJzIGFmdGVyIHRoZSBtb3VzZQorCWN1cnNvciBpcyBwbGFjZWQgb3ZlciBhIHRvb2xiYXIgYnV0dG9uIGZvciBhIGJyaWVmIG1vbWVudC4KKworCUlmIHlvdSB3YW50IHRoZSB0b29sYmFyIHRvIGJlIHNob3duIHdpdGggaWNvbnMgYXMgd2VsbCBhcyB0ZXh0LCBkbyB0aGUKKwlmb2xsb3dpbmc6ID4KKwkJOnNldCB0Yj1pY29ucyx0ZXh0Cis8CU1vdGlmIGFuZCBBdGhlbmEgY2Fubm90IGRpc3BsYXkgaWNvbnMgYW5kIHRleHQgYXQgdGhlIHNhbWUgdGltZS4gIFRoZXkKKwl3aWxsIHNob3cgaWNvbnMgaWYgYm90aCBhcmUgcmVxdWVzdGVkLgorCisJSWYgbm9uZSBvZiB0aGUgc3RyaW5ncyBzcGVjaWZpZWQgaW4gJ3Rvb2xiYXInIGFyZSB2YWxpZCBvciBpZgorCSd0b29sYmFyJyBpcyBlbXB0eSwgdGhpcyBvcHRpb24gaXMgaWdub3JlZC4gIElmIHlvdSB3YW50IHRvIGRpc2FibGUKKwl0aGUgdG9vbGJhciwgeW91IG5lZWQgdG8gc2V0IHRoZSAnZ3Vpb3B0aW9ucycgb3B0aW9uLiAgRm9yIGV4YW1wbGU6ID4KKwkJOnNldCBndWlvcHRpb25zLT1UCis8CUFsc28gc2VlIHxndWktdG9vbGJhcnwuCisKKwkJCQkJCSondG9vbGJhcmljb25zaXplJyogKid0YmlzJyoKKyd0b29sYmFyaWNvbnNpemUnICd0YmlzJwlzdHJpbmcJKGRlZmF1bHQgInNtYWxsIikKKwkJCQlnbG9iYWwKKwkJCQl7bm90IGluIFZpfQorCQkJCXtvbmx5IGluIHRoZSBHVEsrIDIgR1VJfQorCUNvbnRyb2xzIHRoZSBzaXplIG9mIHRvb2xiYXIgaWNvbnMuICBUaGUgcG9zc2libGUgdmFsdWVzIGFyZToKKwkJdGlueQkJVXNlIHRpbnkgdG9vbGJhciBpY29ucy4KKwkJc21hbGwJCVVzZSBzbWFsbCB0b29sYmFyIGljb25zIChkZWZhdWx0KS4KKwkJbWVkaXVtCQlVc2UgbWVkaXVtLXNpemVkIHRvb2xiYXIgaWNvbnMuCisJCWxhcmdlCQlVc2UgbGFyZ2UgdG9vbGJhciBpY29ucy4KKwlUaGUgZXhhY3QgZGltZW5zaW9ucyBpbiBwaXhlbHMgb2YgdGhlIHZhcmlvdXMgaWNvbiBzaXplcyBkZXBlbmQgb24KKwl0aGUgY3VycmVudCB0aGVtZS4gIENvbW1vbiBkaW1lbnNpb25zIGFyZSBsYXJnZT0zMngzMiwgbWVkaXVtPTI0eDI0LAorCXNtYWxsPTIweDIwIGFuZCB0aW55PTE2eDE2LgorCisJSWYgJ3Rvb2xiYXJpY29uc2l6ZScgaXMgZW1wdHksIHRoZSBnbG9iYWwgZGVmYXVsdCBzaXplIGFzIGRldGVybWluZWQKKwlieSB1c2VyIHByZWZlcmVuY2VzIG9yIHRoZSBjdXJyZW50IHRoZW1lIGlzIHVzZWQuCisKKwkJCSAgICAgKid0dHlidWlsdGluJyogKid0YmknKiAqJ25vdHR5YnVpbHRpbicqIConbm90YmknKgorJ3R0eWJ1aWx0aW4nICd0YmknCWJvb2xlYW4JKGRlZmF1bHQgb24pCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJV2hlbiBvbiwgdGhlIGJ1aWx0aW4gdGVybWNhcHMgYXJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgZXh0ZXJuYWwgb25lcy4KKwlXaGVuIG9mZiB0aGUgYnVpbHRpbiB0ZXJtY2FwcyBhcmUgc2VhcmNoZWQgYWZ0ZXIgdGhlIGV4dGVybmFsIG9uZXMuCisJV2hlbiB0aGlzIG9wdGlvbiBpcyBjaGFuZ2VkLCB5b3Ugc2hvdWxkIHNldCB0aGUgJ3Rlcm0nIG9wdGlvbiBuZXh0IGZvcgorCXRoZSBjaGFuZ2UgdG8gdGFrZSBlZmZlY3QsIGZvciBleGFtcGxlOiA+CisJCTpzZXQgbm90YmkgdGVybT0kVEVSTQorPAlTZWUgYWxzbyB8dGVybWNhcHwuCisJUmF0aW9uYWxlOiBUaGUgZGVmYXVsdCBmb3IgdGhpcyBvcHRpb24gaXMgIm9uIiwgYmVjYXVzZSB0aGUgYnVpbHRpbgorCXRlcm1jYXAgZW50cmllcyBhcmUgZ2VuZXJhbGx5IGJldHRlciAobWFueSBzeXN0ZW1zIGNvbnRhaW4gZmF1bHR5CisJeHRlcm0gZW50cmllcy4uLikuCisKKwkJCQkgICAgICondHR5ZmFzdCcqICondGYnKiAqJ25vdHR5ZmFzdCcqIConbm90ZicqCisndHR5ZmFzdCcgJ3RmJwkJYm9vbGVhbgkoZGVmYXVsdCBvZmYsIG9uIHdoZW4gJ3Rlcm0nIGlzIHh0ZXJtLCBocHRlcm0sCisJCQkJCXN1bi1jbWQsIHNjcmVlbiwgcnh2dCwgZHR0ZXJtIG9yCisJCQkJCWlyaXMtYW5zaTsgYWxzbyBvbiB3aGVuIHJ1bm5pbmcgVmltIGluCisJCQkJCWEgRE9TIGNvbnNvbGUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJSW5kaWNhdGVzIGEgZmFzdCB0ZXJtaW5hbCBjb25uZWN0aW9uLiAgTW9yZSBjaGFyYWN0ZXJzIHdpbGwgYmUgc2VudCB0bworCXRoZSBzY3JlZW4gZm9yIHJlZHJhd2luZywgaW5zdGVhZCBvZiB1c2luZyBpbnNlcnQvZGVsZXRlIGxpbmUKKwljb21tYW5kcy4gIEltcHJvdmVzIHNtb290aG5lc3Mgb2YgcmVkcmF3aW5nIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlCisJd2luZG93cyBhbmQgdGhlIHRlcm1pbmFsIGRvZXMgbm90IHN1cHBvcnQgYSBzY3JvbGxpbmcgcmVnaW9uLgorCUFsc28gZW5hYmxlcyB0aGUgZXh0cmEgd3JpdGluZyBvZiBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQgb2YgZWFjaCBzY3JlZW4KKwlsaW5lIGZvciBsaW5lcyB0aGF0IHdyYXAuICBUaGlzIGhlbHBzIHdoZW4gdXNpbmcgY29weS9wYXN0ZSB3aXRoIHRoZQorCW1vdXNlIGluIGFuIHh0ZXJtIGFuZCBvdGhlciB0ZXJtaW5hbHMuCisKKwkJCQkJCSondHR5bW91c2UnKiAqJ3R0eW0nKgorJ3R0eW1vdXNlJyAndHR5bScJc3RyaW5nCShkZWZhdWx0IGRlcGVuZHMgb24gJ3Rlcm0nKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe29ubHkgaW4gVW5peCBhbmQgVk1TLCBkb2Vzbid0IHdvcmsgaW4gdGhlIEdVSTsgbm90CisJCQlhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHwrbW91c2V8fQorCU5hbWUgb2YgdGhlIHRlcm1pbmFsIHR5cGUgZm9yIHdoaWNoIG1vdXNlIGNvZGVzIGFyZSB0byBiZSByZWNvZ25pemVkLgorCUN1cnJlbnRseSB0aGVzZSB0aHJlZSBzdHJpbmdzIGFyZSB2YWxpZDoKKwkJCQkJCQkqeHRlcm0tbW91c2UqCisJICAgeHRlcm0JeHRlcm0tbGlrZSBtb3VzZSBoYW5kbGluZy4gIFRoZSBtb3VzZSBnZW5lcmF0ZXMKKwkJCSI8RXNjPltNc2NyIiwgd2hlcmUgInNjciIgaXMgdGhyZWUgYnl0ZXM6CisJCQkJInMiICA9IGJ1dHRvbiBzdGF0ZQorCQkJCSJjIiAgPSBjb2x1bW4gcGx1cyAzMworCQkJCSJyIiAgPSByb3cgcGx1cyAzMworCSAgIHh0ZXJtMglXb3JrcyBsaWtlICJ4dGVybSIsIGJ1dCB3aXRoIHRoZSB4dGVybSByZXBvcnRpbmcgdGhlCisJCQltb3VzZSBwb3NpdGlvbiB3aGlsZSB0aGUgbW91c2UgaXMgZHJhZ2dlZC4gIFRoaXMgd29ya3MKKwkJCW11Y2ggZmFzdGVyIGFuZCBtb3JlIHByZWNpc2UuICBZb3VyIHh0ZXJtIG11c3QgYXQKKwkJCWxlYXN0IGF0IHBhdGNobGV2ZWwgODgJLyBYRnJlZSAzLjMuMyBmb3IgdGhpcyB0bworCQkJd29yay4gIFNlZSBiZWxvdyBmb3IgaG93IFZpbSBkZXRlY3RzIHRoaXMKKwkJCWF1dG9tYXRpY2FsbHkuCisJCQkJCQkJKm5ldHRlcm0tbW91c2UqCisJICAgbmV0dGVybQlOZXRUZXJtIG1vdXNlIGhhbmRsaW5nLiAgVGhlIG1vdXNlIGdlbmVyYXRlcworCQkJIjxFc2M+fXIsYzxDUj4iLCB3aGVyZSAicixjIiBhcmUgdHdvIGRlY2ltYWwgbnVtYmVycworCQkJZm9yIHRoZSByb3cgYW5kIGNvbHVtbi4KKwkJCQkJCQkqZGVjLW1vdXNlKgorCSAgIGRlYwkJREVDIHRlcm1pbmFsIG1vdXNlIGhhbmRsaW5nLiAgVGhlIG1vdXNlIGdlbmVyYXRlcyBhCisJCQlyYXRoZXIgY29tcGxleCBzZXF1ZW5jZSwgc3RhcnRpbmcgd2l0aCAiPEVzYz5bIi4KKwkJCQkJCQkqanNidGVybS1tb3VzZSoKKwkgICBqc2J0ZXJtCUpTQiB0ZXJtIG1vdXNlIGhhbmRsaW5nLgorCQkJCQkJCSpwdGVybS1tb3VzZSoKKwkgICBwdGVybQlRTlggcHRlcm0gbW91c2UgaGFuZGxpbmcuCisKKwlUaGUgbW91c2UgaGFuZGxpbmcgbXVzdCBiZSBlbmFibGVkIGF0IGNvbXBpbGUgdGltZSB8K21vdXNlX3h0ZXJtfAorCXwrbW91c2VfZGVjfCB8K21vdXNlX25ldHRlcm18LgorCU9ubHkgInh0ZXJtIigyKSBpcyByZWFsbHkgcmVjb2duaXplZC4gIE5ldFRlcm0gbW91c2UgY29kZXMgYXJlIGFsd2F5cworCXJlY29nbml6ZWQsIGlmIGVuYWJsZWQgYXQgY29tcGlsZSB0aW1lLiAgREVDIHRlcm1pbmFsIG1vdXNlIGNvZGVzCisJYXJlIHJlY29nbml6ZWQgaWYgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUsIGFuZCAndHR5bW91c2UnIGlzIG5vdAorCSJ4dGVybSIgKGJlY2F1c2UgdGhlIHh0ZXJtIGFuZCBkZWMgbW91c2UgY29kZXMgY29uZmxpY3QpLgorCVRoaXMgb3B0aW9uIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvICJ4dGVybSIsIHdoZW4gdGhlICd0ZXJtJyBvcHRpb24gaXMKKwlzZXQgdG8gYSBuYW1lIHRoYXQgc3RhcnRzIHdpdGggInh0ZXJtIiwgYW5kICd0dHltb3VzZScgaXMgbm90ICJ4dGVybSIKKwlvciAieHRlcm0yIiBhbHJlYWR5LiAgVGhlIG1haW4gdXNlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIHNldCBpdCB0bworCSJ4dGVybSIsIHdoZW4gdGhlIHRlcm1pbmFsIG5hbWUgZG9lc24ndCBzdGFydCB3aXRoICJ4dGVybSIsIGJ1dCBpdCBjYW4KKwloYW5kbGUgeHRlcm0gbW91c2UgY29kZXMuCisJVGhlICJ4dGVybTIiIHZhbHVlIHdpbGwgYmUgc2V0IGlmIHRoZSB4dGVybSB2ZXJzaW9uIGlzIHJlcG9ydGVkIHRvIGJlCisJOTUgb2YgaGlnaGVyLiAgVGhpcyBvbmx5IHdvcmtzIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCt0ZXJtcmVzcG9uc2V8CisJZmVhdHVyZSBhbmQgaWYgfHRfUlZ8IGlzIHNldCB0byB0aGUgZXNjYXBlIHNlcXVlbmNlIHRvIHJlcXVlc3QgdGhlCisJeHRlcm0gdmVyc2lvbiBudW1iZXIuICBPdGhlcndpc2UgInh0ZXJtMiIgbXVzdCBiZSBzZXQgZXhwbGljaXRseS4KKwlJZiB5b3UgZG8gbm90IHdhbnQgJ3R0eW1vdXNlJyB0byBiZSBzZXQgdG8gInh0ZXJtMiIgYXV0b21hdGljYWxseSwgc2V0CisJdF9SViB0byBhbiBlbXB0eSBzdHJpbmc6ID4KKwkJOnNldCB0X1JWPQorPAorCQkJCQkJKid0dHlzY3JvbGwnKiAqJ3RzbCcqCisndHR5c2Nyb2xsJyAndHNsJwludW1iZXIJKGRlZmF1bHQgOTk5KQorCQkJZ2xvYmFsCisJTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gc2Nyb2xsIHRoZSBzY3JlZW4uICBJZiB0aGVyZSBhcmUgbW9yZSBsaW5lcworCXRvIHNjcm9sbCB0aGUgd2luZG93IGlzIHJlZHJhd24uICBGb3IgdGVybWluYWxzIHdoZXJlIHNjcm9sbGluZyBpcworCXZlcnkgc2xvdyBhbmQgcmVkcmF3aW5nIGlzIG5vdCBzbG93IHRoaXMgY2FuIGJlIHNldCB0byBhIHNtYWxsIG51bWJlciwKKwllLmcuLCAzLCB0byBzcGVlZCB1cCBkaXNwbGF5aW5nLgorCisJCQkJCQkqJ3R0eXR5cGUnKiAqJ3R0eScqCisndHR5dHlwZScgJ3R0eScJCXN0cmluZwkoZGVmYXVsdCBmcm9tICRURVJNKQorCQkJZ2xvYmFsCisJQWxpYXMgZm9yICd0ZXJtJywgc2VlIGFib3ZlLgorCisJCQkJCQkqJ3VuZG9sZXZlbHMnKiAqJ3VsJyoKKyd1bmRvbGV2ZWxzJyAndWwnCW51bWJlcgkoZGVmYXVsdCAxMDAsIDEwMDAgZm9yIFVuaXgsIFZNUywKKwkJCQkJCVdpbjMyIGFuZCBPUy8yKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1heGltdW0gbnVtYmVyIG9mIGNoYW5nZXMgdGhhdCBjYW4gYmUgdW5kb25lLiAgU2luY2UgdW5kbyBpbmZvcm1hdGlvbgorCWlzIGtlcHQgaW4gbWVtb3J5LCBoaWdoZXIgbnVtYmVycyB3aWxsIGNhdXNlIG1vcmUgbWVtb3J5IHRvIGJlIHVzZWQKKwkobmV2ZXJ0aGVsZXNzLCBhIHNpbmdsZSBjaGFuZ2UgY2FuIHVzZSBhbiB1bmxpbWl0ZWQgYW1vdW50IG9mIG1lbW9yeSkuCisJU2V0IHRvIDAgZm9yIFZpIGNvbXBhdGliaWxpdHk6IE9uZSBsZXZlbCBvZiB1bmRvIGFuZCAidSIgdW5kb2VzCisJaXRzZWxmOiA+CisJCXNldCB1bD0wCis8CUJ1dCB5b3UgY2FuIGFsc28gZ2V0IFZpIGNvbXBhdGliaWxpdHkgYnkgaW5jbHVkaW5nIHRoZSAndScgZmxhZyBpbgorCSdjcG9wdGlvbnMnLCBhbmQgc3RpbGwgYmUgYWJsZSB0byB1c2UgQ1RSTC1SIHRvIHJlcGVhdCB1bmRvLgorCVNldCB0byBhIG5lZ2F0aXZlIG51bWJlciBmb3Igbm8gdW5kbyBhdCBhbGw6ID4KKwkJc2V0IHVsPS0xCis8CVRoaXMgaGVscHMgd2hlbiB5b3UgcnVuIG91dCBvZiBtZW1vcnkgZm9yIGEgc2luZ2xlIGNoYW5nZS4KKwlBbHNvIHNlZSB8dW5kby10d28td2F5c3wuCisKKwkJCQkJCSondXBkYXRlY291bnQnKiAqJ3VjJyoKKyd1cGRhdGVjb3VudCcgJ3VjJwludW1iZXIJKGRlZmF1bHQ6IDIwMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlBZnRlciB0eXBpbmcgdGhpcyBtYW55IGNoYXJhY3RlcnMgdGhlIHN3YXAgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8KKwlkaXNrLiAgV2hlbiB6ZXJvLCBubyBzd2FwIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGF0IGFsbCAoc2VlIGNoYXB0ZXIgb24KKwlyZWNvdmVyeSB8Y3Jhc2gtcmVjb3Zlcnl8KS4gICd1cGRhdGVjb3VudCcgaXMgc2V0IHRvIHplcm8gYnkgc3RhcnRpbmcKKwlWaW0gd2l0aCB0aGUgIi1uIiBvcHRpb24sIHNlZSB8c3RhcnR1cHwuICBXaGVuIGVkaXRpbmcgaW4gcmVhZG9ubHkKKwltb2RlIHRoaXMgb3B0aW9uIHdpbGwgYmUgaW5pdGlhbGl6ZWQgdG8gMTAwMDAuCisJVGhlIHN3YXBmaWxlIGNhbiBiZSBkaXNhYmxlZCBwZXIgYnVmZmVyIHdpdGggfCdzd2FwZmlsZSd8LgorCVdoZW4gJ3VwZGF0ZWNvdW50JyBpcyBzZXQgZnJvbSB6ZXJvIHRvIG5vbi16ZXJvLCBzd2FwIGZpbGVzIGFyZQorCWNyZWF0ZWQgZm9yIGFsbCBidWZmZXJzIHRoYXQgaGF2ZSAnc3dhcGZpbGUnIHNldC4gIFdoZW4gJ3VwZGF0ZWNvdW50JworCWlzIHNldCB0byB6ZXJvLCBleGlzdGluZyBzd2FwIGZpbGVzIGFyZSBub3QgZGVsZXRlZC4KKwlBbHNvIHNlZSB8J3N3YXBzeW5jJ3wuCisJVGhpcyBvcHRpb24gaGFzIG5vIG1lYW5pbmcgaW4gYnVmZmVycyB3aGVyZSB8J2J1ZnR5cGUnfCBpcyAibm9maWxlIgorCW9yICJub3dyaXRlIi4KKworCQkJCQkJKid1cGRhdGV0aW1lJyogKid1dCcqCisndXBkYXRldGltZScgJ3V0JwludW1iZXIJKGRlZmF1bHQgNDAwMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlJZiB0aGlzIG1hbnkgbWlsbGlzZWNvbmRzIG5vdGhpbmcgaXMgdHlwZWQgdGhlIHN3YXAgZmlsZSB3aWxsIGJlCisJd3JpdHRlbiB0byBkaXNrIChzZWUgfGNyYXNoLXJlY292ZXJ5fCkuICBBbHNvIHVzZWQgZm9yIHRoZQorCXxDdXJzb3JIb2xkfCBhdXRvY29tbWFuZCBldmVudC4KKworCQkJCQkJKid2ZXJib3NlJyogKid2YnMnKgorJ3ZlcmJvc2UnICd2YnMnCQludW1iZXIJKGRlZmF1bHQgMCkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaSwgYWx0aG91Z2ggc29tZSB2ZXJzaW9ucyBoYXZlIGEgYm9vbGVhbgorCQkJdmVyYm9zZSBvcHRpb259CisJV2hlbiBiaWdnZXIgdGhhbiB6ZXJvLCBWaW0gd2lsbCBnaXZlIG1lc3NhZ2VzIGFib3V0IHdoYXQgaXQgaXMgZG9pbmcuCisJQ3VycmVudGx5LCB0aGVzZSBtZXNzYWdlcyBhcmUgZ2l2ZW46CisJPj0gMQlXaGVuIHRoZSB2aW1pbmZvIGZpbGUgaXMgcmVhZCBvciB3cml0dGVuLgorCT49IDIJV2hlbiBhIGZpbGUgaXMgIjpzb3VyY2UiJ2VkLgorCT49IDUJRXZlcnkgc2VhcmNoZWQgdGFncyBmaWxlLgorCT49IDgJRmlsZXMgZm9yIHdoaWNoIGEgZ3JvdXAgb2YgYXV0b2NvbW1hbmRzIGlzIGV4ZWN1dGVkLgorCT49IDkJRXZlcnkgZXhlY3V0ZWQgYXV0b2NvbW1hbmQuCisJPj0gMTIJRXZlcnkgZXhlY3V0ZWQgZnVuY3Rpb24uCisJPj0gMTMJV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duLCBjYXVnaHQsIGZpbmlzaGVkLCBvciBkaXNjYXJkZWQuCisJPj0gMTQJQW55dGhpbmcgcGVuZGluZyBpbiBhICI6ZmluYWxseSIgY2xhdXNlLgorCT49IDE1CUV2ZXJ5IGV4ZWN1dGVkIEV4IGNvbW1hbmQgKHRydW5jYXRlZCBhdCAyMDAgY2hhcmFjdGVycykuCisKKwlUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgIi1WIiBhcmd1bWVudC4gIFNlZSB8LVZ8LgorCVRoaXMgb3B0aW9uIGlzIGFsc28gc2V0IGJ5IHRoZSB8OnZlcmJvc2V8IGNvbW1hbmQuCisKKwkJCQkJCSondmlld2RpcicqICondmRpcicqCisndmlld2RpcicgJ3ZkaXInCXN0cmluZwkoZGVmYXVsdCBmb3IgQW1pZ2EsIE1TLURPUywgT1MvMiBhbmQgV2luMzI6CisJCQkJCQkJICIkVklNL3ZpbWZpbGVzL3ZpZXciLAorCQkJCSBmb3IgVW5peDogIn4vLnZpbS92aWV3IiwKKwkJCQkgZm9yIE1hY2ludG9zaDogIiRWSU06dmltZmlsZXM6dmlldyIKKwkJCQkgZm9yIFZNUzogInN5cyRsb2dpbjp2aW1maWxlcy92aWV3IgorCQkJCSBmb3IgUmlzY09TOiAiQ2hvaWNlczp2aW1maWxlcy92aWV3IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK21rc2Vzc2lvbgorCQkJZmVhdHVyZX0KKwlOYW1lIG9mIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZmlsZXMgZm9yIHw6bWt2aWV3fC4KKwlUaGlzIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGZyb20gYSB8bW9kZWxpbmV8IG9yIGluIHRoZSB8c2FuZGJveHwsIGZvcgorCXNlY3VyaXR5IHJlYXNvbnMuCisKKwkJCQkJCSondmlld29wdGlvbnMnKiAqJ3ZvcCcqCisndmlld29wdGlvbnMnICd2b3AnCXN0cmluZwkoZGVmYXVsdDogImZvbGRzLG9wdGlvbnMsY3Vyc29yIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK21rc2Vzc2lvbgorCQkJZmVhdHVyZX0KKwlDaGFuZ2VzIHRoZSBlZmZlY3Qgb2YgdGhlIHw6bWt2aWV3fCBjb21tYW5kLiAgSXQgaXMgYSBjb21tYSBzZXBhcmF0ZWQKKwlsaXN0IG9mIHdvcmRzLglFYWNoIHdvcmQgZW5hYmxlcyBzYXZpbmcgYW5kIHJlc3RvcmluZyBzb21ldGhpbmc6CisJICAgd29yZAkJc2F2ZSBhbmQgcmVzdG9yZSB+CisJICAgY3Vyc29yCWN1cnNvciBwb3NpdGlvbiBpbiBmaWxlIGFuZCBpbiB3aW5kb3cKKwkgICBmb2xkcwltYW51YWxseSBjcmVhdGVkIGZvbGRzLCBvcGVuZWQvY2xvc2VkIGZvbGRzIGFuZCBsb2NhbAorCQkJZm9sZCBvcHRpb25zCisJICAgb3B0aW9ucwlvcHRpb25zIGFuZCBtYXBwaW5ncyBsb2NhbCB0byBhIHdpbmRvdyBvciBidWZmZXIgKG5vdAorCQkJZ2xvYmFsIHZhbHVlcyBmb3IgbG9jYWwgb3B0aW9ucykKKwkgICBzbGFzaAliYWNrc2xhc2hlcyBpbiBmaWxlIG5hbWVzIHJlcGxhY2VkIHdpdGggZm9yd2FyZAorCQkJc2xhc2hlcworCSAgIHVuaXgJCXdpdGggVW5peCBlbmQtb2YtbGluZSBmb3JtYXQgKHNpbmdsZSA8Tkw+KSwgZXZlbiB3aGVuCisJCQlvbiBXaW5kb3dzIG9yIERPUworCisJInNsYXNoIiBhbmQgInVuaXgiIGFyZSB1c2VmdWwgb24gV2luZG93cyB3aGVuIHNoYXJpbmcgdmlldyBmaWxlcworCXdpdGggVW5peC4gIFRoZSBVbml4IHZlcnNpb24gb2YgVmltIGNhbm5vdCBzb3VyY2UgZG9zIGZvcm1hdCBzY3JpcHRzLAorCWJ1dCB0aGUgV2luZG93cyB2ZXJzaW9uIG9mIFZpbSBjYW4gc291cmNlIHVuaXggZm9ybWF0IHNjcmlwdHMuCisKKwkJCQkqJ3ZpbWluZm8nKiAqJ3ZpJyogKkU1MjYqICpFNTI3KiAqRTUyOCoKKyd2aW1pbmZvJyAndmknCQlzdHJpbmcJKFZpIGRlZmF1bHQ6ICIiLCBWaW0gZGVmYXVsdCBmb3IgTVMtRE9TLAorCQkJCSAgIFdpbmRvd3MgYW5kIE9TLzI6ICcyMCw8NTAsczEwLGgsckE6LHJCOiwKKwkJCQkgICBmb3IgQW1pZ2E6ICcyMCw8NTAsczEwLGgscmRmMDoscmRmMToscmRmMjoKKwkJCQkgICBmb3Igb3RoZXJzOiAnMjAsPDUwLHMxMCxoKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSAgfCt2aW1pbmZvfAorCQkJZmVhdHVyZX0KKwlXaGVuIG5vbi1lbXB0eSwgdGhlIHZpbWluZm8gZmlsZSBpcyByZWFkIHVwb24gc3RhcnR1cCBhbmQgd3JpdHRlbgorCXdoZW4gZXhpdGluZyBWaW0gKHNlZSB8dmltaW5mby1maWxlfCkuCVRoZSBzdHJpbmcgc2hvdWxkIGJlIGEgY29tbWEKKwlzZXBhcmF0ZWQgbGlzdCBvZiBwYXJhbWV0ZXJzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgY2hhcmFjdGVyCisJaWRlbnRpZnlpbmcgdGhlIHBhcnRpY3VsYXIgcGFyYW1ldGVyLCBmb2xsb3dlZCBieSBhIG51bWJlciBvciBzdHJpbmcKKwl3aGljaCBzcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoYXQgcGFyYW1ldGVyLiAgSWYgYSBwYXJ0aWN1bGFyCisJY2hhcmFjdGVyIGlzIGxlZnQgb3V0LCB0aGVuIHRoZSBkZWZhdWx0IHZhbHVlIGlzIHVzZWQgZm9yIHRoYXQKKwlwYXJhbWV0ZXIuICBUaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiB0aGUgaWRlbnRpZnlpbmcgY2hhcmFjdGVycyBhbmQKKwl0aGUgZWZmZWN0IG9mIHRoZWlyIHZhbHVlLgorCUNIQVIJVkFMVUUJfgorCSEJV2hlbiBpbmNsdWRlZCwgc2F2ZSBhbmQgcmVzdG9yZSBnbG9iYWwgdmFyaWFibGVzIHRoYXQgc3RhcnQKKwkJd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLCBhbmQgZG9uJ3QgY29udGFpbiBhIGxvd2VyY2FzZQorCQlsZXR0ZXIuICBUaHVzICJLRUVQVEhJUyBhbmQgIktfTF9NIiBhcmUgc3RvcmVkLCBidXQgIktlZXBUaGlzIgorCQlhbmQgIl9LX0xfTSIgYXJlIG5vdC4KKwkiCU1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHNhdmVkIGZvciBlYWNoIHJlZ2lzdGVyLiAgT2xkIG5hbWUgb2YKKwkJdGhlICc8JyBpdGVtLCB3aXRoIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB5b3UgbmVlZCB0byBwdXQgYQorCQliYWNrc2xhc2ggYmVmb3JlIHRoZSAiLCBvdGhlcndpc2UgaXQgd2lsbCBiZSByZWNvZ25pemVkIGFzIHRoZQorCQlzdGFydCBvZiBhIGNvbW1lbnQhCisJJQlXaGVuIGluY2x1ZGVkLCBzYXZlIGFuZCByZXN0b3JlIHRoZSBidWZmZXIgbGlzdC4gIElmIFZpbSBpcworCQlzdGFydGVkIHdpdGggYSBmaWxlIG5hbWUgYXJndW1lbnQsIHRoZSBidWZmZXIgbGlzdCBpcyBub3QKKwkJcmVzdG9yZWQuICBJZiBWaW0gaXMgc3RhcnRlZCB3aXRob3V0IGEgZmlsZSBuYW1lIGFyZ3VtZW50LCB0aGUKKwkJYnVmZmVyIGxpc3QgaXMgcmVzdG9yZWQgZnJvbSB0aGUgdmltaW5mbyBmaWxlLglCdWZmZXJzCisJCXdpdGhvdXQgYSBmaWxlIG5hbWUgYW5kIGJ1ZmZlcnMgZm9yIGhlbHAgZmlsZXMgYXJlIG5vdCB3cml0dGVuCisJCXRvIHRoZSB2aW1pbmZvIGZpbGUuCisJJwlNYXhpbXVtIG51bWJlciBvZiBwcmV2aW91c2x5IGVkaXRlZCBmaWxlcyBmb3Igd2hpY2ggdGhlIG1hcmtzCisJCWFyZSByZW1lbWJlcmVkLiAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBhbHdheXMgYmUgaW5jbHVkZWQgd2hlbgorCQkndmltaW5mbycgaXMgbm9uLWVtcHR5LgorCQlJbmNsdWRpbmcgdGhpcyBpdGVtIGFsc28gbWVhbnMgdGhhdCB0aGUgfGp1bXBsaXN0fCBhbmQgdGhlCisJCXxjaGFuZ2VsaXN0fCBhcmUgc3RvcmVkIGluIHRoZSB2aW1pbmZvIGZpbGUuCisJLwlNYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2VhcmNoIHBhdHRlcm4gaGlzdG9yeSB0byBiZQorCQlzYXZlZC4JSWYgbm9uLXplcm8sIHRoZW4gdGhlIHByZXZpb3VzIHNlYXJjaCBhbmQgc3Vic3RpdHV0ZQorCQlwYXR0ZXJucyBhcmUgYWxzbyBzYXZlZC4gIFdoZW4gbm90IGluY2x1ZGVkLCB0aGUgdmFsdWUgb2YKKwkJJ2hpc3RvcnknIGlzIHVzZWQuCisJOglNYXhpbXVtIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29tbWFuZC1saW5lIGhpc3RvcnkgdG8gYmUKKwkJc2F2ZWQuCVdoZW4gbm90IGluY2x1ZGVkLCB0aGUgdmFsdWUgb2YgJ2hpc3RvcnknIGlzIHVzZWQuCisJPAlNYXhpbXVtIG51bWJlciBvZiBsaW5lcyBzYXZlZCBmb3IgZWFjaCByZWdpc3Rlci4gIElmIHplcm8gdGhlbgorCQlyZWdpc3RlcnMgYXJlIG5vdCBzYXZlZC4gIFdoZW4gbm90IGluY2x1ZGVkLCBhbGwgbGluZXMgYXJlCisJCXNhdmVkLiAgJyInIGlzIHRoZSBvbGQgbmFtZSBmb3IgdGhpcyBpdGVtLgorCQlBbHNvIHNlZSB0aGUgJ3MnIGl0ZW0gYmVsb3c6IGxpbWl0IHNwZWNpZmllZCBpbiBLYnl0ZS4KKwlACU1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBpbnB1dC1saW5lIGhpc3RvcnkgdG8gYmUKKwkJc2F2ZWQuCVdoZW4gbm90IGluY2x1ZGVkLCB0aGUgdmFsdWUgb2YgJ2hpc3RvcnknIGlzIHVzZWQuCisJYwlXaGVuIGluY2x1ZGVkLCBjb252ZXJ0IHRoZSB0ZXh0IGluIHRoZSB2aW1pbmZvIGZpbGUgZnJvbSB0aGUKKwkJJ2VuY29kaW5nJyB1c2VkIHdoZW4gd3JpdGluZyB0aGUgZmlsZSB0byB0aGUgY3VycmVudAorCQknZW5jb2RpbmcnLiBTZWUgfHZpbWluZm8tZW5jb2Rpbmd8LgorCWYJV2hldGhlciBmaWxlIG1hcmtzIG5lZWQgdG8gYmUgc3RvcmVkLiAgSWYgemVybywgZmlsZSBtYXJrcyAoJzAKKwkJdG8gJzksICdBIHRvICdaKSBhcmUgbm90IHN0b3JlZC4gIFdoZW4gbm90IHByZXNlbnQgb3Igd2hlbgorCQlub24temVybywgdGhleSBhcmUgYWxsIHN0b3JlZC4JJzAgaXMgdXNlZCBmb3IgdGhlIGN1cnJlbnQKKwkJY3Vyc29yIHBvc2l0aW9uICh3aGVuIGV4aXRpbmcgb3Igd2hlbiBkb2luZyAiOnd2aW1pbmZvIikuCisJaAlEaXNhYmxlIHRoZSBlZmZlY3Qgb2YgJ2hsc2VhcmNoJyB3aGVuIGxvYWRpbmcgdGhlIHZpbWluZm8KKwkJZmlsZS4gIFdoZW4gbm90IGluY2x1ZGVkLCBpdCBkZXBlbmRzIG9uIHdoZXRoZXIgIjpub2hsc2VhcmNoIgorCQloYXMgYmVlbiB1c2VkIHNpbmNlIHRoZSBsYXN0IHNlYXJjaCBjb21tYW5kLgorCW4JTmFtZSBvZiB0aGUgdmltaW5mbyBmaWxlLiAgVGhlIG5hbWUgbXVzdCBpbW1lZGlhdGVseSBmb2xsb3cKKwkJdGhlICduJy4gIE11c3QgYmUgdGhlIGxhc3Qgb25lISAgSWYgdGhlICItaSIgYXJndW1lbnQgd2FzCisJCWdpdmVuIHdoZW4gc3RhcnRpbmcgVmltLCB0aGF0IGZpbGUgbmFtZSBvdmVycmlkZXMgdGhlIG9uZQorCQlnaXZlbiBoZXJlIHdpdGggJ3ZpbWluZm8nLiAgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZAorCQl3aGVuIG9wZW5pbmcgdGhlIGZpbGUsIG5vdCB3aGVuIHNldHRpbmcgdGhlIG9wdGlvbi4KKwlyCVJlbW92YWJsZSBtZWRpYS4gIFRoZSBhcmd1bWVudCBpcyBhIHN0cmluZyAodXAgdG8gdGhlIG5leHQKKwkJJywnKS4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBnaXZlbiBzZXZlcmFsIHRpbWVzLiAgRWFjaAorCQlzcGVjaWZpZXMgdGhlIHN0YXJ0IG9mIGEgcGF0aCBmb3Igd2hpY2ggbm8gbWFya3Mgd2lsbCBiZQorCQlzdG9yZWQuICBUaGlzIGlzIHRvIGF2b2lkIHJlbW92YWJsZSBtZWRpYS4gIEZvciBNUy1ET1MgeW91CisJCWNvdWxkIHVzZSAicmE6LHJiOiIsIGZvciBBbWlnYSAicmRmMDoscmRmMToscmRmMjoiLiAgWW91IGNhbgorCQlhbHNvIHVzZSBpdCBmb3IgdGVtcCBmaWxlcywgZS5nLiwgZm9yIFVuaXg6ICJyL3RtcCIuICBDYXNlIGlzCisJCWlnbm9yZWQuICBNYXhpbXVtIGxlbmd0aCBvZiBlYWNoICdyJyBhcmd1bWVudCBpcyA1MAorCQljaGFyYWN0ZXJzLgorCXMJTWF4aW11bSBzaXplIG9mIGFuIGl0ZW0gaW4gS2J5dGUuICBJZiB6ZXJvIHRoZW4gcmVnaXN0ZXJzIGFyZQorCQlub3Qgc2F2ZWQuICBDdXJyZW50bHkgb25seSBhcHBsaWVzIHRvIHJlZ2lzdGVycy4gIFRoZSBkZWZhdWx0CisJCSJzMTAiIHdpbGwgZXhjbHVkZSByZWdpc3RlcnMgd2l0aCBtb3JlIHRoYW4gMTAgS2J5dGUgb2YgdGV4dC4KKwkJQWxzbyBzZWUgdGhlICc8JyBpdGVtIGFib3ZlOiBsaW5lIGNvdW50IGxpbWl0LgorCisJRXhhbXBsZTogPgorCSAgICA6c2V0IHZpbWluZm89JzUwLDwxMDAwLHMxMDAsOjAsbn4vdmltL3ZpbWluZm8KKzwKKwknNTAJCU1hcmtzIHdpbGwgYmUgcmVtZW1iZXJlZCBmb3IgdGhlIGxhc3QgNTAgZmlsZXMgeW91CisJCQllZGl0ZWQuCisJPDEwMDAJCUNvbnRlbnRzIG9mIHJlZ2lzdGVycyAodXAgdG8gMTAwMCBsaW5lcyBlYWNoKSB3aWxsIGJlCisJCQlyZW1lbWJlcmVkLgorCXMxMDAJCVJlZ2lzdGVycyB3aXRoIG1vcmUgdGhhbiAxMDAgS2J5dGUgdGV4dCBhcmUgc2tpcHBlZC4KKwk6MAkJQ29tbWFuZC1saW5lIGhpc3Rvcnkgd2lsbCBub3QgYmUgc2F2ZWQuCisJbn4vdmltL3ZpbWluZm8JVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gdXNlIGlzICJ+L3ZpbS92aW1pbmZvIi4KKwlubyAvCQlTaW5jZSAnLycgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgd2lsbCBiZSB1c2VkLAorCQkJdGhhdCBpcywgc2F2ZSBhbGwgb2YgdGhlIHNlYXJjaCBoaXN0b3J5LCBhbmQgYWxzbyB0aGUKKwkJCXByZXZpb3VzIHNlYXJjaCBhbmQgc3Vic3RpdHV0ZSBwYXR0ZXJucy4KKwlubyAlCQlUaGUgYnVmZmVyIGxpc3Qgd2lsbCBub3QgYmUgc2F2ZWQgbm9yIHJlYWQgYmFjay4KKwlubyBoCQknaGxzZWFyY2gnIGhpZ2hsaWdodGluZyB3aWxsIGJlIHJlc3RvcmVkLgorCisJV2hlbiBzZXR0aW5nICd2aW1pbmZvJyBmcm9tIGFuIGVtcHR5IHZhbHVlIHlvdSBjYW4gdXNlIHw6cnZpbWluZm98IHRvCisJbG9hZCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUsIHRoaXMgaXMgbm90IGRvbmUgYXV0b21hdGljYWxseS4KKworCVRoaXMgb3B0aW9uIGNhbm5vdCBiZSBzZXQgZnJvbSBhIHxtb2RlbGluZXwgb3IgaW4gdGhlIHxzYW5kYm94fCwgZm9yCisJc2VjdXJpdHkgcmVhc29ucy4KKworCQkJCQkgICAgKid2aXJ0dWFsZWRpdCcqICondmUnKgorJ3ZpcnR1YWxlZGl0JyAndmUnCXN0cmluZwkoZGVmYXVsdCAiIikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUKKwkJCXwrdmlydHVhbGVkaXR8IGZlYXR1cmV9CisJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB0aGVzZSB3b3JkczoKKwkgICAgYmxvY2sJQWxsb3cgdmlydHVhbCBlZGl0aW5nIGluIFZpc3VhbCBibG9jayBtb2RlLgorCSAgICBpbnNlcnQJQWxsb3cgdmlydHVhbCBlZGl0aW5nIGluIEluc2VydCBtb2RlLgorCSAgICBhbGwJCUFsbG93IHZpcnR1YWwgZWRpdGluZyBpbiBhbGwgbW9kZXMuCisJVmlydHVhbCBlZGl0aW5nIG1lYW5zIHRoYXQgdGhlIGN1cnNvciBjYW4gYmUgcG9zaXRpb25lZCB3aGVyZSB0aGVyZSBpcworCW5vIGFjdHVhbCBjaGFyYWN0ZXIuICBUaGlzIGNhbiBiZSBoYWxmd2F5IGludG8gYSBUYWIgb3IgYmV5b25kIHRoZSBlbmQKKwlvZiB0aGUgbGluZS4gIFVzZWZ1bCBmb3Igc2VsZWN0aW5nIGEgcmVjdGFuZ2xlIGluIFZpc3VhbCBtb2RlIGFuZAorCWVkaXRpbmcgYSB0YWJsZS4KKworCQkJKid2aXN1YWxiZWxsJyogKid2YicqIConbm92aXN1YWxiZWxsJyogKidub3ZiJyogKmJlZXAqCisndmlzdWFsYmVsbCcgJ3ZiJwlib29sZWFuCShkZWZhdWx0IG9mZikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwlVc2UgdmlzdWFsIGJlbGwgaW5zdGVhZCBvZiBiZWVwaW5nLiAgVGhlIHRlcm1pbmFsIGNvZGUgdG8gZGlzcGxheSB0aGUKKwl2aXN1YWwgYmVsbCBpcyBnaXZlbiB3aXRoICd0X3ZiJy4gIFdoZW4gbm8gYmVlcCBvciBmbGFzaCBpcyB3YW50ZWQsCisJdXNlICI6c2V0IHZiIHRfdmI9Ii4KKwlOb3RlOiBXaGVuIHRoZSBHVUkgc3RhcnRzLCAndF92YicgaXMgcmVzZXQgdG8gaXRzIGRlZmF1bHQgdmFsdWUuICBZb3UKKwltaWdodCB3YW50IHRvIHNldCBpdCBhZ2FpbiBpbiB5b3VyIHxndmltcmN8LgorCUluIHRoZSBHVUksICd0X3ZiJyBkZWZhdWx0cyB0byAiPEVzYz58ZiIsIHdoaWNoIGludmVydHMgdGhlIGRpc3BsYXkKKwlmb3IgMjAgbXNlYy4gIElmIHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCB0aW1lLCB1c2UgIjxFc2M+fDQwZiIsCisJd2hlcmUgNDAgaXMgdGhlIHRpbWUgaW4gbXNlYy4KKwlEb2VzIG5vdCB3b3JrIG9uIHRoZSBBbWlnYSwgeW91IGFsd2F5cyBnZXQgYSBzY3JlZW4gZmxhc2guCisJQWxzbyBzZWUgJ2Vycm9yYmVsbHMnLgorCisJCQkJCQkqJ3dhcm4nKiAqJ25vd2FybicqCisnd2FybicJCQlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJR2l2ZSBhIHdhcm5pbmcgbWVzc2FnZSB3aGVuIGEgc2hlbGwgY29tbWFuZCBpcyB1c2VkIHdoaWxlIHRoZSBidWZmZXIKKwloYXMgYmVlbiBjaGFuZ2VkLgorCisJCSAgICAgKid3ZWlyZGludmVydCcqICond2l2JyogKidub3dlaXJkaW52ZXJ0JyogKidub3dpdicqCisnd2VpcmRpbnZlcnQnICd3aXYnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCVRoaXMgb3B0aW9uIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlICd0X3hzJyB0ZXJtY2FwIG9wdGlvbi4KKwlJdCBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9uIDQueC4KKwlTZXR0aW5nICd3ZWlyZGludmVydCcgaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nICd0X3hzJyBub24tZW1wdHksIGFuZAorCXZpY2UgdmVyc2EuICBIYXMgbm8gZWZmZWN0IHdoZW4gdGhlIEdVSSBpcyBydW5uaW5nLgorCisJCQkJCQkqJ3doaWNod3JhcCcqICond3cnKgorJ3doaWNod3JhcCcgJ3d3JwlzdHJpbmcJKFZpbSBkZWZhdWx0OiAiYixzIiwgVmkgZGVmYXVsdDogIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQWxsb3cgc3BlY2lmaWVkIGtleXMgdGhhdCBtb3ZlIHRoZSBjdXJzb3IgbGVmdC9yaWdodCB0byBtb3ZlIHRvIHRoZQorCXByZXZpb3VzL25leHQgbGluZSB3aGVuIHRoZSBjdXJzb3IgaXMgb24gdGhlIGZpcnN0L2xhc3QgY2hhcmFjdGVyIGluCisJdGhlIGxpbmUuICBDb25jYXRlbmF0ZSBjaGFyYWN0ZXJzIHRvIGFsbG93IHRoaXMgZm9yIHRoZXNlIGtleXM6CisJCWNoYXIgICBrZXkJICBtb2RlCX4KKwkJIGIgICAgPEJTPgkgTm9ybWFsIGFuZCBWaXN1YWwKKwkJIHMgICAgPFNwYWNlPgkgTm9ybWFsIGFuZCBWaXN1YWwKKwkJIGggICAgImgiCSBOb3JtYWwgYW5kIFZpc3VhbAorCQkgbCAgICAibCIJIE5vcm1hbCBhbmQgVmlzdWFsCisJCSA8ICAgIDxMZWZ0PgkgTm9ybWFsIGFuZCBWaXN1YWwKKwkJID4gICAgPFJpZ2h0PgkgTm9ybWFsIGFuZCBWaXN1YWwKKwkJIH4gICAgIn4iCSBOb3JtYWwKKwkJIFsgICAgPExlZnQ+CSBJbnNlcnQgYW5kIFJlcGxhY2UKKwkJIF0gICAgPFJpZ2h0PgkgSW5zZXJ0IGFuZCBSZXBsYWNlCisJRm9yIGV4YW1wbGU6ID4KKwkJOnNldCB3dz08LD4sWyxdCis8CWFsbG93cyB3cmFwIG9ubHkgd2hlbiBjdXJzb3Iga2V5cyBhcmUgdXNlZC4KKwlXaGVuIHRoZSBtb3ZlbWVudCBrZXlzIGFyZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYSBkZWxldGUgb3IgY2hhbmdlCisJb3BlcmF0b3IsIHRoZSA8RU9MPiBhbHNvIGNvdW50cyBmb3IgYSBjaGFyYWN0ZXIuICBUaGlzIG1ha2VzICIzaCIKKwlkaWZmZXJlbnQgZnJvbSAiM2RoIiB3aGVuIHRoZSBjdXJzb3IgY3Jvc3NlcyB0aGUgZW5kIG9mIGEgbGluZS4gIFRoaXMKKwlpcyBhbHNvIHRydWUgZm9yICJ4IiBhbmQgIlgiLCBiZWNhdXNlIHRoZXkgZG8gdGhlIHNhbWUgYXMgImRsIiBhbmQKKwkiZGgiLiAgSWYgeW91IHVzZSB0aGlzLCB5b3UgbWF5IGFsc28gd2FudCB0byB1c2UgdGhlIG1hcHBpbmcKKwkiOm1hcCA8QlM+IFgiIHRvIG1ha2UgYmFja3NwYWNlIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIGluIGZyb250IG9mIHRoZQorCWN1cnNvci4KKwlXaGVuICdsJyBpcyBpbmNsdWRlZCwgeW91IGdldCBhIHNpZGUgZWZmZWN0OiAieWwiIG9uIGFuIGVtcHR5IGxpbmUKKwl3aWxsIGluY2x1ZGUgdGhlIDxFT0w+LCBzbyB0aGF0ICJwIiB3aWxsIGluc2VydCBhIG5ldyBsaW5lLgorCU5PVEU6IFRoaXMgb3B0aW9uIGlzIHNldCB0byB0aGUgVmkgZGVmYXVsdCB2YWx1ZSB3aGVuICdjb21wYXRpYmxlJyBpcworCXNldCBhbmQgdG8gdGhlIFZpbSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzIHJlc2V0LgorCisJCQkJCQkqJ3dpbGRjaGFyJyogKid3YycqCisnd2lsZGNoYXInICd3YycJCW51bWJlcgkoVmltIGRlZmF1bHQ6IDxUYWI+LCBWaSBkZWZhdWx0OiBDVFJMLUUpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQ2hhcmFjdGVyIHlvdSBoYXZlIHRvIHR5cGUgdG8gc3RhcnQgd2lsZGNhcmQgZXhwYW5zaW9uIGluIHRoZQorCWNvbW1hbmQtbGluZSwgYXMgc3BlY2lmaWVkIHdpdGggJ3dpbGRtb2RlJy4KKwlUaGUgY2hhcmFjdGVyIGlzIG5vdCByZWNvZ25pemVkIHdoZW4gdXNlZCBpbnNpZGUgYSBtYWNyby4gIFNlZQorCSd3aWxkY2hhcm0nIGZvciB0aGF0LgorCUFsdGhvdWdoICd3YycgaXMgYSBudW1iZXIgb3B0aW9uLCB5b3UgY2FuIHNldCBpdCB0byBhIHNwZWNpYWwga2V5OiA+CisJCTpzZXQgd2M9PEVzYz4KKzwJTk9URTogVGhpcyBvcHRpb24gaXMgc2V0IHRvIHRoZSBWaSBkZWZhdWx0IHZhbHVlIHdoZW4gJ2NvbXBhdGlibGUnIGlzCisJc2V0IGFuZCB0byB0aGUgVmltIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMgcmVzZXQuCisKKwkJCQkJCSond2lsZGNoYXJtJyogKid3Y20nKgorJ3dpbGRjaGFybScgJ3djbScJbnVtYmVyCShkZWZhdWx0OiBub25lICgwKSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwknd2lsZGNoYXJtJyB3b3JrcyBleGFjdGx5IGxpa2UgJ3dpbGRjaGFyJywgZXhjZXB0IHRoYXQgaXQgaXMKKwlyZWNvZ25pemVkIHdoZW4gdXNlZCBpbnNpZGUgYSBtYWNyby4gWW91IGNhbiBmaW5kICJzcGFyZSIgY29tbWFuZC1saW5lCisJa2V5cyBzdWl0YWJsZSBmb3IgdGhpcyBvcHRpb24gYnkgbG9va2luZyBhdCB8ZXgtZWRpdC1pbmRleHwuIE5vcm1hbGx5CisJeW91J2xsIG5ldmVyIGFjdHVhbGx5IHR5cGUgJ3dpbGRjaGFybScsIGp1c3QgdXNlIGl0IGluIG1hcHBpbmdzIHRoYXQKKwlhdXRvbWF0aWNhbGx5IGludm9rZSBjb21wbGV0aW9uIG1vZGUsIGUuZy46ID4KKwkJOnNldCB3Y209PEMtWj4KKwkJOmNtYXAgc3Mgc28gJHZpbS9zZXNzaW9ucy8qLnZpbTxDLVo+Cis8CVRoZW4gYWZ0ZXIgdHlwaW5nIDpzcyB5b3UgY2FuIHVzZSBDVFJMLVAgJiBDVFJMLU4uCisKKwkJCQkJCSond2lsZGlnbm9yZScqICond2lnJyoKKyd3aWxkaWdub3JlJyAnd2lnJwlzdHJpbmcJKGRlZmF1bHQgIiIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHwrd2lsZGlnbm9yZXwKKwkJCWZlYXR1cmV9CisJQSBsaXN0IG9mIGZpbGUgcGF0dGVybnMuICBBIGZpbGUgdGhhdCBtYXRjaGVzIHdpdGggb25lIG9mIHRoZXNlCisJcGF0dGVybnMgaXMgaWdub3JlZCB3aGVuIGNvbXBsZXRpbmcgZmlsZSBvciBkaXJlY3RvcnkgbmFtZXMuCisJVGhlIHBhdHRlcm4gaXMgdXNlZCBsaWtlIHdpdGggfDphdXRvY21kfCwgc2VlIHxhdXRvY21kLXBhdHRlcm5zfC4KKwlBbHNvIHNlZSAnc3VmZml4ZXMnLgorCUV4YW1wbGU6ID4KKwkJOnNldCB3aWxkaWdub3JlPSoubywqLm9iagorPAlUaGUgdXNlIG9mIHw6c2V0Kz18IGFuZCB8OnNldC09fCBpcyBwcmVmZXJyZWQgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcKKwlhIHBhdHRlcm4gZnJvbSB0aGUgbGlzdC4gIFRoaXMgYXZvaWRzIHByb2JsZW1zIHdoZW4gYSBmdXR1cmUgdmVyc2lvbgorCXVzZXMgYW5vdGhlciBkZWZhdWx0LgorCisJCQkJKid3aWxkbWVudScqICond21udScqIConbm93aWxkbWVudScqIConbm93bW51JyoKKyd3aWxkbWVudScgJ3dtbnUnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgaWYgY29tcGlsZWQgd2l0aG91dCB0aGUgfCt3aWxkbWVudXwKKwkJCWZlYXR1cmV9CisJV2hlbiAnd2lsZG1lbnUnIGlzIG9uLCBjb21tYW5kLWxpbmUgY29tcGxldGlvbiBvcGVyYXRlcyBpbiBhbiBlbmhhbmNlZAorCW1vZGUuICBPbiBwcmVzc2luZyAnd2lsZGNoYXInICh1c3VhbGx5IDxUYWI+KSB0byBpbnZva2UgY29tcGxldGlvbiwKKwl0aGUgcG9zc2libGUgbWF0Y2hlcyBhcmUgc2hvd24ganVzdCBhYm92ZSB0aGUgY29tbWFuZCBsaW5lLCB3aXRoIHRoZQorCWZpcnN0IG1hdGNoIGhpZ2hsaWdodGVkIChvdmVyd3JpdGluZyB0aGUgc3RhdHVzIGxpbmUsIGlmIHRoZXJlIGlzCisJb25lKS4gIEtleXMgdGhhdCBzaG93IHRoZSBwcmV2aW91cy9uZXh0IG1hdGNoLCBzdWNoIGFzIDxUYWI+IG9yCisJQ1RSTC1QL0NUUkwtTiwgY2F1c2UgdGhlIGhpZ2hsaWdodCB0byBtb3ZlIHRvIHRoZSBhcHByb3ByaWF0ZSBtYXRjaC4KKwlXaGVuICd3aWxkbW9kZScgaXMgdXNlZCwgIndpbGRtZW51IiBtb2RlIGlzIHVzZWQgd2hlcmUgImZ1bGwiIGlzCisJc3BlY2lmaWVkLiAgImxvbmdlc3QiIGFuZCAibGlzdCIgZG8gbm90IHN0YXJ0ICJ3aWxkbWVudSIgbW9kZS4KKwlJZiB0aGVyZSBhcmUgbW9yZSBtYXRjaGVzIHRoYW4gY2FuIGZpdCBpbiB0aGUgbGluZSwgYSAiPiIgaXMgc2hvd24gb24KKwl0aGUgcmlnaHQgYW5kL29yIGEgIjwiIGlzIHNob3duIG9uIHRoZSBsZWZ0LiAgVGhlIHN0YXR1cyBsaW5lIHNjcm9sbHMKKwlhcyBuZWVkZWQuCisJVGhlICJ3aWxkbWVudSIgbW9kZSBpcyBhYmFuZG9uZWQgd2hlbiBhIGtleSBpcyBoaXQgdGhhdCBpcyBub3QgdXNlZAorCWZvciBzZWxlY3RpbmcgYSBjb21wbGV0aW9uLgorCVdoaWxlIHRoZSAid2lsZG1lbnUiIGlzIGFjdGl2ZSB0aGUgZm9sbG93aW5nIGtleXMgaGF2ZSBzcGVjaWFsCisJbWVhbmluZ3M6CisKKwk8TGVmdD4gPFJpZ2h0PgktIHNlbGVjdCBwcmV2aW91cy9uZXh0IG1hdGNoIChsaWtlIENUUkwtUC9DVFJMLU4pCisJPERvd24+CQktIGluIGZpbGVuYW1lL21lbnUgbmFtZSBjb21wbGV0aW9uOiBtb3ZlIGludG8gYQorCQkJICBzdWJkaXJlY3Rvcnkgb3Igc3VibWVudS4KKwk8Q1I+CQktIGluIG1lbnUgY29tcGxldGlvbiwgd2hlbiB0aGUgY3Vyc29yIGlzIGp1c3QgYWZ0ZXIgYQorCQkJICBkb3Q6IG1vdmUgaW50byBhIHN1Ym1lbnUuCisJPFVwPgkJLSBpbiBmaWxlbmFtZS9tZW51IG5hbWUgY29tcGxldGlvbjogbW92ZSB1cCBpbnRvCisJCQkgIHBhcmVudCBkaXJlY3Rvcnkgb3IgcGFyZW50IG1lbnUuCisKKwlUaGlzIG1ha2VzIHRoZSBtZW51cyBhY2Nlc3NpYmxlIGZyb20gdGhlIGNvbnNvbGUgfGNvbnNvbGUtbWVudXN8LgorCisJSWYgeW91IHByZWZlciB0aGUgPExlZnQ+IGFuZCA8UmlnaHQ+IGtleXMgdG8gbW92ZSB0aGUgY3Vyc29yIGluc3RlYWQKKwlvZiBzZWxlY3RpbmcgYSBkaWZmZXJlbnQgbWF0Y2gsIHVzZSB0aGlzOiA+CisJCTpjbm9yZW1hcCA8TGVmdD4gPFNwYWNlPjxCUz48TGVmdD4KKwkJOmNub3JlbWFwIDxSaWdodD4gPFNwYWNlPjxCUz48UmlnaHQ+Cis8CisJVGhlICJXaWxkTWVudSIgaGlnaGxpZ2h0aW5nIGlzIHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlIGN1cnJlbnQgbWF0Y2gKKwl8aGwtV2lsZE1lbnV8LgorCisJCQkJCQkqJ3dpbGRtb2RlJyogKid3aW0nKgorJ3dpbGRtb2RlJyAnd2ltJwlzdHJpbmcJKFZpbSBkZWZhdWx0OiAiZnVsbCIpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJQ29tcGxldGlvbiBtb2RlIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGNoYXJhY3RlciBzcGVjaWZpZWQgd2l0aAorCSd3aWxkY2hhcicuICBJdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHVwIHRvIGZvdXIgcGFydHMuCUVhY2gKKwlwYXJ0IHNwZWNpZmllcyB3aGF0IHRvIGRvIGZvciBlYWNoIGNvbnNlY3V0aXZlIHVzZSBvZiAnd2lsZGNoYXIuICBUaGUKKwlmaXJzdCBwYXJ0IHNwZWNpZmllcyB0aGUgYmVoYXZpb3IgZm9yIHRoZSBmaXJzdCB1c2Ugb2YgJ3dpbGRjaGFyJywKKwlUaGUgc2Vjb25kIHBhcnQgZm9yIHRoZSBzZWNvbmQgdXNlLCBldGMuCisJVGhlc2UgYXJlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIGVhY2ggcGFydDoKKwkiIgkJQ29tcGxldGUgb25seSB0aGUgZmlyc3QgbWF0Y2guCisJImZ1bGwiCQlDb21wbGV0ZSB0aGUgbmV4dCBmdWxsIG1hdGNoLiAgQWZ0ZXIgdGhlIGxhc3QgbWF0Y2gsCisJCQl0aGUgb3JpZ2luYWwgc3RyaW5nIGlzIHVzZWQgYW5kIHRoZW4gdGhlIGZpcnN0IG1hdGNoCisJCQlhZ2Fpbi4KKwkibG9uZ2VzdCIJQ29tcGxldGUgdGlsbCBsb25nZXN0IGNvbW1vbiBzdHJpbmcuICBJZiB0aGlzIGRvZXNuJ3QKKwkJCXJlc3VsdCBpbiBhIGxvbmdlciBzdHJpbmcsIHVzZSB0aGUgbmV4dCBwYXJ0LgorCSJsb25nZXN0OmZ1bGwiCUxpa2UgImxvbmdlc3QiLCBidXQgYWxzbyBzdGFydCAnd2lsZG1lbnUnIGlmIGl0IGlzCisJCQllbmFibGVkLgorCSJsaXN0IgkJV2hlbiBtb3JlIHRoYW4gb25lIG1hdGNoLCBsaXN0IGFsbCBtYXRjaGVzLgorCSJsaXN0OmZ1bGwiCVdoZW4gbW9yZSB0aGFuIG9uZSBtYXRjaCwgbGlzdCBhbGwgbWF0Y2hlcyBhbmQKKwkJCWNvbXBsZXRlIGZpcnN0IG1hdGNoLgorCSJsaXN0Omxvbmdlc3QiCVdoZW4gbW9yZSB0aGFuIG9uZSBtYXRjaCwgbGlzdCBhbGwgbWF0Y2hlcyBhbmQKKwkJCWNvbXBsZXRlIHRpbGwgbG9uZ2VzdCBjb21tb24gc3RyaW5nLgorCVdoZW4gdGhlcmUgaXMgb25seSBhIHNpbmdsZSBtYXRjaCwgaXQgaXMgZnVsbHkgY29tcGxldGVkIGluIGFsbCBjYXNlcy4KKworCUV4YW1wbGVzOiA+CisJCTpzZXQgd2lsZG1vZGU9ZnVsbAorPAlDb21wbGV0ZSBmaXJzdCBmdWxsIG1hdGNoLCBuZXh0IG1hdGNoLCBldGMuICh0aGUgZGVmYXVsdCkgPgorCQk6c2V0IHdpbGRtb2RlPWxvbmdlc3QsZnVsbAorPAlDb21wbGV0ZSBsb25nZXN0IGNvbW1vbiBzdHJpbmcsIHRoZW4gZWFjaCBmdWxsIG1hdGNoID4KKwkJOnNldCB3aWxkbW9kZT1saXN0OmZ1bGwKKzwJTGlzdCBhbGwgbWF0Y2hlcyBhbmQgY29tcGxldGUgZWFjaCBmdWxsIG1hdGNoID4KKwkJOnNldCB3aWxkbW9kZT1saXN0LGZ1bGwKKzwJTGlzdCBhbGwgbWF0Y2hlcyB3aXRob3V0IGNvbXBsZXRpbmcsIHRoZW4gZWFjaCBmdWxsIG1hdGNoID4KKwkJOnNldCB3aWxkbW9kZT1sb25nZXN0LGxpc3QKKzwJQ29tcGxldGUgbG9uZ2VzdCBjb21tb24gc3RyaW5nLCB0aGVuIGxpc3QgYWx0ZXJuYXRpdmVzLgorCisJCQkJCQkqJ3dpbmFsdGtleXMnKiAqJ3dhaycqCisnd2luYWx0a2V5cycgJ3dhaycJc3RyaW5nCShkZWZhdWx0ICJtZW51IikKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtvbmx5IHVzZWQgaW4gV2luMzIsIE1vdGlmLCBHVEsgYW5kIFBob3RvbiBHVUl9CisJU29tZSBHVUkgdmVyc2lvbnMgYWxsb3cgdGhlIGFjY2VzcyB0byBtZW51IGVudHJpZXMgYnkgdXNpbmcgdGhlIEFMVAorCWtleSBpbiBjb21iaW5hdGlvbiB3aXRoIGEgY2hhcmFjdGVyIHRoYXQgYXBwZWFycyB1bmRlcmxpbmVkIGluIHRoZQorCW1lbnUuICBUaGlzIGNvbmZsaWN0cyB3aXRoIHRoZSB1c2Ugb2YgdGhlIEFMVCBrZXkgZm9yIG1hcHBpbmdzIGFuZAorCWVudGVyaW5nIHNwZWNpYWwgY2hhcmFjdGVycy4gIFRoaXMgb3B0aW9uIHRlbGxzIHdoYXQgdG8gZG86CisJICBubwlEb24ndCB1c2UgQUxUIGtleXMgZm9yIG1lbnVzLiAgQUxUIGtleSBjb21iaW5hdGlvbnMgY2FuIGJlCisJCW1hcHBlZCwgYnV0IHRoZXJlIGlzIG5vIGF1dG9tYXRpYyBoYW5kbGluZy4gIFRoaXMgY2FuIHRoZW4gYmUKKwkJZG9uZSB3aXRoIHRoZSB8OnNpbWFsdHwgY29tbWFuZC4KKwkgIHllcwlBTFQga2V5IGhhbmRsaW5nIGlzIGRvbmUgYnkgdGhlIHdpbmRvd2luZyBzeXN0ZW0uICBBTFQga2V5CisJCWNvbWJpbmF0aW9ucyBjYW5ub3QgYmUgbWFwcGVkLgorCSAgbWVudQlVc2luZyBBTFQgaW4gY29tYmluYXRpb24gd2l0aCBhIGNoYXJhY3RlciB0aGF0IGlzIGEgbWVudQorCQlzaG9ydGN1dCBrZXksIHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgd2luZG93aW5nIHN5c3RlbS4JT3RoZXIKKwkJa2V5cyBjYW4gYmUgbWFwcGVkLgorCUlmIHRoZSBtZW51IGlzIGRpc2FibGVkIGJ5IGV4Y2x1ZGluZyAnbScgZnJvbSAnZ3Vpb3B0aW9ucycsIHRoZSBBTFQKKwlrZXkgaXMgbmV2ZXIgdXNlZCBmb3IgdGhlIG1lbnUuCisJSW4gdGhlIFdpbjMyIHZlcnNpb24sIHRoZSA8RjEwPiBrZXkgaXMgaGFuZGxlZCBsaWtlIHRoaXMgdG9vLCBzaW5jZQorCVdpbmRvd3MgdXNlcyBpdCB0byBzZWxlY3QgYSBtZW51LgorCisJCQkJCQkqJ3dpbmhlaWdodCcqICond2gnKiAqRTU5MSoKKyd3aW5oZWlnaHQnICd3aCcJbnVtYmVyCShkZWZhdWx0IDEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt3aW5kb3dzCisJCQlmZWF0dXJlfQorCU1pbmltYWwgbnVtYmVyIG9mIGxpbmVzIGZvciB0aGUgY3VycmVudCB3aW5kb3cuICBUaGlzIGlzIG5vdCBhIGhhcmQKKwltaW5pbXVtLCBWaW0gd2lsbCB1c2UgZmV3ZXIgbGluZXMgaWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tLglJZiB0aGUKKwljdXJyZW50IHdpbmRvdyBpcyBzbWFsbGVyLCBpdHMgc2l6ZSBpcyBpbmNyZWFzZWQsIGF0IHRoZSBjb3N0IG9mIHRoZQorCWhlaWdodCBvZiBvdGhlciB3aW5kb3dzLiAgU2V0IGl0IHRvIDk5OSB0byBtYWtlIHRoZSBjdXJyZW50IHdpbmRvdworCWFsd2F5cyBmaWxsIHRoZSBzY3JlZW4gKGFsdGhvdWdoIHRoaXMgaGFzIHRoZSBkcmF3YmFjayB0aGF0ICI6YWxsIgorCXdpbGwgY3JlYXRlIG9ubHkgdHdvIHdpbmRvd3MpLiAgU2V0IGl0IHRvIGEgc21hbGwgbnVtYmVyIGZvciBub3JtYWwKKwllZGl0aW5nLgorCU1pbmltdW0gdmFsdWUgaXMgMS4KKwlUaGUgaGVpZ2h0IGlzIG5vdCBhZGp1c3RlZCBhZnRlciBvbmUgb2YgdGhlIGNvbW1hbmRzIHRvIGNoYW5nZSB0aGUKKwloZWlnaHQgb2YgdGhlIGN1cnJlbnQgd2luZG93LgorCSd3aW5oZWlnaHQnIGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgd2luZG93LiAgVXNlICd3aW5taW5oZWlnaHQnIHRvIHNldAorCXRoZSBtaW5pbWFsIGhlaWdodCBmb3Igb3RoZXIgd2luZG93cy4KKworCQkJKid3aW5maXhoZWlnaHQnKiAqJ3dmaCcqIConbm93aW5maXhoZWlnaHQnKiAqJ25vd2ZoJyoKKyd3aW5maXhoZWlnaHQnICd3ZmgnCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJbG9jYWwgdG8gd2luZG93CisJCQl7bm90IGluIFZpfQorCQkJe25vdCBhdmFpbGFibGUgd2hlbiBjb21waWxlZCB3aXRob3V0IHRoZSArd2luZG93cworCQkJZmVhdHVyZX0KKwlLZWVwIHRoZSB3aW5kb3cgaGVpZ2h0IHdoZW4gd2luZG93cyBhcmUgb3BlbmVkIG9yIGNsb3NlZCBhbmQKKwknZXF1YWxhbHdheXMnIGlzIHNldC4gIFNldCBieSBkZWZhdWx0IGZvciB0aGUgfHByZXZpZXctd2luZG93fCBhbmQKKwl8cXVpY2tmaXgtd2luZG93fC4KKwlUaGUgaGVpZ2h0IG1heSBiZSBjaGFuZ2VkIGFueXdheSB3aGVuIHJ1bm5pbmcgb3V0IG9mIHJvb20uCisKKwkJCQkJCSond2lubWluaGVpZ2h0JyogKid3bWgnKgorJ3dpbm1pbmhlaWdodCcgJ3dtaCcJbnVtYmVyCShkZWZhdWx0IDEpCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt3aW5kb3dzCisJCQlmZWF0dXJlfQorCVRoZSBtaW5pbWFsIGhlaWdodCBvZiBhIHdpbmRvdywgd2hlbiBpdCdzIG5vdCB0aGUgY3VycmVudCB3aW5kb3cuCisJVGhpcyBpcyBhIGhhcmQgbWluaW11bSwgd2luZG93cyB3aWxsIG5ldmVyIGJlY29tZSBzbWFsbGVyLgorCVdoZW4gc2V0IHRvIHplcm8sIHdpbmRvd3MgbWF5IGJlICJzcXVhc2hlZCIgdG8gemVybyBsaW5lcyAoaS5lLiBqdXN0IGEKKwlzdGF0dXMgYmFyKSBpZiBuZWNlc3NhcnkuICBUaGV5IHdpbGwgcmV0dXJuIHRvIGF0IGxlYXN0IG9uZSBsaW5lIHdoZW4KKwl0aGV5IGJlY29tZSBhY3RpdmUgKHNpbmNlIHRoZSBjdXJzb3IgaGFzIHRvIGhhdmUgc29tZXdoZXJlIHRvIGdvLikKKwlVc2UgJ3dpbmhlaWdodCcgdG8gc2V0IHRoZSBtaW5pbWFsIGhlaWdodCBvZiB0aGUgY3VycmVudCB3aW5kb3cuCisJVGhpcyBvcHRpb24gaXMgb25seSBjaGVja2VkIHdoZW4gbWFraW5nIGEgd2luZG93IHNtYWxsZXIuICBEb24ndCB1c2UgYQorCWxhcmdlIG51bWJlciwgaXQgd2lsbCBjYXVzZSBlcnJvcnMgd2hlbiBvcGVuaW5nIG1vcmUgdGhhbiBhIGZldworCXdpbmRvd3MuICBBIHZhbHVlIG9mIDAgdG8gMyBpcyByZWFzb25hYmxlLgorCisJCQkJCQkqJ3dpbm1pbndpZHRoJyogKid3bXcnKgorJ3dpbm1pbndpZHRoJyAnd213JwludW1iZXIJKGRlZmF1bHQgMSkKKwkJCWdsb2JhbAorCQkJe25vdCBpbiBWaX0KKwkJCXtub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgK3ZlcnRzcGxpdAorCQkJZmVhdHVyZX0KKwlUaGUgbWluaW1hbCB3aWR0aCBvZiBhIHdpbmRvdywgd2hlbiBpdCdzIG5vdCB0aGUgY3VycmVudCB3aW5kb3cuCisJVGhpcyBpcyBhIGhhcmQgbWluaW11bSwgd2luZG93cyB3aWxsIG5ldmVyIGJlY29tZSBzbWFsbGVyLgorCVdoZW4gc2V0IHRvIHplcm8sIHdpbmRvd3MgbWF5IGJlICJzcXVhc2hlZCIgdG8gemVybyBjb2x1bW5zIChpLmUuIGp1c3QKKwlhIHZlcnRpY2FsIHNlcGFyYXRvcikgaWYgbmVjZXNzYXJ5LiAgVGhleSB3aWxsIHJldHVybiB0byBhdCBsZWFzdCBvbmUKKwlsaW5lIHdoZW4gdGhleSBiZWNvbWUgYWN0aXZlIChzaW5jZSB0aGUgY3Vyc29yIGhhcyB0byBoYXZlIHNvbWV3aGVyZQorCXRvIGdvLikKKwlVc2UgJ3dpbndpZHRoJyB0byBzZXQgdGhlIG1pbmltYWwgd2lkdGggb2YgdGhlIGN1cnJlbnQgd2luZG93LgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgY2hlY2tlZCB3aGVuIG1ha2luZyBhIHdpbmRvdyBzbWFsbGVyLiAgRG9uJ3QgdXNlIGEKKwlsYXJnZSBudW1iZXIsIGl0IHdpbGwgY2F1c2UgZXJyb3JzIHdoZW4gb3BlbmluZyBtb3JlIHRoYW4gYSBmZXcKKwl3aW5kb3dzLiAgQSB2YWx1ZSBvZiAwIHRvIDEyIGlzIHJlYXNvbmFibGUuCisKKwkJCQkJCSond2lud2lkdGgnKiAqJ3dpdycqICpFNTkyKgorJ3dpbndpZHRoJyAnd2l3JwludW1iZXIJKGRlZmF1bHQgMjApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJCQl7bm90IGF2YWlsYWJsZSB3aGVuIGNvbXBpbGVkIHdpdGhvdXQgdGhlICt2ZXJ0c3BsaXQKKwkJCWZlYXR1cmV9CisJTWluaW1hbCBudW1iZXIgb2YgY29sdW1ucyBmb3IgdGhlIGN1cnJlbnQgd2luZG93LiAgVGhpcyBpcyBub3QgYSBoYXJkCisJbWluaW11bSwgVmltIHdpbGwgdXNlIGZld2VyIGNvbHVtbnMgaWYgdGhlcmUgaXMgbm90IGVub3VnaCByb29tLiAgSWYKKwl0aGUgY3VycmVudCB3aW5kb3cgaXMgc21hbGxlciwgaXRzIHNpemUgaXMgaW5jcmVhc2VkLCBhdCB0aGUgY29zdCBvZgorCXRoZSB3aWR0aCBvZiBvdGhlciB3aW5kb3dzLiAgU2V0IGl0IHRvIDk5OSB0byBtYWtlIHRoZSBjdXJyZW50IHdpbmRvdworCWFsd2F5cyBmaWxsIHRoZSBzY3JlZW4uICBTZXQgaXQgdG8gYSBzbWFsbCBudW1iZXIgZm9yIG5vcm1hbCBlZGl0aW5nLgorCVRoZSB3aWR0aCBpcyBub3QgYWRqdXN0ZWQgYWZ0ZXIgb25lIG9mIHRoZSBjb21tYW5kcyB0byBjaGFuZ2UgdGhlCisJd2lkdGggb2YgdGhlIGN1cnJlbnQgd2luZG93LgorCSd3aW53aWR0aCcgYXBwbGllcyB0byB0aGUgY3VycmVudCB3aW5kb3cuICBVc2UgJ3dpbm1pbndpZHRoJyB0byBzZXQKKwl0aGUgbWluaW1hbCB3aWR0aCBmb3Igb3RoZXIgd2luZG93cy4KKworCQkJCQkJKid3cmFwJyogKidub3dyYXAnKgorJ3dyYXAnCQkJYm9vbGVhbgkoZGVmYXVsdCBvbikKKwkJCWxvY2FsIHRvIHdpbmRvdworCQkJe25vdCBpbiBWaX0KKwlUaGlzIG9wdGlvbiBjaGFuZ2VzIGhvdyB0ZXh0IGlzIGRpc3BsYXllZC4gIEl0IGRvZXNuJ3QgY2hhbmdlIHRoZSB0ZXh0CisJaW4gdGhlIGJ1ZmZlciwgc2VlICd0ZXh0d2lkdGgnIGZvciB0aGF0LgorCVdoZW4gb24sIGxpbmVzIGxvbmdlciB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgd2luZG93IHdpbGwgd3JhcCBhbmQKKwlkaXNwbGF5aW5nIGNvbnRpbnVlcyBvbiB0aGUgbmV4dCBsaW5lLglXaGVuIG9mZiBsaW5lcyB3aWxsIG5vdCB3cmFwCisJYW5kIG9ubHkgcGFydCBvZiBsb25nIGxpbmVzIHdpbGwgYmUgZGlzcGxheWVkLglXaGVuIHRoZSBjdXJzb3IgaXMKKwltb3ZlZCB0byBhIHBhcnQgdGhhdCBpcyBub3Qgc2hvd24sIHRoZSBzY3JlZW4gd2lsbCBzY3JvbGwKKwlob3Jpem9udGFsbHkuCisJVGhlIGxpbmUgd2lsbCBiZSBicm9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgaWYgbmVjZXNzYXJ5LiAgU2VlCisJJ2xpbmVicmVhaycgdG8gZ2V0IHRoZSBicmVhayBhdCBhIHdvcmQgYm91bmRhcnkuCisJVG8gbWFrZSBzY3JvbGxpbmcgaG9yaXpvbnRhbGx5IGEgYml0IG1vcmUgdXNlZnVsLCB0cnkgdGhpczogPgorCQk6c2V0IHNpZGVzY3JvbGw9NQorCQk6c2V0IGxpc3RjaGFycys9cHJlY2VkZXM6PCxleHRlbmRzOj4KKzwJU2VlICdzaWRlc2Nyb2xsJywgJ2xpc3RjaGFycycgYW5kIHx3cmFwLW9mZnwuCisKKwkJCQkJCSond3JhcG1hcmdpbicqICond20nKgorJ3dyYXBtYXJnaW4nICd3bScJbnVtYmVyCShkZWZhdWx0IDApCisJCQlsb2NhbCB0byBidWZmZXIKKwlOdW1iZXIgb2YgY2hhcmFjdGVycyBmcm9tIHRoZSByaWdodCB3aW5kb3cgYm9yZGVyIHdoZXJlIHdyYXBwaW5nCisJc3RhcnRzLiAgV2hlbiB0eXBpbmcgdGV4dCBiZXlvbmQgdGhpcyBsaW1pdCwgYW4gPEVPTD4gd2lsbCBiZSBpbnNlcnRlZAorCWFuZCBpbnNlcnRpbmcgY29udGludWVzIG9uIHRoZSBuZXh0IGxpbmUuCisJT3B0aW9ucyB0aGF0IGFkZCBhIG1hcmdpbiwgc3VjaCBhcyAnbnVtYmVyJyBhbmQgJ2ZvbGRjb2x1bW4nLCBjYXVzZQorCXRoZSB0ZXh0IHdpZHRoIHRvIGJlIGZ1cnRoZXIgcmVkdWNlZC4gIFRoaXMgaXMgVmkgY29tcGF0aWJsZS4KKwlXaGVuICd0ZXh0d2lkdGgnIGlzIG5vbi16ZXJvLCB0aGlzIG9wdGlvbiBpcyBub3QgdXNlZC4KKwlTZWUgYWxzbyAnZm9ybWF0b3B0aW9ucycgYW5kIHxpbnMtdGV4dHdpZHRofC4gIHtWaTogd29ya3MgZGlmZmVyZW50bHkKKwlhbmQgbGVzcyB1c2VmdWxseX0KKworCQkJCSAgICond3JhcHNjYW4nKiAqJ3dzJyogKidub3dyYXBzY2FuJyogKidub3dzJyoKKyd3cmFwc2NhbicgJ3dzJwkJYm9vbGVhbgkoZGVmYXVsdCBvbikJCQkqRTM4NCogKkUzODUqCisJCQlnbG9iYWwKKwlTZWFyY2hlcyB3cmFwIGFyb3VuZCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCisJCQkJCQkgICAqJ3dyaXRlJyogKidub3dyaXRlJyoKKyd3cml0ZScJCQlib29sZWFuCShkZWZhdWx0IG9uKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCUFsbG93cyB3cml0aW5nIGZpbGVzLiAgV2hlbiBub3Qgc2V0LCB3cml0aW5nIGEgZmlsZSBpcyBub3QgYWxsb3dlZC4KKwlDYW4gYmUgdXNlZCBmb3IgYSB2aWV3LW9ubHkgbW9kZSwgd2hlcmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgdGV4dCBhcmUKKwlzdGlsbCBhbGxvd2VkLglDYW4gYmUgcmVzZXQgd2l0aCB0aGUgfC1tfCBvciB8LU18IGNvbW1hbmQgbGluZQorCWFyZ3VtZW50LiAgRmlsdGVyaW5nIHRleHQgaXMgc3RpbGwgcG9zc2libGUsIGV2ZW4gdGhvdWdoIHRoaXMgcmVxdWlyZXMKKwl3cml0aW5nIGEgdGVtcG9yYXJ5IGZpbGUuCisKKwkJCQkgICAqJ3dyaXRlYW55JyogKid3YScqIConbm93cml0ZWFueScqIConbm93YScqCisnd3JpdGVhbnknICd3YScJCWJvb2xlYW4JKGRlZmF1bHQgb2ZmKQorCQkJZ2xvYmFsCisJQWxsb3dzIHdyaXRpbmcgdG8gYW55IGZpbGUgd2l0aCBubyBuZWVkIGZvciAiISIgb3ZlcnJpZGUuCisKKwkJCSAgICAgKid3cml0ZWJhY2t1cCcqICond2InKiAqJ25vd3JpdGViYWNrdXAnKiAqJ25vd2InKgorJ3dyaXRlYmFja3VwJyAnd2InCWJvb2xlYW4JKGRlZmF1bHQgb24gd2l0aCB8K3dyaXRlYmFja3VwfCBmZWF0dXJlLCBvZmYKKwkJCQkJb3RoZXJ3aXNlKQorCQkJZ2xvYmFsCisJCQl7bm90IGluIFZpfQorCU1ha2UgYSBiYWNrdXAgYmVmb3JlIG92ZXJ3cml0aW5nIGEgZmlsZS4gIFRoZSBiYWNrdXAgaXMgcmVtb3ZlZCBhZnRlcgorCXRoZSBmaWxlIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiwgdW5sZXNzIHRoZSAnYmFja3VwJyBvcHRpb24gaXMKKwlhbHNvIG9uLiAgUmVzZXQgdGhpcyBvcHRpb24gaWYgeW91ciBmaWxlIHN5c3RlbSBpcyBhbG1vc3QgZnVsbC4gIFNlZQorCXxiYWNrdXAtdGFibGV8IGZvciBhbm90aGVyIGV4cGxhbmF0aW9uLgorCVdoZW4gdGhlICdiYWNrdXBza2lwJyBwYXR0ZXJuIG1hdGNoZXMsIGEgYmFja3VwIGlzIG5vdCBtYWRlIGFueXdheS4KKwlOT1RFOiBUaGlzIG9wdGlvbiBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgd2hlbiAnY29tcGF0aWJsZScgaXMKKwlzZXQuCisKKwkJCQkJCSond3JpdGVkZWxheScqICond2QnKgorJ3dyaXRlZGVsYXknICd3ZCcJbnVtYmVyCShkZWZhdWx0IDApCisJCQlnbG9iYWwKKwkJCXtub3QgaW4gVml9CisJVGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMgdG8gd2FpdCBmb3IgZWFjaCBjaGFyYWN0ZXIgc2VudCB0byB0aGUKKwlzY3JlZW4uICBXaGVuIG5vbi16ZXJvLCBjaGFyYWN0ZXJzIGFyZSBzZW50IHRvIHRoZSB0ZXJtaW5hbCBvbmUgYnkKKwlvbmUuICBGb3IgTVMtRE9TIHBjdGVybSB0aGlzIGRvZXMgbm90IHdvcmsuICBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgo=