ZGlmZiAtLWdpdCBhL3J1bnRpbWUva2RlLXRpcHMgYi9ydW50aW1lL2tkZS10aXBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YjM1MGQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW50aW1lL2tkZS10aXBzCkBAIC0wLDAgKzEsOTMxNCBAQAorKnZpbXRpcHMudHh0KiBUaGlzIGZpbGUgY29tZXMgZnJvbSB0aGUgVmltIE9ubGluZSB0aXAgZGF0YWJhc2UuICBUaGVzZSB0aXBzCit3ZXJlIGRvd25sb2FkZWQgb24gVHVlLCAyNCBTZXAgMjAwMiAxNToyNzoyNiAtMDcwMCBNb3JlIHRpcHMgY2FuIGJlIGZvdW5kIGF0IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfaW5kZXgucGhwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfaW5kZXgucGhwPC9BPjxCUj4KK0EgbmV3IHRpcCBmaWxlIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF9kb3dubG9hZC5waHAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF9kb3dubG9hZC5waHA8L0E+PEJSPgorCitUaGFua3MgZm9yIHVzaW5nIHZpbSBvbmxpbmUuCisKKzxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnRoZSBzdXBlciBzdGFyPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTwvQT48QlI+CisKK1doZW4gYSBkaXNjdXNzaW9uIHN0YXJ0ZWQgYWJvdXQgbGVhcm5pbmcgdmltIG9uIHRoZSB2aW0gbGlzdCBKdWVyZ2VuIFNhbGsKK21lbnRpb25lZCB0aGUgIioiIGtleSBhcyBzb21ldGhpbmcgdGhhdCBoZSB3aXNoZWQgaGUgaGFkIGtub3cgZWFybGllci4gV2hlbgorSSByZWFkIHRoZSBtYWlsIEkgaGFkIHRvIGdvIGhlbHAgb24gd2hhdCB0aGUgaGVjayB0aGUgIioiIGRpZC4gSSBhbHNvIHdpc2gKK0kgaGFkIGtub3duIGVhcmxpZXIuLi4KKworVXNpbmcgdGhlICIqIiBrZXkgd2hpbGUgaW4gbm9ybWFsIG1vZGUgc2VhcmNoZXMgZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IuCisKK0lmIHRoYXQgZG9lc24ndCBzYXZlIHlvdSBhIGxvdCBvZiB0eXBpbmcsIEkgZG9uJ3Qga25vdyB3aGF0IHdpbGwuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmVhc3kKK2VkaXQgb2YgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjwvQT48QlI+CisKK0l0IHdhcyBvZnRlbiBmcnVzdHJhdGluZyB3aGVuIEkgd291bGQgb3BlbiBhIGZpbGUgZGVlcCBpbiB0aGUgY29kZSB0cmVlIGFuZAordGhlbiByZWFsaXplIEkgd2FudGVkIHRvIG9wZW4gYW5vdGhlciBmaWxlIGluIHRoYXQgc2FtZSBkaXJlY3RvcnkuIERvdWdsYXMKK1BvdHRzIHRhdWdodCBtZSBhIG5pY2Ugd2F5IHRvIGRvIHRoaXMuIEFkZCB0aGUgZm9sbG93aW5nIHNuaXBpdCB0byB5b3VyIHZpbXJjOgorCisiICAgRWRpdCBhbm90aGVyIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjdXJyZW50IGZpbGUgIiAgIHVzZXMKK2V4cHJlc3Npb24gdG8gZXh0cmFjdCBwYXRoIGZyb20gY3VycmVudCBmaWxlJ3MgcGF0aCAiICAodGhhbmtzIERvdWdsYXMgUG90dHMpCitpZiBoYXMoInVuaXgiKQorICAgIG1hcCAsZSA6ZSAmbHQ7Qy1SJmd0Oz1leHBhbmQoIiU6cDpoIikgLiAiLyIgJmx0O0NSJmd0OworZWxzZQorICAgIG1hcCAsZSA6ZSAmbHQ7Qy1SJmd0Oz1leHBhbmQoIiU6cDpoIikgLiAiXCIgJmx0O0NSJmd0OworZW5kaWYKKworVGhlbiB3aGVuIHlvdSB0eXBlICxlIGluIG5vcm1hbCBtb2RlIHlvdSBjYW4gdXNlIHRhYiB0byBjb21wbGV0ZSB0byB0aGUKK2ZpbGUuIFlvdSBjYW4gYWxzbyBleHBhbmQgdGhpcyB0byBhbGxvdyBmb3Igc3BpdHRpbmcsIGV0Yy4gVmVyeSB2ZXJ5IG5pY2UuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnVzZQordmltIHRvIHF1aWNrbHkgY29tcGlsZSBqYXZhIGZpbGVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzwvQT48QlI+CisKK0ZvciBhIG51bWJlciBvZiB5ZWFycyBJIHVzZWQgdmltIG9uIGFuIFNHSSBib3guIFdoZW4gSSBsZWZ0IG15IGpvYiBhdCBTR0kKK0kgd2VudCB0byBhIGNvbXBhbnkgdGhhdCBkZXZlbG9wZWQgb24gUENzLiBGb3IgMiB5ZWFycyBJIHVzZWQgSURFcy4gSSB3YXMKK3VuaGFwcHkuIEkgd2FzIGZydXN0cmF0ZWQuIEkgY291bGRuJ3QgZmlndXJlIG91dCB3aHkuIChCZXlvbmQgbXkgbWFjaGluZQorY3Jhc2hpbmcgdHdpY2UgYSBkYXkuKSBGaW5hbGx5IEkgdXBncmFkZWQgdG8gd2luZG93cyAyMDAwIChraW5kIG9mIHN0YWJsZSEpIGFuZAorc3RhcnRlZCB1c2luZyB2aW0gYXMgYW4gSURFLiBBbGwgd2FzIGdvb2QuIEhlcmUgaXMgaG93IHlvdSB1c2UgdmltIHRvIGNvbXBpbGUKK3lvdXIgamF2YToKKworMS4gV2hpbGUgSSdtIHN1cmUgdGhpcyB3b3JrcyB3aXRoIGphdmFjLCBqYXZhYyBpcyBzbG93IHNsb3cgc2xvdy4gU28gZG93bmxvYWQKK3RoZSBKaWtlcyBjb21wbGllciBmaXJzdC4gKEppa2VzIGlzIGZyb20gaWJtLCBzZWFyY2ggb24gZ29vZ2xlIGZvciBqaWtlcworYW5kIHlvdSB3aWxsIGZpbmQgaXQuLmF2YWlsYWJsZSBvbiBtb3N0IHBsYXRmb3Jtcy4pCisKKzIuIEFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgdmltcmM6CisKK3NldCBtYWtlcHJnPWppa2VzIC1ub3dhcm4gLVhzdGRvdXQgK0UgJSBzZXQKK2Vycm9yZm9ybWF0PSVmOiVsOiVjOiUqXGQ6JSpcZDolKlxzJW0KKworMy4gV2hlbiB5b3UgYXJlIGVkaXRpbmcgYSBqYXZhIGZpbGUgdHlwZSA6bWFrZSBhbmQgaXQgd2lsbCBjb21waWxlIHRoZQorY3VycmVudCBmaWxlIGFuZCBqdW1wIHlvdSB0byB0aGUgZmlyc3QgZXJyb3IgaW4gdGhlIGZpbGUgKGlmIGFueSkuIFJlYWQKKyI6aGVscCBxdWlja2ZpeCIgZm9yIGhvdyB0byBtb3ZlIGJldHdlZW4gZXJyb3JzLgorCitUbyBzZXR1cCB5b3VyIGNsYXNzcGF0aCBlbnZpcm9ubWVudCBlaXRoZXIgbGF1bmNoIGd2aW0gZnJvbSBhIHNoZWxsIHRoYXQKK2hhcyB5b3VyIGNsYXNzcGF0aC9wYXRoIHNldHVwIG9yIHVzZSB0aGUgImxldCIgY29tbWFuZCB0byBjb25maWd1cmUgaXQgaW4KK3lvdXIgdmltcmMuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Bbnkgd29yZCBjb21wbGV0aW9uPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDwvQT48QlI+CisKK0VpdGhlciB3aGVuIHByb2dyYW1taW5nIG9yIHdyaXRpbmcsIEkgdGVuZCB0byBoYXZlIHNvbWUgaWRlbnRpZmllcnMgb3Igd29yZHMKK3RoYXQgSSB1c2UgYWxsIHRoZSB0aW1lLiBCeSBzaGVlciBhY2NpZGVudCwgSSBub3RpY2VkIHRoZSAnY3RybC1uJyBjb21tYW5kLAordGhhdCB3aWxsIGF0dGVtcHQgdG8gY29tcGxldGUgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4gSGl0IGl0IG9uY2UsIGFuZCBpdAord2lsbCB0cnkgdG8gY29tcGxldGUgaXQgd2l0aCB0aGUgZmlyc3QgbWF0Y2ggaW4gdGhlIGN1cnJlbnQgZmlsZS4gSWYgdGhlcmUgaXMKK25vIG1hdGNoLCBpdCB3aWxsIChhdCBsZWFzdCBpbiB0aGUgY2FzZSBvZiBDIGNvZGUpIHNlYXJjaCB0aHJvdWdoIGFsbCBmaWxlcworaW5jbHVkZWQgZnJvbSB0aGUgY3VycmVudCBvbmUuIFJlcGVhdGVkIGludm9jYXRpb25zIHdpbGwgY3ljbGUgdGhyb3VnaCBhbGwKK2ZvdW5kIG1hdGNoZXMuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5RdWlja2x5IHNlYXJjaGluZyBmb3IgYSB3b3JkPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NTwvQT48QlI+CisKK1RvIHNlYXJjaCBmb3IgYSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IgaW4gdGhlIGN1cnJlbnQgZmlsZSB5b3UgY2FuIHVzZSBlaXRoZXIKK3RoZSAiKiIgb3IgIiMiIGtleXMuCisKK1RoZSAiKiIga2V5IHdpbGwgc2VhcmNoIGZvciB0aGUgd29yZCBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiB0bwordGhlIGVuZCBvZiB0aGUgZmlsZS4gVGhlICIjIiBrZXkgd2lsbCBzZWFyY2ggZm9yIHRoZSB3b3JkIGZyb20gdGhlIGN1cnJlbnQKK2N1cnNvciBwb3NpdGlvbiB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgorCitOb3RlIHRoYXQgdGhlIGFib3ZlIHR3byBrZXlzIHdpbGwgc2VhcmNoIGZvciB0aGUgd2hvbGUgd29yZCBhbmQgbm90IHRoZQorcGFydGlhbCB3b3JkLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHVzaW5nIHRoZSAmbHQ7d29yZCZndDsgcGF0dGVybiBpbiB0aGUKK3NlYXJjaCBjb21tYW5kcyAoLyBhbmQgPykuCisKK1RvIHNlYXJjaCBmb3IgcGFydGlhbCBtYXRjaGVzLCB5b3UgY2FuIHVzZSB0aGUgImcqIiBhbmQgImcjIiBrZXkgc2VxdWVuY2UuCisKK1lvdSBjYW4gYWxzbyB1c2UgdGhlIG1vdXNlIHRvIHNlYXJjaCBmb3IgYSB3b3JkLiAgVGhpcyB3aWxsIG9ubHkgd29yayBpbgordGhlIEdVSSB2ZXJzaW9uIG9mIFZJTSAoZ3ZpbSkgb3IgYSBjb25zb2xlIHZlcnNpb24gb2YgVklNIGluIGFuIHh0ZXJtIHdoaWNoCithY2NlcHRzIGEgbW91c2UuIEFsc28sIHRoZSAnbW91c2Vtb2RlbCcgc2hvdWxkIGJlIHNldCB0byAnZXh0ZW5kJy4gIEFkZCB0aGUKK2ZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLnZpbXJjOgorCitzZXQgbW91c2Vtb2RlbD1leHRlbmQKKworVG8gc2VhcmNoIGZvciBhIHdvcmQgdW5kZXIgdGhlIGN1cnNvciBmcm9tIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiB0bwordGhlIGVuZCBvZiB0aGUgZmlsZSwgcHJlc3MgdGhlIHNoaWZ0IGtleSBhbmQgY2xpY2sgb24gdGhlIHdvcmQgdXNpbmcgdGhlCitsZWZ0IG1vdXNlIGJ1dHRvbi4gIFRvIHNlYXJjaCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLCBwcmVzcyB0aGUgc2hpZnQKK2tleSBhbmQgY2xpY2sgb24gdGhlIHdvcmQgdXNpbmcgdGhlIHRoZSByaWdodCBtb3VzZSBidXR0b24uCisKK1RvIGdldCBtb3JlIGhlbHAgb24gdGhlc2UsIHVzZQorCis6aGVscCAqIDpoZWxwICMgOmhlbHAgZyogOmhlbHAgZyMgOmhlbHAgJmx0O1MtTGVmdE1vdXNlJmd0OyA6aGVscAorJmx0O1MtUmlnaHRNb3VzZSZndDsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlVzaW5nIHRoZSAlIGtleTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTY8L0E+PEJSPgorCitUaGUgJSBrZXkgY2FuIGJlIHVzZWQKKworMS4gVG8ganVtcCB0byBhIG1hdGNoaW5nIG9wZW5pbmcgb3IgY2xvc2luZyBwYXJlbnRoZXNpcywgc3F1YXJlCisgICBicmFja2V0IG9yIGEgY3VybHkgYnJhY2UgaS5lLiAoW3t9XSkKKzIuIFRvIGp1bXAgdG8gc3RhcnQgb3IgZW5kIG9mIGEgQy1zdHlsZSBjb21tZW50IC8qICovLiAgMy4gVG8ganVtcCB0byBhCittYXRjaGluZyAjaWYsICNpZmRlZiwgI2Vsc2UsICNlbGlmLCAjZW5kaWYgQworICAgcHJlcHJvY2Vzc29yIGNvbmRpdGlvbmFscy4KKworVG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcywgZG8KKworICAgICAgICAgICAgIDpoZWxwICUKKworVGhlICUga2V5IGNhbiBiZSBleHRlbmRlZCB0byBzdXBwb3J0IG90aGVyIG1hdGNoaW5nIHBhaXJzIGJ5IG1vZGlmeWluZyB0aGUKKyJtYXRjaHBhaXJzIiBvcHRpb24uICBSZWFkIHRoZSBoZWxwIG9uCisKKyAgICAgICAgICAgICA6aGVscCBtYXRjaHBhaXJzCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkp1bXBpbmcKK3RvIHRoZSBzdGFydCBhbmQgZW5kIG9mIGEgY29kZSBibG9jazwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTc8L0E+PEJSPgorCitUbyBqdW1wIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBDIGNvZGUgYmxvY2sgKHdoaWxlLCBzd2l0Y2gsIGlmIGV0YyksIHVzZSB0aGUKK1t7IGNvbW1hbmQuCisKK1RvIGp1bXAgdG8gdGhlIGVuZCBvZiBhIEMgY29kZSBibG9jayAod2hpbGUsIHN3aXRjaCwgaWYgZXRjKSwgdXNlIHRoZSBdfQorY29tbWFuZC4KKworVGhlIGFib3ZlIHR3byBjb21tYW5kcyB3aWxsIHdvcmsgZnJvbSBhbnl3aGVyZSBpbnNpZGUgdGhlIGNvZGUgYmxvY2suCisKK1RvIGp1bXAgdG8gdGhlIGJlZ2lubmluZyBvZiBhIHBhcmVudGhlc2lzIHVzZSB0aGUgWyggY29tbWFuZC4KKworVG8ganVtcCB0byB0aGUgZW5kIG9mIGEgcGFyZW50aGVzaXMgdXNlIHRoZSBdKSBjb21tYW5kLgorCitUbyBnZXQgbW9yZSBoZWxwIG9uIHRoZXNlIGNvbW1hbmRzLCBkbworCis6aGVscCBbeyA6aGVscCBdfSA6aGVscCBbKCA6aGVscCBdKQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5KdW1waW5nCit0byB0aGUgZGVjbGFyYXRpb24gb2YgYSBsb2NhbC9nbG9iYWwgdmFyaWFibGU8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04PC9BPjxCUj4KKworJ2dkJyBjb21tYW5kOiBUbyBqdW1wIHRvIHRoZSBkZWNsYXJhdGlvbiBvZiBhIGxvY2FsIHZhcmlhYmxlIGluIGEgQyBwcm9ncmFtLAorcG9zaXRpb24gdGhlIGN1cnNvciBvbiB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgYW5kIHVzZSB0aGUgZ2QgY29tbWFuZC4KKworJ2dEJyBjb21tYW5kOiBUbyBqdW1wIHRvIHRoZSBkZWNsYXJhdGlvbiBvZiBhIGdsb2JhbCB2YXJpYWJsZSBpbiBhIEMgcHJvZ3JhbSwKK3Bvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGFuZCB1c2UgdGhlIGdEIGNvbW1hbmQuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkRpc3BsYXlpbmcKK2EgdmFyaWFibGUvbWFjcm8gZGVmaW5pdGlvbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD05Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTk8L0E+PEJSPgorCitUbyBkaXNwbGF5IHRoZSBkZWZpbml0aW9uIG9mIGEgdmFyaWFibGUsIHBsYWNlIHRoZSBjdXJzb3Igb24gdGhlIHZhcmlhYmxlCithbmQgdXNlIHRoZSBbaSBjb21tYW5kLiAgVG8gZGlzcGxheSBhIG1hY3JvIGRlZmluaXRpb24sIHBsYWNlIHRoZSBjdXJzb3Igb24KK3RoZSBtYWNybyBuYW1lIGFuZCB1c2UgdGhlIFtkIGNvbW1hbmQuICBOb3RlIHRoYXQgdGhlc2UgY29tbWFuZHMgd2lsbCB3b3JrCittb3N0IG9mIHRoZSB0aW1lIChub3QgYWxsIHRoZSB0aW1lKS4gIFRvIGdldCBtb3JlIGhlbHAgb24gdGhlc2UgY29tbWFuZHMsIHVzZQorCis6aGVscCBbaSA6aGVscCBbZAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5KdW1waW5nCit0byBwcmV2aW9zdWx5IHZpc2l0ZWQgbG9jYXRpb25zIGluIGEgZmlsZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDwvQT48QlI+CisKK1ZpbSByZW1lbWJlcnMgYWxsIHRoZSBsb2NhdGlvbnMgdmlzaXRlZCBieSB5b3UgaW4gYSBmaWxlIGluIGEgc2Vzc2lvbi4KK1lvdSBjYW4ganVtcCB0byB0aGUgb2xkZXIgbG9jYXRpb25zIGJ5IHByZXNzaW5nIHRoZSBDdHJsLU8ga2V5LiAgWW91IGNhbgoranVtcCB0byB0aGUgbmV3ZXIgbG9jYXRpb25zIGJ5IHByZXNzaW5nIHRoZSBDdHJsLUkgb3IgdGhlICZsdDtUYWImZ3Q7IGtleS4KKworVG8gZ2V0IG1vcmUgaGVscCBvbiB0aGVzZSBrZXlzLCB1c2UKKworOmhlbHAgQ1RSTC1PIDpoZWxwIENUUkwtSSA6aGVscCBqdW1wLW1vdGlvbnMKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Q29tcGxldGluZword29yZHMgcXVpY2t5IGluIGluc2VydCBtb2RlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExPC9BPjxCUj4KKworSW4gSW5zZXJ0IG1vZGUsIHByZXNzIHRoZSBDdHJsLXAgb3IgQ3RybC1uIGtleSB0byBjb21wbGV0ZSBwYXJ0IG9mIGEgd29yZAordGhhdCBoYXMgYmVlbiB0eXBlZC4KKworVGhpcyBpcyB1c2VmdWwgd2hpbGUgdHlwaW5nIEMgcHJvZ3JhbXMgdG8gY29tcGxldGUgbG9uZyB2YXJpYWJsZSBhbmQKK2Z1bmN0aW9uIG5hbWVzLiAgVGhpcyBhbHNvIGhlbHBzIGluIGF2b2lkaW5nIHR5cGluZyBtaXN0YWtlcy4KKworTm90ZSB0aGF0IHVzaW5nIHRoZSAnY29tcGxldGUnIG9wdGlvbiwgeW91IGNhbiBjb21wbGV0ZSBrZXl3b3JkcyBkZWZpbmVkIGluCitvbmUgb2YgdGhlIGluY2x1ZGUgZmlsZXMsIHRhZyBmaWxlLCBldGMuCisKK1RvIGdldCBtb3JlIGhlbHAgb24gdGhpcywgdXNlCisKKzpoZWxwIGlfQ3RybC1OIDpoZWxwIGlfQ3RybC1QIDpoZWxwIGlucy1jb21wbGV0aW9uIDpoZWxwIGNvbXBsZXRlCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Db252ZXJ0aW5nIHRhYnMgdG8gc3BhY2VzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyPC9BPjxCUj4KKworVG8gaW5zZXJ0IHNwYWNlIGNoYXJhY3RlcnMgd2hlbmV2ZXIgdGhlIHRhYiBrZXkgaXMgcHJlc3NlZCwgc2V0IHRoZQorJ2V4cGFuZHRhYicgb3B0aW9uOgorCisgICAgICAgIHNldCBleHBhbmR0YWIKKworV2l0aCB0aGlzIG9wdGlvbiBzZXQsIGlmIHlvdSB3YW50IHRvIGVudGVyIGEgcmVhbCB0YWIgY2hhcmFjdGVyIHVzZQorQ3RybC1WJmx0O1RhYiZndDsga2V5IHNlcXVlbmNlLgorCitUbyBjb250cm9sIHRoZSBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycyB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgd2hlbiB0aGUgdGFiCitrZXkgaXMgcHJlc3NlZCwgc2V0IHRoZSAndGFic3RvcCcgb3B0aW9uLiAgRm9yIGV4YW1wbGUsIHRvIGluc2VydCA0IHNwYWNlcworZm9yIGEgdGFiLCB1c2U6CisKKyAgICAgICAgc2V0IHRhYnN0b3A9NAorCitBZnRlciB0aGUgJ2V4cGFuZHRhYicgb3B0aW9uIGlzIHNldCwgYWxsIHRoZSBuZXcgdGFiIGNoYXJhY3RlcnMgZW50ZXJlZCB3aWxsCitiZSBjaGFuZ2VkIHRvIHNwYWNlcy4gIFRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBleGlzdGluZyB0YWIgY2hhcmFjdGVycy4KK1RvIGNoYW5nZSBhbGwgdGhlIGV4aXN0aW5nIHRhYiBjaGFyYWN0ZXJzIHRvIG1hdGNoIHRoZSBjdXJyZW50IHRhYiBzZXR0aW5ncywKK3VzZQorCisgICAgICAgIDpyZXRhYgorCitUbyBjaGFuZ2UgdGhlIG51bWJlciBvZiBzcGFjZSBjaGFyYWN0ZXJzIGluc2VydGVkIGZvciBpbmRlbnRhdGlvbiwgdXNlIHRoZQorJ3NoaWZ0d2lkdGgnIG9wdGlvbjoKKworICAgICAgICBzZXQgc2hpZnR3aWR0aD00CisKK0ZvciBleGFtcGxlLCB0byBnZXQgdGhlIGZvbGxvd2luZyBjb2Rpbmcgc3R5bGUsCisgICAgICAgIC0gTm8gdGFicyBpbiB0aGUgc291cmNlIGZpbGUgLSBBbGwgdGFiIGNoYXJhY3RlcnMgYXJlIDQgc3BhY2UKKyAgICAgICAgY2hhcmFjdGVycworCit1c2UgdGhlIGZvbGxvd2luZyBzZXQgb2Ygb3B0aW9uczoKKworICAgICAgICBzZXQgdGFic3RvcD00IHNldCBzaGlmdHdpZHRoPTQgc2V0IGV4cGFuZHRhYgorCitBZGQgdGhlIGFib3ZlIHNldHRpbmdzIHRvIHlvdXIgLnZpbXJjIGZpbGUuCisKK1RvIGdldCBtb3JlIGhlbHAgb24gdGhlc2Ugb3B0aW9ucywgdXNlIDpoZWxwIHRhYnN0b3AgOmhlbHAgc2hpZnR3aWR0aCA6aGVscAorZXhwYW5kdGFiCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5JbmNyZW1lbnRhbCBzZWFyY2g8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTM8L0E+PEJSPgorCitUbyBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIG1hdGNoZWQgc3RyaW5nLCB3aGlsZSB0eXBpbmcgdGhlIHNlYXJjaCBzdHJpbmcsCitzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gaW4gdGhlIC52aW1yYyBmaWxlOgorCisgICAgICAgIHNldCBpbmNzZWFyY2gKKworWW91IGNhbiBjb21wbGV0ZSB0aGUgc2VhcmNoIGJ5IHByZXNzaW5nIHRoZSBFbnRlciBrZXkuICBUbyBjYW5jZWwgdGhlIHNlYXJjaCwKK3ByZXNzIHRoZSBlc2NhcGUga2V5LgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5IaWdobGlnaHRpbmcKK2FsbCB0aGUgc2VhcmNoIHBhdHRlcm4gbWF0Y2hlczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNDwvQT48QlI+CisKK1RvIGhpZ2hsaWdodCBhbGwgdGhlIHNlYXJjaCBwYXR0ZXJuIG1hdGNoZXMgaW4gYSBmaWxlIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbjoKKworICAgICAgICA6c2V0IGhsc2VhcmNoCisKK0FmdGVyIHRoaXMgb3B0aW9uIGlzIHNldCwgaWYgeW91IHNlYXJjaCBmb3IgYSBwYXR0ZXJuLCBhbGwgdGhlIG1hdGNoZXMgaW4KK3RoZSBmaWxlIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgaW4geWVsbG93LgorCitUbyBkaXNhYmxlIHRoZSBoaWdobGlnaHRpbmcgdGVtcG9yYXJpbHksIHVzZSB0aGUgY29tbWFuZAorCisgICAgICAgIDpub2hsc2VhcmNoCisKK1RoaXMgY29tbWFuZCB3aWxsIHJlbW92ZSB0aGUgaGlnaGxpZ2h0aW5nIGZvciB0aGUgY3VycmVudCBzZWFyY2guCitUaGUgaGlnaGxpZ2h0aW5nIHdpbGwgY29tZSBiYWNrIGZvciB0aGUgbmV4dCBzZWFyY2guCisKK1RvIGRpc2FibGUgdGhlIGhpZ2hsaWdodGluZyBjb21wbGV0ZWx5LCBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb246CisKKyAgICAgICAgOnNldCBub2hsc2VhcmNoCisKK0J5IGRlZmF1bHQsIHRoZSBobHNlYXJjaCBvcHRpb24gaXMgdHVybmVkIG9mZi4KKworVG8gZ2V0IG1vcmUgaGVscCBvbiB0aGlzIG9wdGlvbiwgdXNlCisKKzpoZWxwICdobHNlYXJjaCcgOmhlbHAgOm5vaGxzZWFyY2gKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkRpc3BsYXlpbmcgc3RhdHVzIGxpbmUgYWx3YXlzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1PC9BPjxCUj4KKworVG8gZGlzcGxheSB0aGUgc3RhdHVzIGxpbmUgYWx3YXlzLCBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gaW4geW91ciAudmltcmMKK2ZpbGU6CisKKyAgICAgICAgc2V0IGxhc3RzdGF0dXM9MgorCitUaGUgYWR2YW50YWdlIG9mIGhhdmluZyB0aGUgc3RhdHVzIGxpbmUgZGlzcGxheWVkIGFsd2F5cyBpcywgeW91IGNhbiBzZWUKK3RoZSBjdXJyZW50IG1vZGUsIGZpbGUgbmFtZSwgZmlsZSBzdGF0dXMsIHJ1bGVyLCBldGMuCisKK1RvIGdldCBtb3JlIGhlbHAgb24gdGhpcywgdXNlCisKKzpoZWxwIGxhc3RzdGF0dXMKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+QXZvaWRpbmcKK3RoZSAiSGl0IEVOVEVSIHRvIGNvbnRpbnVlIiBwcm9tcHRzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE2PC9BPjxCUj4KKworVG8gYXZvaWQgdGhlICJIaXQgRU5URVIgdG8gY29udGludWUiIHByb21wdCwgdXNlIHRoZSAnc2hvcnRtZXNzJyBvcHRpb24uCitBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLnZpbXJjIGZpbGU6CisKKyAgICBzZXQgc2hvcnRtZXNzPWEKKworQWxzbywgeW91IGNhbiBpbmNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb21tYW5kIGxpbmUgdG8gMgorCisgICAgc2V0IGNtZGhlaWdodD0yCisKK1RoZSBkZWZhdWx0IGNvbW1hbmQgaGVpZ2h0IGlzIDEuCisKK1RvIGdldCBtb3JlIGhlbHAgb24gdGhlc2Ugb3B0aW9ucywgdXNlCisKKzpoZWxwIGhpdC1lbnRlciA6aGVscCBzaG9ydG1lc3MgOmhlbHAgY21kaGVpZ2h0CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkVyYXNpbmcKK3ByZXZpb3N1bHkgZW50ZXJlZCBjaGFyYWN0ZXJzIGluIGluc2VydCBtb2RlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3PC9BPjxCUj4KKworSW4gaW5zZXJ0IG1vZGUsIHRvIGVyYXNlIHByZXZpb3VzbHkgZW50ZXJlZCBjaGFyYWN0ZXJzLCBzZXQgdGhlIGZvbGxvd2luZworb3B0aW9uOgorCisgICAgICAgIHNldCBiYWNrc3BhY2U9MgorCitCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBlbXB0eS4gIElmIHRoaXMgb3B0aW9uIGlzIGVtcHR5LCBpbiBpbnNlcnQgbW9kZSwKK3lvdSBjYW4gbm90IGVyYXNlIGNoYXJhY3RlcnMgZW50ZXJlZCBiZWZvcmUgdGhpcyBpbnNlcnQgbW9kZSBzdGFydGVkLgorVGhpcyBpcyB0aGUgc3RhbmRhcmQgVmkgYmVoYXZpb3IuCisKK1RvIGdldCBtb3JlIGhlbHAgb24gdGhpcywgdXNlCisKKzpoZWxwICdiYWNrc3BhY2UnCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5DbGVhbnVwIHlvdXIgSFRNTDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODwvQT48QlI+CisKK0Zyb20gSm9oYW5uZXMgWmVsbG5lciBvbiB0aGUgdmltIGxpc3Q6CisKK1lvdSBjYW4gdXNlIHZpbSdzIG1ha2VwcmcgYW5kIGVxdWFscHJnIHRvIGNsZWFuIHVwIEhUTUwuIEZpcnN0IGRvd25sb2FkCitodG1sIHRpZHkgZnJvbSA8QSBIUkVGPSJodHRwOi8vd3d3LnczLm9yZy9QZW9wbGUvUmFnZ2V0dC90aWR5Ly4gVGhlbiB1c2UKK3RoZSBmb2xsb3dpbmcgY29tbWFuZHMuIj5odHRwOi8vd3d3LnczLm9yZy9QZW9wbGUvUmFnZ2V0dC90aWR5Ly4gVGhlbiB1c2UKK3RoZSBmb2xsb3dpbmcgY29tbWFuZHMuPC9BPjxCUj4KKwordmltNj8gIGV4ZSAnc2V0bG9jYWwgZXF1YWxwcmc9dGlkeSAtcXVpZXQgLWYgJy4mZXJyb3JmaWxlIHNldGxvY2FsIG1ha2Vwcmc9dGlkeQorLXF1aWV0IC1lICUKKwordmltNT8gIGV4ZSAnc2V0IGVxdWFscHJnPXRpZHkgLXF1aWV0IC1mICcuJmVycm9yZmlsZSBzZXQgbWFrZXByZz10aWR5IC1xdWlldAorLWUgJQorCitBdCB0aGlzIHBvaW50IHlvdSBjYW4gdXNlIG1ha2UgdG8gY2xlYW4gdXAgdGhlIGZ1bGwgZmlsZSBvciB5b3UgY2FuIHVzZSA9Cit0byBjbGVhbiB1cCBzZWN0aW9ucy4KKworOmhlbHAgPSA6aGVscCBlcXVhbHByZyA6aGVscCBtYWtlcHJnCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5saW5lIG51bWJlcnMuLi48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTk8L0E+PEJSPgorCitJIGhhdmUgc3RhcnRlZCBkb2luZyBhbGwgbXkgY29kZSByZXZpZXdzIG9uIGEgbGFwdG9wIGJlY2F1c2Ugb2YgdGhlIG51bWJlcgorY29tbWFuZC4KKworOnNldCBudW1iZXIgd2lsbCBwdXQgbGluZSBudW1iZXJzIGFsb25nIHRoZSBsZWZ0IHNpZGUgb2YgYSB3aW5kb3cKKworOmhlbHAgbnVtYmVyCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkFyZSAqLnN3cAorYW5kICp+IGZpbGVzIGxpdHRlcmluZyB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5PzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMDwvQT48QlI+CisKK0hhdmUgeW91IGV2ZXIgYmVlbiBmcnVzdHJhdGVkIGF0IHN3YXAgZmlsZXMgYW5kIGJhY2t1cHMgY2x1dHRlcmluZyB1cCB5b3VyCit3b3JraW5nIGRpcmVjdG9yeT8KKworVW50aWR5OgorICBvbnMudHh0IG9ucy50eHR+IFJFQURNRSBSRUFETUV+IHRlc3Rlci5weSB0ZXN0ZXIucHl+CisKK0hlcmUgYXJlIGEgY291cGxlIG9mIG9wdGlvbnMgdGhhdCBjYW4gaGVscDoKKworICBzZXQgICBiYWNrdXBkaXI9Li8uYmFja3VwLC4sL3RtcCBzZXQgICBkaXJlY3Rvcnk9LiwuLy5iYWNrdXAsL3RtcAorCitUaGlzIHdheSwgaWYgeW91IHdhbnQgeW91ciBiYWNrdXBzIHRvIGJlIG5lYXRseSBncm91cGVkLCBqdXN0IGNyZWF0ZQorYSBkaXJlY3RvcnkgY2FsbGVkICcuYmFja3VwJyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LiAgVmltIHdpbGwgc3Rhc2gKK2JhY2t1cHMgdGhlcmUuIFRoZSAnZGlyZWN0b3J5JyBvcHRpb24gY29udHJvbHMgd2hlcmUgc3dhcCBmaWxlcyBnby4gSWYgeW91cgord29ya2luZyBkaXJlY3RvcnkgaXMgbm90IHdyaXRhYmxlLCBWaW0gd2lsbCBwdXQgdGhlIHN3YXAgZmlsZSBpbiBvbmUgb2YgdGhlCitzcGVjaWZpZWQgcGxhY2VzLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+ZWFzeSBwYXN0aW5nIHRvIHdpbmRvd3MgYXBwczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTwvQT48QlI+CisKK0luIFZpbSwgdGhlIHVubmFtZWQgcmVnaXN0ZXIgaXMgdGhlICIgcmVnaXN0ZXIsIGFuZCB0aGUgV2luZG93cyBDbGlwYm9hcmQgaXMKK3RoZSAqIHJlZ2lzdGVyLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHlhbmsgc29tZXRoaW5nLCB5b3UgaGF2ZSB0byB5YW5rIGl0IHRvCit0aGUgKiByZWdpc3RlciBpZiB5b3Ugd2FudCB0byBwYXN0ZSBpdCBpbnRvIGEgV2luZG93cyBhcHAuIElmIHRoaXMgaXMgdG9vIG11Y2gKK3Ryb3VibGUsIHNldCB0aGUgJ2NsaXBib2FyZCcgb3B0aW9uIHRvICd1bm5hbWVkJy4gVGhlbiB5b3UgYWx3YXlzIHlhbmsgdG8gKi4KKworU28gcGFzdGluZyB0byB3aW5kb3dzIGFwcHMgZG9lc24ndCByZXF1aXJlIHByZWZpeGluZyAiKiA6CisKKyAgc2V0ICAgY2xpcGJvYXJkPXVubmFtZWQKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+aGFuZGxlCitjb21tb24gdHlwb3MgZm9yIDpjb21tYW5kczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMjwvQT48QlI+CisKK0kgZnJlcXVlbnRseSBob2xkIHRoZSBzaGlmdCBrZXkgZm9yIHRvbyBsb25nIHdoZW4gdHlwaW5nLCBmb3IgaW5zdGFuY2UgOndxLAorYW5kIGVuZCB1cCB3aXRoIDpXcS4gIFZpbSB0aGVuIHdoaW5lcyAiTm90IGFuIGVkaXRvciBjb21tYW5kOiBXcSIKKworSW4gbXkgLnZpbXJjLCBJIGhhdmUgdGF1Z2h0IHZpbSBteSBjb21tb24gdHlwb3M6IGNvbW1hbmQhIFEgIHF1aXQgY29tbWFuZCEgVword3JpdGUgY29tbWFuZCEgV3Egd3EgIiB0aGlzIG9uZSB3b24ndCB3b3JrLCBiZWNhdXNlIDpYIGlzIGFscmVhZHkgYSBidWlsdC1pbgorY29tbWFuZCBjb21tYW5kISBYICB4aXQKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlZpbSB4dGVybSB0aXRsZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzwvQT48QlI+CisKK0NoZWNrIG91dCB5b3VyIC52aW1yYy4gSWYgJ3NldCBub3RpdGxlJyBpcyBhbiBlbnRyeSwgY29tbWVudCBpdCBvdXQgd2l0aAorYSBxdW90YXRpb24gbWFyayAoIikuIE5vdyB5b3VyIHh0ZXJtIHNob3VsZCBpbmhlcml0IHRoZSB0aXRsZSBmcm9tIFZpbS4KK2UuZy4gJ1ZpbSAtIH4vLnZpbXJjJy4gVGhpcyBjYW4gYmUgcXVpdGUgbmljZSB3aGVuIHByb2dyYW1taW5nIGFuZCBlZGl0aW5nCitsb3RzIG9mIGZpbGVzIGF0IHRoZSBzYW1lIHRpbWUuICBieSBbam9uYXNibkB3YW5hZG9vLmRrXQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5jaGFuZ2luZwordGhlIGRlZmF1bHQgc3ludGF4IGhpZ2hsaWdodGluZzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNDwvQT48QlI+CisKKyAgICAgSGVyZSBhcmUgc29tZSBwb2ludGVycyB0byB0aGUgdmltIGRvY3VtZW50YXRpb24uICBOb3RpY2UgdGhhdCB0aGUKKyAgICAgbWVjaGFuaXNtIGlzIGRpZmZlcmVudCBpbiB2aW0gNi4wIGFuZCB2aW0gNS54LgorCisxLiBJIHdhbnQgKi5mb28gZmlsZXMgdG8gYmUgaGlnaGxpZ2h0ZWQgbGlrZSBIVE1MIGZpbGVzLgorCis6aGVscCBuZXctZmlsZXR5cGUgIDxBCitIUkVGPSJodHRwOi8vd3d3LnZpbS5vcmcvaHRtbC9hdXRvY21kLmh0bWwjbmV3LWZpbGV0eXBlIj5odHRwOi8vd3d3LnZpbS5vcmcvaHRtbC9hdXRvY21kLmh0bWwjbmV3LWZpbGV0eXBlPC9BPjxCUj4KKworMi4gSSB3YW50IHRvIGRlZmluZSBhIHN5bnRheCBmaWxlIGZvciAqLmJhciBmaWxlcy4gIFJlYWQgdGhlIGFib3ZlIGFuZCBhbHNvCisKKzpoZWxwIG15c3ludGF4ZmlsZSAgPEEKK0hSRUY9Imh0dHA6Ly93d3cudmltLm9yZy9odG1sL3N5bnRheC5odG1sI215c3ludGF4ZmlsZSI+aHR0cDovL3d3dy52aW0ub3JnL2h0bWwvc3ludGF4Lmh0bWwjbXlzeW50YXhmaWxlPC9BPjxCUj4KKworMy4gSSB3YW50IHRvIG1ha2UgYSBmZXcgY2hhbmdlcyB0byB0aGUgZXhpc3Rpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4KK0RlcGVuZGluZyBvbiB0aGUgeCBpbiA1LngsIGVpdGhlciByZWFkIHRoZSBhYm92ZSBhbmQgcGFnZSBkb3duIGEgZmV3IHNjcmVlbnMsCitvciB5b3UgbWF5IGJlIGFibGUgdG8gc2tpcCByaWdodCB0bworCis6aGVscCBteXN5bnRheGZpbGUtYWRkICA8QQorSFJFRj0iaHR0cDovL3d3dy52aW0ub3JnL2h0bWwvc3ludGF4Lmh0bWwjbXlzeW50YXhmaWxlLWFkZCI+aHR0cDovL3d3dy52aW0ub3JnL2h0bWwvc3ludGF4Lmh0bWwjbXlzeW50YXhmaWxlLWFkZDwvQT48QlI+CisKKzQuIEkgd2FudCB0byBjaGFuZ2Ugc29tZSBvZiB0aGUgY29sb3JzIGZyb20gdGhlaXIgZGVmYXVsdHMuICBBZ2FpbiwgcmVhZAorCis6aGVscCBteXN5bnRheGZpbGUgIDxBCitIUkVGPSJodHRwOi8vd3d3LnZpbS5vcmcvaHRtbC9zeW50YXguaHRtbCNteXN5bnRheGZpbGUiPmh0dHA6Ly93d3cudmltLm9yZy9odG1sL3N5bnRheC5odG1sI215c3ludGF4ZmlsZTwvQT48QlI+CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmNvbG9yCitoaWdobGlnaHRpbmcgb24gdGVsbmV0IChlc3Agdy8gU2VjdXJlQ1JUKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNTwvQT48QlI+CisKK1RoZSBmb2xsb3dpbmcgc2V0dGluZ3MgaW4gLnZpbXJjIHdpbGwgZW5hYmxlIGNvbG9yIGhpZ2hsaWdodGluZyB3aGVuIHVzaW5nCitTZWN1cmVDUlQgYW5kIG1heSB3b3JrIG9uIG90aGVyIHRlbG5ldCBwYWNrYWdlcy4gVGhlIHRlcm1pbmFsIHR5cGUgc2hvdWxkCitiZSBzZWxlY3RlZCBhcyBBTlNJIGFuZCBjb2xvciBlbmFibGVkLgorCitpZiAhaGFzKCJndWlfcnVubmluZyIpIHNldCB0X0NvPTggc2V0IHRfU2Y9XltbMyVwMSVkbSBzZXQgdF9TYj1eW1s0JXAxJWRtIGVuZGlmCisKK1RoZSBeWyBpcyBlbnRlcmVkIGFzICImbHQ7Y3RybC12Jmd0OyZsdDtlc2MmZ3Q7IgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5HZXR0aW5nCityaWQgb2YgXk0gLSBtaXhpbmcgZG9zIGFuZCB1bml4PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI2PC9BPjxCUj4KKworSWYgeW91IHdvcmsgaW4gYSBtaXhlZCBlbnZpcm9ubWVudCB5b3Ugd2lsbCBvZnRlbiBvcGVuIGZpbGVzIHRoYXQgaGF2ZSBeTSdzCitpbiB0aGVtLiBBbiBleGFtcGxlIHdvdWxkIGJlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7IF5NIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsgXk1pbXBvcnQKK2phdmEuaW8uSU9FeGNlcHRpb247IGltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVMaXN0OyBeTSBpbXBvcnQKK29yZy54bWwuc2F4LkhhbmRsZXJCYXNlOyBeTWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247CisKKy8qKl5NCisgICogWE1MSGFuZGxlcjogVGhpcyBjbGFzcyBwYXJzZXMgdGhlIGVsZW1lbnRzIGNvbnRhaW5lZF5NICogd2l0aGluIGEgWE1MCisgIG1lc3NhZ2UgYW5kIGJ1aWxkcyBhIEhhc2h0YWJsZV5NCisKK1tzbmlwXSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90aWNlIHRoYXQgc29tZSBwcm9ncmFtcyBhcmUgbm90IGNvbnNpc3RlbnQgaW4gdGhlIHdheSB0aGV5IGluc2VydCB0aGUgbGluZQorYnJlYWtzIHNvIHlvdSBlbmQgdXAgd2l0aCBzb21lIGxpbmVzIHRoYXQgaGF2ZSBib3RoIGEgY2FycmFnZSByZXR1cm4gYW5kIGEKK15NIGFuZCBzb21lIGxpbmVzIHRoYXQgaGF2ZSBhIF5NIGFuZCBubyBjYXJyYWdlIHJldHVybiAoYW5kIHNvIGJsZW5kIGludG8KK29uZSkuIFRoZXJlIGFyZSB0d28gc3RlcHMgdG8gY2xlYW4gdGhpcyB1cC4KKworMS4gcmVwbGFjZSBhbGwgZXh0cmFuZW91cyBeTToKKworOiVzL15NJC8vZworCitCRSBTVVJFIFlPVSBNQUtFIHRoZSBeTSBVU0lORyAiQ1RSTC1WIENUUkwtTSIgTk9UIEJZIFRZUElORyAiQ0FSUk9UIE0iISBUaGlzCitleHByZXNzaW9uIHdpbGwgcmVwbGFjZSBhbGwgdGhlIF5NJ3MgdGhhdCBoYXZlIGNhcnJpYWdlIHJldHVybnMgYWZ0ZXIgdGhlbQord2l0aCBub3RoaW5nLiAoVGhlIGRvbGxhciB0aWVzIHRoZSBzZWFyY2ggdG8gdGhlIGVuZCBvZiBhIGxpbmUpCisKKzIuIHJlcGxhY2UgYWxsIF5NJ3MgdGhhdCBuZWVkIHRvIGhhdmUgY2FycmlhZ2UgcmV0dXJuczoKKworOiVzL15NLy9nCisKK09uY2UgYWdhaW46IEJFIFNVUkUgWU9VIE1BS0UgdGhlIF5NIFVTSU5HICJDVFJMLVYgQ1RSTC1NIiBOT1QgQlkgVFlQSU5HCisiQ0FSUk9UIE0iISBUaGlzIGV4cHJlc3Npb24gd2lsbCByZXBsYWNlIGFsbCB0aGUgXk0ncyB0aGF0IGRpZG4ndCBoYXZlCitjYXJyaWFnZSByZXR1cm5zIGFmdGVyIHRoZW0gd2l0aCBhIGNhcnJpYWdlIHJldHVybi4KKworVm9pbGEhIENsZWFuIGZpbGUuIE1hcCB0aGlzIHRvIHNvbWV0aGluZyBpZiB5b3UgZG8gaXQgZnJlcXVlbnRseS4KKworOmhlbHAgZmZzIC0gZm9yIG1vcmUgaW5mbyBvbiBmaWxlIGZvcm1hdHMKKwordGhhbmtzIHRvIGpvbmF0aGFuIG1lcnosIGRvdWdsYXMgcG90dHMsIGFuZCBiZW5qaSBmaXNoZXIKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkNvbnZlcnQgaGV4IHRvIGRlYzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzwvQT48QlI+CisKK3doZW4geW91IGNoZWNrIHRoZSBvdXRwdXQgb2Ygb2JqZHVtcCwgeW91J2xsIGNvbmZ1c2VkIGJ5IHRoZSAkMHhGRkZGRkZjCitvcGVyYW5kLCB0aGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZSB0aGUgaGV4Y2FtYWwgdG8gZGVjaW1hbC4gIGZ1bmN0aW9uISBIZXgyRGVjKCkKKyAgICBsZXQgbHN0ciA9IGdldGxpbmUoIi4iKSAgbGV0IGhleHN0ciA9IG1hdGNoc3RyKGxzdHIsICcweFthLWYwLTldKycpCisgICAgd2hpbGUgaGV4c3RyICE9ICIiCisgICAgICAgIGxldCBoZXhzdHIgPSBoZXhzdHIgKyAwIGV4ZSAncyMweFthLWYwLTldKyMnLmhleHN0ci4iIyIgbGV0IGxzdHIgPQorICAgICAgICBzdWJzdGl0dXRlKGxzdHIsICcweFthLWYwLTldKycsIGhleHN0ciwgIiIpIGxldCBoZXhzdHIgPSBtYXRjaHN0cihsc3RyLAorICAgICAgICAnMHhbYS1mMC05XSsnKQorICAgIGVuZHdoaWxlCitlbmRmdW5jdGlvbiB1c2FnZTogNSw4Y2FsbCBIZXgyRGVjKCkKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+YWRkIGEgbGluZS1udW1iZXIKK3RvIGV2ZXJ5IGxpbmUgd2l0aG91dCBjYXQgb3IgYXdrIGFsaWtlIHV0aWxpdGllcy48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjg8L0E+PEJSPgorCitXaXRoIFVuaXgtbGlrZSBlbnZpcm9ubWVudCwgeW91IGNhbiB1c2UgY2F0IG9yIGF3ayB0byBnZW5lcmF0ZSBhIGxpbmUgbnVtYmVyCitlYXNpbHksIGJlY2F1c2UgdmltIGhhcyBhIGZyaWVuZGx5IGludGVyZmFjZSB3aXRoIHNoZWxsLCBzbyBldmVyeXRoaW5nIHdvcmsKK2luIHZpbSBhcyB3ZWxsIGFzIGl0IGRvZXMgaW4gc2hlbGwuICA6JSFjYWxsIC1uIG9yIDolIWF3ayAne3ByaW50IE5SLCQwfScKKworQnV0LCBpZiB5b3UgdXNlIHZpbSBpbiBNUy1ET1MsIG9mIHdpbjl4LCB3aW4yMDAwLCB5b3UgbG9zcyB0aGVzZSB0b29raXQuCitoZXJlIGlzIGEgdmVyeSBzaW1wbGUgd2F5IHRvIGFyY2hpdmUgdGhpcyBvbmx5IGJ5IHZpbTogZnUhIExpbmVJdCgpCisgIGV4ZSAiOnMvXi8iLmxpbmUoIi4iKS4iLyIKK2VuZGYKKworV2VsbCwgYSBzZXF1ZW5jZSBjb21wb3NlZCB3aXRoIGFscGhhYmV0IGlzIGFzIGVhc3kgYXMgYWJvdmU6CisgIGV4ZSAicy9eLyIubnIyY2hhcihsaW5lKCIuIikpLiIvIgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5yZXZlcnNlCithbGwgdGhlIGxpbmUgd2l0aCBvbmx5IDcga2V5c3Ryb2tlIGluIHZpbTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTwvQT48QlI+CisKKzpnL14vbTAgd2VsbCwgMS4gOiBicmluZyB5b3UgdG8gY29tbWFuZC1saW5lIG1vZGUoYWxzbyBrbm93biBhcyBleC1tb2RlKQorZnJvbSBub3JtYWwtbW9kZShhbHNvIGtub3duIGFzIGNvbW1hbmQgbW9kZSkuICAyLiBnIG1lYW5zIHlvdSdsbCB0YWtlIGFuCithY3Rpb24gdGhyb3VnaCB0aGUgd2hvbGUgZmlsZSwgZ2VuZXJhbGx5IHBlcmZvcm0gYSBzZWFyY2gsIGB2JyBhbHNvIHBlcmZvcm0KK2Egc2VhcmNoIGJ1dCBpdCBtYXRjaCB0aGUgbGluZSBub3QgbWF0Y2ggdGhlIGNhbm9uaWNhbCBleHByZXNzaW9uLiAgMy4gLworYmVnaW5zIHRoZSByZWd1bGFyIGV4cHJlc3MgNC4gXiBpcyBhIHNwZWNpYWwgY2hhcmFjdGVyIHJlc3BlY3QgdGhlIHN0YXJ0CitvZiBhIGxpbmUuICA1LiB0aGUgc2Vjb25kIC8gZW5kcyB0aGUgcmVndWxhciBleHByZXNzIGFuZCBpbmRpY2F0ZSB0aGF0IHRoZQorcmVtYWlucyBpcyBhY3Rpb24gdG8gZG8uICA2LiBtIG1lYW5zIG1vdmUsIGB0YCBhbmQgYGNvJyBmb3IgY29weSwgYGQnIGZvcgorZGVsZXRlIDcuIDAgaXMgdGhlIGRlc3RpbmF0aW9uIGxpbmUuCisKK3lvdSBjYW4gdXNlIDpnL3JlZ2V4cC90JCB0byBmaWx0ZXIgYWxsIGxpbmVzIGFuZCBwaWNrIHRoZSBtYXRjaCBsaW5lIHRvZ2V0aGVyCithbmQgY29weSB0aGVtIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBvciA6Zy9yZWdleHAveSBBIHRvIHB1dCB0aGVtIGludG8gYQorcmVnaXN0ZXIobm90IGVheCwgZWJ4Li4uKQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+SW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIG51bWJlcnM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzA8L0E+PEJSPgorCitUbyBpbmNyZWFzZSBhIG51bWJlciB1bmRlciBvciBuZWFyZXN0IHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yLCBnbyB0bworTm9ybWFsIG1vZGUgYW5kIHR5cGU6CisgICAgQ3RybC1BCisKK1RvIGRlY3JlYXNlLCB0eXBlOgorICAgIEN0cmwtWAorCitVc2luZyB0aGlzIGluIGEgbWFjcm8gc2ltcGxpZmllcyBnZW5lcmF0aW5nIG51bWJlciBzZXF1ZW5jZXMgYSBsb3QuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5GaW5kIGFuZCBSZXBsYWNlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxPC9BPjxCUj4KKworVG8gZmluZCBhbmQgcmVwbGFjZSBvbmUgb3IgbW9yZSBvY2N1cmVuY2VzIG9mIGEgZ2l2ZW4gdGV4dCBwYXR0ZXJuIHdpdGggYQorbmV3IHRleHQgc3RyaW5nLCB1c2UgdGhlIHNbdWJzdGl0dXRlXSBjb21tYW5kLgorCitUaGVyZSBhcmUgYSB2YXJpZXR5IG9mIG9wdGlvbnMsIGJ1dCB0aGVzZSBhcmUgd2hhdCB5b3UgbW9zdCBwcm9iYWJseSB3YW50OgorCis6JXMvZm9vL2Jhci9nICAgICAgICAgICBmaW5kIGVhY2ggb2NjdXJhbmNlIG9mICdmb28nIGFuZCByZXBsYWNlIGl0IHdpdGgKKydiYXInIHdpdGhvdXQgYXNraW5nIGZvciBjb25maXJtYXRpb24KKworOiVzL2Zvby9iYXIvZ2MgICAgICAgICAgZmluZCBlYWNoIG9jY3VyYW5jZSBvZiAnZm9vJyBhbmQgcmVwbGFjZSBpdCB3aXRoCisnYmFyJyBhc2tpbmcgZm9yIGNvbmZpcm1hdGlvbiBmaXJzdAorCis6JXMvJmx0O2ZvbyZndDsvYmFyL2djICAgICAgZmluZCAobWF0Y2ggZXhhY3Qgd29yZCBvbmx5KSBhbmQgcmVwbGFjZSBlYWNoCitvY2N1cmFuY2Ugb2YgJ2Zvbycgd2l0aCAnYmFyJworCis6JXMvZm9vL2Jhci9nY2kgICAgICAgICBmaW5kIChjYXNlIGluc2Vuc2l0aXZlKSBhbmQgcmVwbGFjZSBlYWNoIG9jY3VyYW5jZSBvZgorJ2Zvbycgd2l0aCAnYmFyJworCis6JXMvZm9vL2Jhci9nY0kgICAgICAgICBmaW5kIChjYXNlIHNlbnNpdGl2ZSkgYW5kIHJlcGxhY2UgZWFjaCBvY2N1cmFuY2Ugb2YKKydmb28nIHdpdGggJ2JhcicKKworTkI6IFdpdGhvdXQgdGhlICdnJyBmbGFnLCByZXBsYWNlbWVudCBvY2N1cnMgb25seSBmb3IgdGhlIGZpcnN0IG9jY3VycmVuY2UKK2luIGVhY2ggbGluZS4KKworRm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBhbmQgc29tZSBtb3JlIGludGVyZXN0aW5nIGV4YW1wbGVzIG9mIHRoZSBzdWJzdGl0dXRlCitjb21tYW5kIHJlZmVyIHRvCisKKzpoZWxwIHN1YnN0aXR1dGUKKworU2VlIGFsc286CisKKzpoZWxwIGNtZGxpbmUtcmFuZ2VzIDpoZWxwIHBhdHRlcm4gOmhlbHAgZ2RlZmF1bHQKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+V3JpdGUKK3lvdXIgb3duIHZpbSBmdW5jdGlvbihzY3JpcHRzKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMjwvQT48QlI+CisKK2NvbXBhcmUgdG8gQyBhbmQgc2hlbGwoYmFzaCksIGhlcmVpbiBpcyBzb21lIHZpbSBzcGVjaWZpY3MgYWJvdXQgdmltLXNjcmlwdDoKKzEuIEEgZnVuY3Rpb24gbmFtZSBtdXN0IGJlIGNhcGl0YWxpemVkLgorICAgaGV4MmRlYyBpcyBpbnZhbGlkIEhleDJkZWMgaXMgdmFsaWQgd2hpbGUgaW4gYyBhbmQgc2hlbGwoYmFzaCksIGJvdGgKKyAgIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIGlzIGFsbG93ZWQuCisyLiBob3cgdG8gcmVmZXJlbmNlIHRoZSBwYXJhbWV0ZXJzCisgICBmdSEgSGV4MmRlYyh2YXIxLCB2YXIyKQorICAgIGxldCBzdHI9YTp2YXIxIGxldCBzdHIyPWE6dmFyMgorICAgeW91IG11c3QgcHJlZml4IHRoZSBwYXJhbWV0ZXIgbmFtZSB3aXRoICJhOiIsIGFuZCBhOnZhcjEgaXRzZWxmIGlzIHJlYWQtb25seQorICAgaW4gYywgeW91IHJlZmVyZW5jZSB0aGUgcGFyYW1ldGVyIGRpcmVjdGx5IGFuZCB0aGUgcGFyYW1ldGVyIGlzIHdyaXRhYmxlLgorMy4gaG93IHRvIGltcGxlbWVudCB2YXJpYWJsZSBwYXJhbWV0ZXIKKyAgIGZ1ISBIZXgyZGVjKGZpeHBhcmEsIC4uLikKKyAgICAgYTowIGlzIHRoZSByZWFsIG51bWJlciBvZiB0aGUgdmFyaWFibGUgcGFyYW1ldGVyIHdoZW4geW91IGludm9rZSB0aGUKKyAgICAgZnVuY3Rpb24sIHdpdGggOkhleDJkZWMoImFzZGYiLCA0LDUsNiksIGE6MD0zLCBhbmQgYToxPTQgYToyPTUgYTozPTYKKyAgIHlvdSBjYW4gY29tYmluZSAiYToiIGFuZCB0aGUgbnVtYmVyIHRvIGdldCB0aGUgdmFsdWUgd2hpbGUgaSZsdDthOjAKKyAgICAgZXhlICJsZXQgbnVtPWE6Ii5pIGxldCBpPWkrMQorICAgZW5kd2hpbGUgaW4gYywgdGhlIGZ1bmN0aW9uIGdldCB0aGUgcmVhbCBudW1iZXIgYnkgY2hlY2tpbmcgdGhlIGFkZGl0aW9uYWwKKyAgIHBhcmFtZXRlciBzdWNoIGFzIHByaW50ZiBmYW1pbHksIG9yIGJ5IGNoZWNraW5nIHRoZSBzcGVjaWFsIHZhbHVlIHN1Y2gKKyAgIGFzIE5VTEwKKzQuIHdoZXJlIGlzIHRoZSB2aW0tbGlicmFyeQorICB5ZXMsIHZpbSBoYXMgaXRzIG93biBmdW5jdGlvbi1saWJyYXJ5LCBqdXN0IGxpa2UgKi5hIGluIGMgOmhlbHAgZnVuY3Rpb25zCis1LiBjYW4gSSB1c2UgKz0gb3IgKysgb3BlcmF0b3I/CisgIE5vcCwgKz0gYW5kICsrIChhbmQgLT0sIC0tIGFuZCBzbyBvbilvcGVyYXRvciBnb25lIGF3YXkgaW4gdmltLgorNi4gSG93IGNhbiBJIGFzc2lnbiBhIHZhbHVlIHRvIGEgdmFyaWFibGVzIGFuZCBmZXRjaCBpdHMgdmFsdWU/CisgICBsZXQgdmFyX05hbWU9dmFsdWUgbGV0IHZhcjE9dmFyMiBsaWtlIGl0IGRvZXMgaW4gYywgZXhjZXB0IHlvdSBtdXN0IHVzZQorICAgbGV0IGtleXdvcmQKKzcuIENhbiBJIHVzZSBhbnkgZXgtbW9kZSBjb21tYW5kIGluIGEgZnVuY3Rpb24/CisgIEFzIEkga25vdywgeWVzLCBqdXN0IHVzZSBpdCBkaXJlY3RseSwgYXMgaWYgZXZlcnkgbGluZSB5b3UgdHlwZSBhcHBlYXJzCisgIGluIHRoZSBmYW1pbGFyIDoKKzguIENhbiBJIGNhbGwgYSBmdW5jdGlvbiByZWN1cnNlPworICBZZXMsIGJ1dCB1c2UgaXQgY2FyZWZ1bGx5IHRvIGF2b2lkIGluZmludGUgY2FsbC4KKzkuIENhbiBJIGNhbGwgYW5vdGhlciBmdW5jdGlvbiBpbiBhIGZ1bmN0aW9uPworICBDb3Vyc2UsIGxpa2UgQyBkb2VzLgorMTAuIE11c3QgSSBjb21waWxlIHRoZSBmdW5jdGlvbj8KKyAgIE5vLCB5b3UgbmVlZG4ndCBhbmQgeW91IGNhbid0LCBqdXN0IDpzbyBzY3JpcHRfbmFtZSwgYWZ0ZXIgdGhpcyB5b3UgY2FuCisgICBjYWxsIHRoZSBmdW5jdGlvbiBmcmVlbHkuCisxMS4gSXMgaXQgaGFzIGludGVnZXIgYW5kIGNoYXIgb3IgZmxvYXQgZGF0YSB0eXBlPworICAgTm8sIGxpa2UgcGVybCwgdmltIHNjcmlwdCBqdXN0aWZ5IHRoZSB2YXJpYWJsZSB0eXBlIGRlcGVuZCB1cG9uIHRoZSBjb250ZXh0CisgICA6bGV0IGE9MSA6bGV0IGE9YS4iYXNkZiIgOmVjaG8gYSB5b3UnbGwgZ2V0IGAxYXNkZicgOmxldCBhPTEgOmxldCBhPWErMgorICAgOmVjaG8gYSB5b3UnbGwgZ2V0IDMgQnV0IGl0IGRpZmZlcnMgZnJvbSBwZXJsLgorMTIuIE11c3QgSSBhcHBlbmQgYSBgOycgaW4gZXZlcnkgc3RhdGVtZW50PworICAgTm8sIG5ldmVyIGRvIHRoYXQuICA7IGlzIHJlcXVpcmVkIGluIEMsIGFuZCBvcHRpb25hbCBpbiBzaGVsbCBmb3IgZWFjaAorICAgc3RhdGVtZW50IGluIGEgYWxvbmUgbGluZS4gIEJ1dCBpcyBmb3JiaWRkZW4gaW4gdmltLiAgaWYgeW91IHdhbnQgY29tYmluZQorICAgc2VydmFscyBzdGF0ZW1lbnQgaW4gb25lIHNpbmdsZSBsaW5lLCB1c2UgYHwnLiAgVGFrZSB5b3VyIG1pbmQgdGhhdCBldmVyeQorICAgc3RhdGVtZW50IGFwcGVhcnMgaW4gZnVuY3Rpb24gc2hvdWxkIGJlIHZhbGlkIGluIGV4LW1vZGUoZXhjZXB0IGZvciBzb21lCisgICBzcGVjaWFsIHN0YXRlbWVudCkuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnRvZ2dsZQorb2ZmIHRoZSBsaW5lLW51bWJlciB3aGVuIGVudGVyIG9uLWxpbmUgaGVscDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMzwvQT48QlI+CisKK0kgbGlrZSB0aGUgbGluZS1udW1iZXIgZm9yIG15c2VsZiBlZGl0aW5nLiBCdXQgSSBoYXRlIGl0IGluIG9uLWxpbmUgaGVscAorcGFnZSBiZWNhdXNlIGl0IGZvcmNlIHRoZSBzY3JlZW4gd3JhcHBlZC4gIDphdSBmaWxldHlwZSBoZWxwIDpzZSBub251CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmNvbnRyb2wKK3RoZSBwb3NpdGlvbiBvZiB0aGUgbmV3IHdpbmRvdzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zNCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zNDwvQT48QlI+CisKKzpzZSBzcGxpdGJlbG93IG1ha2UgdGhlIG5ldyB3aW5kb3cgYXBwZWFycyBiZWxvdyB0aGUgY3VycmVudCB3aW5kb3cuCis6c2Ugc3BsaXRyaWdodCBtYWtlIHRoZSBuZXcgd2luZG93IGFwcGVhcnMgaW4gcmlnaHQuKG9ubHkgNi4wIHZlcnNpb24gY2FuCitkbyBhIHZzcGxpdCkKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+dHJhbnNsYXRlCisvLyBzdHlsZSBjb21tZW50IHRvIC8qICAqL2FuZCB2aWNlIHZlc2E8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzU8L0E+PEJSPgorCit0aGUgYHwnIGNvbmNhdGVuYXRlIHNlcnZhbHMgZXgtY29tbWFuZCBpbiBvbmUgbGluZS4gIEl0J3MgdGhlIGtleSB0byB0cmFuc2xhdGUKKy8vIHN0eWxlIGNvbW1lbnRzIHRvIC8qICovIHN0eWxlIDpnI15zey19Ly8jcyMjLyojIHwgcyMkIyovIworCit0aGUgYHwnIGtlZXAgdGhlIGN1cnJlbnQgbGluZSBtYXRjaHMgXnN7LX0vLyB0byBwZXJmb3JtIHMjJCMqLworCisvKiAuLi4gKi8gLS0tJmd0OyAvL3N0eWxlIDpnIy8qKC57LX0pKi8jLy8xIworCisvKiAuLi4uCisgICAuLi4uICAuLi4uLgorKi8gPT09PT0mZ3Q7IC8vLi4uLi4uICAvLy4uLi4uLiAgLy8uLi4uLi4gIHN0eWxlOiA/IEFueW9uZSBpbXBsZW1lbnQgaXQ/CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Vc2luZyBHbnUtaW5mbyBoZWxwIGluIHZpbTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zNiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zNjwvQT48QlI+CisKK0sgaW4gbm9ybWFsIGJyaW5nIHlvdSB0aGUgbWFuIHBhZ2UgYWJvdXQgdGhlIGtleXdvcmQgdW5kZXIgY3VycmVudCBjdXJzb3IuCis6bm5vcmVtYXAgJmx0O0YxJmd0OyA6ZXhlICI6IWluZm8gIi5leHBhbmQoIiZsdDtjd29yZCZndDsiKSBOb3cgcHJlc3MgRjEKK3doaWxlIHRoZSBjdXJzb3IgaXMgaG9sZCBieSBhIGtleXdvcmQgc3VjaCBhcyBwcmludGYgd2lsbCBicmluZyB5b3UgdG8KK0dudS1pbmZvIGhlbHAgcGFnZSA6aCAmbHQ7RjEmZ3Q7IDpoIG5ub3JlbWFwCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlRoZQorYmFzaWMgb3BlcmF0aW9uIGFib3V0IHZpbS1ib29sZWFuIG9wdGlvbmFsczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zNyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zNzwvQT48QlI+CisKKzpzZXQgbnVtYmVyIHN3aXRjaCB0aGUgbnVtYmVyIG9uIDpzZXQgbm9udW1iZXIgc3dpdGNoIGl0IG9mZiA6c2V0IGludm51bWJlcgorb3IgOnNldCBudW1iZXIhICBzd2l0Y2ggaXQgaW52ZXJzZSBhZ2FpbnN0IHRoZSBjdXJyZW50IHNldHRpbmcgOnNldCBudW1iZXImCitnZXQgdGhlIGRlZmF1bHQgdmFsdWUgdmltIGFzc3Vtcy4KKworcmVwbGFjZSBudW1iZXIgd2l0aCBhbnkgbGVnYWwgdmltLWJvb2xlYW4gb3B0aW9uYWxzLCB0aGV5IGFsbCB3b3JrcyB3ZWxsLgorZm9yIHZpbS1ub24tYm9vbGVhbiBvcHRpb25hbHMgOnNldCBvcHRpb25hbCYgYWxzbyB3b3JrcyBwcm9wZXJseS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Q3Vyc29yCitvbmUgbGluZSBhdCBhIHRpbWUgd2hlbiA6c2V0IHdyYXA8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mzg8L0E+PEJSPgorCitJZiB5b3VyIHRpZXJkIG9mIHRoZSBjdXJzb3IganVtcGluZyBwYXN0IDUgbGluZXMgd2hlbiA6c2V0IHdyYXAgdGhlbiBhZGQKK3RoZXNlIG1hcHBpbmdzIHRvIHlvdSB2aW1yYyBmaWxlLgorCitubm9yZW1hcCBqIGdqIG5ub3JlbWFwIGsgZ2sgdm5vcmVtYXAgaiBnaiB2bm9yZW1hcCBrIGdrIG5ub3JlbWFwICZsdDtEb3duJmd0OworZ2ogbm5vcmVtYXAgJmx0O1VwJmd0OyBnayB2bm9yZW1hcCAmbHQ7RG93biZndDsgZ2ogdm5vcmVtYXAgJmx0O1VwJmd0OworZ2sgaW5vcmVtYXAgJmx0O0Rvd24mZ3Q7ICZsdDtDLW8mZ3Q7Z2ogaW5vcmVtYXAgJmx0O1VwJmd0OyAmbHQ7Qy1vJmd0O2drCisKK1doYXQgdGhleSBkbyBpcyByZW1hcCB0aGUgY3Vyc29yIGtleXMgdG8gdXNlIHRoZXJlIGBnJyBlcXV2aWxhbnQuIFNlZSA6aGVscCBnagorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+VW5kbyBhbmQgUmVkbzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zOSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zOTwvQT48QlI+CisKK1RvIHVuZG8gcmVjZW50IGNoYW5nZXMsIHVzZSB0aGUgdVtuZG9dIGNvbW1hbmQ6CisKK3UgICAgICAgICAgICAgIHVuZG8gbGFzdCBjaGFuZ2UgKGNhbiBiZSByZXBlYXRlZCB0byB1bmRvIHByZWNlZGluZyBjb21tYW5kcykKK1UgICAgICAgICAgICAgIHJldHVybiB0aGUgbGluZSB0byBpdHMgb3JpZ2luYWwgc3RhdGUgKHVuZG8gYWxsIGNoYW5nZXMgaW4KK2N1cnJlbnQgbGluZSkgQ1RSTC1SICAgICAgICAgUmVkbyBjaGFuZ2VzIHdoaWNoIHdlcmUgdW5kb25lICh1bmRvIHRoZSB1bmRvJ3MpLgorCitGb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSB1bmRvL3JlZG8gY29tbWFuZHMgcmVmZXIgdG8KKworOmhlbHAgdW5kbworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+SW5zZXJ0IGEgZmlsZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD00MCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD00MDwvQT48QlI+CisKK1RvIGluc2VydCB0aGUgY29udGVudHMgb2YgYSBmaWxlIChvciB0aGUgb3V0cHV0IG9mIGEgc3lzdGVtIGNvbW1hbmQpIGludG8KK3RoZSBjdXJyZW50IGJ1ZmZlciwgdXNlIHRoZSByW2VhZF0gY29tbWFuZDoKKworRXhhbXBsZXM6CisKKzpyIGZvby50eHQgICAgICAgIGluc2VydHMgdGhlIGZpbGUgZm9vLnR4dCBiZWxvdyB0aGUgY3Vyc29yCisKKzowciBmb28udHh0ICAgICAgIGluc2VydHMgdGhlIGZpbGUgZm9vLnR4dCBhYm92ZSB0aGUgZmlyc3QgbGluZQorCis6ciAhbHMgICAgICAgICAgICBpbnNlcnRzIGEgbGlzdGluZyBvZiB5b3VyIGRpcmVjdG9yeSBiZWxvdyB0aGUgY3Vyc29yCisKKzokciAhcHdkICAgICAgICAgIGluc2VydHMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgYmVsb3cgdGhlIGxhc3QgbGluZQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcltlYWRdIGNvbW1hbmQgcmVmZXIgdG86CisKKzpoZWxwIHJlYWQKKworU2VlIGFsc286CisKKzpoZWxwIGNtZGxpbmUtcmFuZ2VzIDpoZWxwICFjbWQKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Q29tbWFuZC1oaXN0b3J5CitmYWNpbGl0aWVzIGZvciBPcmFjbGUvc3FscGx1cyB1c2VyPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTQxIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTQxPC9BPjxCUj4KKworCUZpcnN0IG9mIGFsbCwgdGhhbmtzIEJlbmppIGZpc2hlciwgIFN0ZWZhbiBSb2VtZXIuLi4KK2FuZCBvdGhlcnMgaW4gdmltQHZpbS5vcmcgd2hpY2ggc3BlbmQgbXVjaCB0aW1lIHRvIGFuc3dlciBxdWVzdGlvbnMsCitzb21ldGltZXMgZm9vbGlzaCBxdWVzdGlvbiBhc2tlZCBieSBzb21lb25lIGxpa2UgbWUuIFdpdGhvdXQgdGhlaXIgSSBjYW4ndAorZ2V0IHRoZSBmaW5hbCBzb2x1dGlvbiBmb3IgbXkgc3FscGx1cyB3b3JrIGRlc2NyaXB0ZWQgZm9sbG93cy4KKwlBcyBPcmFjbGUgdXNlciBrbm93biwgc3FscGx1cyBoYXMgYSB2ZXJ5IGJhZAorY29tbWFuZC1saW5lIGVkaXRpb24gZW52aXJvbm1lbnQuIEl0IGhhcyBubyBjb21tYW5kLWhpc3RvcnksIGRvbid0IHN1cHBvcnQKK21vc3Qgb2YgZ2V0bGluZSBmYWNpbGl0aWVzLiB3aGljaCBNeVNRTCBhbmQgc2hlbGwgZG9lcyBpdCB3ZWxsLiAgRXZlbiBNaWNyb3NvZnQKK3JlY29nb25pemUgdGhpcyBwb2ludC4gSW4gV2luZG93czIwMDAsIGRvc2tleSBpcyBpbnN0YWxsZWQgYnkgZGVmYXVsdC4KKwlCZWxvdyBpcyBteSB2aW0tc29sdXRpb24gdG8gc3FscGx1cywgd2hpY2gKK3JlY29yZCB0aGUgY29tbWFuZC1oaXN0b3J5IHdoZW4geW91IHVzZSBlZGl0KHNxbHBsdXMgYnVpbHRpbiBjb21tYW5kKSB0bworb3BlbiB0aGUgZWRpdG9yIHNwZWNpZmllZCBieSBFRElUT1IgZW52aXJvbm1lbnQgdmFyaWFibGUuIEl0IHNhdmVzIHRoZSBTUUwKK3N0YXRlbWVudCBpbnRvIGEgc3RhbmRhbG9uZSBmaWxlIHN1Y2ggYXMgLnNxbHBsdXMuaGlzdG9yeQorCUV2ZXJ5IHRpbWUgeW91IG9wZW4gdGhlIGZpbGUKK2FmaWVkdC5idWYoc3FscGx1cydzIGRlZmF1bHQgY29tbWFuZC1idWZmZXIgZmlsZSksIHlvdSBnZXQgdHdvIHNwbGl0ZWQgd2luZG93cywKK3RoZSBidWZmZXIgYWJvdmUgaXMgYWZpZWR0LmJ1ZiwgdGhlIGJ1ZmZlciBiZWxvdyBpcyAuc3FscGx1cy5oaXN0b3J5LCB5b3UKK2NhbiBzZWUgZXZlcnkgU1FMIHN0YXRlbWVudCBpbiB0aGUgd2luZG93cy4gIElmIHlvdSB3YW50IHRvIHVzZSBTUUwgc3RhdGVtZW50CitpbiBsaW5lIDUgdG8gcmVwbGFjZQorIHRoZSBjdXJyZW50IGNvbW1hbmQtYnVmZmVyLCBqdXN0IHByZXNzIDVLLCB0aGVuCisJOnhhIHRvIGJhY2sgdG8geW91IHNxbHBsdXMuIGFuZCB1c2UgLyB0byByZXBlYXQgdGhlIGNvbW1hbmQKKyBzYXZlZCBpbiBjb21tYW5kLWJ1ZmZlciBmaWxlIGNhbGxlZCBhZmllZHQuYnVmIGJ5IGRlZmF1bHQuCisJSXQgY2FuJ3QgcHJvY2VzcyBtdWx0aS1saW5lIFNRTCBzdGF0ZW1lbnQgY29udmluZW5jZWx5LgorIFRvZG8gdGhpcywganVzdCB1c2UgeW91IGZhdm9yaXRlIHZpbSB0cmljayB0byBkbyB0aGF0OgorCWZ1ISBWaW1TUUwoKQorICAgIG5ub3JlbWFwICZsdDtDLUsmZ3Q7IDombHQ7Qy1VJmd0OworCWV4ZSAibGV0IGxpbmVudW09Ii52OmNvdW50Jmx0O0NSJmd0OzoxLCQtMWQmbHQ7Q1ImZ3Q7Jmx0O0MtVyZndDtqOmV4ZQorCWxpbiBlbnVtLiJ5IiZsdDtDUiZndDsmbHQ7Qy1XJmd0O2tQCisgICAgbGV0IGxpbmVudW09bGluZSgiJCIpIDEsJC0xdyEgJmd0OyZndDsgfi8uc3FscGx1cy5oaXN0b3J5IGUKKyAgICB+Ly5zcWxwbHVzLmhpc3RvcnkgZXhlY3V0ZSAiOiQtIi4obGluZW51bS0xKS4iLCRtMCIgJSF1bmlxIGlmCisgICAgbGluZSgiJCIpJmd0OzEwMAorICAgICAgMTAxLCRkCisgICAgZW5kaWYgYiMgc2V0IHNwbGl0YmVsb3cgc3Agfi8uc3FscGx1cy5oaXN0b3J5IGF1ISBCdWZFbnRlciBhZmllZHQuYnVmCitlbmRmIGF1IEJ1ZkVudGVyIGFmaWVkdC5idWYgY2FsbCBWaW1TUUwoKQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+VXNpbmcgbWFya3M8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDI8L0E+PEJSPgorCitUbyBtYXJrIG9uZSBvciBtb3JlIHBvc2l0aW9ucyBpbiBhIGZpbGUsIHVzZSB0aGUgbVthcmtdIGNvbW1hbmQuCisKK0V4YW1wbGVzOgorCittYQkgLSAgICBzZXQgY3VycmVudCBjdXJzb3IgbG9jYXRpb24gYXMgbWFyayBhCisKKydhCSAtICAgIGp1bXAgdG8gYmVnaW5uaW5nIG9mIGxpbmUgb2YgbWFyayBhCisKK2BhCSAtICAgIGp1bXAgdG8gcG9zdGl0aW9uIG9mIG1hcmsgYQorCitkJ2EJIC0gICAgZGVsZXRlIGZyb20gY3VycmVudCBsaW5lIHRvIGxpbmUgb2YgbWFyayBhCisKK2RgYQkgLSAgICBkZWxldGUgZnJvbSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiB0byBtYXJrIGEKKworYydhCSAtICAgIGNoYW5nZSB0ZXh0IGZyb20gY3VycmVudCBsaW5lIHRvIGxpbmUgb2YgbWFyayBhCisKK3lgYQkgLSAgICB5YW5rIHRleHQgdG8gdW5uYW1lZCBidWZmZXIgZnJvbSBjdXJzb3IgdG8gbWFyayBhCisKKzptYXJrcwkgLSAgICBsaXN0IGFsbCB0aGUgY3VycmVudCBtYXJrcworCitOQjogTG93ZXJjYXNlIG1hcmtzIChhLXopIGFyZSB2YWxpZCB3aXRoaW4gb25lIGZpbGUuIFVwcGVyY2FzZSBtYXJrcyAoQS1aKSwKK2Fsc28gY2FsbGVkIGZpbGUgbWFya3MsIGFyZSB2YWxpZCBiZXR3ZWVuIGZpbGVzLgorCitGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgbVthcmtdIGNvbW1hbmQgcmVmZXIgdG8KKworOmhlbHAgbWFyaworCitTZWUgYWxzbzoKKworOmhlbHAgdmFyaW91cy1tb3Rpb25zCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Vc2luZyBhYmJyZXZpYXRpb25zPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTQzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTQzPC9BPjxCUj4KKworVG8gZGVmaW5lIGFiYnJldmlhdGlvbnMsIHVzZSB0aGUgYWJbYnJldmlhdGVdIGNvbW1hbmQuCisKK0V4YW1wbGVzOgorCis6YWIgcnRmbSByZWFkIHRoZSBmaW5lIG1hbnVhbCAgLSAgV2hlbmV2ZXIgeW91IHR5cGUgJ3J0Zm0nIGZvbGxvd2VkIGJ5IGEKKyZsdDtzcGFjZSZndDsgKG9yICZsdDtlc2MmZ3Q7IG9yICZsdDtjciZndDspIHZpbQorCQkJCSAgd2lsbCBleHBhbmQgdGhpcyB0byAncmVhZCB0aGUgZmluZSBtYW51YWwnLgorCis6YWIJCQkgICAgICAgLSAgbGlzdCBhbGwgZGVmaW5lZCBhYmJyZXZpYXRpb25zCisKKzp1bmFbYmJyZXZpYXRlXSBydGZtCSAgICAgICAtICByZW1vdmUgJ3J0Zm0nIGZyb20gdGhlIGxpc3Qgb2YgYWJicmV2aWF0aW9ucworCis6YWJjW2xlYXJdCQkgICAgICAgLSAgcmVtb3ZlIGFsbCBhYmJyZXZpYXRpb25zCisKK05COiBUbyBhdm9pZCBleHBhbnNpb24gaW4gaW5zZXJ0IG1vZGUsIHR5cGUgQ1RSTC1WIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3Rlcgorb2YgdGhlIGFiYnJldmlhdGlvbi4KKworRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGFiW2JyZXZpYXRlXSBjb21tYW5kIGFuZCBzb21lIG1vcmUgZXhhbXBsZXMKK3JlZmVyIHRvCisKKzpoZWxwIGFiYnJldmlhdGlvbnMKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlJlcGVhdCBsYXN0IGNoYW5nZXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDQ8L0E+PEJSPgorCitTaW1wbGUgdGV4dCBjaGFuZ2VzIGluIG5vcm1hbCBtb2RlIChlLmcuICJkdyIgb3IgIkoiKSBjYW4gYmUgcmVwZWF0ZWQgd2l0aAordGhlICIuIiBjb21tYW5kLiAgVGhlIGxhc3QgY29tbWFuZC1saW5lIGNoYW5nZSAodGhvc2UgaW52b2tlZCB3aXRoICI6IiwKK2UuZy4gIjpzL2Zvby9iYXIiKSBjYW4gYmUgcmVwZWF0ZWQgd2l0aCB0aGUgIkA6IiBjb21tYW5kLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbnMgYWJvdXQgcmVwZWF0aW5nIHNpbmdsZSBjaGFuZ2VzIHJlZmVyIHRvOgorCis6aGVscCBzaW5nbGUtcmVwZWF0CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Vc2luZyBjb21tYW5kLWxpbmUgaGlzdG9yeTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD00NSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD00NTwvQT48QlI+CisKK1lvdSBjYW4gcmVjYWxsIHByZXZpb3VzIGNvbW1hbmQgbGluZXMgZnJvbSBhIGhpc3RvcnkgdGFibGUgYnkgaGl0dGluZyB0aGUKKyZsdDtVcCZndDsgYW5kICZsdDtEb3duJmd0OyBjdXJzb3Iga2V5cyBpbiBjb21tYW5kLWxpbmUgbW9kZS4gIEZvciBleGFtcGxlLAordGhpcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzdWJzdGl0dXRlIGNvbW1hbmQ6IFR5cGUgIjpzIiBhbmQKK3RoZW4gJmx0O1VwJmd0Oy4KKworVGhlcmUgYXJlIHNlcGFyYXRlIGhpc3RvcnkgdGFibGVzIGZvciB0aGUgJzonIGNvbW1hbmRzIGFuZCBmb3IgcHJldmlvdXMgJy8nCitvciAnPycgc2VhcmNoIHN0cmluZ3MuCisKK1RvIGRpc3BsYXkgdGhlIGhpc3Rvcnkgb2YgbGFzdCBlbnRlcmVkIGNvbW1hbmRzIG9yIHNlYXJjaCBzdHJpbmdzLCB1c2UgdGhlCis6aGlzW3RvcnldIGNvbW1hbmQ6CisKKzpoaXMJICAgLQkgIERpc3BsYXkgY29tbWFuZC1saW5lIGhpc3RvcnkuCisKKzpoaXMgcwkgICAtCSAgRGlzcGxheSBzZWFyY2ggc3RyaW5nIGhpc3RvcnkuCisKKworRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbW1hbmQtbGluZSBoaXN0b3J5IHJlZmVyIHRvOgorCis6aGVscCBjbWRsaW5lLWhpc3RvcnkKKworU2VlIGFsc286CisKKzpoZWxwIENtZGxpbmUtbW9kZQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5XaW4zMgorYmluYXJpZXMgd2l0aCBwZXJsLCBweXRob24sIGFuZCB0Y2w8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDYiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDY8L0E+PEJSPgorCismZ3Q7IERvZXMgYW55b25lIGtub3cgaWYgd2luZG93cyBiaW5hcmllcyBvZiB2aW0gNS43IGFyZSBhdmFpbGFibGUgd2l0aCBwZXJsCithbmQgJmd0OyBweXRob24gc3VwcG9ydCB0dXJuZWQgb24/CisKKzxBCitIUkVGPSJmdHA6Ly92aW0uc291cmNlZm9yZ2UubmV0L3B1Yi92aW0vdXBsb2FkX2JpbmFyaWVzLyI+ZnRwOi8vdmltLnNvdXJjZWZvcmdlLm5ldC9wdWIvdmltL3VwbG9hZF9iaW5hcmllcy88L0E+PEJSPgorCis8QQorSFJFRj0iaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvYmluX2Rvd25sb2FkLyI+aHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvYmluX2Rvd25sb2FkLzwvQT48QlI+CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlN3YXBwaW5nCitjaGFyYWN0ZXJzLCB3b3JkcyBhbmQgbGluZXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NDc8L0E+PEJSPgorCitUbyBzd2FwIHR3byBjaGFyYWN0ZXJzIG9yIGxpbmVzLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworeHAJIC0gICAgIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgYW5kIHB1dCBpdCBhZnRlcndhcmRzLgorCSAgICAgICAoSW4gb3RoZXIgd29yZHMsIGl0IHN3YXBzIHRoZSBjaGFyYWN0ZXJzLikKKworZGRwCSAtICAgICBkZWxldGUgdGhlIGN1cnJlbnQgbGluZSBhbmQgcHV0IGl0IGFmdGVyd2FyZHMuCisJICAgICAgIChJbiBvdGhlciB3b3JkcywgaXQgc3dhcHMgdGhlIGxpbmVzLikKKworVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyB1bml2ZXJzYWwgc29sdXRpb24gdG8gc3dhcCB0d28gd29yZHMuICBZb3UgbWF5Cit0cnkgdGhlIGZvbGxvd2luZyBvbmVzLCBidXQgZG9uJ3QgZXhwZWN0IHRvbyBtdWNoIG9mIHRoZW06CisKK2Rhd3dQCSAtICAgICBkZWxldGUgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciwgbW92ZSBmb3J3YXJkIG9uZSB3b3JkCisJICAgICAgIGFuZCBwdXQgaXQgYmFjayBhZnRlciB0aGUgY3Vyc29yLiAgKEluIG90aGVyIHdvcmRzLCBpdCBzd2FwcworCSAgICAgICB0aGUgY3VycmVudCBhbmQgZm9sbG93aW5nIHdvcmQuKQorCitkYXdiUAkgLSAgICAgZGVsZXRlIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IsIG1vdmUgYmFja3dhcmQgb24gd29yZAorCSAgICAgICBhbmQgcHV0IGl0IGJhY2sgYWZ0ZXIgdGhlIGN1cnNvci4gIChJbiBvdGhlciB3b3JkcywgaXQgc3dhcHMKKwkgICAgICAgdGhlIGN1cnJlbnQgYW5kIHByZWNlZWRpbmcgd29yZC4pCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Nb3ZpbmcgYXJvdW5kPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTQ4Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTQ4PC9BPjxCUj4KKworWW91IGNhbiBzYXZlIGEgbG90IG9mIHRpbWUgd2hlbiBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIHRleHQgYnkgdXNpbmcKK2FwcHJvcHJpYXRlIG1vdmVtZW50cyBjb21tYW5kcy4gSW4gbW9zdCBjYXNlcyB0aGUgY3Vyc29yIGtleXMsICZsdDtQYWdlVXAmZ3Q7CitvciAmbHQ7UGFnZURvd24mZ3Q7IGFyZSBOT1QgdGhlIGJlc3QgY2hvaWNlLgorCitIZXJlIGlzIGEgc2VsZWN0aW9uIG9mIHNvbWUgYmFzaWMgbW92ZW1lbnQgY29tbWFuZHMgdGhhdCBob3BlZnVsbHkgaGVscHMKK3lvdSB0byBhY3F1aXJlIGEgdGFzdGUgZm9yIG1vcmU6CisKK2UgICAtIG1vdmUgdG8gdGhlIGVuZCBvZiBhIHdvcmQgdyAgIC0gbW92ZSBmb3J3YXJkIHRvIHRoZSBiZWdpbm5pbmcgb2YgYQord29yZCAzdyAgLSBtb3ZlIGZvcndhcmQgdGhyZWUgd29yZHMgYgktIG1vdmUgYmFja3dhcmQgdG8gdGhlIGJlZ2lubmluZyBvZgorYSB3b3JkIDNiICAtIG1vdmUgYmFja3dhcmQgdGhyZWUgd29yZHMKKworJAktIG1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgbGluZSAmbHQ7RW5kJmd0OyAgIC0gc2FtZSBhcyAkIDAJLQorbW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lICZsdDtIb21lJmd0OwktIHNhbWUgYXMgMAorCispICAgLSBqdW1wIGZvcndhcmQgb25lIHNlbnRlbmNlICggICAtIGp1bXAgYmFja3dhcmQgb25lIHNlbnRlbmNlCisKK30gICAtIGp1bXAgZm9yd2FyZCBvbmUgcGFyYWdyYXBoIHsgICAtIGp1bXAgYmFja3dhcmQgb25lIHBhcmFncmFwaAorCitIICAgLSBqdW1wIHRvIHRoZSB0b3Agb2YgdGhlIGRpc3BsYXkgTQkgLSBqdW1wIHRvIHRoZSBtaWRkbGUgb2YgdGhlIGRpc3BsYXkKK0wgICAtIGp1bXAgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZGlzcGxheQorCisnbSAgLSBqdW1wIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgb2YgbWFyayBtIGBtICAtIGp1bXAgdG8gdGhlIGxvY2F0aW9uCitvZiBtYXJrIG0KKworRyAgIC0ganVtcCB0byBlbmQgb2YgZmlsZSAxRyAgLSBqdW1wIHRvIGJlZ2lubmluZyBvZiBmaWxlIDUwRyAtIGp1bXAgdG8gbGluZSA1MAorCisnJyAtIHJldHVybiB0byB0aGUgbGluZSB3aGVyZSB0aGUgY3Vyc29yIHdhcyBiZWZvcmUgdGhlIGxhdGVzdCBqdW1wIGBgIC0KK3JldHVybiB0byB0aGUgY3Vyc29yIHBvc2l0aW9uIGJlZm9yZSB0aGUgbGF0ZXN0IGp1bXAgKHVuZG8gdGhlIGp1bXApLgorCislICAtIGp1bXAgdG8gY29ycmVzcG9uZGluZyBpdGVtLCBlLmcuIGZyb20gYW4gb3BlbiBicmFjZSB0byBpdHMKKyAgICAgbWF0Y2hpbmcgY2xvc2luZyBicmFjZQorCitGb3Igc29tZSBtb3JlIGludGVyZXN0aW5nIG1vdmVtZW50IGNvbW1hbmRzIChlc3BlY2lhbGx5IHRob3NlIGZvciBwcm9ncmFtbWVycykKK3JlZmVyIHRvOgorCis6aGVscCBtb3Rpb24udHh0CisKKzpoZWxwIHNlYXJjaC1jb21tYW5kcworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+U3dpdGNoaW5nIGNhc2Ugb2YgY2hhcmFjdGVyczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD00OSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD00OTwvQT48QlI+CisKK1RvIHN3aXRjaCB0aGUgY2FzZSBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIHVzZSB0aGUgIn4iLCAiZ1UiIG9yICJndSIKK2NvbW1hbmRzLgorCitFeGFtcGxlczoKKworfiAgICAgLSAgICAgc3dpdGNoIGNhc2Ugb2YgY2hhcmFjdGVyIHVuZGVyIGN1cnNvcgorCSAgICAoaW4gdmlzdWFsLW1vZGU6IHN3aXRjaCBjYXNlIG9mIGhpZ2hsaWdodGVkIHRleHQpCisKKzN+ICAgIC0gICAgIHN3aXRjaCBjYXNlIG9mIG5leHQgdGhyZWUgY2hhcmFjdGVycworCitnfn4gICAtICAgICBzd2l0Y2ggY2FzZSBvZiBjdXJyZW50IGxpbmUKKworVSAgICAgLSAgICAgaW4gdmlzdWFsLW1vZGU6IG1ha2UgaGlnaGxpZ2h0ZWQgdGV4dCB1cHBlcmNhc2UKKworZ1VVICAgLSAgICAgbWFrZSBjdXJyZW50IGxpbmUgdXBwZXJjYXNlCisKK3UgICAgIC0gICAgIGluIHZpc3VhbC1tb2RlOiBtYWtlIGhpZ2hsaWdodGVkIHRleHQgbG93ZXJjYXNlCisKK2d1dSAgIC0gICAgIG1ha2UgY3VycmVudCBsaW5lIGxvd2VyY2FzZQorCitnVWF3ICAtICAgICBtYWtlIGN1cnJlbnQgd29yZCB1cHBlcmNhc2UKKworZ3VhdyAgLSAgICAgbWFrZSBjdXJyZW50IHdvcmQgbG93ZXJjYXNlCisKK0ZvciBzb21lIG1vcmUgZXhhbXBsZXMgcmVmZXIgdG8KKworOmhlbHAgfgorCitTZWUgYWxzbzoKKworOmhlbHAgc2ltcGxlLWNoYW5nZQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+UmVjb3ZlcmluZyBmaWxlczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD01MCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD01MDwvQT48QlI+CisKK0lmIHlvdXIgY29tcHV0ZXIgaGFzIGNyYXNoZWQgd2hpbGUgZWRpdGluZyBhIGZpbGUsIHlvdSBzaG91bGQgYmUgYWJsZSB0bworcmVjb3ZlciB0aGUgZmlsZSBieSB0eXBpbmcKKworICAgICAgdmkgLXIgJmx0O2ZpbGVuYW1lJmd0OworCit3aGVyZSAmbHQ7ZmlsZW5hbWUmZ3Q7IGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHlvdSB3ZXJlIGVkaXRpbmcgYXQgdGhlIHRpbWUKK29mIHRoZSBjcmFzaC4gIElmIHlvdSB3ZXJlIGVkaXRpbmcgd2l0aG91dCBhIGZpbGUgbmFtZSwgZ2l2ZSBhbiBlbXB0eSBzdHJpbmcKK2FzIGFyZ3VtZW50OgorCisgICAgICB2aW0gLXIgIiIKKworVG8gZ2V0IGEgbGlzdCBvZiByZWNvdmVyYWJsZSBmaWxlcyBzdGFydCB2aW0gd2l0aG91dCBhcmd1bWVudHM6CisKKyAgICAgIHZpbSAtcgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBmaWxlIHJlY292ZXJ5IHJlZmVyIHRvOgorCis6aGVscCByZWNvdmVyeQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+RW50ZXJpbmcgZ2VybWFuIHVtbGF1dHM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NTEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NTE8L0E+PEJSPgorCitUbyBlbnRlciBnZXJtYW4gdW1sYXV0cyAob3IgYW55IG90aGVyIG9mIHRob3NlIHdlaXJlZCBjaGFyYWN0ZXJzKSBub3QKK2F2YWlsYWJsZSBvbiB5b3VyIGtleWJvYXJkIHVzZSAnZGlncmFwaHMnOgorCitJbiBpbnNlcnQtbW9kZSB0eXBlIGZvciBleGFtcGxlOgorCisgICAgIENUUkwtSyAiYQorCisgICAgIENUUkwtSyBeZQorCit3aGljaCBnaXZlcyBhbiAn5CcgYW5kICdlJyB3aXRoIGEgaGF0LgorCitZb3UgY2FuIGFsc28gc2V0IHRoZSBkaWdyYXBoIG9wdGlvbjoKKworICAgIDpzZXQgZGlncmFwaCAob3IgOnNldCBkZykKKworV2l0aCBkaWdyYXBoIG9wdGlvbiBzZXQgeW91IGNhbiBlbnRlcgorCisgICAgIiAmbHQ7QlMmZ3Q7IGEKKworICAgIF4gJmx0O0JTJmd0OyBlCisKK3doaWNoIGdpdmVzIHRoZSBzYW1lIHJlc3VsdC4KKworVG8gZ2V0IGEgbGlzdCBvZiBjdXJyZW50bHkgZGVmaW5lZCBkaWdyYXBocyB0eXBlCisKKyAgIDpkaWdbZ3JhcGhzXQorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBhbmQgdXNpbmcgZGlncmFwaHMgcmVmZXIgdG86CisKKzpoZWxwIGRpZ3JhcGgudHh0CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5TY3JvbGxpbmcgc3luY2hyb25vdXNseTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD01MiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD01MjwvQT48QlI+CisKK0lmIHlvdSB3YW50IHRvIGJpbmQgdHdvIG9yIG1vcmUgd2luZG93cyBzdWNoIHRoYXQgd2hlbiBvbmUgd2luZG93IGlzIHNjcm9sbGVkLAordGhlIG90aGVyIHdpbmRvd3MgYXJlIHNjcm9sbGVkIHNpbXVsdGFuZW91c2x5LCBzZXQgdGhlICdzY3JvbGxiaW5kJyBvcHRpb24KK2ZvciB0aGVzZSB3aW5kb3dzOgorCis6c2V0IHNjcm9sbGJpbmQKKworV2hlbiBhIHdpbmRvdyB0aGF0IGhhcyAnc2Nyb2xsYmluZCcgc2V0IGlzIHNjcm9sbGVkLCBhbGwgb3RoZXIgJ3Njcm9sbGJpbmQnCit3aW5kb3dzIGFyZSBzY3JvbGxlZCB0aGUgc2FtZSBhbW91bnQsIGlmIHBvc3NpYmxlLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgJ3Njcm9sbGJpbmQnIG9wdGlvbiByZWZlciB0bworCis6aGVscCBzY29sbC1iaW5kaW5nCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkJldHRlcgorY29sb3JzIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTUzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTUzPC9BPjxCUj4KKworRm9yIHN5bnRheCBoaWdobGlnaHRpbmcgdGhlcmUgYXJlIHR3byBzZXRzIG9mIGRlZmF1bHQgY29sb3IgbWFwczogT25lIGZvciBhCitsaWdodCBhbmQgYW5vdGhlciBvbmUgZm9yIGEgZGFyayBiYWNrZ3JvdW5kLiAgSWYgeW91IGhhdmUgYSBibGFjayBiYWNrZ3JvdW5kLAordXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBnZXQgYSBiZXR0ZXIgY29sb3IgbWFwIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nOgorCis6c2V0IGJhY2tncm91bmQ9ZGFyaworCitZb3UgaGF2ZSB0byBzd2l0Y2ggb2ZmIGFuZCBvbiBhZ2FpbiBzeW50YXggaGlnaGxpZ2h0aW5nIHRvIGFjdGl2YXRlIHRoZSBuZXcKK2NvbG9yIG1hcDoKKworOnN5bnRheCBvZmYgOnN5bnRheCBvbgorCitGb3IgYSBkZXRhaWxsZWQgZGVzY3JpcHRpb24gb2Ygc3ludGF4IGhpZ2hsaWdodGluZyByZWZlciB0bworCis6aGVscCBzeW50YXgudHh0CisKK1NlZSBhbHNvIHRoZSBWaW0gc3ludGF4IHN1cHBvcnQgZmlsZTogJFZJTVJVTlRJTUUvc3ludGF4L3N5bmxvYWQudmltCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlZpZXcKK2EgSmF2YSBDbGFzcyBGaWxlIERlY29tcGlsZWQgdGhydSBWaW08L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NTQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NTQ8L0E+PEJSPgorCitIaSBBbGwsIFdpc2ggdSBjb3VsZCB2aWV3IGEgSmF2YSBDbGFzcyBGaWxlIHVzaW5nIFZpbSwgV2VsbCB1ciBxdWVyeQorZW5kcyBoZXJlLiAgRmlyc3Qgb2YgYWxsIHUgd2lsbCBuZWVkIGEgSmF2YSBEZWNvbXBpbGVyIHRvIGRlY29tcGlsZSB0aGUKK0NsYXNzIEZpbGUuICBJIHdvdWxkIHN1Z2dlc3QgdGhlIEpBRCBkZWNvbXBpbGVyIGJ5IFBhdmVsIEtvdXpuZXRzb3YgPEEKK0hSRUY9Imh0dHA6Ly93d3cuZ2VvY2l0aWVzLmNvbS9TaWxpY29uVmFsbGV5L0JyaWRnZS84NjE3L2phZC5odG1sIj5odHRwOi8vd3d3Lmdlb2NpdGllcy5jb20vU2lsaWNvblZhbGxleS9CcmlkZ2UvODYxNy9qYWQuaHRtbDwvQT48QlI+CisKK0l0cyBhIGNvbW1hbmQgbGluZSBkZWNvbXBpbGVyIGFuZCBhYnNvbHV0ZWx5IGZyZWUuICBVIGNhbiB1c2UgYW55IGNvbW1hbmQKK2xpbmUgZGVjb21waWxlciBvZiB1ciBjaG9pY2UuCisKK05leHQgY3JlYXRlIGEgdmltc2NyaXB0IGZpbGUgY2FsbGVkIGphZC52aW0gYXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworRklMRSBTVEFSVCAjIyMjIyMjIyMjIyMjIyMjIGF1Z3IgY2xhc3MgYXUhICBhdSBidWZyZWFkcG9zdCxmaWxlcmVhZHBvc3QKKyouY2xhc3MgJSFkOmphZC5leGUgLW5vY3RvciAtZmYgLWkgLXAgJSBhdSBidWZyZWFkcG9zdCxmaWxlcmVhZHBvc3QKKyouY2xhc3Mgc2V0IHJlYWRvbmx5IGF1IGJ1ZnJlYWRwb3N0LGZpbGVyZWFkcG9zdCAqLmNsYXNzIHNldCBmdD1qYXZhIGF1CitidWZyZWFkcG9zdCxmaWxlcmVhZHBvc3QgKi5jbGFzcyBub3JtYWwgZ2c9RyBhdSBidWZyZWFkcG9zdCxmaWxlcmVhZHBvc3QKKyouY2xhc3Mgc2V0IG5vbW9kaWZpZWQgYXVnciBFTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZJTEUgRU5ECisjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworTm90ZTotIEtlZXAgdGhlIEphZC5leGUgaW4gYSBkaXJlY3Rvcnkgd2l0aCBvdXQgd2hpdGUgc3BhY2VzLiAgVGhlIC1wIG9wdGlvbnMKK2RpcmVjdHMgSkFEIHRvIHNlbmQgdGhlIG91dHB1dCB0byBzdGFuZGFyZCBvdXRwdXQgaW5zdGVhZCBvZiBhIC5qYWQgZmlsZS4gT3RoZXIKK29wdGlvbnMgYXJlIGRlc2NyaWJlZCBvbiB0aGUgSkFEIHNpdGUuCisKK05leHQgYWRkIHRoZSBmb2xsb3dpbmcgbGluZSBpbiB0aGUgLnZpbXJjIGZpbGUuICBzbyBqYWQudmltCisKK05leHQgdGltZSB1IGRvIHZpbSBhYmMuY2xhc3MuIFZpb2xhIHUgaGF2ZSB0aGUgc291cmNlIGNvZGUgZm9yIGFiYy5jbGFzcy4KKworTk9URTotIEkgaGF2ZSB3cml0dGVuIHRoZSBzY3JpcHQgc28gYXMgdG8gb3BlbiB0aGUgY2xhc3MgZmlsZSByZWFkIG9ubHksCitTbyB0aGF0IHUgZG9udCBhY2NpZGVudGx5IG1vZGlmeSBpdC4gIFUgY2FuIGFsc28gZXh0ZWQgdGhpcyBzY3JpcHQgdG8gdW5qYXIKK2EgamFyIGZpbGUgYW5kIHRoZW4gdmlldyBlYWNoIGZpbGUgaW4gdGhlIEpBUiBmaWxlLiAgdGhhbmtzIGJoYXNrYXIgQW55CitzdWdnZXN0aW9ucyBhcmUgd2VsY29tZQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+cHJldmlvdXMgYnVmZmVyPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTU1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTU1PC9BPjxCUj4KKworT25lIG9mIHRoZSBrZXlzIHRvIHZpbSBpcyBidWZmZXIgbWFuYWdlbWVudC4gSWYgSSBoYXZlIHRvIHVzZSBhbm90aGVyIElERQordGhhdCBtYWtlcyBtZSBjbGljayBvbiBhIHRhYiBldmVyeSB0aW1lIEkgd2FudCB0byBsb29rIGF0IGFub3RoZXIgZmlsZSBJJ20KK2dvaW5nIHRvIGdvIHBvc3RhbC4KKworU28gb2YgY291cnNlIHlvdSBrbm93IGFib3V0IDpscyB3aGljaCBsaXN0cyBhbGwgdGhlIGN1cnJlbnQgb3BlbiBidWZmZXJzLiBUaGlzCitnZXRzIGEgbGl0dGxlIHVud2VpbGRseSBvbmNlIHlvdSBoYXZlIGEgZnVsbCBwcm9qZWN0IG9wZW4gc28geW91IGNhbiBhbHNvIHVzZQorOmIgJmx0O2FueSBzbmlwaXQgb2YgdGV4dCZndDsgJmx0O3RhYiZndDsgdG8gY29tcGxldGUgdG8gYW4gb3BlbiBidWZmZXIuIFRoaXMKK2lzIHJlYWxseSBuaWNlIGJlY2F1c2UgeW91IGNhbiB0eXBlIGFueSBmcmFnbWVudCBvZiBhIGZpbGUgbmFtZSBhbmQgaXQgd2lsbAorY29tcGxldGUgdG8gdGhlIG1hdGNoaW5nIGZpbGUuIChpLmUuIFJlcXVlc3RNYW5hZ2VyLmphdmEgY2FuIGJlIGNvbXBsZXRlZAordXNpbmcgInRtYSImbHQ7dGFiJmd0OyBvciAicmVxIiZsdDt0YWImZ3Q7IG9yICJyLmphdmEiJmx0O3RhYiZndDspLgorCitOb3cgZm9yIGF3aGlsZSBJIHdhcyBhbHNvIHVzaW5nIDpibiBhbmQgOmJwIHdoaWNoIGp1bXBzIHlvdSB0byB0aGUgbmV4dAorYW5kIHByZXZpb3VzIGJ1ZmZlciByZXNwZWN0aXZlbHkuIEkgZm91bmQgSSB3YXMgb2Z0ZW4gZnJ1c3RyYXRlZCBiZWNhdXNlIEkKK3dhbnRlZCA6YnAgdG8gYmUgdGhlIHByZXZpb3VzIGJ1ZmZlciBJIHdhcyBpbiwgbm90IHRoZSBwcmV2aW91cyBidWZmZXIgaW4KK3RoZSBsaXN0LiBTbyAoZHJ1bSByb2xsKSB0aGUgcmVhc29uIEkgd3JvdGUgdGhpcyB0aXAgd2FzIGJlY2F1c2Ugb2Y6CisKKzpiIworCitqdW1wIHRvIHRoZSBwcmV2aW91cyBidWZmZXIgeW91IHdlcmUgaW4uIFZlcnkgdmVyeSBoYW5keS4gVGhlIG9ubHkgdGhpbmcKK25pY2VyIGFyZSB0YWcsIGJ1dCB0aGF0J3MgYSB0aXAgZm9yIGFub3RoZXIgdGltZS4KKworOmhlbHAgYnVmZmVycyA6aGVscCBibiA6aGVscCBicAorCitJZiBhbnlib2R5IGtub3dzIHdoZXJlIHRvIGdldCBoZWxwIG9uICMgaW4gdGhpcyBjb250ZXh0IHBsZWFzZSBhZGQgbm90ZXMuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmhvdwordG8gYXZvaWQgb2JsaXRlcmF0aW5nIHdpbmRvdyBsYXlvdXQ8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NTgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NTg8L0E+PEJSPgorCitJZiB5b3UgdGFrZSB0aGUgdGltZSB0byBsYXkgb3V0IHNldmVyYWwgd2luZG93cyB3aXRoIHZpbSAoZXNwZWNpYWxseSB2ZXJ0aWNhbGx5CitpbiB2ZXJzaW9uIDYpLCB5b3UgbWF5IGJlIGJ1bW1lZCB3aGVuIHlvdSBoaXQgYW4gZXJyYW50IGtleSBhbmQgZmluZCB0aGF0CithbGwgYnV0IHdoYXQgb25lIHdpbmRvdyBkaXNhcHBlYXJzLgorCitXaGF0IGhhcHBlbnM6IHdoaWxlIG5hdmlnYXRpbmcgYmV0d2VlbiB3aW5kb3dzLCB5b3UgaGl0ICZsdDtDLVcmZ3Q7aiwKKyZsdDtDLVcmZ3Q7aywgZXRjLiAgQXQgc29tZSBwb2ludCB5b3UgYWNjaWRlbnRseSBoaXQgJmx0O0MtVyZndDsgYnV0IHRoZW4KK2Rvbid0IGZvbGxvdyB3aXRoIGEgd2luZG93IGNvbW1hbmQuICBOb3cgaGl0dGluZyAnbycgdG8gc3RhcnQgaW5zZXJ0IG1vZGUKK2lzc3VlcyBhIGNvbW1hbmQgZXF1aXZhbGVudCB0byA6b25seSwgYW5kIGNsb3NlcyBhbGwgd2luZG93cyBleGVjZXB0IGZvcgordGhlIG9uZSB5b3UgYXJlIGluICh1bmxlc3Mgc29tZSB3aW5kb3dzIGhhdmUgdW5zYXZlZCBjaGFuZ2VzIGluIHRoZW0pLgorCitIb3cgdG8gYXZvaWQgdGhpczogcGV0aXRpb24gdGhlIHZpbS1kZXYgbWFpbGluZyBsaXN0IGFib3V0IGhvdyA6b25seSBpcworc3VmZmljaWVudCBmb3IgdGhlIGluZnJlcXVlbnR5IHVzZSB0aGlzIG1pZ2h0IGdldCAoai9rKS4KKworUmVhbGx5OiB1c2UgbWFwcGluZyB0byBkaXNhYmxlIHRoZSAmbHQ7Qy1XJmd0O28gZnVuY3Rpb25hbGl0eTsgcHV0IHRoaXMgaW4KK3lvdXIgLnZpbXJjOgorCitubm9yZW1hcCAmbHQ7Qy1XJmd0O08gOmVjaG8gInN1Y2tlciImbHQ7Q1ImZ3Q7IG5ub3JlbWFwICZsdDtDLVcmZ3Q7byA6ZWNobworInN1Y2tlciImbHQ7Q1ImZ3Q7IG5ub3JlbWFwICZsdDtDLVcmZ3Q7Jmx0O0MtTyZndDsgOmVjaG8gInN1Y2tlciImbHQ7Q1ImZ3Q7CisKK3JlZmVyZW5jZXM6CisKKzpoZWxwIDpvbmx5IDpoZWxwIENUUkwtV19vCisKK1RoYXQgaXMgYWxsLiAgU2NvdHQKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+QXBwbHlpbmcKK3N1YnN0aXR1dGVzIHRvIGEgdmlzdWFsIGJsb2NrPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTYyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTYyPC9BPjxCUj4KKworSWYgeW91J2QgbGlrZSB0byBhcHBseSBhIHN1YnN0aXR1dGUsIG9yIGV2ZW4gYW55IGV4IGNvbW1hbmQsIHRvIGEgdmlzdWFsLWJsb2NrCitzZWxlY3RlZCB0ZXh0IHJlZ2lvbiAoY3RybC12IGFuZCBtb3ZlKSwgdGhlbiB5b3UnbGwgd2FudCBTdGVmYW4gUm9lbWVyJ3MgPEEKK0hSRUY9Imh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vdmltc2NyaXB0L3Zpcy52aW0gLiAgSnVzdCBzb3VyY2UKK2l0IGluLCI+aHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS92aW1zY3JpcHQvdmlzLnZpbSAuCUp1c3Qgc291cmNlCitpdCBpbiw8L0E+PEJSPiBhbmQgdGhlbiBwcmVzcyAiOkIiLiAgT24gdGhlIGNvbW1hbmQgbGluZSB5b3UnbGwgc2VlCisKKzonJmx0OywnJmd0O0JDdHJsLVYKKworSnVzdCBjb250aW51ZSB3aXRoIHRoZSBzdWJzdGl0dXRlIG9yIHdoYXRldmVyLi4uCisKKzonJmx0OywnJmd0O0Igcy9hYmMvQUJDL2cKKworYW5kIHRoZSBzdWJzdGl0dXRlIHdpbGwgYmUgYXBwbGllZCB0byBqdXN0IHRoYXQgYmxvY2sgb2YgdGV4dCEKKworRXhhbXBsZTogQ3RybC1WIFNlbGVjdC4uLi4uLi4uLi58Li4uLi4uVHlwZSAuLi4uLi4uLi4uLi4uLi4uLi5qdXN0Cit0aGUgY2VudHJhbC4uLi58Li4uLi4uOkIgcy9hYmMvQUJDL2cgLi4uLi4uLi4uLi4uLi4uLi4uZm91cgorImFiYyJzLi4uLi4uLi4uLi4uLi58IC4uLi4uLi4uLi4uLi4uLi4uLi0tLS0tLS0tLS0tLS0tLS0uLi4ufC4uLi0tLS0tLS0tLS0tLS0KKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNhYmNhYmNhYmMKKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNBQkNBQkNhYmMKKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNBQkNBQkNhYmMKKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNhYmNhYmNhYmMKKyAoZG90cyBpbnNlcnRlZCB0byByZXRhaW4gdGFidWxhciBmb3JtYXQpCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkFwcGx5aW5nCitzdWJzdGl0dXRlcyB0byBhIHZpc3VhbCBibG9jazwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02MyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02MzwvQT48QlI+CisKK0lmIHlvdSdkIGxpa2UgdG8gYXBwbHkgYSBzdWJzdGl0dXRlLCBvciBldmVuIGFueSBleCBjb21tYW5kLCB0byBhIHZpc3VhbC1ibG9jaworc2VsZWN0ZWQgdGV4dCByZWdpb24gKGN0cmwtdiBhbmQgbW92ZSksIHRoZW4geW91J2xsIHdhbnQgU3RlZmFuIFJvZW1lcidzIDxBCitIUkVGPSJodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL3ZpbXNjcmlwdC92aXMudmltIC4gIEp1c3Qgc291cmNlCitpdCBpbiwiPmh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vdmltc2NyaXB0L3Zpcy52aW0gLglKdXN0IHNvdXJjZQoraXQgaW4sPC9BPjxCUj4gYW5kIHRoZW4gcHJlc3MgIjpCIi4gIE9uIHRoZSBjb21tYW5kIGxpbmUgeW91J2xsIHNlZQorCis6JyZsdDssJyZndDtCQ3RybC1WCisKK0p1c3QgY29udGludWUgd2l0aCB0aGUgc3Vic3RpdHV0ZSBvciB3aGF0ZXZlci4uLgorCis6JyZsdDssJyZndDtCIHMvYWJjL0FCQy9nCisKK2FuZCB0aGUgc3Vic3RpdHV0ZSB3aWxsIGJlIGFwcGxpZWQgdG8ganVzdCB0aGF0IGJsb2NrIG9mIHRleHQhCisKK0V4YW1wbGU6IEN0cmwtViBTZWxlY3QuLi4uLi4uLi4ufC4uLi4uLlR5cGUKKy4uLi4uLi4uLi4uLi4uLi4uLmp1c3QgdGhlIGNlbnRyYWwuLi4uLi4ufC4uLi4uLjpCCitzL2FiYy9BQkMvZyAuLi4uLi4uLi4uLi4uLi4uLi5mb3VyICJhYmMicy4uLi4uLi4uLi4uLi4uLi4ufAorLi4uLi4uLi4uLi4uLi4uLi4uLS0tLS0tLS0tLi4uLi4uLi4uLi4ufC4uLi0tLS0tLS0tLS0tLS0KKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNhYmNhYmNhYmMKKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNBQkNBQkNhYmMKKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNBQkNBQkNhYmMKKy4uLi4uLi4uLi4uLi4uLi4uLmFiY2FiY2FiY2FiYy4uLi4uLi4uLi4uLnwuLi4uLi5hYmNhYmNhYmNhYmMKKyAoZG90cyBpbnNlcnRlZCB0byByZXRhaW4gdGFidWxhciBmb3JtYXQpCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkFsd2F5cyBzZXQKK3lvdXIgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIGZpbGUgeW91J3JlIGVkaXRpbmc8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NjQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NjQ8L0E+PEJSPgorCitTb21ldGltZXMgSSB0aGluayBpdCdzIGhlbHBmdWwgaWYgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBhbHdheXMgdGhlIHNhbWUKK2FzIHRoZSBidWZmZXIgeW91IGFyZSBlZGl0aW5nLglZb3UgbmVlZCB0byBwdXQgdGhpcyBpbiB5b3VyIC52aW1yYzoKKworZnVuY3Rpb24hIENIQU5HRV9DVVJSX0RJUigpCisJbGV0IF9kaXIgPSBleHBhbmQoIiU6cDpoIikgZXhlYyAiY2QgIiAuIF9kaXIgdW5sZXQgX2RpcgorZW5kZnVuY3Rpb24KKworYXV0b2NtZCBCdWZFbnRlciAqIGNhbGwgQ0hBTkdFX0NVUlJfRElSKCkKKworRG9pbmcgdGhpcyB3aWxsIG1ha2UgYSAiY2QiIGNvbW1hbmQgdG8geW91ciB0aGUgY3VycmVudCBidWZmZXIgZWFjaCB0aW1lCit5b3Ugc3dpdGNoIHRvIGl0LiAgVGhpcyBpcyBhY3R1YWxseSBzaW1pbGFyIHRvIHZpbXRpcCMyIGJ1dCBtb3JlIGF1dG9tYXRpYy4KKworWW91IHNob3VsZCBzZWUgZm9yIG1vcmUgZGV0YWlsczogOmhlbHAgYXV0b2NtZCA6aGVscCBleHBhbmQgOmhlbHAgZnVuY3Rpb24KKworTm90ZTogVGhpcyB0aXAgd2FzIGNvbnRyaWJ1dGVkIGJ5IHNvbWVib2R5IG9uIHRoZSBsaXN0IGEgd2hpbGUgYWdvIChzb3JyeQorZm9yIG5vIHJlZmVyZW5jZSkgYW5kIGl0IGhhcyBiZWVuIGV4dHJlbWVseSBoZWxwZnVsIHRvIG1lLiBUaGFua3MhCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkluc2VydAorbGluZSBudW1iZXIgaW50byB0aGUgYWN0dWFsbCB0ZXh0IG9mIHRoZSBmaWxlLjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02NSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02NTwvQT48QlI+CisKK0FsdGhvdWdoIDpzZXQgbnVtYmVyIHdpbGwgYWRkIG5pY2UgbGluZSBudW1iZXIgZm9yIHlvdSBBdCB0aW1lIHlvdSBtYXkgd2lzaAordG8gYWN0dWFsbHkgcGxhY2UgdGhlIGxpbmUgbnVtYmVycyBpbnRvIHRoZSBmaWxlLiBGb3IgZXhhbXBsZSBvbiBHTlUgVW5peAoreW91IGNhbiBhY29tcGxpc2ggYSBzaW11bGFyIHRhc2sgdXNpbmcgY2F0IC1uIGZpbGUgJmd0OyBuZXdfZmlsZQorCitJbiBWSU0geW91IGNhbiB1c2UgdGhlIGdsb2JhbCBjb21tYW5kIHRvIGRvIHRoaXMKKworOmcvXi9leGVjICJzL14vIi5zdHJwYXJ0KGxpbmUoIi4iKS4iCSIsIDAsIDQpCisKK1doYXQgdGhpcyBkb2VzIGlzIHJ1biB0aGUgZXhlYyBjb21hbmQgb24gZXZlcnkgbGluZSB0aGF0IG1hdGNoZXMgL14vIChBbGwpCitUaGUgZXhlYyBjb21tYW5kIHRha3MgYSBzdHJpbmcgYW5kIGV4ZWN1dGVzIGl0IGFzIGlmIGl0IHdlcmUgdHlwZWQgaW4uCisKK2xpbmUoIi4iKS4iICAgICIgLSZndDsgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IGxpbmUgcGx1cyBmb3VyIHNwYWNlcy4KK3N0cnBhcnQoIjEyMwkiLCAwLCA0KSAtJmd0OyByZXR1cm5zIG9ubHkgdGhlIGZpcnN0IGZvdXIgY2hhcmFjdGVycyAoIjEyMyAiKS4KKyJzL14vMTIzICIgLSZndDsgc3Vic3RpdHV0cyB0aGUgYmVnaW5pbmcgb2YgdGhlIGxpbmUgd2l0aCAiMTIzICIuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlRyYW5zZmVyCit0ZXh0IGJldHdlZW4gdHdvIFZpbSAnc2Vzc2lvbnMnLDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02NiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02NjwvQT48QlI+CisKK1RoaXMgb25lIGlzIGEgb25lIG9mIG15IGZhdm9yaXRlcyBmcm9tIERyLiBDaGlwLCBhbmQgSSBoYXZlbid0IHNlZW4gaXQgY29tZQorYWNyb3NzIHZpbSB0aXBzIHlldC4uLgorCitDYW4gdXNlIGVpdGhlciB2aXN1YWwsIG9yIG1hcmtpbmcgdG8gZGVub3RlIHRoZSB0ZXh0LgorCisiIHRyYW5zZmVyL3JlYWQgYW5kIHdyaXRlIG9uZSBibG9jayBvZiB0ZXh0IGJldHdlZW4gdmltIHNlc3Npb25zICIgVXNhZ2U6ICIKK2Bmcm9tJyBzZXNzaW9uOiAiICAgICBtYSAiICAgICBtb3ZlIHRvIGVuZC1vZi1ibG9jayAiCSAgeHcgIiAiIGB0bycgc2Vzc2lvbjoKKyIgICAgIG1vdmUgdG8gd2hlcmUgSSB3YW50IGJsb2NrIGluc2VydGVkICIJeHIgIiBpZiBoYXMoInVuaXgiKQorICBubWFwIHhyICAgOnIgJEhPTUUvLnZpbXhmZXImbHQ7Q1ImZ3Q7IG5tYXAgeHcKKyAgOidhLC53ISAkSE9NRS8udmlteGZlciZsdDtDUiZndDsgdm1hcCB4ciAgIGMmbHQ7ZXNjJmd0OzpyCisgICRIT01FLy52aW14ZmVyJmx0O0NSJmd0OyB2bWFwIHh3ICAgOnchICRIT01FLy52aW14ZmVyJmx0O0NSJmd0OworZWxzZQorICBubWFwIHhyICAgOnIgYzovLnZpbXhmZXImbHQ7Q1ImZ3Q7IG5tYXAgeHcgICA6J2EsLnchIGM6Ly52aW14ZmVyJmx0O0NSJmd0OworICB2bWFwIHhyICAgYyZsdDtlc2MmZ3Q7OnIgYzovLnZpbXhmZXImbHQ7Y3ImZ3Q7IHZtYXAgeHcKKyAgOnchIGM6Ly52aW14ZmVyJmx0O0NSJmd0OworZW5kaWYKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkFzY2lpIFZhbHVlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTY3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTY3PC9BPjxCUj4KKworU29tZXRpbWVzIHdlLCB0aGUgcHJvZ3JhbW1lcnMsIG5lZWQgdGhlIHZhbHVlIG9mIGEgY2hhcmFjdGVyLCBkb24ndCB3ZT8KK1lvdSBjYW4gbGVhcm4gdGhlIGFzY2lpIHZhbHVlIG9mIGEgY2hhcmFjdGVyIGJ5IHByZXNzaW5nIGcgYW5kIGEga2V5cy4oZ2EpIQorSXQgZGlzcGxheXMgdGhlIHZhbHVlIGluIGRlYywgaGV4IGFuZCBvY3RhbC4uLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+RGVsZXRlIGtleTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD02ODwvQT48QlI+CisKK0Rvbid0IHdvcnJ5IGlmIHlvdXIgZGVsZXRlIGtleSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5LglKdXN0IHByZXNzCismbHQ7Q1RSTCZndDstQmFja3NwYWNlLiAgSXQgd29ya3MgdW5kZXIgYm90aCBtb2RlKGluc2VydCBvciBub3JtYWwpLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+ZG90IG1ha2VzIGxpZmUgZWFzaWVyPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTY5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTY5PC9BPjxCUj4KKworWW91IGNhbiBjb3B5IGFuZCBwYXN0ZSB0aGUgbGFzdCBjaGFuZ2VzIHlvdSBtYWRlIGluIHRoZSBsYXN0IGluc2VydCBtb2RlCit3aXRob3V0IHVzaW5nIHkgYW5kIHAgYnkgcHJlc3NpbmcgLiAoanVzdCBkb3QpLiAgVmltIG1lbW9yaXplcyB0aGUga2V5cyB5b3UKK3ByZXNzZWQgYW5kIGVjaG9zIHRoZW0gaWYgeW91IGhpdCB0aGUgZG90IGtleS4JWW91IG11c3QgYmUgaW4gY29tbWFuZCBtb2RlCithcyB1c3VhbC4gIEl0IGNhbiBiZSBoZWxwZnVsLi4uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5ydW5uaW5nIGEgY29tbWFuZCBvbiBhbGwgYnVmZmVyczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03MCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03MDwvQT48QlI+CisKK0Zyb20gUGV0ZXIgQmlzbXV0aSBvbiB0aGUgdmltIGxpc3Q6CisKK0hvdyB0byBnbG9iYWwgc2VhcmNoIGFuZCByZXBsYWNlIGluIGFsbCBidWZmZXJzIHdpdGggb25lIGNvbW1hbmQ/ICBZb3UgbmVlZAordGhlIEFsbEJ1ZmZlcnMgY29tbWFuZDoKKworOmNhbGwgQWxsQnVmZmVycygiJXMvc3RyaW5nMS9zdHJpbmcyL2ciKQorCisicHV0IHRoaXMgaW4gYSBmaWxlIGFuZCBzb3VyY2UgaXQgZnVuY3Rpb24gQWxsQnVmZmVycyhjbW5kKQorICBsZXQgY21uZCA9IGE6Y21uZCBsZXQgaSA9IDEgd2hpbGUgKGkgJmx0Oz0gYnVmbnIoIiQiKSkKKyAgICBpZiBidWZleGlzdHMoaSkKKyAgICAgIGV4ZWN1dGUgImJ1ZmZlciIgaSBleGVjdXRlIGNtbmQKKyAgICBlbmRpZiBsZXQgaSA9IGkrMQorICBlbmR3aGlsZQorZW5kZnVuCisKKyI6Y2FsbCBBbGxCdWZmZXJzKCIlcy9mb28vYmFyL2dlfHVwZGF0ZSIpCisKK1RoYW5rcyBQZXRlciEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VHJhbnNmZXIKK3RleHQgYmV0d2VlbiB0d28gZ3ZpbSBzZXNzaW9ucyB1c2luZyBjbGlwYm9hcmQ8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NzEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NzE8L0E+PEJSPgorCitJZiB5b3UgdXNlIGd2aW0sIHlvdSBjYW4gdHJhbnNmZXIgdGV4dCBmcm9tIG9uZSBpbnN0YW5jZSBvZiBndmltIGludG8gYW5vdGhlcgorb25lIHVzaW5nIGNsaXBib2FyZC4gIEl0IGlzIGNvbnZlbmllbnQgdG8gdXNlICogKHN0YXIpIHJlZ2lzdGVyLCBsaWtlIHRoaXM6CisKK0luIG9uZSBpbnN0YW5jZSB5YW5rIHR3byBsaW5lcyBpbnRvIGNsaXBib2FyZDoKKyAgICAiKjJ5eQorUGFzdGUgaXQgaW4gYW5vdGhlciBpbnN0YW5jZSBpbiBub3JtYWwgbW9kZToKKyAgICAiKnAKK29yIGluIGluc2VydCBtb2RlOgorICAgICZsdDtDdHJsLVImZ3Q7KgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+UmVtb3ZlIHVud2FudGVkIGVtcHR5IGxpbmVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTcyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTcyPC9BPjxCUj4KKworU29tZXRpbWVzIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSBkb2N1bWVudCBJIGluc2VydCBlbXB0eSBsaW5lcywKK3doaWNoIHdpbGwgYmUgbGF0ZXIgcmVtb3ZlZC4gIFRvIGdldCByaWQgb2ZmIHRoZW0gdHJ5OiA6JWcvXiQvZCBUaGlzIHdpbGwKK3JlbW92ZSBhIGwgbCAgZW1wdHkgbGluZSBpbiB0aGUgZG9jdW1lbnQuICBTb21lIG90aGVyIHRpcHBzIHlvdSBjYW4gZmluZAordW5kZXIgd3d3LmxpbnV4Y2xhc3MuZGUvdmltLnBodG1sCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Vc2luZyB2aW0gYXMgY2FsY3VsYXRvcjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03MyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03MzwvQT48QlI+CisKK0Jhc2ljIGNhbGN1bGF0aW9ucyBjYW4gZG9uZSB3aXRoaW4gdmltIGVhc2lseSBieSB0eXBpbmcgKGluc2VydC1tb2RlKTogU1RSRworKD1DVFJMKSArIFIgZm9sbG93ZWQgYnkgPSB0aGVuIGZvciBleGFtcGxlIDIrMiBhbmQgaGl0IFJFVFVSTiB0aGUgcmVzdWx0IDQKK3dpbGwgYmUgcHJpbnRlZCBpbiB0aGUgZG9jdW1lbnQuCisKK1NvbWUgb3RoZXIgdGlwcHMgeW91IGNhbiBmaW5kIHVuZGVyIHd3dy5saW51eGNsYXNzLmRlL3ZpbS5waHRtbAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Vc2luZworVmltIGFzIGFuIG91dGxpbmUgcHJvY2Vzc29yPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTc0Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTc0PC9BPjxCUj4KKworV2l0aCB0aGUgYWRkaXRpb24gb2YgZm9sZGluZywgVmltNiBjYW4gZnVuY3Rpb24gYXMgYSBoaWdoIHBlcmZvcm1hbmNlIG91dGxpbmUKK3Byb2Nlc3Nvci4gU2ltcGx5IDpzZXQgYWkgYW5kIGluIGluc2VydCBtb2RlIHVzZSBiYWNrc3BhY2UgdG8gcHJvbW90ZSBhbmQKK3RhYiB0byBkZW1vdGUgaGVhZGxpbmVzLgorCitJbiBjb21tYW5kIG1vZGUsICZsdDsmbHQ7IHByb21vdGVzIChuJmx0OyZsdDsgdG8gcHJvbW90ZSBtdWx0aXBsZSBsaW5lcyksCithbmQgJmd0OyZndDsgZGVtb3Rlcy4gQWxzbywgaGlnaGxpZ2h0IHNldmVyYWwgaGVhZGxpbmVzIGFuZCAmbHQ7IG9yICZndDsKK3RvIHByb21vdGUgb3IgZGVtb3RlLgorCis6c2V0IGZvbGRtZXRob2Q9aW5kZW50LCBhbmQgdGhlbiB5b3VyIHogY29tbWFuZHMgY2FuIGV4cGFuZCBvciBjb2xsYXBzZQoraGVhZGxpbmUgdHJlZXMsIGZpbGV3aWRlIG9yIGJ5IHRoZSB0cmVlLgorCitUaGUgVmltT3V0bGluZXIgR1BMIGRpc3RybyBjb250YWlucyB0aGUgc2NyaXB0cyBhbmQgY29uZmlncyB0byBlYXNpbHkKK2NvbmZpZ3VyZSBWaW02IGFzIGFuIG91dGxpbmVyLCBpbmNsdWRpbmcgc2NyaXB0cyB0byBjcmVhdGUgdGFnIGZpbGVzIGVuYWJsaW5nCitpbnRlcm91dGxpbmUgaHlwZXJsaW5raW5nLgorCitUaGUgVmltT3V0bGluZXIgcHJvamVjdCBpcyBhdCA8QQorSFJFRj0iaHR0cDovL3d3dy50cm91Ymxlc2hvb3RlcnMuY29tL3Byb2plY3RzL3ZpbW91dGxpbmVyL2luZGV4Lmh0bS4iPmh0dHA6Ly93d3cudHJvdWJsZXNob290ZXJzLmNvbS9wcm9qZWN0cy92aW1vdXRsaW5lci9pbmRleC5odG0uPC9BPjxCUj4KKworU3RldmUgKExpdHQpIHNsaXR0QHRyb3VibGVzaG9vdGVycy5jb20KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+UmVtYXAKK0NBUFNMT0NLIGtleSBpbiBXaW5kb3dzIDIwMDAgUHJvZmVzc2lvbmFsIGFuZCBOVDQuMDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03NSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03NTwvQT48QlI+CisKK0lmIHlvdSdyZSBXaW5kb3dzIDIwMDAgUHJvZmVzc2lvbmFsIHVzZXIgYW5kIGdvdCB0aXJlZCB0byBtb3ZlIHlvdXIgaGFuZHMgb2ZmCitiYXNpYyByb3cgd2hlbiBoaXR0aW5nICZsdDtFU0MmZ3Q7IGtleSBoZXJlIHRoZSBzb2x1dGlvbiAobm90IGZvciBXaW5kb3dzIDl4Lik6CityZW1hcCBDYXBzTG9jayBrZXkgYXMgJmx0O0VTQyZndDsga2V5LiBJdCdzIGxvY2F0ZWQgaW4gdXNlZnVsIHBvc2l0aW9uLiAgUHV0Cit0aGlzIGxpbmVzIGludG8gJmx0O0VzY0xvY2sucmVnJmd0OyBmaWxlIGFuZCBzdGFydCBpdCBpbiBleHBsb3Jlci5SZWJvb3QuRW5qb3kuCisKK1JFR0VESVQ0IFtIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcS2V5Ym9hcmQgTGF5b3V0XQorIlNjYW5jb2RlIE1hcCI9aGV4OjAwLDAwLDAwLDAwLDAwLDAwLDAwLDAwLDAyLDAwLDAwLDAwLDAxLDAwLDNhLDAwLDAwLDAwLDAwLDAwCisKK1RvIHJlc3RvcmUgeW91IGNhcHNsb2NrIGJhY2sganVzdCBkZWxldGUgdGhpcyBlbnRyeSBmcm9tIFJlZ2lzdHJ5IGFuZCByZWJvb3QuCitBbmQgYmVsb3cgaXMgcmVtYXBwaW5nICZsdDtjYXBzbG9jayZndDsgYXMgJmx0O0xlZnQgQ29udHJvbCZndDs6CisKK1JFR0VESVQ0IFtIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcS2V5Ym9hcmQgTGF5b3V0XQorIlNjYW5jb2RlIE1hcCI9aGV4OjAwLDAwLDAwLDAwLDAwLDAwLDAwLDAwLDAyLDAwLDAwLDAwLDFkLDAwLDNhLDAwLDAwLDAwLDAwLDAwCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Gb2xkaW5nIGZvciBRdWlja2ZpeDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03NiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03NjwvQT48QlI+CisKK1RoZSBRdWlja2ZpeCBtb2RlIGFpbXMgdG8gInNwZWVkIHVwIHRoZSBlZGl0LWNvbXBpbGUtZWRpdCBjeWNsZSIgYWNjb3JkaW5nIHRvCisnOmhlbHAgcXVpY2tmaXgnLiBBZnRlciBleGVjdXRpbmcgJzptYWtlJyBvciAnOmdyZXAnIGl0IGlzIHBvc3NpYmxlIHRvIHNraW0KK3Rocm91Z2ggdGhlIGxpc3Qgb2YgZXJyb3JzL21hdGNoZXMgYW5kIHRoZSBhcHByb3ByaWF0ZSBzb3VyY2UgY29kZSBsb2NhdGlvbnMKK3dpdGgsIGZvciBpbnN0YW5jZSwgdGhlICc6Y25leHQnIGNvbW1hbmQuICBBbm90aGVyIHdheSB0byBnZXQgYSBxdWljayBvdmVydmlldworaXMgdG8gdXNlIFZJTXMgZm9sZGluZyBtb2RlLCB0byBmb2xkIGF3YXkgYWxsIHRoZSBlcnJvci1mcmVlL21hdGNoLWZyZWUKK3JlZ2lvbnMuICBUaGUgc2NyaXB0IGF0IHRoZSBlbmQgb2YgdGhpcyBtZXNzYWdlIGNhbiBiZSB1c2VkIGZvciB0aGlzCitwdXJwb3NlLiBJdCBpcyBhdCB0aGUgbW9tZW50IG5vdCBlbGFib3JhdGUgZW5vdWdoIHRvIHB1dCBpdCB1cCBhcyBhICdzY3JpcHQnOworYnV0IGl0IG1pZ2h0IGdpdmUgc29tZW9uZSBpbnNwaXJhdGlvbiB0byBkbyBzby4gIEJpZyByZXN0cmljdGlvbnMgLyBidWdzIGFyZQorYXMgZm9sbG93czogMS4gVmltIFBlcmwgaW50ZXJmYWNlIGlzIHJlcXVpcmVkLCBpLmUuIHRoZSBvdXRwdXQgb2YgJzp2ZXJzaW9uJworbXVzdCBjb250YWluICcrcGVybCcgKFBlb3BsZSB3aXRoIFZpbSBzY3JpcHRpbmcga25vd2xlZGdlIG1pZ2h0IGZpeCB0aGlzKQorMi4gV29ya3Mgb25seSBmb3Igb25lIGZpbGUsIGkuZS4gdGhlIGN1cnJlbnQgYnVmZmVyLiAgMy4gSXQncyBhIHF1aWNrIGhhY2suCitTYW1wbGUgdXNhZ2U6IChhKSBlZGl0IGEgZmlsZSwgKGIpIGRvICc6Z3JlcCByZWdleHAgJScgdG8gZ2V0IGEgcXVpY2tmaXgKK2Vycm9yIGxpc3QgYW5kIChjKSAnOnNvdXJjZSBmb2xkcWYudmltJyB3aWxsIGZvbGQgYXMgZGVzY3JpYmVkIEluY3JlYXNpbmcKK3RoZSB2YWx1ZSBvZiAkQ09OVEVYVCBnaXZlcyB5b3UgbW9yZSBjb250ZXh0IGFyb3VuZCB0aGUgZXJyb3IgcmVnaW9ucy4KKworSGVyZSBjb21lcyBpdCwgaXQgc2hvdWxkIGJlIDcgbGluZXM6IC0tLWZvbGRxZi52aW0gY3dpbmRvdyBwZXJsICRDT05URVhUID0gMDsKK3BlcmwgQEEgPSBtYXAgeyBtL1x8KFxkKylcfC87ICQxICswIH0gJGN1cmJ1Zi0mZ3Q7R2V0KDEuLiRjdXJidWYtJmd0O0NvdW50KCkpOworY2xvc2Ugbm9ybWFsIHpEIHBlcmwgc3ViIGZvbGQgeyBWSU06OkRvQ29tbWFuZCggJF9bMF0gLiAnLCcgLiAoJF9bMV0pIC4gImZvbGQiCispIGlmKCAkX1swXSAmbHQ7ICRfWzFdICk7IH0gcGVybCAkbGFzdCA9IDA7IGZvciAoQEEpIHsgZm9sZCggJGxhc3QrMSskQ09OVEVYVCwKKyRfLTEtJENPTlRFWFQgKTsgJGxhc3QgPSAkXzsgfTsgVklNOjpEb0NvbW1hbmQoKCRBWy0xXSsxKyRDT05URVhUICkKKy4gJywkZm9sZCcgKTsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+RGlzcGxheWluZworc2VhcmNoIHJlc3VsdHMgdXNpbmcgZm9sZHM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NzciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Nzc8L0E+PEJSPgorCitBIGd1eSBJIHdvcmsgd2l0aCB0b2xkIG1lIGFib3V0IGEgZnVuY3Rpb24gdGhhdCBhbiBvbGQgSUJNIHRleHQgZWRpdG9yIGhhZAordGhhdCBoZSBzYWlkIHdhcyB1c2VmdWwsIGFuZCB0aGF0IGlzIHRvIGNyZWF0ZSBmb2xkcyBpbiB0aGUgZmlsZSBhZnRlciBhCitzZWFyY2ggc3VjaCB0aGF0IGV2ZXJ5IGxpbmUgdGhhdCBpcyB2aXNpYmxlIGNvbnRhaW5zIHRoZSBzZWFyY2ggcGF0dGVybihleGNlcHQKK3Bvc3NpYmx5IHRoZSBmaXJzdCkuIEFsbCBsaW5lcyB0aGF0IGRvIG5vdCBjb250YWluIHRoZSBzZWFyY2ggcGF0dGVybiBhcmUKK2ZvbGRlZCB1cCB0byB0aGUgbGFzdCBvY2N1cmVuY2Ugb2YgdGhlIHBhdHRlcm4gb3IgdGhlIHRvcCBvZiB0aGUgZmlsZS4KKworT25lIHVzZSBmb3Igc3VjaCBhIGZ1bmN0aW9uIGlzIHRvIGJlIGFibGUgdG8gbWFrZSBhIHF1aWNrIGFuZCBkaXJ0eSBhcGkgb2YKK2Egc291cmNlIGZpbGUuCUZvciBleGFtcGxlLCBpZiB3b3JraW5nIGluIEphdmEsIHlvdSBjb3VsZCBydW4gdGhlIGZ1bmN0aW9uCit1c2luZyB0aGUgcGF0dGVybiAicHVibGljfHByb3RlY3RlZHxwcml2YXRlIiBhbmQgaXRoZSByZXN1bHRzIHdvdWxkIGJlIHRoYXQKK29ubHkgdGhlIG1ldGhvZCBoZWFkZXJzIHdvdWxkIGJlIHZpc2libGUgKHdlbGwsIGNsb3NlIGVub3VnaCkuCisKK2Z1bmN0aW9uISBGb2xkc2VhcmNoKHNlYXJjaCkKKwlub3JtYWwgekUJICAgImVyYXNlIGFsbCBmb2xkcyB0byBiZWdpbiB3aXRoIG5vcm1hbCBHJAorCSJtb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgbGV0IGZvbGRlZCA9IDAJImZsYWcgdG8gc2V0IHdoZW4KKwlhIGZvbGQgaXMgZm91bmQgbGV0IGZsYWdzID0gInciICAgICJhbGxvdyB3cmFwcGluZyBpbiB0aGUgc2VhcmNoIGxldAorCWxpbmUxID0gIDAgICAgICJzZXQgbWFya2VyIGZvciBiZWdpbm5pbmcgb2YgZm9sZCB3aGlsZSBzZWFyY2goYTpzZWFyY2gsCisJZmxhZ3MpICZndDsgMAorCQlsZXQgIGxpbmUyID0gbGluZSgiLiIpCSJlY2hvICJwYXR0ZXJuIGZvdW5kIGF0IGxpbmUgIworCQkiIGxpbmUyIGlmIChsaW5lMiAtMSAmZ3Q7IGxpbmUxKQorCQkJImVjaG8gbGluZTEgLiAiOiIgLiAobGluZTItMSkgImVjaG8gIkEgZm9sZCBnb2VzIGhlcmUuIgorCQkJZXhlY3V0ZSAiOiIgLiBsaW5lMSAuICIsIiAuIChsaW5lMi0xKSAuICJmb2xkIgorCQkJCQkJbGV0IGZvbGRlZCA9IDEJICAgICAiYXQKKwkJCQkJCWxlYXN0IG9uZSBmb2xkIGhhcyBiZWVuIGZvdW5kCisJCWVuZGlmIGxldCBsaW5lMSA9IGxpbmUyICAgICAidXBkYXRlIG1hcmtlciBsZXQgZmxhZ3MgPSAiVyIKKwkJInR1cm4gb2ZmIHdyYXBwaW5nCisJZW5kd2hpbGUKKwkJIiBOb3cgY3JlYXRlIHRoZSBsYXN0IGZvbGQgd2hpY2ggZ29lcyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCW5vcm1hbCAkRyBsZXQgIGxpbmUyID0gbGluZSgiLiIpCisJCSJlY2hvICJlbmQgb2YgZmlsZSBmb3VuZCBhdCBsaW5lICMgIiBsaW5lMgorCWlmIChsaW5lMiAgJmd0OyBsaW5lMSAmJiBmb2xkZWQgPT0gMSkKKwkJImVjaG8gbGluZTEgLiAiOiIgLiBsaW5lMiAiZWNobyAiQSBmb2xkIGdvZXMgaGVyZS4iCisJCWV4ZWN1dGUgIjoiLiBsaW5lMSAuICIsIiAuIGxpbmUyIC4gImZvbGQiCisJZW5kaWYKK2VuZGZ1bmN0aW9uCisKKyIgQ29tbWFuZCBpcyBleGVjdXRlZCBhcyAnOkZzIHBhdHRlcm4nIiBjb21tYW5kISAtbmFyZ3M9KyAtY29tcGxldGU9Y29tbWFuZAorRnMgY2FsbCBGb2xkc2VhcmNoKCZsdDtxLWFyZ3MmZ3Q7KSAiIFZpZXcgdGhlIG1ldGhvZHMgYW5kIHZhcmlhYmxlcyBpbiBhCitqYXZhIHNvdXJjZSBmaWxlLiIgIGNvbW1hbmQhIEphcGkgRnMgcHVibGljXHxwcm90ZWN0ZWRcfHByaXZhdGUKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPnJvdGF0aW5nIG1haWwgc2lnbmF0dXJlczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD03ODwvQT48QlI+CisKK0ZvciBwZW9wbGUgdXNpbmcgbXV0dCBhbmQgdmltIGZvciBtYWlsLCB0aGUgZm9sbG93aW5nIHNjcmlwdCB3aWxsIGFsbG93Cit5b3UgdG8gaW5zZXJ0IGEgbmV3IHNpZ25hdHVyZSAoYW5kIGFnYWluIGFuZCBhZ2FpbiBpZiB5b3UgZG9uXCd0IGxpa2UgdGhlCitjdXJyZW50IG9uZSkgYXQgdGhlIGJvdHRvbSBvZiB5b3VyIG1haWwuIFRoaXMgaXMgdXNlZnVsbCBlZyB3aGVuIHlvdSBkb25cJ3QKK3dhbnQgdG8gc2VuZCBhIHBvdGVudGlhbGx5IG9mZmVuc2l2ZSBxdW90ZSB0byBzb21lb25lIHlvdSBkb25cJ3Qga25vdyB2ZXJ5Cit3ZWxsIChvciBhIG1haWxpbmcgbGlzdCksIGJ1dCBhcmUgdG9vIGxhenkgdG8gZGVsZXRlIHRoZSBxdW90ZSwgb3BlbiB5b3VyCitxdW90ZXMgZmlsZSwgYW5kIGN1dCBhbmQgcGFzdGUgYW5vdGhlciBvbmUgaW4uIChJIHB1dCBpdCBoZXJlIGluIFwndGlwc1wnCithbmQgbm90IGluIFwnc2NyaXB0c1wnIGJlY2F1c2UgaXQgaXMgaW1vIHRvbyBzaG9ydCB0byBiZSBhIFwncmVhbFwnIHNjcmlwdCkKKworIiByb3RhdGVfc2lnLnZpbSAiIE1haW50YWluZXI6CVJvZWwgVmFuaG91dCAmbHQ7cm9lbEAyZS1zeXN0ZW1zLmNvbSZndDsKKyIgVmVyc2lvbjogICAgIDAuMSAiIExhc3QgQ2hhbmdlOiBUdWVzZGF5LCBKdW5lIDEyLCAyMDAxICIgTWFwcGluZyBJIHVzZToKKyIgbm1hcCAsciA6Y2FsbCBSb3RhdGVTaWcoKSZsdDtDUiZndDsgIiBVc2FnZTogIiAtTWFrZSBzdXJlIHlvdSBkZWxpbWl0Cit5b3VyIHNpZyB3aXRoICctLSAnLCBvciBhZGp1c3QgdGhlIHNjcmlwdCAiIC1BZGp1c3QgdGhlIGxhc3QgZXhlY3V0ZSB0byBhCitjb21tYW5kIHRoYXQgcHJpbnRzIGEgc2lnIHRvIHN0ZG91dCAiIEtub3duIHByb2JsZW1zOiAiICAgLSBZb3UnbGwgZ2V0IGFuCitlcnJvciBtZXNzYWdlIHdoZW4geW91J3JlIGJlbG93IHRoZSBsYXN0ICIgICAgICdeLS0gJCcgaW4geW91ciBtYWlsIChub3RoaW5nCitiYWQgdGhvdWdoIC0ganVzdCBhbiBub3QtICIJZm91bmQgbWFya2VyKQorCitmdW5jdGlvbiEgUm90YXRlU2lnKCkKKyAgICBub3JtYWwgbVFHIGV4ZWN1dGUgJz9eLS0gJCcgZXhlY3V0ZSAnOm5vaGwnIG5vcm1hbCBvJmx0O0VTQyZndDsgbm9ybWFsCisgICAgZEcgbm9ybWFsICZsdDtDUiZndDsgZXhlY3V0ZSAnciAhfi9iaW4vYXV0b3NpZyB+Ly5xdW90ZXMgXCUnIG5vcm1hbCBgUQorZW5kZnVuY3Rpb24KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SG93IHRvIHVzZQorOmdyZXAgdG8gZ2V0IGEgY2xpY2thYmxlIGxpc3Qgb2YgZnVuY3Rpb24gbmFtZXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9NzkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Nzk8L0E+PEJSPgorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgbWFrZSBhIDpjd2luZG93IHdpbmRvdyB3aXRoIGEgbGluZSBwZXIgZnVuY3Rpb24KK2luIHRoZSBjdXJyZW50IEMgc291cmNlIGZpbGUuIE5PVEU6IEl0IHdyaXRlcyB0aGUgZmlsZSBhcyBhIHNpZGUgZWZmZWN0LgorCitJbnZva2Ugd2l0aCAnOmNhbGwgU2hvd0Z1bmMoKScgWW91IG1heSB3YW50IHRvIGRvIDpubWFwICZsdDtzb21la2V5Jmd0OworOmNhbGwgU2hvd0Z1bmMoKSZsdDtDUiZndDsKKworZnVuY3Rpb24hIFNob3dGdW5jKCkKKworICAgIGxldCBnZl9zID0gJmdyZXBmb3JtYXQgbGV0IGdwX3MgPSAmZ3JlcHByZworCisgICAgbGV0ICZncmVwZm9ybWF0ID0gJyUqXGslKlxzZnVuY3Rpb24lKlxzJWwlKlxzJWYgJSpccyVtJyBsZXQgJmdyZXBwcmcgPQorICAgICdjdGFncyAteCAtLWMtdHlwZXM9ZiAtLXNvcnQ9bm8gLW8gLScKKworICAgIHdyaXRlIHNpbGVudCEgZ3JlcCAlIGN3aW5kb3cKKworICAgIGxldCAmZ3JlcGZvcm1hdCA9IGdmX3MgbGV0ICZncmVwcHJnID0gZ3BfcworCitlbmRmdW5jCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlJlc3RvcmUKK2N1cnNvciB0byBmaWxlIHBvc2l0aW9uIGluIHByZXZpb3VzIGVkaXRpbmcgc2Vzc2lvbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04MCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04MDwvQT48QlI+CisKK0hlcmUncyBzb21ldGhpbmcgZm9yIHlvdXIgJmx0Oy52aW1yYyZndDsgd2hpY2ggd2lsbCBhbGxvdyB5b3UgdG8gcmVzdG9yZQoreW91ciBjdXJzb3IgcG9zaXRpb24gaW4gYSBmaWxlIG92ZXIgc2V2ZXJhbCBlZGl0aW5nIHNlc3Npb25zLiAgVGhpcyB0ZWNobmlxdWUKK3VzZXMgdGhlIHZpbWluZm8gb3B0aW9uOgorCitFeC4gc2V0IHZpbWluZm89JzEwLFwiMTAwLDoyMCwlLG5+Ly52aW1pbmZvCisgICAgYXUgQnVmUmVhZFBvc3QgKiBpZiBsaW5lKCInXCIiKSAmZ3Q7IDB8aWYgbGluZSgiJ1wiIikgJmx0Oz0KKyAgICBsaW5lKCIkIil8ZXhlKCJub3JtICdcIiIpfGVsc2V8ZXhlICJub3JtICQifGVuZGlmfGVuZGlmCisKK0lmIHlvdSdyZSBvbiBVbml4LCB0aGUgdmltaW5mbyBpcyBwcm9iYWJseSBmaW5lIGFzIGlzIChidXQgY2hlY2sgdXAgb24gVmltJ3MKK2hlbHAgZm9yIHZpbWluZm8gdG8gc2VlIGlmIHlvdSBsaWtlIHRoZSBzZXR0aW5ncyBhYm92ZSkuICBGb3IgV2luZG93cyB5b3UnbGwKK25lZWQgdG8gY2hhbmdlIHRoZSAibiIgc3Vib3B0aW9uIHRvIHNvbWV0aGluZyBsaWtlCisKK0V4LiBzZXQgdmltaW5mbz0nMTAsXCIxMDAsOjIwLCUsbmM6XFxzb21lXFxwbGFjZVxcdW5kZXJcXFdpbmRvelxcX3ZpbWluZm8KKworVGhpcyB0aXAgaXMgYSBzb21ld2hhdCBpbXByb3ZlZCB2ZXJzaW9uIG9mIHRoZSBleGFtcGxlIGdpdmVuIGZvciA6aGUgbGluZSgpCitpbiB0aGUgVmltIG9uLWxpbmUgZG9jdW1lbnRhdGlvbi4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlN1YnN0aXR1dGlvbiBvZiBjaGFyYWN0ZXJzIGFuZCBsaW5lcyBpbiBWSU0gaXMKK21hZGUgZmFyIGVhc2llciB3aXRoIHRoZSBzIGFuZCBTIGNvbW1hbmRzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTgxIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTgxPC9BPjxCUj4KKworU3Vic3RpdHV0ZSAgQ2hhcmFjdGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJIHdhcyBqdXN0IGVkaXRpbmcKK2EgZmlsZSB0aGF0IGNvbnRhaW5lZCB0aGUgc2FtZSBsZWFkaW5nIHN0cmluZyBvbiBtYW55IGxpbmVzLgorCitleGFtcGxlOgorCitmb29fYmFyX2JhejE9YSBmb29fYmFyX2JhejE9YWJjNjc0IGZvb19iYXJfYmF6MT1xcnMgZm9vX2Jhcl9iYXoxPW0xCitmb29fYmFyX2JhejE9Yno5MCBmb29fYmFyX2JhejE9YmMgLi4uCisKK05lZWRpbmcgdG8gb25seSBzdWJzdGl0dXRlIGEgcG9ydGlvbiBvZiB0aGUgc3RyaW5nLCBJIHJlZmVycmVkIHRvIGEgVklNCityZWZlcmVuY2UgY2FyZCBhbmQgZGlzY292ZXJlZCBhIGNvbW1hbmQgYW5zd2VyaW5nIG15IG5lZWQgZXhhY3RseS4gVGhlIHMKK2NvbW1hbmQgaXMgdXNlZCB0byBzdWJzaXR1dGUgYSBjZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzLiBJbiBteSBleGFtcGxlCitmaWxlIGFib3ZlLCBpZiBJIG9ubHkgbmVlZGVkIHRvIHN1YnNpdGl0dXRlIHRoZSBjaGFyYWN0ZXJzIGZvb19iYXIsIEkgc2V0Cit0aGUgY3Vyc29yIG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2hlcmUgSSdkIGxpa2UgdGhlIHN1YnNpdHV0aW9uIHRvIGJlZ2luCithbmQgdHlwZSA3cy4gVklNIGRyb3BzIHRoZSBjaGFyYWN0ZXJzIGZvb19iYXIgYW5kIGdvZXMgdG8gaW5zZXJ0IG1vZGUsCit3YWl0aW5nIGZvciB0aGUgc3Vic3RpdHV0aW9uIHRleHQuCisKK1N1YnN0aXR1dGUgTGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWZ0ZXIgeWVhcnMgb2YgdXNpbmcgdmkgYW5kIFZJTSBhbmQKK2Fsd2F5cyBkZWxldGluZyBtdWx0aXBsZSBsaW5lcyBpbiBvcmRlciB0byByZXBsYWNlIHRoZW0sIEkganVzdCBkaXNjb3ZlcmVkCit0aGUgUyBjb21tYW5kLiBJZiB5b3UgbmVlZCB0byBzdWJzaXR1dGUgdGhyZWUgbGluZXMgb2YgdGV4dCwgc2ltcGx5IHR5cGUKKzNTLiBWSU0gZHJvcHMgdGhlIHRocmVlIGxpbmVzIGFuZCBnb2VzIGludG8gaW5zZXJ0IG1vZGUsIHdhaXRpbmcgZm9yIHRoZQorc3Vic2l0dXRpb24gdGV4dC4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+bGV0dGluZwordmFyaWFibGUgdmFsdWVzIGJlIG92ZXJ3cml0dGVuIGluIGEgc2NyaXB0PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTgyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTgyPC9BPjxCUj4KKwordGhpcyBpcyBhIHNpbXBsZSBmdW5jdGlvbiBpIHdyb3RlIHRvIGdldCB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBmcm9tIHRocmVlCitkaWZmZXJlbnQgcGxhY2VzIChpbiB0aGF0IG9yZGVyKTogIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlIGdsb2JhbCBzZXR0aW5nCitvciBmcm9tIHRoZSBzY3JpcHQgaXRzZWxmLgorCit0aGlzIGFsbG93cyBtZSB0byBzZXQgYSBkZWZhdWx0IHZhbHVlIGZvciBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW5zaWRlIG15CitzY3JpcHQgYW5kIHRoZSB1c2VyIHRvIGNoYW5nZSBpdCBvbiBhIGdsb2JhbCBsZXZlbCBieSBzZXR0aW5nIHRoZSBzYW1lIHZhcmlhYmxlCit3aXRoIGEgZzogcHJlcGVuZGVkLiAgdGhlbiwgdGhleSBjYW4gZnVydGhlciBzZXQgaXQgb24gYSBwZXItYnVmZmVyIGxldmVsIGJ5Cit0aGUgdGhlIGI6IG1lY2hhbmlzbS4gIG9uZSBvZiB0aGUgZXhhbXBsZXMgZm9yIHRoaXMgbWlnaHQgYmUgbXkgY29tbWVudHMgc2NyaXB0Cisobm90IHVwbG9hZGVkKS4gIGkgaGF2ZSBhIHZhcmlhYmxlIGluIHRoZXJlIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGNvbW1lbnQKK2NoYXJhY3RlcnMgKC8vIGZvciBqYXZhLCBmb3IgZXhhbXBsZSkgYXJlIHBsYWNlZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lIG9yCitqdXN0IGJlZm9yZSB0aGUgZmlyc3Qtbm9uLWJsYW5rcyBpbiB0aGUgdGV4dC4gIGkgc2V0IHVwIGEgZGVmYXVsdCBpbiBteSBzY3JpcHQ6CisKK2xldCBzOmNvbW1lbnRzX2h1Z19zdGFydF9vZl9saW5lPTAgICAiIGNvbW1lbnRzIHNob3VsZCBodWcgdGhlIHRleHQKKwordGhhdCdzIGZpbmUgYXMgYSBkZWZhdWx0LCBidXQgaWYgaSB3YW50IHRvIG92ZXJ3cml0ZSBpdCBmb3IgdmltIHNjcmlwdHMsCitpIGp1c3QgcHV0IHRoZSBmb2xsb3dpbmcgaW4gbXkgZnRwbHVnaW4vdmltLnZpbToKKworbGV0IGI6Y29tbWVudHNfaHVnX3N0YXJ0X29mX2xpbmU9MSAgICIgdmltIGNvbW1lbnRzIHNob3VsZCBodWcgdGhlIGZpcnN0Citjb2x1bW4sIGFsd2F5cworCisiIHRyaWVzICB0byByZXR1cm4gIHRoZSBidWZmZXItc3BlY2lmaWMgIHZhbHVlIG9mICBhIHZhcmlhYmxlOwlpZiBub3QKKyIgZm91bmQsICB0cmllcyB0byAgcmV0dXJuIHRoZQlnbG9iYWwgdmFsdWUgIC0tIGlmICB0aGF0J3Mgbm90ICBmb3VuZCAiCitlaXRoZXIsIHJldHVybnMgdGhlIHZhbHVlIHNldCBpbiB0aGUgc2NyaXB0IGl0c2VsZiBmdW5jdGlvbiEgR2V0VmFyKHZhck5hbWUpCisgIGlmIChleGlzdHMgKCJiOiIgLiBhOnZhck5hbWUpKQorICAgIGV4ZSAibGV0IHJldFZhbD1iOiIgLiBhOnZhck5hbWUKKyAgZWxzZWlmIChleGlzdHMgKCJnOiIgLiBhOnZhck5hbWUpKQorICAgIGV4ZSAibGV0IHJldFZhbD1nOiIgLiBhOnZhck5hbWUKKyAgZWxzZWlmIChleGlzdHMgKCJzOiIgLiBhOnZhck5hbWUpKQorICAgIGV4ZSAibGV0IHJldFZhbD1zOiIgLiBhOnZhck5hbWUKKyAgZWxzZQorICAgIHJldFZhbD0tMQorICBlbmRpZiByZXR1cm4gcmV0VmFsCitlbmRmdW5jdGlvbgorCitwZXJzb25hbGx5LCBpIG5ldmVyIGxldCBpdCBnZXQgdG8gdGhlIC0xIHN0YXRlIGJ5IGFsd2F5cyBoYXZpbmcgYW4gczogc2V0Cit3aXRoIFNPTUUgZGVmYXVsdCB2YWx1ZS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+aG93Cit0byBpbmRlbnQgKHVzZWZ1bCBmb3Igc291cmNlIGNvZGUpPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTgzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTgzPC9BPjxCUj4KKworSGVyZSBpcyB0aGUgbW9zdCB1c2VmdWwgdmltIGNvbW1hbmQgdGhhdCBJIGtub3cgb2YgYW5kIEknbSBzdXJwcmlzZWQgdGhhdAoraXQncyBub3QgeWV0IGluIHRoZSB0aXBzIGxpc3QuCisKK0kgdXNlIHRoZSBpbmRlbnQgZmVhdHVyZXMgb2YgdmltIGFsbCB0aGUgdGltZS4gQmFzaWNhbGx5LCBpdCBsZXRzIHlvdSBpbmRlbnQKK3lvdXIgc291cmNlIGNvZGUuCisKK1NFVFVQOiBUbyBtYWtlIGluZGVudGF0aW9uIHdvcmsgbmljZWx5IEkgaGF2ZSB0aGUgZm9sbG93aW5nIGluIG15IC52aW1yYyBmaWxlOgorc2V0IGV0IHNldCBzdz00IHNldCBzbWFydHRhYgorCit0aGVzZSBtYWtlIHZpbSBiZWhhdmUgbmljZWx5IHdoZW4gaW5kZW50aW5nLCBnaXZpbmcgNCBzcGFjZXMgKG5vdCB0YWJzKQorZm9yIGVhY2ggInRhYnN0b3AiLgorCitIT1cgVE8gVVNFOiBpbiBjb21tYW5kIG1vZGUsID09IHdpbGwgaW5kZW50IHRoZSBjdXJyZW50IGxpbmUgc2VsZWN0aW5nIGEgcmFuZ2UKK29mIGxpbmVzICh3aXRoIHNoaWZ0LXYpIHRoZW4gPT0gd2lsbCBpbmRlbnQgeW91ciBzZWxlY3Rpb24gdHlwaW5nIGEgbnVtYmVyCit0aGVuID09IHdpbGwgaW5kZW50IHRoYXQgbWFueSBsaW5lcywgc3RhcnRpbmcgZnJvbSB5b3VyIGN1cnNvciAoeW91IGdldCB0aGUKK2lkZWEsIHRoZXJlIGFyZSBtYW55IG90aGVyIHRoaW5ncyB5b3UgY2FuIGRvIHRvIHNlbGVjdCBhIHJhbmdlIG9mIGxpbmVzKQorCitUZWxsIG1lIHRoYXQgaXNuJ3QgZ3JlYXQ/CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkNoYW5naW5nCit0aGUgYmVoYXZpb3VyIG9mIC4gdG8gaW5jbHVkZSB2aXN1YWwgbW9kZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04NCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04NDwvQT48QlI+CisKK29uZSBvZiB0aGUgdGhpbmdzIGkgZG8gYSBsb3QgaW4gdmltIGlzIHRvIG1ha2UgYSBjaGFuZ2UgdG8gdGhlIGJlZ2lubmluZyBvcgorZW5kIG9mCXRoZSBsaW5lIChzdWNoIGFzIGFkZGluZyAgdGhlIHRleHQgJy8vIHJlbW92ZScgYXQgIHRoZSBlbmQgb2YgamF2YQorZGVidWcgY29kZSkuICBhIHF1aWNrIHdheSBvZiBkb2luZyAgdGhpcyBpcyB0byB1c2UgYSAgdG8gYXBwZW5kIHRoZSB0ZXh0IHRvCit0aGUgZW5kIG9mIHRoZSBmaXJzdCBsaW5lICBhbmQgdGhlbiBtb3ZlIGRvd24gb25lLCBoaXQgLiAocmVwZWF0IGxhc3QgZWRpdCksCittb3ZlIGRvd24sIGhpdCAuICBldGMuIGV0Yy4gdGhlIGZvbGxvd2luZyBtYXBwaW5nIGFsbG93cyBvbmUgdG8gIHNpbXBseQoraGlnaGxpZ2h0IHRoZSAgcmVnaW9uICBpbiAgcXVlc3Rpb24gYW5kICBoaXQgIC4gIC0tIGl0CXdpbGwgYXV0b21hdGljYWxseQorZXhlY3V0ZSB0aGUgLiBvbmNlIG9uIGVhY2ggbGluZToKKworICAiIGFsbG93IHRoZSAuIHRvIGV4ZWN1dGUgb25jZSBmb3IgZWFjaCBsaW5lIG9mIGEgdmlzdWFsIHNlbGVjdGlvbiB2bm9yZW1hcAorICAuIDpub3JtYWwgLiZsdDtDUiZndDsKKworYW5vdGhlciB0aGluZyBpIGRvIGEgbG90IGlzIHRvCXJlY29yZCBhIHF1aWNrIG1hY3JvIGluIHRoZSAiYSIgcmVnaXN0ZXIKK2FuZCB0aGVuIHBsYXkgaXQgYmFjayBhIG51bWJlciBvZiAgdGltZXMuIHdoaWxlIEBAIGNhbiBiZSB1c2VkIHRvIHJlcGVhdCB0aGUKK2xhc3QgcmVnaXN0ZXIgdXNlZCwgbXkgcmVjb3JkZWQgbWFjcm9zIHNvbWV0aW1lcyB1c2Ugb3RoZXIgcmVnaXN0ZXJzIHNvIEBACitkb2Vzbid0IG5lY2Vzc2FyaWx5ICBnaXZlIG1lIHRoZSBzYW1lIHJlc3VsdHMgYXMgIEBhLiBhbHNvLCBpIGhhdmUgbWFwcGVkICcKK3RvIGAgIGJlY2F1c2UgaSBsaWtlIHRvIGdvIHRvIHRoZSBwcmVjaXNlICBsb2NhdGlvbiBvZiBteSBtYXJrcyAtLSBhbHdheXMgLS0KK2FuZCBuZXZlciB0byB0aGUgIGJlZ2lubmluZyBvZiB0aGUgbGluZS4gdGhpcyAgbGVhdmVzIG15IGAga2V5IHVudXNlZC4gc286CisKKyAgIiBtYWtlIGAgZXhlY3V0ZSB0aGUgY29udGVudHMgb2YgdGhlIGEgcmVnaXN0ZXIgbm5vcmVtYXAgYCBAYQorCit0aGVuLCBpbiBrZWVwaW5nIHdpdGggdGhlIHZpc3VhbCAuIGFib3ZlLCBpIGRpZCB0aGUgc2FtZSBmb3IgdGhlIGAgLS0gaXMKK3RoZXhlY3V0ZXMgQGEgb25jZSBvbiBlYWNoIGhpZ2hsaWdoZWQgbGluZS4KKworICB2bm9yZW1hcCBgIDpub3JtYWwgQGEmbHQ7Q1ImZ3Q7CisKK2FzIGFuIGV4YW1wbGUsIHNheSBpIGhhdmUgdGhlIGZvbGxvd2luZyBsaW5lcyBvZiBqYXZhIGNvZGU6CisKKyAgICAgIHB1YmxpYyBTdHJpbmcgbV9hc2RmOyBwdWJsaWMgU3RyaW5nIG1fbGtoajsgcHVibGljIGludCBtX2hqa2hqa2g7CisKK2FuZCwgZm9yIHNvbWUgcmVhc29uLCBpIG5lZWQgdG8gZ2V0IHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICJhc2RmIiAibGtoaiIgImhqa2hqa2giCisKK2kgcmVjb3JkIHRoZSBmb2xsb3dpbmcgaW50byBhOgorCisgIF5jZl8iJmx0O0VTQyZndDskciIKKwordGhlIF4gIGlzIGJlY2F1c2UgbXkgIGphdmEgY29kZSBpcyAgaW5kZW50ZWQgYW5kIGkgIGRvbid0IHdhbnQgdG8gIGdvIHRvCitjb2x1bW4gMCBhbmQgdGhlICZsdDtlc2MmZ3Q7IGlzIGFuIGFjdHVhbCBlc2NhcGUgaSBoaXQgdG8gZXhpdCBpbnNlcnQgbW9kZS4KKwordGhlbiwgaSAgc2ltcGx5IHNlbGVjdCAodmlzdWFsbHkpIHRoZSAgb3RoZXIgbGluZXMgKG9ubHkgdHdvICBpbiBjYXNlIC0tCithZG1pdHRlZGx5IG5vdCBhbiBvdmVybHkgdXNlZnVsIGV4YW1wbGUpIGFuZCBqdXN0IGhpdCBgLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Ib3cgdG8gbWltaWMKK3RoZSB2aW0gNi4wIHBsdWdpbiBmZWF0dXJlIHdpdGggb2xkZXIgdmVyc2lvbnM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9ODUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9ODU8L0E+PEJSPgorCitJZiB5b3UgZG8gbm90IGhhdmUgdmltIDYuMCwgYnV0IHdvdWxkIGxpa2UgdG8gbWltaWMgdGhlIHBsdWdpbnMgZGlyZWN0b3J5CitmZWF0dXJlIHRoZW4gY29weSBhbmQgcGFzdGUgdGhpcyBpbnRvIHlvdXIgdmltcmM6CisKK2V4ZWMgInNvdXJjZSAiIC4gc3Vic3RpdHV0ZShnbG9iKCRWSU0uIi9wbHVnaW5zLyoudmltIiksICJcbiIsICJcbnNvdXJjZSAiLAorImciKQorCitJdCB3aWxsIGF1dG9tYXRpY2FsbHkgc291cmNlIGV2ZXJ5IHZpbSBzY3JpcHQgZmlsZSBsb2NhdGVkIGluIHRoZSB2aW0vcGx1Z2lucworZGlyZWN0b3J5LiAgTm93LCB0byBhZGQgYSBuZXcgcGx1Z2luLCBqdXN0IGRyb3AgdGhlIHNjcmlwdCBpbiB0aGlzIGRpcmVjdG9yeQorYW5kIHZpbSB3aWxsIGF1dG9tYXRpY2FsbHkgZmluZCBpdC4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SGVscHMKK3VuZG8gMSBsaW5lIHdoZW4gZW50ZXJlZCBtYW55PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTg2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTg2PC9BPjxCUj4KKworV2hlbiBVIGVudGVyZWQgdGV4dCwgVSBjYW5ub3QgdW5kbyBvbmx5IDEgbGluZSwgZm9yIGV4YW1wbGUsIHdoZW4gVSBwcmVzcworInUiLCBhbGwgZW50ZXJlZCBpbiBsYXN0ICJpbnNlcnQiIHRleHQgcmVtb3ZlZC4KKworSWYgVSBhZGQgdGhpcyBsaW5lIHRvIC52aW1yYzogaW5vcmVtYXAgJmx0O1JldHVybiZndDsgJmx0O1JldHVybiZndDteT15bCit3aGVyZSAiXk8iIG9yICJeWyIgaXMgMSBjaGFyICJ1IiB3aWxsIHVuZG8gKHJlbW92ZSkgb25seSAxIGxpbmUuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkdldAordmltIDUueCB3aW5kb3cgaW4gdmltIDYueDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04NyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04NzwvQT48QlI+CisKK1RoZSBmb3JtYXQgb2YgdGhlIHdpbmRvdyB0aXRsZSBpbiB2aW0gNS54ICh3ZWxsLCBhdCBsZWFzdCBmb3IgNS43LC44LCBmb3IKK1dpbjMyKSB1c2VkIHRvIGJlIFZJTSAtICZsdDtmdWxsIGZpbGVuYW1lIHdpdGggcGF0aCZndDsuICBJdCdzIG5vdCBpbiB0aGUKK3dpbjMyIGJpbmFyeSBvZiA2LjBhbiB0aGF0IEkgZm91bmQuICBJIHdhbnQgbXkgb2xkIHdheSBiYWNrLgorCitUdXJucyBvdXQsIGFsbCB0aGF0IGl0IHRha2VzIHRvIGdldCBpdCBiYWNrIGlzIDpzZXQgdGl0bGUgdGl0bGVzdHJpbmc9VklNXAorLVwgJUYgIm1ha2Ugc3VyZSB0aGF0IHRoZSB3aW5kb3cgY2FwdGlvbiBzZXR0aW5nIGlzIHR1cm5lZCBvbiBhbmQgc2V0IGNhcHRpb24KK3RvIHZpbSA1Lnggc3R5bGUKKworT2gsIGhvd2V2ZXIsIG9uZSB0aGluZyBJIGRpZCBsaWtlIGFib3V0IHRoZSA2LjAgc3R5bGUgaXMgdGhhdCBpdCBwdXRzIHRoZQord29yZCAiaGVscCIgaW4gdGhlIHRpdGxlIHdoZW4gdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGEgaGVscCBmaWxlOyBzbywgSSBqdXN0Cit0YWNrZWQgJWggdG8gbXkgdGl0bGVzdHJpbmcgZ2l2aW5nOgorCis6c2V0IHRpdGxlIHRpdGxlc3RyaW5nPVZJTVwgLVwgJUZcICVoICJtYWtlIHN1cmUgdGhhdCB0aGUgd2luZG93IGNhcHRpb24KK3NldHRpbmcgaXMgdHVybmVkIG9uIGFuZCBzZXQgY2FwdGlvbiB0byB2aW0gNS54IHN0eWxlCisKK3NlZSBhbHNvOiA6aGUgJ3RpdGxlc3RyaW5nJyA6aGUgJ3N0YXR1c2xpbmUnCSJmb3IgdGhlIGZvcm1hdCBmb3IgdGl0bGVzdHJpbmcKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SG93Cit0byBtYXhpbWl6ZSB2aW0gb24gZW50cnkgKHdpbjMyKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD04ODwvQT48QlI+CisKK01heWJlIGl0J3MganVzdCBiZWNhdXNlIEkgaGF2ZSBmYXIgdG9vIHNtYWxsIG9mIGEgbW9uaXRvciwgYmVjYXVzZSBJIGNhbgorZ2V0IGRpc3RyYWN0ZWQgd2hpbGUgY29kaW5nIGlmIEkgaGF2ZSBvdGhlciBzdHVmZiBvbiB0aGUgc2NyZWVuLCBvciBiZWNhdXNlIEkKK3N0YXJ0aW5nIHVzaW5nIHZpbSBvbiBhIGNvbnNvbGUsIGJ1dCBJIGRlZmluaXRlbHkgbGlrZSBteSB2aW0gd2luZG93IG1heGltaXplZC4KK0FueXdheSwgc3RpY2tpbmcgdGhlIGZvbGxvd2luZyBpbiB5b3VyIHZpbXJjIHdpbGwgYWx3YXlzIG1heGltaXplIHlvdXIgdmltCit3aW5kb3cgb24gc3RhcnR1cC4KKworYXUgR1VJRW50ZXIgKiBzaW1hbHQgfngKKworOmhlIHdpbjE2LW1heGltaXplZAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5HZXQgbW9yZQorc2NyZWVuIHJlYWwgZXN0YXRlIGJ5IGhpZGRpbmcgdG9vbGJhciBhbmQvb3IgbWVudXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9ODkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9ODk8L0E+PEJSPgorCitJIHVzZSBndmltIG92ZXIgY29uc29sZSB2aW0gYmVjYXVzZSBndmltIGlzIG11Y2ggbW9yZSByZWFkYWJsZSAodW5kZXIgV2luZG93cykuCitIb3dldmVyLCB0aGF0IGRvZXNuJ3QgbWVhbiBJIHdhbnQgdG8gZGVkaWNhdGUgc2NyZWVuIHNwYWNlIHRvIHRoaW5ncyBJJ2xsCituZXZlciB1c2UgKGkuZS4gdGhlIHRvb2xiYXIgYW5kIHRoZSBtZW51cykuCisKK0FueXdheSwgeW91IGNhbiBnaXZlIHRoZSBmb2xsb3dpbmcgYSB0cnkgaWYgeW91J2QgbGlrZS4KKworc2V0IGd1aW9wdGlvbnMtPVQgImdldCByaWQgb2YgdG9vbGJhciBzZXQgZ3Vpb3B0aW9ucy09bSAiZ2V0IHJpZCBvZiBtZW51CisKK09oLCB5ZWFoLiAgSWYgeW91IGRlY2lkZSB0aGF0IHlvdSBkb24ndCByZWFsbHkgbGlrZSBiZWluZyB3aXRob3V0IHlvdXIgdGhlCit0b29sYmFyIG9yIG1lbnVzLCBpc3N1ZSB0aGUgZm9sbG93aW5nOgorCitzZXQgZ3Vpb3B0aW9ucys9VCAiYnJpbmcgYmFjayB0b29sYmFyIHNldCBndWlvcHRpb25zKz1tICJicmluZyBiYWNrIG1lbnUKKworc2VlIGFsc286IDpoZSAnZ3Vpb3B0aW9ucworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+RW5jcnlwdGlvbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD05MCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD05MDwvQT48QlI+CisKK1lvdSBjYW4gZW5jcnlwdCB5b3VyIHRleHRzIGJ5IHVzaW5nIHZpbS4gIDpYICBwcm9tcHRzIGZvciBhbiBlbmNyeXB0aW9uIGtleS4KK0FmdGVyIHdyaXRpbmcgeW91ciBrZXksIGlmIHlvdSBzYXZlIHlvdXIgZG9jdW1lbnQgaXQgd2lsbCBiZSBlbmNyeXB0ZWQKK2FuZCBubyBvbmUgZWxzZSAoYnV0IHlvdSBhbmQgdmltKSBjYW4gcmVhZCB5b3VyIGRvY3VtZW50cy4gIElmIHlvdSByZW9wZW4KK3RoZSBmaWxlLCBWSU0gd2lsbCBhc2sgZm9yIHRoZSBrZXkuICBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGVuY3J5cHRpb24sCitqdXN0IHR5cGUgOnNldCBrZXk9IGlmIHlvdSBmb3JnZXQgeW91ciBrZXkgeW91IHdpbGwgbG9zZSB5b3VyIGRvY3VtZW50LgorU28gcGxlYXNlIERPIE5PVCBmb3JnZXQgeW91ciBrZXksCisKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkRpY3Rpb25hcnkgY29tcGxldGlvbnM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTE8L0E+PEJSPgorCitUaGlzIHRpcCB3aWxsIHdpbGwgZXhwbGFpbiBob3cgdG8gdXNlIHRoZSBkaWN0aW9uYXJ5IGNvbXBsZXRpb24gZmFjaWxpdGllcworcHJvdmlkZWQgYnkgdmltLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB1c2UgdmltIHRvIHR5cGUgeW91ciBlbWFpbCwKK2VkaXQgY29kZSwgZXRjLgorCitEaWN0aW9uYXJ5IGNvbXBsZXRpb24gaXMgb25lIG9mIG1hbnkgc2VhcmNoIGZhY2lsaXRlcyBwcm92aWRlZCBieSBJbnNlcnQgbW9kZQorY29tcGxldGlvbi4gIEl0IGFsbG93cyB0aGUgdXNlciB0byBnZXQgYSBsaXN0IG9mIGtleXdvcmRzLCBiYXNlZCBvZmYgb2YgdGhlCitjdXJyZW50IHdvcmQgYXQgdGhlIGN1cnNvci4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgdHlwaW5nIGEgbG9uZyB3b3JkCisoZS5nLiBhY2tub3dsZWRnZWFibGUpIGFuZCBkb24ndCB3YW50IHRvIGZpbmlzaCB0eXBpbmcgb3IgZG9uJ3QgcmVtZW1iZXIKK3RoZSBzcGVsbGluZy4KKworVG8gc3RhcnQsIHdlIG11c3QgZmlyc3QgdGVsbCB2aW0gd2hlcmUgb3VyIGRpY3Rpb25hcnkgaXMgbG9jYXRlZC4gIFRoaXMgaXMgZG9uZQordmlhIHRoZSAnZGljdGlvbmFyeScgIG9wdGlvbi4gIEJlbG93IGlzIGFuIGV4YW1wbGUuICBZb3VyIGxvY2F0aW9uIG1heSB2YXJ5LgorU2VlIDpoZWxwICdkaWN0aW9uYXJ5Jwlmb3IgaGludHMgYXMgdG8gd2hlcmUgeW91IHNob3VsZCBsb29rLgorCisJOnNldCBkaWN0aW9uYXJ5LT0vdXNyL3NoYXJlL2RpY3Qvd29yZHMKKwlkaWN0aW9uYXJ5Kz0vdXNyL3NoYXJlL2RpY3Qvd29yZHMKKworTm93LCB0byB1c2UgdGhpcyBsaXN0IHdlIGhhdmUgdG8gZW50ZXIgaW5zZXJ0IG1vZGUgY29tcGxldGlvbi4JVGhpcyBpcyBkb25lCitieSBoaXR0aW5nIENUUkwtWCB3aGlsZSBpbiBpbnNlcnQgbW9kZS4gIE5leHQsIHlvdSBoYXZlIHRvIHNwZWNpZnkgd2hhdCB5b3UKK3dhbnQgdG8gY29tcGxldGUuICBGb3IgZGljdGlvbmFyaWVzIHVzZSBDVFJMLUsuICBPbmNlIGluIHRoaXMgbW9kZSB0aGUga2V5cworQ1RSTC1OIGFuZCBDVFJMLVAgd2lsbCBjeWNsZSB0aHJvdWdoIHRoZSBtYXRjaGVzLiAgU28sIHRvIGNvbXBsZXRlIHRoZSB3b3JkCisiYWNrbm93bGVkZ2VhYmxlIiBJIHdvdWxkIGRvIHRoZSBmb2xsb3dpbmcgaW4gaW5zZXJ0IG1vZGU6CisKKwlhY2tub3cmbHQ7Q1RSTC1YJmd0OyZsdDtDVFJMLUsmZ3Q7Jmx0O0NUUkwtTiZndDsKKworSXQgY2FuIGJlIGN1bWJlcnNvbWUgdG8gdHlwZSBDVFJMLVggQ1RSTC1LIGZvciBtYW55IGRpZmZlcmVudCBjb21wbGV0aW9ucy4KK1NvLCB2aW0gZ2l2ZXMgdXMgYSBzaG9ydGN1dC4gIFdoaWxlIGluIGluc2VydCBtb2RlIENUUkwtTiBhbmQgQ1RSTC1QCit3aWxsIGN5Y2xlIHRocm91Z2ggYSBwcmVkZXRlcm1pbmVkIHNldCBvZiBjb21wbGV0aW9uIHNvdXJjZXMuICBCeSBkZWZhdWx0LAorZGljdGlvbmFyeSBjb21wbGV0aW9uIGlzIG5vdCBhIHBhcnQgb2YgdGhpcyBzZXQuICBUaGlzIHNldCBpcyBkZWZpbmVkIGJ5IHRoZQorJ2NvbXBsZXRlJyBvcHRpb24uICBUaGVyZWZvcmUsIHdlIG11c3QgYWRkIGRpY3Rpb25hcnkgdG8gdGhpcyBhcyBzaG93biBiZWxvdzoKKworCTpzZXQgY29tcGxldGUtPWsgY29tcGxldGUrPWsKKworTm93LCB3aGlsZSBpbiBpbnNlcnQgbW9kZSB3ZSBjYW4gdHlwZSB0aGUgZm9sbG93aW5nIHRvIGNvbXBsZXRlIG91ciBleGFtcGxlOgorCisJYWNrbm93Jmx0O0NUUkwtTiZndDsmbHQ7Q1RSTC1OJmd0OworCitUaGlzIHNob3J0Y3V0IG1heSBub3Qgc2F2ZSBhIHdob2xlIGxvdCBvZiB0eXBpbmcuICBIb3dldmVyLCBJIGZpbmQgdGhhdCBpdAorcmVxdWlyZXMgbGVzcyBoYW5kIG1vdmVtZW50IHRvIG9ubHkgd29ycnkgbXlzZWxmIHdpdGggdHdvIGtleSBjb21iaW5hdGlvbnMsCityYXRoZXIgdGhhbiA0LgorCitJIGZpbmQgdGhhdCB0aGUgY29tcGxldGlvbiBmYWNpbGl0ZXMgcHJvdmlkZWQgYnkgdmltIHNhdmUgbWUgYSAqSFVHRSogYW1vdW50CitvZiB0eXBpbmcuICBUaGVzZSBzYXZpbmdzIGNhbiBiZSByZWFsaXplZCBpbiBvbmx5IGEgc2hvcnQgYW1vdW50IG9mIHRpbWUgaWYKK3lvdSBhcmUgZWRpdGluZyBzb21lIGNvZGUgd2l0aCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyB0aGF0IGhhdmUgbG9uZyBuYW1lcword2l0aCB1bmRlcnNjb3JlcyBpbiB0aGVtLgorCitGb3IgbW9yZSBoZWxwOgorCWhlbHAgaW5zLWNvbXBsZXRpb24gaGVscCBjb21wbC1kaWN0aW9uYXJ5IGhlbHAgJ2NvbXBsZXRlJyBoZWxwCisJJ2RpY3Rpb25hcnknIGhlbHAgOnNldCs9CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5SZWR1Y2luZyAnZG9jJyBkaXJlY3Rvcnkgc2l6ZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD05MiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD05MjwvQT48QlI+CisKK0FzIGV2ZXJ5b25lIGtub3dzLCB0aGUgJFZJTVJVTlRJTUUvZG9jIGlzIGluY3JlYXNpbmcgcmFwaWRseSBpbiBzaXplLiBUaGUKK2RpcmVjdG9yeSBjb250YWluZWQgc28gbWFueSBwbGFpbi10ZXh0IGRvY3VtZW50cyB0aGF0IEkgb2Z0ZW4gY29tcHJlc3MKK3RoZW0gdG8gc2F2ZSBteSBkaXNrc3BhY2UuIFdpdGggdGhlIHN1cHBvcnQgb2YgVklNJ3MgR1pJUCBwbHVnaW4sCitWSU0gd2lsbCBhdXRvbWF0aWNhbGx5IHVuY29tcHJlc3MgdGhlIGZpbGVzIHdoZW4gd2UgbmVlZCB0byByZWFkIHRoZW0uCitIZXJlIGlzIG15IHByb2NlZHVyZTogMS4gIElmIHlvdSBoYXZlIHRoZSBzb3VyY2UsIGdvIHRvICdydW50aW1lL2RvYycKK2FuZCBlZGl0ICdkb2N0YWdzLmMnLCBjaGFuZ2UJICAgcHJpbnRmKCIlc1x0JXNcdC8qIiwgcDEsIGFyZ3ZbMF0pOyAgdG8KK3ByaW50ZigiJXNcdCVzLmd6XHQvKiIsIHAxLCBhcmd2WzBdKTsKKyAgICAgdGhlbiBtYWtlLiBUaGlzIGlzIHRvIG1vZGlmeSB0aGUgdGFnLCBvciB5b3UnbGwgaGF2ZSB0byBjaGFuZ2UgdGhlCisgICAgICd0YWdzJyBmaWxlIGJ5IGhhbmQgaWYgeW91IGRvbid0IGhhdmUgZG9jdGFncy5jLgorMi4gRWRpdCB0aGUgbmV3IGdlbmVyYXRlZCAndGFncycgZmlsZSB0byByZW5hbWUgJ2hlbHAudHh0Lmd6JyBiYWNrIHRvCisnaGVscC50eHQnIGJlY2F1c2UgaXQncyBoYXJkLXdyaXR0ZW4gaW4gVklNIGV4ZWN1dGFibGUgYmluYXJ5LgorICAgICA6JSBzL2hlbHBcLnR4dFwuZ3ovaGVscFwudHh0L2cKKzMuIENvcHkgdGhlIG5ldyAndGFncycgdG8gJFZJTVJOVVRJTUUvZG9jIGFuZCBydW4gJ2d6aXAgKi50eHQ7IGd1bnppcCBoZWxwLnR4dCcKKworT24gVklNIDYuMGFuLCB3ZSBjYW4gcmVkdWNlIHRoZSBvcmlnaW5hbCBzaXplICgzMzAyaykgdG8gMTMyNmsuICBJIGRvbid0Citrbm93IGlmIHRoaXMgaGVscHMsIGJ1dCBpZiBzb21lb25lIGxpa2VzIHRvIGNvbXByZXNzIGRvY3VtZW50cy4uLiB0aGlzIGNhbgorYmUgcmVmZmVyZWQgOikKKworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5pZiB5b3UgdXNlCisnaGlnaGxpZ2h0IHNlYXJjaCcgZmVhdHVyZSwgbWFwIGEga2V5IHRvIDpub2g8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTM8L0E+PEJSPgorCitJdCBpcyB2ZXJ5IGNvbnZlbmllbnQgdG8gdXNlICdobHNlYXJjaCcgb3B0aW9uLiAgSG93ZXZlciBpdCBjYW4gYmUgYW5ub3lpbmcKK3RvIGhhdmUgdGhlIGhpZ2hsaWdodCBzdGljayBsb25nZXIgdGhhbiB5b3Ugd2FudCBpdC4gIEluIG9yZGVyIHRvIHJ1biBpdAorb2ZmIHlvdSBoYXZlIHRvIHR5cGUgYXQgbGVhc3QgNCBrZXlzdHJva2VzLCAiOm5vaCIuICBTbywgaXQncyBhIGdvb2QgaWRlYQordG8gbWFwIHRoaXMgdG8gYSBrZXkuICBJIGxpa2UgdG8gbWFwIGl0IHRvIGNvbnRyb2wtbi4gIFRoaXMgaXMgdGhlIGxpbmUgSQordXNlIGluIG15IC52aW1yYyBmaWxlIHRvIGRvIGl0OgorCitubWFwICZsdDtzaWxlbnQmZ3Q7ICZsdDtDLU4mZ3Q7IDpzaWxlbnQgbm9oJmx0O0NSJmd0OworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5RdWVzdGlvbnMKKyYgQW5zd2VycyBhYm91dCB1c2luZyB0YWdzIHdpdGggVmltPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTk0Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTk0PC9BPjxCUj4KKworVXNpbmcgdGFncyBmaWxlIHdpdGggVmltIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaGlzIGRvY3VtZW50IGdpdmVzIHlvdQorYSBpZGVhIGFib3V0IHRoZSB2YXJpb3VzIGZhY2lsaXRpZXMgYXZhaWxhYmxlIGluIFZpbSBmb3IgdXNpbmcgYSB0YWdzIGZpbGUKK3RvIGJyb3dzZSB0aHJvdWdoIHByb2dyYW0gc291cmNlIGZpbGVzLiAgWW91IGNhbiByZWFkIHRoZSBWaW0gb25saW5lIGhlbHAsCit3aGljaCBleHBsYWlucyBpbiBkZXRhaWwgdGhlIHRhZ3Mgc3VwcG9ydCwgdXNpbmcgOmhlbHAgdGFnc2VhcmNoLnR4dC4gIFlvdSBjYW4KK2Fsc28gdXNlIHRoZSBoZWxwIGtleXdvcmRzIG1lbnRpb25lZCBpbiB0aGlzIGRvY3VtZW50IHRvIHJlYWQgbW9yZSBhYm91dCBhCitwYXJ0aWN1bGFyIGNvbW1hbmQgb3Igb3B0aW9uLiAgVG8gcmVhZCBtb3JlIGFib3V0IGEgcGFydGljdWxhciBjb21tYW5kIG9yCitvcHRpb24gdXNlLCA6aGVscCAmbHQ7aGVscGtleXdvcmQmZ3Q7IGluIFZpbS4KKworMS4gSG93IGRvIEkgY3JlYXRlIGEgdGFncyBmaWxlPworCisgICBZb3UgY2FuIGNyZWF0ZSBhIHRhZ3MgZmlsZSBlaXRoZXIgdXNpbmcgdGhlIGN0YWdzIHV0aWxpdHkgb3IgdXNpbmcgYQorICAgY3VzdG9tIHNjcmlwdCBvciB1dGlsaXR5LgorCisgICBIZWxwIGtleXdvcmQocyk6IHRhZworCisyLiBXaGVyZSBjYW4gSSBkb3dubG9hZCB0aGUgdG9vbHMgdG8gZ2VuZXJhdGUgdGhlIHRhZ3MgZmlsZT8KKworICAgVGhlcmUgYXJlIHNldmVyYWwgdXRpbGl0aWVzIGF2YWlsYWJsZSB0byBnZW5lcmF0ZSB0aGUgdGFncyBmaWxlLgorICAgRGVwZW5kaW5nIG9uIHRoZSBwcm9ncmFtbWluZyBsYW5ndWFnZSwgeW91IGNhbiB1c2UgYW55IG9uZSBvZiB0aGVtLgorCisgICAxLiBFeHViZXJhbnQgY3RhZ3MgZ2VuZXJhdGVzIHRhZ3MgZm9yIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbW1pbmcKKyAgICAgIGxhbmd1YWdlIGZpbGVzOgorCisgICAgICBBc3NlbWJsZXIsIEFXSywgQVNQLCBCRVRBLCBCb3VybmUvS29ybi9ac2ggU2hlbGwsIEMsIEMrKywgQ09CT0wsCisgICAgICBFaWZmZWwsIEZvcnRyYW4sIEphdmEsIExpc3AsIE1ha2UsIFBhc2NhbCwgUGVybCwgUEhQLCBQeXRob24sIFJFWFgsCisgICAgICBSdWJ5LCBTLUxhbmcsIFNjaGVtZSwgVGNsLCBhbmQgVmltLgorCisgICAgICBZb3UgY2FuIGRvd25sb2FkIGV4dWJlcmFudCBjdGFncyBmcm9tIDxBCisgICAgICBIUkVGPSJodHRwOi8vY3RhZ3Muc291cmNlZm9yZ2UubmV0LyI+aHR0cDovL2N0YWdzLnNvdXJjZWZvcmdlLm5ldC88L0E+PEJSPgorCisgICAyLiBPbiBVbml4LCB5b3UgY2FuIHVzZSB0aGUgL3Vzci9iaW4vY3RhZ3MgdXRpbGl0eS4JVGhpcyB1dGlsaXR5CisgICAgICBpcyBwcmVzZW50IGluIG1vc3Qgb2YgdGhlIFVuaXggaW5zdGFsbGF0aW9ucy4KKworICAgMy4gWW91IGNhbiB1c2UganRhZ3MgZm9yIGdlbmVyYXRpbmcgdGFncyBmaWxlIGZvciBqYXZhIHByb2dyYW1zLgorICAgICAgWW91IGNhbiBkb3dubG9hZCBqdGFncyBmcm9tOiA8QQorICAgICAgSFJFRj0iaHR0cDovL3d3dy5mbGVpbmVyLmNvbS9qdGFncy8iPmh0dHA6Ly93d3cuZmxlaW5lci5jb20vanRhZ3MvPC9BPjxCUj4KKworICAgNC4gWW91IGNhbiB1c2UgcHRhZ3MgZm9yIGdlbmVyYXRpbmcgdGFncyBmaWxlIGZvciBwZXJsIHByb2dyYW1zLgorICAgICAgWW91IGNhbiBkb3dubG9hZCBwdGFncyBmcm9tOiA8QQorICAgICAgSFJFRj0iaHR0cDovL3d3dy5lbGV2ZXMuZW5zLmZyOjgwODAvaG9tZS9udGhpZXJ5L1RhZ3MvIj5odHRwOi8vd3d3LmVsZXZlcy5lbnMuZnI6ODA4MC9ob21lL250aGllcnkvVGFncy88L0E+PEJSPgorCisgICA1LiBZb3UgY2FuIGRvd25sb2FkIHNjcmlwdHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpbmtzIGZvcgorICAgICAgZ2VuZXJhdGluZyB0YWdzIGZpbGUgZm9yIHZlcmlsb2cgZmlsZXM6CisKKwkgICAgPEEKKwkgICAgSFJFRj0iaHR0cDovL3d3dy5wcm9iby5jb20vdnRhZ3MuaHRtIj5odHRwOi8vd3d3LnByb2JvLmNvbS92dGFncy5odG08L0E+PEJSPgorCSAgICA8QQorCSAgICBIUkVGPSJodHRwOi8vd3d3LmNzLmFsYmFueS5lZHUvfm1vc2gvUGVybC92ZXJpLXRhZ3MiPmh0dHA6Ly93d3cuY3MuYWxiYW55LmVkdS9+bW9zaC9QZXJsL3ZlcmktdGFnczwvQT48QlI+CisJICAgIDxBCisJICAgIEhSRUY9Imh0dHA6Ly93d3cudmVyaWxvZy5uZXQvdnJ0YWdzLnR4dCI+aHR0cDovL3d3dy52ZXJpbG9nLm5ldC92cnRhZ3MudHh0PC9BPjxCUj4KKworICAgNi4gWW91IGNhbiBkb3dubG9hZCBIZHJ0YWcgZnJvbSB0aGUgZm9sbG93aW5nIGxpbmtlOgorCisJICAgIDxBCisJICAgIEhSRUY9Imh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCNUYWdzIj5odHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjVGFnczwvQT48QlI+CisKKyAgICAgIFRoaXMgdXRpbGl0eSBnZW5lcmF0ZXMgdGFncyBmaWxlIGZvciB0aGUgZm9sbG93aW5nIHByb2dyYW1taW5nIGxhbmd1YWdlczoKKyAgICAgIGFzc2VtYmx5LCBjL2MrKywgaGVhZGVyIGZpbGVzLCBsZXgsIHlhY2MsTGFUZVgsIHZpbSwgYW5kIE1hcGxlIFYuCisKKyAgIDcuIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGZvbGxvd2luZyBzY3JpcHRzIHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSBWaW0KKyAgICAgIHJ1bnRpbWUgZmlsZXM6CisKKwkgIHBsdGFncy5wbCAtIENyZWF0ZSB0YWdzIGZpbGUgZm9yIHBlcmwgY29kZSB0Y2x0YWdzIC0gQ3JlYXRlIHRhZ3MKKwkgIGZpbGUgZm9yIFRDTCBjb2RlIHNodGFncy5wbCAtIENyZWF0ZSB0YWdzIGZpbGUgZm9yIHNoZWxsIHNjcmlwdAorCisgICBIZWxwIGtleXdvcmQocyk6IGN0YWdzCisKKzMuIEhvdyBkbyBJIGdlbmVyYXRlIGEgdGFncyBmaWxlIHVzaW5nIGN0YWdzPworCisgICBZb3UgY2FuIGdlbmVyYXRlIGEgdGFncyBmaWxlIGZvciBhbGwgdGhlIEMgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisgICB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKwkkIGN0YWdzICouYworCisgICBZb3UgY2FuIGdlbmVyYXRlIHRhZ3MgZmlsZSBmb3IgYWxsIHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKyAgIGFuZCBhbGwgdGhlIHN1Yi1kaXJlY3RvcmllcyB1c2luZyAodGhpcyBhcHBsaWVzIG9ubHkgdG8gZXh1YmVyYW50IGN0YWdzKToKKworCSQgY3RhZ3MgLVIgLgorCisgICBZb3UgY2FuIGdlbmVyYXRlIHRhZ3MgZmlsZSBmb3IgYWxsIHRoZSBmaWxlcyBsaXN0ZWQgaW4gYSB0ZXh0IGZpbGUgbmFtZWQKKyAgIGZsaXN0IHVzaW5nICh0aGlzIGFwcGxpZXMgb25seSB0byBleHViZXJhbnQgY3RhZ3MpCisKKyAgICAgICAkIGN0YWdzIC1MIGZsaXN0CisKKzQuIEhvdyBkbyBJIGNvbmZpZ3VyZSBWaW0gdG8gbG9jYXRlIGEgdGFncyBmaWxlPworCisgICBZb3UgY2FuIHNldCB0aGUgJ3RhZ3MnIG9wdGlvbiBpbiBWaW0gdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgdGFncyBmaWxlLgorCisJc2V0IHRhZ3M9L215L2Rpci90YWdzCisKKyAgIEhlbHAga2V5d29yZChzKTogJ3RhZ3MnLCB0YWdzLW9wdGlvbgorCis1LiBIb3cgZG8gSSBjb25maWd1cmUgVmltIHRvIHVzZSBtdWx0aXBsZSB0YWdzIGZpbGVzPworCisgICBUaGUgJ3RhZ3MnIG9wdGlvbiBjYW4gc3BlY2lmeSBtb3JlIHRoYW4gb25lIHRhZ3MgZmlsZS4gIFRoZSB0YWcgZmlsZW5hbWVzCisgICBhcmUgc2VwYXJhdGVkIHVzaW5nIGVpdGhlciBjb21tYSBvciBzcGFjZXMuCisKKwlzZXQgdGFncz0vbXkvZGlyMS90YWdzLCAvbXkvZGlyMi90YWdzCisKKzYuIEhvdyBkbyBJIGNvbmZpZ3VyZSBWaW0gdG8gbG9jYXRlIGEgdGFncyBmaWxlIGluIGEgZGlyZWN0b3J5IHRyZWU/CisKKyAgIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHdpbGwgd29yayBvbmx5IGluIFZpbSA2LjAgYW5kIGFib3ZlLiAgWW91IGNhbiBzZXQKKyAgIHRoZSAndGFncycgb3B0aW9uIHRvIG1ha2UgVmltIHNlYXJjaCBmb3IgdGhlIHRhZ3MgZmlsZSBpbiBhIGRpcmVjdG9yeSB0cmVlLgorICAgRm9yIGV4YW1wbGUsIGlmIHRoZSAndGFncycgb3B0aW9uIGlzIHNldCBsaWtlIHRoaXM6CisKKwlzZXQgdGFncz10YWdzOy8KKworICAgVmltIHdpbGwgc2VhcmNoIGZvciB0aGUgZmlsZSBuYW1lZCAndGFncycsIHN0YXJ0aW5nIHdpdGggdGhlIGN1cnJlbnQKKyAgIGRpcmVjdG9yeSBhbmQgdGhlbiBnb2luZyB0byB0aGUgcGFyZW50IGRpcmVjdG9yeSBhbmQgdGhlbiByZWN1cnNpdmVseSB0bworICAgdGhlIGRpcmVjdG9yeSBvbmUgbGV2ZWwgYWJvdmUsIHRpbGwgaXQgZWl0aGVyIGxvY2F0ZXMgdGhlICd0YWdzJyBmaWxlIG9yCisgICByZWFjaGVzIHRoZSByb290ICcvJyBkaXJlY3RvcnkuCisKKyAgIEhlbHAga2V5d29yZChzKTogZmlsZS1zZWFyY2hpbmcKKworNy4gSG93IGRvIEkganVtcCB0byBhIHRhZz8KKworICAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBqdW1wIHRvIGEgdGFnIGxvY2F0aW9uLgorCTEuIFlvdSBjYW4gdXNlIHRoZSAndGFnJyBleCBjb21tYW5kLiAgRm9yIGV4YW1wbGUsCisKKwkgICAgICAgOnRhZyAmbHQ7dGFnbmFtZSZndDsKKworCSAgIHdpbGwganVtcCB0byB0aGUgdGFnIG5hbWVkICZsdDt0YWduYW1lJmd0Oy4KKwkyLiBZb3UgY2FuIHBvc2l0aW9uIHRoZSBjdXJzb3Igb3ZlciBhIHRhZyBuYW1lIGFuZCB0aGVuIHByZXNzCisJICAgQ3RybC1dLgorCTMuIFlvdSBjYW4gdmlzdWFsbHkgc2VsZWN0IGEgdGV4dCBhbmQgdGhlbiBwcmVzcyBDdHJsLV0gdG8KKwkgICBqdW1wIHRvIHRoZSB0YWcgbWF0Y2hpbmcgdGhlIHNlbGVjdGVkIHRleHQuCisJNC4gWW91IGNhbiBjbGljayBvbiB0aGUgdGFnIG5hbWUgdXNpbmcgdGhlIGxlZnQgbW91c2UgYnV0dG9uLAorCSAgIHdoaWxlIHByZXNzaW5nIHRoZSAmbHQ7Q3RybCZndDsga2V5LgorCTUuIFlvdSBjYW4gcHJlc3MgdGhlIGcga2V5IGFuZCB0aGVuIGNsaWNrIG9uIHRoZSB0YWcgbmFtZQorCSAgIHVzaW5nIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbi4KKwk2LiBZb3UgY2FuIHVzZSB0aGUgJ3N0YWcnIGV4IGNvbW1hbmQsIHRvIG9wZW4gdGhlIHRhZyBpbiBhIG5ldworCSAgIHdpbmRvdy4gIEZvciBleGFtcGxlLAorCisJCTpzdGFnIGZ1bmMxCisKKwkgICB3aWxsIG9wZW4gdGhlIGZ1bmMxIGRlZmluaXRpb24gaW4gYSBuZXcgd2luZG93LgorCTcuIFlvdSBjYW4gcG9zaXRpb24gdGhlIGN1cnNvciBvdmVyIGEgdGFnIG5hbWUgYW5kIHRoZW4gcHJlc3MKKwkgICBDdHJsLVcgXS4gIFRoaXMgd2lsbCBvcGVuIHRoZSB0YWcgbG9jYXRpb24gaW4gYSBuZXcgd2luZG93LgorCisgICBIZWxwIGtleXdvcmQocyk6IDp0YWcsIEN0cmwtXSwgdl9DVFJMX10sICZsdDtDLUxlZnRNb3VzZSZndDssCisJCSAgICBnJmx0O0xlZnRNb3VzZSZndDssIDpzdGFnLCBDdHJsLVdfXQorCis4LiBIb3cgZG8gSSBjb21lIGJhY2sgZnJvbSBhIHRhZyBqdW1wPworCisgICBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGNvbWUgYmFjayB0byB0aGUgb2xkIGxvY2F0aW9uIGZyb20gYSB0YWcganVtcC4KKwkxLiBZb3UgY2FuIHVzZSB0aGUgJ3BvcCcgZXggY29tbWFuZC4gIDIuIFlvdSBjYW4gcHJlc3MgQ3RybC10LgorCTMuIFlvdSBjYW4gY2xpY2sgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiwgd2hpbGUgcHJlc3NpbmcgdGhlCisJICAgJmx0O0N0cmwmZ3Q7IGtleS4KKwk0LiBZb3UgY2FuIHByZXNzIHRoZSBnIGtleSBhbmQgdGhlbiBjbGljayB0aGUgcmlnaHQgbW91c2UKKwkgICBidXR0b24uCisKKyAgIEhlbHAga2V5d29yZChzKTogOnBvcCwgQ3RybC1ULCAmbHQ7Qy1SaWdodE1vdXNlJmd0OywgZyZsdDtSaWdodE1vdXNlJmd0OworCis5LiBIb3cgZG8gSSBqdW1wIGFnYWluIHRvIGEgcHJldmlvdXNseSBqdW1wZWQgdGFnIGxvY2F0aW9uPworCisgICBZb3UgY2FuIHVzZSB0aGUgJ3RhZycgZXggY29tbWFuZCB0byBqdW1wIHRvIGEgcHJldmlvdXNseSBqdW1wZWQgdGFnCisgICBsb2NhdGlvbiwgd2hpY2ggaXMgc3RvcmVkIGluIHRoZSB0YWcgc3RhY2suCisKKyAgIEhlbHAga2V5d29yZChzKTogdGFnCisKKzEwLiBIb3cgZG8gSSBsaXN0IHRoZSBjb250ZW50cyBvZiB0aGUgdGFnIHN0YWNrPworCisgICBWaW0gcmVtZW1iZXJzIHRoZSBsb2NhdGlvbiBmcm9tIHdoaWNoIHlvdSBqdW1wZWQgdG8gYSB0YWcgaW4gdGhlIHRhZyBzdGFjay4KKyAgIFlvdSBjYW4gbGlzdCB0aGUgY3VycmVudCB0YWcgc3RhY2sgdXNpbmcgdGhlICd0YWdzJyBleCBjb21tYW5kLgorCisgICBIZWxwIGtleXdvcmQocyk6IDp0YWdzLCB0YWdzdGFjaworCisxMS4gSG93IGRvIEkganVtcCB0byBhIHBhcnRpY3VsYXIgdGFnIG1hdGNoLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUKKyAgICBtYXRjaGluZyB0YWdzPworCisgICAgSW4gc29tZSBzaXR1YXRpb25zLCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaCBmb3IgYSB0YWcuCisgICAgRm9yIGV4YW1wbGUsIGEgQyBmdW5jdGlvbiBvciBkZWZpbml0aW9uIG1heSBiZSBwcmVzZW50IGluIG1vcmUgdGhhbiBvbmUKKyAgICBmaWxlIGluIGEgc291cmNlIHRyZWUuICBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRvIGp1bXAgdG8gYSBzcGVjaWZpYworICAgIHRhZyBmcm9tIGEgbGlzdCBvZiBtYXRjaGluZyB0YWdzLgorCisJMS4gWW91IGNhbiB1c2UgdGhlICd0c2VsZWN0JyBleCBjb21tYW5kIHRvIGxpc3QgYWxsIHRoZSB0YWcKKwkgICBtYXRjaGVzLiAgRm9yIGV4YW1wbGUsCisKKwkJOnRzZWxlY3QgZnVuYzEKKworCSAgd2lsbCBsaXN0IGFsbCB0aGUgbG9jYXRpb25zIHdoZXJlIGZ1bmMxIGlzIGRlZmluZWQuICBZb3UgY2FuIHRoZW4KKwkgIGVudGVyIHRoZSBudW1iZXIgb2YgYSB0YWcgbWF0Y2ggdG8ganVtcCB0byB0aGF0IGxvY2F0aW9uLgorCTIuIFlvdSBjYW4gcG9zaXRpb24gdGhlIGN1cnNvciBvdmVyIHRoZSB0YWcgbmFtZSBhbmQgcHJlc3MgZ10KKwkgICB0byBnZXQgYSBsaXN0IG9mIG1hdGNoaW5nIHRhZ3MuCisJMy4gWW91IGNhbiB2aXN1YWxseSBzZWxlY3QgYSB0ZXh0IGFuZCBwcmVzcyBnXSB0byBnZXQgYSBsaXN0CisJICAgb2YgbWF0Y2hpbmcgdGFncy4KKwk0LiBZb3UgY2FuIHVzZSB0aGUgJ3N0c2VsZWN0JyBleCBjb21tYW5kLiAgVGhpcyB3aWxsIG9wZW4gdGhlCisJICAgc2VsZWN0ZWQgdGFnIGZyb20gdGhlIHRhZyBsaXN0IGluIGEgbmV3IHdpbmRvdy4KKwk1LiBZb3UgY2FuIHBvc2l0aW9uIHRoZSBjdXJzb3Igb3ZlciB0aGUgdGFnIG5hbWUgYW5kIHByZXNzCisJICAgQ3RybC1XIGddIHRvIGRvIGEgOnN0c2VsZWN0LgorCisgICAgSGVscCBrZXl3b3JkKHMpOiB0YWctbWF0Y2hsaXN0LCA6dHNlbGVjdCwgZ10sIHZfZ10sIDpzdHNlbGVjdCwKKwkJICAgICBDdHJsLVdfZ10KKworMTIuIEkgd2FudCB0byBqdW1wIHRvIGEgdGFnLCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBtYXRjaGluZyB0YWcsCisgICAgb3RoZXJ3aXNlIGEgbGlzdCBvZiBtYXRjaGluZyB0YWdzIHNob3VsZCBiZSBkaXNwbGF5ZWQuICBIb3cgZG8gSSBkbyB0aGlzPworCisgICAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBtYWtlIFZpbSB0byBqdW1wIHRvIGEgdGFnIGRpcmVjdGx5LCBpZiB0aGVyZQorICAgIGlzIG9ubHkgb25lIHRhZyBtYXRjaCwgb3RoZXJ3aXNlIHByZXNlbnQgYSBsaXN0IG9mIHRhZyBtYXRjaGVzLgorCisJMS4gWW91IGNhbiB1c2UgdGhlICd0anVtcCcgZXggY29tbWFuZC4JRm9yIGV4YW1wbGUsCisKKwkJOnRqdW1wIGZ1bmMxCisKKwkgICB3aWxsIGp1bXAgdG8gdGhlIGRlZmluaXRpb24gZnVuYzEsIGlmIGl0IGlzIGRlZmluZWQgb25seSBvbmNlLgorCSAgIElmIGZ1bmMxIGlzIGRlZmluZWQgbXVsdGlwbGUgdGltZXMsIGEgbGlzdCBvZiBtYXRjaGluZyB0YWdzIHdpbGwKKwkgICBiZSBwcmVzZW50ZWQuCisJMi4gWW91IGNhbiBwb3NpdGlvbiB0aGUgY3Vyc29yIG92ZXIgdGhlIHRhZyBhbmQgcHJlc3MgZworCSAgIEN0cmwtXS4KKwkzLiBZb3UgY2FuIHZpc3VhbGx5IHNlbGVjdCBhIHRleHQgYW5kIHByZXNzIGcgQ3RybC1dIHRvIGp1bXAKKwkgICBvciBsaXN0IHRoZSBtYXRjaGluZyB0YWdzLgorCTQuIFlvdSBjYW4gdXNlIHRoZSAnc3RqdW1wJyBleCBjb21tYW5kLiAgVGhpcyB3aWxsIG9wZW4gdGhlCisJICAgbWF0Y2hpbmcgb3Igc2VsZWN0ZWQgdGFnIGZyb20gdGhlIHRhZyBsaXN0IGluIGEgbmV3IHdpbmRvdy4KKwk1LiBZb3UgY2FuIHByZXNzIEN0cmwtVyBnIEN0cmwtXSB0byBkbyBhIDpzdGp1bXAuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IDp0anVtcCwgZ19DdHJsLV0sIHZfZ19DVFJMLV0sIDpzdGp1bXAsCisJCSAgICAgQ3RybC1XX2dfQ3RybC1dCisKKzEzLiBIb3cgZG8gYnJvd3NlIHRocm91Z2ggYSBsaXN0IG9mIG11bHRpcGxlIHRhZyBtYXRjaGVzPworCisgICAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIHRhZyBtYXRjaGVzLCB5b3UgY2FuIGJyb3dzZSB0aHJvdWdoIGFsbCBvZiB0aGVtCisgICAgdXNpbmcgc2V2ZXJhbCBvZiB0aGUgVmltIGV4IGNvbW1hbmRzLgorCisgICAgMS4gVG8gZ28gdG8gdGhlIGZpcnN0IHRhZyBpbiB0aGUgbGlzdCwgdXNlIHRoZSAndGZpcnN0JyBvcgorICAgICAgICd0cmV3aW5kJyBleCBjb21tYW5kLgorICAgIDIuIFRvIGdvIHRvIHRoZSBsYXN0IHRhZyBpbiB0aGUgbGlzdCwgdXNlIHRoZSAndGxhc3QnIGV4IGNvbW1hbmQuCisgICAgMy4gVG8gZ28gdG8gdGhlIG5leHQgbWF0Y2hpbmcgdGFnIGluIHRoZSBsaXN0LCB1c2UgdGhlICd0bmV4dCcgZXgKKyAgICAgICBjb21tYW5kLgorICAgIDQuIFRvIGdvIHRvIHRoZSBwcmV2aW91cyBtYXRjaGluZyB0YWcgaW4gdGhlIGxpc3QsIHVzZSB0aGUKKyAgICAgICAndHByZXZpb3VzJyBvciAndE5leHQnIGV4IGNvbW1hbmQuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IDp0Zmlyc3QsIDp0cmV3aW5kLCA6dGxhc3QsIDp0bmV4dCwgOnRwcmV2aW91cywKKwkJICAgICA6dE5leHQKKworMTQuIEhvdyBkbyBJIHByZXZpZXcgYSB0YWc/CisKKyAgICBZb3UgY2FuIHVzZSB0aGUgcHJldmlldyB3aW5kb3cgdG8gcHJldmlldyBhIHRhZywgd2l0aG91dCBsZWF2aW5nIHRoZQorICAgIG9yaWdpbmFsIHdpbmRvdy4gIFRoZXJlIGFyZSBzZXZlcmFsIHdheXMgdG8gcHJldmlldyBhIHRhZzoKKworCTEuIFlvdSBjYW4gdXNlIHRoZSAncHRhZycgZXggY29tbWFuZCB0byBvcGVuIGEgdGFnIGluIHRoZQorCSAgIHByZXZpZXcgd2luZG93LgorCTIuIFlvdSBjYW4gcG9zaXRpb24gdGhlIGN1cnNvciBvbiBhIHRhZyBuYW1lIGFuZCBwcmVzcyBDdHJsLVcKKwkgICB9IHRvIG9wZW4gdGhlIHRhZyBpbiB0aGUgcHJldmlldyB3aW5kb3cuCisJMy4gWW91IGNhbiB1c2UgdGhlICdwdHNlbGVjdCcgZXggY29tbWFuZCB0byBkbyB0aGUgZXF1aXZhbGVudAorCSAgIG9mIHRoZSAndHNlbGVjdCcgZXggY29tbWFuZCBpbiB0aGUgcHJldmlldyB3aW5kb3cuCisJNC4gWW91IGNhbiB1c2UgdGhlICdwdGp1bXAnIGV4IGNvbW1hbmQgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YKKwkgICB0aGUgJ3RqdW1wJyBleCBjb21tYW5kIGluIHRoZSBwcmV2aWV3IHdpbmRvdy4KKwk1LiBZb3UgY2FuIHBvc2l0aW9uIHRoZSBjdXJzb3Igb24gdGhlIHRhZyBhbmQgcHJlc3MgQ3RybC1XIGd9CisJICAgdG8gZG8gYSA6cHRqdW1wIG9uIHRoZSB0YWcuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IDpwcmV2aWV3LXdpbmRvdywgOnB0YWcsIEN0cmwtV199LCA6cHRzZWxlY3QsCisJCSAgICAgOnB0anVtcCwgQ3RybC1XX2d9CisKKzE1LiBIb3cgZG8gSSBicm93c2UgdGhyb3VnaCB0aGUgdGFnIGxpc3QgaW4gYSBwcmV2aWV3IHdpbmRvdz8KKworICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB0YWcgbWF0Y2hlcywgeW91IGNhbiBicm93c2UgdGhyb3VnaCBhbGwgb2YgdGhlbQorICAgIGluIHRoZSBwcmV2aWV3IHdpbmRvdyB1c2luZyBzZXZlcmFsIG9mIHRoZSBWaW0gZXggY29tbWFuZHMuCisKKyAgICAxLiBUbyBnbyB0byB0aGUgZmlyc3QgdGFnIGluIHRoZSBsaXN0LCB1c2UgdGhlICdwdGZpcnN0JyBvcgorICAgICAgICdwdHJld2luZCcgZXggY29tbWFuZC4KKyAgICAyLiBUbyBnbyB0byB0aGUgbGFzdCB0YWcgaW4gdGhlIGxpc3QsIHVzZSB0aGUgJ3B0bGFzdCcgZXggY29tbWFuZC4KKyAgICAzLiBUbyBnbyB0byB0aGUgbmV4dCBtYXRjaGluZyB0YWcgaW4gdGhlIGxpc3QsIHVzZSB0aGUgJ3B0bmV4dCcgZXgKKyAgICAgICBjb21tYW5kLgorICAgIDQuIFRvIGdvIHRvIHRoZSBwcmV2aW91cyBtYXRjaGluZyB0YWcgaW4gdGhlIGxpc3QsIHVzZSB0aGUKKyAgICAgICAncHRwcmV2aW91cycgb3IgJ3B0TmV4dCcgZXggY29tbWFuZC4KKworICAgIEhlbHAga2V5d29yZChzKTogOnB0Zmlyc3QsIDpwdHJld2luZCwgOnB0bGFzdCwgOnB0bmV4dCwKKwkJICAgICA6cHRwcmV2aW91cywgOnB0TmV4dAorCisxNi4gSG93IGRvIEkgc3RhcnQgVmltIHRvIHN0YXJ0IGVkaXRpbmcgYSBmaWxlIGF0IGEgZ2l2ZW4gdGFnIG1hdGNoPworCisgICAgV2hpbGUgc3RhcnRpbmcgVmltLCB5b3UgY2FuIHVzZSB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbiAnLXQnIHRvIHN1cHBseQorICAgIGEgdGFnIG5hbWUuICBWaW0gd2lsbCBkaXJlY3RseSBqdW1wIHRvIHRoZSBzdXBwbGllZCB0YWcgbG9jYXRpb24uCisKKyAgICBIZWxwIGtleXdvcmQocyk6IC10CisKKzE3LiBIb3cgZG8gSSBsaXN0IGFsbCB0aGUgdGFncyBtYXRjaGluZyBhIHNlYXJjaCBwYXR0ZXJuPworCisgICAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBnbyB0aHJvdWdoIGEgbGlzdCBvZiBhbGwgdGFncyBtYXRjaGluZyBhIHBhdHRlcm4uCisKKwkxLiBZb3UgY2FuIGxpc3QgYWxsIHRoZSB0YWdzIG1hdGNoaW5nIGEgcGFydGljdWxhciByZWd1bGFyCisJICAgZXhwcmVzc2lvbiBwYXR0ZXJuIGJ5IHByZXBlbmRpbmcgdGhlIHRhZyBuYW1lIHdpdGggdGhlICcvJworCSAgIHNlYXJjaCBjaGFyYWN0ZXIuICBGb3IgZXhhbXBsZSwKKworCQk6dGFnIC8mbHQ7cGF0dGVybiZndDsgOnN0YWcgLyZsdDtwYXR0ZXJuJmd0OyA6cHRhZworCQkvJmx0O3BhdHRlcm4mZ3Q7IDp0c2VsZWN0IC8mbHQ7cGF0dGVybiZndDsgOnRqdW1wCisJCS8mbHQ7cGF0dGVybiZndDsgOnB0c2VsZWN0IC8mbHQ7cGF0dGVybiZndDsgOnB0anVtcAorCQkvJmx0O3BhdHRlcm4mZ3Q7CisKKwkgMi4gSWYgeW91IGhhdmUgdGhlICd3aWxkbWVudScgb3B0aW9uIHNldCwgdGhlbiB5b3UgY2FuIHByZXNzCisJICAgIHRoZSAmbHQ7VGFiJmd0OyBrZXkgdG8gZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHRoZSBtYXRjaGluZyB0YWdzCisJICAgIGluIHRoZSBzdGF0dXMgYmFyLglZb3UgY2FuIHVzZSB0aGUgYXJyb3cga2V5cyB0byBtb3ZlIGJldHdlZW4KKwkgICAgdGhlIHRhZ3MgYW5kIHRoZW4gdXNlIHRoZSAmbHQ7RW50ZXImZ3Q7IGtleSB0byBzZWxlY3QgYSB0YWcuCisKKwkgMy4gSWYgeW91IGRvbid0IGhhdmUgdGhlICd3aWxkbWVudScgb3B0aW9uIHNldCwgeW91IGNhbiBzdGlsbAorCSAgICB1c2UgdGhlICZsdDtUYWImZ3Q7IGtleSB0byBicm93c2UgdGhyb3VnaCB0aGUgbGlzdCBvZiBtYXRjaGluZworCSAgICB0YWdzLgorCisgICAgSGVscCBrZXl3b3JkKHMpOiB0YWctcmVnZXhwLCB3aWxkbWVudQorCisxOC4gV2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gY29udHJvbCBob3cgVmltIGhhbmRsZXMgdGhlIHRhZ3MKKyAgICBmaWxlPworCisgICAgWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIGhhbmRsaW5nIG9mIHRhZ3MgZmlsZQorICAgIGJ5IFZpbToKKworICAgIDEuICd0YWdyZWxhdGl2ZScgLSBDb250cm9scyBob3cgdGhlIGZpbGUgbmFtZXMgaW4gdGhlIHRhZ3MgZmlsZQorCQkgICAgICAgYXJlIHRyZWF0ZWQuICBXaGVuIG9uLCB0aGUgZmlsZW5hbWVzIGFyZSByZWxhdGl2ZSB0bworCQkgICAgICAgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdGFncyBmaWxlIGlzIHByZXNlbnQuCisKKyAgICAyLiAndGFnbGVuZ3RoJyAtICBDb250cm9scyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGNoYXJhY3RlcnMKKwkJICAgICAgdXNlZCBmb3IgcmVjb2duaXppbmcgYSB0YWcuCisKKyAgICAzLiAndGFnYnNlYXJjaCcgLSBDb250cm9scyB0aGUgbWV0aG9kIHVzZWQgdG8gc2VhcmNoIHRoZSB0YWdzIGZpbGUKKwkJICAgICAgZm9yIGEgdGFnLiAgSWYgdGhpcyBvcHRpb24gaXMgb24sIGJpbmFyeSBzZWFyY2ggaXMKKwkJICAgICAgdXNlZCB0byBzZWFyY2ggdGhlIHRhZ3MgZmlsZS4gIE90aGVyd2lzZSwgbGluZWFyIHNlYXJjaAorCQkgICAgICBpcyB1c2VkLgorCisgICAgNC4gJ3RhZ3N0YWNrJyAtIENvbnRyb2xzIGhvdyB0aGUgdGFnIHN0YWNrIGlzIHVzZWQuCisKKyAgICBIZWxwIGtleXdvcmQocyk6ICd0YWdyZWxhdGl2ZScsICd0YWdsZW5ndGgnLCAndGFnYnNlYXJjaCcsCisJCSAgICAgJ3RhZ3N0YWNrJworCisxOS4gSXMgaXQgcG9zc2libGUgdG8gaGlnaGxpZ2h0IGFsbCB0aGUgdGFncyBpbiB0aGUgY3VycmVudCBmaWxlPworCisgICAgWWVzLiAgUmVhZCB0aGUgVmltIG9ubGluZSBoZWxwIG9uICJ0YWctaGlnaGxpZ2h0Ii4KKworMjAuIElzIGl0IHBvc3NpYmxlIHRvIGNyZWF0ZSBhIG1lbnUgd2l0aCBhbGwgdGhlIHRhZ3MgaW4gdGhlIGN1cnJlbnQKKyAgICBmaWxlPworCisgICAgWWVzLiAgSXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIGEgbWVudSB3aXRoIGFsbCB0aGUgdGFncyBpbiB0aGUgY3VycmVudAorICAgIGZpbGUgdXNpbmcgYSBWaW0gc2NyaXB0LiAgRG93bmxvYWQgdGhlIFRhZ3NNZW51LnZpbSBzY3JpcHQgZnJvbSB0aGUKKyAgICBmb2xsb3dpbmcgbGluazoKKworICAgIDxBCisgICAgSFJFRj0iaHR0cDovL21lbWJlcnMuaG9tZS5uZXQvamF5Z2xhbnZpbGxlL3RhZ3NtZW51L1RhZ3NNZW51Lmh0bWwiPmh0dHA6Ly9tZW1iZXJzLmhvbWUubmV0L2pheWdsYW52aWxsZS90YWdzbWVudS9UYWdzTWVudS5odG1sPC9BPjxCUj4KKworMjEuIElzIHRoZXJlIGEgd29ya2Fyb3VuZCB0byBtYWtlIHRoZSBDdHJsLV0ga2V5IG5vdCB0byBiZSB0cmVhdGVkIGFzCisgICAgdGhlIHRlbG5ldCBlc2NhcGUgY2hhcmFjdGVyPworCisgICAgVGhlIGRlZmF1bHQgZXNjYXBlIGNoYXJhY3RlcnMgZm9yIHRlbG5ldCBpbiBVbml4IHN5c3RlbXMgaXMgQ3RybC1dLgorICAgIFdoaWxlIHVzaW5nIFZpbSBpbiBhIHRlbG5ldCBzZXNzaW9uLCBpZiB5b3UgdXNlIEN0cmwtXSB0byBqdW1wIHRvIGEgdGFnLAorICAgIHlvdSB3aWxsIGdldCB0aGUgdGVsbmV0IHByb21wdC4gIFRoZXJlIGFyZSB0d28gd2F5cyB0byBhdm9pZCB0aGlzIHByb2JsZW06CisKKyAgICAxLiBNYXAgdGhlIHRlbG5ldCBlc2NhcGUgY2hhcmFjdGVyIHRvIHNvbWUgb3RoZXIgY2hhcmFjdGVyIHVzaW5nCisgICAgICAgdGhlICItZSAmbHQ7ZXNjYXBlIGNoYXJhY3RlciZndDsiIHRlbG5ldCBjb21tYW5kIGxpbmUgb3B0aW9uCisKKyAgICAyLiBEaXNhYmxlIHRoZSB0ZWxuZXQgZXNjYXBlIGNoYXJhY3RlciB1c2luZyB0aGUgIi1FIiB0ZWxuZXQKKyAgICAgICBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgICAgSGVscCBrZXl3b3JkKHMpOiB0ZWxuZXQtQ1RSTC1dCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkhvdyBkbyBJIHBpcGUKK3RoZSBvdXRwdXQgZnJvbSBleCBjb21tYW5kcyBpbnRvIHRoZSB0ZXh0IGJ1ZmZlcj88L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTU8L0E+PEJSPgorCitUaGlzIGlzIGEgKnJlcXVlc3QqIGZvciBhIHRpcC4JSSBuZWVkIHRvIGJlIGFibGUgdG8gcGlwZSB0aGUgb3V0cHV0IG9mIGEKKzpibGFoIGV4IGNvbW1hbmQgaW50byB0aGUgdmltIHRleHQgYnVmZmVyIGZvciBlZGl0aW5nLglJIHdhbnRlZCB0byBkbyB0aGlzCittYW55IHRpbWVzIGZvciBkaWZmZXJlbnQgcmVhc29ucyBhbmQgY291bGQgbmV2ZXIgZmluZCBhIHdheSEKKworSSB3b3VsZCBqdXN0IGxvdmUgdG8gYmUgYWJsZSB0byBkbyA6aGkgLS0mZ3Q7IHRleHRCdWZmZXIgYW5kIGV4YW1pbmUgdGhlIG91dHB1dAorYXQgbXkgb3duIGxlYXN1cmUgc2Nyb2xsaW5nIHVwIGFuZCBkb3duIGFuZCB1c2luZyB2aW0gc2VhcmNoIGNvbW1hbmRzIG9uIGl0LgorU2FtZSB0aGluZyBmb3IgOnNldCBhbGwsIGFuZCBvdGhlciB0aGluZ3MuICBDb25zaWRlcmluZyB0aGF0IGN1dCBhbmQgcGFzdGUKK2lzIGhvcnJpYmxlIGluIHdpbmRvd3MsIEkgY2FuJ3QgZm9yIGV4YW1wbGUgZG8gOnNldCBndWlvcHRpb25zPyB0aGVuIGN1dAorYW5kIHBhc3RlISAgU28gSSBoYXZlIHRvIHJldHlwZSBpdCwgb3IgY3V0IGFuZCBwYXN0ZSBmcm9tIHRoZSBoZWxwIG1hbnVhbC4KK0kgcmVhbGx5IHdhbnQgdG8gYmUgYWJsZSB0byBwaXBlIHRoZSBvdXRwdXQgb2YgZXggY29tbWFuZHMgaW50byB0aGUgdGV4dAorYnVmZmVyLiAgQ2FuIHNvbWVvbmUgaGVscCBtZT8KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Q29vcGVyYXRpb24KK29mIEd2aW0gYW5kIEF1dG9DYWQgW01URVhUXTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD05NiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD05NjwvQT48QlI+CisKK1lvdSBjYW4gLSBsaWtlIG1lIDpvKSAgLSB1c2UgZ3ZpbSwgbGlrZSByZXBsYWNlbWVudCBvZiBpbnRlcm5hbCBBdXRvQ2FkCitNVEVYVCBlZGl0b3IuIFlvdSBuZWVkIHN3aXRjaCB2YXJpYWJsZSBNVEVYVEVEIHRvICJndmltIiAob3IgbWF5YmUgZnVsbHBhdGgsCitzb21ldGhpbmcgbGlrZSAiYzpcdmltXHZpbTYwYXFcZ3ZpbSIgKSwgYW5kIHRvIHlvdXIgX3ZpbXJjIHlvdSBjYW4gcHV0IGxpbmU6CisKK2F1dG9jbWQgQnVmUmVhZCxCdWZOZXdGaWxlICoudG1wIHNvdXJjZSBjOlx2aW1cYWFjYWQudmltCisKK0FuZCB3aGVuIHlvdSBlZGl0IE1URVhUIGluIGFjYWQsIG1lbnUgQXV0b0NhZCB3aWxsIGJlIGZvciB5b3VyIHVzZSBpbiBndmltCisob25seSBpbiBJTlNFUlQgYW5kIFZJU1VBTCBtb2RlKQorCitbTk9URTogT25seSBJIGNhbid0IHN0YXJ0IGd2aW0gbGlrZSBndmltIC15IChmb3IgYW55IG90aGVyIHBlcnNvbiwgbm90IHNvCithY2N1c3RvbWVkIHZpdGggZ3ZpbSkgb3Igc3RhcnQgZ3ZpbSBmcm9tIGd2aW0ubG5rIG9yIGd2aW0uYmF0IChJJ2FtIHVzaW5nCit3aW5kb3dzOTUpIGFuZCBhdXRvbWF0aWMgc2tpcCB0byBJTlNFUlQgbW9kZSAtbGF0ZXN0IHdvcmQgc3Rhciwgb24gZW5kIG9mCitzY3JpcHQtIGlzIHdpdGhvdXQgZnVuY3Rpb25hbGl0eSg/KSBNYXliZSBzb21lb25lIGFkdmlzZSBtZT8/IF0KKworV2VsbCwgc2NyaXB0IGFhY2FkLnZpbSBpcyBsaXN0ZWQgaGVyZToKKworIlZJTSBtZW51IGZvciBBdXRvQ2FkJ3MgTVRFWFQgZWRpdGF0aW9uICJicno7CittYWlsdG86YnJ6QGNlbnRydW0uY3o7CTguIDguIDIwMDEgIiBWZXJzaW9uIE1rLkkKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbWVudSAmQXV0b0NhZC5JbnNlcnQuU3BhY2UgXH4gdm1lbnUgJkF1dG9DYWQuSW5zZXJ0LlNwYWNlCismbHQ7RXNjJmd0O2AmbHQ7aVx+Jmx0O0VzYyZndDslIGltZW51ICZBdXRvQ2FkLkluc2VydC5CYWNrc2xhc2ggXFwKK3ZtZW51ICZBdXRvQ2FkLkluc2VydC5CYWNrc2xhc2ggJmx0O0VzYyZndDtgJmx0O2lcXCZsdDtFc2MmZ3Q7JSBpbWVudQorJkF1dG9DYWQuSW5zZXJ0LkJyYWNrZXRzIFx7XH0mbHQ7RXNjJmd0O0ZcaSB2bWVudSAmQXV0b0NhZC5JbnNlcnQuQnJhY2tldHMKKyZsdDtFc2MmZ3Q7YCZndDthXH0mbHQ7RXNjJmd0O2AmbHQ7aVx7Jmx0O0VzYyZndDslIGltZW51CismQXV0b0NhZC5JbnNlcnQuUGFyYWdyYXBoIFxQIHZtZW51ICZBdXRvQ2FkLkluc2VydC5QYXJhZ3JhcGgKKyZsdDtFc2MmZ3Q7YCZndDthXFAmbHQ7RXNjJmd0OyUKKworaW1lbnUgJkF1dG9DYWQuLVNFUDEtIDoKKworaW1lbnUgJkF1dG9DYWQuQ29sb3VyLlJlZCBcQzE7IHZtZW51ICZBdXRvQ2FkLkNvbG91ci5SZWQKKyZsdDtFc2MmZ3Q7YCZndDthXEM3OyZsdDtFc2MmZ3Q7YCZsdDtpXEMxOyZsdDtFc2MmZ3Q7JSBpbWVudQorJkF1dG9DYWQuQ29sb3VyLlllbGxvdyBcQzI7IHZtZW51ICZBdXRvQ2FkLkNvbG91ci5ZZWxsb3cKKyZsdDtFc2MmZ3Q7YCZndDthXEM3OyZsdDtFc2MmZ3Q7YCZsdDtpXEMyOyZsdDtFc2MmZ3Q7JSBpbWVudQorJkF1dG9DYWQuQ29sb3VyLkdyZWVuIFxDMzsgdm1lbnUgJkF1dG9DYWQuQ29sb3VyLkdyZWVuCismbHQ7RXNjJmd0O2AmZ3Q7YVxDNzsmbHQ7RXNjJmd0O2AmbHQ7aVxDMzsmbHQ7RXNjJmd0OyUKK2ltZW51ICZBdXRvQ2FkLkNvbG91ci5DeWFuIFxDNDsgdm1lbnUgJkF1dG9DYWQuQ29sb3VyLkN5YW4KKyZsdDtFc2MmZ3Q7YCZndDthXEM3OyZsdDtFc2MmZ3Q7YCZsdDtpXEM0OyZsdDtFc2MmZ3Q7JQoraW1lbnUgJkF1dG9DYWQuQ29sb3VyLkJsdWUgXEM1OyB2bWVudSAmQXV0b0NhZC5Db2xvdXIuQmx1ZQorJmx0O0VzYyZndDtgJmd0O2FcQzc7Jmx0O0VzYyZndDtgJmx0O2lcQzU7Jmx0O0VzYyZndDslIGltZW51CismQXV0b0NhZC5Db2xvdXIuVmlvbGV0IFxDNjsgdm1lbnUgJkF1dG9DYWQuQ29sb3VyLlZpb2xldAorJmx0O0VzYyZndDtgJmd0O2FcQzc7Jmx0O0VzYyZndDtgJmx0O2lcQzY7Jmx0O0VzYyZndDslCitpbWVudSAmQXV0b0NhZC5Db2xvdXIuQmxhY2sgXEM3OyB2bWVudSAmQXV0b0NhZC5Db2xvdXIuQmxhY2sKKyZsdDtFc2MmZ3Q7YCZndDthXEM3OyZsdDtFc2MmZ3Q7YCZsdDtpXEM3OyZsdDtFc2MmZ3Q7JSBpbWVudQorJkF1dG9DYWQuQ29sb3VyLkRfR3JleSBcQzg7IHZtZW51ICZBdXRvQ2FkLkNvbG91ci5EX0dyZXkKKyZsdDtFc2MmZ3Q7YCZndDthXEM3OyZsdDtFc2MmZ3Q7YCZsdDtpXEM4OyZsdDtFc2MmZ3Q7JSBpbWVudQorJkF1dG9DYWQuQ29sb3VyLkxfR3JleSBcQzk7IHZtZW51ICZBdXRvQ2FkLkNvbG91ci5MX0dyZXkKKyZsdDtFc2MmZ3Q7YCZndDthXEM3OyZsdDtFc2MmZ3Q7YCZsdDtpXEM5OyZsdDtFc2MmZ3Q7JQorCitpbWVudSAmQXV0b0NhZC5Gb250LkFyaWFsIFxmQXJpYWw7IHZtZW51ICZBdXRvQ2FkLkZvbnQuQXJpYWwKKyZsdDtFc2MmZ3Q7YCZsdDtpXGZBcmlhbDsmbHQ7RXNjJmd0OyUgaW1lbnUgJkF1dG9DYWQuRm9udC5TeW1ib2wgXEZzeW1ib2w7Cit2bWVudSAmQXV0b0NhZC5Gb250LlN5bWJvbCAmbHQ7RXNjJmd0O2AmbHQ7aVxGc3ltYm9sOyZsdDtFc2MmZ3Q7JQoraW1lbnUgJkF1dG9DYWQuRm9udC5Sb21hbkMgXEZyb21hbmM7IGltZW51ICZBdXRvQ2FkLkZvbnQuUm9tYW5DCismbHQ7RXNjJmd0O2AmbHQ7aVxGcm9tYW5jOyZsdDtFc2MmZ3Q7JSBpbWVudSAmQXV0b0NhZC5Gb250LlJvbWFuUyBcRnJvbWFuczsKK3ZtZW51ICZBdXRvQ2FkLkZvbnQuUm9tYW5TICZsdDtFc2MmZ3Q7YCZsdDtpXEZyb21hbnM7Jmx0O0VzYyZndDslCitpbWVudSAmQXV0b0NhZC5Gb250LlJvbWFuRCBcRnJvbWFuZDsgdm1lbnUgJkF1dG9DYWQuRm9udC5Sb21hbkQKKyZsdDtFc2MmZ3Q7YCZsdDtpXEZyb21hbmQ7Jmx0O0VzYyZndDslIGltZW51ICZBdXRvQ2FkLkZvbnQuUm9tYW5UIFxGcm9tYW50Owordm1lbnUgJkF1dG9DYWQuRm9udC5Sb21hblQgJmx0O0VzYyZndDtgJmx0O2lcRnJvbWFudDsmbHQ7RXNjJmd0OyUKKworaW1lbnUgJkF1dG9DYWQuU2l6ZS4wXzV4IFxIMC41eDsgdm1lbnUgJkF1dG9DYWQuU2l6ZS4wXzV4CismbHQ7RXNjJmd0O2AmbHQ7aVxIMC41eDsmbHQ7RXNjJmd0OyUgaW1lbnUgJkF1dG9DYWQuU2l6ZS4xXzV4IFxIMS41eDsgdm1lbnUKKyZBdXRvQ2FkLlNpemUuMV81eCAmbHQ7RXNjJmd0O2AmbHQ7aVxIMS41eDsmbHQ7RXNjJmd0OyUgaW1lbnUgJkF1dG9DYWQuU2l6ZS4yeAorXEgyeDsgdm1lbnUgJkF1dG9DYWQuU2l6ZS4yeCAmbHQ7RXNjJmd0O2AmbHQ7aVxIMng7Jmx0O0VzYyZndDslCitpbWVudSAmQXV0b0NhZC5TaXplLjN4IFxIM3g7IHZtZW51ICZBdXRvQ2FkLlNpemUuM3gKKyZsdDtFc2MmZ3Q7YCZsdDtpXEgzeDsmbHQ7RXNjJmd0OyUKKworaW1lbnUgJkF1dG9DYWQuRWZmZWN0cy5TZXRfT3V0XzFfNSBcVDEuNTsgdm1lbnUgJkF1dG9DYWQuRWZmZWN0cy5TZXRfT3V0XzFfNQorJmx0O0VzYyZndDtgJmd0O2FcVDE7Jmx0O0VzYyZndDtgJmx0O2lcVDEuNTsmbHQ7RXNjJmd0OyUgaW1lbnUKKyZBdXRvQ2FkLkVmZmVjdHMuU2V0X091dF8yIFxUMjsgdm1lbnUgJkF1dG9DYWQuRWZmZWN0cy5TZXRfT3V0XzIKKyZsdDtFc2MmZ3Q7YCZndDthXFQxOyZsdDtFc2MmZ3Q7YCZsdDtpXFQyOyZsdDtFc2MmZ3Q7JQorCitpbWVudSAmQXV0b0NhZC5FZmZlY3RzLi1TRVAzLSA6IGltZW51CismQXV0b0NhZC5FZmZlY3RzLlRpbHRfMTVkZWcgXFExNTsgdm1lbnUgJkF1dG9DYWQuRWZmZWN0cy5UaWx0XzE1ZGVnCismbHQ7RXNjJmd0O2AmZ3Q7YVxRMDsmbHQ7RXNjJmd0O2AmbHQ7aVxRMTA7Jmx0O0VzYyZndDslIGltZW51CismQXV0b0NhZC5FZmZlY3RzLlRpbHRfMjBkZWcgXFEyMDsgdm1lbnUgJkF1dG9DYWQuRWZmZWN0cy5UaWx0XzIwZGVnCismbHQ7RXNjJmd0O2AmZ3Q7YVxRMDsmbHQ7RXNjJmd0O2AmbHQ7aVxRMjA7Jmx0O0VzYyZndDslIGltZW51CismQXV0b0NhZC5FZmZlY3RzLlRpbHRfMzBkZWcgXFEzMDsgdm1lbnUgJkF1dG9DYWQuRWZmZWN0cy5UaWx0XzMwZGVnCismbHQ7RXNjJmd0O2AmZ3Q7YVxRMDsmbHQ7RXNjJmd0O2AmbHQ7aVxRMzA7Jmx0O0VzYyZndDslCisKK2ltZW51ICZBdXRvQ2FkLkVmZmVjdHMuLVNFUDQtIDogaW1lbnUgJkF1dG9DYWQuRWZmZWN0cy5DaGFuZ2VfV2lkdGhfMF81eAorXFcwLjU7IHZtZW51ICZBdXRvQ2FkLkVmZmVjdHMuQ2hhbmdlX1dpZHRoXzBfNXgKKyZsdDtFc2MmZ3Q7YCZndDthXFcxOyZsdDtFc2MmZ3Q7YCZsdDtpXFcwLjU7Jmx0O0VzYyZndDslIGltZW51CismQXV0b0NhZC5FZmZlY3RzLkNoYW5nZV9XaWR0aF8yeCBcVzI7IHZtZW51ICZBdXRvQ2FkLkVmZmVjdHMuQ2hhbmdlX1dpZHRoXzJ4CismbHQ7RXNjJmd0O2AmZ3Q7YVxXMTsmbHQ7RXNjJmd0O2AmbHQ7aVxXMjsmbHQ7RXNjJmd0OyUKKworaW1lbnUgJkF1dG9DYWQuRWZmZWN0cy4tU0VQNS0gOiBpbWVudSAmQXV0b0NhZC5FZmZlY3RzLkp1c3RpZnlfRG93biBcQTA7Cit2bWVudSAmQXV0b0NhZC5FZmZlY3RzLkp1c3RpZnlfRG93biAmbHQ7RXNjJmd0O2AmbHQ7aVxBMDsmbHQ7RXNjJmd0OyUKK2ltZW51ICZBdXRvQ2FkLkVmZmVjdHMuSnVzdGlmeV9NaWRkbGUgXEExOyB2bWVudQorJkF1dG9DYWQuRWZmZWN0cy5KdXN0aWZ5X01pZGRsZSAmbHQ7RXNjJmd0O2AmbHQ7aVxBMTsmbHQ7RXNjJmd0OyUKK2ltZW51ICZBdXRvQ2FkLkVmZmVjdHMuSnVzdGlmeV9VcCBcQTI7IHZtZW51ICZBdXRvQ2FkLkVmZmVjdHMuSnVzdGlmeV9VcAorJmx0O0VzYyZndDtgJmx0O2lcQTI7Jmx0O0VzYyZndDslIGltZW51ICZBdXRvQ2FkLkVmZmVjdHMuT3ZlcmxpbmVkX0NoYXJhY3RlcnMKK1xPXG8mbHQ7RXNjJmd0O0ZcaSB2bWVudSAmQXV0b0NhZC5FZmZlY3RzLk92ZXJsaW5lZF9DaGFyYWN0ZXJzCismbHQ7RXNjJmd0O2AmZ3Q7YVxPJmx0O0VzYyZndDtgJmx0O2lcbyZsdDtFc2MmZ3Q7JSBpbWVudQorJkF1dG9DYWQuRWZmZWN0cy5VbmRlcmxpbmVkX0NoYXJhY3RlcnMgXExcbCZsdDtFc2MmZ3Q7RlxpCit2bWVudSAmQXV0b0NhZC5FZmZlY3RzLlVuZGVybGluZWRfQ2hhcmFjdGVycworJmx0O0VzYyZndDtgJmd0O2FcbCZsdDtFc2MmZ3Q7YCZsdDtpXEwmbHQ7RXNjJmd0OyUgaW1lbnUKKyZBdXRvQ2FkLkVmZmVjdHMuSW5kZXhfVG9wIFxTXjsKKworaW1lbnUgJkF1dG9DYWQuLVNFUDYtIDogaW1lbnUgJkF1dG9DYWQuSGVscCAmbHQ7Q1ImZ3Q7Jmx0O0NSJmd0OyoqKlF1aXQKK0VkaXRvcjogcHJlc3MgQWx0LUY0IGFuZCAnTm8nICoqKiZsdDtDUiZndDsmbHQ7Q1ImZ3Q7CisKK3N0YXIKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SG93CitkbyBJIGFkZCBhIGN1cnJlbnQgdGltZSBzdHJpbmcgaW5zaWRlIFZpbT88L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTc8L0E+PEJSPgorCitUaGlzIGlzIGEgKnJlcXVlc3QqIGZvciBhIHRpcC4JU29tZXRpbWVzIChlZy4gZWRpdGluZyBIVE1MIHBhZ2VzKSBJIG5lZWQKK3RvIGFkZCBhIHRpbWVzdGFtcCBzdHJpbmcgdG8gbXkgZWRpdGluZyBidWZmZXIuICBPbiBVTklYIHN5c3RlbXMsIEkgY2FuIHVzZQorICA6ciFkYXRlCit0byBnZXQgYSBsb2NhbGl6ZWQgZGF0ZSB0aW1lIHN0cmluZzsgYnV0IG9uIFdpbmRvd3MgKCdkYXRlJyBvbiBXaW5kb3dzIHdpbGwKK3F1ZXJ5IHRoZSB1c2VyIHRvIGlucHV0IG5ldyBkYXRlKSBvciBvdGhlciBwbGF0Zm9ybXMgd2hpY2ggZG9lcyBub3QgaGF2ZQorJ2RhdGUnIGNvbW1hbmQsIGhvdyBkbyBJIGdldCBhIHRpbWVzdGFtcCBlYXNpbHk/CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkdldHRpbmcKK3ZpbSBoZWxwIGZyb20gbWFpbGluZyBsaXN0cyBhbmQgbmV3c2dyb3Vwcy48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9OTg8L0E+PEJSPgorCitUaGVyZSBoYXZlIGJlZW4gYSBmZXcgInJlcXVlc3RzIGZvciB0aXBzIiBlbnRlcmVkIGludG8gdGhlIHRpcHMgZGF0YWJhc2UKK2xhdGVseS4gIElmIHlvdSBoYXZlIHNwZWNpZmljIHF1ZXN0aW9ucyB0aGF0IGFyZW4ndCBhbnN3ZXJlZCBieSB0aGUgZXhpc3RpbmcKK3RpcHMsIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiByZXNvdXJjZXMgdGhhdCBtYXkgYmUgbW9yZSBhcHByb3ByaWF0ZToKKworVGhlIG1haWxpbmcgbGlzdCB2aW1AdmltLm9yZyBpcyBmb3IgdmltIHVzZXJzLglJZiB5b3Ugc2VuZCBhbiBlbWFpbAordG8gdmltLWhlbHBAdmltLm9yZywgeW91J2xsIGdldCBhIG1lc3NhZ2UgYmFjayB0ZWxsaW5nIHlvdSBob3cKK3RvIHN1YnNjcmliZSwgYXMgd2VsbCBhcyBob3cgdG8gcmVxdWVzdCBvbGQgbWVzc2FnZXMgYW5kIGNvbnRhY3QKK3RoZSBsaXN0IG1haW50YWluZXIuICBUaGlzIG1haWxpbmcgbGlzdCBpcyBhbHNvIGFyY2hpdmVkIGF0IDxBCitIUkVGPSJodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC92aW0uIj5odHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC92aW0uPC9BPjxCUj4KKworVGhlIG5ld3Nncm91cCBjb21wLmVkaXRvcnMgZGlzY3Vzc2VzIG1hbnkgZGlmZmVyZW50IGVkaXRvcnMsIGJ1dCBtb3N0IG9mCit0aGUgdHJhZmZpYyBpcyBhYm91dCB2aW0uICBXaGVuIHBvc3RpbmcsIGl0IGlzIGFwcHJlY2lhdGVkIGlmIHlvdSBpbmNsdWRlCisidmltIiBpbiB0aGUgc3ViamVjdCBsaW5lLiAgVGhlIGNvbXAuZWRpdG9ycyBuZXdzZ3JvdXAgaXMgYXJjaGl2ZWQgYXQgPEEKK0hSRUY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/aGw9ZW4mc2FmZT1vZmYmZ3JvdXA9Y29tcC5lZGl0b3JzLiI+aHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3Vwcz9obD1lbiZzYWZlPW9mZiZncm91cD1jb21wLmVkaXRvcnMuPC9BPjxCUj4KKworVXNpbmcgdGhlIHRpcHMgZGF0YWJhc2UgZm9yIGFza2luZyBxdWVzdGlvbnMgaXMgbm90IGxpa2VseSB0byB3b3JrIHdlbGwuCitGb3IgZXhhbXBsZSwgaWYgeW91IGFzayBhIHF1ZXN0aW9uIHRpdGxlZCAiU2VhcmNoaW5nIGZvciBzdHJpbmdzIGluIGEgZmlsZSIKK2FuZCBJIHJlYWQgdGhpcyBzaXRlIGFuZCBzZWUgdGhhdCB0aXAsIEknbSBub3QgZ29pbmcgdG8gcmVhZCBpdCBpZiBJIGFscmVhZHkKK2tub3cgaG93IHRvIHNlYXJjaCBmb3Igc3RyaW5ncyBpbiBhIGZpbGUuICBJbiBjb21wLmVkaXRvcnMgYW5kIHZpbUB2aW0ub3JnLAorcGVvcGxlIGV4cGVjdCB0byBmaW5kIHF1ZXN0aW9ucyBmcm9tIG90aGVycyBhbmQgYXJlIHRoZXJlZm9yZSBtb3JlIGxpa2VseQordG8gc2VlIHlvdXIgcXVlc3Rpb25zLgorCitBZnRlciBmaW5kaW5nIHRoZSBhbnN3ZXIgdG8geW91ciBxdWVzdGlvbiwgcGxlYXNlIGNvbnNpZGVyIHdoZXRoZXIgaXQgd291bGQKK21ha2UgYW4gYXBwcm9wcmlhdGUgdGlwLCBhbmQgaWYgc28sIGFkZCBpdCB0byB0aGUgdGlwcyBkYXRhYmFzZS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SG93IHRvCit0ZWxsIHdoYXQgc3ludGF4IGhpZ2hsaWdodGluZyBncm91cCAqdGhhdCogaXMhPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTk5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTk5PC9BPjxCUj4KKworSGVyZSdzIGEgKHdoYXQgc2hvdWxkIGJlIGEgb25lLWxpbmUpIG1hcCB0byBoZWxwIHlvdSB0ZWxsIGp1c3Qgd2hhdCBzeW50YXgKK2hpZ2hsaWdodGluZyBncm91cHMgdGhlIGl0ZW0gdW5kZXIgdGhlIGN1cnNvciBhY3R1YWxseSBpczoKKworbWFwICAmbHQ7RjEwJmd0OyAgOmVjaG8gImhpJmx0OyIKKy4gc3luSURhdHRyKHN5bklEKGxpbmUoIi4iKSxjb2woIi4iKSwxKSwibmFtZSIpIC4gJyZndDsgdHJhbnMmbHQ7JworLiBzeW5JRGF0dHIoc3luSUQobGluZSgiLiIpLGNvbCgiLiIpLDApLCJuYW1lIikgLiAiJmd0OyBsbyZsdDsiCisuIHN5bklEYXR0cihzeW5JRHRyYW5zKHN5bklEKGxpbmUoIi4iKSxjb2woIi4iKSwxKSksIm5hbWUiKSAuICImZ3Q7IiZsdDtDUiZndDsKKworT25jZSBrbm93biB5b3UgY2FuIG92ZXJyaWRlIHRoZSBjdXJyZW50IGhpZ2hsaWdodGluZyB3aXRoIHdoYXRldmVyIHlvdSB3YW50LgorSWYgeW91J3JlIGRlYnVnZ2luZyBhIHN5bnRheCBoaWdobGlnaHRpbmcgZmlsZSAoYSByYXJlIG9jY3VwYXRpb24pLCBzb21ldGltZXMKK3lvdSdsbCB3aXNoIHRvIGtub3cgdGhlIGVudGlyZSBjaGFpbiBvZiBzeW50YXggaGlnaGxpZ2h0aW5nLiAgRm9yIHRoYXQsCitjaGVjayBvdXQKKworPEEKK0hSRUY9Imh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vdmltc2NyaXB0L2hpbGlua3MudmltIj5odHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL3ZpbXNjcmlwdC9oaWxpbmtzLnZpbTwvQT48QlI+CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkp1bXAgdG8KK3RhZyAoZS5nLiBoZWxwIHRvcGljKSB3aXRoIEdlcm1hbiBrZXlib2FyZCAoUEMpPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEwMCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDA8L0E+PEJSPgorCitZb3UncmUgYSBuZXdiaWUgaW4gdmltIGFuZCBuZWVkIHNvbWUgIjpoZWxwIj8gV2VsbCwgaGVscC50eHQgcmVhZHM6CisKKyJKdW1wIHRvIGEgc3ViamVjdDogIFBvc2l0aW9uIHRoZSBjdXJzb3Igb24gYSB0YWcgYmV0d2VlbiB8YmFyc3wgYW5kIGhpdAorQ1RSTC1dLiIKKworVW5mb3J0dW5hdGVseSB0aGVyZSBpcyBubyAiXSIga2V5IG9uIEdlcm1hbiBrZXlib2FyZHMuIE9uIFdpbjMyIHRyeSBDVFJMLSsKKyhTdHJnLSspLCBvbiBMaW51eCBjb25zb2xlIEkgdXNlIENUUkwtQWx0R3ItOSAoU3RyZy1BbHRHci05KS4KKworS2luZCByZWdhcmRzCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkNoYW5nZSBhdXRvbWF0aWNhbGx5Cit0byB0aGUgZGlyZWN0b3J5IHRoZSBmaWxlIGluIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBpbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTAxPC9BPjxCUj4KKworVG8gY2hhbmdlIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGRpcmVjdG9yeSB0aGUgZmlsZSBpbiB0aGUgY3VycmVudCBidWZmZXIgaXMKK2luIGFkZCBhIGxpbmUgKGJlbG93KSAgdG8gdGhlIGZpbGUgLnZpbXJjIC4gIFRoZSBmaWxlIC52aW1yYyBzaG91bGQgaGF2ZQordGhlIGZvbGxvd2luZyBpZi1zdGF0ZW1lbnQgdG8gY29udHJvbCB0aGUgYXV0b2NtZCBmZWF0dXJlOgorCisgIGlmIGhhcygiYXV0b2NtZCIpCisKKyAgICAmbHQ7IC4uLiBsb3Qgb2YgYXV0b2NtZCBzdHVmZiAuLi4gJmd0OworCisgICAgIiBDaGFuZ2UgdG8gdGhlIGRpcmVjdG9yeSB0aGUgZmlsZSBpbiB5b3VyIGN1cnJlbnQgYnVmZmVyIGlzIGluIGF1dG9jbWQKKyAgICBCdWZFbnRlciAqIDpjZCAlOnA6aAorCisgIGVuZGlmICIgaGFzKCJhdXRvY21kIikKKworQWRkIHRoZSBsaW5lIGFib3ZlIHRoZSBlbmRpZiBhbmQgcmVzdGFydCB2aW0vZ3ZpbS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+c21hcnQKK21hcHBpbmcgZm9yIHRhYiBjb21wbGV0aW9uPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEwMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDI8L0E+PEJSPgorCitJJ20gdXNlZCB0byBjb21wbGV0ZSB3b3JkcyB3aXRoICZsdDt0YWImZ3Q7LCBob3dldmVyIHdoZW4gZWRpdGluZyBzb3VyY2UKK0kgY2FuJ3QganVzdCBtYXAgdGhhdCB0byB2aW0ga2V5d29yZCBjb21wbGV0aW9uIGJlY2F1c2UgSSBzb21ldGltZSBuZWVkIHRvCitpbnNlcnQgcmVhbCB0YWJzLCBzaW5jZSBpdCBtb3N0bHkgaGFwcGVuIHdoZW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSBvcgorYWZ0ZXIgYSA7IGFuZCBiZWZvcmUgYSBvbmUgbGluZSBjb21tYSAoamF2YSwgYysrIG9yIHBlcmwgYW55b25lLi4uKSBJJ3ZlIGNvbWUKK3RvIGZpbmQgdGhlIGZvbGxvd2luZyByZWFsbHkgdXNlZnVsbCBUaGlzIGlzIGhvdyB5b3UgY2FuIG1hcCB0aGUgJmx0O3RhYiZndDsKK2tleSBpbiBpbnNlcnQgbW9kZSB3aGlsZSBzdGlsbCBiZWluZyBhYmxlIHRvIHVzZSBpdCB3aGVuIGF0IHRoZSBzdGFydCBvZgorYSBsaW5lIG9yIHdoZW4gdGhlIHByZWNlZGluZyBjaGFyIGlzIG5vdCBhIGtleXdvcmQgY2hhcmFjdGVyLiAgaW4gYSBzY3JpcHQKK2ZpbGUgaW4gYSBwbHVnaW4gZGlyZWN0b3J5IG9yIGluIHlvdXIgLnZpbXJjIGZpbGU6IGZpcnN0IGRlZmluZSBhIGZ1bmN0aW9uCit3aGljaCByZXR1cm5zIGEgJmx0O3RhYiZndDsgb3IgYSAmbHQ7Qy1OJmd0OyBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQ6CisKK2Z1bmN0aW9uIEluc2VydFRhYldyYXBwZXIoKQorICAgICAgbGV0IGNvbCA9IGNvbCgnLicpIC0gMSBpZiAhY29sIHx8IGdldGxpbmUoJy4nKVtjb2wgLSAxXSAhfiAnXGsnCisJICByZXR1cm4gIlwmbHQ7dGFiJmd0OyIKKyAgICAgIGVsc2UKKwkgIHJldHVybiAiXCZsdDtjLXAmZ3Q7IgorICAgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK3RoZW4gZGVmaW5lIHRoZSBhcHByb3ByaWF0ZSBtYXBwaW5nOiBpbm9yZW1hcCAmbHQ7dGFiJmd0OworJmx0O2MtciZndDs9SW5zZXJ0VGFiV3JhcHBlcigpJmx0O2NyJmd0OworCit0aGUgdHJpY2sgaGVyZSBpcyB0aGUgdXNlIG9mIHRoZSAmbHQ7Yy1yJmd0Oz0gaW4gaW5zZXJ0IG1vZGUgdG8gYmUgYWJsZSB0bworY2FsbCB5b3VyIGZ1bmN0aW9uIHdpdGhvdXQgbGVhdmluZyBpbnNlcnQgbW9kZS4gIDpoZWxwIGlfQ1RSTC1SIEJlbm9pdAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Nb3ZlCit0byBuZXh0L3ByZXZpb3VzIGxpbmUgd2l0aCBzYW1lIGluZGVudGF0aW9uPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEwMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDM8L0E+PEJSPgorCitXaGVuIHdvcmtpbmcgd2l0aCBQeXRob24gYW5kIG90aGVyIGxhbmd1YWdlcyB3aGljaCBkb24ndCB1c2UgYnJhY2VzLCBpdCdzCit1c2VmdWwgdG8gYmUgYWJsZSB0byBqdW1wIHRvIGFuZCBmcm9tIGxpbmVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgaW5kZW50YXRpb24KK2FzIHRoZSBsaW5lIHlvdSBhcmUgY3VycmVudGx5IG9uLgorCitubiAmbHQ7TS0sJmd0OyBrOmNhbGwgc2VhcmNoICgiXiIuIG1hdGNoc3RyIChnZXRsaW5lIChsaW5lICgiLiIpKyAxKSwKKydcKFxzKlwpJykgLiJcXFMiLCAnYicpJmx0O0NSJmd0O14gbm4gJmx0O00tLiZndDsgOmNhbGwgc2VhcmNoICgiXiIuIG1hdGNoc3RyCisoZ2V0bGluZSAobGluZSAoIi4iKSksICdcKFxzKlwpJykgLiJcXFMiKSZsdDtDUiZndDteCisKK3dpbGwgbWFwIEFsdC0mbHQ7IGFuZCBBbHQtJmd0OyBpbiBOb3JtYWwgbW9kZSB0byB1cHdhcmQgYW5kIGRvd253YXJkIHNlYXJjaGluZworZm9yIGxpbmVzIHdpdGggdGhlIHNhbWUgaW5kZW50IGFzIHRoZSBjdXJyZW50IGxpbmUuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnVzaW5nCit2aW0gdG8gY29tcGxlbWVudCBQZXJsJ3MgREJJOjpTaGVsbDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTA0PC9BPjxCUj4KKworREJJOjpTaGVsbCBpcyBhIFBlcmwgbW9kdWxlIHRoYXQgaXMgdXNlZCBhcyBhIHNoZWxsIGludGVyZmFjZSB0byBQZXJsJ3MKK3BvcHVsYXIgREJJIChkYXRhYmFzZSBpbnRlcmZhY2UpIHBhY2thZ2UuIEZvcmdldCB5b3VyIGZhdm9yaXRlIFNRTCBuYXZpZ2F0aW9uCitndWkgYW5kIGdpdmUgdGhpcyBtZXRob2QgYSBzaG90LiBUaGlzIGhhcyBvbmx5IGJlZW4gdGVzdGVkIGluIFVOSVguCisKKzEuIHJ1biBkYmlzaCAocnVucyBEQkk6OlNoZWxsOyBpbnN0YWxsZWQgd2l0aCBEQkk6OlNoZWxsKSBhbmQgY29ubmVjdCB0byBhbnkKK2RhdGFiYXNlIDIuIGluIGRiaXNoLCBzZXQgL2Zvcm1hdCBib3ggMy4gZW50ZXIgeW91ciBxdWVyeSA0LiB0byBleGVjdXRlIHF1ZXJ5LAordHlwZSAiLyB8IHZpbSAtIgorCitUaGlzIHJ1bnMgdGhlIHF1ZXJ5IGFuZCBwaXBlcyB0aGUgb3V0cHV0IHRvIHRoZSBzdGFuZGFyZCBpbnB1dCBvZiB2aW0uIEhlcmUKK2FyZSBzb21lIGZvbGxvdy11cCB0aXBzOiAtdXNlIGd2aW0gaW5zdGVhZCBvZiB2aW0gc28gYSBuZXcgd2luZG93IHdpbGwgcG9wCit1cCAtc2V0IG5vd3JhcCBvbmNlIGluIHZpbSAtbWFrZSBhIHN5bnRheCBoaWdobGlnaHRpbmcgZmlsZSBmb3IgbWUhCisKKy1BZGFtIE1vbnNlbgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+Y29tYmluaW5nIG1vdmUgYW5kIHNjcm9sbDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTA1PC9BPjxCUj4KKworSSBzb21ldGltZXMgZm91bmQgbXlzZWxmIG1vdmluZyBkb3duIGEgZmV3IGxpbmVzIHdpdGggaiwgdGhlbiBzY3JvbGxpbmcKK2Rvd24gYWJvdXQgdGhlIHNhbWUgbnVtYmVyIG9mIGxpbmVzIHdpdGggJmx0O0MtRSZndDsgdG8gcHV0IHRoZSBjdXJzb3IgaW4KK3JvdWdobHkgdGhlIHNhbWUgcGxhY2UgYXMgaXQgc3RhcnRlZC4gIEkgZGVjaWRlZCBJIHdhbnRlZCB0byBtYXAgJmx0O0MtSiZndDsKKyhhbmQgJmx0O0MtSyZndDssIHJlc3BlY3RpdmVseSkgdG8gdGhlIG1vdmUtYW5kLXNjcm9sbCBvcGVyYXRpb24uICBGaXJzdCwgSSBkaWQKKworICAgIDptYXAgJmx0O0MtSiZndDsgJmx0O0MtRSZndDtqCisKK1RoaXMgd2FzIHByZXR0eSBnb29kLCBidXQgYmVoYXZlZCBmdW5ueSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgZmlsZXMuCitUaGVuLCBJIHJlYWxpemVkIHRoYXQgJmx0O0MtRCZndDsgYWxyZWFkeSBjb21iaW5lZCBtb3ZlIGFuZCBzY3JvbGwsIHNvIEkKK2ZpZ3VyZWQgdGhhdCBnaXZpbmcgJmx0O0MtRCZndDsgYSBjb3VudCBvZiAxIHdvdWxkIGRvIGl0OgorCisgICAgOm1hcCAmbHQ7Qy1KJmd0OyAxJmx0O0MtRCZndDsKKworVW5mb3J0dW5hdGVseSwgdGhpcyBwZXJtYW5lbnRseSBhdHRhY2hlcyBhIGNvdW50IHRvICZsdDtDLUQmZ3Q7ICh1Z2ghKSwKK3NvIEkgaGF2ZSB0byB1bmRvIHRoYXQ6CisKKyAgICA6bWFwICZsdDtDLUomZ3Q7IDEmbHQ7Qy1EJmd0OzpzZXQgc2Nyb2xsPTAmbHQ7Q1ImZ3Q7CisKK1RoaXMgaGFzIHRoZSBkcmF3YmFjayBvZiBub3QgbmVjZXNzYXJpbHkgcmVzZXR0aW5nIHNjcm9sbCB0byBpdHMgb3JpZ2luYWwKK3ZhbHVlLCBidXQgc2luY2UgSSBuZXZlciBjaGFuZ2Ugc2Nyb2xsLCBpdCdzIGdvb2QgZW5vdWdoIGZvciBtZS4gIEl0IHdvdWxkIGJlCituaWNlIGlmIHRoZXJlIHdlcmUgYSB2ZXJzaW9uIG9mICZsdDtDLUQmZ3Q7IHRoYXQgZGlkIG5vdCBoYXZlIHRoZSBzaWRlLWFmZmVjdAorb2YgY2hhbmdpbmcgc2Nyb2xsLgorCitIYXBweSB2aW1taW5nLCBBbmRyZXcKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlN1cGVyc2ltcGxlIG9uZS1saW5lIHNvbHV0aW9uPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEwNiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDY8L0E+PEJSPgorCitIYWxsbywgbmV4dCBzb2x1dGlvbiBmb3IgX21vc3Rfc2ltcGxlXyBzaWduYXR1cmUgcm90YXRlcjogWW91IGNhbgorb25seSBwdXQgb25lIGxpbmUgdG8geW91ciAudmltcmMgfHwgX3ZpbXJjOiBtYXAgJmx0O0xlYWRlciZndDttcyA6ZQorYzpcc2lnbi50eHQmbHQ7Q1ImZ3Q7Z2dWLy0tJmx0O0NSJmd0O2siKnhHJGEmbHQ7Qy1SJmd0OyZsdDtDLU8mZ3Q7KiZsdDtFc2MmZ3Q7OncmbHQ7Q1ImZ3Q7OmJkJmx0O0NSJmd0O0ckYSZsdDtDLU0mZ3Q7Jmx0O0VzYyZndDsiKlAKKworTXVzdCBleGlzdCBmaWxlIChmcm9tIGVnIGFib3ZlKSBjOlxzaWduLnR4dCwgd2l0aCBjb250ZW50OiAtLSBmaXJzdCBzaWduYXR1cmUKKy0tIHNlY29uZCBzaWduYXR1cmUgLS0gdGhpcmQgc2lnbmF0dXJlIC0tCisKK1doZW4gWW91IGZpbmlzaGVkIG1haWwsIG9ubHkgY2FsbCBzaG9ydGN1dCBcbXMgYW5kICdmaXJzdCBzaWduYXR1cmUnIHdpbGwKK2JlIGluc2VydCBpbiB5b3VyIG1haWwuIEluIGM6XHNpZ24udHh0IHdpbGwgYmUgZmlyc3Qgc2lnbmF0dXJlIHB1c2hlZAordG8gdGhlIGVuZCBvZiB0aGlzIGZpbGUuIFdoZW4gWW91IHdhbnQgdXNlIG90aGVyIHNpZ25hdHVyZSwgb25seSBwcmVzcworJ3UnIGFuZCBcbXMgYWdhaW4gKE9yIFlvdSBjYW4gY2hhbmdlIFxtcyB0byBlLmcuICZsdDtGMTImZ3Q7LCBpbmRlZWQuICkKK1lvdSBjYW4gY2hhbmdlIHRoaXMgYW5kIGFwcGVuZCBvbmUgcGFydCBsaWtlICdiYXNpYycgZnJvbSBjb21tYW5kIGFuZAorYXBwZW5kICdjaGFuZ2luZycgcGFydCBmcm9tIC5zaWduYXR1cmUgZmlsZSwgYXMgeW91IGxpa2UuLi4gIE9rLCBvbmUKK3VucGxlYXNhbnQgdGhpbmcgaXMgaGVyZTogeW91ciBzaWduYXR1cmUgbXVzdCBub3QgY29udGFpbiAnLS0nIChzaWduYXR1cmUKK3NlcGFyYXRvcikuLi4gIEFueWhvdywgSSBmaW5kIGl0IHVzZWZ1bCBicnoqICZsdDticnpAY2VudHJ1bS5jeiZndDsgPEEKK0hSRUY9Imh0dHA6Ly9icnouZDIuY3ovIj5odHRwOi8vYnJ6LmQyLmN6LzwvQT48QlI+CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5jb252ZXJ0IGVudW0gdG8gc3RyaW5nIHRhYmxlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEwNyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDc8L0E+PEJSPgorCitXaGVuIHRlc3RpbmcgeW91ciBvd24gQy9DKysgcHJvZ3JhbXMgeW91IHNvbWV0aW1lcyB3aXNoIHRvIGhhdmUgYSB0cmFjZSBvdXRwdXQsCit3aGljaCBzaG93cyB5b3UsIHdoaWNoIGVudW0gdmFsdWUgaXMgdXNlZC4gIFlvdSBjYW4gZG8gdGhpcyBieSBjcmVhdGluZworYSBzdHJpbmcgdGFibGUgZm9yIHRoYXQgZW51bSB0eXBlLCB3aGljaCBjb250YWlucyB0aGUgZW51bSBpZGVudGlmeWVyIGFzCithIHN0cmluZy4gIGUuZy4gIHByaW50ZiAoIiVzIiwgTXlFbnVtU3RyaW5nVGFibGUgWyBNeUVudW1WYWxdICk7CisKK1lvdSBjYW4gY3JlYXRlIHRoZSBjb21wbGV0ZSBzdHJpbmcgdGFibGUgYnkgLSBtYXJraW5nIHRoZSBsaW5lcyBjb250YWluaW5nCit0aGUgY29tcGxldGUgdHlwZWRlZiBlbnVtIC0gc2VsZWN0IG1lbnUgQy9DKysudHJhbnNmb3JtIGVudW0yU3RyaW5ndGFiCisKK1lvdSBjYW4gY3JlYXRlIHN0cmluZyB0YWJsZSBlbnRyaWVzIGJ5IC0gbWFya2luZyB0aGUgbGluZXMgd2l0aGluIHRoZSB0eXBlZGVmCitlbnVtIC0gc2VsZWN0IG1lbnUgQy9DKysudHJhbnNmb3JtIGVudW0yU3RyaW5nCisKK1RoaXMgbWFrZXMgaXQgZWFzeSB0byBrZWVwIHRoZSBlbnVtIChvbiBjaGFuZ2VzKSBjb25zaXN0ZW50IHRvIHRoZSBzdHJpbmcKK3RhYmxlLgorCitBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIF9HVklNUkMgZmlsZTogMzFhbWVudSBDL0MrKy50cmFuc2Zvcm1cCitlbnVtMlN0cmluZ3RhYgkgICAgICAgOnMjWyAgICBdKlxcKFxcd1xcK1xcKSMvKiBcXDEgICAqLworIlxcMSIjJmx0O0NSJmd0O299OyZsdDtFU0MmZ3Q7dRJPc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IE5hbWVzW10gPQoreyZsdDtFU0MmZ3Q7Jmx0O0NSJmd0Oy9zZGZzZGYmbHQ7Q1ImZ3Q7IDMxdm1lbnUgQy9DKysudHJhbnNmb3JtXCBlbnVtMlN0cmluZ3RhYgorOnMjWwldKlxcKFxcd1xcK1xcKSMvKiBcXDEJKi8JIlxcMSIjJmx0O0NSJmd0O299OyZsdDtFU0MmZ3Q7dRJPc3RhdGljCitjb25zdCBjaGFyKiBjb25zdCBOYW1lc1tdID0geyZsdDtFU0MmZ3Q7Jmx0O0NSJmd0Oy9zZGZzZGYmbHQ7Q1ImZ3Q7CisKKzMxYW1lbnUgQy9DKysudHJhbnNmb3JtXCBlbnVtMlN0cmluZwk6cyNbCV0qXFwoXFx3XFwrXFwpIy8qCitcXDEgICAqLyAgICAgICJcXDEiIyZsdDtDUiZndDtvfSZsdDtFU0MmZ3Q7L3NkZnNkZiZsdDtDUiZndDsgMzF2bWVudQorQy9DKysudHJhbnNmb3JtXCBlbnVtMlN0cmluZwk6cyNbCV0qXFwoXFx3XFwrXFwpIy8qIFxcMQkqLworIlxcMSIjJmx0O0NSJmd0O299Jmx0O0VTQyZndDsvc2Rmc2RmJmx0O0NSJmd0OworCitoaW50OiAnL3NkZnNkZicgaXMgYWRkZWQgZm9yIGRlYWN0aXZhdGluZyBzZWFyY2ggaGlnaGxpZ2h0aW5nLCBvaywgeW91J2xsCitzdXJlIGZpbmQgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlRvZ2dsZQorYSBmb2xkIHdpdGggYSBzaW5nbGUga2V5c3Ryb2tlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEwOCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDg8L0E+PEJSPgorCitXaGVuIHZpZXdpbmcvZWRpdGluZyBhIGZvbGRlZCBmaWxlLCBpdCBpcyBvZnRlbiBuZWVkZWQgdG8gaW5zcGVjdC9jbG9zZQorc29tZSBmb2xkLiAgVG8gc3BlZWQgdXAgdGhlc2Ugb3BlcmF0aW9uIHVzZSB0aGUgZm9sbG93aW5nIChwdXQgaW4geW91cgorJEhPTUUvLnZpbXJjKToKKworIiBUb2dnbGUgZm9sZCBzdGF0ZSBiZXR3ZWVuIGNsb3NlZCBhbmQgb3BlbmVkLgkiICIgSWYgdGhlcmUgaXMgbm8gZm9sZCBhdAorY3VycmVudCBsaW5lLCBqdXN0IG1vdmVzIGZvcndhcmQuICAiIElmIGl0IGlzIHByZXNlbnQsIHJldmVyc2UgaXQncyBzdGF0ZS4KK2Z1biEgVG9nZ2xlRm9sZCgpCisJaWYgZm9sZGxldmVsKCcuJykgPT0gMAorCQlub3JtYWwhIGwKKwllbHNlCisJCWlmIGZvbGRjbG9zZWQoJy4nKSAmbHQ7IDAKKwkJCS4gZm9sZGNsb3NlCisJCWVsc2UKKwkJCS4gZm9sZG9wZW4KKwkJZW5kaWYKKwllbmRpZiAiIENsZWFyIHN0YXR1cyBsaW5lIGVjaG8KK2VuZGZ1bgorCisiIE1hcCB0aGlzIGZ1bmN0aW9uIHRvIFNwYWNlIGtleS4gIG5vcmVtYXAgJmx0O3NwYWNlJmd0OyA6Y2FsbAorVG9nZ2xlRm9sZCgpJmx0O0NSJmd0OworCitTZWUgOmhlbHAgZm9sZGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBmb2xkaW5nLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+anVtcCBiZXR3ZWVuIGZpbGVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEwOSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMDk8L0E+PEJSPgorCitPZnRlbiBJIGtub3cgSSdtIGxpa2VseSB0byBlZGl0IG1hbnkgZmlsZXMuIEkgcnVuICd2aW0gKi5wbCcgYW5kIGdldCBhIHdob2xlCitidW5jaCBvZiBvcGVuIGZpbGVzLgorCitUbyBtYWtlIGp1bXBpbmcgYmV0d2VlbiBmaWxlcyB0byBhIHBsZWFzdXJlLCBJIGRlZmluZWQgdG8gbWFwc3M6CisKK21hcCAmbHQ7ZjEmZ3Q7IDpwcmV2aW91cyZsdDtjciZndDsgbWFwICZsdDtmMiZndDsgOm5leHQmbHQ7Y3ImZ3Q7CisKK1ByZXNzIEYxIHRvIGdvIGJhY2sgYW5kIEYyIHRvIGdvIGZvcndhcmQuCisKKy0tIEtpcmlsbAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+dGV4dC0mZ3Q7aHRtbCB0YWJsZSBjb252ZXJ0ZXIuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExMCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMTA8L0E+PEJSPgorCitCZWxvdyBhcmUgdHdvIGZ1bmN0aW9ucyBhbmQgYSBtYXBwaW5nIHdoaWNoIHdpbGwgY29udmVydCBsaW5lcyBvZiBwbGFpbgordGV4dCBpbnRvIEhUTUwgdGFibGUgY29kZS4gIEZvciBleGFtcGxlLCB5b3UgaGF2ZSBzZXZlcmFsIGxpbmVzIGxpa2U6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAxIDIgMworCis0IDUgNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnkgdmlzdWFsaXppbmcKK2FsbCB0aGUgNyBsaW5lcyBhbmQgcHJlc3MgJmx0O0Y1Jmd0OywgeW91IGNhbiBjaGFuZ2UgdGhlIHRleHQgaW50bworJmx0O3RhYmxlJmd0OyZsdDt0ciZndDsKKyAgICZsdDt0ZCZndDsxJmx0Oy90ZCZndDsgJmx0O3RkJmd0OzImbHQ7L3RkJmd0OyAmbHQ7dGQmZ3Q7MyZsdDsvdGQmZ3Q7CismbHQ7L3RyJmd0OyZsdDt0ciZndDsKKyAgICZsdDt0ZCZndDs0Jmx0Oy90ZCZndDsgJmx0O3RkJmd0OzUmbHQ7L3RkJmd0OyAmbHQ7dGQmZ3Q7NiZsdDsvdGQmZ3Q7CismbHQ7L3RyJmd0OyZsdDsvdGFibGUmZ3Q7IHdoaWNoIHdpbGwgZXZlbnR1YWxseSByZW5kZXIgaW50byBhIHRhYmxlLiAgU28gdGhlCitydWxlIGlzOiBFdmVyeSBsaW5lIGlzIGEgdGFibGUgaXRlbSwgZXZlcnkgZW1wdHkgbGluZSBtZWFucyBzdGFydGluZyBvZiBhCituZXcgdGFibGUgcm93LgorCisiQSB0ZXh0LSZndDtodG1sIHRhYmxlIGNvZGUgY29udmVydGVyICJCeTogV2VuemhpIExpYW5nIHd6aGxpYW5nQHlhaG9vLmNvbQorIllvdSBjYW4gZGlzdHJpYnV0ZS9jaGFuZ2UgdGhpcyBmaWxlIGZyZWVseSBhcyBsb25nIGFzIHlvdSBrZWVwIHRoZSB0aXRsZQorYXJlYS4gVGhhbmtzCisKK2Z1bmMgVGFibGUoKQorCWxldCBlbmQ9bGluZSgiJyZndDsiKSBsZXQgc3RhcnQ9bGluZSgiJyZsdDsiKSBsZXQgaT1zdGFydAorCisJd2ggaSAmbHQ7PSBlbmQKKwkJZXhlICI6IiAuIGkgbGV0IGU9RW1wdHkoKSBpZiBlID09IDEKKwkJCWV4ZSAibm9ybWFsIEkmbHQ7L3RyJmd0OyZsdDt0ciZndDsbIgorCQllbHNlCisJCQlleGUgIm5vcm1hbCBJJmx0O3RkJmd0OxtBJmx0Oy90ZCZndDsbJmd0OyZndDsiCisJCWVuZGlmIGxldCBpPWkrMQorCWVuZHdoCisKKwlleGUgIm5vcm1hbCBvJmx0Oy90ciZndDsmbHQ7L3RhYmxlJmd0OxsmbHQ7Jmx0OyIgZXhlICI6IiAuIHN0YXJ0IGV4ZQorCSJub3JtYWwgTyZsdDt0YWJsZSZndDsmbHQ7dHImZ3Q7GyZsdDsmbHQ7IgorZW5kZnVuYworCit2bWFwICZsdDtGNSZndDsgJmx0O0VTQyZndDs6Y2FsbCBUYWJsZSgpJmx0O0NSJmd0OworCitmdW5jIEVtcHR5KCkKKwlsZXQgbGluZV9ucj0gbGluZSAoIi4iKSAgbGV0IGE9Z2V0bGluZSAoIGxpbmVfbnIgKSBsZXQgbT1tYXRjaChhLAorCSJcXFMiKSBpZiBtID09IC0xCisJCXJldHVybiAxCisJZWxzZQorCQlyZXR1cm4gMAorCWVuZGlmCitlbmRmdW5jCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlByaW50aW5nIHdpdGgKK3N5bnRheCBoaWdobGlnaHRpbmcgaW5kZXBlbmRlbnQgb2YgeW91ciBub3JtYWwgaGlnaGxpZ2h0aW5nPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMTE8L0E+PEJSPgorCitJIGhhdmUgZm91bmQgaXQgdW5kZXNpcmFibGUgdG8gdXNlIDpoYXJkY29weSBkaXJlY3RseSBiZWNhdXNlIGl0IHVzZXMgdGhlCitjdXJyZW50IHN5bnRheCBoaWdobGlnaHRpbmcgdG8gZGV0ZXJtaW5lIGhvdyB0byBwcmludCB0aGUgdGV4dC4gIEZvciBleGFtcGxlLAorSSBsaWtlIHRvIHByaW50IGNvbW1lbnRzIGluIGl0YWxpY3MsIGJ1dCBJIGRvbid0IGxpa2UgaXRhbGljIGZvbnRzIG9uIHRoZQorc2NyZWVuLiBUaGlzIHRpcCB3aWxsIHNob3cgeW91IGhvdyB0byBzZXQgdXAgYSBjb2xvcnNjaGVtZSBmb3IgcHJpbnRpbmcgYW5kCit1c2UgaXQgb25seSB3aGVuIHlvdSBwcmludC4KKworSSBjb3BpZWQgYW4gZXhpc3RpbmcgY29sb3JzY2hlbWUgdG8gfi8udmltL2NvbG9ycy9wcmludC52aW0sIGFuZCBjaGFuZ2VkCithbGwgdGhlIGxpbmVzIGxpa2UgdGhpczoKKworICBoaWdobGlnaHQgTm9ybWFsIGN0ZXJtYmc9RGFya0dyZXkgY3Rlcm1mZz1XaGl0ZSBndWlmZz1XaGl0ZSBndWliZz1ncmV5MjAKK3RvIHRoaXM6CisgIGhpZ2hsaWdodCBjbGVhciBOb3JtYWwKKworVGhlbiBJIHNldCB0aGUgc3ludGF4IGdyb3VwcyBob3cgSSB3YW50ZWQgdGhlbSB0byBiZSBwcmludGVkIG9uIHRoZSBwcmludGVyOgorCisgIGhpZ2hsaWdodCBDb21tZW50CSAgIHRlcm09aXRhbGljCSAgY3Rlcm09aXRhbGljCSAgZ3VpPWl0YWxpYyBoaWdobGlnaHQKKyAgQ29uc3RhbnQJIHRlcm09Ym9sZAljdGVybT1ib2xkCWd1aT1ib2xkIGV0Yy4uLi4KKworSSB0aGVuIGRlZmluZWQgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIG15IC52aW1yYyBmaWxlOgorCitjb21tYW5kISAtbmFyZ3M9KiBIYXJkY29weSBjYWxsIERvTXlQcmludCgiJmx0O2FyZ3MmZ3Q7IikKKworQW5kLCBmaW5hbGx5LCBJIGRlZmluZWQgdGhpcyBmdW5jdGlvbiBpbiBteSAudmltcmM6CisKK2Z1bmN0aW9uIERvTXlQcmludChhcmdzKQorICAgIGxldCBjb2xvcnNhdmU9Zzpjb2xvcnNfbmFtZSBjb2xvciBwcmludCBleGVjICJoYXJkY29weSAiLmE6YXJncyBleGVjCisgICAgJ2NvbG9yICcuY29sb3JzYXZlCitlbmRmdW5jdGlvbgorCitBZnRlciB0aGlzIGlzIGNvbXBsZXRlLCB5b3UgY2FuIGRvOgorICAgOkhhcmRjb3B5ICZndDsgL3RtcC9vdXQucHMKK29yIGp1c3QKKyAgIDpIYXJkY29weQorKE5vdGUgdGhlIGNhcGl0YWwgSCkKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+QmFjaworYW5kIGZvcnRoIGJldHdlZW4gaW5kZW50ZWQgbGluZXMgYWdhaW48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTEyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExMjwvQT48QlI+CisKK1BhdWwgV3JpZ2h0IHBvc3RlZCBhIHRpcCB3aGljaCBleHBsYWluZWQgaG93IHRvIGp1bXAgYmFjayBhbmQgZm9ydGggYmV0d2VlbgorbGluZXMgd2l0aCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC4gSSBkbyB0aGlzIGEgbG90LCBzbyBJIGNhbWUgdXAgd2l0aAordGhpcyBzbGlnaHRseSBtb3JlIGNvbXByZWhlbnNpdmUgc29sdXRpb24uCisKK1RoZSBleGFtcGxlIG1hcHBpbmdzIGJlbG93IHdvcmsgYXMgZm9sbG93czoKKworW2wgYW5kIF1sIGp1bXAgdG8gdGhlIHByZXZpb3VzIG9yIHRoZSBuZXh0IGxpbmUgd2l0aCB0aGUgc2FtZSBpbmRlbnRhdGlvbgorbGV2ZWwgYXMgdGhlIG9uZSB5b3UncmUgY3VycmVudGx5IG9uLgorCitbTCBhbmQgXUwganVtcCB0byB0aGUgcHJldmlvdXMgb3IgdGhlIG5leHQgbGluZSB3aXRoIGFuIGluZGVudGF0aW9uIGxldmVsCitsb3dlciB0aGFuIHRoZSBsaW5lIHlvdSdyZSBjdXJyZW50bHkgb24uCisKK1RoZXNlIG1vdmVtZW50cyBhbHNvIHdvcmsgaW4gdmlzdWFsIG1vZGUgYW5kIChvbmx5IGFzIG9mIG9uZSBvZiB0aGUgNi4wIGFscGhhCit2ZXJzaW9ucykgaW4gb3BlcmF0b3IgcGVuZGluZyBtb2RlLCBtZWFuaW5nIHRoYXQgeW91IGNhbiBkbyBhIGRdbC4gVGhlIG1vdGlvbgoraXMgc3BlY2lmaWVkIGFzIGJlaW5nIGV4Y2x1c2l2ZSB3aGVuIGluIG9wZXJhdG9yIHBlbmRpbmcgbW9kZS4KKworV2hlbiBtaWdodCB5b3UgdXNlIHRoaXM/IElmIHlvdSdyZSB3cml0aW5nIHByb2dyYW1zIGluIFB5dGhvbiwgSGFza2VsbCwKK29yIGVkaXRpbmcgWE1MIGZpbGVzLCB0aGV5IHdpbGwgYmUgdmVyeSB1c2VmdWwuIEUuZy4gaW4gWE1MIHlvdSBjYW4ganVtcCB0bwordGhlIG91dGVyIGVuY2xvc2luZyB0YWcsIG9yIHRoZSBuZXh0IG1hdGNoaW5nIHRhZy4gSSB1c2UgaXQgZm9yIHByYWN0aWNhbGx5Cithbnl0aGluZyBJIGVkaXQsIHNvIGl0J3Mgbm90IGxpbWl0ZWQgdG8gdGhpcy4KKworIiAiIE5leHRJbmRlbnQoKSAiICIgSnVtcCB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBsaW5lIHRoYXQgaGFzIHRoZSBzYW1lIGxldmVsCitvciBhIGxvd2VyICIgbGV2ZWwgb2YgaW5kZW50YXRpb24gdGhhbiB0aGUgY3VycmVudCBsaW5lLiAgIiAiIGV4Y2x1c2l2ZSAoYm9vbCk6Cit0cnVlOiAgTW90aW9uIGlzIGV4Y2x1c2l2ZSAiCQkJIGZhbHNlOiBNb3Rpb24gaXMgaW5jbHVzaXZlICIKK2Z3ZCAoYm9vbCk6CSAgICB0cnVlOiAgR28gdG8gbmV4dCBsaW5lICIJCQkgZmFsc2U6IEdvIHRvCitwcmV2aW91cyBsaW5lICIgbG93ZXJsZXZlbCAoYm9vbCk6ICB0cnVlOiAgR28gdG8gbGluZSB3aXRoIGxvd2VyIGluZGVudGF0aW9uCitsZXZlbCAiCQkJICAgIGZhbHNlOiBHbyB0byBsaW5lIHdpdGggdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwKKyIgc2tpcGJsYW5rcyAoYm9vbCk6ICB0cnVlOiAgU2tpcCBibGFuayBsaW5lcyAiCQkJICAgIGZhbHNlOgorRG9uJ3Qgc2tpcCBibGFuayBsaW5lcworCitmdW5jdGlvbiEgTmV4dEluZGVudChleGNsdXNpdmUsIGZ3ZCwgbG93ZXJsZXZlbCwgc2tpcGJsYW5rcykKKwlsZXQgbGluZSA9IGxpbmUoJy4nKSAgbGV0IGNvbHVtbiA9IGNvbCgnLicpICBsZXQgbGFzdGxpbmUgPSBsaW5lKCckJykKKwlsZXQgaW5kZW50ID0gaW5kZW50KGxpbmUpIGxldCBzdGVwdmFsdWUgPSBhOmZ3ZCA/IDEgOiAtMQorCisJd2hpbGUgKGxpbmUgJmd0OyAwICYmIGxpbmUgJmx0Oz0gbGFzdGxpbmUpCisJCWxldCBsaW5lID0gbGluZSArIHN0ZXB2YWx1ZSBpZiAoICAgICEgYTpsb3dlcmxldmVsICYmCisJCWluZGVudChsaW5lKSA9PSBpbmRlbnQgfHwKKwkJCQlcIGE6bG93ZXJsZXZlbCAmJiBpbmRlbnQobGluZSkgJmx0OyBpbmRlbnQpCisJCQlpZiAoISBhOnNraXBibGFua3MgfHwgc3RybGVuKGdldGxpbmUobGluZSkpICZndDsgMCkKKwkJCQlpZiAoYTpleGNsdXNpdmUpCisJCQkJCWxldCBsaW5lID0gbGluZSAtIHN0ZXB2YWx1ZQorCQkJCWVuZGlmIGV4ZSBsaW5lIGV4ZSAibm9ybWFsICIgY29sdW1uIC4gInwiCisJCQkJcmV0dXJuCisJCQllbmRpZgorCQllbmRpZgorCWVuZHdoaWxlCitlbmRmdW5jCisKKyIgTW92aW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gbGluZXMgb2Ygc2FtZSBvciBsb3dlciBpbmRlbnRhdGlvbi4KK25ub3JlbWFwICZsdDtzaWxlbnQmZ3Q7IFtsIDpjYWxsIE5leHRJbmRlbnQoMCwgMCwgMCwgMSkmbHQ7Y3ImZ3Q7Citubm9yZW1hcCAmbHQ7c2lsZW50Jmd0OyBdbCA6Y2FsbCBOZXh0SW5kZW50KDAsIDEsIDAsIDEpJmx0O2NyJmd0Oworbm5vcmVtYXAgJmx0O3NpbGVudCZndDsgW0wgOmNhbGwgTmV4dEluZGVudCgwLCAwLCAxLCAxKSZsdDtjciZndDsKK25ub3JlbWFwICZsdDtzaWxlbnQmZ3Q7IF1MIDpjYWxsIE5leHRJbmRlbnQoMCwgMSwgMSwgMSkmbHQ7Y3ImZ3Q7IHZub3JlbWFwCismbHQ7c2lsZW50Jmd0OyBbbCAmbHQ7ZXNjJmd0OzpjYWxsIE5leHRJbmRlbnQoMCwgMCwgMCwgMSkmbHQ7Y3ImZ3Q7bSdndicnCit2bm9yZW1hcCAmbHQ7c2lsZW50Jmd0OyBdbCAmbHQ7ZXNjJmd0OzpjYWxsIE5leHRJbmRlbnQoMCwgMSwgMCwKKzEpJmx0O2NyJmd0O20nZ3YnJyB2bm9yZW1hcCAmbHQ7c2lsZW50Jmd0OyBbTCAmbHQ7ZXNjJmd0OzpjYWxsIE5leHRJbmRlbnQoMCwgMCwKKzEsIDEpJmx0O2NyJmd0O20nZ3YnJyB2bm9yZW1hcCAmbHQ7c2lsZW50Jmd0OyBdTCAmbHQ7ZXNjJmd0OzpjYWxsIE5leHRJbmRlbnQoMCwKKzEsIDEsIDEpJmx0O2NyJmd0O20nZ3YnJyBvbm9yZW1hcCAmbHQ7c2lsZW50Jmd0OyBbbCA6Y2FsbCBOZXh0SW5kZW50KDAsIDAsIDAsCisxKSZsdDtjciZndDsgb25vcmVtYXAgJmx0O3NpbGVudCZndDsgXWwgOmNhbGwgTmV4dEluZGVudCgwLCAxLCAwLCAxKSZsdDtjciZndDsKK29ub3JlbWFwICZsdDtzaWxlbnQmZ3Q7IFtMIDpjYWxsIE5leHRJbmRlbnQoMSwgMCwgMSwgMSkmbHQ7Y3ImZ3Q7IG9ub3JlbWFwCismbHQ7c2lsZW50Jmd0OyBdTCA6Y2FsbCBOZXh0SW5kZW50KDEsIDEsIDEsIDEpJmx0O2NyJmd0OworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5UcmFuc2xhdG9yCitpbiB2aW0gKFdpbmRvd3Mgc29sdXRpb24pPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMTM8L0E+PEJSPgorCitIYWxsbywgdG9kYXkgSSBmb3VuZCBzY3JpcHQgInRyYW5zbGF0ZS52aW0iLCBidXQgb24gV2luZG93cyB0aGlzIHdpbGwgYmUKK3Byb2JhYmx5IGRpZmZpY3VsdCB0byBydW4gaXQgKG1heWJlIHdpdGggQ3lnd2luIGlzIGl0IHBvc3NpYmxlKS4gSSd2ZSBzaW1wbGVyCitzb2x1dGlvbiBvZiBrZXltYXAgZm9yIHZpbSBpbnRlcmxhY2luZyB0byBkaWN0aW9uYXJ5OiBNdXN0IGV4aXN0IGZpbGUgd2l0aAordm9jYWJ1bGFyeSAoZS5nLiAiYW4tY3MudHh0IiksIHdoaWNoIGlzIGNhbGxlZCBmb3Igd29yZCB1bmRlciBjdXJzb3IuIEluCisnbm9ybWFsJyBpcyBvbmx5IGRpc3BsYXllZCB3aW5kb3cgd2l0aCB0cmFuc2xhdGlvbnMsIGluICdpbnNlcnQnIGlzIHdvcmQKK3VuZGVyIGN1cnNvciBkZWxldGVkIGFuZCBpcyBpbnNlcnQgc2VsZWN0ZWQgZm9ybSBvZiB3b3JkIGZyb20gdHJhbnNsYW50aW9uCit3aW5kb3cgKHNlbGVjdCBpdCBieSBtb3VzZSBhbmQgdGhhbiBwcmVzcyByaWdodCBidXR0b246IEl0IHdvcmtzIGZpbmUgb24KK1cyaykuIEtleSBfRjEyXyBpcyBsb29raW5nIGZvciAid29yZCIsIHNoaWZ0ZWQgX1MtRjEyXyBpcyBsb29raW5nIGZvcgorInBhdHRlcm4iLiAgRm9yIHdpbmRvd3MgaXMgbmVlZGVkIGFncmVwLCB3aGljaCBpcyBsb2NhbHkgcGxhY2VkIG9uIDxBCitIUkVGPSJodHRwOi8vd3d3LnRncmllcy5kZS9hZ3JlcC9pbmRleC5odG1sIj5odHRwOi8vd3d3LnRncmllcy5kZS9hZ3JlcC9pbmRleC5odG1sPC9BPjxCUj4KKworbWFwICZsdDtGMTImZ3Q7IGIiKnl3Jmx0O0VzYyZndDs6ISBjOi9iaW4vYWdyZXAgLXdpaAorJmx0O0MtUiZndDsqICJjOi9kaWN0L2FuLWNzLnR4dCImbHQ7Q1ImZ3Q7IGltYXAgJmx0O0YxMiZndDsKKyZsdDtFc2MmZ3Q7YiIqeXcmbHQ7RXNjJmd0OzohIGM6L2Jpbi9hZ3JlcCAtd2loICZsdDtDLVImZ3Q7KgorImM6L2RpY3QvYW4tY3MudHh0IiZsdDtDUiZndDtkd2kgJmx0O0MtUiZndDsqIG1hcCAmbHQ7Uy1GMTImZ3Q7CitiIip5dyZsdDtFc2MmZ3Q7OiEgYzovYmluL2FncmVwIC1paCAmbHQ7Qy1SJmd0OyogImM6L2RpY3QvYW4tY3MudHh0IiZsdDtDUiZndDsKK2ltYXAgJmx0O1MtRjEyJmd0OyAmbHQ7RXNjJmd0O2IiKnl3Jmx0O0VzYyZndDs6ISBjOi9iaW4vYWdyZXAgLWloICZsdDtDLVImZ3Q7KgorImM6L2RpY3QvYW4tY3MudHh0IiZsdDtDUiZndDtkd2kgJmx0O0MtUiZndDsqCisKK2JyeiogJmx0O2JyekBjZW50cnVtLmN6Jmd0OworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+QnJvd3NpbmcgYnkgIHBhcmFncmFwaDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMTQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTE0PC9BPjxCUj4KKworSXQgY2FuIGJlIGRvbmUgYnkgcmVhY2hpbmcgdGhlIGJsYW5rIGxpbmVzIGluIHVwIGFuZCBkb3duIGRpcmVjdGlvbnMganVzdAorYnkgcHJlc3NpbmcKKworeyAgICAtLS0tICBGb3IgZ29pbmcgdG8gdGhlIGJsYW5rIGxpbmUgYWJvdmUgdGhlIHBhcmFncmFwaCB9CS0tLS0gIEZvcgorZ29pbmcgdG8gdGhlIGJsYW5rIGxpbmUgYmVsb3cgdGhlIHBhcmFncmFwaAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+QnJvd3NpbmcgYnkgIHBhcmFncmFwaDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMTUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTE1PC9BPjxCUj4KKworSXQgY2FuIGJlIGRvbmUgYnkgcmVhY2hpbmcgdGhlIGJsYW5rIGxpbmVzIGluIHVwIGFuZCBkb3duIGRpcmVjdGlvbnMganVzdAorYnkgcHJlc3NpbmcKKworeyAgICAtLS0tICBGb3IgZ29pbmcgdG8gdGhlIGJsYW5rIGxpbmUgYWJvdmUgdGhlIHBhcmFncmFwaCB9CS0tLS0gIEZvcgorZ29pbmcgdG8gdGhlIGJsYW5rIGxpbmUgYmVsb3cgdGhlIHBhcmFncmFwaAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5TZWFyY2ggYWxsCitvY2N1cmFuY2VzIG9mIHRoZSB3b3JkIHVuZGVyIGN1cnNvciBpbiBhbGwgdGhlIG9wZW4gZmlsZXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTE2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExNjwvQT48QlI+CisKK1NvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8ga25vdyBhbGwgdGhlIG9jY3VyYW5jZXMgb2YgdGhlIHdvcmQgdW5kZXIgY3Vyc29yIGluCithbGwgdGhlIG9wZW4gZmlsZXMuIFRoaXMgY2FuIGJlIGRvbmUgYnkgcHJlc3NpbmcgW0kgKCBicmFja2V0IGFuZCBjYXBpdGFsIEkgKQorLiBpdCBzaG93cyB0aGUgcmVzdWx0cyBmb3VuZCBpbiB0aGUgY29tbWFuZCB3aW5kb3cuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkZBU1QKK1NFQVJDSCBBQ1JPU1MgVEhFIFBST0pFQ1Q8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTE3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTExNzwvQT48QlI+CisKK1NlYXJjaGluZyBmb3IgYSB3b3JkIGFjcm9zcyB0aGUgcHJvamVjdCB3YXN0ZXMgbW9zdCBvZiB0aGUKK2RldmVsb3ByZXMgdGltZSwgd2hpY2ggY2FuIGJlIGF2b2lkZWQgYnkgdGhlIHVzZSBvZiBHTlUgSWRfdXRpbHMKK3dpdGggVklNLiAgVGhlIHByb2NlZHVyZSBuZWVkcyB0byBiZSBmb2xsb3dlZCBpcyBhcyBmb2xsb3dzOgorZG93bmxvYWQgR05VIGlkdXRpbHMgMy4yZCAobWtpZCxsaWQsZmlkLGZuaWQseHRva2lkKSBmcm9tIDxBCitIUkVGPSJodHRwOi8vd3d3Lm1vc3NiYXllbmcuY29tL35yb24vdmltL2J1aWxkcy5odG1sIj5odHRwOi8vd3d3Lm1vc3NiYXllbmcuY29tL35yb24vdmltL2J1aWxkcy5odG1sPC9BPjxCUj4KKwordW5jb21wcmVzcyBhbmQgc3RvcmUgdGhlc2UgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBmcm9tIHdoZXJlIHZpbSBpcyBydW5uaW5nLgorCitnb3RvIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LCBhbmQgcnVuIG1raWQsIGl0IHdpbGwgY3JlYXRlIElECitmaWxlIGluIHRoYXQgZGlyZWN0b3J5IChBcyBpdCBpcyB0aW1lIGNvbnN1bWluZyBwcm9jZXNzLCBzbyBiZSBwYXRpZW50KS4gY29weQordGhpcyBmaWxlIElEIHRvIHRoZSBkaXJlY3RvcnkgZnJvbSB3aGVyZSB2aW0gaXMgcnVubmluZy4KKworVVNBR0U6CisKK1B1dCB0aGVzZSBsaW5lcyBpbiB5b3VyIC52aW1yYzoKKworCW1hcCBfdSA6Y2FsbCBJRF9zZWFyY2goKSZsdDtCYXImZ3Q7ZXhlY3V0ZSAiL1xcJmx0OyIgLiBnOndvcmQKKwkuICJcXCZndDsiJmx0O0NSJmd0OyBtYXAgX24gOm4mbHQ7QmFyJmd0O2V4ZWN1dGUgIi9cXCZsdDsiIC4gZzp3b3JkCisJLiAiXFwmZ3Q7IiZsdDtDUiZndDsKKworCWZ1bmN0aW9uIElEX3NlYXJjaCgpCisJICBsZXQgZzp3b3JkID0gZXhwYW5kKCImbHQ7Y3dvcmQmZ3Q7IikgbGV0IHggPSBzeXN0ZW0oImxpZCAtLWtleT1ub25lCisJICAiLiBnOndvcmQpIGxldCB4ID0gc3Vic3RpdHV0ZSh4LCAiXG4iLCAiICIsICJnIikgZXhlY3V0ZSAibmV4dCAiIC4geAorCWVuZGZ1bgorCitUbyB1c2UgaXQsIHBsYWNlIHRoZSBjdXJzb3Igb24gYSB3b3JkLCB0eXBlICJfdSIgYW5kIHZpbSB3aWxsIGxvYWQgdGhlIGZpbGUKK3RoYXQgY29udGFpbnMgdGhlIHdvcmQuICBTZWFyY2ggZm9yIHRoZSBuZXh0IG9jdXJhbmNlIG9mIHRoZSB3b3JkIGluIHRoZQorc2FtZSBmaWxlIHdpdGggIm4iLiAgR28gdG8gdGhlIG5leHQgZmlsZSB3aXRoICJfbiIuCisKK1RoZSBtYXBwaW5nIG9mICJfdSIgYW5kICJfbiIgY2FuIGJlIGRvbmUgdG8gc29tZSBvdGhlciBrZXkgYXMgcGVyIHlvdXIKK3ByZWZlcmVuY2UgYnV0IEkgdXNlIF5LIGFuZCBeTCBmb3IgdGhpcyBwdXJwb3NlLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Db25maWd1cmluZworZ1ZpbSBhcyBJbnRlcm5ldCBFeHBsb3JlciAnVmlldyBTb3VyY2UnIGVkaXRvcjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMTgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTE4PC9BPjxCUj4KKworV2l0aGluIHRoZSByZWdpc3RyeSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBzb3VyY2UgZWRpdG9yIHRvIGJlIHVzZWQgYnkgSW50ZXJuZXQKK0V4cGxvcmVyIHdoZW4ge1ZpZXd8U291cmNlfSBpcyBzZWxlY3RlZC4gVW5mb3J0dW5hdGVseSwgeW91IGNhbid0IHNwZWNpZnkgYQorcXVvdGVkIGZpbGVuYW1lIGFyZ3VtZW50IGhlcmUsIGkuZS4gIiUxIi4gVGhlIGVkaXRvciBzcGVjaWZpZWQgaXMgc3VwcG9zZWQKK3RvIGhhbmRsZSBmaWxlbmFtZXMgd2hpY2ggY29udGFpbiBzcGFjZXMuIFRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyBmb3IKK1ZpbSBiZWNhdXNlIFZpbSB0cmVhdHMgZWFjaCBzcGFjZSBhcyBhbiBhcmd1bWVudCBzZXBhcmF0b3IuIElmIGFuIHVucXVvdGVkCitmaWxlbmFtZSBjb250YWlucyBzcGFjZXMsIFZpbSB0cmVhdHMgdGhlIGZpbGVuYW1lIGFzIG11bHRpcGxlIGFyZ3VtZW50cyBhbmQKK3dpbGwgb3BlbiBtdWx0aXBsZSBmaWxlcyBpbnN0ZWFkIG9mIG9uZS4gVG8gd29ya2Fyb3VuZCB0aGlzIHByb2JsZW0gYSBxdW90ZWQKK2ZpbGVuYW1lIGhhcyB0byBiZSBwYXNzZWQgdG8gVmltLiBUaGlzIGNhbiBiZSBkb25lIGJ5IGNyZWF0aW5nIHRoZSBmb2xsb3dpbmcKK1Zpc3VhbCBCYXNpYyBTY3JpcHQgZmlsZSBnVmltLnZiczoKKworJy0tLSBnVmltLnZicyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJ2Z1bmN0aW9uOiBTdGFydCBndmltLCBjb21iaW5pbmcgbXVsdGlwbGUgYXJndW1lbnRzIHRvIHNpbmdsZSBmaWxlIGFyZ3VtZW50LgorJ2NoYW5nZXM6ICAyMDAxMDkwNTogUXVvdGVkICdvV1NoZWxsLlJ1bicgZmlsZW5hbWUgYXJndW1lbnQsIGFsbG93aW5nIHNwYWNlcy4KKycJICAgMjAwMTA1MTg6IENyZWF0ZWQuICAnYXV0aG9yOiAgIEZyZWRkeSBWdWx0byAmbHQ7ZnZ1QGZ2dS5teXdlYi5ubCZndDsKKworICAnIE1ha2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbiBtYW5kYXRvcnkKK29wdGlvbiBleHBsaWNpdAorCitkaW0gb1dTaGVsbCwgc0FyZywgc0ZpbGUKKworICAnIENyZWF0ZSBzY3JpcHQgb2JqZWN0CitzZXQgb1dTaGVsbCA9IENyZWF0ZU9iamVjdCgid3NjcmlwdC5zaGVsbCIpCisgICcgTG9vcCB0aHJvdWdoIGFyZ3VtZW50cworZm9yIGVhY2ggc0FyZyBpbiB3c2NyaXB0LmFyZ3VtZW50cworICAgICcgQWRkIGFyZ3VtZW50IHRvIGZpbGVuYW1lCisgIHNGaWxlID0gc0ZpbGUgJiBzQXJnICYgIiAiCituZXh0CisgICcgUmVtb3ZlIGV4Y2VzcyBzcGFjZQorc0ZpbGUgPSBUcmltKHNGaWxlKQorICAnIFJ1biBWaW0gd2l0aCBmaWxlIGFyZ3VtZW50LiAgQWRkaXRpb25hbCBhcmd1bWVudHM6ICcgLVI6IFZpZXcgZmlsZQorICByZWFkb25seSAnIC1jICJzZXQgc3ludGF4PWh0bWwiOiBVc2UgSFRNTCBzeW50YXgtaGlnaGxpZ2h0aW5nICcgICAgTk9URToKKyAgVXNlICItYyAiInNldCBmdD1odG1sIiIiIHRvIG1ha2UgaXQgd29yayBmb3IgVmltIHY2Lgorb1dTaGVsbC5SdW4gXworICAiIiJEOlxQcm9ncmFtc1xWaW1cVmltNThcZ3ZpbS5leGUgIiIiICYgXyAiLVIgIiIiICYgc0ZpbGUgJiAiIiIgIiAmIF8KKyAgIi1jICIic2V0IHN5bnRheD1odG1sIiIiCisKKyAgJyBEZXN0cm95IHNjcmlwdCBvYmplY3QKK3NldCBvV1NoZWxsID0gTk9USElORworCitUaGUgc291cmNlIGVkaXRvciBub3cgY2FuIGJlIHNwZWNpZmllZCBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyBrZXkgdG8gdGhlCityZWdpc3RyeToKKworSEtFWV9MT0NBTF9NQUNISU5FIHwtIFNvZnR3YXJlCisgICB8LSBNaWNyb3NvZnQKKyAgICAgIHwtIEludGVybmV0IEV4cGxvcmVyCisJIHwtIFZpZXcgU291cmNlIEVkaXRvcgorCSAgICB8LSBFZGl0b3IgTmFtZQkgKERlZmF1bHQpID0gRDpcUHJvZ3JhbXNcVmltXGd2aW0udmJzCisKK0ZyZWRkeSBWdWx0byAmbHQ7ZnZ1QGZ2dS5teXdlYi5ubCZndDsgPEEKK0hSRUY9Imh0dHA6Ly9mdnUubXl3ZWIubmwvUHJvamVjdHMvVmltL1dlYi92aW0uaHRtIj5odHRwOi8vZnZ1Lm15d2ViLm5sL1Byb2plY3RzL1ZpbS9XZWIvdmltLmh0bTwvQT48QlI+CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5FeHBsb3JlciBzdGFydHVwIGFuZCBzaHV0ZG93bjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMTkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTE5PC9BPjxCUj4KKworSSByZWFsbHkgbGlrZSB0aGUgbmV3IGV4cGxvcmVyIHdpbmRvdywgYnV0IEkgd2FudGVkIGl0IHRvIGZ1bmN0aW9uIGEgbGl0dGxlCittb3JlIHNlZW1sZXNzbHkgaW4gdGhlIGVkaXRvci4JVGhlIGZvbGxvd2luZyBjb2RlIGRvZXMgdHdvIHRoaW5ncy4gIEZpcnN0LAordGhlIGV4cGxvcmVyIGlzIHN0YXJ0ZWQgd2hlbiB2aW0gaXMgc3RhcnRlZC4gICBJIGFsc28gbm90aWNlZCBhbmQgZml4ZWQKK3RoYXQgdGhlIGV4cGxvcmVycyBzaXplIGlzIG5vdCBlcXVhbCB0byB0aGUgd2luZG93IHNpemUsIGhlbmNlIHRoZSBzdHJhbmdlCitiZWhhdmlvciB3aGVuIHBvcHBpbmcgYmV0d2VlbiB0d28gd2luZG93cy4gIFRoZSBvdGhlciBtYWpvciBmdW5jdGlvbiBvZgordGhlIGNvZGUgaXMgdG8gY2xvc2UgdGhlIGV4cGxvcmVyIHdoZW4gaXQncyB0aGUgb25seSB3aW5kb3cgdGhhdCdzIGxlZnQuCitJJ2QgYWN0dWFsbHkgbGlrZSB0byB0YWtlIHRoaXMgYSBzdGVwIGZ1cnRoZXIgYW5kIGNsb3NlIHRoZSB3aW5kb3cgaWYgdGhlCitsYXN0IF9kb2N1bWVudF8gd2luZG93IGlzIGNsb3NlZC4gIEknZCBwcmVmZXIgdGhhdCBtdWx0aXBsZSBleHBsb3JlcnMgb3IgaGVscAord2luZG93cyBkb24ndCBrZWVwIHRoZSBhcHBsaWNhdGlvbiBydW5uaW5nIC0gb25seSBoYXZpbmcgYSBmaWxlIG9wZW4ga2VlcHMgdGhlCithcHBsaWNhdGlvbiBydW5uaW5nLiAgQnV0IEkgZGlkbid0IHNlZSBhbiBlYXN5IHdheSB0byBkbyB0aGlzLi4uIGFueW9uZSBlbHNlPworCitCVFcsIHRoYW5rIHlvdSBCcmFtIGZvciB0aGUgaGVscCBmaWd1cmluZyB0aGlzIG91dC4KKworQ29kZSAod2hpY2ggY3VycmVudGx5IGxpdmVzIGluIG15IF92aW1yYyk6CisKKyIgRklMRSBCUk9XU0VSIFNUQVJUVVAgZnVuYyBPcGVuRmlsZVdpbmRvdygpCisJIiA6cnVudGltZSBwbHVnaW4vKi52aW0JCSIgdGhpcyB3b3VsZCBiZSB1c2VmdWwgaWYgeW91IHdlcmUKKwljYWxsaW5nIHRoaXMKKwkJCQkiICAgZnVuY3Rpb24gZnJvbSB0aGUgLnZpbXJjIGRpcmVjdGx5CisJbGV0IGc6ZXhwbERldGFpbGVkTGlzdD0xCSIgc2hvdyBzaXplIGFuZCBkYXRlIGJ5IGRlZmF1bHQgbGV0CisJZzpleHBsVmVydGljYWw9MQkgICAgIiBTcGxpdCB2ZXJ0aWNhbGx5IGxldCBnOmV4cGxTdGFydFJpZ2h0PTAKKwkiIFB1dCBuZXcgZXhwbG9yZXIgd2luZG93IHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IHdpbmRvdyA6U2V4cGxvcmUKKwlzZXQgbm9udSBzZXQgd2lud2lkdGg9MTUJICIgTWFrZSB0aGUgd2lkdGggb2YgdGhlIHdpbmRvdyBtYXRjaAorCXRoZSBleHBsb3JlciBzZXR0aW5nICJsZXQgZzpleHBsVmVydGljYWw9MAkgICAgICIgU3BsaXQgdmVydGljYWxseQorCWRvYXV0b2NtZCBmaWxlRXhwbG9yZXIgQnVmRW50ZXIgIiBGb3JjZXMgdGhlIGRpcmVjdG9yeSByZWZyZXNoIHRvCisJb2NjdXIgOndpbmMgbAkJICAgICAgIiBjaGFuZ2UgdG8gdGhlIGRvY3VtZW50IHdpbmRvdworZW5kZnVuYworCitmdW5jIENsb3NlSWZMYXN0KCkKKwlpZiBleGlzdHMoImI6Y29tcGxldGVQYXRoIikJIiB0aGlzIGlzIGhvdyBJIGRldGVybWluZSB0aGF0IEknbQorCWluIGFuIGV4cGxvcmVyIHdpbmRvdworCQlsZXQgbiA9IHdpbm5yKCkgd2luY21kIHAgaWYgbiA9PSB3aW5ucigpCisJCQlxdWl0CSIgcXVpdCB0aGUgd2luZG93CisJCWVuZGlmIHdpbmNtZCBwCisJZW5kaWYKK2VuZGZ1bmMKKworaWYgaGFzKCJhdXRvY21kIikKKwlpZiAhZXhpc3RzKCJydWR5YXV0b2NvbW1hbmRzIikKKwkJbGV0IHJ1ZHlhdXRvY29tbWFuZHMgPSAxIGF1dG9jbWQgVmltRW50ZXIgKiBjYWxsCisJCU9wZW5GaWxlV2luZG93KCkgYXV0b2NtZCBXaW5FbnRlciAqIGNhbGwgQ2xvc2VJZkxhc3QoKQorCisJZW5kaWYKK2VuZGlmCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkNvbXBpbGluZworSmF2YSB3aXRoIFN1biBKREsgKGphdmFjKSB3aXRoaW4gVklNPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyMCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjA8L0E+PEJSPgorCitUaGUgJFZJTVJVTlRJTUUvY29tcGlsZXIgaGFzICdqaWtlcy52aW0nLCBidXQgdGhlcmUncyBub3RoaW5nIGZvciB0cmFkaXRpb25hbAorU3VuIEpESyhqYXZhYyksIHNvIEkgdHJpZWQgKE9ubHkgdGVzdGVkIG9uIFdpbiAyMDAwKToKKworIiBWaW0gQ29tcGlsZXIgRmlsZSAgICBqYXZhYy52aW0gIiBDb21waWxlcjoJIFN1bi9JQk0gSkRLOiBKYXZhYworCitpZiBleGlzdHMoImN1cnJlbnRfY29tcGlsZXIiKQorICBmaW5pc2gKK2VuZGlmIGxldCBjdXJyZW50X2NvbXBpbGVyID0gImphdmFjIgorCisiIEphdmFjIGRlZmF1bHRzIHRvIHByaW50aW5nIG91dHB1dCBvbiBzdGRlcnIgYW5kIG5vIG9wdGlvbnMgY2FuIGNvbnZlcnQsCitzbyB3ZSBoYXZlIHRvIHNldCAnc2hlbGxwaXBlJyBzZXRsb2NhbCBzaGVsbHBpcGU9MiZndDsgIiAyJmd0OyB3b3JrcyBvbiBXaW4KK05UIGFuZCBVTklYIHNldGxvY2FsIG1ha2Vwcmc9amF2YWNcICMmbHQ7LmphdmEgc2V0bG9jYWwgZXJyb3Jmb3JtYXQ9JWY6JWw6JW0KKyIgU29ycnkgSSdtIG5vdCBmYW1pbGlhciB3aXRoICdlcnJvcmZvcm1hdCcsIHNvIEkgc2V0IGl0IHZlcnkgc2ltcGxlLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Vc2luZwordmltIGFzIGEgc3ludGF4LWhpZ2hsaWdodGluZyBwYWdlcjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTIxPC9BPjxCUj4KKworSWYgeW91IHdhbnQgdG8gdXNlIFZpbSdzIHN5bnRheCBoaWdobGlnaHRpbmcgaW4gYSAibW9yZSItc3R5bGUgcGFnZXIsIGhlcmUncworb25lIHdheSB0byBzZXQgaXQgdXA6CisKK0ZpcnN0LCBjcmVhdGUgYSB2aW1yYyBsaWtlIHRoZSBmb2xsb3dpbmcgLS0gSSBjYWxsZWQgbWluZSB+Ly52aW1yYy5tb3JlCisKKy0tLTgmbHQ7LS0tY3V0IGhlcmUtLS04Jmx0Oy0tLSAiIE5vIGNvbXBhdGliaWxpdHkgLS0gbmVjZXNzYXJ5IGZvciBtYXBwaW5ncwordG8gd29yay4gIHNldCBub2NvbXBhdGlibGUKKworIiBTdGF0dXMgbGluZSBzZXQgbGFzdHN0YXR1cz0wIHNldCBjbWRoZWlnaHQ9MSBzZXQgbm9tb2RpZmlhYmxlICAgICAgICAiCitPbmx5IGluIHZlcnNpb24gNi4wIHNldCByZWFkb25seQorCisiIFN5bnRheCBjb2xvdXJpbmcgLS0gbGluZXMgdGFrZW4gZnJvbSBzeW50YXgudHh0IGRpc2N1c3Npb24gb24gY29sb3VyIHh0ZXJtcy4KKyIgU2VlICc6aGVscCBjb2xvci14dGVybScuIFVzZSBhcHByb3ByaWF0ZSBsaW5lcyBmb3IgeW91ciBvd24gc2V0LXVwLgoraWYgaGFzKCJ0ZXJtaW5mbyIpCisgICAgc2V0IHRfQ289MTYgc2V0IHRfU2Y9G1szJXAxJWRtIHNldCB0X1NiPRtbNCVwMSVkbQorZWxzZQorICAgIHNldCB0X0NvPTE2IHNldCB0X1NmPRtbMyVkbSBzZXQgdF9TYj0bWzQlZG0KK2VuZGlmICIgTXkgeHRlcm1zIGhhdmUgYSBuYXZ5LWJsdWUgYmFja2dyb3VuZCwgc28gSSBuZWVkIHRoaXMgbGluZSB0b28uCitzZXQgYmFja2dyb3VuZD1kYXJrICIgVHVybiBzeW50YXggb24gc3ludGF4IG9uCisKKyIgS2V5IGJpbmRpbmdzLiAgbm1hcCBiICZsdDtDLUImZ3Q7Jmx0O0MtRyZndDsgbm1hcCBxIDpxJmx0O0NSJmd0OyAiIFRvCit0eXBlIHRoZSBmb2xsb3dpbmcgbGluZSwgdHlwZSAqdHdvKiBDLVYncyBmb2xsb3dlZCBieSB0d28gc3BhY2VzLiBUaGlzICIKK2lzIGhvdyB5b3UgbWFwIHRoZSBzcGFjZWJhci4gIG5tYXAgXlYgICZsdDtDLUYmZ3Q7Jmx0O0MtRyZndDsgLS0tOCZsdDstLS1jdXQKK2hlcmUtLS04Jmx0Oy0tLQorCitUaGVuLCB0byB1c2UgdGhpcyAudmltcmMsIGFkZCBhbiBhbGlhcy4gSWYgeW91J3JlIHVzaW5nIHRjc2gsIHRoZSBzeW50YXgKK3dpbGwgYmUgc29tZXRoaW5nIGxpa2U6CisKK2FsaWFzIHZtb3JlICJ2aW0gLXUgfi8udmltcmMubW9yZSIKKworVGhlbiB5b3UgY2FuIHR5cGUgInZtb3JlIFtmaWxlbmFtZV0iIHRvIHZpZXcgYSBmaWxlIGluIHRoaXMgInBhZ2VyIi4gU3BhY2ViYXIKK3dpbGwgbW92ZSBkb3duLCAnYicgd2lsbCBtb3ZlIGJhY2sgdXAsIGFuZCAncScgcXVpdHMuIFlvdSBjYW4gYWRkIG1hcHBpbmdzCitmb3Igb3RoZXIga2V5cyBpZiB5b3Ugd2FudCB0bywgYWxzby4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+U2tpcAorYmxhbmsgbGluZXMgd2hlbiBmb2xkaW5nIHRleHQuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjI8L0E+PEJSPgorCitJIGxvdmUgdGhlIHRleHQgZm9sZGluZyBjYXBhYmlsaXRpZXMgb2YgdmltLiAgSSBkaWRuJ3QgbGlrZSB0aGF0IGl0IHdvdWxkCitkaXNwbGF5IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSByYW5nZSBhcyB0aGUgInRpdGxlIiBmb3IgdGhlIGZvbGQuICBJIGxpa2UKK3RvIHdyaXRlIG15IGNvbW1lbnRzIHdpdGggdGhlICIvKiIgb24gYSBsaW5lIGJ5IGl0c2VsZi4gIFNvIEkgd3JvdGUgdGhpcworbGl0dGxlIGZ1bmN0aW9uIHRoYXQgd2lsbCBza2lwIG92ZXIgYW55dGhpbmcgdGhhdCBpc24ndCBhIGNoYXJhY3RlciwgYW5kCit0aGVuIGRpc3BsYXkgd2hhdGV2ZXIgaXQgZmluZHMgYWZ0ZXIgdGhhdCBjaGFyYWN0ZXIuCisKK0p1c3QgaW5jbHVkZSB0aGlzIGluIHlvdXIgfi8udmltcmMgKG9yIH4vLmd2aW1yYyk6CisKK2Z1bmN0aW9uIEdldEZpcnN0TGluZVdpdGhDaGFycygpCisJbGV0IGxpbmVfbnVtID0gMCBsZXQgY2hhcmxpbmUgPSBtYXRjaHN0cihnZXRsaW5lKHY6Zm9sZHN0YXJ0KSwKKwknW2EtekEtWl1bYS16QS1aIF0qJykgd2hpbGUgc3RybGVuKGNoYXJsaW5lKSA9PSAwCisJCWxldCBsaW5lX251bSA9IGxpbmVfbnVtICsgMSBsZXQgY2hhcmxpbmUgPQorCQltYXRjaHN0cihnZXRsaW5lKHY6Zm9sZHN0YXJ0ICsgbGluZV9udW0pLCAnW2EtekEtWl1bYS16QS1aIF0qJykKKwllbmR3IHJldHVybiBjaGFybGluZQorZW5kZnVuY3Rpb24gc2V0Citmb2xkdGV4dD0nKycudjpmb2xkZGFzaGVzLnN1YnN0aXR1dGUoR2V0Rmlyc3RMaW5lV2l0aENoYXJzKCksJ1xcXC9cXFwvXFxcfFxcKlxcXHxcXCpcXFx8e3t7XFxkXFw9JywnJywnZycpCitzZXQgZmlsbGNoYXJzPWZvbGQ6IGhpIGZvbGRlZCBndWliZz1ibGFjayBndWlmZz15ZWxsb3cgZ3VpPWJvbGQKKworQW5kIGFzIGFuIGFkZGVkIGJvbnVzLCBmb3IgdGhvc2UgbmV3IHRvIHRleHQgZm9sZGluZywgYWRkIHRoaXMgdG8geW91ciAudmltcmMKK2ZpbGUgdG9vOgorCithdXRvY21kIEJ1ZldpbkxlYXZlICouKiBta3ZpZXcgYXV0b2NtZCBCdWZXaW5FbnRlciAqLiogc2lsZW50IGxvYWR2aWV3CisKK1RoYXQgd2F5IHdoYXRldmVyIGZvbGRzIHlvdSBzZXQgd29uJ3QgZ2V0IGxvc3Qgd2hlbiB5b3UgcXVpdC4gIEkgaGFkIHRoYXQKK2hhcHBlbiBhZnRlciBzcGVuZGluZyAxNSBtaW51dGVzIGZvbGRpbmcgdXAgYSAzMDAwKyBsaW5lIGZpbGUuCUhhcHB5IHZpbW1pbmchCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnVzZQorZnVuY3Rpb25hbGl0eSBzaW1pbGFyIHRvIHRoZSAqIHNlYXJjaCBvbiBtdWx0aXBsZSBmaWxlczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTIzPC9BPjxCUj4KKworVGhlIHVzZSBvZiBzdGFyIGFzIGluIHZpbXRpcCMxIGFuZCB2aW10aXAjNSBpcyBncmVhdCwgaGVyZSBpcyBob3cgdG8gdXNlCit0aGlzIHR5cGUgb2Ygc2VhcmNoIGFjY3Jvc3MgYSB3aG9sZSBkaXJlY3Rvcnk6IEp1c3QgYWRkIHRoZSBtYXBwaW5ncyAob3IKK2Nob29zZSBkaWZmZXJlbnQgbGV0dGVyIGNvbWJpbmF0aW9ucyk6IG1hcCBnciA6Z3JlcCAmbHQ7Y3dvcmQmZ3Q7ICombHQ7Y3ImZ3Q7CittYXAgZ3IgOmdyZXAgJmx0O2N3b3JkJmd0OyAlOnA6aC8qJmx0O2NyJmd0OyBtYXAgZ1IgOmdyZXAgXGImbHQ7Y3dvcmQmZ3Q7XGIKKyombHQ7Y3ImZ3Q7IG1hcCBHUiA6Z3JlcCBcYiZsdDtjd29yZCZndDtcYiAlOnA6aC8qJmx0O2NyJmd0OworCittYXBwaW5nIG9uZSB3aWxsIHNlYXJjaCBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciAobGlrZSBnKikgaW4gYW55IG9mCit0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG1hcHBpbmcgdHdvIHdpbGwgc2VhcmNoIGZvciB0aGUgd29yZAordW5kZXIgdGhlIGN1cnNvciAobGlrZSBnKikgaW4gYW55IG9mIHRoZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCitjdXJyZW50IGZpbGUgbWFwcGluZyB0aHJlZSB3aWxsIHNlYXJjaCBmb3IgdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvciBieSBpdHNlbGYKKyhpLmUuIHN1cnJvdW5kZWQgYnkgd29yZCBib3VuZGFyeSBsaWtlICopIGluIGFueSBvZiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSBtYXBwaW5nIGZvdXIgd2lsbCBzZWFyY2ggZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IgYnkgaXRzZWxmCisoaS5lLiBzdXJyb3VuZGVkIGJ5IHdvcmQgYm91bmRhcnkgbGlrZSAqKSBpbiBhbnkgb2YgdGhlIGZpbGVzIGluIHRoZSBzYW1lCitkaXJlY3RvcnkgYXMgdGhlIGN1cnJlbnQgZmlsZQorCitCZW5vaXQKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPk51bWJlciBhIGdyb3VwIG9mIGxpbmVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyNCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjQ8L0E+PEJSPgorCitCZWxvdyBpcyBhIHdheSB0byBudW1iZXIgYSBzZXQgb2YgbGluZXMuICBIZXJlIGlzIGFuIGV4YXBsZSBiZWZvcmUgYW5kCithZnRlciBzbmFwc2hvdDoKKworYXBwbGUgYm9iIHBlYXIgdHJlZQorCisxIGFwcGxlIDIgYm9iIDMgcGVhciA0IHRyZWUKKworIiBEZXNjcmlwdGlvbjogIiBUaGlzIHByb3ZpZGVzIGEgY29tbWFuZCBhbmQgYSBmdW5jdGlvbi4gIFRoZXkgYm90aCBjYW4gYmUKK2NhbGxlZCB3aXRoIG9yICIgd2l0aG91dCBhIHJhbmdlLiAgSW4gYWRkaXRpb24sIHRoZXkgY2FuIGJlIGNhbGxlZCB3aXRoIG9yCit3aXRob3V0ICIgYXJndW1lbnRzLiAgV2l0aG91dCBhIHJhbmdlIHRoZXkgb3BlcmF0ZSBvbiB0aGUgY3VycmVudCBsaW5lLiAgIiAiCitUaGVyZSBhcmUgdHdvIHN1cHBvcnRlZCBhcmd1bWVudHMuICBUaGV5IGFyZSBkZXNjcmliZWQgYmVsb3c6ICIgICAgIGFyZzEgLSZndDsKK3RoZSBudW1iZXIgdG8gc3RhcnQgYXQuICBUaGUgZGVmYXVsdCBpcyBvbmUuICBUaGlzIHdpbGwgIgkgICAgICBudW1iZXIKK3lvdXIgc2VsZWN0ZWQgbGluZXMgc2VxdWVudGlhbGx5LiAgVGhlIHN0YXJ0IGNhbiBiZSBhICIJCSAgICBudW1iZXIsCisuLCAkLCBvciwgJ3ggKGxpa2UgZ2V0bGluZSkuICAiICAgICBhcmcyIC0mZ3Q7IFRleHQgdG8gYXBwZW5kIGFmdGVyIG51bWJlcnMuCitUaGUgZGVmYXVsdCBpcyBhIHNwYWNlLiAgIiAiIEV4YW1wbGVzOiAiICAgICBUbyBwcm92aWRlIHlvdXIgZnVuY3Rpb25hbGl0eToKKyIJICA6JU5saXN0IDIwICIJICAgICAgIDolY2FsbCBObGlzdCgyMCkgIiAgICAgVG8gbWFrZSBhIGxpc3Qgc3RhcnQgYXQKKzE6ICIJICAgICA6JyZsdDssJyZndDtObGlzdCAiCSA6JyZsdDssJyZndDtjYWxsIE5saXN0KCkgIglUbworbnVtYmVyIHRoZSB3aG9sZSBidWZmZXIgKHdpdGggaXQncyBhY3R1YWwgbGluZSBudW1iZXIpOiAiCSAgOiVObGlzdCAiCis6JWNhbGwgTmxpc3QoKSAiICAgICBUbyBudW1iZXIgYSBzdWJzZXQgb2YgbGluZXMgd2l0aCB0aGVpciBsaW5lIG51bWJlciAoYW5kCitwdXQgYSAnXSAnIGluICIgICAgIGZyb250IG9mIGV2ZXJ5IG51bWJlcik6ICIJICAgICAgOicmbHQ7LCcmZ3Q7Tmxpc3QgLiBdXAorIgkgIDonJmx0OywnJmd0O2NhbGwgTmxpc3QoIi4iLCAiXSAiKQorCitjb21tYW5kISAtbmFyZ3M9KiAtcmFuZ2UgTmxpc3QgJmx0O2xpbmUxJmd0OywmbHQ7bGluZTImZ3Q7Y2FsbAorTmxpc3QoJmx0O2YtYXJncyZndDspIGZ1bmN0aW9uISBObGlzdCguLi4pIHJhbmdlCisgICAgaWYgMiA9PSBhOjAKKwlsZXQgc3RhcnQgPSBhOjEgbGV0IGFwcGVuZCA9IGE6MgorICAgIGVsc2VpZiAxID09IGE6MAorCWxldCBzdGFydCA9IGE6MSBsZXQgYXBwZW5kID0gIiAiCisgICAgZWxzZQorCWxldCBzdGFydCA9IDEgbGV0IGFwcGVuZCA9ICIgIgorICAgIGVuZGlmCisKKyAgICAiIHRyeSB0byB3b3JrIGxpa2UgZ2V0bGluZSAoaS5lLiBhbGxvdyB0aGUgdXNlciB0byBwYXNzIGluIC4gJCBvciAneCkKKyAgICBpZiAwID09IChzdGFydCArIDApCisJbGV0IHN0YXJ0ID0gbGluZShzdGFydCkKKyAgICBlbmRpZgorCisgICAgZXhlIGE6Zmlyc3RsaW5lIC4gIiwiIC4gYTpsYXN0bGluZQorICAgIC4gJ3MvXi9cPWxpbmUoIi4iKS1hOmZpcnN0bGluZStzdGFydC5hcHBlbmQvJworZW5kZnVuY3Rpb24KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkF1dG8gY29tbWVudGluZyBmb3IgIn0iPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyNSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjU8L0E+PEJSPgorCitJIGFsd2F5cyB3YW50ZWQgYSBzY3JpcHQgdGhhdCB3b3VsZCBhdXRvLWNvbW1lbnQgdGhlIGVuZCBvZiBhIGNvbmRpdGlvbmFsCitibG9jay4JU28sIEkgd3JvdGUgb25lLiAgVGhpcyBmdW5jdGlvbiBzZWFyY2hlcyBmb3IgdGhlIHByZXZpb3VzIG1hdGNoaW5nCisieyIsIGdyYWJzIHRoZSBsaW5lLCBhbmQgaW5zZXJ0cyBpdCBhcyBhIGNvbW1lbnQgYWZ0ZXIgdGhlICJ9Ii4gIElmIHRoZXJlCitpcyBubyBwcmV2aW91cyBtYXRjaGluZyAieyIsIGl0IGluc2VydHMgbm90aGluZy4KKworU28uLi4KKworICAgIGlmICh0ZXN0KXsKKword2lsbCBnZW5lcmF0ZToKKyAgICB9IC8vIGlmICh0ZXN0KQorCitUaGlzIGlzIG9idmlvdXNseSBub3Qgd29yayBpZiB5b3UgdXNlIGEgZGlmZmVyZW50IHN0eWxlLiAgSWYgeW91IHVzZQorCisgICBpZiAodGVzdCkgeworCit0aGVuIHN1YnN0aXR1dGluZyAnZ2V0bGluZSgiLiIpJywgdXNlICAnZ2V0bGluZShsaW5lKCIuIikgLSAxKScgc2hvdWxkIHdvcmsuCisKK1B1dCB0aGUgZm9sbG93aW5nIGluIHlvdXIgLnZpbXJjOiBhdSBCdWZOZXdGaWxlLEJ1ZlJlYWQgKi5jLCouY2MsKi5DLCouaAoraW1hcCB9ICZsdDtFU0MmZ3Q7OmNhbGwgQ3VybHlCcmFja2V0KCkmbHQ7Q1ImZ3Q7YQorCitmdW5jdGlvbiBDdXJseUJyYWNrZXQoKQorICBsZXQgbDpteV9saW5lbnVtID0gbGluZSgiLiIpCWl1bm1hcCB9IHNpbCBleGUgIm5vcm1hbCBpfSIgaW1hcCB9CisgICZsdDtFU0MmZ3Q7OmNhbGwgQ3VybHlCcmFja2V0KCkmbHQ7Q1ImZ3Q7IGxldCBsOnJlc3VsdDEgPSAgc2VhcmNocGFpcigneycsCisgICcnLCAnfScsICdiVycpIGlmIChyZXN1bHQxICZndDsgMCkKKyAgICBsZXQgbDpteV9zdHJpbmcgPSBzdWJzdGl0dXRlKGdldGxpbmUoIi4iKSwgJ15ccypcKC4qXCl7JywgJ1wxJywgIiIpCisgICAgc2lsIGV4ZSAiOiIgLiBsOm15X2xpbmVudW0gc2lsIGV4ZSAibm9ybWFsIGEgLy8iIC4gbDpteV9zdHJpbmcKKyAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmhvdyBkbworSSBnZXQgcmlkIG9mIHRoYXQgYm9sZCBzdHVmZiB3aXRoIG15IHh0ZXJtPzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjYiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTI2PC9BPjxCUj4KKworSGF2aW5nIHByb2JsZW1zIHNldHRpbmcgdXAgeW91ciBzeW50YXggaGlnaGxpZ2h0aW5nIGJlY2F1c2UgZXZlcnl0aGluZyBpcworY29taW5nIHVwIGluIGJvbGQ/CisKK1lvdSdyZSBwcm9iYWJseSB1c2luZyBhbiA4IGNvbG9yIHh0ZXJtIGFuZCBzZXR0aW5nIHVwIGhpZ2hsaWdodGluZyBsaW5lcyBzdWNoCithcyAgaGkgTm9ybWFsIC4uLiBjdGVybWZnPWdyZWVuIC4gIFRoZSBzb2x1dGlvbjogdXNlIG51bWJlcnMhIDA9YmxhY2ssIDE9cmVkLAorMj1ncmVlbiwgMz15ZWxsb3csIDQ9Ymx1ZSwgNT1tYWdlbnRhLCA2PWN5YW4sIGFuZCA3PXdoaXRlLiAgVmltIHRyaWVzIHRvIHVzZQorImJyaWdodCIgY29sb3JzIHdoZW4gaXRzIGdpdmVuIG5hbWVzIChiZWNhdXNlIFdpbmRveiBtYWNoaW5lcyBwcmVmZXIgdG8gdXNlCitkaW0gdGV4dCB1bmxlc3MgaXRzIGJlZW4gbWFkZSBib2xkKS4KKworUmVhZCBtb3JlIGFib3V0IGl0IHVuZGVyIDpoZWxwIGhpZ2hsaWdodC1jdGVybWZnIC4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlByZXZpZXcgSFRNTCBmaWxlcyBxdWlja2x5PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyNyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjc8L0E+PEJSPgorCitJJ3ZlIGZvdW5kIHdoaWxlIHdyaXRpbmcgSFRNTCBmaWxlcyB0aGF0IGl0IGNhbiBiZWNvbWUgY3VtYmVyc29tZSB3aGVuIEkgaGF2ZQordG8gc3dpdGNoIHRvIGEgd2ViIGJyb3dzZXIsIGxvYWQgbXkgcGFnZSwgYW5kIG1vdmUgYmFjayB0byBWSU0gcmVndWxhcmx5IHRvCitwcmV2aWV3IHdoYXQgSSd2ZSB3cml0dGVuLiAgSSd2ZSBjb21lIHVwIHdpdGggdGhlIGZvbGxvd2luZyB0cmlja3MuCisKK1RoZSBmaXJzdCBvbmUgcmVxdWlyZXMgdGhhdCB5b3UgaGF2ZSBseW54ICh0aGUgdGV4dC1iYXNlZCBicm93c2VyKSBpbnN0YWxsZWQKK29uIHlvdXIgY29tcHV0ZXIgKGF2YWlsYWJsZSBmcm9tIDxBIEhSRUY9Imh0dHA6Ly9seW54LmlzYy5vcmcvcmVsZWFzZS8pLgorSWYgeW91ciBIVE1MIHBhZ2UgaXMgcHJpbWFyaWx5IHRleHQsIHdpdGggZmV3IChpZiBhbnkpIGltYWdlcywgeW91IGNhbgorc2V0IHVwIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYW5kIG1hcHBpbmc6Ij5odHRwOi8vbHlueC5pc2Mub3JnL3JlbGVhc2UvKS4KK0lmIHlvdXIgSFRNTCBwYWdlIGlzIHByaW1hcmlseSB0ZXh0LCB3aXRoIGZldyAoaWYgYW55KSBpbWFnZXMsIHlvdSBjYW4gc2V0Cit1cCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGFuZCBtYXBwaW5nOjwvQT48QlI+CisKKyAgIGZ1bmN0aW9uIFByZXZpZXdIVE1MX1RleHRPbmx5KCkKKyAgICAgIGxldCBsOmZuYW1lID0gZXhwYW5kKCIlOnAiICkgbmV3IHNldCBidWZ0eXBlPW5vZmlsZSBub251bWJlciBleGUgIiUhbHlueAorICAgICAgIiAuIGw6Zm5hbWUgLiAiIC1kdW1wIC1ub2xpc3QgLXVuZGVyc2NvcmUgLXdpZHRoICIgLiB3aW53aWR0aCggMCApCisgICBlbmRmdW5jdGlvbgorCisgICBtYXAgJmx0O0xlYWRlciZndDtwdCAgOmNhbGwgUHJldmlld0hUTUxfVGV4dE9ubHkoKSZsdDtDUiZndDsKKworVGhpcyB3aWxsIG9wZW4gYSBuZXcgd2luZG93IGFuZCBkaXNwbGF5IHlvdXIgZm9ybWF0dGVkIEhUTUwgZG9jdW1lbnQgaW4KK3RoYXQgd2luZG93LiAgTm90ZSB0aGF0IGJvbGQtZmFjZSwgaXRhbGljcywgbGlua3MsIGV0Yy4gd2lsbCBiZSBsb3N0IC0tCithbGwgeW91IHdpbGwgc2VlIGlzIHRoZSB0ZXh0IC0tIGJ1dCB0aGUgIi11bmRlcnNjb3JlIiBwYXJhbWV0ZXIgdG8gTHlueAorY2F1c2VzIGFueSB0ZXh0IHRoYXQgd291bGQgaGF2ZSBiZWVuIGJvbGQsIGl0YWxpY2l6ZWQsIG9yIHVuZGVybGluZWQgdG8gYmUKK2Rpc3BsYXllZCBsaWtlIF90aGlzXy4KKworVGhlIG90aGVyIHRyaWNrIHJlcXVpcmVzIHRoYXQgdmltIGJlIHJ1bm5pbmcgb24geW91ciBjdXJyZW50IG1hY2hpbmUsIGFuZCB0aGF0Cit5b3UgYmUgcnVubmluZyBhIEdVSSBvZiBzb21lIHNvcnQgKFgtV2luZG93cywgV2luZG93cywgZXRjLikuICBZb3UgY2FuIGNhdXNlCit2aW0gdG8gaW52b2tlIHlvdXIgZmF2b3JpdGUgYnJvd3NlciBhbmQgaGF2ZSBpdCBkaXNwbGF5IHRoZSBmaWxlLCBsaWtlIHRoaXM6CisgICBmdW5jdGlvbiBQcmV2aWV3SFRNTF9FeHRlcm5hbCgpCisgICAgICBleGUgInNpbGVudCAhbW96aWxsYSAtcmVtb3RlIFwib3BlbnVybChmaWxlOi8vIiAuIGV4cGFuZCggIiU6cCIgKSAuICIpXCIiCisgICBlbmRmdW5jdGlvbgorCisgICBtYXAgJmx0O0xlYWRlciZndDtwcCA6Y2FsbCBQcmV2aWV3SFRNTF9FeHRlcm5hbCgpJmx0O0NSJmd0OworSWYgeW91IGRvbid0IHVzZSBtb3ppbGxhLCB5b3Ugd2lsbCBuZWVkIHRvIG1vZGlmeSB0aGUgZnVuY3Rpb24gdG8gdXNlIHlvdXIKK3ByZWZlcnJlZCBicm93c2VyLgorCitIYXBweSB2aW1taW5nIQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5ncmVwLAorZGlmZiwgcGF0Y2gsIGlkdXRpbHMsIGV0Yy4gZm9yIFdpbmRvd3Mgc3lzdGVtczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMjgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTI4PC9BPjxCUj4KKworICAgICBJZiB5b3UgdXNlIFZpbSBvbiBXaW5kb3dzLCBhbmQgeW91IHdpc2ggeW91IGhhZCBzb21lIG9mIHRob3NlIG5pZnR5CisgICAgIFVOSVggY29tbWFuZC1saW5lIHRvb2xzLAorYnV0IGRvIG5vdCBmZWVsIGxpa2UgaW5zdGFsbGluZyBhbGwgb2YgQ3lnd2luLCB5b3UKK2NhbiBnZXQgbWFueSBvZiB0aGUgbW9zdC11c2VkIHRvb2xzIGZyb20gUm9uIEFhcm9uJ3Mgd2ViIHNpdGU6IDxBCitIUkVGPSJodHRwOi8vd3d3Lm1vc3NiYXllbmcuY29tL35yb24vdmltL2J1aWxkcy5odG1sIj5odHRwOi8vd3d3Lm1vc3NiYXllbmcuY29tL35yb24vdmltL2J1aWxkcy5odG1sPC9BPjxCUj4KK1NpbmNlIFJvbiBpcyBhIGJpZyBWaW0gZmFuIChzZWUgPEEKK0hSRUY9Imh0dHA6Ly93d3cubW9zc2JheWVuZy5jb20vfnJvbi92aW0vdmltcmFudC5odG1sICkgeW91IGNhbiBjb3VudAorb24iPmh0dHA6Ly93d3cubW9zc2JheWVuZy5jb20vfnJvbi92aW0vdmltcmFudC5odG1sICkgeW91IGNhbiBjb3VudCBvbjwvQT48QlI+Cit0aGVzZSB0b29scycgd29ya2luZyB3ZWxsIHdpdGggVmltLiAgRm9yIHNvbWUgaGludHMgb24gaG93IHRvIHVzZSB0aGVtLAorcmVhZCA6aGVscCA6Z3JlcCA6aGVscCBsaWQgaW5zaWRlIFZpbS4KKyAgICAgSGFwcHkgVmltbWluZyEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+UmVtb3ZpbmcKK2F1dG9tYXRpYyBjb21tZW50IGxlYWRlcnM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTI5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEyOTwvQT48QlI+CisKKyAgICAgSWYgeW91IGluY2x1ZGUgdGhlICJyIiBmbGFnIGluIHRoZSAnZm9ybWF0b3B0aW9ucycgb3B0aW9uICg6aGVscCAnZm8nCisgICAgICwgOmhlbHAgZm8tdGFibGUgKSB0aGVuIHRoZSBjb21tZW50IGxlYWRlciBpcyBpbnNlcnRlZAorYXV0b21hdGljYWxseSB3aGVuIHlvdSBzdGFydCBhIG5ldyBsaW5lIGluIGEgY29tbWVudC4gIEZvciBleGFtcGxlLCBpbiBUZVgKK3RoZSAiJSIgY2hhcmFjdGVyIGlzIHRoZSBjb21tZW50IGxlYWRlciwgYW5kIHlvdSBtaWdodCB0eXBlCisKKyUgVGhpcyBpcyBhIHRleCBmaWxlLiAgJSBUaGUgY29tbWVudCBsZWFkZXJzIG9uIGFsbCBsaW5lcyBidXQgdGhlIGZpcnN0Cit3ZXJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LiAgJSBUaGlzIGlzIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGNvbW1lbnQsCitidXQgVmltIHdpbGwgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciBvbiB0aGUgbmV4dCBsaW5lLiAgJQorCitZb3UgY2FuIGdldCByaWQgb2YgdGhlIGNvbW1lbnQgbGVhZGVyIChhbG9uZyB3aXRoIGFueXRoaW5nIHlvdSBtYXkgYWxyZWFkeQoraGF2ZSB0eXBlZCBvbiB0aGUgbGluZSkgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGluZGVudCwgaWYgYW55LCBieSB0eXBpbmcKKyImbHQ7Qy1VJmd0OyIgd2hpbGUgaW4gSW5zZXJ0IG1vZGUuCisKKyAgICAgUmVsYXRlZCBwb2ludDogIGlmIHlvdSB3YW50IHRvIGFkanVzdCB0aGUgaW5kZW50IHdoaWxlIGluIEluc2VydCBtb2RlLAorICAgICB5b3UgY2FuIHVzZSAiJmx0O0MtRCZndDsiICh0byBEZWNyZWFzZSB0aGUgaW5kZW50KQorb3IgIiZsdDtDLVQmZ3Q7IiAodG8gaW5jcmVhc2UgaXQpLiAgSW4gdGhlIGRvY3MgZm9yIFZpbSA2LjAsIHRoaXMgaXMgZGVzY3JpYmVkCitpbiB0aGUgdXNlcnMnIG1hbnVhbCwgOmhlbHAgMzAuNCAuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5kaXNhYmxpbmcgZGVmYXVsdCBmdHBsdWdpbnM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTMwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEzMDwvQT48QlI+CisKKyAgICAgRm9yIGFuIG92ZXJ2aWV3IG9mIGZ0cGx1Z2lucyAoZmlsZXR5cGUgcGx1Z2lucykgc2VlCisKKzpoZWxwIGZ0cGx1Z2lucworCitJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGFsbCBmdHBsdWdpbnMsIG9yIGRpc2FibGUgYSBwYXJ0aWN1bGFyIGRlZmF1bHQKK2Z0cGx1Z2luLCBzZWUKKworOmhlbHAgOmZpbGV0eXBlIDpoZWxwIGZ0cGx1Z2luLW92ZXJydWxlCisKK0lmIHlvdSBoYXZlIHlvdXIgb3duIGZ0cGx1Z2lucywgYW5kIHlvdSB3YW50IHRvIGRpc2FibGUgYWxsIHRoZSBkZWZhdWx0CitvbmVzLCB0aGVuIGRvIE5PVCBpbmNsdWRlIGEgY2hlY2sgZm9yIGI6ZGlkX2Z0cGx1Z2luIGluIHlvdXIgZnRwbHVnaW4gZmlsZXMsCithbmQgYWRkIHRoZSBsaW5lCisKKzphdXRvY21kIEJ1ZkVudGVyICogbGV0IGI6ZGlkX2Z0cGx1Z2luID0gMQorCit0byB5b3VyIFZJTVJDIGZpbGUsIEJFRk9SRSB0aGUgIjpmaWxldHlwZSBmdHBsdWdpbiBvbiIgbGluZS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlNjcm9sbCBhbHRlcm5hdGUgd2luZG93PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEzMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzE8L0E+PEJSPgorCitUaGlzIG1hcHBpbmcgYWxsb3cgeW91IHRvIHF1aWNrbHkgc2Nyb2xsIGluYWN0aXZlIHdpbmRvdyB3aGVuIGRpc3BsYXlpbmcKK3NldmVyYWwgd2luZG93cyBjb25jdXJyZW50bHkuCisKK25tYXAgJmx0O3NpbGVudCZndDsgJmx0O00tRG93biZndDsgOmNhbGwgU2Nyb2xsT3RoZXJXaW5kb3coImRvd24iKSZsdDtDUiZndDsKK25tYXAgJmx0O3NpbGVudCZndDsgJmx0O00tVXAmZ3Q7IDpjYWxsIFNjcm9sbE90aGVyV2luZG93KCJ1cCIpJmx0O0NSJmd0OworCitmdW4hIFNjcm9sbE90aGVyV2luZG93KGRpcikKKwlpZiBhOmRpciA9PSAiZG93biIKKwkJbGV0IG1vdmUgPSAiXCZsdDtDLUUmZ3Q7IgorCWVsc2VpZiBhOmRpciA9PSAidXAiCisJCWxldCBtb3ZlID0gIlwmbHQ7Qy1ZJmd0OyIKKwllbmRpZiBleGVjICJub3JtYWwgXCZsdDtDLVcmZ3Q7cCIgLiBtb3ZlIC4gIlwmbHQ7Qy1XJmd0O3AiCitlbmRmdW4KKworUFM6IE9yaWdpbmFsIGlkZWEgYW5kIGRpc2N1c3Npb24gb2YgdGhpcyB0aXAgYXBwZWFyZWQgb24gdmltQHZpbS5vcmcgbWFpbGluZworbGlzdCwgSSdtIGp1c3QgcHJldHRpZmllZCBpdCBhIGxpdHRsZS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPndpbmRvdyB6b29taW5nIGNvbnZlbmllbmNlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEzMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzI8L0E+PEJSPgorCitpIGZyZXF1ZW50bHkgaGF2ZSBtdWx0aXBsZSB3aW5kb3dzIG9wZW4gaW4gdmltIC0tIHRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyCitvZiBsaW5lcyBlYWNoIHdpbmRvdyBkaXNwbGF5cyAtLSBpIGFsbW9zdCBhbHdheXMgaGF2ZSBteSB3aW5kb3dzIGVpdGhlciBhbGwKK3RoZSBzYW1lIHNpemUgb3IgdGhlIGN1cnJlbnQgb25lIGFzIGJpZyBhcyBwb3NzaWJsZS4KKwordGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYW4gYmUgdG9nZ2xlZCBvbiBvciBvZmYgYnkgdHlwaW5nICZsdDtMZWFkZXImZ3Q7bWF4CisoaSBjYW4gZG8gdGhpcyBxdWl0ZSBxdWlja2x5KTsganVzdCBjaGFuZ2UgdGhlIG1hcHBpbmcgYXQgdGhlIGJvdHRvbSB0bworc29tZXRoaW5nIGVsc2UgaWYgeW91IHByZWZlci4KKwordGhpcyBjYXVzZXMgdGhlIGN1cnJlbnQgd2luZG93IHRvIGJlIGFzIGJpZyBhcyBwb3NzaWJsZSAobW92aW5nIGludG8gYW5vdGhlcgord2luZG93IGNhdXNlcyB0aGF0IG9uZSB0byBiZWNvbWUgYmlnKSBhbmQgYWxsIHRoZSBvdGhlcnMgZ2V0IHZlcnkgc21hbGwuCitpIGFjdHVhbGx5IHVzZSB0aGlzIEFMTCB0aGUgdGltZS4gIHR1cm5pbmcgaXQgb2ZmIChieSB0eXBpbmcgdGhlIGhvdGtleQorc2VxdWVuY2UgYWdhaW4pIHdpbGwgY2F1c2UgYWxsIHdpbmRvd3MgdG8gaGF2ZSB0aGUgc2FtZSBoZWlnaHQuCisKKyJ0b2dnbGVzIHdoZXRoZXIgb3Igbm90IHRoZSBjdXJyZW50IHdpbmRvdyBpcyBhdXRvbWF0aWNhbGx5IHpvb21lZAorZnVuY3Rpb24hIFRvZ2dsZU1heFdpbnMgKCkKKyAgaWYgZXhpc3RzICgnZzp3aW5kb3dNYXgnKQorICAgIGF1ISBtYXhDdXJyV2luIGV4ZSAibm9ybWFsIFwmbHQ7Yy13Jmd0Oz0iIHVubGV0IGc6d2luZG93TWF4CisgIGVsc2UKKyAgICBhdWdyb3VwIG1heEN1cnJXaW4gIiBhdSBCdWZFbnRlciAqIGV4ZSAibm9ybWFsCisgICAgXCZsdDtjLXcmZ3Q7X1wmbHQ7Yy13Jmd0O1wmbHQ7YmFyJmd0OyIgIiAiIG9ubHkgbWF4IGl0IHZlcnRpY2FsbHkKKyAgICBhdSEgQnVmRW50ZXIgKiBleGUgIm5vcm1hbCBcJmx0O2MtdyZndDtfIiBhdWdyb3VwIEVORCBkbyBtYXhDdXJyV2luCisgICAgQnVmRW50ZXIgbGV0IGc6d2luZG93TWF4PTEKKyAgZW5kaWYKK2VuZGZ1bmN0aW9uIG1hcCAmbHQ7TGVhZGVyJmd0O21heCA6Y2FsbCBUb2dnbGVNYXhXaW5zICgpJmx0O0NSJmd0OworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+V2luZG8gYW5kIEJ1ZmRvPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEzMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzM8L0E+PEJSPgorCitpIGxpa2UgYnVmZG8gYW5kIHdpbmRvIGJ1dCBpIGRvbid0IGxpa2UgdGhlIGZhY3QgdGhhdCB0aGUgY29tbWFuZHMgZW5kIGluCithIGRpZmZlcmVudCB3aW5kb3cvYnVmZmVyIHRoYW4gZnJvbSB3aGVyZSBpIGV4ZWN1dGVkIHRoZW0uICB0aGVzZSB2ZXJzaW9ucworKHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIpIHdpbGwgcmVzdG9yZSB0aGUgY3VycmVudCB3aW5kb3cgb3IgYnVmZmVyCit3aGVuIHRoZSBjb21tYW5kJ3MgZG9uZS4KKworZm9yIGV4YW1wbGUsIHRvIHR1cm4gb24gbGluZSBudW1iZXJzIGV2ZXJ5d2hlcmUsIGkgdXNlIDpXaW5kbyBzZXQgbnUgLS0KKzp3aW5kbyBzZXQgbnUgZG9lcyB0aGUgdHJpY2sgYWxzbyBidXQgbGVhdmVzIG1lIGluIGEgZGlmZmVyZW50IHdpbmRvdyB0aGFuCit3aGVyZSBpIHN0YXJ0ZWQuCisKKyIganVzdCBsaWtlIHdpbmRvIGJ1dCByZXN0b3JlcyB0aGUgY3VycmVudCB3aW5kb3cgd2hlbiBpdCdzIGRvbmUKK2Z1bmN0aW9uISBXaW5Ebyhjb21tYW5kKQorICBsZXQgY3Vycndpbj13aW5ucigpIGV4ZWN1dGUgJ3dpbmRvICcgLiBhOmNvbW1hbmQgZXhlY3V0ZSBjdXJyd2luIC4gJ3dpbmNtZCB3JworZW5kZnVuY3Rpb24gY29tISAtbmFyZ3M9KyAtY29tcGxldGU9Y29tbWFuZCBXaW5kbyBjYWxsIFdpbkRvKCZsdDtxLWFyZ3MmZ3Q7KQorCisiIGp1c3QgbGlrZSBidWZkbyBidXQgcmVzdG9yZXMgdGhlIGN1cnJlbnQgYnVmZmVyIHdoZW4gaXQncyBkb25lCitmdW5jdGlvbiEgQnVmRG8oY29tbWFuZCkKKyBsZXQgY3VyckJ1ZmY9YnVmbnIoIiUiKSBleGVjdXRlICdidWZkbyAnIC4gYTpjb21tYW5kIGV4ZWN1dGUgJ2J1ZmZlciAnCisgLiBjdXJyQnVmZgorZW5kZnVuY3Rpb24gY29tISAtbmFyZ3M9KyAtY29tcGxldGU9Y29tbWFuZCBCdWZkbyBjYWxsIEJ1ZkRvKCZsdDtxLWFyZ3MmZ3Q7KQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+VmlldyBTb3VyY2UgaW4gSUU2IHVzaW5nIFZJTTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTM0PC9BPjxCUj4KKworWW91IGNhbiBjaGFuZ2UgdGhlICJWaWV3IFNvdXJjZSIgZWRpdG9yIG9mIElFNiBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0bwordGhlIFdpbmRvd3MgUmVnaXN0cnkuIENoYW5nZSB0aGUgcGF0aCBpbiBjYXNlIHlvdSBpbnN0YWxsZWQgVklNIGluIGFub3RoZXIKK2xvY2F0aW9uLgorCitbSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxJbnRlcm5ldCBFeHBsb3JlclxWaWV3IFNvdXJjZQorRWRpdG9yXEVkaXRvciBOYW1lXSBAPSJDOlxcdmltXFx2aW02MFxcZ3ZpbS5leGUiCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5WaW0gYnVmZmVyIEZBUTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTM1PC9BPjxCUj4KKworVmltIHByb3ZpZGVzIHZhcmlvdXMgY29tbWFuZHMgYW5kIG9wdGlvbnMgdG8gc3VwcG9ydCBlZGl0aW5nIG11bHRpcGxlIGJ1ZmZlcnMuCitUaGlzIGRvY3VtZW50IGNvdmVycyBzb21lIG9mIHRoZSBxdWVzdGlvbnMgYXNrZWQgYWJvdXQgdXNpbmcgbXVsdGlwbGUgYnVmZmVycword2l0aCBWaW0uICBZb3UgY2FuIGdldCBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IFZpbSBidWZmZXIgc3VwcG9ydCB1c2luZworIjpoZWxwIHdpbmRvd3MudHh0IiBpbiBWaW0uICBZb3UgY2FuIGFsc28gdXNlIHRoZSBoZWxwIGtleXdvcmRzIG1lbnRpb25lZCBpbgordGhpcyBkb2N1bWVudCB0byByZWFkIG1vcmUgYWJvdXQgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgb3Igb3B0aW9uLiAgVG8gcmVhZCBtb3JlCithYm91dCBhIHBhcnRpY3VsYXIgY29tbWFuZCBvciBvcHRpb24gdXNlLCAiOmhlbHAgJmx0O2hlbHBrZXl3b3JkJmd0OyIgaW4gVmltLgorCisxLiBXaGF0IGlzIGEgVmltIGJ1ZmZlcj8KKyAgIEEgYnVmZmVyIGlzIGEgZmlsZSBsb2FkZWQgaW50byBtZW1vcnkgZm9yIGVkaXRpbmcuICBBbGwgb3BlbmVkIGZpbGVzCisgICBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgYnVmZmVyLiBUaGVyZSBhcmUgYWxzbyBidWZmZXJzIG5vdCBhc3NvY2lhdGVkIHdpdGgKKyAgIGFueSBmaWxlLgorCisgICBIZWxwIGtleXdvcmQocyk6IHdpbmRvd3MtaW50cm8KKworMi4gSG93IGRvIEkgaWRlbnRpZnkgYSBidWZmZXI/CisgICBWaW0gYnVmZmVycyBhcmUgaWRlbnRpZmllZCB1c2luZyBhIG5hbWUgYW5kIGEgbnVtYmVyLiAgVGhlIG5hbWUgb2YgdGhlCisgICBidWZmZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgYnVmZmVyLglUaGUgYnVmZmVyCisgICBudW1iZXIgaXMgYSB1bmlxdWUgc2VxdWVudGlhbCBudW1iZXIgYXNzaWduZWQgYnkgVmltLiAgVGhpcyBidWZmZXIgbnVtYmVyCisgICB3aWxsIG5vdCBjaGFuZ2UgaW4gYSBzaW5nbGUgVmltIHNlc3Npb24uCisKKyAgIEhlbHAga2V5d29yZChzKTogOmJ1ZmZlcnMKKworMy4gSG93IGRvIEkgY3JlYXRlIGEgYnVmZmVyPworICAgV2hlbiB5b3Ugb3BlbiBhIGZpbGUgdXNpbmcgYW55IG9mIHRoZSBWaW0gY29tbWFuZHMsIGEgYnVmZmVyIGlzCisgICBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuICBGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSB0aGUgIjplZGl0IGZpbGUiIGNvbW1hbmQKKyAgIHRvIGVkaXQgYSBmaWxlLCBhIG5ldyBidWZmZXIgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkLgorCis0LiBIb3cgZG8gSSBhZGQgYSBuZXcgYnVmZmVyIGZvciBhIGZpbGUgdG8gdGhlIGJ1ZmZlciBsaXN0IHdpdGhvdXQgb3BlbmluZworICAgdGhlIGZpbGU/ICBZb3UgY2FuIGFkZCBhIG5ldyBidWZmZXIgZm9yIGEgZmlsZSB3aXRob3V0IG9wZW5pbmcgaXQsIHVzaW5nCisgICB0aGUgIjpiYWRkIiBleCBjb21tYW5kLiAgRm9yIGV4YW1wbGUsCisKKyAgICAgICA6YmFkZCBmMS50eHQgOmJhZGQgZjIudHh0CisKKyAgIFRoZSBhYm92ZSBjb21tYW5kcyB3aWxsIGFkZCB0d28gbmV3IGJ1ZmZlcnMgZm9yIHRoZSBmaWxlcyBmMS50eHQgYW5kCisgICBmMi50eHQgdG8gdGhlIGJ1ZmZlciBsaXN0LgorCisgICBIZWxwIGtleXdvcmQocyk6IDpiYWRkCisKKzUuIEhvdyBkbyBJIGdldCBhIGxpc3Qgb2YgYWxsIHRoZSBleGlzdGluZyBidWZmZXJzPworICAgWW91IGNhbiBnZXQgYSBsaXN0IG9mIGFsbCB0aGUgZXhpc3RpbmcgYnVmZmVycyB1c2luZyB0aGUgIjpidWZmZXJzIiBvcgorICAgIjpscyIgb3IgIjpmaWxlcyIgZXggY29tbWFuZC4gIFRoaXMgbGlzdCBpcyBjYWxsZWQgdGhlICdidWZmZXIgbGlzdCcuCisKKyAgIEluIFZpbSA2LjAsIHRvIGRpc3BsYXkgYWxsIHRoZSBidWZmZXJzIGluY2x1ZGluZyB1bmxpc3RlZCBidWZmZXJzLCB1c2UgdGhlCisgICAiOmJ1ZmZlcnMhIiBvciAiOmxzISIgb3IgIjpmaWxlcyEiIGV4IGNvbW1hbmQuCisKKyAgIEhlbHAga2V5d29yZChzKTogOmJ1ZmZlcnMsIDpscywgOmZpbGVzCisKKzYuIEhvdyBkbyBJIGRlbGV0ZSBhIGJ1ZmZlcj8KKyAgIFlvdSBjYW4gZGVsZXRlIGEgYnVmZmVyIHVzaW5nIHRoZSAiOmJkZWxldGUiIGV4IGNvbW1hbmQuICBZb3UgY2FuIHVzZSBlaXRoZXIKKyAgIHRoZSBidWZmZXIgbmFtZSBvciB0aGUgYnVmZmVyIG51bWJlciB0byBzcGVjaWZ5IGEgYnVmZmVyLiAgRm9yIGV4YW1wbGUsCisKKyAgICAgICA6YmRlbGV0ZSBmMS50eHQgOmJkZWxldGUgNAorCisgICBUaGUgYWJvdmUgY29tbWFuZHMgd2lsbCBkZWxldGUgdGhlIGJ1ZmZlciBuYW1lZCAiZjEudHh0IiBhbmQgdGhlIGZvdXJ0aAorICAgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdC4gIFRoZSAiOmJkZWxldGUiIGNvbW1hbmQgd2lsbCByZW1vdmUgdGhlIGJ1ZmZlcgorICAgZnJvbSB0aGUgYnVmZmVyIGxpc3QuCisKKyAgIEluIFZpbSA2LjAsIHdoZW4gYSBidWZmZXIgaXMgZGVsZXRlZCwgdGhlIGJ1ZmZlciBiZWNvbWVzIGFuIHVubGlzdGVkLWJ1ZmZlcgorICAgYW5kIGlzIG5vIGxvbmdlciBpbmNsdWRlZCBpbiB0aGUgYnVmZmVyIGxpc3QuICBCdXQgdGhlIGJ1ZmZlciBuYW1lIGFuZCBvdGhlcgorICAgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIgaXMgc3RpbGwgcmVtZW1iZXJlZC4JVG8gY29tcGxldGVseQorICAgZGVsZXRlIHRoZSBidWZmZXIsIHVzZSB0aGUgIjpid2lwZW91dCIgZXggY29tbWFuZC4gIFRoaXMgY29tbWFuZCB3aWxsIHJlbW92ZQorICAgdGhlIGJ1ZmZlciBjb21wbGV0ZWx5IChpLmUuIHRoZSBidWZmZXIgd2lsbCBub3QgYmVjb21lIGEgdW5saXN0ZWQgYnVmZmVyKS4KKworICAgSGVscCBrZXl3b3JkKHMpOiA6YmRlbGV0ZSwgOmJ3aXBlb3V0CisKKzcuIEhvdyBkbyBJIGRlbGV0ZSBtdWx0aXBsZSBidWZmZXJzPworICAgWW91IGNhbiBkZWxldGUgbXVsdGlwbGUgYnVmZmVycyBpbiBzZXZlcmFsIHdheXM6CisKKyAgIDEuIFBhc3MgYSByYW5nZSBhcmd1bWVudCB0byB0aGUgIjpiZGVsZXRlIiBjb21tYW5kLiBGb3IgZXhhbXBsZSwKKworCSAgIDozLDViZGVsZXRlCisKKyAgICAgIFRoaXMgY29tbWFuZCB3aWxsIGRlbGV0ZSB0aGUgYnVmZmVycyAzLCA0IGFuZCA1LgorICAgMi4gUGFzcyBtdWx0aXBsZSBidWZmZXIgbmFtZXMgdG8gdGhlICI6YmRlbGV0ZSIgY29tbWFuZC4gIEZvciBleGFtcGxlLAorCisJICAgOmJkZWxldGUgYnVmMS50eHQgYnVmMi5jIGJ1ZjMuaAorCisgICAgICBUaGlzIGNvbW1hbmQgd2lsbCBkZWxldGUgYnVmMS50eHQsIGJ1ZjIuYyBhbmQgYnVmMy5oIGJ1ZmZlcnMuICBJbiB0aGlzCisgICAgICBleGFtcGxlLCBhZnRlciB0eXBpbmcgIjpiZGVsZXRlIGJ1ZiIsIHlvdSBjYW4gcHJlc3MgJmx0O0N0cmwtQSZndDsKKyAgICAgIHRvIGV4cGFuZCBhbGwgdGhlIGJ1ZmZlciBuYW1lcyBzdGFydGluZyB3aXRoICdidWYnLgorCisgICBIZWxwIGtleXdvcmQocyk6IDpiZGVsZXRlLCA6YndpcGVvdXQKKworOC4gSG93IGRvIEkgcmVtb3ZlIGEgYnVmZmVyIGZyb20gYSB3aW5kb3c/CisgICBZb3UgY2FuIHJlbW92ZSBhIGJ1ZmZlciBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cgaW4gc2V2ZXJhbCB3YXlzOgorCisgICAxLiBDbG9zZSB0aGUgd2luZG93IG9yIGVkaXQgYW5vdGhlciBidWZmZXIvZmlsZSBpbiB0aGF0IHdpbmRvdy4gIDIuIFVzZQorICAgdGhlICI6YnVubG9hZCIgZXggY29tbWFuZC4gVGhpcyBjb21tYW5kIHdpbGwgcmVtb3ZlIHRoZSBidWZmZXIKKyAgICAgIGZyb20gdGhlIHdpbmRvdyBhbmQgdW5sb2FkIHRoZSBidWZmZXIgY29udGVudHMgZnJvbSBtZW1vcnkuICBUaGUgYnVmZmVyCisgICAgICB3aWxsIG5vdCBiZSByZW1vdmVkIGZyb20gdGhlIGJ1ZmZlciBsaXN0LgorCisgICBIZWxwIGtleXdvcmQocyk6IDpidW5sb2FkCisKKzkuIEhvdyBkbyBJIGVkaXQgYW4gZXhpc3RpbmcgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBsaXN0PworICAgWW91IGNhbiBlZGl0IG9yIGp1bXAgdG8gYSBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0IGluIHNldmVyYWwgd2F5czoKKworICAgMS4gVXNlIHRoZSAiOmJ1ZmZlciIgZXggY29tbWFuZCBwYXNzaW5nIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGJ1ZmZlcgorICAgICAgb3IgdGhlIGJ1ZmZlciBudW1iZXIuICBOb3RlIHRoYXQgYnVmZmVyIG5hbWUgY29tcGxldGlvbiBjYW4gYmUgdXNlZAorICAgICAgaGVyZSBieSBwcmVzc2luZyB0aGUgJmx0O1RhYiZndDsga2V5LgorICAgMi4gWW91IGNhbiBlbnRlciB0aGUgYnVmZmVyIG51bWJlciB5b3Ugd2FudCB0byBqdW1wL2VkaXQgYW5kIHByZXNzIHRoZQorICAgICAgQ3RybC1eIGtleS4KKyAgIDMuIFVzZSB0aGUgIjpzYnVmZmVyIiBleCBjb21tYW5kIHBhc3NpbmcgdGhlIG5hbWUgb2YgdGhlIGJ1ZmZlciBvciB0aGUKKyAgICAgIGJ1ZmZlciBudW1iZXIuICBWaW0gd2lsbCBzcGxpdCBvcGVuIGEgbmV3IHdpbmRvdyBhbmQgb3BlbiB0aGUgc3BlY2lmaWVkCisgICAgICBidWZmZXIgaW4gdGhhdCB3aW5kb3cuCisgICA0LiBZb3UgY2FuIGVudGVyIHRoZSBidWZmZXIgbnVtYmVyIHlvdSB3YW50IHRvIGp1bXAvZWRpdCBhbmQgcHJlc3MgdGhlCisgICAgICBDdHJsLVcgXiBvciBDdHJsLVcgQ3RybC1eIGtleXMuICBUaGlzIHdpbGwgb3BlbiB0aGUgc3BlY2lmaWVkIGJ1ZmZlcgorICAgICAgaW4gYSBuZXcgd2luZG93LgorCisgICBIZWxwIGtleXdvcmQocyk6IDpidWZmZXIsIDpzYnVmZmVyLCBDVFJMLVdfXiwgQ1RSTC1eCisKKzEwLiBIb3cgZG8gSSBicm93c2UgdGhyb3VnaCBhbGwgdGhlIGF2YWlsYWJsZSBidWZmZXJzPworICAgIFlvdSBjYW4gYnJvd3NlIHRocm91Z2ggdGhlIGJ1ZmZlcnMgaW4gdGhlIGJ1ZmZlciBsaXN0IGluIHNldmVyYWwgd2F5czoKKworICAgIDEuIFRvIGp1bXAgdG8gdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QsIHVzZSB0aGUgIjpiZmlyc3QiIG9yCisgICAgICAgIjpicmV3aW5kIiBleCBjb21tYW5kLgorICAgIDIuIFRvIGp1bXAgdG8gdGhlIGZpcnN0IGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QgaW4gYSBuZXcgd2luZG93LCB1c2UKKyAgICAgICB0aGUgIjpzYmZpcnN0IiBvciAiOnNicmV3aW5kIiBleCBjb21tYW5kLgorICAgIDMuIFRvIGVkaXQgdGhlIG5leHQgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdCwgdXNlIHRoZSAiOmJuZXh0IiBleAorICAgICAgIGNvbW1hbmQuCisgICAgNC4gVG8gb3BlbiB0aGUgbmV4dCBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0IGluIGEgbmV3IHdpbmRvdywgdXNlIHRoZQorICAgICAgICI6c2JuZXh0IiBleCBjb21tYW5kLgorICAgIDUuIFRvIGVkaXQgdGhlIHByZXZpb3VzIGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QsIHVzZSB0aGUgIjpicHJldmlvdXMiCisgICAgICAgb3IgIjpiTmV4dCIgZXggY29tbWFuZC4KKyAgICA2LiBUbyBvcGVuIHRoZSBwcmV2aW91cyBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0IGluIGEgbmV3IHdpbmRvdywgdXNlCisgICAgICAgdGhlICI6c2JwcmV2aW91cyIgb3IgIjpzYk5leHQiIGV4IGNvbW1hbmQuCisgICAgNy4gVG8gb3BlbiB0aGUgbGFzdCBidWZmZXIgaW4gdGhlIGJ1ZmZlciBsaXN0LCB1c2UgdGhlICI6Ymxhc3QiIGV4CisgICAgICAgY29tbWFuZC4KKyAgICA4LiBUbyBvcGVuIHRoZSBsYXN0IGJ1ZmZlciBpbiB0aGUgYnVmZmVyIGxpc3QgaW4gYSBuZXcgd2luZG93LCB1c2UgdGhlCisgICAgICAgIjpzYmxhc3QiIGV4IGNvbW1hbmQuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IDpiZmlyc3QsIDpicmV3aW5kLCA6c2JmaXJzdCwgOnNicmV3aW5kLCA6Ym5leHQsCisJCSAgICAgOnNibmV4dCwgOmJwcmV2aW91cywgOmJOZXh0LCA6c2JwcmV2aW91cywgOnNiTmV4dCwKKwkJICAgICA6Ymxhc3QsIDpzYmxhc3QKKworMTEuIEhvdyBkbyBJIG9wZW4gYWxsIHRoZSBidWZmZXJzIGluIHRoZSBidWZmZXIgbGlzdD8KKyAgICBZb3UgY2FuIG9wZW4gYWxsIHRoZSBidWZmZXJzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlciBsaXN0IHVzaW5nIHRoZSAiOmJhbGwiCisgICAgb3IgIjpzYmFsbCIgZXggY29tbWFuZHMuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IDpiYWxsLCA6c2JhbGwKKworMTIuIEhvdyBkbyBJIG9wZW4gYWxsIHRoZSBsb2FkZWQgYnVmZmVycz8KKyAgICBZb3UgY2FuIG9wZW4gYWxsIHRoZSBsb2FkZWQgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QgdXNpbmcgdGhlICI6dW5oaWRlIgorICAgIG9yICI6c3VuaGlkZSIgZXggY29tbWFuZHMuCUVhY2ggYnVmZmVyIHdpbGwgYmUgbG9hZGVkIGluIGEgc2VwYXJhdGUKKyAgICBuZXcgd2luZG93LgorCisgICAgSGVscCBrZXl3b3JkKHMpOiA6dW5oaWRlLCA6c3VuaGlkZQorCisxMy4gSG93IGRvIEkgb3BlbiB0aGUgbmV4dCBtb2RpZmllZCBidWZmZXI/CisgICAgWW91IGNhbiBvcGVuIHRoZSBuZXh0IG9yIGEgc3BlY2lmaWMgbW9kaWZpZWQgYnVmZmVyIHVzaW5nIHRoZSAiOmJtb2RpZmllZCIKKyAgICBleCBjb21tYW5kLiAgWW91IGNhbiBvcGVuIHRoZSBuZXh0IG9yIGEgc3BlY2lmaWMgbW9kaWZpZWQgYnVmZmVyIGluIGEKKyAgICBuZXcgd2luZG93IHVzaW5nIHRoZSAiOnNibW9kaWZpZWQiIGV4IGNvbW1hbmQuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IDpibW9kaWZpZWQsIDpzYm1vZGlmaWVkCisKKzE0LiBJIGFtIHVzaW5nIHRoZSBHVUkgdmVyc2lvbiBvZiBWaW0gKGd2aW0pLCBpcyB0aGVyZSBhIHNpbXBsZXIgd2F5IGZvcgorICAgIHVzaW5nIHRoZSBidWZmZXJzIGluc3RlYWQgb2YgdGhlIGV4IGNvbW1hbmRzPyAgWWVzLiAgSW4gdGhlIEdVSSB2ZXJzaW9uIG9mCisgICAgVmltLCB5b3UgY2FuIHVzZSB0aGUgJ0J1ZmZlcnMnIG1lbnUsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIHVzZSBvZiBidWZmZXJzLgorICAgIEFsbCB0aGUgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QgYXJlIGxpc3RlZCBpbiB0aGlzIG1lbnUuICBZb3UgY2FuCisgICAgc2VsZWN0IGEgYnVmZmVyIG5hbWUgZnJvbSB0aGlzIG1lbnUgdG8gZWRpdCB0aGUgYnVmZmVyLiAgWW91IGNhbiBhbHNvCisgICAgZGVsZXRlIGEgYnVmZmVyIG9yIGJyb3dzZSB0aGUgYnVmZmVyIGxpc3QuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IGJ1ZmZlcnMtbWVudQorCisxNS4gSXMgdGhlcmUgYSBWaW0gc2NyaXB0IHRoYXQgc2ltcGxpZmllcyB1c2luZyBidWZmZXJzIHdpdGggVmltPworICAgIFllcy4gIFlvdSBjYW4gdXNlIHRoZSBidWZleHBsb3Jlci52aW0gc2NyaXB0IHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mCisgICAgdXNpbmcgYnVmZmVycy4gIFlvdSBjYW4gZG93bmxvYWQgdGhlIGJ1ZmV4cGxvcmVyIHNjcmlwdCBmcm9tOgorCisJPEEKKwlIUkVGPSJodHRwOi8vbGFuemFyb3R0YS50cmlwb2QuY29tL3ZpbS5odG1sIj5odHRwOi8vbGFuemFyb3R0YS50cmlwb2QuY29tL3ZpbS5odG1sPC9BPjxCUj4KKworMTYuIElzIGl0IHBvc3NpYmxlIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlIGJ1ZmZlciBsaXN0IGFjcm9zcyBWaW0gc2Vzc2lvbnM/CisgICAgWWVzLiAgVG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgYnVmZmVyIGxpc3QgYWNyb3NzIFZpbSBzZXNzaW9uLCBpbmNsdWRlIHRoZQorICAgICclJyBmbGFnIGluIHRoZSAndmltaW5mbycgb3B0aW9uLiAgTm90ZSB0aGF0IGlmIFZpbSBpcyBpbnZva2VkIHdpdGggYQorICAgIGZpbGVuYW1lIGFyZ3VtZW50LCB0aGVuIHRoZSBidWZmZXIgbGlzdCB3aWxsIG5vdCBiZSByZXN0b3JlZCBmcm9tIHRoZQorICAgIGxhc3Qgc2Vzc2lvbi4gIFRvIHVzZSBidWZmZXIgbGlzdHMgYWNyb3NzIHNlc3Npb25zLCBpbnZva2UgVmltIHdpdGhvdXQKKyAgICBwYXNzaW5nIGZpbGVuYW1lIGFyZ3VtZW50cy4KKworICAgIEhlbHAga2V5d29yZChzKTogJ3ZpbWluZm8nLCB2aW1pbmZvCisKKzE3LiBIb3cgZG8gSSByZW1vdmUgYWxsIHRoZSBlbnRyaWVzIGZyb20gdGhlIGJ1ZmZlciBsaXN0PworICAgIFlvdSBjYW4gcmVtb3ZlIGFsbCB0aGUgZW50cmllcyBpbiB0aGUgYnVmZmVyIGxpc3QgYnkgc3RhcnRpbmcgVmltIHdpdGgKKyAgICBhIGZpbGUgYXJndW1lbnQuICBZb3UgY2FuIGFsc28gbWFudWFsbHkgcmVtb3ZlIGFsbCB0aGUgYnVmZmVycyB1c2luZyB0aGUKKyAgICAiOmJkZWxldGUiIGV4IGNvbW1hbmQuCisKKzE4LiBXaGF0IGlzIGEgaGlkZGVuIGJ1ZmZlcj8KKyAgICBBIGhpZGRlbiBidWZmZXIgaXMgYSBidWZmZXIgd2l0aCBzb21lIHVuc2F2ZWQgbW9kaWZpY2F0aW9ucyBhbmQgaXMgbm90CisgICAgZGlzcGxheWVkIGluIGEgd2luZG93LiAgSGlkZGVuIGJ1ZmZlcnMgYXJlIHVzZWZ1bCwgaWYgeW91IHdhbnQgdG8gZWRpdAorICAgIG11bHRpcGxlIGJ1ZmZlcnMgd2l0aG91dCBzYXZpbmcgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSB0byBhIGJ1ZmZlciB3aGlsZQorICAgIGxvYWRpbmcgb3RoZXIgYnVmZmVycy4KKworICAgIEhlbHAga2V5d29yZChzKTogOmJ1ZmZlci0hLCAnaGlkZGVuJywgaGlkZGVuLWJ1ZmZlciwgYnVmZmVyLWhpZGRlbgorCisxOS4gSG93IGRvIEkgbG9hZCBidWZmZXJzIGluIGEgd2luZG93LCB3aGljaCBjdXJyZW50bHkgaGFzIGEgYnVmZmVyIHdpdGgKKyAgICB1bnNhdmVkIG1vZGlmaWNhdGlvbnM/ICBCeSBzZXR0aW5nIHRoZSBvcHRpb24gJ2hpZGRlbicsIHlvdSBjYW4gbG9hZAorICAgIGJ1ZmZlcnMgaW4gYSB3aW5kb3cgdGhhdCBjdXJyZW50bHkgaGFzIGEgbW9kaWZpZWQgYnVmZmVyLiAgVmltIHdpbGwKKyAgICByZW1lbWJlciB5b3VyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGJ1ZmZlci4JV2hlbiB5b3UgcXVpdCBWaW0sIHlvdSB3aWxsIGJlCisgICAgYXNrZWQgdG8gc2F2ZSB0aGUgbW9kaWZpZWQgYnVmZmVycy4gIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQsIGlmIHlvdQorICAgIGhhdmUgdGhlICdoaWRkZW4nIG9wdGlvbiBzZXQsIGFuZCB5b3UgcXVpdCBWaW0gZm9yY2libHksIGZvciBleGFtcGxlIHVzaW5nCisgICAgIjpxdWl0ISIsIHRoZW4geW91IHdpbGwgbG9zZSBhbGwgeW91ciBtb2RpZmljYXRpb25zIHRvIHRoZSBoaWRkZW4gYnVmZmVycy4KKworICAgIEhlbHAga2V5d29yZChzKTogJ2hpZGRlbicKKworMjAuIElzIGl0IHBvc3NpYmxlIHRvIHVubG9hZCBvciBkZWxldGUgYSBidWZmZXIgd2hlbiBpdCBiZWNvbWVzIGhpZGRlbj8KKyAgICBUaGUgZm9sbG93aW5nIHdvcmtzIG9ubHkgaW4gVmltIDYuMCBhbmQgYWJvdmUuIEJ5IHNldHRpbmcgdGhlICdidWZoaWRkZW4nCisgICAgb3B0aW9uIHRvIGVpdGhlciAnaGlkZScgb3IgJ3VubG9hZCcgb3IgJ2RlbGV0ZScsIHlvdSBjYW4gY29udHJvbCB3aGF0CisgICAgaGFwcGVucyB0byBhIGJ1ZmZlciB3aGVuIGl0IGJlY29tZXMgaGlkZGVuLiAgV2hlbiAnYnVmaGlkZGVuJyBpcyBzZXQgdG8KKyAgICAnZGVsZXRlJywgdGhlIGJ1ZmZlciBpcyBkZWxldGVkIHdoZW4gaXQgYmVjb21lcyBoaWRkZW4uIFdoZW4gJ2J1ZmhpZGRlbicKKyAgICBpcyBzZXQgdG8gJ3VubG9hZCcsIHRoZSBidWZmZXIgaXMgdW5sb2FkZWQgd2hlbiBpdCBiZWNvbWVzIGhpZGRlbi4KKyAgICBXaGVuICdidWZoaWRkZW4nIGlzIHNldCB0byAnaGlkZScsIHRoZSBidWZmZXIgaXMgaGlkZGVuLgorCisgICAgSGVscCBrZXl3b3JkKHMpOiAnYnVmaGlkZGVuJworCisyMS4gSG93IGRvIEkgZXhlY3V0ZSBhIGNvbW1hbmQgb24gYWxsIHRoZSBidWZmZXJzIGluIHRoZSBidWZmZXIgbGlzdD8KKyAgICBJbiBWaW0gNi4wLCB5b3UgY2FuIHVzZSB0aGUgIjpidWZkbyIgZXggY29tbWFuZCB0byBleGVjdXRlIGFuIGV4IGNvbW1hbmQKKyAgICBvbiBhbGwgdGhlIGJ1ZmZlcnMgaW4gdGhlIGJ1ZmZlciBsaXN0LgorCisgICAgSGVscCBrZXl3b3JkKHMpOiA6YnVmZG8KKworMjIuIFdoZW4gSSBvcGVuIGFuIGV4aXN0aW5nIGJ1ZmZlciBmcm9tIHRoZSBidWZmZXIgbGlzdCwgaWYgdGhlIGJ1ZmZlciBpcworICAgIGFscmVhZHkgZGlzcGxheWVkIGluIG9uZSBvZiB0aGUgZXhpc3Rpbmcgd2luZG93cywgSSB3YW50IFZpbSB0byBqdW1wIHRvCisgICAgdGhhdCB3aW5kb3cgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyB3aW5kb3cgZm9yIHRoaXMgYnVmZmVyLiAgSG93IGRvIEkKKyAgICBkbyB0aGlzPyAgV2hlbiBvcGVuaW5nIGEgYnVmZmVyIHVzaW5nIG9uZSBvZiB0aGUgc3BsaXQgb3BlbiBidWZmZXIgY29tbWFuZHMKKyAgICAoOnNidWZmZXIsIDpzYm5leHQpLCBWaW0gd2lsbCBvcGVuIHRoZSBzcGVjaWZpZWQgYnVmZmVyIGluIGEgbmV3IHdpbmRvdy4KKyAgICBJZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgb3BlbmVkIGluIG9uZSBvZiB0aGUgZXhpc3Rpbmcgd2luZG93cywgdGhlbgorICAgIHlvdSB3aWxsIGhhdmUgdHdvIHdpbmRvd3MgY29udGFpbmluZyB0aGUgc2FtZSBidWZmZXIuICBZb3UgY2FuIGNoYW5nZQorICAgIHRoaXMgYmVoYXZpb3IgYnkgc2V0dGluZyB0aGUgJ3N3aXRjaGJ1Zicgb3B0aW9uIHRvICd1c2VvcGVuJy4gIFdpdGggdGhpcworICAgIHNldHRpbmcsIGlmIGEgYnVmZmVyIGlzIGFscmVhZHkgb3BlbmVkIGluIG9uZSBvZiB0aGUgd2luZG93cywgVmltIHdpbGwKKyAgICBqdW1wIHRvIHRoYXQgd2luZG93LCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IHdpbmRvdy4KKworICAgIEhlbHAga2V5d29yZChzKTogJ3N3aXRjaGJ1ZicKKworMjMuIFdoYXQgaW5mb3JtYXRpb24gaXMgc3RvcmVkIGFzIHBhcnQgb2YgYSBidWZmZXI/CisgICAgRXZlcnkgYnVmZmVyIGluIHRoZSBidWZmZXIgbGlzdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGFzdAorICAgIGN1cnNvciBwb3NpdGlvbiwgbWFya3MsIGp1bXAgbGlzdCwgZXRjLgorCisyNC4gV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRlbGV0aW5nIGEgYnVmZmVyIGFuZCB1bmxvYWRpbmcgYQorICAgIGJ1ZmZlcj8gIFdoZW4gYSBidWZmZXIgaXMgdW5sb2FkZWQsIGl0IGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIGJ1ZmZlciBsaXN0LgorICAgIE9ubHkgdGhlIGZpbGUgY29udGVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIgYXJlIHJlbW92ZWQgZnJvbSBtZW1vcnkuCisgICAgV2hlbiBhIGJ1ZmZlciBpcyBkZWxldGVkLCBpdCBpcyB1bmxvYWRlZCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXIgbGlzdC4KKyAgICBJbiBWaW0gNiwgYSBkZWxldGVkIGJ1ZmZlciBiZWNvbWVzIGFuICd1bmxpc3RlZCcgYnVmZmVyLgorCisgICAgSGVscCBrZXl3b3JkKHMpOiA6YnVubG9hZCwgOmJkZWxldGUsIDpid2lwZW91dCwgdW5saXN0ZWQtYnVmZmVyCisKKzI1LiBJcyBpdCBwb3NzaWJsZSB0byBjb25maWd1cmUgVmltLCBieSBzZXR0aW5nIHNvbWUgb3B0aW9uLCB0byByZS11c2UgdGhlCisgICAgbnVtYmVyIG9mIGEgZGVsZXRlZCBidWZmZXIgZm9yIGEgbmV3IGJ1ZmZlcj8gIE5vLiAgVmltIHdpbGwgbm90IHJlLXVzZSB0aGUKKyAgICBidWZmZXIgbnVtYmVyIG9mIGEgZGVsZXRlZCBidWZmZXIgZm9yIGEgbmV3IGJ1ZmZlci4gIFZpbSB3aWxsIGFsd2F5cyBhc3NpZ24KKyAgICB0aGUgbmV4dCBzZXF1ZW50aWFsIG51bWJlciBmb3IgYSBuZXcgYnVmZmVyLiAgVGhlIGJ1ZmZlciBudW1iZXIgYXNzaWdubWVudAorICAgIGlzIGltcGxlbWVudGVkIHRoaXMgd2F5LCBzbyB0aGF0IHlvdSBjYW4gYWx3YXlzIGp1bXAgdG8gYSBidWZmZXIgdXNpbmcgdGhlCisgICAgc2FtZSBidWZmZXIgbnVtYmVyLiAgT25lIG1ldGhvZCB0byBhY2hpZXZlIGJ1ZmZlciBudW1iZXIgcmVvcmRlcmluZyBpcyB0bworICAgIHJlc3RhcnQgVmltLiAgSWYgeW91IHJlc3RhcnQgVmltLCBpdCB3aWxsIHJlLWFzc2lnbiBudW1iZXJzIHNlcXVlbnRpYWxseQorICAgIHRvIGFsbCB0aGUgYnVmZmVycyBpbiB0aGUgYnVmZmVyIGxpc3QgKGFzc3VtaW5nIHlvdSBoYXZlIHByb3Blcmx5IHNldAorICAgICd2aW1pbmZvJyB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSBidWZmZXIgbGlzdCBhY3Jvc3MgdmltIHNlc3Npb25zKS4KKworICAgIEhlbHAga2V5d29yZChzKTogOmJ1ZmZlcnMKKworMjYuIFdoYXQgb3B0aW9ucyBkbyBJIG5lZWQgdG8gc2V0IGZvciBhIHNjcmF0Y2ggKHRlbXBvcmFyeSkgYnVmZmVyPworICAgIFRoZSBmb2xsb3dpbmcgd29ya3Mgb25seSBpbiBWaW0gNi4wIGFuZCBhYm92ZS4gIFlvdSBjYW4gc2V0IHRoZSB0aGUKKyAgICBmb2xsb3dpbmcgb3B0aW9ucyB0byBjcmVhdGUgYSBzY3JhdGNoICh0ZW1wb3JhcnkpIGJ1ZmZlcjoKKworCTpzZXQgYnVmdHlwZT1ub2ZpbGUgOnNldCBidWZoaWRkZW49aGlkZSA6c2V0bG9jYWwgbm9zd2FwZmlsZQorCisgICAgVGhpcyB3aWxsIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSwgd2hpY2gKKyAgICBkb2VzIG5vdCBoYXZlIGEgYXNzb2NpYXRlZCBzd2FwIGZpbGUgYW5kIHdpbGwgYmUgaGlkZGVuIHdoZW4gcmVtb3ZlZAorICAgIGZyb20gYSB3aW5kb3cuCisKKyAgICBIZWxwIGtleXdvcmQocyk6IHNwZWNpYWwtYnVmZmVycywgJ2J1ZnR5cGUnCisKKzI3LiBIb3cgZG8gSSBwcmV2ZW50IGEgYnVmZmVyIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIGJ1ZmZlciBsaXN0PworICAgIFRoZSBmb2xsb3dpbmcgd29ya3Mgb25seSBpbiBWaW0gNi4wIGFuZCBhYm92ZS4gWW91IGNhbiBwcmV2ZW50IGEgYnVmZmVyCisgICAgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgYnVmZmVyIGxpc3QgYnkgcmVzZXR0aW5nIHRoZSAnYnVmbGlzdGVkJyBvcHRpb24uCisKKwk6c2V0IG5vYnVmbGlzdGVkCisKKyAgICBIZWxwIGtleXdvcmQocyk6ICdidWZsaXN0ZWQnCisKKzI4LiBIb3cgZG8gSSBkZXRlcm1pbmUgd2hldGhlciBhIGJ1ZmZlciBpcyBtb2RpZmllZCBvciBub3Q/CisgICAgVGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBmaW5kIG91dCB3aGV0aGVyIGEgYnVmZmVyIGlzIG1vZGlmaWVkIG9yIG5vdC4KKyAgICBUaGUgc2ltcGxlc3Qgd2F5IGlzIHRvIGxvb2sgYXQgdGhlIHN0YXR1cyBsaW5lIG9yIHRoZSB0aXRsZSBiYXIuICBJZiB0aGUKKyAgICBkaXNwbGF5ZWQgc3RyaW5nIGNvbnRhaW5zIGEgJysnIGNoYXJhY3RlciwgdGhlbiB0aGUgYnVmZmVyIGlzIG1vZGlmaWVkLgorICAgIEFub3RoZXIgd2F5IGlzIHRvIGNoZWNrIHdoZXRoZXIgdGhlICdtb2RpZmllZCcgb3B0aW9uIGlzIHNldCBvciBub3QuCisgICAgSWYgJ21vZGlmaWVkJyBpcyBzZXQsIHRoZW4gdGhlIGJ1ZmZlciBpcyBtb2RpZmllZC4JVG8gY2hlY2sgdGhlIHZhbHVlCisgICAgb2YgbW9kaWZpZWQsIHVzZQorCisJOnNldCBtb2RpZmllZD8KKworICAgIFlvdSBjYW4gYWxzbyBleHBsaWNpdGx5IHNldCB0aGUgJ21vZGlmaWVkJyBvcHRpb24gdG8gbWFyayB0aGUgYnVmZmVyIGFzCisgICAgbW9kaWZpZWQgbGlrZSB0aGlzOgorCisJOnNldCBtb2RpZmllZAorCisgICAgSGVscCBrZXl3b3JkKHMpOiAnbW9kaWZpZWQnCisKKzI5LiBIb3cgY2FuIEkgcHJldmVudCBtb2RpZmljYXRpb25zIHRvIGEgYnVmZmVyPworICAgIFRoZSBmb2xsb3dpbmcgd29ya3Mgb25seSBpbiBWaW0gNi4wIGFuZCBhYm92ZS4gWW91IGNhbiBwcmV2ZW50IGFueQorICAgIG1vZGlmaWNhdGlvbiB0byBhIGJ1ZmZlciBieSByZS1zZXR0aW5nIHRoZSAnbW9kaWZpYWJsZScgb3B0aW9uLiAgVG8gcmVzZXQKKyAgICB0aGlzIG9wdGlvbiwgdXNlCisKKwk6c2V0IG5vbW9kaWZpYWJsZQorCisgICAgVG8gYWdhaW4gYWxsb3cgbW9kaWZpY2F0aW9ucyB0byB0aGUgYnVmZmVyLCB1c2U6CisKKwk6c2V0IG1vZGlmaWFibGUKKworICAgIEhlbHAga2V5d29yZChzKTogJ21vZGlmaWFibGUnCisKKzMwLiBIb3cgZG8gSSBzZXQgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgY3VycmVudCBidWZmZXI/CisgICAgVGhlIGZvbGxvd2luZyB3b3JrcyBvbmx5IGluIFZpbSA2LjAgYW5kIGFib3ZlLiAgWW91IGNhbiBzZXQgVmltIG9wdGlvbnMKKyAgICB3aGljaCBhcmUgc3BlY2lmaWMgdG8gYSBidWZmZXIgdXNpbmcgdGhlICJzZXRsb2NhbCIgY29tbWFuZC4gIEZvciBleGFtcGxlLAorCisJOnNldGxvY2FsIHRleHR3aWR0aD03MAorCisgICAgVGhpcyB3aWxsIHNldCB0aGUgJ3RleHR3aWR0aCcgb3B0aW9uIHRvIDcwIG9ubHkgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4KKyAgICBBbGwgb3RoZXIgYnVmZmVycyB3aWxsIGhhdmUgdGhlIGRlZmF1bHQgb3IgdGhlIHByZXZpb3VzICd0ZXh0d2lkdGgnIHZhbHVlLgorCisgICAgSGVscCBrZXl3b3JkKHMpOiAnc2V0bG9jYWwnLCBsb2NhbC1vcHRpb25zCisKKzMxLiBIb3cgZG8gSSBkZWZpbmUgbWFwcGluZ3Mgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyPworICAgIFRoZSBmb2xsb3dpbmcgd29ya3Mgb25seSBpbiBWaW0gNi4wIGFuZCBhYm92ZS4gIFlvdSBjYW4gZGVmaW5lIG1hcHBpbmdzCisgICAgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIGJ5IHVzaW5nIHRoZSBrZXl3b3JkICImbHQ7YnVmZmVyJmd0OyIKKyAgICBpbiB0aGUgbWFwIGNvbW1hbmQuICBGb3IgZXhhbXBsZSwKKworCTptYXAgJmx0O2J1ZmZlciZndDsgICx3ICAvWy4sO10mbHQ7Q1ImZ3Q7CisKKyAgICBIZWxwIGtleXdvcmQocyk6IDptYXAtbG9jYWwKKworMzIuIEhvdyBkbyBJIGRlZmluZSBhYmJyZXZpYXRpb25zIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IGJ1ZmZlcj8KKyAgICBUaGUgZm9sbG93aW5nIHdvcmtzIG9ubHkgaW4gVmltIDYuMCBhbmQgYWJvdmUuICBZb3UgY2FuIGRlZmluZQorICAgIGFiYnJldmlhdGlvbnMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyIGJ5IHVzaW5nIHRoZSBrZXl3b3JkCisgICAgIiZsdDtidWZmZXImZ3Q7IiBpbiB0aGUgOmFiYnJldmlhdGUgY29tbWFuZC4gIEZvciBleGFtcGxlLAorCisJOmFiYiAmbHQ7YnVmZmVyJmd0OyBGRglmb3IgKGkgPSAwOyBpICZsdDsgOyArK2kpCisKKyAgICBIZWxwIGtleXdvcmQocyk6IDphYmJyZXZpYXRlLWxvY2FsCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlJlbWFwcGluZworQWx0LCBDdHJsIGFuZCBDYXBzIGluIFdpbjJrPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEzNiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzY8L0E+PEJSPgorCitTaW5jZSBJIGluc3RhbGxlZCBXaW4ySyBvbiBteSBsYXB0b3AsIEkgaGFkIGJlZW4gdW5hYmxlIHRvIGxvY2F0ZSBhIHV0aWxpdGllCit0aGF0IHdvdWxkIHNpbXBseSBlbmFibGUgbWUgdG8gcmVtYXAgbXkgQ3J0bCBBbHQgYW5kIENhcHMgdGhlIHdheSBJIHRoaW5rIHRoZXkKK3Nob3VsZCBiZSBhbmQgdGhlIHdheSB0aGV5IHdlcmUgdW50aWwgTVMga2lsbCBhbGwgY29tcGV0aXRpb24gaW4gY29tcHV0aW5nLAordGhhdCBpcyBDcnRsIG9uIHRoZSBsZWZ0IG9mIHRoZSBsZXR0ZXIgQSwgQWx0IHRvIHRoZSBsZWZ0IGJvdHRvbSBvZiB0aGUKK2xldHRlciBaIGFuZCBDYXBzIGFwcHJveGltYXRlbHkgdW50aWwgdGhlIEMuCisKK0FmdGVyIHNvbWUgcmVzZWFyY2gsIEkgY2FtZSBhY3Jvc3MgYSB0aXAgcG9zdGVkIGhlcmUgYnkganVhbm9AbWluZHNwcmluZy5jb20uIEkKK3RyaWVkIHRvIG1ha2Ugc2Vuc2Ugb2YgaXQgYW5kIHRoZW4gZG93bmxvYWRlZCB0aGUgTVMgc2NhbiBrZXlzIG1hcCBhdCB0aGUKK1VSTCBoZSBtZW50aW9ubmVkLgorCitFeHRyYXBvbGF0aW5nIGhpcyB0aXAsIEkgd3JvdGUgdGhpcyBBU0NJIGZpbGUgdGhhdCBJIG5hbWVkIGtleXMyMDAwLnJlZyA6CisKK1JlZ2VkaXQ0IFtIS2V5X0xvY2FsX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0XENvbnRyb2xcS2V5Ym9hcmQKK0xheW91dF0gIlNjYW5jb2RlCitNYXAiPWhleDowMCwwMCwwMCwwMCwwMCwwMCwwMCwwMCwwNCwwMCwwMCwwMCwzQSwwMCwzOCwwMCwzOCwwMCwxRCwwMCwxRCwwMCwzQSwwMCwwMCwwMCwwMAorCitPbmNlIHlvdSBoYXZlIHNhdmVkIHRoaXMgZmlsZSwgbGVmdCBjbGljayBvbiBpdCBmcm9tIEV4cGxvcmVyIGFuZCBhbnN3ZXIKK3llcyB0byB0aGUgcHJvbXB0ICJkbyB5b3Ugd2FudCB0byBlbnRlciB0aGlzIGludG8gdGhlIHJlZ2lzdHJ5Ii4KKworUmVib290IGFuZCB5b3UgYXJlIGRvbmUuCisKK0EgZmV3IGV4cGxhbmF0aW9ucyA6MDQgc3RhbmRzIGZvciAzIHJlbWFwcGluZ3MgKENhcHMgbG9jayB0byBDb250cm9sLCBDb250cm9sCit0byBBbHQgYW5kIEFsdCB0byBDYXBzIExvY2spIHBsdXMgdGhlIGNsb3Npbmcgb25lIHdoaWNoIGlzIGFsd2F5cyByZXF1aXJlZAorKDEgcmVtYXBwaW5nIHdvdWxkIHJlcXVpcmUgMDIsIDIgd291bGQgcmVxdWlyZSAwMywgYW5kIHNvIG9uKS4gM0EsMDAsMzgKK3JlbWFwcyBDYXBzIHRvIExlZnQgQWx0LCAzOCwwMCwxRCByZW1hcHMgTGVmdCBBbHQgdG8gTGVmdCBDdHJsIGFuZCAxRCwwMCwzQQorcmVtYXBzIExlZnQgQ3RybCB0byBDYXBzIExvY2sgc2luY2UgM0E9Q2FwcywgMUQ9TGVmdCBDdHJsIGFuZCAzOD1MZWZ0IEFsdC4KKworQmFzZWQgb24gSnVhbm8gdGlwIGFuZCBvbiB0aGlzIG9uZSwgSSBiZWxpZXZlIGEgbG90IG9mIHJlbWFwcGluZyBjYW4gYmUgZG9uZQorYXMgbG9uZyBhcyB5b3Uga2VlcCB0aGUgc2VwYXJhdG9ycyAwMCBhbmQgcmVtZW1iZXIgdG8gYWRkIG9uZSB0byB0aGUgbnVtYmVyCitvZiByZW1hcHBpbmdzLiBXaGF0IEkgZG8gbm90IGtub3cgaXMgaG93IGZhciB5b3UgY2FuIGV4dGVuZCB0aGlzIGluc3RydWN0aW9uCit3aXRob3V0IGdldHRpbmcgaW50byB0cm91YmxlIHdpdGggdGhlIHJlZ2lzdHJ5LiBBdCB3b3JzdCwgaWYgeW91IGtleWJvYXJkIGRvZXMKK25vdCBiZWhhdmUgYXMgZXhwZWN0ZWQsIGdvIGludG8gdGhlIHJlZ2lzdHJ5IGFuZCBkZWxldGUgdGhpcyBpbnN0cnVjdGlvbiAoYmUKK2NhcmVmdWwgaGVyZSBzaW5jZSBpdCBpcyBlYXN5IHRvIGNvbmZ1c2UgdGhpcyBpbnN0cnVjdGlvbiB3aXRoIHRoZSBLZXlib2FyZAorTGF5b3V0UyAoUyBmb3IgZW1waGFzaXMpIHdoaWNoIG11c3Qgbm90IGJlIGRlbGV0ZWQuCisKK0FnYWluLCB0aGFua3MgdG8gSnVhbm9AbWluZHNwcmluZy5jb20gd2hvIGdvdCBtZSBnb2luZyBhbmQgc3VnZ2VzdGVkIEkKK3Bvc3QgbXkgdGlwLiBUb29rIG1lIHNvbWUgdGltZSB0byByZXRyaWV2ZSB0aGUgVklNIFVybCBidXQgZm9ydHVuYXRlbHksCitJIGhhZCBwcmludGVkIGhpcyB0aXAuCisKK1JlZ2FyZHMKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPmF1dG9tYXRpY2FsbHkgd3JhcCBsZWZ0IGFuZCByaWdodDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTM3PC9BPjxCUj4KKworSSBoYXRlIGl0IHdoZW4gSSBoaXQgbGVmdCAob3IgaCkgYW5kIG15IHNjcmVlbiBmbGlja2Vycy4gIEkgd2FudCBpdCB0byBnbyB1cAordG8gdGhlIG5leHQgbGluZS4gIERpdHRvIGZpciByaWdodCAob3IgbCkuICBCZWxvdyBhcmUgdHdvIGZ1bmN0aW9ucyAvIG1hcHBpbmdzCit0byBoZWxwIHdpdGggdGhhdC4gIEknbSBwcmV0dHkgc3VyZSB0aGF0IGlmIHlvdSByZW1vdmUgdGhlICZsdDtzaWxlbnQmZ3Q7LAordGhlbiBpdCB3aWxsIHdvcmsgaW4gNS54Li4uCisKK25ub3JlbWFwICZsdDtzaWxlbnQmZ3Q7ICZsdDtMZWZ0Jmd0OyAgOmNhbGwgV3JhcExlZnQoKSZsdDtjciZndDsgbm5vcmVtYXAKKyZsdDtzaWxlbnQmZ3Q7ICZsdDtSaWdodCZndDsgOmNhbGwgV3JhcFJpZ2h0KCkmbHQ7Y3ImZ3Q7CisKK25ub3JlbWFwICZsdDtzaWxlbnQmZ3Q7IGgJOmNhbGwgV3JhcExlZnQoKSZsdDtjciZndDsgbm5vcmVtYXAKKyZsdDtzaWxlbnQmZ3Q7IGwgICAgICAgOmNhbGwgV3JhcFJpZ2h0KCkmbHQ7Y3ImZ3Q7CisKK2Z1bmN0aW9uISBXcmFwTGVmdCgpCisgICAgbGV0IGNvbCA9IGNvbCgiLiIpCisKKyAgICBpZiAxID09IGNvbAorCSIgZG9uJ3Qgd3JhcCBpZiB3ZSdyZSBvbiB0aGUgZmlyc3QgbGluZSBpZiAxID09IGxpbmUoIi4iKQorCSAgICByZXR1cm4KKwllbmRpZiBub3JtYWwhIGskCisgICAgZWxzZQorCW5vcm1hbCEgaAorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgV3JhcFJpZ2h0KCkKKyAgICBsZXQgY29sID0gY29sKCIuIikJaWYgMSAhPSBjb2woIiQiKQorCWxldCBjb2wgPSBjb2wgKyAxCisgICAgZW5kaWYKKworICAgIGlmIGNvbCgiJCIpID09IGNvbAorCSIgZG9uJ3Qgd3JhcCBpZiB3ZSdyZSBvbiB0aGUgbGFzdCBsaW5lIGlmIGxpbmUoIiQiKSA9PSBsaW5lKCIuIikKKwkgICAgcmV0dXJuCisJZW5kaWYgbm9ybWFsISBqMXwKKyAgICBlbHNlCisJbm9ybWFsISBsCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5HZXR0aW5nIG5hbWUgb2YgdGhlIGZ1bmN0aW9uPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEzOCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xMzg8L0E+PEJSPgorCitIaSBBbGwsCisKK1doaWxlIGJyb3dzaW5nIGNvZGUgb25lIGFsd2F5cyBuZWVkcyB0byBrbm93IHdoaWNoIGZ1bmN0aW9uIHlvdSBhcmUgY3VycmVudGx5Citsb29raW5nLiBHZXR0aW5nIHRoZSBuYW1lIGlzIHZlcnkgcGFpbmZ1bCB3aGVuIHRoZSBmdW5jdGlvbnMgYXJlIGxlbmd0aHkKK2FuZCB5b3UgYXJlIGN1cnJlbnRseSBicm93c2luZyBOT1QgbmVhciB0byB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uLiBZb3UKK2NhbiBnZXQgdGhlIGZ1bmN0aW9uJ3MgbmFtZSBieSB1c2luZyB0aGlzIHNpbXBsZSBtYXBwaW5nLgorCitKdXN0IHBsYWNlIHRoaXMgaW4geW91ciAudmltcmMuCisKK21hcCBfRiBtYVtbayJ4eXlgYTplY2hvIEB4Jmx0O0NSJmd0OworCitub3cgX0Ygd2lsbCBkaXNwbGF5IHdoaWNoIGZ1bmN0aW9uIHlvdSBhcmUgY3VycmVudGx5IGluLgorCitFbmpveSB0aGUgcG93ZXIgb2YgVmltIC1OaXRpbiBSYXV0CisKK1BTOiBUaGUgd29ya2luZyBpcyBhcyBmb2xsb3dzLCBtYXJrIHRoZSBjdXJyZW50IGxpbmUgd2l0aCBhLCBqdW1wIHRvIHRoZQorcHJldmlvdXMgJ3snIGluIHRoZSBmaXJzdCBjb2x1bW4sIGdvIG9uZSBsaW5lIHVwLCB5YW5rIHRoZSBsaW5lIGluIHJlZ2lzdGVyCit4LCByZXR1cm4gdG8gdGhlIG1hcmsgYSwgZWNobyB0aGUgdmFsdWUgb2YgcmVnaXN0ZXIgeCwgd2hpY2ggaXMgdGhlIHdhbnRlZAorZnVuY3Rpb24gbmFtZS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+PSwKK0xhVGVYIHRhYmxlcywgZGVjbGFyYXRpb25zLCBldGM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTM5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTEzOTwvQT48QlI+CisKK0NoZWNrIG91dAorCis8QQorSFJFRj0iaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS90ZXh0YWIuaHRtbCI+aHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS90ZXh0YWIuaHRtbDwvQT48QlI+CisKK2FuZCBzZWUgc29tZSBleGFtcGxlcyBvZiB0ZXh0IGFsaWdubWVudCAoaXRzIGhvcGVsZXNzIHRvIGRvIGl0IGhlcmUgd2l0aAorcHJvcG9ydGlvbmFsIGZvbnRzKS4gIFlvdSdsbCBiZSBhYmxlIHRvIGRvd25sb2FkIHRleHRhYiBzb3VyY2UsIGEgV2luZG93cy1iYXNlZAordGV4dGFiIGV4ZWN1dGFibGUsIGFuZCBhIHNjcmlwdGZpbGUgY29udGFpbmluZyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlCisodHRhbGlnbi52aW0pLglUaGUgdGV4dGFiIHByb2dyYW0gY291cGxlZCB3aXRoICZsdDt0dGFsaWduLnZpbSZndDsgbGV0cyB5b3U6CisKKzEuIGFsaWduIEMgbGFuZ3VhZ2Ugc3RhdGVtZW50cyBvbiB0aGVpciA9ICs9IC09IC89IGV0YyBzeW1ib2xzIDIuIGFsaWduIEMKK2xhbmd1YWdlIGRlY2xhcmFyYXRpb25zOiBzZXBhcmF0ZSBjb2x1bW5zIGZvciB0eXBlcywgKlssIHZhcmlhYmxlCisgICBuYW1lcywgaW5pdGlhbGl6YXRpb25zICg9KSwgYW5kIGNvbW1lbnRzICgvLyBvciAvKiAuLiAqLykKKzMuIGFsaWduIEMvQysrIGxhbmd1YWdlIGNvbW1lbnRzICgvLywgLyogLi4gKi8pIDQuIGFsaWduIEMvQysrIGxhbmd1YWdlCisoYW5zaSkgZnVuY3Rpb24gYXJndW1lbnQgbGlzdHMgNS4gYWxpZ24gTGFUZVggdGFibGVzIG9uIHRoZWlyICYmIHNlcGFyYXRvcnMKKzYuIGFsaWduIEhUTUwgdGFibGVzIHdpdGggJmx0Oy9URCZndDsmbHQ7VEQmZ3Q7IHNlcGFyYXRvcnMgNy4gYWxpZ24gb24KK3NldmVyYWwgY2hhcmFjdGVyczogJmx0OyA/IDogfCBAIDsgIChvciBtb2RpZnkgdGhlbSB0byBoYW5kbGUgd2hhdGV2ZXIKKyAgIGFsaWdubWVudCBjaGFyYWN0ZXJzIHlvdSB3YW50KQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj50aXAKK3VzaW5nIGVtYmVkZGVkIHBlcmwgaW50ZXJwcmV0ZXI8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0MDwvQT48QlI+CisKK1doZW4gd3JpdGluZyBzY3JpcHRzIHVzaW5nIHRoZSBlbWJlZGRlZCBpbnRlcnByZXRlciBhdmFpbGFibGUgaWYgdmltIGhhcyB0aGUKKytwZXJsIG9yZSArcGVybC9keW4gb24gZ2l2ZXMgeW91IGFjY2VzcyB0byB0aGlzIHBvd2VyZnVsbCBhbmQgRkFTVCBzY3JpcHRpbmcKK2xhbmd1YWdlIChlc3BlY2lhbGx5IGZhc3QgY29tcGFyZWQgdG8gdmltIHNjcmlwdHMpICB0aGVyZSBhcmUgc29tZSBnb3RjaGFzLgorCitGaXJzdDogbmV2ZXIgZW1iZWQgY29tcGxleCBwZXJsIGNvbW1hbmQgaW4gdGhlIGJvZHkgb2YgYSB2aW0gZnVuY3Rpb24gdGhpcword2lsbCBiZSByZWNvbXBpbGVkIGFuZCBldmFsZWQgZWFjaCB0aW1lIGZvciBhIHRyZW1lbmRvdXMgbG9zcyBvZiB0aW1lLmluc3RlYWQKK3RvIGl0IGxpa2UgdGhpcworCitwZXJsICZsdDsmbHQ7IEVPRiBzdWIgbXlTdWIgeworICAjc29tZSB1c2VmdWxsIHBlcmwgc3R1ZmYKK30gRU9GCisKK2Z1bmN0aW9uISBNeUZ1bmN0aW9uIHBlcmwgbXlTdWIgImFuIGFyZ3VtZW50IiwgImFub3RoZXIiIGVuZGZ1bmN0aW9uCisKK3RvIHBhc3MgY29tcHV0ZWQgYXJndW1lbnQgdG8geW91ciBwZXJsIHN1YiB1c2UgdGhlIHZpbSBleGVjIGNvbW1hbmQKK2Z1bmN0aW9uISBNeUZ1bmN0aW9uIGV4ZWMgInBlcmwgbXlTdWIgIiAuIGFMb2NhbFZhciAuICIsICIgYjphQnVmZmVyTG9jYWxWYXIKK2VuZGZ1bmN0aW9uCisKK0l0IG1heSBiZSB2ZXJ5IGhhcmQgdG8gZGVidWcgeW91ciBwZXJsIHN1YiBzaW5jZSB0aGUgb3V0cHV0IG9mIHRoZSBwZXJsCitjb21waWxlciBpcyBzb21laG93IGxvc3QgaW4gdGhlIG1pZGRsZSBvZiBub3doZXJlIGFuZCB0aGUgZGVidWdnZXIgaXMgbm90CithdmFpbGFibGUuICBXaGVuIGEgY29tcGlsYXRpb24gZXJyb3Igb2NjdXJzIGluIHlvdXIgc3ViIGRlZmluaXRpb24geW91J2xsIGdldAorYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHlvdSB0cnkgdG8gY2FsbCBpdCBzYXlpbmcgdGhhdCB0aGUgc3ViIGRvZXMgbm90IGV4aXN0cy4KK09uZSB0aGluZyB3aGljaCBJIGhhdmUgZm91bmQgdmVyeSB1c2VmdWxsIGlzIHRvIHdyaXRlIGEgZmFrZSBWSU0gbW9kdWxlIHdpdGgKK3N0dWIgbWV0aG9kcyB3aGljaCB3aWxsIGFsbG93IHlvdSB0byB1c2UgdGhlIGNvbW1hbmQgbGluZSBwZXJsIGludGVycHJldG9yCit0byBhdCBsZWFzdCBjb21waWxlIHlvdXIgcHJvZ3JhbS4gIFlvdSBjb3VsZCBtYWtlIHlvdXIgc3R1YiBzbWFydCBlbm91Z2ggdG8KK2Zha2UgYSB2aW0gYW5kIHVzZSB0aGUgZGVidWdnZXIuICBIZXJlIGlzIGEgc2FtcGxlIGZvciBzdWNoIGEgZmFrZSBtb2R1bGUKK2RlZmluaW5nIGp1c3QgdGhvc2UgbWV0aG9kIHdoaWNoIEkgd2FzIHVzaW5nLgorCitwYWNrYWdlIFZJTTsgdXNlIGRpYWdub3N0aWNzOyB1c2Ugc3RyaWN0OyBzdWIgVklNOjpFdmFsIHsKKwkkXyA9IHNoaWZ0OworCisJcHJpbnQgIkV2YWwgJF9cbiI7CisKKwl7CisJCSAgcmV0dXJuCisJCSAgJ14oPyEhKShbXlx0XSopXHRbXlx0XSpcdCguKik7Ilx0KFteXHRdKilcdGxpbmU6KFxkKikuKiQnCisJCSAgaWYgKC9nOlRhZ3NCYXNlX3BhdHRlcm4vKTsgcmV0dXJuICRBUkdWWzBdIGlmCisJCSAgKC9iOmZpbGVOYW1lLyk7IHJldHVybiAnJDMnIGlmICgvZzpUYWdzQmFzZV90eXBlUGFyLyk7CisJCSAgcmV0dXJuICckMScgaWYgKC9nOlRhZ3NCYXNlX25hbWVQYXIvKTsgcmV0dXJuICckNCcgaWYKKwkJICAoL2c6VGFnc0Jhc2VfbGluZVBhci8pOyByZXR1cm4gJ1RhJmdzJyBpZiAoL3M6bWVudV9uYW1lLyk7CisJCSAgcmV0dXJuICRBUkdWWzFdIGlmICgvZzpUYWdzQmFzZV9ncm91cEJ5VHlwZS8pOworCQlkaWUgInVua25vd24gZXZhbCAkXyI7CisJfQorfSBzdWIgVklNOjpNc2cgeworCW15ICRtc2cgPSBzaGlmdDsgcHJpbnQgIk1TRyAkbXNnXG4iOworfSBzdWIgVklNOjpEb0NvbW1hbmQgeworCW15ICRwYWNrYWdlOyBteSAkZmlsZW5hbWU7IG15ICRsaW5lOworICAgICgkcGFja2FnZSwgJGZpbGVuYW1lLCAkbGluZSkgPSBjYWxsZXI7CisKKwlteSAkY29tbWFuZCA9IHNoaWZ0OyBwcmludCAiYXQgJGZpbGVuYW1lICRsaW5lXG4iOyBwcmludCAiRG9Db21tYW5kCisJJGNvbW1hbmRcbiI7Cit9IDE7CisKK1RoZW4geW91IGNhbiBjb3B5IG90aGVyIHlvdXIgcGVybCBjb2RlIGluIGEgc2VwYXJhdGUgZmlsZSBhbmQgYWRkIGEgdXNlIFZJTTsKK2F0IHRoZSB0b3AgYW5kIHlvdXIgc2V0IHRvIGRlYnVnLgorCitHb29kIFZpbW1pbmcgZ29vZCBwZXJsaW5nLiAgQmVub2l0IFBTOiB0aGlzIHRpcHMgYXJlIHByb2JhYmx5IHRydWUgZm9yIG90aGVyCitzY3JpcHRpbmcgbGFuZ3VhZ2VzCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkFkZAoreW91ciBmdW5jdGlvbiBoZWFkaW5nIHdpdGggYSBrZXlzdHJva2U8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQxIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0MTwvQT48QlI+CisKK0JlbG93IGlzIGEgdGlwIHRoYXQgdGhlIEMvQysrIE5ld2JpZXMgbWF5IGZpbmQgaW50ZXJlc3RpbmcgYW5kIGhhbmR5IHRvIHVzZS4KK1RoZSBmb2xsb3dpbmcgY29kZSB3aWxsIGFkZCBhIGZ1bmN0aW9uIGhlYWRpbmcgYW5kIHBvc2l0aW9uIHlvdXIgY3Vyc29yIGp1c3QKK2FmdGVyIERlc2NyaXB0aW9uIHNvIHRoYXQgb25lIGNhbiBkb2N1bWVudCBhcyBvbmUgcHJvY2VlZHMgd2l0aCBjb2RlLgorCitmdW5jdGlvbiBGaWxlSGVhZGluZygpCisJbGV0IHM6bGluZT1saW5lKCIuIikgIGNhbGwKKwlzZXRsaW5lKHM6bGluZSwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpCisJY2FsbCBhcHBlbmQoczpsaW5lLCIqIERlc2NyaXB0aW9uIC0gIikgY2FsbCBhcHBlbmQoczpsaW5lKzEsIioKKwlBdXRob3IgLSAgICAgIE1vaGl0IEthbHJhIikgY2FsbCBhcHBlbmQoczpsaW5lKzIsIiogRGF0ZQorCS0JICIuc3RyZnRpbWUoIiViICVkICVZIikpIGNhbGwgYXBwZW5kKHM6bGluZSszLCIqCisJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8iKSB1bmxldCBzOmxpbmUKK2VuZGZ1bmN0aW9uCisKK2ltYXAgJmx0O0Y0Jmd0OyAgJmx0O2VzYyZndDttejpleGVjdXRlIEZpbGVIZWFkaW5nKCkmbHQ7UkVUJmd0O2B6akEKKworV2hlcmUgJmx0O2VzYyZndDsgc3RhbmRzIGZvciBeVitFU0MgYW5kICZsdDtSRVQmZ3Q7IGZvciBeVitFTlRFUgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5BdXRvbWF0aWMKK2Z1bmN0aW9uIGVuZCBjb21tZW50aW5nIGZvciBDKysgYW5kIEphdmE8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0MjwvQT48QlI+CisKK1NvbWUgcGVvcGxlIGhhdmUgYSBoYWJpdCBvZiBhZGRpbmcgdGhlIGZ1bmN0aW9uIG5hbWUgYXMgYSBjb21tZW50IHRvIHRoZQorZW5kIG9mIHRoYXQgZnVuY3Rpb24sIGlmIGl0IGlzIGxvbmcsIHNvIHRoYXQgaGUvc2hlIGtub3dzIHdoaWNoIGZ1bmN0aW9uIHRoZQorJ30nIGVuZHMuIEhlcmUncyBhIHdheSB0byBhdXRvbWF0ZSB0aGUgcHJvY2Vzcy4KKworVXNlIHRoZSBmb2xsb3dpbmcgYWJicmV2aWF0aW9uOiBpYWIgfS8vIH0gLy8gRU5EOgorJmx0O2VzYyZndDsxMGglJD9cd1wrXHMqKCZsdDtjciZndDsieHkvXHMqKCZsdDtjciZndDsveyZsdDtjciZndDs6bm9obCZsdDtjciZndDslJCJ4cGEKKworSWYgeW91IG5vdyBlbmQgdGhlIGZ1bmN0aW9uIHdpdGggJ30vLycsIHRoZSBmb2xsd29pbmcgc3RyaW5nIHdpbGwgYmUKK2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkOiAnfSAvL0VORDogZnVuY3Rpb25uYW1lJworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Vc2UKK29mIFZpbSBmb2xkcyBmb3IgamF2YWRvY3M8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0MzwvQT48QlI+CisKK0hpLAorCitUaGUgZm9sZC1tZXRob2QgbWFya2VyIGNhbiBiZSBlZmZlY3RpdmVseSB1c2UgdG8gc2V0IHRoZSBmb2xkcyBpbiB5b3VyCitKYXZhIHNvdXJjZS4gIERlZmluZSBzb21lIG1hcmtlciBhbmQgcGxhY2UgaXQgaW5zaWRlIEhUTUwgY29tbWVudHMgJmx0OyEtLQoreHggLS0mZ3Q7LiAgVGhpcyB3YXksIGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgSmF2YWRvY3MgZ2VuZXJhdGVkIHdpdGhvdXQgdGhlCituZWNlc3NpdHkgb2YgYSBzZXByYXRlIGNvbW1lbnQgbGluZS4gIGUuZy4KKworLyoqCisgKiAmbHQ7IS0tIHp6LkZPTERTVEFSVCBjbGFzcyBBYmNDbGFzcyAtLSZndDsgKiBUaGUgY2xhc3MgZGVzY3JpcHRpb24uCisgKiAuLi4JKi8KK3B1YmxpYyBjbGFzcyBBYmNDbGFzcyB7CisKKyAgICAvKioKKyAgICAgKiAmbHQ7IS0tIG1ldGhvZCB6ei5GT0xEU1RBUlQgc29tZU1ldGhvZCgpIC0tJmd0OyAqIE1ldGhvZCBkZXNjcmlwdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzb21lTWV0aG9kKCk7CisKKyAgICAuLi4KKworfSAvKiB6ei5FTkQ6IEFiY0NsYXNzICovCisKKy8qIFB1dCB0aGlzIGF0IHRoZSBlbmQgb2YgeW91ciBmaWxlICovIC8qIHZpbTpmZG09bWFya2VyCitmbXI9enouRk9MRFNUQVJULHp6LkVORCBmZGw9MiBmZGM9MjogKi8KKworTm93LCB0aGUgZmlsZXMgd2lsbCBiZSBvcGVuZWQgd2l0aCB0aGUgbWV0aG9kcyBuZWF0bHkgZm9sZGVkLiAgWW91IGNhbiB1c2UKKyJ6UiIgdG8gb3BlbiBhbGwgZm9sZHMgKG9yIGNsaWNrIG9uIHRoZSAiKyIgYXQgdGhlIGxlZnQgY29sdW1uKS4KKworU2FtZWVyLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5yZWNvcmRpbmcKK2tleXN0cm9rZXMgYnkgInEiIGZvciByZXBlc3RlZCBqb2JzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0NCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNDQ8L0E+PEJSPgorCitUaGUgbW9zdCB1c2VmdWwgZmVhdHVyZSB0aGF0IEkgZmluZCBpbiBWSU0gaXMgdGhlICJyZWNvcmRpbmciIGZlYXR1cmUgKDpoZWxwCityZWNvcmRpbmcpLiAgSSBoYXZlIHVzZWQgdGhpcyB0byBhdXRvbWF0aWNhbGx5IGluc2VydCBmdW5jdGlvbiBoZWFkZXJzLAorcmUtaW5kZW50IGxpbmVzLCBhbmQgY29udmVydCBzb21lIDM0IHNvdXJjZSBmaWxlcyBpbnRvIEhUTUwuCisKK1RoaXMgZmVhdHVyZSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGRvIHNvbWUgcmVwZWF0ZWQgam9icywgd2hpY2gKK3lvdSBjYW50IGRvIGVhc2lseSB1c2luZyAiLiIuICBZb3UgY2FuIHNldCBhYm91dCB3cml0aW5nIGEgZnVuY3Rpb24sIGRlZmluZQorYSBtYXBwaW5nLCBldGMsIGJ1dCB0aGVuIHRoZXNlIHRoaW5ncyBtaWdodCB0YWtlIHRpbWUuCUJ5IHJlY29yZGluZywgeW91CitjYW4gdHJ5IG91dCBhbmQgZmluZCB0aGUgYWN0dWFsIGtleXN0cm9rZXMgdGhhdCBkb2VzIHRoZSBqb2IuCisKK1RvIHN0YXJ0IHJlY29yZGluZywgcHJlc3MgInEiIGluIG5vcm1hbCBtb2RlIGZvbGxvd2VkIGJ5IGFueSBvZiAiMC05YS16Ii4KK1RoaXMgd2lsbCBzdGFydCByZWNvcmRpbmcgdGhlIGtleXN0cm9rZXMgdG8gdGhlIHJlZ2lzdGVyIHlvdSBjaG9vc2UuICBZb3UgY2FuCithbHNvIHNlZSB0aGUgd29yZCAicmVjb3JkaW5nIiBpbiB0aGUgc3RhdHVzKD8pIGxpbmUuICBZb3UgY2FuIHN0YXJ0IHRoZSBrZXkKK3NlcXVlbmNlcyB0aGF0IHlvdSB3YW50IHRvIHJlY29yZC4gIFlvdSBjYW4gZ28gdG8gaW5zZXJ0IG1vZGUgYW5kIHR5cGUgaWYKK3lvdSB3YW50LgorCitUbyBzdG9wIHJlY29yZGluZywgcHJlc3MgInEiIGluIHRoZSBub3JtYWwgbW9kZS4KKworVG8gcGxheWJhY2sgeW91ciBrZXlzdHJva2VzLCBwcmVzcyAiQCIgZm9sbG93ZWQgYnkgdGhlIGNoYXJhY3RlciB5b3UgY2hvb3NlLgorUHJlc3NpbmcgIkBAIiB3aWxsIHJlcGVhdCB0aGUgc2FtZSBhZ2Fpbi4KKworU2FtZWVyLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5DaGFuZ2luZworRE9TIHN0eWxlIGVuZCBvZiBsaW5lIHRvIFVOSVgsIG9yIHZpc2UtdmVyc2E8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQ1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0NTwvQT48QlI+CisKK1Rob3NlIG9mIHVzIGRvb21lZCB0byB3b3JrIGluIGJvdGggdGhlIFVuaXggYW5kIFdpbmRvd3Mgd29ybGQgaGF2ZSBtYW55IHRpbWVzCitlbmNvdW50ZXJlZCBmaWxlcyB0aGF0IHdlcmUgY3JlYXRlL2VkaXR0ZWQgb24gc3lzdGVtcyBvdGhlciB0aGF0IHRoZSBvbmUKK3dlIGFyZSBvbiBhdCB0aGUgdGltZSBvZiBvdXIgZWRpdHMuICBXZSBjYW4gZWFzaWx5IGNvcnJlY3QgdGhlIGRyZWFkZWQgJ15NJworYXQgdGhlIGVuZCBvZiBvdXIgVW5peCBsaW5lcywgb3IgbWFrZSBmaWxlcyBoYXZlIG1vcmUgdGhhbiBvbmUgbGluZSBpbiBET1MgYnk6CisKK1RvIGNoYW5nZSBmcm9tICZsdDtDUiZndDsmbHQ7TEYmZ3Q7IChET1MpIHRvIGp1c3QgJmx0O0xGJmd0OyAoVW5peCk6IDpzZXQKK2ZpbGVmb3JtYXQ9dW5peCA6dworCitPciB0byBjaGFuZ2UgYmFjayB0aGUgb3RoZXIgd2F5OiA6c2V0IGZpbGVmb3JtYXQ9ZG9zIDp3CisKK0l0IGFsc28gd29ya3MgZm9yIEFwcGxlIGxhbmQ6IDpzZXQgZmlsZWZvcm1hdD1tYWMgOncKKworQW5kIHRvIHRlbGwgdGhlIGRpZmZlcmVuY2U6IHNldCBzdGF0dXNsaW5lPSUmbHQ7JWYlaCVtJXIlPSV7JmZmfVwgJWwsJWMlVlwgJVAKKwkJCQkJICAgICAgXl5eXl4gIFRoaXMgc2hvd3Mgd2hhdCB0aGUKKwkJCQkJICAgICAgY3VycmVudCBmaWxlJ3MgZm9ybWF0IGlzLgorCitIYXBweSBWaW1taW5nIQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5vcGVuaW5nCittdWx0aXBsZSBmaWxlcyBmcm9tIGEgc2luZ2xlIGNvbW1hbmQtbGluZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNDYiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQ2PC9BPjxCUj4KKworaSB1c2UgdGhlIDpzcGxpdCBjb21tYW5kIGEgbG90IC0tIGJvdGggdG8gb3BlbiBhIHNlY29uZCB3aW5kb3cgY29udGFpbmluZwordGhlIGN1cnJlbnRseSBlZGl0ZWQgZmlsZSBhbmQgdG8gZWRpdCBhIG5ldyBmaWxlIGFsdG9nZXRoZXIgKHdpdGggdGhlIDpzcGxpdAorJmx0O2ZpbGVuYW1lJmd0OyBvcHRpb24pLiAgaG93ZXZlciwgaSBhbHNvIGxpa2UgdG8gYmUgYWJsZSB0byBlZGl0IG1vcmUgdGhhbgorb25lIGZpbGUgYW5kIGNhbGxpbmcgOnNwIG11bHRpcGxlIHRpbWVzIGlzIGluY29udmVuaWVudC4gIHNvLCBpIGNyZWF0ZWQgdGhlCitmb2xsb3dpbmcgY29tbWFuZCwgZnVuY3Rpb24gYW5kIGFiYnJldmlhdGlvbjoKKworZnVuY3Rpb24hIFNwKC4uLikKKyAgaWYoYTowID09IDApCisgICAgc3AKKyAgZWxzZQorICAgIGxldCBpID0gYTowIHdoaWxlKGkgJmd0OyAwKQorICAgICAgZXhlY3V0ZSAnbGV0IGZpbGUgPSBhOicgLiBpIGV4ZWN1dGUgJ3NwICcgLiBmaWxlCisKKyAgICAgIGxldCBpID0gaSAtIDEKKyAgICBlbmR3aGlsZQorICBlbmRpZgorZW5kZnVuY3Rpb24gY29tISAtbmFyZ3M9KiAtY29tcGxldGU9ZmlsZSBTcCBjYWxsIFNwKCZsdDtmLWFyZ3MmZ3Q7KSBjYWIgc3AgU3AKKwordGhpcyByZXRhaW5zIHRoZSBiZWhhdmlvdXIgb2YgOnNwIGluIHRoYXQgaSBjYW4gc3RpbGwgdHlwZSA6c3AgKHRoZQorYWJicmV2aWF0aW9uIHRha2VzIGNhcmUgb2YgdGhhdCkuICA6U3AgdGFrZXMgYW55IG51bWJlciBvZiBmaWxlcyBhbmQgb3BlbnMKK3RoZW0gYWxsIHVwLCBvbmUgYWZ0ZXIgdGhlIG90aGVyLgorCit0aGUgdGhpbmdzIGkgaGF2ZSBub3RpY2VkIGFyZSB0aGF0IHRoaXMgY2F1c2VzICdzcCcgdG8gYmUgZXhwYW5kZWQgdG8gJ1NwJworZXZlcnl3aGVyZSwgZXZlbiBpbiBzZWFyY2ggcGF0dGVybnMuICBhbHNvLCBwcmVwZW5kaW5nICd2ZXJ0JyBkb2Vzbid0IHdvcmsuCitpZiB0aGVyZSBpcyBpbnRlcmVzdCwgaSdsbCBkbyB0aGF0LgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+SG93IHRvIHdyaXRlIGEgcGx1Z2luPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0NyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNDc8L0E+PEJSPgorCitUaGlzIHRpcCBnaXZlcyBhIHNrZWxldG9uIGZvciB3cml0aW5nIGEgcGx1Z2luOyBWaW0ncyBoZWxwIGZpbGVzIGhhdmUgcGxlbnR5CitvZiBkZXRhaWxzICg6aGUgcGx1Z2luLCA6aGUgd3JpdGUtcGx1Z2luLCA6aGUgcGx1Z2luLWRldGFpbHMpLgorCisjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB3aGVuIHlvdXIgYXBwIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkIChvciAiY29tcGF0aWJsZSIgbW9kZSBzZXQpCitpZiBleGlzdHMoImxvYWRlZF9Zb3VyQXBwTmFtZSIpIHx8ICZjcAorICBmaW5pc2gKK2VuZGlmCisKKyMgUHVibGljIEludGVyZmFjZTogIyAgQXBwRnVuY3Rpb246IGlzIGEgZnVuY3Rpb24geW91IGV4cGVjdCB5b3VyIHVzZXJzIHRvCitjYWxsICMJUGlja0FNYXA6IHNvbWUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IHdpbGwgcnVuIHlvdXIgQXBwRnVuY3Rpb24gIworUmVwZWF0IHRoZXNlIHRocmVlIGxpbmVzIGFzIG5lZWRlZCBmb3IgbXVsdGlwbGUgZnVuY3Rpb25zIHdoaWNoIHdpbGwgIyBiZSB1c2VkCit0byBwcm92aWRlIGFuIGludGVyZmFjZSBmb3IgdGhlIHVzZXIgaWYgIWhhc21hcHRvKCcmbHQ7UGx1ZyZndDtBcHBGdW5jdGlvbicpCisgIG1hcCAmbHQ7dW5pcXVlJmd0OyAmbHQ7TGVhZGVyJmd0O1BpY2tBTWFwICZsdDtQbHVnJmd0O0FwcEZ1bmN0aW9uCitlbmRpZgorCisjIEdsb2JhbCBNYXBzOiAjIG1hcCAmbHQ7c2lsZW50Jmd0OyAmbHQ7dW5pcXVlJmd0OworJmx0O3NjcmlwdCZndDsgJmx0O1BsdWcmZ3Q7QXBwRnVuY3Rpb24gXCA6c2V0IGx6Jmx0O0NSJmd0OzpjYWxsCismbHQ7U0lEJmd0O0FwcEZ1bmMmbHQ7Q1ImZ3Q7OnNldCBub2x6Jmx0O0NSJmd0OworCisjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBBcHBGdW5jdGlvbjogdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdmkgdGhlICZsdDtQbHVnJmd0Oy8mbHQ7c2NyaXB0Jmd0OworaW50ZXJmYWNlIGFib3ZlIGZ1ISAmbHQ7U0lEJmd0O0FwcEZ1bmN0aW9uKCkgLi53aGF0ZXZlci4uCisKKyMgeW91ciBzY3JpcHQgZnVuY3Rpb24gY2FuIHNldCB1cCBtYXBzIHRvIGludGVybmFsIGZ1bmN0aW9ucworbm1hcCAmbHQ7c2lsZW50Jmd0OyAmbHQ7bGVmdCZndDsgOnNldCBseiZsdDtDUiZndDs6c2lsZW50ISBjYWxsCismbHQ7U0lEJmd0O0FwcEZ1bmN0aW9uMiZsdDtDUiZndDs6c2V0IG5vbHombHQ7Q1ImZ3Q7CisKKyMgeW91ciBhcHAgY2FuIGNhbGwgZnVuY3Rpb25zIGluIGl0cyBvd24gc2NyaXB0IGFuZCBub3Qgd29ycnkgYWJvdXQKK25hbWUgIyBjbGFzaGVzIGJ5IHByZWNlZGluZyB0aG9zZSBmdW5jdGlvbiBuYW1lcyB3aXRoICZsdDtTSUQmZ3Q7IGNhbGwKKyZsdDtTSUQmZ3Q7SW50ZXJuYWxBcHBGdW5jdGlvbiguLi4pCisKKyMgb3IgeW91IGNvdWxkIGNhbGwgaXQgd2l0aCBjYWxsIHM6SW50ZXJuYWxBcHBGdW5jdGlvbiguLi4pICBlbmRmICMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEludGVybmFsQXBwRnVuY3Rpb246IHRoaXMgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlICMKK3NjcmlwdCwgYW5kIGl0cyBuYW1lIHdvbid0IGNsYXNoIHdpdGggd2hhdGV2ZXIgZWxzZSB0aGUgdXNlciBoYXMgbG9hZGVkCitmdSEgJmx0O1NJRCZndDtJbnRlcm5hbEFwcEZ1bmN0aW9uKC4uLikgIC4ud2hhdGV2ZXIuLiAgZW5kZgorCisjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGx1Z2lucyBhcmUgaW50ZW5kZWQgdG8gYmUgImRyb3AgaW50byAmbHQ7LnZpbS9wbHVnaW4mZ3Q7IiBhbmQgd29yay4KK1RoZSBwcm9ibGVtIHRoYXQgdGhlICZsdDtQbHVnJmd0OywgJmx0O1NJRCZndDssIGV0YyBzdHVmZiBpcyBpbnRlbmRlZCB0bworcmVzb2x2ZTogd2hhdCB0byBkbyBhYm91dCBmdW5jdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWVzIGluIGRpZmZlcmVudAorcGx1Z2lucywgYW5kIHdoYXQgdG8gZG8gYWJvdXQgbWFwcyB0aGF0IHVzZSB0aGUgc2FtZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzPworVGhlIGZpcnN0IHByb2JsZW0gaXMgc29sdmVkIHdpdGggJmx0O1NJRCZndDsgKGEgc2NyaXB0IGlkZW50aWZpZXIgbnVtYmVyKQordGhhdCB2aW0gYXNzaWduczogcHJvZ3JhbSB3aXRoIGl0IGFuZCB5b3VyIHVzZXJzIHdpbGwgYmUgaGFwcGllciB3aGVuIHlvdXIKK3N0dWZmIHdvcmtzIHdpdGggYWxsIHRoZWlyIG90aGVyIHN0dWZmLiAgVGhlIHNlY29uZCBwcm9ibGVtOiB3aGF0IHRvIGFib3V0Cit0aG9zZSBtYXBzIGlzIGFkZHJlc3NlZCB3aXRoICZsdDtQbHVnJmd0OywgJmx0O3VuaXF1ZSZndDssIGV0Yy4gIEJhc2ljYWxseQordGhlIGlkZWEgaXM6IGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlcmUgYXJlIGNsYXNoZXMgYW5kIGRvbid0IG92ZXJ3cml0ZQorcHJldmlvdXNseSBleGlzdGluZyBtYXBzLiAgVXNlIHRoZSB1c2VyJ3MgcHJlZmVycmVkIG1hcC1pbnRyb2R1Y2VyIHNlcXVlbmNlCisoSSBsaWtlIHRoZSBiYWNrc2xhc2gsIGJ1dCB0aGVyZSBhcmUgbWFueSBrZXlib2FyZHMgd2hpY2ggbWFrZSBwcm9kdWNpbmcKK2JhY2tzbGFzaGVzIHVucGxlYXNhbnQsIGFuZCB0aG9zZSB1c2VycyB1c3VhbGx5IHByZWZlciBzb21ldGhpbmcgZWxzZSkuCisKK1doYXQgSSBsaWtlIHRvIGRvIGlzIHRvIGhhdmUgYSBwYWlyIG9mIHN0YXJ0L3N0b3AgbWFwcyB0byByZWR1Y2UgbXkgaW1wYWN0CitvbiB0aGUgbmFtZXNwYWNlLiAgV2hlbiB0aGUgc3RhcnRpbmcgbWFwIGlzIHVzZWQsIGl0IGtpY2tzIG9mZiBhIHN0YXJ0aW5nCitmdW5jdGlvbiB0aGF0IGludHJvZHVjZXMgYWxsIHRoZSBtYXBzIG5lZWRlZC4gIFdoZW4gdGhlIHN0b3BwaW5nIG1hcCBpcwordXNlZCwgaXQgbm90IG9ubHkgcmVtb3ZlcyB0aGUgbWFwcyB0aGUgc3RhcnRlciBtYWRlIGJ1dCByZXN0b3JlcyBhbnkgbWFwcwordGhlIHVzZXIgaGFkIGhhZCB0aGF0IHdvdWxkIGhhdmUgY2xhc2hlZC4gIEkgYWxzbyB1c2UgdGhlIHN0YXJ0L3N0b3AgcGFpcgorb2YgZnVuY3Rpb25zIHRvIHNldCBhbmQgcmVzdG9yZSBvcHRpb25zIHRoYXQgY2F1c2UgbXkgc2NyaXB0cyBkaWZmaWN1bHRpZXMuCisKK0NoZWNrIG91dCBEcmF3SXQudmltJ3MgU2F2ZU1hcCgpIGZ1bmN0aW9uIGZvciBhIHdheSB0byBzYXZlIHVzZXIgbWFwcy4KK1Jlc3RvcmluZyBtYXBzIHdpdGggaXQgaXMgZWFzeToKKworaWYgYjpyZXN0b3JlbWFwICE9ICIiCisgZXhlIGI6cmVzdG9yZW1hcCB1bmxldCBiOnJlc3RvcmVtYXAKK2VuZGlmCisKK1NvIHlvdSBjYW4gc2VlIGl0IHNldHMgdXAgYSBzdHJpbmcgdmFyaWFibGUgd2l0aCBhbGwgdGhlIG1hcHMgdGhhdCB0aGUgdXNlcgoraGFkIHRoYXQgd291bGQgaGF2ZSBjbGFzaGVkIHdpdGggbXkgYXBwbGljYXRpb24uCisKK09uZSBmaW5hbCB0aGluZzogaWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyB0byBzaGFyZSBpbmZvcm1hdGlvbiBiZXR3ZWVuCitpdHMgdmFyaW91cyBmdW5jdGlvbnMsIHNlZSBpZiB5b3UgY2FuIHVzZSBzOnZhcm5hbWUgKGEgdmFyaWFibGUgdGhhdCBvbmx5Cit5b3VyIHNjcmlwdCdzIGZ1bmN0aW9ucyBjYW4gYWNjZXNzKSBvciBiOnZhcm5hbWUgKGEgdmFyaWFibGUgdGhhdCBhbnl0aGluZworYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIgeW91ciBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIHdpdGggY2FuIGFjY2VzcykKK2luc3RlYWQgb2YgdXNpbmcgZ2xvYmFsIHZhcmlhYmxlcy4KKworR29vZCBsdWNrIGFuZCBoYXBweSBWaW1taW5nIQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5NYWtlCitncmVhdCB1c2Ugb2YgdGhvc2UgaG9tZW1hZGUgbWVudXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQ4Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0ODwvQT48QlI+CisKK0FjY2lkZW50bHkgZGlzY292ZXJlZCB0aGF0IHVzaW5nICZsdDthbHQmZ3Q7Jmx0O01lbnUgSG90bGV0dGVyJmd0OyZsdDtjciZndDsKKyhlLmcgJmx0O2FsdCZndDtiJmx0O2NyJmd0OyAtIGZvciB0aGUgYnVmZmVyIG1lbnUpIGNhdXNlcyB0aGUgbWVudSB0byBicmVhaworb3V0IGluIGEgc2VwZXJhdGUgd2luZG93LiAgU2VsZWN0aW5nIHRoZSBtZW51IHdpdGggdGhlIG1vdXNlIGFuZCB0aGVuIGhpdHRpbmcKK2VudGVyIGRvZXMgbm90IHNlZW0gdG8gZG8gaXQuCisKK0kgd2lsbCBoYXZlIHRvIGxlYXJuIHRvIGFkZCBob3RsZXR0ZXJzIHRvIG15IG1lbnVzIG5vdyBzbyB0aGF0IHRoZSBtb3VzZQorY2FuIHRha2UgYSBicmVhay4KKworSSBhbSBhIHRvdGFsIG5ld2JpZSB3aXRoIHZpbSwgYnV0IGNvbnN0YW50bHkgYW1hemVkLi4uLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5BdXRvbWF0aWNhbGx5Cit1cGRhdGUgeW91ciBkaWZmIHVwb24gd3JpdGluZy48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTQ5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE0OTwvQT48QlI+CisKK1doZW4gdHJ5aW5nIHRvIHJlY29uY2lsZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZpbGVzLCBhbmQgdXNpbmcgdGhlIG5ldyAnZGlmZicKK2Z1bmN0aW9uYWxpdHkgaW4gVmltIDYuMCB5b3UgbWF5IHdhbnQgdG8gYXV0b21hdGljYWxseSB1cGRhdGUgdGhlIGRpZmZlcmVuY2VzCithcyB5b3UgYXJlIHdvcmtpbmcgYWxvbmcuICBBIGNvbnZpZW5lbnQgdGltZSBpcyB3aGVuIHlvdSB3cml0ZSBvdXQgZWl0aGVyIG9mCit0aGUgZmlsZXMgeW91IGFyZSBkaWZmJ2luZy4gIFRoaXMgYXV0b2NtZCB3aWxsIHRha2UgY2FyZSBvZiBkb2luZyB0aGF0IGZvciB5b3UuCisKKyIgSWYgZG9pbmcgYSBkaWZmLiAgVXBvbiB3cml0aW5nIGNoYW5nZXMgdG8gZmlsZSwgYXV0b21hdGljYWxseSB1cGRhdGUgdGhlCisgICIgZGlmZmVyZW5jZXMgYXUgQnVmV3JpdGVQb3N0CQkJICoJCWlmICZkaWZmID09CisgIDEgYXUgQnVmV3JpdGVQb3N0CQkgICAgICoJCSAgICA6ZGlmZnVwZGF0ZSBhdSBCdWZXcml0ZVBvc3QKKyAgKgkJIGVuZGlmCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkdlbmVyYXRpbmcKK2EgY29sdW1uIG9mIGluY3JlYXNpbmcgbnVtYmVyczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTUwPC9BPjxCUj4KKworWW91IGNhbiB1c2UgdGhlICJWaXN1YWwgSW5jcmVtZW50aW5nIiBzY3JpcHQgZnJvbQorCisgIDxBCisgIEhSRUY9Imh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCNWaW1GdW5jcyI+aHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI1ZpbUZ1bmNzPC9BPjxCUj4KKwordG8gY29udmVydCBhIGJsb2NrIG9mIG51bWJlcnMgc2VsZWN0ZWQgdmlhIGN0cmwtdiAodmlzdWFsIGJsb2NrKSBpbnRvIGEKK2NvbHVtbiBvZiBpbmNyZWFzaW5nIGludGVnZXJzLglTZWxlY3QgdGhlIGNvbHVtbiwgcHJlc3MgOkkmbHQ7Q1ImZ3Q7LCBhbmQKK3RoZSBmaXJzdCBsaW5lJ3MgbnVtYmVyIHdpbGwgYmUgdXNlZCBhcyBhIHN0YXJ0aW5nIHZhbHVlLiAgU3Vic2VxdWVudCBsaW5lcydzCitudW1iZXJzIHdpbGwgYmUgaW5jcmVtZW50ZWQgYnkgb25lLgorCitJZiB0aGUgY3RybC12IGJsb2NrIGlzICJyYWdnZWQgcmlnaHQiLCB3aGljaCBjYW4gaGFwcGVuIHdoZW4gIiQiIGlzIHVzZWQgdG8KK3NlbGVjdCB0aGUgcmlnaHQgaGFuZCBzaWRlLCB0aGUgYmxvY2sgd2lsbCBoYXZlIHNwYWNlcyBhcHBlbmRlZCBhcyBuZWVkZWQKK3RvIHN0cmFpZ2h0ZW4gaXQgb3V0LiAgSWYgdGhlIHN0cmxlbiBvZiB0aGUgY291bnQgZXhjZWVkcyB0aGUgdmlzdWFsLWJsb2NrCithbGxvdG1lbnQgb2Ygc3BhY2VzLCB0aGVuIGFkZGl0aW9uYWwgc3BhY2VzIHdpbGwgYmUgaW5zZXJ0ZWQuCisKK0V4YW1wbGU6ICBQdXQgY3Vyc29yIG9uIHRvcG1vc3QgemVybywgc2VsZWN0IGNvbHVtbiB3aXRoIGN0cmwtdiwgdGhlbiA6SQorCisgICB2ZWN0b3JbMF09IDE7ICAgICAgIHZlY3RvclswXT0gMTsgdmVjdG9yWzBdPSAxOwkgdmVjdG9yWzFdPSAxOworICAgdmVjdG9yWzBdPSAxOyAgLS0mZ3Q7ICB2ZWN0b3JbMl09IDE7IHZlY3RvclswXT0gMTsJICAgIHZlY3RvclszXT0gMTsKKyAgIHZlY3RvclswXT0gMTsgICAgICAgdmVjdG9yWzRdPSAxOworCitUaGlzIHNjcmlwdCB3b3JrcyB3aXRoIGJvdGggdmltIDUuNyAoOnNvIHZpc2luY3IudmltKSBvciB2aW0gNi4wIChzb3VyY2UgaXQKK2FzIGZvciB2aW0gNS43IG9yIGRyb3AgaXQgaW50byB0aGUgLnZpbS9wbHVnaW4gZGlyZWN0b3J5KS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPmFuIGFzY2lpIHRhYmxlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1MSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTE8L0E+PEJSPgorCitUaGVyZSBpcyBhbiBhc2NpaSB0YWJsZSBpbiB0aGUgdmltLWhlbHAgZmlsZXMsIGJ1dCBpdCdzIGhhcmQgdG8gZmluZC4gIFRodXMsCitJIHNoYWxsIGdpdmUgYSBwb2ludGVyIHRvIGl0OgorCis6aGVscCBkaWdyYXBoLXRhYmxlCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkR1dGNoLAorRW5nbGlzaCwgR2VybWFuLCBIdW5nYXJpYW4sIGFuZCBZaWRkaXNoPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1MiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTI8L0E+PEJSPgorCitVbmRlciA8QQorSFJFRj0iaHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI3ZpbWxpbmtzX3NjcmlwdHMiPmh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCN2aW1saW5rc19zY3JpcHRzPC9BPjxCUj4KK2FyZSBsaW5rcyB0byBzcGVsbGluZyBjaGVja2VycyBmb3IgRHV0Y2gsIEVuZ2xpc2gsIEdlcm1hbiwgSHVuZ2FyaWFuLAorYW5kIFlpZGRpc2gsIGFsbCBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgZW5nc3BjaGsudmltLiAgVGhlIHNwZWxsaW5nIGNoZWNrZXIKK3Byb3ZpZGVzIGFzLXlvdS10eXBlIHNwZWxsIGNoZWNraW5nOyB3aXRoIHZpbTYuMCBpdCB3aWxsIGF2b2lkIGNoZWNraW5nIG9uCitwYXJ0aWFsbHkgdHlwZWQgd29yZHMuCisKK1Byb3ZpZGVkIGFyZSBzZXZlcmFsIG1hcHM6CisKKyAgXGV0IDogYWRkICB3b3JkIHVuZGVyIGN1cnNvciBpbnRvIGRhdGFiYXNlIGZvciBqdXN0IHRoaXMgZmlsZSBcZXMgOiBzYXZlCisgIHdvcmQgdW5kZXIgY3Vyc29yIGludG8gZGF0YWJhc2UgKHBlcm1hbmVudGx5KSBcZW4gOiBtb3ZlIGN1cnNvciB0byB0aGUKKyAgbmV4dAkgICBzcGVsbGluZyBlcnJvciBcZXAgOiBtb3ZlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgc3BlbGxpbmcgZXJyb3IKKyAgXGVhIDogbG9vayBmb3IgYWx0ZXJuYXRpdmUgc3BlbGxpbmdzIG9mIHdvcmQgdW5kZXIgY3Vyc29yCisKK1RvIHVzZSBcZWEgeW91IHdpbGwgbmVlZCBhZ3JlcDoKKworICBhZ3JlcCBzb3VyY2U6IDxBCisgIEhSRUY9ImZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgvdXRpbHMvdGV4dC9hZ3JlcC0yLjA0LnRhci5aIj5mdHA6Ly9zdW5zaXRlLnVuYy5lZHUvcHViL0xpbnV4L3V0aWxzL3RleHQvYWdyZXAtMi4wNC50YXIuWjwvQT48QlI+CisgIGFncmVwIFdpbiBleGU6IDxBCisgIEhSRUY9Imh0dHA6Ly93d3cudGdyaWVzLmRlL2FncmVwIj5odHRwOi8vd3d3LnRncmllcy5kZS9hZ3JlcDwvQT48QlI+CisKK1RvIHVzZSB0aGUgc3BlbGwgY2hlY2tlcnMganVzdCBzb3VyY2UgaXQgaW46CisKKyAgZXguICBzbyBlbmdzcGNoay52aW0KKworVG8gcmVhZCBtb3JlIGFib3V0IGl0IHNlZQorCisgIDxBCisgIEhSRUY9Imh0dHA6Ly93d3cuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vaW5kZXguaHRtbCNTcGVsbGluZyI+aHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI1NwZWxsaW5nPC9BPjxCUj4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+TWFraW5nCitQYXJlbnRoZXNpcyBBbmQgQnJhY2tldHMgSGFuZGxpbmcgRWFzaWVyPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1MyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTM8L0E+PEJSPgorCisxKSArKysrKysrKysrKysrKysrKysrKysrKysrKyAiQXV0b21hdGljIiBicmFja2V0IHNldHRpbmcKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIDIpICsrKysrKysrKysrKysgRnVydGhlciBpbXByb3ZlbWVudCBvZgorcGFyZW50aGVzaXMvYnJhY2tldCBleHBhbmRpbmcgKysrKysrKysrKysrKysrKysgMykgKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIkxhdGUiIGJyYWNrZXRpbmcgb2YgdGV4dCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKyA0KQorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgQ29uY2x1c2lvbiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworKysrKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMSkgKysrKysrKysrKysrKysrKysrKysrKysrKysgIkF1dG9tYXRpYyIgYnJhY2tldCBzZXR0aW5nCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCitUbyBhdXRvbWF0aWNhbGx5IGluc2VydCBhIGNsb3NpbmcgcGFyZW50aGVzaXMgd2hlbiB0eXBpbmcgYW4gb3BlbmluZworcGFyZW50aGVzaXMgeW91IGNhbiBpbnNlcnQgdGhlIGZvbGxvd2luZyBzaW1wbGUgbWFwcGluZyB0byB5b3VyIHZpbXJjOgorCisJOmlub3JlbWFwICggKCkmbHQ7RVNDJmd0O2kKKworVGhpcyBlbmRzIHVwIHdpdGggdGhlIGN1cnNvciBiZXR3ZWVuIHRoZSBvcGVuaW5nIGFuZCB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcworaW4gaW5zZXJ0IG1vZGUuCisKK1lvdSBjYW4gYXBwbHkgdGhpcyBhbmQgdGhlIGZvbGxvd2luZyB0aXBzLCBvZiBjb3Vyc2UsIHdpdGggdGhlIGtpbmQgb2YKK3BhcmVudGhlc2lzL2JyYWNrZXQgY2hhcmFjdGVyIHlvdSB3YW50IHRvLCBpLmUuICgsIHssIFssICZsdDsgLi4uLi4gYW5kLAorcHJldHR5IHVzZWZ1bCBhcyB3ZWxsLCBxdW90YXRpb24gbWFya3MgIiwnLC4uLi4gKHRvIGJlIGNvbnRpbnVlZCkKKworMikgKysrKysrKysrKysrKysrIEZ1cnRoZXIgaW1wcm92ZW1lbnQgb2YgcGFyZW50aGVzaXMvYnJhY2tldCBleHBhbmRpbmcKKysrKysrKysrKysrKysrKysrKworCitJIHlvdSBhcmUgcmVhZHkgd2l0aCBmaWxsaW5nIHRoZSBwYXJlbnRoZXNpcy9icmFja2V0cywgeW91IGxpa2VseSB3YW50IHRvCisiZXNjYXBlIiBmcm9tIHRoZSBicmFja2V0cyBhZ2FpbiB0byBjb250aW51ZSBjb2RpbmcuICBUbyBtYWtlIHRoaXMgcHJldHR5Citjb21mb3J0YWJsZSwgSSBpbnZlbnRlZCB0aGUgZm9sbG93aW5nIGtpbmQgb2YgbWFwcGluZ3MsIHdoaWNoIGdldCBvdXQgb2YKK3RoZSBsYXN0IGV4cGFuZGVkIHBhcmVudGhlc2lzL2JyYWNrZXQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdHVhbCB0eXBlIG9mIGl0LAorYW5kIGVudGVyIGFwcGVuZCBtb2RlIGFnYWluLiAgSSBtYXBwZWQgdGhpcyBraW5kIG9mICJnZXRhd2F5IiB3aXRoIENUUkxfaiwKK3lvdSBtYXkgdXNlIHlvdXIgZmF2b3JpdGUga2V5c3Ryb2tlIHdpdGggaXQuCisKKwkJCS4uLgorCTppbm9yZW1hcCAoICgpJmx0O0VTQyZndDs6bGV0IGxlYXZlY2hhcj0iKSImbHQ7Q1ImZ3Q7aSA6aW5vcmVtYXAgWworCVtdJmx0O0VTQyZndDs6bGV0IGxlYXZlY2hhcj0iXSImbHQ7Q1ImZ3Q7aQorCQkJLi4uCisJOmltYXAgJmx0O0MtaiZndDsgJmx0O0VTQyZndDs6ZXhlYyAibm9ybWFsIGYiIC4gbGVhdmVjaGFyJmx0O0NSJmd0O2EKKworRXhwbGFuYXRpb246IFRoZSB2YXJpYWJsZSAibGVhdmVjaGFyIiBjb250ZW50cyB0aGUgYWN0dWFsIGNoYXIgd2hpY2ggaXMgdG8KKyJlc2NhcGUiIGZyb20uCisKKzMpICsrKysrKysrKysrKysrKysrKysrKysrKysrKysgIkxhdGUiIGJyYWNrZXRpbmcgb2YgdGV4dAorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworT2NjYXNpb25hbGx5IEkgbGF0ZXIgd2FudCBhbHJlYWR5IHdyaXR0ZW4gdGV4dCBwYXJ0cyB0byBwdXQgaW4gcGFyZW50aGVzaXMuCisKK0kgdXNlIHRoZSBmb2xsb3dpbmcgbWFjcm8sIHdoaWNoIGJyYWNrZXRzIHByZXZpb3VzbHkgdmlzdWFsbHkgc2VsZWN0ZWQgdGV4dC4KK0kgbWFwcGVkIGl0IHdpdGggXyguCisKKwk6dm5vcmVtYXAgXyggJmx0O0VTQyZndDtgJmd0O2EpJmx0O0VTQyZndDtgJmx0O2koJmx0O0VTQyZndDsKKworRnVydGhlcm1vcmUsIGEgc29ydCBvZiBtYXBwaW5nIGZvciBicmFja2V0aW5nIGEgKnNpbmdsZSB3b3JkKiBpcyBjb25jZWl2YWJsZS4KK0JlY2F1c2UgdGhpcyBpcyBub3QgYXMgZ2VuZXJhbCBsaWtlIHRoZSBraW5kIG9mIHZpc3VhbCBtb2RlIG1hcHBpbmcsIEkgdXNlCit0aGlzIGtpbmQgb2YgIndvcmQgYnJhY2tldGluZyIgb25seSBmb3Igc3Vycm91bmRpbmcgdGhlIHdvcmQgcmlnaHQgYmVoaW5kCit0aGUgY3Vyc29yIGluIGluc2VydCBtb2RlIHdpdGggKiouICBJIHVzZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvICJlbXBoYXNpemUiCit0aGUgd29yZCBpIGp1c3QgdHlwZWQsIGZvciBuZXdzZ3JvdXAgYXJ0aWNsZXMuCisKKwk6aW1hcCBfKiAmbHQ7RXNjJmd0O2JpKiZsdDtFc2MmZ3Q7ZWEqJmx0O1NwYWNlJmd0OworCis0KSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgQ29uY2x1c2lvbgorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKK1NpbmNlIEkgdXNlIHRoZXNlIG1hY3JvcywgSSBuZXZlciBjYXVzZWQgYSBzeW50YXggZXJyb3IgYmVjYXVzZSBvZiBtaXNzaW5nCiticmFja2V0cywgYW5kIGZ1cnRoZXJtb3JlIEkgY2FuIHF1aWNrbHkgaW5zZXJ0IHBhcmVudGhlc2lzIGFuZCBxdXRvdGVzIGludG8KK2NvZGUtIGFuZCBub24tY29kZSBmaWxlcy4KKworIEpIIDA0LjExLjIwMDEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+TWFwcGluZ3MKK3RvIGZhY2lsaXRhdGUgdGhlIGNyZWF0aW9uIG9mIHRleHQ8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTU0Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1NDwvQT48QlI+CisKKyIgIiBNYXBwaW5ncyB0byBmYWNpbGl0YXRlIHRoZSBjcmVhdGlvbiBvZiB0ZXh0ICIgIiBBdXRob3I6ICBTdXJlc2ggR292aW5kYWNoYXIKK3Nnb3ZpbmRhY2hhckB5YWhvby5jb20gIiBEYXRlOgkgICBOb3ZlbWJlciA1LCAyMDAxICIgIiBXaGlsZSB0eXBpbmcgdGV4dCB0bworY3JlYXRlIGEgZG9jdW1lbnQsIEkgb2Z0ZW4gZW5kIHVwIGhpdHRpbmcgIiAmbHQ7RXNjJmd0OywgaXNzdWluZyBzb21lIGNvbW1hbmRzCisod2l0aCBvciB3aXRob3V0ICI6IikgYW5kIGdldHRpbmcgYmFjayAiIHRvIHR5cGluZyBieSBpc3N1aW5nIGEgY29tbWFuZCBzdWNoCithcyAiaSIsICJPIiwgInMiIGV0Yy4gICIgIiBJIGxvb2tlZCBpbnRvIHVzaW5nICJzZXQgaW5zZXJ0bW9kZSIgdG8gc3BlZWQKK3VwIHN1Y2ggYWN0aW9ucywgYnV0ICIgZm91bmQgdGhhdCB0b28gY29uZnVzaW5nLiAgIiAiIEkgaGF2ZSBjb21lIHVwIHdpdGgKK2Egc2V0IG9mIG1hcHBpbmdzIHRoYXQgaGF2ZSBzcGVlZGVkIHVwIG15IHByb2Nlc3MgIiBvZiBjcmVhdGluZyBkb2N1bWVudHMuCitJIGhhdmUgc2F2ZWQgdGhlc2UgbWFwcGluZ3MgaW4gYSBmaWxlLCBuYW1lZCAiIEZ1bGxTY3JlZW5WSS52aW0sIGluIHZpbSdzCitwbHVnaW4gZGlyZWN0b3J5LiAgIiAiIFBlcmhhcHMgeW91IHdpbGwgZmluZCB0aGVzZSBtYXBwaW5ncyBoZWxwZnVsIHRvby4KKyIgIiBQbGVhc2Ugc2VuZCBtZSBmZWVkYmFjay4gICIKKworIlRvIGFsbG93IG92ZXJyaWRpbmcgdGhlIEFsdCBrZXkgc2V0IHdpbmFsdGtleXM9bm8gIlRvIGVuYWJsZSB2aWV3aW5nIG1lc3NhZ2VzCitmcm9tIGNvbW1hbmRzIGlzc3VlZCB1c2luZyB0aGUgbWFwcGluZ3MgcHJlc2VudGVkIGhlcmUgc2V0IGNtZGhlaWdodD0yCisKKyJUaGUgZnVuZGFtZW50YWwgbWFwcGluZyB0aGF0IG1ha2VzIGZ1bGwtc2NyZWVuIGVkaXRpbmcgcG9zc2libGUgaW1hcAorJmx0O0EtbyZndDsgICZsdDtDLW8mZ3Q7IGltYXAgJmx0O0EtOyZndDsgICZsdDtDLW8mZ3Q7OgorCisiQmFzaWMgbW90aW9ucyBpbWFwICZsdDtBLWgmZ3Q7ICAmbHQ7TGVmdCZndDsgaW1hcCAmbHQ7QS1qJmd0OwkmbHQ7RG93biZndDsKK2ltYXAgJmx0O0EtayZndDsgICZsdDtVcCZndDsgaW1hcCAmbHQ7QS1sJmd0OyAgJmx0O1JpZ2h0Jmd0OyBpbWFwICZsdDtBLWYmZ3Q7CismbHQ7UGFnZURvd24mZ3Q7IGltYXAgJmx0O0EtYiZndDsgICZsdDtQYWdlVXAmZ3Q7IGltYXAgJmx0O0EtXiZndDsKKyZsdDtIb21lJmd0OyBpbWFwICZsdDtBLSQmZ3Q7ICAmbHQ7RW5kJmd0OworCisiTnVtYmVycyBmb3IgcmVwZWF0cyBpbWFwICZsdDtBLTEmZ3Q7ICAmbHQ7Qy1vJmd0OzEgaW1hcCAmbHQ7QS0yJmd0OworJmx0O0MtbyZndDsyIGltYXAgJmx0O0EtMyZndDsgICZsdDtDLW8mZ3Q7MyBpbWFwICZsdDtBLTQmZ3Q7ICAmbHQ7Qy1vJmd0OzQKK2ltYXAgJmx0O0EtNSZndDsgICZsdDtDLW8mZ3Q7NSBpbWFwICZsdDtBLTYmZ3Q7ICAmbHQ7Qy1vJmd0OzYgaW1hcCAmbHQ7QS03Jmd0OworJmx0O0MtbyZndDs3IGltYXAgJmx0O0EtOCZndDsgICZsdDtDLW8mZ3Q7OCBpbWFwICZsdDtBLTkmZ3Q7ICAmbHQ7Qy1vJmd0OzkKKworIkJhc2ljIHNlYXJjaGVzIGltYXAgJmx0O0EtLyZndDsgICZsdDtDLW8mZ3Q7LyBpbWFwICZsdDtBLSomZ3Q7ICAmbHQ7Qy1vJmd0OyoKK2ltYXAgJmx0O0EtIyZndDsgICZsdDtDLW8mZ3Q7IyBpbWFwICZsdDtBLW4mZ3Q7ICAmbHQ7Qy1vJmd0O24gaW1hcCAmbHQ7QS1OJmd0OworJmx0O0MtbyZndDtOCisKKyJEZWxldGluZyBpbWFwICZsdDtBLXgmZ3Q7ICAmbHQ7Qy1vJmd0O3ggaW1hcCAmbHQ7QS1kJmd0OyAgJmx0O0MtbyZndDtkIGltYXAKKyZsdDtBLUQmZ3Q7ICAmbHQ7Qy1vJmd0O0QKKworIllhbmtpbmcgYW5kIHB1dHRpbmcgaW1hcCAmbHQ7QS15Jmd0OyAgJmx0O0MtbyZndDt5IGltYXAgJmx0O0EtWSZndDsKKyZsdDtDLW8mZ3Q7WSBpbWFwICZsdDtBLXAmZ3Q7ICAmbHQ7Qy1vJmd0O3AgaW1hcCAmbHQ7QS1QJmd0OyAgJmx0O0MtbyZndDtQCisKKyJDb21tb24gcHJlZml4ZXM6ICBtYXJraW5nLCBtYXRjaGluZyBldGMuICBpbWFwICZsdDtBLX4mZ3Q7ICAmbHQ7Qy1vJmd0O34KK2ltYXAgJmx0O0EtbSZndDsgICZsdDtDLW8mZ3Q7bSBpbWFwICZsdDtBLWAmZ3Q7ICAmbHQ7Qy1vJmd0O2AgaW1hcCAmbHQ7QS0iJmd0OworJmx0O0MtbyZndDsiIGltYXAgJmx0O0EtJSZndDsgICZsdDtDLW8mZ3Q7JSBpbWFwICZsdDtBLWgmZ3Q7ICAmbHQ7Qy1vJmd0OzpoCitpbWFwICZsdDtBLXMmZ3Q7ICAmbHQ7Qy1vJmd0OzpzCisKKyJJbnRlcmFjdGluZyB3aXRoIHRoZSAnb3V0c2lkZScgaW1hcCAmbHQ7QS0hJmd0OyAgJmx0O0MtbyZndDs6ISAgaW1hcAorJmx0O0EtdyZndDsgICZsdDtDLW8mZ3Q7OncmbHQ7Q1ImZ3Q7IGltYXAgJmx0O0EtZSZndDsgICZsdDtDLW8mZ3Q7OmUKKworIk90aGVyIGNvbW1hbmRzIGltYXAgJmx0O0EtdSZndDsgICZsdDtDLW8mZ3Q7dSBpbWFwICZsdDtBLS4mZ3Q7ICAmbHQ7Qy1vJmd0Oy4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+RGVjb21waWxlCitKYXZhIC5jbGFzcyBmaWxlcyBhdXRvbWF0aWNhbGx5PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1NSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTU8L0E+PEJSPgorCitIZXJlJ3MgYSBwbHVnaW4gdG8gYXV0b21hdGljYWxseSBkZWNvbXBpbGUgSmF2YSAuY2xhc3MgZmlsZXMgYXMgdGhleSdyZQorcmVhZCBpbi4gIFR3ZWFrIHRoZSBqYXZhcCBmbGFncyBmb3Igd2hhdCB5b3Ugd2FudCB0byBzZWUuICBJIGRpZG4ndCBwb3N0Cit0aGlzIGFzIGEgc2NyaXB0IGJlY2F1c2UgaXQncyB0b28gc2ltcGxlIGFuZCBpdCdzIHJlYWxseSBtb3JlIHVzZWZ1bCBmb3IKK2RlbW9uc3RyYXRpbmcgaG93IHRvIHJlYWQgZGVjb21waWxhYmxlIGZpbGVzIChvciBvdGhlciBiaW5hcnkgZmlsZXMgdGhhdAorY2FuIGJlIGNvbnZlcnRlZCB0byB0ZXh0KS4KKworZnVuY3Rpb24gczpSZWFkQ2xhc3MoZGlyLCBjbGFzc25hbWUpCisgICAgZXhlY3V0ZSAiY2QgIiAuIGE6ZGlyIGV4ZWN1dGUgIjByZWFkICFqYXZhcCAtYyAiIC4gYTpjbGFzc25hbWUgMSBzZXRsb2NhbAorICAgIHJlYWRvbmx5IHNldGxvY2FsIG5vbW9kaWZpZWQKK2VuZGZ1bmN0aW9uCisKK2F1dG9jbWQgQnVmUmVhZENtZCAqLmNsYXNzCisgICAgXCBjYWxsICZsdDtTSUQmZ3Q7UmVhZENsYXNzKGV4cGFuZCgiJmx0O2FmaWxlJmd0OzpwOmgiKSwKKyAgICBleHBhbmQoIiZsdDthZmlsZSZndDs6dDpyIikpCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmRlc2NyaWJlCismbHQ7dGFibGUgbmFtZSZndDsgZnJvbSB2aW08L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTU2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1NjwvQT48QlI+CisKK2kgaGFkIHNvbWUgdHJvdWJsZSB3aXRoIHRoZSBzcWxwbHVzIHNjcmlwdHMgKHByb2JhYmx5IG15IGZhdWx0KS4gIGJ1dCBpdAorc2VlbWVkIGEgbGl0dGxlIGhlYXZ5IGZvciB3aGF0IGkgbmVlZCwgdXN1YWxseSBhbGwgaSB3YW50IGlzIGEgbGlzdGluZyBvZgordGhlIGNvbHVtbnMgZm9yIGEgZ2l2ZW4gdGFibGUgd2hpbGUgaSdtIHdoaXBwaW5nIG9uIHNvbWUgc3FsIGluc2lkZSB2aW0uCisKK3NvIGkgd3JvdGUgYSBiYXNoIHNjcmlwdCAoZGVzY3JpYmUpLi4uCisKK35+fn5+fn5+fn5+fn5+fmJlZ2luIGRlc2NyaWJlIHNjcmlwdCAjIS91c3IvYmluL2Jhc2gKKworZj1hVGVtcEZpbGUuc3FsIHU9Jmx0O3VOYW1lJmd0OyBwPSZsdDtwV29yZCZndDsgZD0mbHQ7ZEJhc2UmZ3Q7CisKK2VjaG8gIi8qIGRlc2NyaWJlIGZvciAkMSIgZWNobyAiZGVzY3JpYmUgJDE7IiAmZ3Q7ICRmOyBlY2hvICJxdWl0OyIKKyZndDsmZ3Q7ICRmOworCitzcWxwbHVzIC1TICR1LyRwQCRkIEAkZiBybSAtZiAkZjsgZWNobyAiIGVuZCBkZXNjcmliZSBmb3IgJDEgKi8iCit+fn5+fn5+fn5+fn5+fn5lbmQgZGVzY3JpYmUgc2NyaXB0CisKK3lvdXIgcGF0aCBuZWVkcyB0byBpbmNsdWRlIHRoZSBzY3JpcHQgKGFzIHdlbGwgYXMgc3FscGx1cyksIHRoZW4gZnJvbSB2aW0KK3lvdSBjYW4ganVzdCB0eXBlLi4uLgorCis6ciAhZGVzY3JpYmUgJmx0O3RhYmxlTmFtZSZndDsKKworYW5kIHlvdSBnZXQgYSBsaXN0aW5nIG9mIHRoZSB0YWJsZSBjb2x1bW5zIHNsYW1tZWQgaW50byB3aGVyZXZlciB5b3VyIGN1cnNvcgord2FzLCBjb21wbGV0ZSB3aXRoIGphdmEvYyBjb21tZW50cworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+SW5jcmVkaWJsZSBuZXcgZnVuY3Rpb25hbGl0eTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTU3PC9BPjxCUj4KKworaWYgeW91IGdldCBhd2F5IGZyb20gdmltIGFuZCBnZXQgYW55IG90aGVyIGVkaXRvciB0aGF0IHdhcyBidWlsdCAqYWZ0ZXIqCisxOTcwLi4uLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Vc2luZworQ29tcHV0ZXIgTW9kZXJuIFRUIGFzIGd2aW0gZm9udCAoV2luMzIpPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTg8L0E+PEJSPgorCitJZiB5b3UgcmVhbGx5IGxpa2UgdGhlIENvbXB1dGVyIE1vZGVybiB0eXBld3JpdGVyIGZvbnQgKGFzIHNlZW4gaW4gbW9zdCBUZVgKK2Rpc3RyaWJ1dGlvbnMpIHlvdSBjYW4gdXNlIGl0IGFzIHRoZSBmb250IGluIGd2aW0hIChsb29rcyBleGNlbGxlbnQgd2l0aAorZm9udCBzbW9vdGhpbmcgdHVybmVkIG9uKQorCitGaXJzdCwgZ2V0IGhvbGQgb2YgdGhlIGZyZWUgQmx1ZSBTa3kgVHlwZSAxIFBTIHZlcnNpb25zIG9mIHRoZSBDTSBmb250cyBmcm9tCit5b3VyIGxvY2FsIENUQU4gbWlycm9yLiBVbnBhY2sgdG8gYSBzdWl0YWJsZSBkaXJlY3RvcnkuCisKK05leHQgbG9jYXRlIHRoZSBjbXR0OC5wZmIgZmlsZSBhbmQgb3BlbiBpdCAoaW4gVmltLCBuYXR1cmFsbHkgOykgLSBmaW5kIHRoZQorbGluZSBzYXlpbmcgZHVwIDMyIC92aXNpYmxlc3BhY2UgcHV0CisKK2FuZCBjaGFuZ2UgaXQgdG8gZHVwIDMyIC9zcGFjZQkgICAgICBwdXQKKwordGhhdCBpcywgaW5zZXJ0aW5nIGVub3VnaCBzcGFjZXMgdG8ga2VlcCB0aGUgZmlsZSBzaXplIGV4YWN0bHkgdGhlIHNhbWUKKyhJTVBPUlRBTlQhKQorCitTYXZlIHRoZSBmaWxlIGluIE1hYyBmb3JtYXQgKDpzZXQgZmlsZWZvcm1hdD1tYWMpLgorCitOb3cgaW5zdGFsbCB0aGUgY210dC5wZm0gZmlsZSAtIGluIFdpbjl4L05UNCwgeW91J2xsIG5lZWQgQWRvYmUgVHlwZSBNYW5hZ2VyCisoZnJlZSBkb3dubG9hZCksIGJ1dCBpbiBXaW4yaywgeW91IGNhbiBqdXN0IGRyb3AgdGhlIC5wZm0gZmlsZSBpbnRvIHRoZQorRm9udHMgZm9sZGVyLgorCitOb3cgaW4geW91ciBfZ3ZpbXJjOiBzZXQgZ3VpZm9udD1DTVRUODpoMTE6Y1NZTUJPTAorCisodXNlIHdoYXRldmVyIGhlaWdodCB5b3UgbGlrZSBpbnN0ZWFkIG9mIGgxMSkKKworLi5hbmQgZW5qb3khIEl0J3MgdGhlIGZpcnN0IHNjYWxhYmxlIGZvbnQgSSBjYW4gYmVhciB0byBlZGl0IGNvZGUgaW4uLi4gJS0pCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPktleXN0cm9rZQorU2F2aW5nIFN1YnN0aXR1dGluZyBhbmQgU2VhcmNoaW5nPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE1OSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNTk8L0E+PEJSPgorCisxKSArKysrKysrKysrKysrKyBTYXZpbmcgS2V5c3Ryb2tlcyBmb3IgY29tbW9uIFNlYXJjaGluZworYW5kIFN1YnN0aXR1dGluZyArKysrKysrKysrKyAtLS0gYSkgU2VhcmNoaW5nICBiKSBTdWJzdGl0dXRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAyKSArKysrICBTZWFyY2hpbmcgZm9yCityZXNwLiBTdWJzdGl0dXRpbmcgb2YgdGhlIGN1cnJlbnQgd29yZCB1bmRlciB0aGUgY3Vyc29yICsrKysrKyAtLS0gYSkgU2VhcmNoaW5nCitiKSBTdWJzdGl0dXRpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszKSArKyBTZWFyY2hpbmcgYW5kIFN1YnN0aXR1dGluZyBmb3IgYW4gYXJiaXRyYXJ5IHZpc3VhbGx5CitzZWxlY3RlZCBwYXJ0IG9mIHRleHQgKysrKyAtLS0gYSkgU2VhcmNoaW5nICBiKSBTdWJzdGl0dXRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorNCkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysgIENvbmNsdXNpb24KKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxKSArKysrKysrKysrKysrKyBTYXZpbmcgS2V5c3Ryb2tlcyBmb3IgY29tbW9uIFN1YnN0aXR1dGluZyBhbmQgU2VhcmNoaW5nCisrKysrKysrKysrKworCithKSBTZWFyY2hpbmcgLi4uLi4uLi4uLi4uICBTb3JyeSwgdGhlcmUgaXMgbm90IG11Y2ggdGhhdCBjYW4gYmUgc2F2ZWQgZm9yCitjb21tb24gU2VhcmNoaW5nLiBJdCdzIGp1c3QgaGl0dGluZyAvbXlwYXR0ZXJuJmx0O1JFVFVSTiZndDsKKworYikgU3Vic3RpdHV0aW5nIC4uLi4uLi4uLiAgSSB0aGluaywgY29tbW9uIHN1YnN0aXR1dGlvbiByZXF1aXJlcyBwcmV0dHkgbWFueQora2V5c3Ryb2tlcy4gU28gSSB1c2UgdGhlIGZvbGxvd2luZyBtYWNybyB3aXRoIG15IGZhdm9yaXRlIHN1YnN0aXR1dGlvbiBvcHRpb25zOgorCis6bWFwICZsdDtGNCZndDsgOiVzLy9nYyZsdDtMZWZ0Jmd0OyZsdDtMZWZ0Jmd0OyZsdDtMZWZ0Jmd0OworCitUaGlzIGVuZHMgdXAgd2l0aCB0aGUgY3Vyc29yIGFmdGVyIHRoZSBmaXJzdCAnLycgaW4gdGhlCitjb21tYW5kbGluZS4gVG8gY29tcGxldGUgaXQsIHlvdSBvbmx5IGhhdmUgdG8gZW50ZXIgLSZndDsKK215b2xkcGF0dGVybi9teW5ld3BhdHRlcm4mbHQ7UkVUVVJOJmd0OworCitSZW1hcms6IEkgbWFwcGVkIGl0IHRvICZsdDtGNCZndDsgKGNhdXNlIG9mIHRyaWJ1dGUgdG8gdGhlICZsdDtGNCZndDsgb2YKK3RoZSBnb29kIG9sZCBOb3J0b24gQ29tbWFuZGVyIGVkaXRvcikuIFlvdSBtYXkgbWFwIGl0IHdoZXJlIHlvdSB3YW50IHRvLgorCisyKSArKysrICBTZWFyY2hpbmcgZm9yIHJlc3AuIFN1YnN0aXR1dGluZyBvZiB0aGUgY3VycmVudCB3b3JkIHVuZGVyIHRoZQorY3Vyc29yICsrKysrKworCithKSBTZWFyY2hpbmcgLi4uLi4uLi4uLi4uICBJZiB5b3UgZG9uJ3Qga25vdyBob3cgdG8gbG9vayBmb3IgdGhlIG5leHQKK29jY3VyZW5jZSBvZiB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLCB5b3Ugc2hvdWxkICpub3cqIHR5cGUgOmhlbHAgKiBvcgorOmhlbHAgc3RhciBvciByZWZlciB0byB0aGUgdGlwcyB2aW10aXAgIzEgb3IgdmltdGlwICM1ICgoVGlwIHdpdGhpbiB0aXA6CitUbyBtYWtlIHlvdXIgcGF0dGVybiBtb3JlIHZpc2libGUsIGxvb2sgZm9yIDpoZWxwIGhscykpCisKK2IpIFN1YnN0aXR1dGluZyAuLi4uLi4uLi4gIFRoZSBmb2xsb3dpbmcgbWFjcm8gZXh0ZW5kcyB0aGUgb25lIGFib3ZlIHdpdGgKK2F1dG9tYXRpY2FsbHkgaW5zZXJ0aW5nIHRoZSBjdXJyZW50IHdvcmQgdW5kZXIgdGhlIGN1cnNvciBpbnRvIHRoZSBmcm9tIC0KK3BhdHRlcm4gb2YgdGhlIDpzIGNvbW1hbmQuCisKKzptYXAgJmx0O1MtRjQmZ3Q7Cis6JXMvJmx0O0MtciZndDsmbHQ7Qy13Jmd0Oy8vZ2MmbHQ7TGVmdCZndDsmbHQ7TGVmdCZndDsmbHQ7TGVmdCZndDsKKworVG8gY29tcGxldGUgaXQsIGp1c3QgZW50ZXIgLSZndDsgICBteW5ld3BhdHRlcm4mbHQ7UkVUVVJOJmd0OworCitJIHVzZSB0aGlzIGkuZS4gZm9yIHJlbGlhYmxlIGFuZCBxdWlja2x5IHJlbmFtaW5nIGEgdmFyaWFibGUgaW4gdGhlIGVudGlyZQorYnVmZmVyLiAgSSBtYXBwZWQgaXQgdG8gU2hpZnQtJmx0O0Y0Jmd0Oy4gWW91IG1heSBtYXAgaXQgdG8gdGhlIGtleXN0cm9rZQoreW91IHdhbnQuCisKK0V4cGxhbmF0aW9uOiBDVFJMLXYrQ1RSTC13IGV4cGFuZHMgdG8gdGhlIHdvcmQgdW5kZXIgdGhlIGN1cnNvci4KKworMykgKysgU2VhcmNoaW5nIGFuZCBTdWJzdGl0dXRpbmcgZm9yIGFuIGFyYml0cmFyeSB2aXN1YWxseSBzZWxlY3RlZCBwYXJ0IG9mCit0ZXh0ICsrKysKKworSWYgeW91IHdhbnQgdG8gbG9vayBvciBzdWJzdGl0dXRlIChmb3IpIGFuICphcmJyaXRhcnkqIHBhdHRlcm4gKHdoaWNoCithbHJlYWR5IGV4aXN0cyBhdCBsZWFzdCBvbmNlIGluIHlvdXIgdGV4dCksIHRoZSBmb2xsb3dpbmcgMiBtYXBwaW5ncyBkbyBpdAorZm9yIHlvdS4gIFRoZSBhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgZG9udCBoYXZlIHRvIHR5cGUgYWdhaW4gb3IgY3V0ICYgcGFzdGUKK3RoZSBhcHByb3ByaWF0ZSB0ZXh0IGJ1dCBvbmx5IGhhdmUgdG8gdmlzdWFsbHkgc2VsZWN0IGl0LgorCithKSBTZWFyY2hpbmcgLi4uLi4uLi4uLi4KKworOnZtYXAgLyB5OmV4ZWN1dGUgIi8iLmVzY2FwZShAIiwnW10vXC4qJykmbHQ7Q1ImZ3Q7CisKK1RoaXMgaW1tZWRpYXRlbHkgZmluZHMgdG8gdGhlIG5leHQgb2NjdXJlbmNlIG9mIHRoZSBwcmV2aW91c2x5IHZpc3VhbGx5CitzZWxlY3RlZCB0ZXh0LgorCitiKSBTdWJzdGl0dXRpbmcgLi4uLi4uLi4uCisKKzp2bWFwICZsdDtGNCZndDsgeTpleGVjdXRlCisiJXMvIi5lc2NhcGUoQCIsJ1tdL1wnKS4iLy9nYyImbHQ7TGVmdCZndDsmbHQ7TGVmdCZndDsmbHQ7TGVmdCZndDsmbHQ7TGVmdCZndDsKKworQWdhaW4sIGFzIGluIHRoZSBtYXBwaW5nIGluIGNoYXB0ZXIgMiksIHlvdSBqdXN0IGhhdmUgdG8gY29tcGxldGUgaXQgYnkKK2VudGVyaW5nIC0mZ3Q7IG15bmV3cGF0dGVybiZsdDtSRVRVUk4mZ3Q7CisKK0V4cGxhbmF0aW9uL0Rpc2N1c3Npb246IFdoYXQgYm90aCBTdWJzdGl0dXRpbmcgYW5kIFNlYXJjaGluZyBpbiB0aGlzIHdheQorZ2VuZXJhbGx5IGRvZXMgaXM6IC0gKnkqYW5raW5nIHRoZSBzZWxlY3RlZCB0ZXh0IC0gSW5zZXJ0aW5nIHRoZSB2aXN1YWxseQorc2VsZWN0ZWQgdmlhIGFkcmVzc2luZyB0aGUgJyInIHJlZ2lzdGVyIHdpdGggJ0AiJyBhcyBhCisgIHBhcmFtZXRlciBvZiB0aGUgZXNjYXBlKCkgZnVuY3Rpb24gZ29pbmcgZmluYWxseSBpbnRvIHRoZSAnbXlvbGRwYXR0ZXJuJworICBwYXJ0LiAgVGhlIHRyaWNrZXJ5IHByb2JsZW0gaXMsIGlmIHlvdSBoYXZlIGNoYXJhY3RlcnMgaW4geW91ciBteW9sZHBhdHRlcm4sCisgIHdoaWNoIGFyZSByZWd1bGFyIGV4cHJlc3Npb24gY2hhcnMsIHRoZXkgYXJlIHJlY29nbml6ZWQgYW5kIHRocmVhdGVkCisgIGFjY29yZGluZ2x5LglUaGF0IGlzIG1vc3QgbGlrZWx5IG5vdCB3aGF0IHlvdSB3YW50ZWQuICBUbyBlc2NhcGUgdGhlbSwgdGhlc2UKKyAgY2hhcnMgaGF2ZSB0byBiZSBkZWNsYXJlZCBieSB0aGUgc2Vjb25kIHBhcmFtZXRlciBvZiB0aGUgZXhjYXBlKCkgZnVuY3Rpb24sCisgIHdoaWNoIHRoZW4gZXNjYXBlcyB0aGVtIHdpdGggYSBiYWNrc2xhc2guICBUaGUgZmV3IGNoYXJhY3RlcnMgYWJvdmUgd29yaworICBmb3IgbWUuIElmIHlvdSBydW4gaW50byBwcm9ibGVtcywgeW91IHNob3VsZCBjaGVjayBmb3IgYWRkaXRpb25hbCByZWdleHAKKyAgY2hhcnMgaW4geW91ciB0ZXh0LCBhbmQgdHJ5IHRvIGVzY2FwZSB0aGVtIGJ5IGFkZGluZyB0aGVtIHRvIHRoZSBlc2NhcGUoKQorICBmdW5jdGlvbiBwYXJhbWV0ZXIuCisKKzQpICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICBDb25jbHVzaW9uCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKK1dpdGggdGhlIGFwcHJvcHJpYXRlIG1hcHBpbmdzIGluIHlvdXIgdmltcmMgeW91IGNhbiBzYXZlIGtleXN0cm9rZXMgd2hlbgorU2VhcmNoaW5nIG9yIFN1YnN0aXR1dGluZyBhbmQgYXZvaWQgdHlwaW5nIGVycm9ycy4gVGhhdCB3YXksIHlvdSBjYW4gdGFrZQorbHVuY2ggc29vbmVyCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5EdXRjaCBzcGVsbGluZyBjaGVja2VyPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE2MSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjE8L0E+PEJSPgorCitEb3dubG9hZCBhdCA8QQorSFJFRj0iaHR0cDovL3d3dy50aG9tZXIuY29tL3Rob21lci92aS9ubHNwY2hrLnZpbS5nei4iPmh0dHA6Ly93d3cudGhvbWVyLmNvbS90aG9tZXIvdmkvbmxzcGNoay52aW0uZ3ouPC9BPjxCUj4KKworVGhpcyBzY2lyaXB0IGlzIGJhc2VkIG9uIENoYXJsZXMgRS4gQ2FtcGJlbGwncyBFbmdsaXNoIHNwZWxsaW5nIGNoZWNrZXIgc2NyaXB0Citmb3IgVmlNICg8QSBIUkVGPSJodHRwOi8vdXNlcnMuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vKSBhbmQgUGlldCBUdXRlbGFlcnMnCitEdXRjaCB3b3JkIGxpc3QgKGh0dHA6Ly93d3cubnRnLm5sL3NwZWxsLW5sLXY1Yi8pIHVzaW5nICBUaG9tYXMgS/ZobGVyJ3MKK3NjcmlwdCAoaHR0cDovL2plYW5sdWMtcGljYXJkLmRlL3ZpbS9nZXJzcGNoay9jcmVhdGUpLiBJbiBvdGhlciB3b3JkcywgSQorZGlkbid0IGRvIG11Y2guIj5odHRwOi8vdXNlcnMuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vKSBhbmQgUGlldCBUdXRlbGFlcnMnCitEdXRjaCB3b3JkIGxpc3QgKGh0dHA6Ly93d3cubnRnLm5sL3NwZWxsLW5sLXY1Yi8pIHVzaW5nICBUaG9tYXMgS/ZobGVyJ3MKK3NjcmlwdCAoaHR0cDovL2plYW5sdWMtcGljYXJkLmRlL3ZpbS9nZXJzcGNoay9jcmVhdGUpLiBJbiBvdGhlciB3b3JkcywKK0kgZGlkbid0IGRvIG11Y2guPC9BPjxCUj4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+d3JpdGUKK3BsdWdpbiB3aXRoIGV4cGxvcmVyIGxpa2UgaW50ZXJmYWNlczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTYyPC9BPjxCUj4KKworU2V2ZXJhbCBwbHVnaW5zIHVzZSBhIHRleHQgYmFzZSBpbnRlcmZhY2UgYmFzZWQgb24gYSBzcGVjaWFsIGJ1ZmZlciwgdGhpcworaXMgdGhlIGNhc2Ugb2YgdGhlIHN0YW5kYXJkIGV4cGxvcmVyIHBsdWdpbiwgc2V2ZXJhbCBidWZleHBsb3JlciBwbHVnaW5zLAordGhlIG9wdGlvbiBidWZmZXIgYW5kIG90aGVycy4uLiAgSGVyZSBpcyBhIHF1aWNrIGd1aWRlIGluIGhvdyB0byBkbyB0aGlzCisKK1dyaXRpbmcgYSBzcGVjaWFsIGJ1ZiBzY3JpcHQKKwl8IHVzaW5nIGEgc3BlY2lhbCBidWZmZXIgaXMgYSBjb21tb24gdGVjaG5pYyB3aGVuIHdyaXRpbmcKKwlWaW0gc2NyaXB0cywgaXQgaXMgdXNlZCBieSB8IGV4cGxvcmVyLCBidWZleHBsb3JlciwKKwlEaXJEaWZmLi4uICB8IEknbSBjdXJyZW50bHkgd3JpdGluZyBvbmUgZm9yIFRhZ3NCYXNlLnZpbSB8IDxBCisJSFJFRj0iaHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvc2NyaXB0cy9zY3JpcHQucGhwP3NjcmlwdF9pZD0xMDAKKwkiPmh0dHA6Ly92aW0uc291cmNlZm9yZ2UubmV0L3NjcmlwdHMvc2NyaXB0LnBocD9zY3JpcHRfaWQ9MTAwIDwvQT48QlI+CisJfCBhbmQgSSdsbCB1c2UgdGhpcyBkb2N1bWVudCB0byB0YWtlIG5vdGVzIG9uIGhvdyB0byBkbyBpdC4gIHwKKworU2V0dGluZyB1cCB0aGUgYnVmZmVyCisJT3BlbmluZyB0aGUgd2luZG93IFRPRE8KKworCVVzaW5nIGEgc2V0dXAgZnVuY3Rpb24KKwkJUHJpbmNpcGxlCisJCQl8IHdlIGNhbiB1c2UgYSBzcGVjaWZpYyBmdW5jdGlvbiB0byBvcGVuIGFuZCBzZXR1cAorCQkJdGhlIHNwZWNpYWwgYnVmZmVyLiBzOlNldHVwQnVmKCkKKwkJU2V0dXAgRnVuY3Rpb24gYWR2YW50YWdlCisJCQl8IHNpbmNlIHRoZSBjb21tYW5kIHdpbGwgYmUgZGVmaW5lZCBpbiB0aGUgbWFpbgorCQkJc2NyaXB0IHlvdSB8IGNhbiB1c2Ugc2NyaXB0IGxvY2FsIGZ1bmN0aW9ucworCVVzaW5nIGEgc3BlY2lhbCBmaWxldHlwZQorCQlQcmluY2lwbGUKKwkJCXwgd2UgY2FuIGFsc28gdXNlIGEgbmV3IGZpbGV0eXBlIGFuZCBkaXN0cmlidXRlIGEKKwkJCXN5bnRheCBhbmQgYW4gZnRwbHVnaW4gZm9yIHRoaXMgfCBmaWxldHlwZSwgdGhlIG9ubHkKKwkJCXRoaW5nIG5lZWRlZCBpbiB0aGlzIGNhc2UgaXMgdG8gc2V0IHRoZSB8IGZpbGV0eXBlCisJCQlhZnRlciBjcmVhdGluZyB0aGUgYnVmZmVyCisJCUZpbGV0eXBlIGFkdmFudGFnZQorCQkJfCBiZXR0ZXIgc2VwYXJhdGlvbnMgb2YgZGlmZmVyZW50IHBhcnRzIG9mIHlvdXIKKwkJCXNjcmlwdC4gSWYgfCB0aGUgbWFpbiBmdW5jdGlvbiBvZiB5b3VyIHBsdWdpbiBpcworCQkJbm90IHRvIGhhdmUgdGhpcyB8IHNwZWNpYWwgYnVmZmVyIHRoZW4gaXQgaXMgbmljZQorCQkJdG8gYXZvaWQgY2x1dGVyaW5nIGl0LgorCVRoaW5ncyB3aGljaCBuZWVkcyB0byBiZSBkb25lIHRvIHNldHVwIHRoZSBidWZmZXIKKwkJVGhlIGJ1ZmZlciBzaG91bGQgbm90IGJlIGxpc3RlZCBhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0bworCQlhIGZpbGUKKwkJCSogc2V0bG9jYWwgYnVmdHlwZT1ub2ZpbGUgLQkgIG9wdGlvbnMgYWx3YXlzIGxvY2FsCisJCQl0byBidWZmZXIgKiBzZXQgbm9idWZsaXN0ZWQgKiBzZXQgYnVmaGlkZGVuPWRlbGV0ZSAqCisJCQlzZXQgbm9tb2RpZmlhYmxlCisJCVNldHVwIHRoZSBzeW50YXggZm9yIHRoaXMgYnVmZmVyCisJCQl8IHNlZSA6aGVscCBzeW50YXggfCBUaGlzIGlzIHVzdWFsbHkgZG9uZSBpbiB0d28KKwkJCXN0ZXBzLCBmaXJzdCBkZXNjcmliZSB0aGUgfCBzeW50YXggZ3JvdXBzIHVzaW5nIDpzeW4KKwkJCWNvbW1hbmRzIHRoZW4gc2V0dXAgdGhlIHwgaGlsaWdodGluZyB1c2luZyA6aGkgZGVmCisJCQlsaW5rIGNvbW1hbmRzLglVc3VhbGx5IGl0IGlzIHwgYmVzdCB0byBsaW5rIHRoZQorCQkJbmV3bHkgZGVmaW5lZCBncm91cHMgdG8gcHJlZGVmaW5lIG9uZXMgaW4gfCBvcmRlcgorCQkJdG8gbWFrZSB0aGUgY29sb3Jpbmcgd29yayBmaW5lIHdpdGggY29sb3JzY2hlbWVzLgorCQkJfCBZb3UnbGwgZmluZCB0aGUgbGlzdCBvZiBwcmVkZWZpbmVkIGdyb3VwIGJ5IGRvaW5nOgorCQkJfCA6aGVscCBncm91cC1uYW1lCisJCVNldHVwIHRoZSBzcGVjaWFsIG1hcHBpbmdzCisJCQl8IHNpbmNlIHdlIGhhdmUgY2hvc2VuIHRvIHVzZSB0aGUgc2V0IG5vbW9kaWZpYWJsZQorCQkJb3B0aW9uIHwgb3VyIGJ1ZmZlciB3aWxsIG5ldmVyIGJlIGluIGluc2VydCBtb2RlLiBBbGwKKwkJCW91ciBtYXBwaW5nIHwgYXJlIGluIE5vcm1hbCwgVmlzdWFsIG9yIG9wZXJhdG9yCisJCQlwZW5kaW5nLCB0aGV5IHNob3VsZCB8IHRoZXJlZm9yZSB1c2UgdGhlIG1hcCwgbm1hcCwKKwkJCXZtYXAgYW5kIG9tYXAgbWFwcGluZyBjb21tYW5kIHwgcGx1cyB0aGUgYXNzb2NpYXRlZAorCQkJJ25vcmUnIHZlcnNpb24uICBJIHVzdWFsbHkgZmluZCBpdCB8IGJldHRlciB0byB1c2UgdGhlCisJCQknbm9yZScgdmVyc2lvbiB0byBhdm9pZCBzdXJwcmlzZXMgZHVlIHRvIHwgbWFwcGluZworCQkJaW4gdGhlIHVzZXIgY29uZmlndXJhdGlvbi4gIHwgfCBXZSBhbHNvIHdhbnQgb3VyCisJCQltYXBwaW5ncyB0byBiZSBsb2NhbCB0byB0aGUgc3BlY2lhbCB8IGJ1ZmZlciBzbyBhbGwKKwkJCXRoZSBjb21tYW5kcyB3aWxsIHVzZSB0aGUgJmx0O2J1ZmZlciZndDsgbW9kaWZpZXIuCisJCQl8IHwgRmluYWxseSB3ZSB3YW50IG91ciBtYXBwaW5ncyBub3QgdG8gcG9sdXRlIHRoZQorCQkJc3RhdHVzIGJhciB8IHNvIHdlIHVzZSB0aGUgJmx0O3NpbGVudCZndDsgbW9kaWZpZXIgfAorCQkJfCBQdXR0aW5nIGFsbCB0aGlzIHRvZ2V0aGVyIHdlIGVuZCB1cCB3aXRoIG1hcHBpbmcKKwkJCWNvbW1hbmRzIHwgd2hpY2ggbG9vayBsaWtlOiB8IG5vcmVtYXAgJmx0O2J1ZmZlciZndDsKKwkJCSZsdDtzaWxlbnQmZ3Q7IHtsaHN9IHtyaHN9CisJCVNldHVwIHRoZSBzcGVjaWFsIGNvbW1hbmQKKwkJCXwgd2Ugd2lsbCB0aGVuIHNldHVwIHNwZWNpYWwgY29tbWFuZHMgZm9yIHRoaXMgYnVmZmVyLgorCQkJTGlrZSB8IGZvciB0aGUgbWFwcGluZyB0aGVyZSBhcmUgc29tZSBwcmVjYXV0aW9ucyB0bworCQkJdGFrZTogfCB3ZSBkb24ndCB3YW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGNvbW1hbmQKKwkJCWlzIGRlZmluZWQgfCB0d2ljZSBzbyB3ZSB1c2UgdGhlIGNvbW1hbmQhIHZhcmlhbnQuICB8CisJCQlXZSB3YW50IGEgY29tbWFuZCBsb2NhbCB0byBvdXIgYnVmZmVyIHdvIHdlIHVzZSB0aGUgfAorCQkJLWJ1ZmZlciBhdHRyaWJ1dGUuICBUaGUgcmVzdHMgb2YgdGhlIGNvbW1hbmQgYXR0cmlidXRlcworCQkJfCAgYW5kIG9wdGlvbnMgZGVwZW5kIG9uIHRoZSBhY3R1YWwgY29tbWFuZC4gIHwgIFNvCisJCQlvdXIgY29tbWFuZHMgbG9vayBsaWtlOiB8ICBjb21tYW5kISAtYnVmZmVyIHthdHRyfQorCQkJe2NtZH0ge3JlcH0gfCAgd2hlcmUgYXR0ciBpcyBvcHRpb25hbC4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlRvZ2dsZSBTZWFyY2ggSGlnaGxpZ2h0aW5nPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE2MyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjM8L0E+PEJSPgorCisiIE1hcCBIIHRvIHRvZ2dsZSBzZWFyY2ggaGlnaGxpZ2h0aW5nIG1hcCBIIDpsZXQgJmhsc2VhcmNoID0KKyEmaGxzZWFyY2gmbHQ7Q1ImZ3Q7CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk1ha2UKK25vbi1BU0NJSSBjaGFyYWN0ZXJzIGRpc3BsYXllZCBvbiBjb25zb2xlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE2NCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjQ8L0E+PEJSPgorCitJIGhhZCBhIHByb2JsZW0gd2l0aCBWSU0gb24gdGhlIEZyZWVCU0QgY29uc29sZTogaXQgZGlkbid0IGRpc3BsYXkgY2hhcmFjdGVycworbGlrZSBHZXJtYW4gdW1sYXV0cyBjb3JyZWN0bHksIGJ1dCBlc2NhcGVkIHRoZW0gd2l0aCBhIHRpbGRlLiBUaGUgc29sdXRpb24KK2lzIHRvIHRlYWNoIFZJTSBhYm91dCBwcmludGFibGUgY2hhcmFjdGVycy4gSSB1c2UgdGhlIGZvbGxvd2luZyBvbiBteSAudmltcmM6CisKK3NldCBpc3ByaW50PUAsMTI4LTI1NQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5EZWxldGluZworYSBidWZmZXIgd2l0aG91dCBjbG9zaW5nIHRoZSB3aW5kb3c8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTY1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE2NTwvQT48QlI+CisKK0knbSBub3Qgc3VyZSBpZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWxyZWFkeSB3aXRoaW4gVmltLCBidXQgSSBzb21ldGltZXMgSQorZmluZCBpdCB1c2VmdWwgdG8ga2VlcCBhIHNwbGl0IHdpbmRvdyBmcm9tIGNsb3Npbmcgd2hlbiBkZWxldGluZyBhIGJ1ZmZlci4KK1RoaXMgaGFzIGFscmVhZHkgYmVlbiBkaXNjdXNzZWQgb24gdGhlIHZpbUB2aW0ub3JnIG1haWxpbmcgbGlzdC4gIEhvd2V2ZXIsCitJIGZlZWwgdGhpcyBzb2x1dGlvbiBpcyBhIGxpdHRsZSBlYXNpZXIgdG8gdXNlLgorCisiIFB1dCB0aGlzIGludG8gLnZpbXJjIG9yIG1ha2UgaXQgYSBwbHVnaW4uICAiIE1hcHBpbmcgOkJjbG9zZSB0byBzb21lCitrZXlzdHJva2Ugd291bGQgcHJvYmFibHkgYmUgbW9yZSB1c2VmdWwuICAiIEkgbGlrZSB0aGUgd2F5IGJ1Zmxpc3RlZCgpCitiZWhhdmVzLCBidXQgc29tZSBtYXkgbGlrZSB0aGUgYmVoYXZpb3IgIiBvZiBvdGhlciBidWZmZXIgdGVzdGluZyBmdW5jdGlvbnMuCisKK2NvbW1hbmQhIEJjbG9zZSBjYWxsICZsdDtTSUQmZ3Q7QnVmY2xvc2VDbG9zZUl0KCkKKworZnVuY3Rpb24hICZsdDtTSUQmZ3Q7QnVmY2xvc2VDbG9zZUl0KCkKKwlsZXQgbDpjdXJyZW50QnVmTnVtID0gYnVmbnIoIiUiKSBsZXQgbDphbHRlcm5hdGVCdWZOdW0gPSBidWZucigiIyIpCisKKwlpZiBidWZsaXN0ZWQobDphbHRlcm5hdGVCdWZOdW0pCisJCWJ1ZmZlciAjCisJZWxzZQorCQlibmV4dAorCWVuZGlmCisKKwlpZiBidWZucigiJSIpID09IGw6Y3VycmVudEJ1Zk51bQorCQluZXcKKwllbmRpZgorCisJaWYgYnVmbGlzdGVkKGw6Y3VycmVudEJ1Zk51bSkKKwkJZXhlY3V0ZSgiYmRlbGV0ZSAiLmw6Y3VycmVudEJ1Zk51bSkKKwllbmRpZgorZW5kZnVuY3Rpb24KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+TWFwcGluZworY2FwcyBsb2NrIHRvIGVzYyBpbiBYV2luZG93czwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjYiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTY2PC9BPjxCUj4KKworKFRoaXMgb3JpZ2luYWxseSBhcHBlYXJlZCBvbiB0aGUgdmltIG1haWxpbmcgbGlzdCBhcyBwb3N0IGJ5IEFkYW0gTW9uc2VuIDxBCitIUkVGPSJodHRwOi8vZ3JvdXBzLnlhaG9vLmNvbS9ncm91cC92aW0vbWVzc2FnZS8xOTg1NikiPmh0dHA6Ly9ncm91cHMueWFob28uY29tL2dyb3VwL3ZpbS9tZXNzYWdlLzE5ODU2KTwvQT48QlI+CisKK0lmIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgc3dhcCBjYXBzIGxvY2sgYW5kIGVzY2FwZSwgeW91IGhhdmUgdG8gcmVwbGFjZQordGhlICJMb2NrIiBvbiBjYXBzIGxvY2suIERyb3AgdGhpcyBmaWxlIGluIHlvdXIgaG9tZSBkaXI6Jmx0O2JyJmd0OworLS0tLS0tLS0tLS1zdGFydC0tLS0tLS0tLS0tLSZsdDticiZndDsgISBTd2FwIGNhcHMgbG9jayBhbmQgZXNjYXBlJmx0O2JyJmd0OworcmVtb3ZlIExvY2sgPSBDYXBzX0xvY2smbHQ7YnImZ3Q7IGtleXN5bSBFc2NhcGUgPSBDYXBzX0xvY2smbHQ7YnImZ3Q7CitrZXlzeW0gQ2Fwc19Mb2NrID0gRXNjYXBlJmx0O2JyJmd0OyBhZGQgTG9jayA9IENhcHNfTG9jayZsdDticiZndDsKKy0tLS0tLS0tLS0tLWVuZC0tLS0tLS0tLS0tLS0mbHQ7YnImZ3Q7IGFuZCBjYWxsIGl0ICIuc3BlZWRzd2FwcGVyIi4gVGhlbgorb3BlbiBhIHRlcm1pbmFsIGFuZCB0eXBlJmx0O2JyJmd0OyAkIHhtb2RtYXAgLnNwZWVkc3dhcHBlciZsdDticiZndDsKK2FuZCB5b3UnbGwgYmUgdHdpY2UgYXMgZWZmaWNpZW50IGluIHZpbS4gV2hvIG5lZWRzIGNhcHMgbG9jayBhbnl3YXk/IFRoZQorc3dhcHBpbmcgbGFzdHMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgWCBzZXNzaW9uLCBzbyB5b3UgY2FuIHB1dCBpdCBpbiBhCisueGluaXRyYyBvciBzaW1pbGFyIHN0YXJ0dXAgZmlsZS4gQXMgZmFyIGFzIG90aGVyIHBlb3BsZSB1c2luZyBteSBsYXB0b3AsCitJJ2QgcmF0aGVyIHRoZXkgZGlkbid0ISBVc2luZyBhIER2b3JhayBsYXlvdXQgbWlnaHQgcHJvdGVjdCBtZSBldmVuIG1vcmUuLi4gOikKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VXNpbmcKK3ZpbSBhcyBhIG1hbi1wYWdlIHZpZXdlciB1bmRlciBVbml4PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE2NyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjc8L0E+PEJSPgorCitUbyB1c2UgdmltIGFzIGEgbWFuLXBhZ2Ugdmlld2VyIGludm9sdmVzIHNldHRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGU6CisKKyAgICBzaCwga3NoOiAgZXhwb3J0IE1BTlBBR0VSPSJjb2wgLWIgfCB2aWV3IC1jICdzZXQgZnQ9bWFuIG5vbW9kIG5vbGlzdCcKKyAgICAtIiBjc2ggICAgOiAgc2V0ZW52IE1BTlBBR0VSICJjb2wgLWIgfCB2aWV3IC1jICdzZXQgZnQ9bWFuIG5vbW9kIG5vbGlzdCcgLSIKKworUHV0IG9uZSBvZiB0aGUgYWJvdmUgdHdvIGxpbmVzIGludG8geW91ciAmbHQ7LnByb2ZpbGUmZ3Q7IG9yICZsdDsubG9naW4mZ3Q7CitmaWxlIGFzIGFwcHJvcHJpYXRlIGZvciB5b3VyIHNoZWxsLgorCitUaGUgbWFuIHBhZ2VzIHdpbGwgdGhlbiBiZSBkaXNwbGF5ZWQgd2l0aCB2aW0gY2FsbGVkIGFzICJ2aWV3IiBhbmQKK3dpbGwgdXNlIHRoZSAmbHQ7bWFuLnZpbSZndDsgc3ludGF4IGhpZ2hsaWdodGluZy4gIEkgbXlzZWxmIHVzZSBzb21lCithZGRpdGlvbmFsIGhpZ2hsaWdodGluZyB3aGljaCBpcyBlbmFibGVkIGJ5IHB1dHRpbmcgdGhlIGZvbGxvd2luZyBmaWxlIGludG8KKyZsdDsudmltL2FmdGVyL3N5bnRheC9tYW4udmltJmd0Oy4gIEkgdXN1YWxseSB1c2UgdGhlICZsdDthc3Ryb25hdXQmZ3Q7Citjb2xvcnNjaGVtZSAoYWxzbyBhdmFpbGFibGUgZnJvbSB0aGlzIGFyY2hpdmUpOyB0aG9zZSB3aG8gdXNlIGJyaWdodAorYmFja2dyb3VuZHMgbWF5IGZpbmQgdGhlIGNvbG9ycyBzZWxlY3RlZCBmb3IgbWFuU3ViU2VjdGlvblN0YXJ0IGFuZAorbWFuU3ViU2VjdGlvbiBzb21ldGhpbmcgdGhleSdsbCB3YW50IHRvIGNoYW5nZToKKworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIgRHJDaGlwJ3MgYWRkaXRpb25hbCAmbHQ7bWFuLnZpbSZndDsgc3R1ZmYKKworc3luIG1hdGNoICBtYW5TZWN0aW9uSGVhZGluZwkiXlxzXCtbMC05XVwrXC5bMC05Ll0qXHNcK1tBLVpdLiokIgorY29udGFpbnM9bWFuU2VjdGlvbk51bWJlciBzeW4gbWF0Y2ggIG1hblNlY3Rpb25OdW1iZXIKKyJeXHNcK1swLTldXCtcLlswLTldKiIJCSAgICBjb250YWluZWQgc3luIHJlZ2lvbiBtYW5EUVN0cmluZworc3RhcnQ9J1teYS16QS1aIl0iW14iLCApXSdsYz0xCSAgICBlbmQ9JyInCSAgICBjb250YWlucz1tYW5TUVN0cmluZworc3luIHJlZ2lvbiBtYW5TUVN0cmluZwkJc3RhcnQ9IlsgXHRdJ1teJywgKV0ibGM9MQkgICAgZW5kPSInIgorc3luIHJlZ2lvbiBtYW5TUVN0cmluZwkJc3RhcnQ9Il4nW14nLCApXSJsYz0xCQkgICAgZW5kPSInIgorc3luIHJlZ2lvbiBtYW5CUVN0cmluZwkJc3RhcnQ9IlteYS16QS1aYF1gW15gLCApXSJsYz0xCSAgICBlbmQ9IltgJ10iCitzeW4gcmVnaW9uIG1hbkJRU1FTdHJpbmcJc3RhcnQ9ImBgW14pLCddIgkJICAgIGVuZD0iJyciCitzeW4gbWF0Y2ggIG1hbkJ1bGxldFpvbmUJdHJhbnNwYXJlbnQgIl5cc1wrb1xzIiBjb250YWlucz1tYW5CdWxsZXQKK3N5biBjYXNlICAgIG1hdGNoIHN5biBrZXl3b3JkIG1hbkJ1bGxldCBjb250YWluZWQgbyBzeW4gbWF0Y2gJbWFuQnVsbGV0Citjb250YWluZWQgIlxbKypdIiBzeW4gbWF0Y2ggICBtYW5TdWJTZWN0aW9uU3RhcnQgICJeXCoiICAgc2tpcHdoaXRlCituZXh0Z3JvdXA9bWFuU3ViU2VjdGlvbiBzeW4gbWF0Y2ggICBtYW5TdWJTZWN0aW9uCSIuKiQiCWNvbnRhaW5lZAorCitoaSBsaW5rIG1hblNlY3Rpb25OdW1iZXIgICAgTnVtYmVyIGhpIGxpbmsgbWFuRFFTdHJpbmcJICAgICAgIFN0cmluZyBoaQorbGluayBtYW5TUVN0cmluZwkgU3RyaW5nIGhpIGxpbmsgbWFuQlFTdHJpbmcJICAgIFN0cmluZyBoaQorbGluayBtYW5CUVNRU3RyaW5nCSBTdHJpbmcgaGkgbGluayBtYW5CdWxsZXQJICAgIFNwZWNpYWwgaGkKK21hblN1YlNlY3Rpb25TdGFydAkgdGVybT1OT05FIGN0ZXJtPU5PTkUgZ3VpPU5PTkUgY3Rlcm1mZz1ibGFjaworY3Rlcm1iZz1ibGFjayBndWlmZz1uYXZ5Ymx1ZSBndWliZz1uYXZ5Ymx1ZSBoaSBtYW5TdWJTZWN0aW9uCit0ZXJtPXVuZGVybGluZSBjdGVybT11bmRlcmxpbmUgZ3VpPXVuZGVybGluZSBjdGVybWZnPWdyZWVuIGd1aWZnPWdyZWVuIHNldCB0cz04CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlZpZXdpbmcKK3RoZSBhY3R1YWwgWFBNIGRhdGEgaW4gR1ZJTTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTY4PC9BPjxCUj4KKworR1ZJTSBoYXMgYW4gZXhjZWxsZW50IHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIFhQTSBpbWFnZXMsIGJ1dCBzb21ldGltZXMKK2l0J3MgdXNlZnVsIHRvIHZpZXcgdGhlIGFjdHVhbCBkYXRhLiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBzZWFyY2hpbmcgZm9yCitldmVyeXRoaW5nLCB0eXBlIGluICIvLiIgYW5kIGFsbCBjaGFyYWN0ZXJzIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgYW5kIHRoZXJlZm9yZQordGhlIG9sZCBjb2xvdXJpbmcgaXMgbG9zdC4gVG8gcmVnYWluIHRoZSBub3JtYWwgaGlnaGxpZ2h0aW5nIHlvdSBjYW4gc2VhcmNoCitmb3IgYSBub24tZXhpc3RlbnQgc2VxdWVuY2UsIGxpa2UgIi9mb28iLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj4mbHQ7VGFiJmd0OworPSAmbHQ7Qy1JJmd0OyBhbmQgJmx0O0VzYyZndDsgPSAmbHQ7Qy1bJmd0OzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNjkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTY5PC9BPjxCUj4KKworICAgICBBbiBGQVEgb24gdGhlIHZpbSB1c2VycycgbWFpbGluZyBsaXN0IGlzIHdoZXRoZXIgJmx0O1RhYiZndDsgYW5kCisgICAgICZsdDtDLUkmZ3Q7CitjYW4gYmUgbWFwcGVkIHRvIGRpZmZlcmVudCB0aGluZ3MuICBUaGUgYW5zd2VyIGlzIG5vLiAgQXMgSSB1bmRlcnN0YW5kIGl0LAordGhpcyBpcyBhIGxvdyBsZXZlbCBpc3N1ZTogICZsdDtUYWImZ3Q7IGFuZCAmbHQ7Qy1JJmd0OyBhcmUgZGlmZmVyZW50IG5hbWVzCitmb3IgdGhlIHNhbWUgQVNDSUkgY29kZSwgYW5kIHRoZXJlIGlzIG5vIHdheSBmb3IgdmltIHRvIHRlbGwgdGhlbSBhcGFydC4KK1NpbWlsYXJseSwgJmx0O0VzYyZndDsgYW5kICZsdDtDLVsmZ3Q7IGFyZSB0aGUgc2FtZSB0aGluZy4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+UmVwZWF0aW5nCithIHNlcXVlbmNlIG9mIGNvbW1hbmRzIHdpdGhvdXQgZGVmaW5pbmcgYSBtYWNybzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNzAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTcwPC9BPjxCUj4KKworSW1hZ2luZS4KKworWW91IGhhdmUganVzdCBmaW5pc2hlZCBhIGNvbXBsaWNhdGVkIG1vZGlmaWNhdGlvbiBvZiBhIGZpbGUsIGludm9sdmluZworbnVtZXJvdXMgcmVwbGFjZSBjb21tYW5kcyA6JXMveHh4L3l5eXkvZywgYW5kIG90aGVyIGV4IGNvbW1hbmRzLgorCitUaGVuIHlvdSByZWFsaXplLCB5b3UgaGF2ZSBkb25lIGl0IGEgbGl0dGxlIGJpdCB3cm9uZywgYW5kIHlvdSBoYXZlIHRvIGJlZ2luCithbGwgdGhlIG9wZXJhdGlvbiBhZ2FpbiwganVzdCB0byBjaGFuZ2Ugb25lIHJlcGxhY2Ugc3RyaW5nLCBvciBkbyBvbmUgbW9yZQorb3BlcmF0aW9uICJzb21ld2hlcmUgMTAgY29tbWFuZHMgYWdvIi4KKworT3IgeW91IHJlYWxpemUsIHlvdSB3aWxsIGhhdmUgdG8gZG8gdGhlIHNhbWUgc3R1ZmYgdG9tb3Jyb3cgd2l0aCBhbm90aGVyIGZpbGUuCisKK29yIHlvdSByZWFsaXplLCB5b3Ugd2FudCB0byBwZXJmb3JtIHRoZSBzYW1lIHNlcXVlbmNlIG9mIGNvbW1hbmRzLCB5b3UgaGF2ZQordHlwZWQgYSBmZXcgZGF5cyBhZ28KKworWW91IHNob3VsZCBoYXZlIG1hZGUgaXQgYSBtYWNybyAobm9ybWFsIGNvbW1hbmQgcSksIGJ1dCB5b3UgaGF2ZW4ndC4KKworTm90aGluZyBpcyBsb3N0IHlldC4KKworWW91IGdvIHRvIHRoZSBjb21tYW5kIGxpbmUgKGJ5IHR5cGluZyA6KSBhbmQgcHJlc3MgQ3RybCtGLiAgKEN0cmwrRiBpbiBvdGhlcgorbW9kZXMgc2Nyb2xscyB0aGUgc2NyZWVuKQorCitZb3UgZ2V0IGEgdGVtcG9yYXJ5IHdpbmRvdywgbGlzdGluZyB0aGUgaGlzdG9yeSBvZiBjb21tYW5kIGxpbmUuCitJdCBpcyBwb3NzaWJsZSB0byB5YW5rIGFwcHJvcHJpYXRlIGxpbmVzIGhlcmUsIG1ha2UgYSBuZXcgZmlsZSBjYWxsZWQKKyRWSU1SVU5USU1FL21hY3Jvcy9zb21ldGhpbmcudmltIHB1dCB0aG9zZSBsaW5lcyBoZXJlLCBlZGl0IHRoZW0gYW5kIHNhdmUKKworc2VlIDpoZWxwIGNlZGl0CisKK1RoZW4geW91IGNhbiBjYWxsIHRoZSBtYWNybyB1c2luZyA6c291cmNlIHNvbWV0aGluZy52aW0KKworWW91IG1pZ2h0IHdhbnQgdG8gc2V0IHZhcmlhYmxlICdoaXN0b3J5JyB0byBhIGhpZ2hlciBudW1iZXIgdGhlbiBkZWZhdWx0IGluCit5b3VyIHZpbXJjIGZpbGUgbGlrZSA6c2V0IGhpc3Rvcnk9MzAwIHNlZSA6aGVscCBoaXN0b3J5IDpoZWxwIHZpbXJjCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkRvCit5b3Uga25vdyB0aGUgImcvIiBhbmQgImc/IiBjb21tYW5kcz88L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTcxIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3MTwvQT48QlI+CisKK0RpcmVjdGx5IGZyb20gdGhlIFZpbSBUb2RvIGxpc3Q6CisKKzcgICBGb3IgVmlzdWFsIG1vZGU6IENvbW1hbmQgdG8gZG8gYSBzZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIG1hcmtlZCBhcmVhLgorICAgIE9ubHkgd2hlbiBsZXNzIHRoYW4gdHdvIGxpbmVzLiBVc2UgImcvIiBhbmQgImc/Ii4KKworSW4gb3RoZXIgd29yZHMsIGEgd2F5IHRvIHNlYXJjaCBmb3IgdmlzdWFsbHkgc2VsZWN0ZWQgdGV4dCAhISAgOi0pCisKKyI9PT09IHZzZWFyY2gudmltID09PT0KKworIiBWaXN1YWwgbW9kZSBzZWFyY2gKKwordm1hcCBnLyA6Y2FsbCBWc2VhcmNoUGF0dGVyblNhdmUoKSZsdDtjciZndDsvJmx0O2MtciZndDsvJmx0O2NyJmd0OyB2bWFwCitnPyA6Y2FsbCBWc2VhcmNoUGF0dGVyblNhdmUoKSZsdDtjciZndDs/Jmx0O2MtciZndDsvJmx0O2NyJmd0OworCitmdW5jdGlvbiEgVnNlYXJjaFBhdHRlcm5TYXZlKCkKKyAgbGV0IGw6dGVtcCA9IEBAIG5vcm1hbCBndnkgbGV0IEAvID0gc3Vic3RpdHV0ZShlc2NhcGUoQEAsICcvXCcpLCAiXG4iLAorICAiXFxcXG4iLCAiZyIpIGxldCBAQCA9IGw6dGVtcCB1bmxldCBsOnRlbXAKK2VuZGZ1bmN0aW9uCisKKyI9PT09IEVORCA9PT09CisKK05vcm1hbGx5LCB0aGlzIGZpbGUgc2hvdWxkIHJlc2lkZSBpbiB0aGUgcGx1Z2lucyBkaXJlY3RvcnkgYW5kIGJlCithdXRvbWF0aWNhbGx5IHNvdXJjZWQuIElmIG5vdCwgeW91IG11c3QgbWFudWFsbHkgc291cmNlIHRoaXMgZmlsZSB1c2luZworJzpzb3VyY2UgdnNlYXJjaC52aW0nLgorCitJbiBWaXN1YWwgbW9kZSwgaGlnaGxpZ2h0IHRoZSB0ZXh0IGZvciBzZWFyY2hpbmcuICBUaGVuIHlvdSBjYW4gdXNlIHRoZQorZGVmYXVsdCB2aXN1YWwga2V5IG1hcHBpbmdzCisKK2cvIC0gc2VhcmNoIGZvcndhcmRzIGc/IC0gc2VhcmNoIGJhY2t3YXJkcworCitWaXN1YWwgc2VhcmNoZXMgYmVoYXZlIGxpa2Ugbm9ybWFsIHNlYXJjaGVzLiAgVGhlICduJyBhbmQgJ04nIGNvbW1hbmRzCit3b3JrIGFzIHRoZXkgc2hvdWxkLCBhbmQgdGhlIHNlYXJjaCBoaXN0b3J5IGNvcnJlY3RseSByZWNvcmRzIGVhY2ggc2VhcmNoLgorTXVsdGktbGluZSBzZWFyY2hlcyBiZWhhdmUgYXMgdGhleSBzaG91bGQgKHRoaXMgY29ycmVjdHMgdGhlICd5YW5rLW9ubHknCittZXRob2QgbWVudGlvbmVkIGluIHRoZSBWaW0gaGVscCBmaWxlcykuICBCbG9jayB2aXN1YWwgc2VhcmNoZXMgZG8gbm90Cit3b3JrIHlldC4gIEhvcGVmdWxseSwgc29tZW9uZSBjYW4gZmlndXJlIG91dCBhIHdheSB0byBkbyB0aGlzIGVhc2lseS4KKworSSd2ZSBvbmx5IHRlc3RlZCB0aGlzIG9uIFdpbjIwMDAgYW5kIFJlZGhhdCBMaW51eCA3LjEuCUknbSBub3QgcmVhbGx5IGNsZWFyCitvbiBob3cgdGhlIGNhcnJpYWdlIHJldHVybnMgYXJlIGRlYWx0IHdpdGggb24gb3RoZXIgc3lzdGVtcy4KKworQW55d2F5LCBlbmpveSEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VXNpbmcKK0lzcGVsbCBvbiBhIGhpZ2hsaWdodGVkIHJlZ2lvbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNzIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTcyPC9BPjxCUj4KKworU3VwcG9zZSB5b3Ugd291bGQgbGlrZSB0byB1c2UgSXNwZWxsIHRvIGNoZWNrIGEgd29yZCBvciByZWdpb24gdGhhdCB5b3UndmUKK3Zpc3VhbGx5IGhpZ2hsaWdodGVkLiAgVGhlIGZvbGxvd2luZyBtYWNybyB3aWxsIGRvIHRoZSBqb2IuICBKdXN0IHR5cGUKK1NoaWZ0LUluc2VydCB3aGlsZSBpbiB2aXN1YWwgbW9kZS4KKwordm5vcmVtYXAgJmx0O1MtSW5zZXJ0Jmd0OyAmbHQ7Qy1DJmd0O2AmbHQ7dmAmZ3Q7cyZsdDtTcGFjZSZndDsmbHQ7RXNjJmd0O21xOmUKK2lzcGVsbC50bXAmbHQ7Q1ImZ3Q7aSZsdDtDLVImZ3Q7IiZsdDtFc2MmZ3Q7OncmbHQ7Q1ImZ3Q7OiEgeHRlcm0KKy1iZyBpdm9yeSAtZm4gMTB4MjAgLWUgaXNwZWxsICUmbHQ7Q1ImZ3Q7Jmx0O0NSJmd0OzplCislJmx0O0NSJmd0OyZsdDtDUiZndDtnZ1ZHJmx0O0VzYyZndDtgJmx0O3ZgJmd0O3MmbHQ7RXNjJmd0Ozpid2lwZW91dCEmbHQ7Q1ImZ3Q7OiFybQoraXNwZWxsLnRtcCombHQ7Q1ImZ3Q7YHEiX3MmbHQ7Qy1SJmd0OyImbHQ7RXNjJmd0OworCitUaGlzIGlzIGJhc2VkIG9uIENoaXAgQ2FtcGJlbGwncyBtYWNybyB3aGljaCB1c2VzIElzcGVsbCBvbiB0aGUgd2hvbGUgZmlsZQorKGluIG5vcm1hbCBtb2RlKS4KKworbm9yZW1hcCAmbHQ7Uy1JbnNlcnQmZ3Q7IDp3Jmx0O0NSJmd0OzohIHh0ZXJtIC1iZyBpdm9yeSAtZm4gMTB4MjAgLWUgaXNwZWxsCislJmx0O0NSJmd0OyZsdDtTcGFjZSZndDs6ZSAlJmx0O0NSJmd0OyZsdDtTcGFjZSZndDsKKworQ2FybCBNdWVsbGVyCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlN3aXRjaAorYmV0d2VlbiBzcGxpdHMgdmVyeSBmYXN0IChmb3IgbXVsdGktZmlsZSBlZGl0aW5nKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNzMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTczPC9BPjxCUj4KKworSSBhbSBhIFdlYiBkZXZlbG9wZXIgYW5kIEkgdXNlIFZpbSBhcyBteSBwcmltYXJ5IGVkaXRvci4KKworTW9zdCBwcm9ncmFtbWluZyBwcm9qZWN0cyAoYW5kIFdlYiBwcm9ncmFtbWluZyBwcm9qZWN0cywgaW4gcGFydGljdWxhcikKK2FyZSBzcHJlYWQgb3V0IG92ZXIgbXVsdGlwbGUgZmlsZXMsIHdoaWNoIHlvdSBvZnRlbiB3YW50IHRvIGhhdmUgb3BlbgorY29uY3VycmVudGx5LiBJZiB5b3UgZG9uJ3QgYWxyZWFkeSBrbm93LCBWaW0gc3VwcG9ydHMgdGhpcyB2ZXJ5IHdlbGwhIEp1c3QgdXNlOgorCis6c3AgbmFtZS1vZi1hbm90aGVyLWZpbGUtdG8tZWRpdAorCitNeSBwcm9ibGVtcyB3ZXJlIHRoYXQgKDEpIGl0IHRvb2sgdG9vIGxvbmcgdG8gbW92ZSBiZXR3ZWVuIGZpbGVzLCBhbmQgKDIpCit0aGUgZmlsZXMgd2VyZSB0YWtpbmcgdXAgdG9vIG11Y2ggcm9vbSBvbiB0aGUgc2NyZWVuLgorCisoMSkgSW4gb3JkZXIgdG8gbW92ZSB0byB0aGUgZmlsZSBpbiB0aGUgc3BsaXQgYWJvdmUgbXkgY3VycmVudCB3aW5kb3csIEkgd2FzCit0eXBpbmcgQ3RybC1XLCBVcCAobW92ZSB1cCBhIHdpbmRvdykgQ3RybC1XLCBfIChtYXhpbWl6ZSB0aGUgbWVudSkuIFRoYXQncworZm91ciBrZXlzdHJva2VzIChtb3JlIGlmIHlvdSBjb3VudCBDdHJsIGFuZCBTaGlmdCksIGFuZCB0aGV5IGFyZSBhbGwgb3ZlcgordGhlIGtleWJvYXJkLiBUbyBoZWxwIGF2b2lkIHRoaXMgcHJvYmxlbSwgSSBjcmVhdGVkIHRoaXMgbWFwcGluZyBpbiBteSAudmltcmM6CisKK21hcCAmbHQ7Qy1KJmd0OyAmbHQ7Qy1XJmd0O2ombHQ7Qy1XJmd0O18gbWFwICZsdDtDLUsmZ3Q7CismbHQ7Qy1XJmd0O2smbHQ7Qy1XJmd0O18KKworTm93IEkgY2FuIGhvbGQgZG93biBDdHJsIGFuZCBtb3ZlIGJldHdlZW4gd2luZG93cyB3aXRoIHRoZSBzdGFuZGFyZCBWaW0KK21vdmVtZW50IGtleXMuIE11Y2gsIG11Y2ggcXVpY2tlciEKKworKDIpIEJ5IGRlZmF1bHQsIFZpbSBkaXNwbGF5cyB0aGUgY3VycmVudCBsaW5lIG9mIGVhY2ggbWluaW1pemVkIGZpbGUsIHdoaWNoCisodG8gbWUpIGlzbid0IG11Y2ggaGVscCBhbmQgdGFrZXMgdXAgdG9vIG11Y2ggc2NyZWVuIHJlYWwgZXN0YXRlLiBJIHVzZSB0aGlzCitsaW5lIGluIG15IC52aW1yYzoKKworc2V0IHdtaD0wCisKK1RoaXMgc2V0cyB0aGUgbWluaW11bSB3aW5kb3cgaGVpZ2h0IHRvIDAsIHNvIHlvdSBjYW4gc3RhY2sgbWFueSBtb3JlIGZpbGVzCitiZWZvcmUgdGhpbmdzIGdldCBjcm93ZGVkLiBWaW0gd2lsbCBvbmx5IGRpc3BsYXkgdGhlIGZpbGVuYW1lLgorCitIb3BlIHRoaXMgaGVscHMgdGhvc2Ugb2YgeW91IHdobyBhcmUgd29ya2luZyBvbiBwcm9qZWN0cyB3aXRoIGxhcmdlIG51bWJlcnMKK29mIGZpbGVzIHlvdSdyZSBjb25zdGFudGx5IGZsaXBwaW5nIHRocm91Z2guIEhhcHB5IFZpbW1pbmchCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Gb290bm90ZXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTc0Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3NDwvQT48QlI+CisKK2FiICgxCitbMV0mbHQ7ZXNjJmd0OzovXi0tXHMvLTEvJmx0O2NyJmd0O28mbHQ7aW5zZXJ0Jmd0OyZsdDtjciZndDtGb290bm90ZXM6Jmx0O2NyJmd0Oy0tLS0tLS0tLS0mbHQ7Y3ImZ3Q7WzFdCithYiAoMiBbMl0mbHQ7ZXNjJmd0OzovXkZvb3Rub3Rlc1w6LysyLyZsdDtjciZndDtvJmx0O2luc2VydCZndDtbMl0KK2FiICgzIFszXSZsdDtlc2MmZ3Q7Oi9eRm9vdG5vdGVzXDovKzMvJmx0O2NyJmd0O28mbHQ7aW5zZXJ0Jmd0O1szXSBhYgorKDQgWzRdJmx0O2VzYyZndDs6L15Gb290bm90ZXNcOi8rNC8mbHQ7Y3ImZ3Q7byZsdDtpbnNlcnQmZ3Q7WzRdIGFiICg1CitbNV0mbHQ7ZXNjJmd0OzovXkZvb3Rub3Rlc1w6Lys1LyZsdDtjciZndDtvJmx0O2luc2VydCZndDtbNV0KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+aG93IHRvIG1ha2UKK1ZJTSBhcyB1ciBkZWZhdWx0IGVkaXRvciBldmVuIHdpdGhvdXQgcm9vdCBhYy48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTc1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3NTwvQT48QlI+CisKK2hpLCBpZiB1IGhhdmUgaW5zdGFsbGVkIHZpbSBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IHNvbWV3aGVyZSBhbmQgdSBkb24ndCBoYXZlIGEKK3Jvb3QgYWNjb3VudCwgYW5kIHlvdSB3YW50IHRvIG1ha2UgVklNIHRoZSBkZWZhdWx0IGVkaXRvciBmb3IgYW55dGhpbmcgdSBkby4KK2kuZSBpZiB1ciB1c2luZyBTUUxwbHVzIGFuZCB3YW50IHRvIGVkaXQgYSBzcWwgY29tbWFuZC4gIG5vcm1hbGx5IHR5cGluZworZWRpdCBicmluZ3MgdXAgdGhlIHZpIGVkaXRvciBhbmQgbm90IHZpbSBlZGl0b3IuICB0byBzb2x2ZSB0aGlzIHByb2JsZW0uCitkZWZpbmUgdGhlc2UgdGhyZWUgdmFyaWFibGVzIGluIHlvdXIgLnByb2ZpbGUgVklNPSZsdDtiYXNlIGRpcmVjdG9yeSB3aGVyZQordmltIGV4ZWN1dGFibGUgaXMgcGxhY2VkJmd0OyBWSU1SVU5USU1FPSZsdDtiYXNlIGRpcmVjb3R5IHdoZXJlIHZpbSBydW50aW1lcworYXJlIGtlcHQmZ3Q7IEVESVRPUj0kVklNL3ZpbQorCitub3RlIGlmIHUgaGF2ZSBpbnN0YWxsZWQgdmltIHdpdGggYW5vdGhlciBuYW1lLCBzYXkgdmltLmV4ZSB0aGVuIGNoYW5nZQorRURJVE9SPSRWSU0vdmltIHRvIEVESVRPUj0kVklNL3ZpbS5leGUKKworc291cmNlIHRoZSAucHJvZmlsZSBhbmQgdmlvbGEuIG5leHQgdGltZSB1IHN0YXJ0IGFuIGVkaXRvciBmcm9tIGFueSBwcm9ncmFtCit1IGhhdmUgdGhlIHZpbSBlZGl0b3IuCisKK05qb3kuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5BdXRvY2hlY2tvdXQgZnJvbSBwZXJmb3JjZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xNzYiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTc2PC9BPjxCUj4KKworVGhlIGZvbGxvd2luZyBjb2RlIGF1dG9tYXRpY2FsbHkgY2hlY2tzIG91dCBmaWxlcyBmcm9tIHBlcmZvcmNlIHdoZW4gdGhlCit1c2VyIG1vZGlmaWVzIHRoZW0uIEl0IGZpcnN0IGNvbmZpcm1zIHRoZSBjaGVjay1vdXQgd2l0aCB0aGUgdXNlci4KKworKFBlcmZvcmNlIGlzIGEgY29tbWVyY2lhbCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLiAgSSBpbWFnaW5lIHRoaXMgY291bGQgYmUKK21vZGlmaWVkIGZvciBSQ1MsIENWUywgZXRjLiwgYnV0IEkgZG9uJ3QgdXNlIHRob3NlLikKKworSSdtIGEgdmltIG5ld2JpZSAtLSBJJ3ZlIHVzZWQgdmkgc2luY2UgMTk4NCwgYnV0IGp1c3Qgc3RhcnRlZCB3aXRoIHZpbSBhIGNvdXBsZQorZGF5cyBhZ28uICBDb2xvciBtZSBpbXByZXNzZWQhCVBsZWFzZSBleGN1c2UgYW55IHN0dXBpZGl0eSBpbiB0aGUgY29kZS4uCisKK05vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRoZSAiUDRIT01FIiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBiZSBzZXQuCitJIGNvdWxkIGV4dHJhY3QgaXQgYnkgaW52b2tpbmcgInA0IGNsaWVudCIsIGJ1dCBJIGRvbid0IHdhbnQgdG8gaW52b2tlIHA0CitldmVyeSB0aW1lIEkgc3RhcnQgdmltLiAgU28gSSBhc3N1bWUgdGhlIHVzZXIgc2V0cyBpdCBpbiB0aGUgZW52aXJvbm1lbnQuCisKKyIgU2V0IGEgYnVmZmVyLWxvY2FsIHZhcmlhYmxlIHRvIHRoZSBwZXJmb3JjZSBwYXRoLCBpZiB0aGlzIGZpbGUgaXMgdW5kZXIKK3RoZSBwZXJmb3JjZSByb290LiAgZnVuY3Rpb24gSXNVbmRlclBlcmZvcmNlKCkKKyAgICBpZiBleGlzdHMoIiRQNEhPTUUiKQorCWlmIGV4cGFuZCgiJTpwIikgPX4gKCJeIiAuICRQNEhPTUUpCisJICAgIGxldCBiOnA0cGF0aCA9IHN1YnN0aXR1dGUoZXhwYW5kKCIlOnAiKSwgJFA0SE9NRSwgIi8vZGVwb3QiLCAiIikKKwllbmRpZgorICAgIGVuZGlmCitlbmRmdW5jdGlvbiAiIENvbmZpcm0gd2l0aCB0aGUgdXNlciwgdGhlbiBjaGVja291dCBhIGZpbGUgZnJvbSBwZXJmb3JjZS4KK2Z1bmN0aW9uIFA0Q2hlY2tvdXQoKQorICAgaWYgZXhpc3RzKCJiOnA0cGF0aCIpCisJaWYgKGNvbmZpcm0oIkNoZWNrb3V0IGZyb20gUGVyZm9yY2U/IiwgIiZZZXNcbiZObyIsIDEpID09IDEpCisJICAgIGNhbGwgc3lzdGVtKCJwNCBlZGl0ICIgLiBiOnA0cGF0aCAuICIgJmd0OyAvZGV2L251bGwiKSBpZgorCSAgICB2OnNoZWxsX2Vycm9yID09IDAKKwkJc2V0IG5vcmVhZG9ubHkKKwkgICAgZW5kaWYKKwllbmRpZgorICAgIGVuZGlmCitlbmRmdW5jdGlvbgorCitpZiAhZXhpc3RzKCJhdV9wNF9jbWQiKQorICAgIGxldCBhdV9wNF9jbWQ9MQorCisgICAgYXUgQnVmRW50ZXIgKiBjYWxsIElzVW5kZXJQZXJmb3JjZSgpIGF1IEZpbGVDaGFuZ2VkUk8gKiBjYWxsIFA0Q2hlY2tvdXQoKQorZW5kaWYKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SGlnaGxpZ2h0CittYXRjaGluZyBicmFja2V0cyBhcyBvbmUgbW92ZXMgaW4gbm9ybWFsIG1vZGUgKHBsdWdpbik8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTc3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3NzwvQT48QlI+CisKK0NoZWNrIG91dCA8QSBIUkVGPSJodHRwOi8vd3d3LmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL2luZGV4Lmh0bWwjVmltRnVuY3MKK2ZvciI+aHR0cDovL3d3dy5lcm9scy5jb20vYXN0cm9uYXV0L3ZpbS9pbmRleC5odG1sI1ZpbUZ1bmNzIGZvcjwvQT48QlI+CithIHBsdWdpbiBzY3JpcHQgd2hpY2ggaGlnaGxpZ2h0cyBtYXRjaGluZyBicmFja2V0cy4gIFRoZSBzY3JpcHQgaGFzIHR3bworYWx3YXlzLW9uIG1hcHM6CisJXFtpICAgOiBzdGFydCBbSGlNdGNoQnJrdF0gbW9kZSBcW3MgICA6IHN0b3AgW0hpTXRjaEJya3RdIG1vZGUKK1RoZSBwbHVnaW4gd2lsbCBzYXZlIGFsbCB1c2VyIG1hcHMgYW5kIG9wdGlvbnMgdGhhdCB0aGUgcGx1Z2luIHVzZXMgYW5kIHdpbGwKK3Jlc3RvcmUgdGhlbSB3aGVuIHRoZSBtb2RlIGlzIHN0b3BwZWQuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk1ha2luZworYSAiZGVyaXZlZCIgY29sb3JzY2hlbWUgd2l0aG91dCBjb3B5ICYgcGFzdGU8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTc4Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3ODwvQT48QlI+CisKK1N1cHBvc2UgdGhlcmUncyBhIGNvbG9yc2NoZW1lIHRoYXQgeW91J3JlIHByZXR0eSBmb25kIG9mLCBidXQgaGF0ZSBvbmUgb3IKK3R3byBwYXJ0aWN1bGFyIGFzcGVjdHMgYWJvdXQuICBGb3IgZXhhbXBsZSwgSSBsb3ZlIHRoZSAiYmx1ZSIgY29sb3JzY2hlbWUKK3RoYXQgc2hpcHMgd2l0aCB2aW0sIGJ1dCBJIGZpbmQgaXQncyBjb2xvcnMgZm9yIHRoZSBub24tYWN0aXZlIHN0YXR1cyBsaW5lCit0byBiZSB1bnJlYWRhYmxlLiAgSGVyZSdzIGhvdyB0byBjcmVhdGUgYSBjb2xvcnNjaGVtZSB3aGljaCBleHRlbmRzICJibHVlIgord2l0aG91dCBjb3B5aW5nIGl0IHRvIGEgbmV3IGZpbGUgYW5kIGVkaXRpbmcgaXQuCisKK0luIG15IH4vLnZpbS9jb2xvcnMsIEkgY3JlYXRlZCBhICJteS1ibHVlLnZpbSIgZmlsZSB3aXRoIHRoZXNlIGNvbnRlbnRzOgorCisidGhlc2UgbGluZXMgYXJlIHN1Z2dlc3RlZCB0byBiZSBhdCB0aGUgdG9wIG9mIGV2ZXJ5IGNvbG9yc2NoZW1lIGhpIGNsZWFyCitpZiBleGlzdHMoInN5bnRheF9vbiIpCisgICBzeW50YXggcmVzZXQKK2VuZGlmCisKKyJMb2FkIHRoZSAnYmFzZScgY29sb3JzY2hlbWUgLSB0aGUgb25lIHlvdSB3YW50IHRvIGFsdGVyIHJ1bnRpbWUKK2NvbG9ycy9ibHVlLnZpbQorCisiT3ZlcnJpZGUgdGhlIG5hbWUgb2YgdGhlIGJhc2UgY29sb3JzY2hlbWUgd2l0aCB0aGUgbmFtZSBvZiB0aGlzIGN1c3RvbSBvbmUKK2xldCBnOmNvbG9yc19uYW1lID0gIm15LWJsdWUiCisKKyJDbGVhciB0aGUgY29sb3JzIGZvciBhbnkgaXRlbXMgdGhhdCB5b3UgZG9uJ3QgbGlrZSBoaSBjbGVhciBTdGF0dXNMaW5lIGhpCitjbGVhciBTdGF0dXNMaW5lTkMKKworIlNldCB1cCB5b3VyIG5ldyAmIGltcHJvdmVkIGNvbG9ycyBoaSBTdGF0dXNMaW5lIGd1aWZnPWJsYWNrIGd1aWJnPXdoaXRlIGhpCitTdGF0dXNMaW5lTkMgZ3VpZmc9TGlnaHRDeWFuIGd1aWJnPWJsdWUgZ3VpPWJvbGQKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdC4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlNpbXBsaWZ5IGhlbHAgYnVmZmVyIG5hdmlnYXRpb248L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTc5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE3OTwvQT48QlI+CisKK1ZpbSBpcyBkaXN0cmlidXRlZCB3aXRoIGNvbXByZWhlbnNpdmUgaGVscCBzeXN0ZW0sIHdoaWNoIGhhcyBiYXNpYyBoeXBlcmxpbmsKK3N1cHBvcnQgLSB5b3UgY2FuIHByZXNzICZsdDtDLV0mZ3Q7IG92ZXIgfHNvbWUgc3ViamVjdHwgb3IgJ3NvbWUgb3B0aW9uJwordG8gcmVhZCBtb3JlIGFib3V0IHBhcnRpY3VsYXIgdGVybS4KKworVGhlIGZvbGxvd2luZyBtYXBwaW5ncyBzaW1wbGlmeSBoZWxwIGJ1ZmZlciBuYXZpZ2F0aW9uOiBwcmVzc2luZyBzKG9yIFMpCit3aWxsIGZpbmQgbmV4dChwcmV2aW91cykgc3ViamVjdCBmcm9tIGN1cnNvciBwb3NpdGlvbiBwcmVzc2luZyBvKG9yIE8pIHdpbGwKK2ZpbmQgbmV4dChwcmV2aW91cykgb3B0aW9uIGZyb20gY3Vyc29yIHBvc2l0aW9uIHByZXNzaW5nIEVudGVyIHdpbGwganVtcCB0bworc3ViamVjdCB1bmRlciBjdXJzb3IgcHJlc3NpbmcgQmFja3NwYWNlIHdpbGwgcmV0dXJuIGZyb20gdGhlIGxhc3QganVtcAorCitQdXQgdGhlbSBpbnRvIGhlbHAgZmlsZXR5cGUgcGx1Z2luIChsaWtlIH4vLnZpbS9mdHBsdWdpbi9oZWxwLnZpbSBvbiBVTklYKS4KKworbm1hcCAmbHQ7YnVmZmVyJmd0OyAmbHQ7Q1ImZ3Q7ICZsdDtDLV0mZ3Q7IG5tYXAgJmx0O2J1ZmZlciZndDsgJmx0O0JTJmd0OworJmx0O0MtVCZndDsgbm1hcCAmbHQ7YnVmZmVyJmd0OyBvIC8nW2Etel1cezIsXH0nJmx0O0NSJmd0OyBubWFwICZsdDtidWZmZXImZ3Q7CitPID8nW2Etel1cezIsXH0nJmx0O0NSJmd0OyBubWFwICZsdDtidWZmZXImZ3Q7IHMgL1x8XFNcK1x8Jmx0O0NSJmd0OyBubWFwCismbHQ7YnVmZmVyJmd0OyBTID9cfFxTXCtcfCZsdDtDUiZndDsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+UmVsb2FkCit5b3VyIGZpbGV0eXBlL3N5bnRheCBwbHVnaW48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTgwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE4MDwvQT48QlI+CisKK0V2ZXIgdHJpZWQgdG8gd3JpdGUvZGVidWcgeW91ciBvd24gIGZpbGV0eXBlL3N5bnRheCBwbHVnaW4/CisKK0l0J3MgYW4gaXRlcmF0aXZlIHByb2Nlc3Mgd2hpY2ggaW52b2x2ZXMgZWRpdGluZyBwbHVnaW4gY29kZSBhbmQgdGVzdGluZyBpdAorb24gc29tZSBzYW1wbGUgZmlsZS4gVG8gc2VlIGNoYW5nZXMgeW91IG1hZGUgaW4geW91ciBwbHVnaW4gc2ltcGx5IGRvIDplCitvbiBzYW1wbGUgZmlsZS4gIFRoaXMgd2lsbCBmb3JjZSBWaW0gdG8gcmVsb2FkIGFsbCBidWZmZXItc3BlY2lmaWMgZmlsZXMsCitpbmNsdWRpbmcgeW91ciBwbHVnaW4uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5nZXQgdGhlIHZpbSBwYXRjaGVkIHNvdXJjZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTgxPC9BPjxCUj4KKworSGksIHRoZXJlIGhhcyBiZWVuIGEgbnVtYmVyIG9mIHBlcnNvbiAoaW5jbHVkaW5nKSBhc2tpbmcgaW4gdGhlIHZpbSBsaXN0IGhvdwordG8ga2VlcCB1cCB3aXRoIEJyYW0ncyBpbmNyZWRpYmxlIGJ1ZyBjb3JyZWN0aW9uIGFuZCBwYXRjaCB3cml0aW5nIHNraWxscywgYnV0Cit0aGVyZSBpcyBhIGdyZWF0IHdheSB0byBkbyB0aGlzISAgVXNlIHRoZSBjdnMgc291cmNlIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCA8QQorSFJFRj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9jdnMvP2dyb3VwX2lkPTgiPmh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvY3ZzLz9ncm91cF9pZD04PC9BPjxCUj4KK2l0IGlzIGtlcHQgdXAgdG8gZGF0ZSBhbmQgaXRzIGEgbG90IGVhc2llciB0aGFuIGFwcGx5aW5nIGFsbCB0aGUgcGF0Y2gKK2luIG9yZGVyLiAgQmVub2l0CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPktlZXAKK3lvdXIgY3Vyc29yIGNlbnRlcmVkIHZlcnRpY2FsbHkgb24gdGhlIHNjcmVlbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTgyPC9BPjxCUj4KKworaSBob3BlIGkgZG9uJ3QgaGVhciBhIGNvbGxlY3RpdmUgJ0RVSCEnIGZyb20gYXJvdW5kIHRoZSB3b3JsZCBidXQgaSBqdXN0CitkaWQgdGhpcyBhbmQgaSB0aGluayBpdCdzIGtpbmRhIGNvb2wuCisKK2luIHlvdXIgLnZpbXJjIGFkZC4uLgorCittYXAgaiBqenogbWFwIGsga3p6CisKK3NvIHdoZW5ldmVyIHlvdSBnbyB1cCBvciBkb3duLCB2aW0gZG9lcyB0aGF0IGFuZCB0aGVuIHJlLWNlbnRlcnMuICBvYnZpb3VzbHkgaXQKK2RvZXNuJ3Qgd29yayB3aGVuIHlvdSBwYWdlIHVwLyBkb3duLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5TZWxlY3QKK2EgYnVmZmVyIGZyb20gdGhvc2UgbWF0Y2hpbmcgYSBwYXR0ZXJuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE4MyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODM8L0E+PEJSPgorCitUaGUgOmJ1IGNvbW1hbmQgd2lsbCB0YWtlIGEgcGF0dGVybiBhcyBhbiBhcmd1bWVudCBhbmQganVtcCB0byB0aGUgbWF0Y2hpbmcKK2J1ZmZlci4gIEhvd2V2ZXIsIGl0J3Mgbm90IHZlcnkgaGVscGZ1bCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGJ1ZmZlcgorbWF0Y2hpbmcgdGhlIHBhdHRlcm4uICBJbiB0aGF0IGNhc2UsIGl0IHdpbGwganVtcCB0byB0aGUgZmlyc3QgbWF0Y2gsIHdoaWNoCittYXkgbm90IGJlIHdoYXQgeW91IHdhbnQuICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGFuZCB1c2VyLWNvbW1hbmQgd2lsbAorcHJpbnQgYSBsaXN0IG9mIHRoZSBtYXRjaGluZyBidWZmZXJzIGluIHRoZSBjb21tYW5kLWxpbmUgYXJlYSwgYW5kIGFsbG93Cit5b3UgdG8gc2VsZWN0IG9uZSBvZiB0aGUgbWF0Y2hpbmcgYnVmZmVycyBieSBudW1iZXIuCisKKyJTZWxlY3QgZnJvbSBidWZmZXJzIG1hdGNoaW5nIGEgY2VydGFpbiBwYXR0ZXJuICJ0aGUgJ3BhdHRlcm4nIGFyZ3VtZW50CitzaG91bGRuJ3QgYmUgcHJlcGVuZGVkIHdpdGggYSBzbGFzaAorCitmdW5jdGlvbiEgQnVmU2VsKHBhdHRlcm4pCisgICBsZXQgYnVmY291bnQgPSBidWZucigiJCIpIGxldCBjdXJyYnVmbnIgPSAxIHdoaWxlIGN1cnJidWZuciAmbHQ7PSBidWZjb3VudAorICAgICAgaWYoYnVmZXhpc3RzKGN1cnJidWZucikpCisJIGxldCBjdXJyYnVmbmFtZSA9IGJ1Zm5hbWUoY3VycmJ1Zm5yKSBpZihtYXRjaChjdXJyYnVmbmFtZSwgYTpwYXR0ZXJuKQorCSAmZ3Q7IC0xKQorCSAgICAgICBlY2hvIGN1cnJidWZuciAuICI6CSIuIGJ1Zm5hbWUoY3VycmJ1Zm5yKQorCSBlbmRpZgorICAgICAgZW5kaWYgbGV0IGN1cnJidWZuciA9IGN1cnJidWZuciArIDEKKyAgIGVuZHdoaWxlIGxldCBkZXNpcmVkYnVmbnIgPSBpbnB1dCgiRW50ZXIgYnVmZmVyIG51bWJlcjogIikKKyAgIGlmKHN0cmxlbihkZXNpcmVkYnVmbnIpICE9IDApCisgICAgICBleGUgIjpidSAiLiBkZXNpcmVkYnVmbnIKKyAgIGVuZGlmCitlbmRmdW5jdGlvbgorCisiQmluZCB0aGUgQnVmU2VsKCkgZnVuY3Rpb24gdG8gYSB1c2VyLWNvbW1hbmQgY29tbWFuZCEgLW5hcmdzPTEgQnMgOmNhbGwKK0J1ZlNlbCgiJmx0O2FyZ3MmZ3Q7IikKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SG93Cit0byBvYnNjdXJlIHRleHQgaW5zdGFudGFuZW91c2x5PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE4NCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODQ8L0E+PEJSPgorCitIaSwgTGV0cyBzYXkgeW91ciB3cml0aW5nIHNvbWUgaW1wLiBkb2MuIGFuZCB5b3VyIGNvbGxlYWd1ZSBjb21lcyBhbG9uZy4geW91Citkb24ndCB3YW4ndCBoaW0gdG8gc2VlIHdoYXQgeW91IGFyZSB0eXBpbmcuICBzbyB1IHN0YXJ0IGZ1bWJsaW5nIHRvIHR5cGUKKzp3cSEgb3Igc3dpdGNoIHdpdGggQWx0LVRBQi4gZXRjLiAgYnV0IHdvdWxkbid0IGl0IGJlIG5pY2UgdG8ganVzdCBvYnN1Y3JlIHRoZQordGV4dCB0ZW1wb3JhcmlseSwgc28gdGhhdCB1IGRvbid0IGhhdmUgdG8gcXVpdCBvciBzd2l0aCB0byBhbm90aGVyIGFwcGxpY2F0aW9uCit1c2luZyBBbHQtdGFiLgkoYW5kIGlmIHUgZG9uO3QgaGF2ZSBhbnkgb3RoZXIgd2luZG93IG9wZW4gdSBjYW47dCBldmVuIHVzZQorYWx0LXRhYikgd2VsbCByb3QtMTMgY29tZXMgdG8gaGVscC4gdmltIGhhcyBhIGJ1aWx0IGluIHJvdC0xMyBlbmNvZGVyLgorCitqdXQgcHV0IHRoZSBmb2xsd29pbmcgaW4geW91ciAudmltcmMKKworbWFwICZsdDtGMyZndDsgZ2dWR2c/CisKK3NvIG5leHQgdGltZSBzb21lIGJvZHkgY29tZXMgYWxvbmcganVzdCBwcmVzcyAmbHQ7RjMmZ3Q7IGFuZCBhbGwgdGhlIGJ1ZmZlcgord2lsbCBiZSByb3QtMTMgZW5jb2RlZC4gdG8gZGVjb2RlIGp1c3QgcHJlc3MgJmx0O2YzJmd0OyBhZ2Fpbi4JTmpveQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5NYWtlIHZpbSB0aGUKK2VkaXRvciBmb3IgZmlsZXMgd2l0aCB1bnJlZ2lzdGVyZWQgZXh0ZW5zaW9ucyBpbiBXaW5kb3dzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE4NSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODU8L0E+PEJSPgorCitOb3JtYWxseSBpbiBXaW5kb3dzLCBpZiB5b3UgdHJ5IHRvICJsYXVuY2giIGEgZmlsZSB3aG9zZSBleHRlbnNpb24gaXMgbm90CityZWdpc3RlcmVkIHdpdGggdGhlIHN5c3RlbSwgdGhlIE9TIHdpbGwgcHJvbXB0IHlvdSBmb3Igd2hhdCBlZGl0b3IgeW91IHdvdWxkCitsaWtlIHRvIHVzZSB0byBvcGVuIHRoZSBmaWxlLiAgQSBtdWNoIG1vcmUgYXBwZWFsaW5nIHNvbHV0aW9uLCBpbiBteSBtaW5kLAoraXMgdG8gbWFrZSB2aW0gdGhlIGRlZmF1bHQgZWRpdG9yIGZvciBhbnkgdW5yZWdpc3RlcmVkIGV4dGVuc2lvbi4KKworVG8gc2V0IHZpbSB1cCBhcyB0aGUgZGVmYXVsdCBlZGl0b3IgZm9yIHVucmVnaXN0ZXJlZCBleHRlbnNpb25zLCBmb2xsb3cKK3RoZXNlIHN0ZXBzOiAxLiBDb3B5IHRoZSBmb2xsb3dpbmcgaW50byBhIGZpbGUgbmFtZWQgdW5yZWdpc3RlcmVkLnJlZworLS0tLS0tLS0tLS0tLWJlZ2luIHVucmVnaXN0ZXJlZC5yZWctLS0tLS0tLS0tLS0tLS0tLSBSRUdFRElUNAorW0hLRVlfQ0xBU1NFU19ST09UXFVua25vd25cc2hlbGxcT3BlblxDb21tYW5kXSBAPSJkOlxccHJvZ3JhbQorZmlsZXNcXHZpbVxcdmltNjBcXGd2aW0uZXhlIFwiJTFcIiIgLS0tLS0tLS0tLS0tLWVuZAordW5yZWdpc3RlcmVkLnJlZy0tLS0tLS0tLS0tLS0tLS0tCisKKzIuIEltcG9ydCB1bnJlZ2lzdGVyZWQgaW50byB5b3VyIHJlZ2lzdHJ5LiAgVGhpcyBjYW4gYmUgZG9uZSBpbiB2aW0gYnkKK2V4ZWN1dGluZyB0aGUgZm9sbG93aW5nIDohcmVnZWRpdCAidW5yZWdpc3RlcmVkLnJlZyIKKworRGlzY2xhaW1lcjogVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgb25seSBvbiBOVDQuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5NYWtpbmcgc2VhcmNoIHBvd2VyZnVsPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE4NiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODY8L0E+PEJSPgorCitNeSB0aXAgaXMganVzdCBhIGJ1bmNoIG9mIG1hcHBpbmdzIHRoYXQgY2FuIGJlIHVzZWQgd2hpbGUgc2VhcmNoaW5nLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+TWFraW5nIHNlYXJjaCBwb3dlcmZ1bDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTg3PC9BPjxCUj4KKworKFNvcnJ5LCBJIHRoaW5rIEkgYWNjaWRlbnRhbGx5IGFkZGVkIGFuIGluY29tcGxldGUgdGlwKQorCitNeSB0aXAgaXMganVzdCBhIGJ1bmNoIG9mIG1hcHBpbmdzIHRoYXQgY2FuIGJlIHVzZWQgd2hpbGUgc2VhcmNoaW5nLgorV2hhdCBpdCBkb2VzPworICBvLiBFeHRlbmQgeW91ciBjdXJyZW50IHNlYXJjaC4gKGtpbmRhIGVtYWNzIHNlYXJjaCB3aGVyZSB5b3UgY2FuIHNlYXJjaAorICBlYWNoIG9jY3VyZW5jZXMKKyAgICAgIG9uZSBieSBvbmUgYW5kIGdvIGJhY2sgdG8gdGhlIGN1cnNvciBwb3NpdGlvbi4KKyAgby4gU2Nyb2xsL3Bvc2l0aW9uIGR1cmluZyBtYXBwaW5nLiAgby4gT3RoZXIgbWlzY2VsbGFuZW91cyBzdHVmZnMgOykgcmVhZCBvbgorCitIb3cgdG8gdXNlPworICAgby4gY29weSBhbmQgcGFzdGUgdGhlIG1hcHBpbmdzIGludG8gYSBmaWxlIG8uIG9wZW4gdmltIChsaWtlIHZpbSAucHJvZmlsZSkKKyAgIG8uIDpzbyAmbHQ7c2F2ZWQtZmlsZSZndDsgby4gc3RhcnQgdXNpbmcgdGhlIG1hcHBpbmdzCisKK05vdGU6CisgICBJbiBjYXNlIHRoZXNlIG1hcHBpbmdzIGRvbnQgd29yayBydW4gbGlrZSwgJ3ZpbSAtdSBOT05FIC1VIE5PTkUgLWMKKyAgICJzbyB0aGUtc2F2ZWQtZmlsZS52aW0iJworCisgICBTb21lIG9mIG15IG1hcHBpbmdzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZpbSBiaW5kaW5ncy4gKGxpa2UgQ3RybC1BLAorICAgQ3RybC1RKS4gSSBzZWxlY3RlZCB0aG9zZSBiZWNhdXNlLCBJIGZlZWwgYnkgdGFraW5nIHRob3NlIEkgY2FuIGRvIGFsbAorICAgdGhlIHNlYXJjaCBzdHVmZiB3aXRoIG15IGxlZnQgaGFuZC4KKworICAgT25lIHRoaW5nIEkgZGlkIG5vdCBsaWtlIHdpdGggdGhpcyBpcywgSSB1c3VhbGx5IG1pc3MgdGhlICJzZWFyY2ggaGl0CisgICBib3R0b20iIG1lc3NhZ2UuIEkgY291bGQgaGF2ZSBoYW5kbGVkIHRoYXQgYnkgY29tcGxpY2F0aW5nIHRoZSBjdXJyZW50CisgICBtYXBwaW5ncywgYnV0IEkgcHJlZmVycmVkIHRvIG1ha2UgaXQgc2ltcGxlCisKK01hcHBpbmdzIFVzZWQgLwkJID0mZ3Q7IHJlZ3VsYXIgZm9yd2FyZCBzZWFyY2ggc3RhcnQgPwkgICAgICA9Jmd0OworcmVndWxhciBiYWNrd2FyZCBzZWFyY2ggc3RhcnQgUmVzdCBvZiB0aGUgbWFwcGluZ3MgYXJlIHVzZWQgZHVyaW5nIHNlYXJjaAorQ3RybC1BCT0mZ3Q7IHNlYXJjaCBhZ2FpbiBmb3J3YXJkIChJbiBub3JtYWwgbW9kZSwgc2VhcmNoIGZvcndhcmQgd2l0aAordGhlIHdvcmQgdW5kZXIgY3Vyc29yKSBDdHJsLVEgID0mZ3Q7IHNlYXJjaCBhZ2FpbiBiYWNrd2FyZCAoaW4gbm9ybWFsIG1vZGUsCitzZWFyY2ggYmFja3dhcmQgd2l0aCB0aGUgd29yZCB1bmRlciBjdXJzb3IpIEN0cmwtWCAgPSZndDsgcmVzdG9yZSBjdXJzb3IgKHVzZQorYXQgYW55IHBvaW50IG9mIHRpbWUvZHVyaW5nLWFueS1vcGVyYXRpb24gbWVudGlvbmVkIGR1cmluZyBzZWFyY2hpbmcpIEN0cmwtRgorPSZndDsgc2VhcmNoIHdpdGggdGhlIHdvcmQgdW5kZXIgY3Vyc29yIEN0cmwtRwk9Jmd0OyBpbmNyZW1lbnRhbGx5IGFkZCB0aGUKK2xldHRlcnMgZm9sbG93aW5nIHRoZSBzZWFyY2ggcGF0dGVybiAoaW4gY3VycmVudCBsaW5lKSBDdHJsLVQgQ3RybC1UID0mZ3Q7CitzZWFyY2ggZm9yIHRoZSBleGFjdCBDdHJsLVQgQ3RybC1ZID0mZ3Q7IHNlYXJjaCBwYXJ0aWFsIChqdXN0IHN0cmlwcyBcJmx0OworYW5kIFwmZ3Q7KSBDdHJsLUUgID0mZ3Q7IHNjcm9sbCB1cCBkdXJpbmcgc2VhcmNoaW5nIEN0cmwtWSAgPSZndDsgc2Nyb2xsIGRvd24KK2R1cmluZyBzZWFyY2hpbmcgQ3RybC1aIEN0cmwtWiA9Jmd0OyBwb3NpdGlvbiB0aGUgY3Vyc29yIHRvIG1pZCBvZiBzY3JlZW4KKyhsaWtlIHp6IGluIG5vcm1hbCkgQ3RybC1aIEN0cmwtQSA9Jmd0OyBwb3NpdGlvbiB0aGUgY3Vyc29yIHRvIHRvcCBvZiBzY3JlZW4KKyhsaWtlIHp0IGluIG5vcm1hbCkgQ3RybC1aIEN0cmwtWCA9Jmd0OyBwb3NpdGlvbiB0aGUgY3Vyc29yIHRvIGJvdHRvbSBvZgorc2NyZWVuIChsaWtlIHpiIGluIG5vcm1hbCkKKworTWlzYzogQ3RybC1LIGR1cmluZyBzZWFyY2ggc2F2ZSB0aGUgY3VycmVudCBtYXRjaGluZyBsaW5lIEN0cmwtSyBpbiBub3JtYWwKK21vZGUgcGFzdGVzIHRoZSBzYXZlZCBsaW5lCisKK0MgbWFwcGluZ3MgQ3RybC1WIEN0cmwtRyBzZWFyY2ggZm9yIHRoZSBnbG9iYWwgdmFyaWFibGUgb2YgdGhlIHNlYXJjaAorcGF0dGVybi93b3JkIHVuZGVyIGN1cnNvciBDdHJsLVYgQ3RybC1IIHNlYXJjaCBmb3IgdGhlIGxvY2FsIHZhcmlhYmxlIG9mCit0aGUgc2VhcmNoIHBhdHRlcm4vd29yZCB1bmRlciBjdXJzb3IKKworIiAtLS0gY3V0IG4gcGFzdGUgZnJvbSBoZXJlIHRvIGVuZCBvZiBkb2N1bWVudCAtLS0gc2Ugbm9jcCBpbmNzZWFyY2ggIiBjb3JlCittYXBwaW5ncyBub3JlbWFwICAvIG1nLyBub3JlbWFwICA/IG1nPwlvdW5tYXAgLyBvdW5tYXAgPyAgbm9yZW1hcCAmbHQ7Qy1BJmd0OworbWciZ3lpdy8mbHQ7Qy1SJmd0O2cgY25vcmVtYXAgJmx0O0MtQSZndDsgJmx0O0NSJmd0Oy8mbHQ7VXAmZ3Q7IGNub3JlbWFwCismbHQ7Qy1YJmd0OyAmbHQ7Q1ImZ3Q7YGcgY25vcmVtYXAgJmx0O0MtUSZndDsgJmx0O0NSJmd0Oz8mbHQ7VXAmZ3Q7CisKKyIgZXh0ZW5kaW5nIGN1cnJlbnQgc2VhcmNoIG1hcHBpbmdzIGNub3JlbWFwICZsdDtDLUYmZ3Q7CismbHQ7Q1ImZ3Q7eWl3Jmx0O0JTJmd0Oy8mbHQ7Qy1SJmd0OyIgY25vcmVtYXAgJmx0O0MtRyZndDsKKyZsdDtDUiZndDt5LyZsdDtVcCZndDsvZSsxJmx0O0NSJmd0OyZsdDtCUyZndDsvJmx0O0MtUiZndDs9ZXNjYXBlKEAiLCcuKlwvPycpJmx0O0NSJmd0OworCisiIG1pc2NlbGxhbmVvdXM6IGNvcHkgY3VycmVudCBsaW5lIGR1cmluZyBzZWFyY2ggYW5kIGxhdGVyIHBhc3RlIGluIE5PUk1BTAorbW9kZSBjbm9yZW1hcCAmbHQ7Qy1LJmd0OyAmbHQ7Q1ImZ3Q7Imh5eT8mbHQ7VXAmZ3Q7Jmx0O0NSJmd0Oy8mbHQ7VXAmZ3Q7Citub3JlbWFwICZsdDtDLUsmZ3Q7ICJocAorCisiIGV4YWN0L3BhcnRpYWwgc2VhcmNoIG1hcHBpbmdzIGNub3JlbWFwICZsdDtDLVQmZ3Q7Jmx0O0MtVCZndDsKKyZsdDtIb21lJmd0O1wmbHQ7Jmx0O0MtRW5kJmd0O1wmZ3Q7IGNub3JlbWFwICZsdDtDLVQmZ3Q7Jmx0O0MtWSZndDsKKyZsdDtIb21lJmd0OyZsdDtEZWwmZ3Q7Jmx0O0RlbCZndDsmbHQ7RW5kJmd0OyZsdDtEZWwmZ3Q7Jmx0O0RlbCZndDsKKworIiBDIGdsb2JhbC9sb2NhbCB2YXJpYWJsZSBzZWFyY2ggbWFwcGluZ3Mgbm9yZW1hcCAmbHQ7Qy1WJmd0OyZsdDtDLUcmZ3Q7CittZ3lpdyZsdDtDUiZndDtnZy9cJmx0OyZsdDtDLVImZ3Q7IlwmZ3Q7IG5vcmVtYXAgJmx0O0MtViZndDsmbHQ7Qy1IJmd0OworbWd5aXc/XnsmbHQ7Q1ImZ3Q7L1wmbHQ7Jmx0O0MtUiZndDsiXCZndDsgY25vcmVtYXAgJmx0O0MtViZndDsmbHQ7Qy1HJmd0OworJmx0O0NSJmd0O3lpd2dnL1wmbHQ7Jmx0O0MtUiZndDsiXCZndDsgY25vcmVtYXAgJmx0O0MtViZndDsmbHQ7Qy1IJmd0OworJmx0O0NSJmd0O3lpdz9eeyZsdDtDUiZndDsvXCZsdDsmbHQ7Qy1SJmd0OyJcJmd0OworCisiIHBvc2l0aW9uaW5nL3Njcm9sbGluZyBkdXJpbmcgc2VhcmNoIG1hcHBpbmdzIGNub3JlbWFwICZsdDtDLUUmZ3Q7CismbHQ7Q1ImZ3Q7bXQmbHQ7Qy1FJmd0O2B0Jmx0O0JTJmd0Oy8mbHQ7VXAmZ3Q7IGNub3JlbWFwICZsdDtDLVkmZ3Q7CismbHQ7Q1ImZ3Q7Jmx0O0MtWSZndDsmbHQ7QlMmZ3Q7LyZsdDtVcCZndDsgY25vcmVtYXAgJmx0O0MtWiZndDsmbHQ7Qy1BJmd0OworJmx0O0NSJmd0O3p0Jmx0O0JTJmd0Oy8mbHQ7VXAmZ3Q7IGNub3JlbWFwICZsdDtDLVomZ3Q7Jmx0O0MtWCZndDsKKyZsdDtDUiZndDt6YiZsdDtCUyZndDsvJmx0O1VwJmd0OyBjbm9yZW1hcCAmbHQ7Qy1aJmd0OyZsdDtDLVomZ3Q7CismbHQ7Q1ImZ3Q7enombHQ7QlMmZ3Q7LyZsdDtVcCZndDsKKworIiBWSVNVQUwgbWFwcGluZ3Mgdm5vcmVtYXAgLyB5bWcvJmx0O0MtUiZndDs9ZXNjYXBlKEAiLCcuKlwvPycpJmx0O0NSJmd0Owordm5vcmVtYXAgPyB5bWc/Jmx0O0MtUiZndDs9ZXNjYXBlKEAiLCcuKlwvPycpJmx0O0NSJmd0OworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5TZWFyY2hpbmcKK2ZvciBtb3JlIHRoYW4gb25lIHdvcmQgYXQgdGhlIHNhbWUgdGltZS48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTg4Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE4ODwvQT48QlI+CisKK0RpZCB5b3Uga25vdyB0aGF0IHdpdGggVklNIHUgY2FuIHNlYXJjaCBmb3IgbW9yZSB0aGFuIG9uZSB3b3JkIHdpdGggYSBzaW5nbGUKK2NvbW1hbmQuICBzYXkgeW91IHdhbnQgdG8gc2VhcmNoIGFsbCBvY2N1cmFuY2VzIG9mICJiaWxsIiBvciAidGVkIiwgb3IgImhhcnJ5IgoraW4gYSB0ZXh0LiAgaW4gbm9ybWFsIG1vZGUgZG8gdGhlIGZvbGxvd2luZy4gIC9cKGJpbGxcKVx8XCh0ZWRcKVx8XChoYXJyeVwpCismbHQ7RW50ZXImZ3Q7CisKK3RoaXMgd2lsbCBtYXRjaCBhbGwgaW5zdGFuY2VzIG9mIGVpdGhlciAiYmlsbCIsIG9yICJ0ZWQiLCBvciAiaGFycnkiIGluIHlvdXIKK3RleHQuIHRoZSBrZXkgaXMgdGhlIFwoXCkgYW5kIFx8IG9wZXJhdG9ycy4gIFwoXCkgZ3JvdXAgY2hhcmFjdGVycyBpbiBhIHdvcmQKK2FuZCBcfCBpcyBmb3IgT1JpbmcuCisKK3RoaXMgaXMgc28gY29vbCB1IGNhbiBldmVuIHVzZSBpdCBmb3IgcmVwbGFjaW5nIHRleHQuICB0byByZXBsYWNlIGFsbAoraW5zdGFuY2VzIG9mICJiaWxsIiBvciAidGVkIiBvciAiaGFycnkiIHdpdGggImdyZWciIGRvIHRoZSBmb2xsb3dpbmcKKzolcy9cKGJpbGxcKVx8XCh0ZWRcKVx8XChoYXJyeVwpL2dyZWcvZyAmbHQ7ZW50ZXImZ3Q7IChub3RlIDotIGlmIHUgaGF2ZQorc2V0IHRoZSBvcHRpb24gImdkZWZhdWx0IiB1IGRvbid0IG5lZWQgdGhlICJnIiBhdCB0aGUgZW5kIG9mIHRoZSBhYm92ZSBjb21tYW5kKQorCitJIGRvbid0IGtub3cgb2YgYW55IG90aGVyIGVkaXRvciB3aGljaCBjYW4gZG8gdGhpcywgd2l0aCBzbyBtdWNoIGVhc2UuCitSb2NrIG9uIFZJTSBOam95CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk1ha2UKK0N0cmwtQmFja3NwYWNlIGRlbGV0ZSBwcmV2aW91cyB3b3JkIChsaWtlIEdUSyBpbnB1dHMpPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE4OSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xODk8L0E+PEJSPgorCitTdHVmZiB0aGlzIGludG8geW91ciB+Ly5ndmltcmMgYW5kIHRoZW4geW91J2xsIGJlIGFibGUgdG8gdHlwZQorQ29udHJvbC1CYWNrc3BhY2UgdG8gZGVsZXRlIHRoZSBwcmV2aW91cyB3b3JkLglJIGhhZCBnb3R0ZW4gc28gdXNlZCB0bworQy1CUyB3b3JraW5nIGEgY2VydGFpbiB3YXkgaW4gYWxsIG15IGVkaXRvcnMgd2l0aCBhIGNlZXp5IGlucHV0IGFyZWEgKGxpa2UKK21vemlsbGEvZ2FsZW9uLCBnYWJiZXIsIGV0Yy4uLiksIHRoYXQgSSB3YW50ZWQgdGhlIHNhbWUgYmVoYXZpb3VyIHdoZW4gSQordXNlZCBndmltLgorCisiIG1hcCBjb250cm9sLWJhY2tzcGFjZSB0byBkZWxldGUgdGhlIHByZXZpb3VzIHdvcmQgOmltYXAgJmx0O0MtQlMmZ3Q7CismbHQ7RXNjJmd0O3ZCYworCitTaW1wbGUsIEkga25vdywgYnV0IHJlYXNvbmFibHkgdXNlZnVsLgorCistLVJvYmVydAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5YUCAmZ3Q7CitJLUV4cGxvcmVyICZndDsgSFRNTCBFZGl0b3IgJmx0OyBSRUcgZmlsZXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTkwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5MDwvQT48QlI+CisKK1RoZSBpc3N1ZSBpcyBwZXJtaXR0aW5nIG90aGVyIHByb2dyYW1zLCBiZXNpZGVzIE5PVEVQQUQsIGJlIHRoZSBIVE1MIGVkaXRvcgordW5kZXIgSW50ZXJuZXQgRXhwbG9yZXIuICAoQWRkaW5nICJFZGl0IiBhcyBhIE5ldyBBY3Rpb24gaW4gdGhlIHB1YmxpY2x5CitleHBvc2VkIEZpbGVzIFR5cGVzIGZvciBIVE0vTCBkb2VzIE5PVCBkbyB0aGUgam9iLikKKworR2l2ZW4gYmVsb3cgYXJlIHR3byBSRUcgZmlsZXMgZm9yIHZpbS4JSnVzdCBjdXQgJ2VtIHVwIHdoZXJlIGluZGljYXRlZC4KK1RoZXkgaGF2ZSBiZWVuIHRlc3RlZCB1bmRlciBXaW5kb3dzIFhQLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ1VUIEhFUkUtLS0tLS0tLS0tLS0tLS0KK1dpbmRvd3MgUmVnaXN0cnkgRWRpdG9yIFZlcnNpb24gNS4wMAorCis7IEdPQUw6IFNldCBndmltIGFzIEhUTUwgZWRpdG9yIGluIEludGVybmV0IEV4cGxvcmVyIDYuMCA7IFZpbSB2ZXJzaW9uIDoKKzYuMCA7IFdpbmRvd3MgdmVyc2lvbjogWFAgOyBFQVNZIFVTQUdFOiBuYW1lIHRoaXMgZmlsZSBpZXgtdmltNjAucmVnIGFuZAorZG91YmxlIGNsaWNrIG9uIGl0IDsgSGFyZCBVc2FnZTogSU1QT1JUIHRoaXMgZmlsZSB1c2luZyBSRUdFRElULkVYRSBmb3VuZAoraW4gYzpcV0lORE9XUyA7IExhc3QgbW9kaWZpZWQgZGF0ZSA6IERlYyAxNiwgMjAwMQorCis7IGd2aW0gaXMgZXhwZWN0ZWQgaW4gIkM6XFByb2dyYW0gRmlsZXNcVmltXHZpbTYwXGd2aW0uZXhlIiA7IEJlIHN1cmUgdG8KK2Fsc28gcmVzZXQgRXhwbG9yZXImZ3Q7VG9vbHMmZ3Q7SW50ZXJuZXQgT3B0aW9ucyZndDtQcm9ncmFtcworCis7IE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIDsgPEEKK0hSRUY9Imh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29ya3Nob3AvYnJvd3Nlci9jb25maWd1cmF0aW9uL2NsaWVudHJlZy9jbGllbnRyZWdpc3RyeWxheW91dC5hc3AiPmh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29ya3Nob3AvYnJvd3Nlci9jb25maWd1cmF0aW9uL2NsaWVudHJlZy9jbGllbnRyZWdpc3RyeWxheW91dC5hc3A8L0E+PEJSPgorCis7IEFkZCBWaW0gaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEhUTUwgZWRpdG9ycworW0hLRVlfQ0xBU1NFU19ST09UXC5odG1cT3BlbldpdGhMaXN0XFZpbV0KKworW0hLRVlfQ0xBU1NFU19ST09UXC5odG1cT3BlbldpdGhMaXN0XFZpbVxzaGVsbF0KKworW0hLRVlfQ0xBU1NFU19ST09UXC5odG1cT3BlbldpdGhMaXN0XFZpbVxzaGVsbFxlZGl0XQorCitbSEtFWV9DTEFTU0VTX1JPT1RcLmh0bVxPcGVuV2l0aExpc3RcVmltXHNoZWxsXGVkaXRcY29tbWFuZF0gQD0iXCJDOlxcUHJvZ3JhbQorRmlsZXNcXFZpbVxcdmltNjBcXGd2aW0uZXhlXCIgXCIlMVwiIgorCis7IERvIE5PVCBhZGQgdG8gLmh0bWwsIHJlZ2lzdHJ5IGZvciAuaHRtIHR5cGUgc3VmZmljZXMKKztbSEtFWV9DTEFTU0VTX1JPT1RcLmh0bWxcT3BlbldpdGhMaXN0XFZpbV0KKworO1tIS0VZX0NMQVNTRVNfUk9PVFwuaHRtbFxPcGVuV2l0aExpc3RcVmltXHNoZWxsXQorCis7W0hLRVlfQ0xBU1NFU19ST09UXC5odG1sXE9wZW5XaXRoTGlzdFxWaW1cc2hlbGxcZWRpdF0KKworO1tIS0VZX0NMQVNTRVNfUk9PVFwuaHRtbFxPcGVuV2l0aExpc3RcVmltXHNoZWxsXGVkaXRcY29tbWFuZF0KKztAPSJcIkM6XFxQcm9ncmFtIEZpbGVzXFxWaW1cXHZpbTYwXFxndmltLmV4ZVwiIFwiJTFcIiIKKworOyBPUFRJT05BTDogV2l0aGluIEludGVybmV0IEV4cGxvcmVyICJWaWV3IFNvdXJjZSIgd2l0aCBndmltCis7IGJ1dCBwcmVmZXIgdG8gdXNlIEVkaXQgYnV0dG9uIChnb3QgdG8gYWRkIHRoaXMpIG9uIFRvb2xiYXIKKztbSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxJbnRlcm5ldCBFeHBsb3JlclxWaWV3IFNvdXJjZSBFZGl0b3JdCisKKztbSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxJbnRlcm5ldCBFeHBsb3JlclxWaWV3IFNvdXJjZQorRWRpdG9yXEVkaXRvciBOYW1lXSA7QD0iQzpcXFByb2dyYW0gRmlsZXNcXFZpbVxcdmltNjBcXGd2aW0uZXhlIgorCis7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFT0YKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNVVCBIRVJFLS0tLS0tLS0tLS0tLS0tCitXaW5kb3dzIFJlZ2lzdHJ5IEVkaXRvciBWZXJzaW9uIDUuMDAKKworOyBHT0FMOiBVTklOU1RBTEwgZ3ZpbSBhcyBIVE1MIGVkaXRvciBpbiBJbnRlcm5ldCBFeHBsb3JlciA2LjAgOyBWaW0gdmVyc2lvbiA6Cis2LjAgOyBXaW5kb3dzIHZlcnNpb246IFhQIDsgRUFTWSBVU0FHRTogbmFtZSB0aGlzIGZpbGUgaWV4LXZpbTYwLXVuaW5zdGFsbC5yZWcKK2FuZCBkb3VibGUgY2xpY2sgb24gaXQgOyBIYXJkIFVzYWdlOiBJTVBPUlQgdGhpcyBmaWxlIHVzaW5nIFJFR0VESVQuRVhFCitmb3VuZCBpbiBjOlxXSU5ET1dTIDsgTGFzdCBtb2RpZmllZCBkYXRlIDogRGVjIDE2LCAyMDAxCisKKzsgZ3ZpbSBpcyBleHBlY3RlZCBpbiAiQzpcUHJvZ3JhbSBGaWxlc1xWaW1cdmltNjBcZ3ZpbS5leGUiIDsgQmUgc3VyZSB0bworYWxzbyByZXNldCBFeHBsb3JlciZndDtUb29scyZndDtJbnRlcm5ldCBPcHRpb25zJmd0O1Byb2dyYW1zCisKKzsgTWljcm9zb2Z0IGRvY3VtZW50YXRpb24gOyA8QQorSFJFRj0iaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93b3Jrc2hvcC9icm93c2VyL2NvbmZpZ3VyYXRpb24vY2xpZW50cmVnL2NsaWVudHJlZ2lzdHJ5bGF5b3V0LmFzcCI+aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93b3Jrc2hvcC9icm93c2VyL2NvbmZpZ3VyYXRpb24vY2xpZW50cmVnL2NsaWVudHJlZ2lzdHJ5bGF5b3V0LmFzcDwvQT48QlI+CisKK1stSEtFWV9DTEFTU0VTX1JPT1RcLmh0bVxPcGVuV2l0aExpc3RcVmltXQorCitbLUhLRVlfQ0xBU1NFU19ST09UXC5odG1sXE9wZW5XaXRoTGlzdFxWaW1dCisKK1stSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXE1pY3Jvc29mdFxJbnRlcm5ldCBFeHBsb3JlclxWaWV3IFNvdXJjZSBFZGl0b3JdCisKKzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEVPRgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNVVCBIRVJFLS0tLS0tLS0tLS0tLS0tCisKK0hhcHB5IFZpbW1pbmcuLi4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlRyYW5zcG9zaW5nPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5MSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOTE8L0E+PEJSPgorCitZb3UgY2FuIGVhc2lseSBtb3ZlIGxpbmVzIHdpdGggdGhlc2UgbWFwcyB1c2luZyAmbHQ7Qy1VcCZndDsgYW5kICZsdDtDLURvd24mZ3Q7Cisob25seSBpbiBHVUkgdmVyc2lvbiA6KCApIChXb3JrcyBpbiBub3JtYWwsIGluc2VydCwgYW5kIHZpc3VhbCBtb2RlLCBidXQKK3lvdSBjYW4ndCBhZGQgYSBjb3VudCB0byB0aGVtKSAiIFRyYW5zcG9zaW5nIGxpbmVzIG5tYXAgJmx0O0MtRG93biZndDsKKzombHQ7Qy11Jmd0O21vdmUgLisxJmx0O0NSJmd0OyBubWFwICZsdDtDLVVwJmd0OyA6Jmx0O0MtdSZndDttb3ZlIC4tMiZsdDtDUiZndDsKKworaW1hcCAmbHQ7Qy1Eb3duJmd0OyAmbHQ7Qy1vJmd0OzombHQ7Qy11Jmd0O21vdmUgLisxJmx0O0NSJmd0OyBpbWFwICZsdDtDLVVwJmd0OworJmx0O0MtbyZndDs6Jmx0O0MtdSZndDttb3ZlIC4tMiZsdDtDUiZndDsKKwordm1hcCAmbHQ7Qy1Eb3duJmd0OyA6bW92ZSAnJmd0OysxJmx0O0NSJmd0O2d2IHZtYXAgJmx0O0MtVXAmZ3Q7IDptb3ZlCisnJmx0Oy0yJmx0O0NSJmd0O2d2CisKKyIgVHJhbnNwb3NlIGNoYXJzIChsaWtlIEN0cmwtVCBpbiBlbWFjcywgc2hlbGwuLi4pICBpbWFwICZsdDtDLUYmZ3Q7CismbHQ7RXNjJmd0O1hwYQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+TGF0ZXggSGVscCBmb3IgVklNPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5MiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOTI8L0E+PEJSPgorCitMYVRlWCBIZWxwIGZvciBhdWNUZVggYHRyYW5zbGF0ZWQnIGFzIHZpbSBoZWxwIGZpbGUuCisKK0luc3RhbGxpbmcKKworOmhlbHAgYWRkLWxvY2FsLWhlbHAKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+SW5zZXJ0Cit0aGUgY3VycmVudCBmaWxlbmFtZSBhdCBjdXJzb3IgcG9zdGlvbi48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTkzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5MzwvQT48QlI+CisKK0kgZm91bmQgdGhpcyBvbmUgZ29vZCBmb3Igd2hlbiBJIHdhcyBzdGFydGluZyB0byBsZWFybiBKYXZhLCBpdCBzaW1wbHkgaW5zZXJ0cwordGhlIGN1cnJlbnQgZmlsZW5hbWUsIGF0IHRoZSBjdXJzb3IgcG9zaXRpb24sIHdoZW4geW91IGFyZSBpbiBpbnNlcnQgbW9kZS4KK0hvbmVzdGx5LCBpdHMgYSBtaXNoLW1hc2ggb2Ygc29tZSBvdGhlciB0aXBzIEkgZm91bmQgaGVyZSwgYnV0IEkgdGhvdWdodCBpdAorbWlnaHQgYmUgdXNlZnVsLgorCitpbWFwIFxmbiAgICZsdDtDLVImZ3Q7PWV4cGFuZCgiJTp0OnIiKSZsdDtDUiZndDsKKworRW5qb3khCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5JbnNlcnRpbmcgdGV4dCBpbiBtdWx0aXBsZSBsaW5lczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOTQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTk0PC9BPjxCUj4KKworRG8geW91IGtub3cgdGhlIEkga2V5IGluIHZpc3VhbC1ibG9jayBtb2RlPworCitTdXBwb3NlIHlvdSBoYXZlIGxldCBhPTIgbGV0IGI9MyBsZXQgYz00CisKK1lvdSB3YW50IHRvIG1ha2UgdGhlc2UgdmFyaWFibGVzIHNjcmlwdC13aXNlLiBUaGVuIHlvdSBtb3ZlIHRvIG92ZXIgYSwgaGl0CismbHQ7Qy12Jmd0OywgcHJlc3MgamogYW5kIG5vdyBwcmVzcyBJLglZb3Ugd2lsbCBiZSBpbiBpbnNlcnQgbW9kZSBiZWZvcmUgYQorTm93IGVudGVyIHM6Jmx0O0VzYyZndDssIGFuZCB3aGVuIHlvdSBwcmVzcyAmbHQ7RXNjJmd0OywgYiBhbmQgYyB3aWxsIGhhdmUKK3RoZSBzOiBwcmVmaXggdG9vLiAgU2VlIHx2X2JfSXwKKworSGFwcHkgdmltbWluZyEJR2VyZ2VseSBLb250cmEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlN3aXRjaGluZyBiZXR3ZWVuIGZpbGVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5NSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOTU8L0E+PEJSPgorCitXaGVuIHlvdSBlZGl0IG11bHRpcGxlIGZpbGVzLCB5b3Ugb2Z0ZW4gbmVlZCB0byBjaGFuZ2Ugd2luZG93cy4gIFlvdSBjYW4gc2V0Cit1cCB2aW0gaW4gd2luZG93cyBhbmQgZ3ZpbSB0byBzd2l0Y2ggYmV0d2VlbiB3aW5kb3dzIHdpdGggdGhlIGNvbW1vbmx5IHVzZWQKK0N0cmwtVGFiIGFuZCBDdHJsLVNoaWZ0LVRhYiBUaGUgbWFwcGluZ3Mgbm1hcCAmbHQ7Qy1UYWImZ3Q7ICZsdDtDLXcmZ3Q7dworbm1hcCAmbHQ7Qy1TLVRhYiZndDsmbHQ7Qy13Jmd0O1cgKFRoZXkgd3JhcCBhcm91bmQpIFNlZSBhbHNvIHxDdHJsLXd8CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkZpbGVOYW1lCitDb21wbGV0aW9uIGluIFNoZWxsIFNjcmlwdHM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTk2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5NjwvQT48QlI+CisKK0luIHNoZWxsIHNjcmlwdHMsIHlvdSBvZnRlbiBkZWZpbmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBkaWZmIGRpcmVjdG9yeQorbmFtZXMuCWkuZS4gIEpBVkFfSE9NRT0vb3B0L2phdmEvamRrMS40IFBBVEg9L3Vzci9sb2NhbC9iaW46L2Jpbi4uLi4KKworTm9ybWFsbHkgdHlwaW5nIEN0cmwtWCBDdHJsLUYgaXMgdXNlZCB0byBjb21wbGV0ZSBGaWxlTmFtZSB1bmRlciBjdXJzb3IuCitCdXQgdGhpcyBkb2VzIG5vdCB3b3JrIGlmIHVzZWQgb24gbGluZXMgZ2l2ZW4gYWJvdmUuICBUaGlzIGlzIGJlY2F1c2UgdmltCit0cmVhdHMgIj0iIHNpZ24gYXMgYSB2YWxpZCBmaWxlbmFtZSBjaGFyYWN0ZXIuCVNpbmNlIHRoZSBhY3R1YWwgcG9zc2liaWxpdHkKK29mICI9IiBiZWluZyBpbiBhbnkgZmlsZW5hbWUgaXMgdmVyeSBsZXNzLCB0aGlzIGNoYXIgY2FuIGJlIHJlbW92ZWQgZnJvbQordGhlIGxpc3Qgb2YgdmFsaWQgZmlsZW5hbWUgY2hhci4KKworc2V0IGlzZm5hbWUtPT0KKworcHV0dGluZyB0aGUgYWJvdmUgbGluZSBpbiAudmltcmMgd2lsbCByZW1vdmUgIj0iIGZyb20gdGhlIGxpc3Qgb2YgdmFsaWQKK2ZpbGVuYW1lIGNoYXJzLiAgdGh1cyB1IGNhbiBlYXN5bHkgY29tcGxldGUgZmlsZW5hbWVzIHVzaW5nICZsdDtDdHJsLVgmZ3Q7CismbHQ7Q3RybC1GJmd0OyBOam95CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk9wZW4KK2ZpbGUgaW4gYWxyZWFkeSBydW5uaW5nIHZpbSBmcm9tIGVsc2V3aGVyZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOTciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MTk3PC9BPjxCUj4KKworSWYgeW91IHdhbnQgZWRpdCBuZXcgZmlsZSwgYW5kIHlvdSAgd2FudCBkbyBpdAlpbiBhbHJhZHkgcnVubmluZyB2aW0sCitpbnN0ZWFkIG9mIGxhdW5jaGluZyBhbm90aGVyIGluc3RhbmNlLCB5b3UgbWF5IHVzZSAtLXJlbW90ZSBhcmd1bWVudDoKKworZ3ZpbSBmaXJzdF9maWxlIGd2aW0gLS1yZW1vdGUgK3NwbGl0IGZpcnN0X2ZpbGUKKworOmhlIC0tcmVtb3RlIEl0IHJlcXVpcmVzIFggd2luZG93cyAoYnV0IHdvcmtzIGluIHRlcm1pbmFsIHZlcnNpb24gb2YgdmltCit0aGVyZSB0b28pIG9yIE1TIHdpbmRvd3MgYW5kIGJ1aWx0LWluIGNsaWVudC1zZXJ2ZXIgbWVjaGFuaXNtLiBJZiB0aGVyZSBhcmUKK3NldmVyYWwgaW5zdGFuY2VzIG9mIHZpbSBhbHJlYWR5IHJ1bm5pbmcsIHlvdSBtYXkgY2hvb3NlIHRvIHdoaWNoIHlvdSB0YWxrCit1c2luZyAtLXNlcnZlcm5hbWUgOmhlbHAgLS1zZXJ2ZXJuYW1lCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlBhc3RpbmcKK2NvZGUgd2l0aCBzeW50YXggY29sb3JpbmcgaW4gZW1haWxzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOTg8L0E+PEJSPgorCitXaGVuIHNlbmRpbmcgY29kZSBzbmlwcGV0cyBvciBkaWZmcyB0byB5b3VyIGNvbGxlYWd1ZXMgZWl0aGVyIGZvciBjb2RlIHJldmlldworb3IgZm9yIHNvbWV0aGluZyBlbHNlIGFzIGVtYWlsLCBob3cgbmljZSBhbmQgY2xlYXIgaXQgd2lsbCBiZSBpZiB5b3UgY2FuCitwYXN0ZSBpdCB3aXRoIHRoZSBWaW0gc3ludGF4IGhpZ2hsaWdodGluZz8gSSBhbSBzdXJlIHRoZXkgd2lsbCBiZSBpbXByZXNzZWQKK2FuZCBmZWVsIG11Y2ggZWFzaWVyIHRvIHJlYWQgdGhlIGNvZGUuIEl0IGlzIGFsc28gdmVyeSBlYXN5IGFuZCBmYXN0IChvbmNlCit5b3UgcHJhY3RpY2UgaXQpIHRvIGRvIHRoaXMuCisKK1RoaXMgcHJvYmFibHkgd29ya3Mgb25seSBvbiB3aW5kb3dzIGFuZCByZXF1aXJlcyB5b3UgdG8gdXNlIEludGVybmV0IEV4cGxvcmVyCithbmQgYW4gZW1haWwgY2xpZW50IHRoYXQgdW5kZXJzdGFuZCBSVEYgY29udGVudCBjb21pbmcgZnJvbSBjbGlwYm9hcmQsIHN1Y2gKK2FzIE91dGxvb2sgb3IgT3V0bG9vayBFeHByZXNzLiBBdCBsZWFzdCB0aGF0IHdvdWxkIG1ha2UgdGhlIHByb2Nlc3MgZmFzdGVyLiBJCitoYXZlbid0IHRyaWVkIG9uIGFueSBvdGhlciBjb21iaW5hdGlvbiB0aG91Z2guIFRoaXMgaXMgd2hhdCB5b3UgbmVlZCB0byBkbzoKKworLSBPcGVuIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUvY29kZSBzbmlwcGV0L2RpZmYgZXRjLiBpbiBndmltLiBJZiB5b3UKK3VzZSBkYXJrIGJhY2tncm91bmQgZm9yIEdWaW0gKGxpa2UgbWUpLCB0aGVuIEkgd291bGQgc3VnZ2VzdCB5b3UgdG8gY2hhbmdlCit5b3VyIGNvbG9yIHNjaGVtZSB0ZW1wb3JhcmlseSB0byBzb21ldGhpbmcgZWxzZSB0aGF0IGhhcyBhIHdoaXRlIGJhY2tncm91bmQKK29yIGp1c3QgdXNlIHRoZSAiLVUgTk9ORSIgYXMgYmVsb3c6CisKKyAgICBndmltIC1VIE5PTkUgJmx0O2ZpbGUmZ3Q7CisKKy0gQ29udmVydCB0aGUgZmlsZSBpbnRvIEhUTUwgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGF0IHRoZSBjb2xvbgorcHJvbXB0IGFzIGJlbG93OgorCisgICAgOnJ1bnRpbWUgc3ludGF4LzJodG1sLnZpbQorCistIFRoZSBhYm92ZSBzdGVwIHdpbGwgb3BlbiBhIG5ldyB3aW5kb3cgd2l0aCB0aGUgSFRNTCBjb250ZW50IGluIGl0LiBZb3UgbWlnaHQKK3dhbnQgdG8ganVzdCBzYXZlIGl0IHdpdGggdGhlIHN1Z2dlc3RlZCBuYW1lIG9yIHdyaXRlIGludG8gYSB0ZW1wb3JhcnkgZmlsZSBhczoKKworICAgIDp3ISBjOi90bXAvdC5odG1sCisKKy0gT3BlbiB0aGUgSUUgYnJvd3NlciB3aW5kb3cgYW5kIG9wZW4gdGhlIGFib3ZlIHRlbXAgZmlsZSAiYzovdG1wL3QuaHRtbCIuCistIE5vdyB5b3Ugc2VsZWN0IGFsbCAocHJlc3MgXkEpIGFuZCBjb3B5IGl0ICheQykuICAtIFlvdSBhcmUgcmVhZHkgdG8gcGFzdGUKK2l0IHdpdGggc3ludGF4IGNvbG9yaW5nIGluIGFueSBhcHBsaWNhdGlvbiB0aGF0IGFjY2VwdHMgUlRGIGNvbnRlbnQgZnJvbQorY2xpcGJvYXJkLCBpbmNsdWRpbmcgT3V0bG9vayBvciBPdXRsb29rIEV4cHJlc3MgbWFpbCBjb21wb3Npbmcgd2luZG93LgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5tYXhpbWl6ZQord2luZG93IGFuZCByZXR1cm4gdG8gcHJldmlvdXMgc3BsaXQgc3RydWN0dXJlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTE5OSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0xOTk8L0E+PEJSPgorCitTYXkgeW91IGhhdmUgbGF5ZWQgb3V0IGEgY29tcGxleCB3aW5kb3cgc3BsaXQgc3RydWN0dXJlLCBhbmQgd2FudCB0bwordGVtcG9yYXJpbHkgb3BlbiAxIHdpbmRvdyB3aXRoIG1heCBkaW1lbnNpb25zLCBidXQgZG9uJ3Qgd2FudCB0byBsb3NlIHlvdXIKK3NwbGl0IHN0cnVjdHVyZS4gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYW5kIG1hcHBpbmdzIGxldCB5b3UgdG9nZ2xlIGJldHdlZW4KK3RoZSBzcGxpdCB3aW5kb3dzIGFuZCBvbiB3aW5kb3cgbWF4aW1pemVkLiBUaGUgbWFwcGluZ3MgcHJldmVudCB0aGUgZGVmYXVsdAorYmVoYXZpb3Igb2YgY2FsbGluZyA6b25seSBhbmQgbG9zaW5nIHlvdXIgZmluZWx5IHR1bmVkIHNwbGl0cy4KKworUHV0IHRoaXMgYml0IGluIHlvdXIgdmltcmMgZmlsZSwgY2hhbmdlIG1hcHBpbmdzIGlmIHlvdSBkb24ndCB3YW50IHRvIG92ZXJyaWRlCit0aGUgZGVmYXVsdHM6CisKK25ub3JlbWFwICZsdDtDLVcmZ3Q7TyA6Y2FsbCBNYXhpbWl6ZVRvZ2dsZSAoKSZsdDtDUiZndDsgbm5vcmVtYXAgJmx0O0MtVyZndDtvCis6Y2FsbCBNYXhpbWl6ZVRvZ2dsZSAoKSZsdDtDUiZndDsgbm5vcmVtYXAgJmx0O0MtVyZndDsmbHQ7Qy1PJmd0OyA6Y2FsbAorTWF4aW1pemVUb2dnbGUgKCkmbHQ7Q1ImZ3Q7CisKK2Z1bmN0aW9uISBNYXhpbWl6ZVRvZ2dsZSgpCisJaWYgZXhpc3RzKCJzOm1heGltaXplX3Nlc3Npb24iKQorCQlzb3VyY2UgczptYXhpbWl6ZV9zZXNzaW9uIGNhbGwgZGVsZXRlKHM6bWF4aW1pemVfc2Vzc2lvbikKKwkJdW5sZXQgczptYXhpbWl6ZV9zZXNzaW9uIGxldCAmaGlkZGVuPXM6bWF4aW1pemVfaGlkZGVuX3NhdmUKKwkJdW5sZXQgczptYXhpbWl6ZV9oaWRkZW5fc2F2ZQorCWVsc2UKKwkJbGV0IHM6bWF4aW1pemVfaGlkZGVuX3NhdmUgPSAmaGlkZGVuIGxldCBzOm1heGltaXplX3Nlc3Npb24gPQorCQl0ZW1wbmFtZSgpIHNldCBoaWRkZW4gbWtzZXNzaW9uISBzOm1heGltaXplX3Nlc3Npb24gb25seQorCWVuZGlmCitlbmRmdW5jdGlvbgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Cb3VuY2luZworUGFyZW50aGVzZXMgKGR1cmluZyBpbnNlcnRpb24pPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwMCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMDA8L0E+PEJSPgorCitXaGVuIG9uZSBpcyBpbnNlcnRpbmcgcGFyZW50aGVzZXMgc29tZSBmb2xrcyBsaWtlIHRvIHNlZSB0aGUgY3Vyc29yIGJvdW5jZQorb2ZmIHRoZSBtYXRjaGluZyBwYXJlbnRoZXNpcy4gIFRvIGRvIHRoYXQsIHB1dCB0aGUgZm9sbG93aW5nIG1hcCBpbnRvIHlvdXIKKyZsdDsudmltcmMmZ3Q7IGZpbGU6CisKKyAgICBpbm9yZW1hcCApICkmbHQ7Yy1vJmd0OyUmbHQ7Yy1vJmd0OzpzbGVlcAorICAgIDUwMG0mbHQ7Q1ImZ3Q7Jmx0O2MtbyZndDslJmx0O2MtbyZndDthCisKK0FkanVzdCB0aGUgdGltZSBkZWxheSAoaXRzIDUwMCBtaWxsaXNlY29uZHMgYWJvdmUpIHRvIHN1aXQgeW91ciBuZWVkcy4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlRoZSBtZWFuaW5nIG9mIGxpZmU8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjAxIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwMTwvQT48QlI+CisKK1VzZSB0aGlzIHRpcCBpZiB5b3UgbmVlZCB0byBkaXNjb3ZlciB0aGUgbWVhbmluZyBvZiBsaWZlLCB0aGUgdW5pdmVyc2UKK2FuZCBldmVyeXRoaW5nLgorCitTaW1wbHkgZG86IDpoIDQyCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5kZWJ1Z2dpbmcgd2luZG93IGF1dG9jb21tYW5kczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMDIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjAyPC9BPjxCUj4KKworRG9uJ3Qga25vdyBob3cgcGVvcGxlIGRlYnVnIGF1dG9jb21tYW5kcywgYnV0IEkganVzdCBmb3VuZCBvdXQgdGhhdCB5b3UgY2FuCitkZWJ1ZyAoYXQgbGVhc3QpIHRob3NlIHRoYXQgcmVzdWx0IGR1ZSB0byB3aW5kb3cgY2xvc2UgYnkganVzdCBkb2luZyBhIGRlYnVnCitxdWl0LCBpLmUuLAorCis6ZGVidWcgcXVpdAorCitWaW0gd2lsbCBsZXQgeW91IHN0ZXAgaW50byB0aGUgYXV0b2NvbW1hbmRzLiBUcnkgaXQgdG8gYmVsaWV2ZS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPk1ha2UgbWFrZSBtb3JlIGhlbHBmdWw8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjAzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwMzwvQT48QlI+CisKK0kgZmluZCB0aGlzIGEgdmVyeSB1c2VmdWwgY29tbWFuZCB0byB1c2UuICBBZGQgdGhlIGJlbG93IDQgbGluZXMgdG8geW91ciB2aW1yYy4KK1RoZW4gaW5zdGVhZCBvZiAibWFrZSIgdXNlICJNYWtlIi4KKworIiBDb21tYW5kIE1ha2Ugd2lsbCBjYWxsIG1ha2UgYW5kIHRoZW4gY3dpbmRvdyB3aGljaCAiIG9wZW5zIGEgMyBsaW5lIGVycm9yCit3aW5kb3cgaWYgYW55IGVycm9ycyBhcmUgZm91bmQuICAiIGlmIG5vIGVycm9ycywgaXQgY2xvc2VzIGFueSBvcGVuIGN3aW5kb3cuCis6Y29tbWFuZCAtbmFyZ3M9KiBNYWtlIG1ha2UgJmx0O2FyZ3MmZ3Q7IHwgY3dpbmRvdyAzCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlNvbWUKK21hcHBpbmdzIGZvciB1c2luZyBjc2NvcGUgd2l0aCB2aW0uPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwNCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMDQ8L0E+PEJSPgorCitUaGVzZSBtYXBwaW5ncyBjYW4gbWFrZSB1c2luZyBjc2NvcGUgYSBmdW4uIFlvdSBjYW4gY29weSB0aGUgd29yZCB1bmRlciB0aGUKK2N1cnNvciBpbiBvbmUgd2luZG93LCBhbmQgc2VhcmNoIGZvciBpdCBmcm9tIG90aGVyIHdpbmRvdy4KKworIiBDb3B5IGFuZCBwYXN0ZSB0aGUgd29yZCB1bmRlciBjdXJzb3IgbWFwICZsdDtzaWxlbnQmZ3Q7ICZsdDtDLVNwYWNlJmd0OworOmxldEBtPWV4cGFuZCgiJmx0O2N3b3JkJmd0OyIpJmx0O0NSJmd0OworCisiIFVzZSB0aGUgQy1TcGFjZSB3b3JkIGFzIHRoZSBzZWFyY2ggY3JpdGVyaW9uIG1hcCAmbHQ7Qy1GNiZndDsgOmNzY29wZQorZmluZCBzICZsdDtDLVImZ3Q7PUBtJmx0O0NSJmd0OyZsdDtDUiZndDsgbWFwICZsdDtDLUY1Jmd0OyA6Y3Njb3BlIGZpbmQKK2MgJmx0O0MtUiZndDs9QG0mbHQ7Q1ImZ3Q7Jmx0O0NSJmd0OyBtYXAgJmx0O0MtRjcmZ3Q7IDpjc2NvcGUgZmluZCBnCismbHQ7Qy1SJmd0Oz1AbSZsdDtDUiZndDsmbHQ7Q1ImZ3Q7CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Db21wdXRpbmcgYSBzdW0gb2YgbnVtYmVycyBpbiB2aW08L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjA1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwNTwvQT48QlI+CisKKyJTb21ldGltZXMgeW91IG5lZWQgdG8gc3VtIGEgc29tZSBudW1iZXJzIGluIHZpbS4gIFRoZXJlICphcmUqIHNvbWUgcGx1Z2lucworInRoYXQgY2FuIGRvIHRoZSBqb2IuICBCdXQgd2hhdCBpZiB0aGUgbnVtYmVycyBhcmUgbm90IGluIGEgY29sdW1ucyBvciBhcmUgb24KKyJ0aGUgc2FtZSBsaW5lIG9yIGFyZSBzYWN0dGVyZWQgYWxsIGFjcm9zcyB0aGUgZmlsZT8gWW91IG1pZ2h0IGFsc28gbmVlZCB0bworInN1bSBhbGwgdGhlIG51bWJlcnMgaW4gZmlsZSB0aGF0IGxvb2sgbGlrZSAnMTIzNCQnLCBvciAnNTQ1NjUgRXUnICBpZ25vcmluZworb3RoZXJzLiAgIiAiVGhlcmUgaXMgYSB2ZXJ5IHNpbXBsZSB0cmljaywgdXNpbmcgKG15IGZhdm91cml0ZSkgY29tbWFuZCAiOnMgIgorIkZpcnN0IHlvdSBkZWZpbmUgZm9sbG93aW5nIGZ1bmN0aW9uCisKKzpsZXQgZzpTPTAJCSJJbiBnbG9iYWwgdmFyaWFibGUgUyB3ZSBsYXRlciBmaW5kIHRoZSByZXN1bHQKKworOmZ1bmN0aW9uISBTdW0obnVtYmVyKQkJIlRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIHdpdGggYSAnIScsCisJCQkJInNvIGl0IGRvZXMgbm90IGNvbXBsYWluIGR1cmluZyBkZWJ1Z2dpbmcKKwkJCQkid2hlbiB5b3UgYXJlIHJlZGVmaW5pbmcgdGhlIGZ1bmN0aW9uCisJOmxldCBnOlM9ZzpTK2E6bnVtYmVyCSJ3ZSBhY2N1bXVsYXRlIHRoZSByZXN1bHQgaW4gZ2xvYmFsIHZhcmlhYmxlCisJUyA6cmV0dXJuIGE6bnVtYmVyCSAgImZ1bmN0aW9uIHJldHVybnMgdGhlIGFyZ3VtZW50LCBzbyBhZnRlciBhIDpzCisJCQkJImNvbW1hbmQgdGhlIHRleHQgcmVtYWlucyB0aGUgc2FtZQorOmVuZGZ1bmN0aW9uCisKKyJ5b3UgY2FuIGRvIGlzc3VlIHRob3NlIGZldyBjb21tYW5kcyBmcm9tIGEgY29tbWFuZCBsaW5lLCAib3IgY3JlYXRlIGEgc21hbGwKK2ZpbGUgYW5kIHB1dCBpdCBpbnRvIHlvdXIgcGx1Z2luIGRpcmVjdG9yeSwgIm9yIHdyaXRlIHRob3NlIGZldyBjb21tYW5kcworaW50byBhIGZpbGUgZW5kIGlzc3VlIGEgY29tbWFuZCA6c28gJQorCisiaG93IHRvIHVzZSB0aGlzIGxpdHRsZSBmdW5jdGlvbjogImxldCdzIHN1cHBvc2UgeW91IGhhdmUgYSBzaW1wbGUKK2NvbHVtbiBvZiBudW1iZXJzIGxpa2UgIiAiMTAgIjIwICIzMCAiICJ5b3UgaXNzdWUgY29tbWFuZCBsaWtlOiA6bGV0IFM9MAorOiVzL1swLTldXCsvXD1TdW0oc3VibWF0Y2goMCkpLyAidGhlIGNvbW1hbmQgZmluZHMgdGhlIGZpcnN0IG51bWJlciBvbiB0aGUKK2xpbmUgYW5kIGFkZHMgaXQgdG8gdGhlIFMgIiAidGhlIHJlc3VsdCBpcyBkaXNwbGF5ZWQgOmVjaG8gJFMKKworIiEhISEgZG9uJ3QgZm9yZ2V0IHRvIGRvIDpsZXQgZzpTPTAgImJlZm9yZSB1c2UuCisKKyJ5b3UgY2FuIGFsc28gdXNlIFx6cyBhbmQgXHplIGF0b21zIGluIGEgcmVndWxhciBleHByZXNzaW9uIHRvICJkZWxpbWl0IHRoZQorbnVtYmVyLCBzbyBzdWJtYXRjaCgwKSByZXR1cm5zIG9ubHkgYSBudW1iZXIgYW5kICJ0aGUgdGV4dCByZW1haW5zIHVuY2hhbmdlZAorYWZ0ZXIgJ3N1YnN0aXR1dGUnCisKKyJmb3Igc3RhcnRlciBvbiB0aGUgd29uZGVyZnVsbCB3b3JsZCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHNlZTogOmhlbHAKK3Vzcl8yNy50eHQKKworImZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc2VhcmNoIHBhdHRlcm4gc2VlIDpoZWxwIDpzIDpoZWxwIHBhdHRlcm4KKworImZvciByZXBsYWNlbWVudCBzdHJpbmdzIGJlZ2luaW5nIHdpdGggXD0gYW5kIHNwZWNpYWwgZnVuY3Rpb24gc3VibWF0Y2goMClzZWUKKzpoZWxwIHN1Yi1yZXBsYWNlLXNwZWNpYWwKKworImZvciB0aGUgKnVsdGltYXRlKiBndWlkZSB0aHJvdWdoIHRoZSB3b3JsZCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHNlZSBib29rOgorIk1hc3RlcmluZyBSZWd1bGFyIEV4cHJlc3Npb25zICJQb3dlcmZ1bCBUZWNobmlxdWVzIGZvciBQZXJsIGFuZCBPdGhlciBUb29scworImJ5IEplZmZyZXkgRS5GLiBGcmllZGwgImZyb20gTydSRUlMTFkKKworInRoZSBib29rIGRvZXMgbm90IHdyaXRlIGFib3V0IHZpbSwgeWV0IGhlcmUgeW91IGNhbiBsZWFybiB0aGF0ICI6cyBjb21tYW5kCitpcyB0aGUgbW9zdCBwb3dlcmZ1bGwgY29tbWFuZCB5b3UgY2FuIGZpbmQgaW4gYSB0ZXh0IGVkaXRvci4gICIod2l0aCB0aGUKK3Bvc3NpYmxlIGV4Y2VwdGlvbiBvZiA6Z2xvYmFsIGNvbW1hbmQpCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkhpZ2hsaWdodAorZG91YmxlZCB3b3JkIGVycm9ycyBpbiB0ZXh0PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwNiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMDY8L0E+PEJSPgorCitBbiBlcnJvciBJIHNvbWV0aW1lcyBtYWtlIHdoaWxlIHdvcmtpbmcgb24gYSBMYVRlWCBmaWxlIGlzIHRoZSByZXBldGl0aW9uIG9mCithIHdvcmQgYXMgaW4gInRoZSB0aGUiLiBNb3N0IG9mdGVuLCBzdWNoIGRvdWJsZWQgd29yZHMgY29tZSBhYm91dCB0aHJvdWdoCithIGNhcmVsZXNzIGVkaXQuIERvdWJsZWQgd29yZHMgYXJlIGhhcmQgdG8gc3BvdCB3aGVuIHRoZSBmaXJzdCB3b3JkIG9mIHRoZQorZG91YmxlZCBwYWlyIGlzIHRoZSBsYXN0IHdvcmQgb24gb25lIGxpbmUsIGFuZCB0aGUgc2Vjb25kIHdvcmQgb2YgdGhlIHBhaXIKK2lzIHRoZSB0aGUgZmlyc3Qgd29yZCBvbiB0aGUgbmV4dCBsaW5lLiBUaGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYW4gZXJyb3IKK2luIHRoZSBsYXN0IHNlbnRlbmNlLiBWaW0ncyBzeW50YXggbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIGhpZ2hsaWdodCBkb3VibGVkCit3b3JkcyBhcyBhbiBlcnJvci4KKworVG8gb2J0YWluIHRoaXMgaGlnaGxpZ2h0aW5nIGZvciBUZVggYW5kIExhVGVYIGZpbGVzLCBwbGFjZSB0aGUgZm9sbG93aW5nCit0d28gbGluZXM6CisKKyAgICAgICBzeW4gbWF0Y2ggdGV4RG91YmxlV29yZCAiXGNcJmx0O1woXGFcK1wpXF9zXCtcMVwmZ3Q7IiBoaSBkZWYgbGluaworICAgICAgIHRleERvdWJsZVdvcmQgRXJyb3IKKworaW4gYSBmaWxlIGNhbGxlZCB0ZXgudmltIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBzaG93cyB1cCBsYXN0IGluIHlvdXIKK3J1bnRpbWVwYXRoICg6c2V0IHJ1bnRpbWVwYXRoPyB0byBjaGVjaykuIFRoaXMgd2lsbCBvZnRlbiBiZSBlaXRoZXIKK34vLnZpbS9hZnRlci9zeW50YXgvdGV4LnZpbSBvciAkVklNL3ZpbWZpbGVzL2FmdGVyL3N5bnRheC90ZXgudmltCisKK1RoZSBzYW1lIGVmZmVjdCBjYW4gYmUgb2J0YWluZWQgZm9yIGZpbGVzIG9mIGEgZGlmZmVyZW50IGZpbGV0eXBlLCBzYXkgaHRtbCwKK2J5IHB1dHRpbmcgdGhlIHNhbWUgbGluZXMgaW4gYSBmaWxlIGNhbGxlZCBodG1sLnZpbSBpbiB0aGUgc2FtZSBsb2NhdGlvbi4KKworRm9yIG1vcmUgb24gdGhlIHJ1bnRpbWVwYXRoLCA6aGUgcnVudGltZXBhdGguICBGb3IgbW9yZSBvbiBzeW50YXggaGlnaGxpZ2h0aW5nLAorOmhlIHN5bnRheAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5lZGl0aW5nCitkYXRhYmFzZXMgd2l0aCBWaW0vUGVybC9EQkk8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjA3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwNzwvQT48QlI+CisKK1BlcmwncyBEYXRhLUJhc2UtSW5kZXBlbmRlbnQgKERCSSkgbW9kdWxlIHByb3ZpZGVzIHByb2dyYW1taW5nIGxhbmd1YWdlCitsZXZlbCBhY2Nlc3MgdG8gYSBsb3Qgb2YgZGF0YWJhc2VzLgorCitWaW0gaG9zdHMgYW4gZW1iZWRkZWQgUGVybCBpbnRlcnByZXRlci4gU28gaXQgaXMgb25seSBhIG1hdHRlciBvZiBzb21lIGtleQorc3Ryb2tlcyB0byBpbnRlcmFjdGl2ZWx5IGlzc3VlIERCIGNvbW1hbmRzIGZyb20gd2l0aGluIFZpbSBvciB0byBzZWFyY2gsCitlZGl0LCBhbmQgcmVwbGFjZSBkYXRhYmFzZSBjb250ZW50cyBpbmNsdWRpbmcgcmV0cmlldmFsIGFuZCBzdG9yYWdlLiBPZiBjb3Vyc2UKKyJjcmVhdGUgdGFibGUiIHNjcmlwdHMgY2FuIGJlIHdvcmtlZCB1cG9uIGluIFZpbSBhcyB3ZWxsIGFzIHN0b3JpbmcgcmVjdXJyaW5nCitwYXR0ZXJucyBpbiBWaW0gZnVuY3Rpb25zIG9yIFBlcmwgbW9kdWxlcy4KKworUHJlcmVxdWlzaXRlczogVmltIG5lZWRzIHRvIGJlIGNvbXBpbGVkIHdpdGggUGVybCBzdXBwb3J0IGVuYWJsZWQuIFNlZSB0aGUKK3xpZl9wZXJsLnR4dHwgbWFudWFsIHBhZ2UhIFRoZSBDUEFOIG1vZHVsZSBEQkkgYXMgd2VsbCBhcyBhbiBhcHByb3ByaWF0ZQorZGF0YWJhc2UgZHJpdmVyIGhhcyB0byBiZSBpbnN0YWxsZWQgd2l0aCBQZXJsIGluIG9yZGVyIHRvIGV4ZWN1dGUgdGhlc2UKK1ZpbSBjb21tYW5kczoKKworIiBjb25uZWN0IHRvIHBlcmwncyBkYmkgbW9kdWxlOiA6cGVybCB1c2UgZGJpOworCisiIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlOiA6cGVybCAkZGJoID0gZGJpLSZndDtjb25uZWN0KAorIkRCSTpteXNxbDokREJOQU1FOiRIT1NUIiwkVVNFUiwkUEFTU1dPUkQsCisJCQkJCXsgcmFpc2VlcnJvciA9Jmd0OyAxfSk7CisKKyIgcGVyZm9ybSBhIHNpbXBsZSBxdWVyeTogOnBlcmwgJHJlc3VsdCA9ICRkYmgtJmd0O3NlbGVjdGFsbF9hcnJheXJlZigic2hvdwordGFibGVzOyIpOworCisiIGluc2VydCB0aGUgbGlzdCBvZiB0YWJsZXMgaW50byB0aGUgY3VycmVudCBidWZmZXIncyB0b3A6IDpwZXJsCiskY3VyYnVmLSZndDtBcHBlbmQoMCwgbWFwKCRfLSZndDtbMF0sIEB7JHJlc3VsdH0pKTsKKworSW4gTXlTcWwgdGhlIGNvbW1hbmQgInNob3cgdGFibGVzOyIgcmVzdWx0cyBpbiBhIGxpc3Qgb2YgdGFibGUgbmFtZXMuIEluc2VydGVkCitpbnRvIGEgVmltIGJ1ZmZlciB0aGlzIHJlc3VsdHMgaW4gb25lIGxpbmUgcGVyIHRhYmxlLgorCitZb3UgY2FuIGZpbmQgbW9yZSBvbiBteSB3ZWIgcGFnZSA8QQorSFJFRj0iaHR0cDovL21lbWJlcnMuY2hlbGxvLmF0L2ludGVsbGl3YXJlL2RiRWRpdCI+aHR0cDovL21lbWJlcnMuY2hlbGxvLmF0L2ludGVsbGl3YXJlL2RiRWRpdDwvQT48QlI+CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkFsdGVyCit0aGUgZGlzcGxheSBvZiBidWZmZXJzIGluIHRoZSBidWZmZXJzIG1lbnU8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjA4Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwODwvQT48QlI+CisKK0lmIHlvdSB1c2UgdGhlIGJ1ZmZlcnMgbWVudSwgaGVyZSdzIHdoZXJlIHlvdSBjYW4gY2hhbmdlIGhvdyB0aGUgYnVmZmVybmFtZXMKK2FyZSBkaXNwbGF5ZWQ6CisKK21lbnUudmltLCBmdW5jdGlvbiBzOkJNTXVuZ2UKKworT0xEOiAgIGxldCBuYW1lMiA9IG5hbWUyIC4gJyAoJyAuIGE6Ym51bSAuICcpJworCitkaXNwbGF5czoKKworICAudmltcmMgKDEpIG1lbnUudmltICgyKQorCitORVc6CWxldCBuYW1lMiA9ICcmJyAuIGE6Ym51bSAuICcuICcgLiBuYW1lMgorCitkaXNwbGF5cworCisgIDEuIC52aW1yYyAyLiBtZW51LnZpbQorKHdpdGggdGhlIDEgYW5kIHRoZSAyIHVuZGVybGluZWQpCisKK3doaWNoIGlzIG1vcmUgdXNlZnVsLCBiZWNhdXNlIHlvdSBjYW4gKGFsbW9zdCkgYWx3YXlzIHBpY2sgdGhlIGJ1ZmZlciB5b3UKK3dhbnQgd2l0aCBvbmUga2V5c3Ryb2tlLCB0aGUgYnVmZmVybnVtYmVyLCB1bnRpbCB5b3UgZ2V0IHRvIGJ1ZmZlciAxMCBhbnl3YXkuCisKK1JvZ2VyCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5iYWNrdHJhY2tpbmcgeW91ciBtb3ZlbWVudHMgaW4gYSBmaWxlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIwOSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMDk8L0E+PEJSPgorCitJZiB5b3UgYXJlIGp1bXBpbmcgZnJvbSBvbmUgbGluZSB0byBhbm90aGVyIGEgbG90LiAgWW91IG1heSBmaW5kIHRoZSAiQ3RybC1vIgorY29tbWFuZCBoYW5keS4JVXN1YWxseSB1IGNhbiBzZXQgbWFya2VycyBpbiBhIGJ1ZmZlciB0byBrZWVwIHRyYWNrIG9mIHlvdXIKK21vdmVtZW50cy4gIGJ1dCBDdHJsLW8gbWFrZXMgaXQgZXZlbiBlYXNpZXIuIGl0IHRha2VzIHlvdSBiYWNrIHNlcXVlbnRpYWxseQordG8gYWxsIHlvdXIgcHJldmlvdXMgY3Vyc29yIGxvY2F0aW9ucyBpbiBhIGJ1ZmZlci4gIGp1c3QgcHJlc3MgY3RybC1vIGluCitub3JtYWwgbW9kZSBhbmQgdSB3aWxsIGdvIHRvIHlvdXIgbGFzdCBjdXJzb3IgcG9zaXRpb24uCisKK05qb3kKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPmNvbXBpbGluZyB0aGUgYWN0dWFsIGZpbGUgd2l0aCBnY2M8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjEwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIxMDwvQT48QlI+CisKK2lmIHlvdSB1c2UgIHNldCBtYWtlcHJnPWdjY1wgLW9cICUmbHQ7XCAlIGluIHlvdXIgLnZpbXJjLCBhbmQgeW91ciBhY3R1YWwKK2ZpbGUgaXMgZmlsZS5jLCAgdGhlbiA6bWFrZSB3aWxsIGNvbXBpbGUgZmlsZS5jIHdpdGggdGhlIG91dHB1dCBmaWxlLiAoZ2NjCitmaWxlLmMgLW8gZmlsZSkuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5Sb3RhdGUgY29sb3IgdGhlbWVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIxMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTE8L0E+PEJSPgorCitUaGlzIHRpcCBpcyBmb3IgdGhvc2Ugd2hvIGxpa2UgdG8gY2hhbmdlIHRoZWlyIHZpbSBjb2xvciB0aGVtZXMgcHJldHR5IG9mdGVuLgorSSBsaWtlIGRpZmZlcmVudCB0aGVtZXMganVzdCBmb3IgYSBjaGFuZ2UgaW4gbXkgd29yayBlbnZpcm9ubWVudC4gIFRvIGFjaGlldmUKK3RoaXMganVzdCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIC52aW1yYyBvciBfdmltcmMgZmlsZS4KKworbGV0IHRoZW1laW5kZXg9MCBmdW5jdGlvbiEgUm90YXRlQ29sb3JUaGVtZSgpCisJbGV0IHkgPSAtMSB3aGlsZSB5ID09IC0xCisJCWxldCBjb2xvcnN0cmluZyA9CisJCSIjYmx1ZS52aW0jZWxmbG9yZC52aW0jZXZlbmluZy52aW0ja29laGxlci52aW0jbXVycGh5LnZpbSNwYWJsby52aW0jcm9uLnZpbSMiCisJCWxldCB4ID0gbWF0Y2goY29sb3JzdHJpbmcsIiMiLGc6dGhlbWVpbmRleCkgbGV0IHkgPQorCQltYXRjaChjb2xvcnN0cmluZywiIyIseCsxKSBsZXQgZzp0aGVtZWluZGV4ID0geCsxICI6ZWNobyB4CisJCXkgZzp0aGVtZWluZGV4IGlmIHkgPT0gLTEKKwkJCWxldCBnOnRoZW1laW5kZXggPSAwCisJCWVsc2UKKwkJCWxldCB0aGVtZXN0cmluZyA9IHN0cnBhcnQoY29sb3JzdHJpbmcseCsxLHkteC0xKQorCQkJZWNobygiU2V0dGluZyBUaGVtZSB0by0mZ3Q7ICIudGhlbWVzdHJpbmcpIHJldHVybgorCQkJIjpzbyAkVklNUlVOVElNRS9jb2xvcnMvIi50aGVtZXN0cmluZworCQllbmRpZgorCWVuZHdoaWxlCitlbmRmdW5jdGlvbgorCitDaGFuZ2UgdGhlIHZhbHVlIG9mIGNvbG9yc3RyaW5nIGFib3ZlIGJ5IGNoYW5naW5nIHRoZSBsaW5lIGxldCBjb2xvcnN0cmluZyA9CisiI2JsdWUudmltI2VsZmxvcmQudmltI2V2ZW5pbmcudmltI2tvZWhsZXIudmltI211cnBoeS52aW0jcGFibG8udmltI3Jvbi52aW0jIgorWW91IGNhbiBhZGQgeW91ciBmYXZvcml0ZSBjb2xvciB0aGVtZXMgaW4gdGhpcyBzdHJpbmcgc28gdGhhdCB5b3UgY2FuIHJvdGF0ZQorYmV0d2VlbiB0aGVtLiAgSnVzdCBtYWtlIHN1cmUgdGhhdCBhbnkgc3RyaW5nIHRoYXQgeW91IGFkZCBpcyBpbiBiZXR3ZWVuIHRoZSAjCithcyBzaG93biBhYm92ZS4gIEp1c3QgZm9sbG93IHRoZSBmb3JtYXQgYWJvdmUgYW5kIHRoaW5ncyB3aWxsIHdvcmsuCisKK1RoZW4gYXNzaWduIGEga2V5IHRvIHJvYXRlIHRoZSB0aGVtZS4gIG1hcCAmbHQ7RjgmZ3Q7IDpleGVjdXRlCitSb3RhdGVDb2xvclRoZW1lKCkKKworRHVubm8gaWYgdGhlcmUgYXJlIGJldHRlciB3YXlzIHRvIGRvIHRoZSBzYW1lLglJIGp1c3QgZGlkIGEgImhlbHAgZXZhbCIKK2FuZCB3cm90ZSB0aGUgYWJvdmUuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlNldHRpbmcKK2ZpbGUgYXR0cmlidXRlcyB3aXRob3V0IHJlbG9hZGluZyBhIGJ1ZmZlcjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjEyPC9BPjxCUj4KKworV2hpbGUgY3JlYXRpbmcgc2NyaXB0cyBhbmQgb3RoZXJzIGV4ZWN1dGFibGUgZmlsZXMgd2l0aCBWaW0gaXQgaXMgbmVlZGVkIHRvCitzZXQgVU5JWCBleGVjdXRhYmxlIGJpdCBvbiB0aGUgZmlsZS4gIFlvdSBjYW4gZG8gdGhpcyBmcm9tIGluc2lkZSBWaW0gd2l0aAorOiFjaG1vZCBhK3ggJS4gVGhlICUgcmVwcmVzZW50cyBjdXJyZW50IGJ1ZmZlcidzIGZpbGVuYW1lLiAgVGhlIHByb2JsZW0gaXMKK3RoYXQgVmltIHdpbGwgbm90aWNlIGF0dHJpYnV0ZSBjaGFuZ2VzIGFuZCBwcm9tcHQgeW91IHRvIHJlbG9hZCBhIGZpbGUuIElmCit5b3UgZG8gdGhpcywgeW91ciB1bmRvIGhpc3RvcnkgZm9yIHRoZSBmaWxlIHdpbGwgYmUgbG9zdC4KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBmYWNpbGl0YXRlIGNoYW5naW5nIGV4ZWN1dGFibGUgYXR0cmlidXRlcyB3aXRob3V0CityZWxvYWRpbmcgYSBidWZmZXIuICBUaGFua3MgdG8gQnJhbSBmb3IgdGhlIGFsZ29yaXRobSBmb3IgdGhpcyBmdW5jdGlvbi4KKworZnVuISBTZXRFeGVjdXRhYmxlQml0KCkKKwlsZXQgZm5hbWUgPSBleHBhbmQoIiU6cCIpIDpjaGVja3RpbWUgZXhlYyAiYXUgRmlsZUNoYW5nZWRTaGVsbAorCSIgLiBmbmFtZSAuICIgOmVjaG8iIDpzaWxlbnQgIWNobW9kIGEreCAlIDpjaGVja3RpbWUgZXhlYworCSJhdSEgRmlsZUNoYW5nZWRTaGVsbCAiIC4gZm5hbWUKK2VuZGZ1bgorCisiIENyZWF0ZSBhbiBFWCBjb21tYW5kIHRoYXQgd2lsbCBjYWxsIHRoZSBmdW5jdGlvbi4gIGNvbW1hbmQgLW5hcmdzPTAgWGJpdAorY2FsbCBTZXRFeGVjdXRhYmxlQml0KCkKKworTm93IHlvdSBjYW4gdHlwZSA6WGJpdCB0byBtYWtlIHRoZSBmaWxlIGV4ZWN1dGFibGUhCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5kZWxldCBhbGwgbGluZXMgY29udGFpbnQgVFhUPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIxMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTM8L0E+PEJSPgorCitJIG5lZWRlZCB0aGlzIG9uZSB3aGVuIEkgd2FzIGVkaXRpbmcgYW4gbGRpZiBmaWxlOgorCitJIG5lZWRlZCB0byBkZWxldGUgYWxsIGxpbmVzIGNvbnRhaW5pbmcgInByb2ZpbGUiOgorCis6Zy9wcm9maWxlL2QKKwordmVyeSBoYW5keWRhbmR5CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5DdXJyZW50IGJ1ZmZlciBiYXNlZCBtZW51czwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjE0PC9BPjxCUj4KKworSWYgeW91IGhhdmUgZGlmZmVyZW50IG1lbnVzIGZvciBkaWZmZXJlbnQgZmlsZXR5cGVzLCBhbmQgeW91IHdhbnQgdG8gaGF2ZQorb25seSB0aGUgbWVudSByZWxldmFudCB0byBjdXJyZW50IGJ1ZmZlciBkaXNwbGF5ZWQsIHlvdSBjYW4gdXNlIHRoaXMgYXBwcm9hY2g6CisKK2luIC52aW1yYzogYXUgQnVmRW50ZXIgKiBpZiBleGlzdHMoJ2I6QnVmZkVudGVyJyl8ZXhlYyBiOkJ1ZmZFbnRlcnxlbmRpZiBhdQorQnVmTGVhdmUgKiBpZiBleGlzdHMoJ2I6QnVmZkVudGVyJyl8ZXhlYyBiOkJ1ZmZMZWF2ZXxlbmRpZgorCitJbiBhcHByb3ByaWF0ZSBmdHBsdWdpbi8/LnZpbSwgdGhlcmUgYXJlIGFzc2lnbmVkIGNvbW1hbmRzIHRvIGNyZWF0ZSBvcgorZGVzdHJveSB0aGUgbWVudXMgLSBoZXJlIHR5cGVkIGluIGRpcmVjdGx5LCBtYXkgYmUgb2YgY291cnNlIGNhbGwgdG8gYQorbWVudS1nZW5lcmF0aW5nIGZ1bmN0aW9uIG9yIHdoYXRldmVyLgorCitsZXQgYjpCdWZmRW50ZXI9J2FtZW51IEMuYWRkZWQgLi4uJyAgbGV0IGI6QnVmZkxlYXZlPSd1bm1lbnUhIEN8dW5tZW51IEMnCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkVkaXQKK2NvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGEgZmlsZXR5cGU8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjE1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIxNTwvQT48QlI+CisKK1doZW4geW91IG9wZW4gYSBmaWxlLCB2aW0gbWF5IGxvYWQgc2V2ZXJhbCBzY3JpcHRzIHRvIGN1c3RvbWl6ZSBpdHNlbGYgZm9yCitlZGl0aW5nIHRoZSBmaWxlIHR5cGUgdGhlIGZpbGUgaXMgYXNzb2NpYXRlZCB3aXRoIChmb3IgZXhhbXBsZSBhIGZpbGUgInRlc3QuYyIKK2lzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZXR5cGUgImMiKS4gIFN1Y2ggY29uZmlndXJhdGlvbnMgaW5jbHVkZSB0aGUgc2V0dGluZworb2Ygc3ludGF4IGhpZ2hsaWdodGluZyBjb2xvcnMgKDpoZWxwIHN5bnRheCkgYW5kIHN1cHBvcnQgZm9yIGluZGVudGF0aW9uCisoOmhlbHAgZmlsZXR5cGUtaW5kZW50LW9uKS4gIFdoZW4geW91IHN0YXJ0IHRvIG92ZXJyaWRlIHRoZXNlIGZpbGVzIGZvcgoreW91cnNlbGYsIGl0IGNhbiBzb21ldGltZXMgYmUgY29uZnVzaW5nLCB3aGljaCBmaWxlIHNldHMgYSBzcGVjaWZpYyBvcHRpb24uCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLCB0byBlZGl0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHdoaWNoCithcmUgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgZmlsZW5hbWUuIEl0IG9wZW4gYSBidWZmZXIgZm9yIGFsbCBmaWxlcyB3aGljaAorZ2V0IGxvYWRlZC4gIElmIEkgaW52b2tlIGl0IHdpdGggJzpjYWxsIEVkaXRfZnRfY29uZigidGVzdC5jIiknLCBmb3IgZXhhbXBsZSwKK0kgZW5kIHVwIHdpdGggdGhlIGZvbGxvd2luZyBidWZmZXJzIC8gd2luZG93czoKKyAgMSAgYQkgIltObyBGaWxlXSIJCQlsaW5lIDEgMiAgYSAgICJ0ZXN0LmMiCisgIGxpbmUgMSAzICBhPQkiL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNjAvc3ludGF4L2MudmltIgorICBsaW5lIDEgNCAgYQkifi8udmltL2FmdGVyL3N5bnRheC9jLnZpbSIgICAgbGluZSAxIDUgI2E9CisgICIvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02MC9pbmRlbnQvYy52aW0iIGxpbmUgMSA2ICVhPQorICAiL3Vzci9sb2NhbC9zaGFyZS92aW0vdmltNjAvZnRwbHVnaW4vYy52aW0iIGxpbmUgMQorCitIZXJlIGNvbWVzIHRoZSBmdW5jdGlvbjoKKworIiBFZGl0IGZpbGV0eXBlIGNvbmZpZ3VyYXRpb24gZmlsZXMgIiBVc2FnZTogJzpjYWxsIEVkaXRfZnRfY29uZigiZmlsZSIpJworIiBQdXJwb3NlOiBvcGVuIGFsbCBzY3JpcHRzIHdoaWNoIGdldCBsb2FkZWQgaW1wbGljaXRseSBieSBvcGVuaW5nICJmaWxlIiAiCisoc3ludGF4IGhpZ2hsaWdodGluZywgaW5kZW50YXRpb24sIGZpbGV0eXBlIHBsdWdpbnMsIC4uKSAgIiAgIFRoZSBvcmRlciBvZgord2luZG93cyByZWZsZWN0cyB0aGUgb3JkZXIgb2Ygc2NyaXB0IGxvYWRpbmcgKGJ1dCAiZmlsZSIgaXMgIgl0aGUgdG9wbW9zdAord2luZG93KSBmdW4hIEVkaXRfZnRfY29uZihuYW1lKQorICAgICIgd2UgbWF5IG5vdCBkbyB0aGlzIHdpdGggYSBsb2FkZWQgZmlsZSwgc2luY2UgdGhpcyB3b24ndCB0cmlnZ2VyIHRoZQorICAgICIgY29uZmlndXJhdGlvbiBmaWxlIGxvYWRpbmcgYXMgZGVzaXJlZC4gICIgdHJ5IGNhbGxpbmcgd2l0aCAnY2FsbAorICAgIEVkaXRfZnRfY29uZigibm9uZXhpc3RpbmdmaWxlLiZsdDtFWFQmZ3Q7IiknIGlmIHRoaXMgIiBnaXZlcyB5b3UgdHJvdWJsZXMKKyAgICBpZiBidWZleGlzdHMoYTpuYW1lKSAmJiBidWZsb2FkZWQoYTpuYW1lKQorCWVjaG8gIiFBdHRlbnRpb246IGJ1ZmZlciBmb3IgIiAuIGE6bmFtZSAuICIgaXMgbG9hZGVkLCB1bmxvYWQgZmlyc3QuIgorCXJldHVybgorICAgIGVuZGlmICIgc3BsaXQtb3BlbiB0aGUgZmlsZSB3aXRoIHZlcmJvc2Ugc2V0LCBncmFiIHRoZSBvdXRwdXQgaW50byBhCisgICAgcmVnaXN0ZXIgIiAod2l0aG91dCBjbG9iYmVyaW5nKSBsZXQgc2FmZXJlZyA9IEB1IHJlZGlyIEB1ICIgcmVkaXJlY3QKKyAgICBjb21tYW5kIG91dHB1dCB0byByZWdpc3RlciBAdSBleGVjICJzaWxlbnQgMnZlcmJvc2Ugc3BsaXQgIiAuIGE6bmFtZQorCSIgdmVyYm9zZSBsZXZlbCAyIHN1ZmZpY2VzIHRvIGNhdGNoIGFsbCBzY3JpcHRzIHdoaWNoIGdldCBvcGVuZWQKKyAgICByZWRpciBFTkQgIiBQYXJzZSByZWdpc3RlciBAdSwgbG9va2luZyBmb3Igc210aCBsaWtlOgorICAgICdzb3VyY2luZyIvdXNyL2xvY2FsL3NoYXJlL3ZpbS92aW02MC9zeW50YXgvYy52aW0iJyBsZXQgcG9zID0gMCBsZXQKKyAgICByZWdleHAgPSAnc291cmNpbmcgIlteIl1cKyInIHdoaWxlIG1hdGNoKEB1LHJlZ2V4cCxwb3MpICZndDs9IDAKKwlsZXQgZmlsZSA9IG1hdGNoc3RyKEB1LHJlZ2V4cCxwb3MpIGxldCBwb3MgPSBtYXRjaGVuZCAoQHUscmVnZXhwLHBvcykKKwlsZXQgZmlsZSA9IHN0cnBhcnQoZmlsZSwxMCxzdHJsZW4oZmlsZSktMTEpIGV4ZWMgInNpbGVudCBiZWxvdyBzcGxpdAorCSIgLiBmaWxlCisgICAgZW5kd2hpbGUgIiByZXN0b3JlIHRoZSByZWdpc3RlciBsZXQgQHUgPSBzYWZlcmVnCitlbmRmdW4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Y2FsY3VsYXRlCitlcXVhdGlvbnMgZnJvbSB3aXRoaW4gdmltPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIxNiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTY8L0E+PEJSPgorCitUaGUgZm9sbG93aW5nIG1hcCBhbmQgZnVuY3Rpb24gY2FsY3VsYXRlcyBlcXVhdGlvbnMgdXNpbmcgdGhlIHByb2dyYW0gJ2JjJworKGZvdW5kIG9uIG1vc3QgbGludXggc3lzdGVtcywgYXZhaWxhYmxlIGZvciBtb3N0IHN5c3RlbXMpLiAgVmlzdWFsbHkgc2VsZWN0IHRoZQorZXF1YXRpb24geW91IHdhbnQgdG8gY2FsY3VsYXRlLCB0aGVuIGhpdCA7YmMgLSBpZiB0aGUgc2VsZWN0aW9uIGVuZHMgd2l0aCBhbgorJz0nIHNpZ24sIHRoZSBhbnN3ZXIgd2lsbCBiZSBhcHBlbmRlZCBhZnRlciB0aGUgZXF1YWwsIG90aGVyd2lzZSwgdGhlIGFuc3dlcgoraXMgZWNob2VkIGFzIGEgbWVzc2FnZS4gIFRoZSBjb2RlIHRvIHB1dCBpbiBhIHZpbXJjIGFuZCBzb3VyY2UgaXMgYXQgdGhlIGVuZC4KKworRXF1YXRpb25zIGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbmQgdGhlIGZ1bGwgYmMgc3ludGF4IGlzIHByb2JhYmx5CitzdXBwb3J0ZWQuICBBZGRpdGlvbmFsbHksIHNpbiAoKSwgY29zICgpLCBldGMsIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIHRoZQorbmFtZXMgdXNlZCBieSBiYyAocyAoKSBjICgpLCBldGMpLgorCitIZXJlIGFyZSBzb21lIGV4YW1wbGUgbGluZXM6CisKKzIgKiBzcXJ0ICgyKSA9CisKKzMgKiAoMiAtIDEpICsgNC4wIF4gNiA9CisKKzQgLyAzID0KKworMyArCisgICA0IC0KKyAgICAgIDIgKiAoMSAvICgzICsgMikpID0KKworZGVmaW5lIHJhZCAoeCkgeworICByZXR1cm4gKHggLyAxODApICogNCAqIGF0YW4gKDEpCit9IGNvcyAocmFkICg0NSkpID0KKworU2VsZWN0IGVhY2ggb2YgdGhlc2UgaW4gdHVybiAoY29udGluZ3VvdXMgbm9uLWJsYW5rIGxpbmVzLCBhbmQgaGl0IDtiYyBmb3IKK2VhY2gpLCBhbmQgdGhpcyBpcyB3aGF0IHlvdSBnZXQ6IDIgKiBzcXJ0ICgyKSA9IDIuODI4NDI3MTI0NzQ2MTkwMDk3NjAKKworMyAqICgyIC0gMSkgKyA0LjAgXiA2ID0gNDA5OS4wMDAwMDAKKworNCAvIDMgPSAxLjMzMzMzMzMzMzMzMzMzMzMzMzMzCisKKzMgKworICAgNCAtCisgICAgICAyICogKDEgLyAoMyArIDIpKSA9IDYuNjAwMDAwMDAwMDAwMDAwMDAwMDAKKworZGVmaW5lIHJhZCAoeCkgeworICByZXR1cm4gKHggLyAxODApICogNCAqIGF0YW4gKDEpCit9IGNvcyAocmFkICg0NSkpID0gLjcwNzEwNjc4MTE4NjU0NzUyNDQwCisKK0Z1biwgbm8/ICBIZXJlIGlzIHRoZSBjb2RlIHlvdSBuZWVkIHRvIHB1dCBpbiB5b3VyIHZpbXJjIGZpbGU6CisKK3Zub3JlbWFwIDtiYyAiZXk6Y2FsbCBDYWxjQkMoKSZsdDtDUiZndDsgZnVuY3Rpb24hIENhbGNCQygpCisJbGV0IGhhc19lcXVhbCA9IDAKKworCSIgcmVtb3ZlIG5ld2xpbmVzIGFuZCB0cmFpbGluZyBzcGFjZXMgbGV0IEBlID0gc3Vic3RpdHV0ZSAoQGUsICJcbiIsCisJIiIsICJnIikgbGV0IEBlID0gc3Vic3RpdHV0ZSAoQGUsICdccyokJywgIiIsICJnIikKKworCSIgaWYgd2UgZW5kIHdpdGggYW4gZXF1YWwsIHN0cmlwLCBhbmQgcmVtZW1iZXIgZm9yIG91dHB1dCBpZiBAZSA9fiAiPSQiCisJCWxldCBAZSA9IHN1YnN0aXR1dGUgKEBlLCAnPSQnLCAiIiwgIiIpIGxldCBoYXNfZXF1YWwgPSAxCisJZW5kaWYKKworCSIgc3ViIGNvbW1vbiBmdW5jIG5hbWVzIGZvciBiYyBlcXVpdmFsZW50IGxldCBAZSA9IHN1YnN0aXR1dGUgKEBlLAorCSdcY3NpblxzKignLCAicyAoIiwgIiIpIGxldCBAZSA9IHN1YnN0aXR1dGUgKEBlLCAnXGNjb3NccyooJywgImMKKwkoIiwgIiIpIGxldCBAZSA9IHN1YnN0aXR1dGUgKEBlLCAnXGNhdGFuXHMqKCcsICJhICgiLCAiIikgbGV0IEBlID0KKwlzdWJzdGl0dXRlIChAZSwgIlxjbG5ccyooIiwgImwgKCIsICIiKQorCisJIiBlc2NhcGUgY2hhcnMgZm9yIHNoZWxsIGxldCBAZSA9IGVzY2FwZSAoQGUsICcqKCknKQorCisJIiBydW4gYmMsIHN0cmlwIG5ld2xpbmUgbGV0IGFuc3dlciA9IHN1YnN0aXR1dGUgKHN5c3RlbSAoImVjaG8gIgorCS4gQGUgLiAiIFx8IGJjIC1sIiksICJcbiIsICIiLCAiIikKKworCSIgYXBwZW5kIGFuc3dlciBvciBlY2hvIGlmIGhhc19lcXVhbCA9PSAxCisJCW5vcm1hbCBgJmd0OyBleGVjICJub3JtYWwgYSIgLiBhbnN3ZXIKKwllbHNlCisJCWVjaG8gImFuc3dlciA9ICIgLiBhbnN3ZXIKKwllbmRpZgorZW5kZnVuY3Rpb24KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VHJhbnNsYXRlCismI25ubjsgaW4gaHRtbCBzb3VyY2UgdG8gcmVhZGFibGUgYXNjaWk8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjE3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIxNzwvQT48QlI+CisKK0kgZm91bmQgYSB3ZWJzaXRlICpjb3VnaCpUaXZvbGkuY29tKmNvdWdoKiB0aGF0IGxpa2VzIHRvIG9iZnVzY2F0ZSBzb21lIG9mCitpdHMgaGVscCBmaWxlIHdlYiBwYWdlcyB1c2luZyAmI25ubjsgaW5zdGVhZCBvZiBub3JtYWwgYXNjaWkuICBJZiB5b3UgbG9hZAordGhlIHNvdXJjZSB3aXRoIFZpbSAoaW4gT3BlcmEgeW91IGNhbiBqdXN0IGRlc2lnbmF0ZSBWaW0gYXMgeW91ciBzb3VyY2UKK3ZpZXdpbmcgcHJvZ3JhbSksIHlvdSBjYW4gOnNvIHRoZSBmb2xsb3dpbmcgY29kZSB0byBtYWtlIGl0IHJlYWRhYmxlLgorCitsZXQgbiA9IDMyIHdoaWxlIG4gJmx0OyAxMjcKKyAgICBpZiBuID09IDM4CisJc2lsZW50ISBleGVjICclcy8mIzM4Oy9cJmFtcDsvZycKKyAgICBlbHNlaWYgbiA9PSA0NworCXNpbGVudCEgZXhlYyAnJXMvJiM0NzsvXC8vZycKKyAgICBlbHNlCisJc2lsZW50ISBleGVjICclcy8mIycgLiBuIC4gJzsvJyAuIG5yMmNoYXIobikgLiAnL2cnCisgICAgZW5kaWYgbGV0IG4gPSBuICsgMQorZW5kd2hpbGUKKworRGlzY2xhaW1lcjogSSBoYWNrZWQgdGhpcyB0b2dldGhlciBpbiBhYm91dCAxMCBtaW51dGVzIChvciBwb3NzaWJseSBsb25nZXIgOikuCitJdCB3b3JrZWQgc3VpdGFibHkgZm9yIHRoZSB3ZWJzaXRlIEkgd3JvdGUgaXQgZm9yIChvciBwb3NzaWJseSAiYWdhaW5zdCIgOikuCitZb3VyIE1pbGFnZSBNYXkgVmFyeS4KKworU2VlIDpoZWxwIGV2YWwsIDpoZWxwIHNpbGVudCwgOmhlbHAgZXhlYywgOmhlbHAgOnMKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Q2hlY2sKK2ZvciBjb21tZW50cywgaW5kZXBlbmRlbnQgb2YgdGhlIGZpbGV0eXBlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIxOCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTg8L0E+PEJSPgorCitGb3Igc29tZSBzY3JpcHRzIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBkZXRlY3QsIHdoZXRoZXIgYSBzcGVjaWZpYyBwb3NpdGlvbgoraW4gYSBidWZmZXIgaXMgaW5zaWRlIG9mIGEgY29tbWVudCBvciBub3QuIFN5bnRheCBoaWdobGlnaHRpbmcgY2FuIHNhdmUgdXMKK3RoZSB3b3JrIGZvciBwYXJzaW5nIHRoZSBjb21tZW50cyBvdXJzZWx2ZXMuCisKK1RoZSBjb21tYW5kCisgIDplY2hvIHN5bklEYXR0cihzeW5JRHRyYW5zKHN5bklEKGxpbmUoIi4iKSwgY29sKCIuIiksIDApKSwgIm5hbWUiKQorZWNob2VzIHRoZSBncm91cCB1c2VkIGZvciAqaGlnaGxpZ2h0aW5nKiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBjdXJyZW50CitjdXJzb3IgcG9zaXRpb24sIHNlZSAnOmhlbHAgc3luSUR0cmFucygpJy4gSXQgd2lsbCB1c3VhbGx5IGJlICJDb21tZW50IgoraWYgdGhlIGN1cnNvciBpcyBpbnNpZGUgb2YgYSBjb21tZW50LCBzbworICAgc3luSURhdHRyKHN5bklEdHJhbnMoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMCkpLCAibmFtZSIpID09ICJDb21tZW50IgorZGV0ZWN0cywgaW5kZXBlbmRlbnQgb2YgdGhlIGZpbGV0eXBlICh3aGljaCBoYXZlIHRoZWlyIG93biBncm91cCAnbmFtZXMnCitmb3IgY29tbWVudHMpLCBpZiB0aGUgY3Vyc29yIGlzIGluc2lkZSBhIGNvbW1lbnQgb3Igbm90LiAgVGhlIGV4cHJlc3Npb24KKyAgc3luSURhdHRyKHN5bklEdHJhbnMoc3luSUQobGluZSgiLiIpLCBjb2woIi4iKSwgMCkpLCAibmFtZSIpID1+CisgICdDb21tZW50XHxDb25zdGFudFx8UHJlUHJvYycKK3dpbGwgZGV0ZWN0IGFkZGl0aW9uYWxseSwgaWYgdGhlIGN1cnNvciBpcyBpbnNpZGUgb2YgYSBzdHJpbmcgb3Igc29tZQorcHJlcHJvY2Vzc29yIHN0YXRlbWVudC4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+bWFrZQorZnJvbSBjb21tYW5kIGxpbmUsIG9wZW4gdmltIG9uIGVycm9yczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMTkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjE5PC9BPjxCUj4KKworQSBzaW1wbGUgYWxpYXMgKCpjc2gpIG9yIHNoZWxsIGZ1bmN0aW9uIChiYXNoKSB3aWxsIGxldCB5b3UgcnVuIG1ha2UgZnJvbSB5b3VyCitzaGVsbCwgdGhlbiBhdXRvbWF0aWNhbGx5IG9wZW4gdmltIG9yIGd2aW0gb24gdGhlIGVycm9ycyAoaWYgdGhlcmUgd2VyZSBhbnkpOgorCitjc2ggb3IgdGNzaDoKKworYWxpYXMgTWFrZSAnbWFrZSBcISogfCYgdGVlIG1ha2UuZXJyb3JzIHx8IGd2aW0gLXEgbWFrZS5lcnJvcnMgLWMgOmNvcGVuJworCitiYXNoOgorCitNYWtlICgpIHsgY29tbWFuZCBtYWtlICIkQCIgfCYgdGVlIG1ha2UuZXJyb3JzIHx8IGd2aW0gLXEgbWFrZS5lcnJvcnMgLWMKKzpjb3BlbiA7IH0KKworSWYgeW91IHVzZSB2YW5pbGxhIHNoIG9yIGtzaCBvciBldmVuIGNtZC5leGUsIHlvdSBjYW4gcHJvYmFibHkgZG8gdGhlIHNhbWUgLQorYWRkIGEgbm90IGlmIHlvdSBoYXZlIGlkZWFzLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+TWF0Y2ggZXZlcnkgd29yZCBleGNlcHQgJ2Zvbyc8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjIwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIyMDwvQT48QlI+CisKK1RoaXMgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGFsbCB3b3JkcyBleGNlcHQgJ2ZvbycKK1x2Jmx0Oyhmb28mZ3Q7KUAhXGsrJmd0OworCitcdgkJVmVyeSBtYWdpYyAmbHQ7CQkgICBTdGFydC1vZi13b3JkIChGb28mZ3Q7KQkgVGhlCithdG9tICdGb28nIGZvbGxvd2VkIGJ5IGVuZC1vZi13b3JkIEAhCQkgICBNYXRjaCAod2l0aCB6ZXJvIGxlbmd0aCkKK3doZW4gdGhlIHByZXZpb3VzIGF0b20gZG9lc24ndCBtYXRjaC4gIFxrKwkgICAgICAgTWF0Y2ggb25lIG9yIG1vcmUKK0tleXdvcmRzICZndDsJCSBNYXRjaCBlbmQtb2Ytd29yZC4KKworVGhpcyBpcyBhIGtvb2wgZXhhbXBsZSBvZiB1c2luZyBcQCEgaW4gdGhlIG1pZGRsZSBvZiBhIHJlZ2V4cC4JVGhlIG5vbi1tYWdpYwordmVyc2lvbiBpczogXCZsdDtcKGZvb1wmZ3Q7XClcQCFca1wrXCZndDsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPmluZGVudGluZyAidGhyb3dzIiBpbiBqYXZhPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIyMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMjE8L0E+PEJSPgorCitJIHdhbnQgdG8gaW5kZW50IGphdmEgZmlsZXMgbGlrZSB0aGlzOgorCisgICAgaW50IHgoaW50IHksIGludCB6KQorCXRocm93cyBFeGNlcHRpb24KKyAgICB7CisJWy4uLl0gIHJldHVybiBzb21ldGhpbmc7CisgICAgfQorCitCeSBkZWZhdWx0IHZpbSB3aWxsIHByb3Blcmx5IGluZGVudCAidGhyb3dzIiBsaW5lLCBidXQgZm9sbG93aW5nICJ7IiB3aWxsCitub3QgYmUgZGVpbmRlbnRlZCBiYWNrIHRvIHRoZSBtZXRob2QgZGVjbGFyYXRpb24uCisKK1RoZSBmb2xsb3dpbmcgaW5kZW50ZXhwciBkb2VzIHRoZSB0cmljazogbGV0CismaW5kZW50ZXhwcj0nZ2V0bGluZSh2OmxudW0pPX4iXlxccyp7IiAmJiBnZXRsaW5lKHY6bG51bS0xKT1+Il5cXHMqdGhyb3dzXFxzIgorPyBjaW5kZW50KHY6bG51bSktJnN3IDogY2luZGVudCh2OmxudW0pJworCitJdCBqdXN0IGNoZWNrcyB0aGF0IHRoZSBjdXJyZW50IGxpbmUgc3RhcnRzIHdpdGggInsiIGFuZCB0aGUgcHJldmlvdXMgbGluZQorc3RhcnRzIHdpdGggInRocm93cyIgYW5kIGlmIHRoYXQgaXMgdGhlIGNhc2UsIGl0IHN1YnRyYWN0cyBvbmUgc2hpZnR3aWR0aAorZnJvbSB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IGNpbmRlbnQuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5CdWlsZGluZyB2aW0gd2l0aCBjb2xvciBvbiBIUC1VWDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMjIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjIyPC9BPjxCUj4KKworRm9sbG93aW5nIHRoZSBub3JtYWwgc3RlcHMgb2YgcnVubmluZyAiLi9jb25maWd1cmUiIGFuZCAibWFrZSIgdG8gYnVpbGQgdmltCitvbiBhbiBIUC1VWCAxMC4yMCB3aWxsIHJlc3VsdCBpbiB2aW0gYmVpbmcgbGlua2VkIHdpdGggdGhlIHRlcm1saWIgbGlicmFyeS4KK1RoaXMgbGlicmFyeSBkb2VzIG5vdCBzdXBwb3J0IGNlcnRhaW4gdGVybWNhcCBjYXBhYmlsaXR5IGNvZGVzLCBzdWNoIGFzIHRoZQorIkNvIiBjb2RlIHVzZWQgdG8gcXVlcnkgdGhlIG51bWJlciBvZiBjb2xvcnMgc3VwcG9ydGVkIGJ5IHRoZSB0ZXJtaW5hbC4KK0NvbnNlcXVlbnRseSwgdmltIHdpbGwgbm90IGRpc3BsYXkgY29sb3JzIHdoZW4gdXNlZCB3aXRoIGEgY29sb3IgdGVybWluYWwKK3N1Y2ggYXMgYSBjb2xvciB4dGVybS4KKworT25lIHNvbHV0aW9uIHRvIHRoaXMgaXMgdG8gcnVuIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpdGggdGhlCisiLS13aXRoLXRsaWI9Y3Vyc2VzIiBvcHRpb24sIGxpa2UgdGhpczoKKworICAgIC4vY29uZmlndXJlIC0td2l0aC10bGliPWN1cnNlcworCitUaGlzIHdpbGwgY2F1c2UgdmltIHRvIGJlIGxpbmtlZCB3aXRoIHRoZSBIUC1VWCBjdXJzZXMgbGlicmFyeSwgd2hpY2ggZG9lcworc3VwcG9ydCB0aGUgY29sb3IgdGVybWNhcCBjYXBhYmlsaXR5IGNvZGVzLgorCitOb3RlIHRoYXQgdGhlIHh0ZXJtIHRoYXQgY29tZXMgc3RhbmRhcmQgd2l0aCBIUC1VWCAxMC4yMCBkb2VzIG5vdCBkaXNwbGF5IGNvbG9yCitjaGFyYWN0ZXIgYXR0cmlidXRlcy4gIFRvIHNlZSBjb2xvcnMgd2hlbiBydW5uaW5nIHZpbSBpbiBhIHRlcm1pbmFsIHdpbmRvdywKK3lvdSB3aWxsIGFsc28gbmVlZCB0byBpbnN0YWxsIGEgY29sb3IgdGVybWluYWwgZW11bGF0b3Igc3VjaCBhcyBhIHJlY2VudCB4dGVybS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlJldmVyc2UgU2VsZWN0ZWQgVGV4dDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMjMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjIzPC9BPjxCUj4KKworU3VwcG9zZSB5b3Ugd2FudCB0byByZXZlcnNlIHNvbWUgdGV4dCAtIEkgZG9uJ3Qga25vdyB3aHkgeW91IHdvdWxkIHdhbnQgdG8gLQorbWF5YmUgeW91J3JlIGR5c2xleGljLglBbnl3YXksIEkgaGFkIGEgbmVlZCwgc28gdGhpcyBtYXBwaW5nIHdpbGwgcmV2ZXJzZQordmlzdWFsbHkgc2VsZWN0ZWQgdGV4dC4gIFB1dCB0aGUgbWFwcGluZyBpbiB5b3VyIHZpbXJjIG9yIG90aGVyd2lzZSBzb3VyY2UKK2l0LCB0aGVuIHZpc3VhbGx5IHNlbGVjdCB0aGUgd29yZCBvciB3b3JkcywgYW5kIGhpdCA7cnYgLSByZWFsbHkgb25seSB3b3Jrcword2l0aCBzZWxlY3Rpb25zIG9uIG9uZSBsaW5lOgorCit2bm9yZW1hcCA7cnYgYyZsdDtDLU8mZ3Q7OnNldCByZXZpbnMmbHQ7Y3ImZ3Q7Jmx0O0MtUiZndDsiJmx0O2VzYyZndDs6c2V0Citub3JldmlucyZsdDtjciZndDsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlNoaWZ0aW5nIGJsb2NrcyB2aXN1YWxseTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMjQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjI0PC9BPjxCUj4KKworSSB1c2UgdGhlICZsdDsgYW5kICZndDsgY29tbWFuZHMgb24gYmxvY2tzIGEgbG90LCBhbmQgaXQgaGFzIGFsd2F5cyBhbm5veWVkIG1lCit0aGF0IGlmIHlvdSB3YW50IHRvIHNoaWZ0IG1vcmUgdGhhbiBvbmUgJ3NoaWZ0d2lkdGgnLCB5b3UgaGF2ZSBjb3VudCBob3cgbWFueQorJ3NoaWZ0d2lkdGgncyB5b3Ugd2FudCB0byBlbnRlciB0aGUgJ1tjb3VudF0mZ3Q7Jywgb3IgcmVzdG9yZSB0aGUgc2VsZWN0aW9uCit3aXRoICJndiIuIFNvIEkndmUgY29va2VkIHVwIHR3byBtYXBwaW5ncyB0aGF0IGNvbWUgaW4gdmVyeSBoYW5keToKKworOnZub3JlbWFwICZsdDsgJmx0O2d2IDp2bm9yZW1hcCAmZ3Q7ICZndDtndgorCitUaGVzZSBtYXBwaW5ncyB3aWxsIHJlc2VsZWN0IHRoZSBibG9jayBhZnRlciBzaGlmdGluZywgc28geW91J2xsIGp1c3QgaGF2ZQordG8gc2VsZWN0IGEgYmxvY2ssIHByZXNzICZsdDsgb3IgJmd0OyBhcyBtYW55IHRpbWVzIGFzIHlvdSBsaWtlLCBhbmQgcHJlc3MKKyZsdDtFU0MmZ3Q7IHdoZW4geW91J3JlIGRvbmUgdG8gdW5zZWxlY3QgdGhlIGJsb2NrLgorCitJIGtub3cgaXQncyBub3Qgcm9ja2V0IHNjaWVuY2UsIGJ1dCBpdCBzdXJlIGhhcyBoZWxwZWQgbWUgYSBsb3QuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj52aW0gY2FuIGludGVyYWN0IHdpdGggeGR2aTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMjUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjI1PC9BPjxCUj4KKworIHZpbSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgdHJpY2tzIHRoYXQgdGhlIGxhdGVzdCB4ZHZpIGRvZXM6CisKKyAqIElmIG9uZSBjbGlja3MgYXQgc29tZSBwbGFjZSBpbiB4ZHZpLCB2aW0gYXV0b21hdGljYWxseSBqdW1wcyB0byB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgbGluZSBpbiB0aGUgTGFUZVggc291cmNlIGZpbGUgKCJyZXZlcnNlIHNlYXJjaCIpCisgKiBBbHNvLCBmcm9tIGluc2lkZSB2aW0sIG9uZSBjYW4ganVtcCB0byB0aGUgY29ycmVzcG9uZGluZyBsaW5lIGluIHhkdmkKKyAgIHdoaWNoIGJlY29tZXMgaGlnaGxpZ2h0ZWQgKCJmb3J3YXJkIHNlYXJjaCIpLgorCisgSGVyZSBpcyBob3cgdG8gZG8gaXQ6CisKKyAqIFJldmVyc2Ugc2VhcmNoOgorICAgV2Ugc3RhcnQgYSB2aW0gc2VydmVyIGJ5OiAgdmltIC0tc2VydmVybmFtZSB4ZHZpIFdlIHN0YXJ0IHhkdmkoaykgb24KKyAgIGZpbGUuZHZpIGJ5OgorICAgICAgeGR2aWsgLWVkaXRvciAidmltIC0tc2VydmVybmFtZSB4ZHZpIC0tcmVtb3RlICslbCAlZiIgZmlsZS5kdmkKKyAgIEF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIGluIHhkdmksIHdlIHByZXNzOgkmbHQ7Y3RybCZndDsmbHQ7bGVmdF9tb3VzZSZndDsKKyAgIFRoZW4sIHZpbSB3aWxsIGp1bXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGluZSBpbiB0aGUgc291cmNlIGZpbGUuCisKKyAqIEZvcndhcmQgc2VhcmNoOgorICAgSW5zaWRlIHZpbSwgd2UgdHlwZSwgZm9yIGV4YW1wbGUsICBfZyAgd2hpY2ggaXMgdGhlIGZvbGxvd2luZyBtYXBwaW5nOgorCSh0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBhIHNpbmdsZSBsaW5lKQorCisgICBtYXAgX2cgIDpleGVjdXRlICIheGR2aWsgLW5hbWUgeGR2aSAtc291cmNlcG9zaXRpb24gIgorICAgLiBsaW5lKCIuIikgLiBleHBhbmQoIiUiKSAuICIgIiAuIGV4cGFuZCgiJTpyIikgLiAiLmR2aSIKKyAgICZsdDtjciZndDsmbHQ7Y3ImZ3Q7CisKKyAgICBbdGhlIGNvbW1hbmQgdG8gZ28gdG8gdGhlIHBvaW50IG9mIHhkdmkgdGhhdCBjb3JyZXNwb25kcyB0byBsaW5lLCBlZywgNzcKKyAgICAgb2YgdGhlIHNvdXJjZSBmaWxlIGlzIChubyBzcGFjZSBhZnRlciA3NykKKyAgICAgICB4ZHZpayAtbmFtZSB4ZHZpIC1zb3VyY2Vwb3NpdGlvbiA3N2ZpbGUudGV4IGZpbGUuZHZpICBdCisKKyAgRm9yIHRoZSBhYm92ZSB0byB3b3JrIG9uZSBuZWVkczogMSkgQSByZWNlbnQgdmVyc2lvbiBvZiB4ZHZpIG9yIHhkdmlrCisgICgmZ3Q7MjIuMzkgSSB0aGluaykgMikgVGhlIHBhY2thZ2Ugc3JjbHR4LnN0eSBhbmQgXHVzZXBhY2thZ2V7c3JjbHR4fQorICAod2hpY2ggc2hvdWxkICBiZQorICAgICBjb21tZW50ZWQgb3V0IHdoZW4gb25lIGZpbmlzaGVzIGFuZCBpcyByZWFkeSBmb3IgcHJpbnRpbmcgZXRjKS4KKyAgMykgT3VyIHZlcnNpb24gb2YgdmltIHNob3VsZCBoYXZlIGJlZW4gY29tcGlsZWQgd2l0aCArY2xpZW50c2VydmVyCisgICAgIChob3dldmVyLCBteSB2aW0gZG9lc24ndCBoYXZlIGl0IGFuZCBzdGlsbCB3b3Jrcywgc28gdHJ5IGl0IGJlZm9yZQorICAgICAgQnJhbSBmaW5kcyBvdXQgd2hhdCBpcyBoYXBwZW5pbmcgYW5kIGZpeGVzIGl0KQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5FZGl0CitmaWxlIHVuZGVyIGN1cnNvciBhZnRlciBhIGhvcml6b250YWwgc3BsaXQ8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjI2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIyNjwvQT48QlI+CisKK0kgdXNlIHRoZSBjb21tYW5kICdnZicgcXVpdGUgb2Z0ZW4uIEJ1dCB3aXRoIHRoaXMgY29tbWFuZCB0aGUgY3VycmVudCBidWZmZXIKK2lzIGhpZGRlbi4gVG8gYXZvaWQgdGhhdCBJIHVzZSB0aGUgZm9sbG93aW5nIG1hcHBpbmcgOgorCittYXAgZ3cgJmx0O0VzYyZndDs6c3AgJSZsdDtDUiZndDsgZ2YKKworV2l0aCB0aGlzIG1hcHBpbmcgdGhlIGZpbGUgdW5kZXIgdGhlIGN1cnNvciBpcyBvcGVuZWQgYWZ0ZXIgYSBob3Jpem9udGFsIHNwbGl0LgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+UG93ZXIgb2YgOmc8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjI3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIyNzwvQT48QlI+CisKKzpnIGlzIHNvbWV0aGluZyB2ZXJ5IG9sZCBhbmQgd2hpY2ggaXMgdmVyeSBwb3dlcmZ1bC4gSSBqdXN0IHdhbnRlZCB0bworaWxsdXN0cmF0ZSB0aGUgdXNlIG9mIGl0IHdpdGggc29tZSBleGFtcGxlcy4gSG9wZSwgaXQgd2lsbCBiZSB1c2VmdWwgZm9yCitzb21lb25lLgorCitCcmllZiBleHBsYW5hdGlvbiBmb3IgIjpnIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5bnRheCBpczoKKyAgICA6W3JhbmdlXTpnLyZsdDtwYXR0ZXJuJmd0Oy9bY21kXQorWW91IGNhbiB0aGluayB0aGUgd29ya2luZyBhcywgZm9yIHRoZSByYW5nZSAoZGVmYXVsdCB3aG9sZSBmaWxlKSwgZXhlY3V0ZQordGhlIGNvbG9uIGNvbW1hbmQoZXgpICJjbWQiIGZvciB0aGUgbGluZXMgbWF0Y2hpbmcgJmx0O3BhdHRlcm4mZ3Q7LiBBbHNvLAorZm9yIGFsbCBsaW5lcyB0aGF0IG1hdGNoZWQgdGhlIHBhdHRlcm4sICIuIiBpcyBzZXQgdG8gdGhhdCBwYXJ0aWN1bGFyIGxpbmUKKyhmb3IgY2VydGFpbiBjb21tYW5kcyBpZiBsaW5lIGlzIG5vdCBzcGVjaWZpZWQgIi4iIChjdXJyZW50IGxpbmUpIGlzIGFzc3VtZWQpLgorCitTb21lIGV4YW1wbGVzIC0tLS0tLS0tLS0tLS0gRGlzcGxheSBjb250ZXh0ICg1IGxpbmVzKSBmb3IgYWxsIG9jY3VyZW5jZXMgb2YKK2EgcGF0dGVybgorICAgIDpnLyZsdDtwYXR0ZXJuJmd0Oy96Iy41IDpnLyZsdDtwYXR0ZXJuJmd0Oy96Iy41fGVjaG8gIj09PT09PT09PT0iICZsdDsmbHQ7CisgICAgc2FtZSBhcyBmaXJzdCwgYnV0IHdpdGggc29tZSBiZWF1dGlmaWNhdGlvbiAmZ3Q7Jmd0OworRGVsZXRlIGFsbCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4KKyAgICA6Zy8mbHQ7cGF0dGVybiZndDsvZAorRGVsZXRlIGFsbCBibGFuayBsaW5lcyAoanVzdCBhbiBleGFtcGxlIGZvciBhYm92ZSkKKyAgICA6Zy9eXHMqJC9kCitEb3VibGUgc3BhY2UgdGhlIGZpbGUKKyAgICA6Zy9eL3B1ID1cIlxuXCIgOmcvXi9wdSBfICZsdDsmbHQ7IHRoZSBhYm92ZSBvbmUgYWxzbyB3b3JrcyAmZ3Q7Jmd0OworQ29weSBhbGwgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIHRvIGVuZCBvZiBmaWxlCisgICAgOmcvJmx0O3BhdHRlcm4mZ3Q7L3QkCitZYW5rIGFsbCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4gdG8gcmVnaXN0ZXIgJ2EnCisgICAgMCJheTA6Zy8mbHQ7cGF0dGVybiZndDsveSBBCitJbmNyZW1lbnQgdGhlIG51bWJlciBpdGVtcyBmcm9tIGN1cnJlbnQgbGluZSB0byBlbmQtb2YtZG9jdW1lbnQgYnkgb25lCisgICAgOi4sJGcvXlxkL2V4ZSAibm9ybWFsISBcJmx0O2MtYSZndDsiCitDb21tZW50IChDKSBsaW5lcyBjb250YWluaW5nICJERUJVRyIgc3RhdGVtZW50cworICAgIGcvXlxzKkRFQlVHL2V4ZSAibm9ybSEgSS8qIFwmbHQ7RXNjJmd0O0EgKi9cJmx0O0VzYyZndDsiCitBIFJldmVyc2UgbG9va3VwIGZvciByZWNvcmRzIChlZzogQW4gYWRkcmVzcyBib29rLCB3aXRoIE5hbWUgb24gc3RhcnQtb2YtbGluZQorYW5kIGZpZWxkcyBhZnRlciBhIHNwYWNlKQorICAgIDpnLyZsdDtwYXRlcm4mZ3Q7P15cdz9wCQkgICJpZiBvbmx5IG5hbWUgaXMgaW50ZXJlc3RlZAorICAgIDpnLyZsdDtwYXRlcm4mZ3Q7L2thfD9eXHc/cHwnYXAJICAiaWYgbmFtZSBhbmQgdGhlIGxvb2t1cC1saW5lCisgICAgaXMgaW50ZXJlc3RlZCA6Zy8mbHQ7cGF0ZXJuJmd0Oy8/Xlx3P3wrLC9eW14gXS8tMXAJImlmIGVudGlyZSByZWNvcmQKKyAgICBpcyBpbnRlcmVzdGVkCitSZXZlcnNlIGEgZmlsZSAoanVzdCB0byBzaG93IHRoZSBwb3dlciBvZiAnZycpCisgICAgOmcvXi9tMAorCitGb290IG5vdGUgMTogdXNlIDp2IHRvIG5lZ2F0ZSB0aGUgc2VhcmNoIHBhdHRlcm4gRm9vdCBub3RlIDI6IFNvbWUgZXhwbGFuYXRpb24KK29mIGNvbW1vbmx5IHVzZWQgY29tbWFuZHMgd2l0aCA6ZworIDoyLDhjbzE1ID0mZ3Q7IENvcHkgbGluZXMgMiB0aHJvdWdoIDggYWZ0ZXIgbGluZSAxNSA6NCwxNXQkICA9Jmd0OyBDb3B5CisgbGluZXNhIDQgdGhyb3VnaCAxNSB0b3dhcmRzIGVuZCBvZiBkb2N1bWVudCAodCA9PSBjbykKKyAgICA6LXQkICA9Jmd0OyBDb3B5IHByZXZpb3VzIGxpbmUgdG8gZW5kIG9mIGRvY3VtZW50CisgICAgIDptMCAgPSZndDsgTW92ZSBjdXJyZW50IGxpbmUgdG8gdGhlIHRvcCBvZiB0aGUgZG9jdW1lbnQKKzouLCszbSQtMSA9Jmd0OyBNb3ZlIGN1cnJlbnQgbGluZSB0aHJvdWdoIGN1ci1saW5lKzMgdG8gdGhlIGxhc3QgYnV0IG9uZSBsaW5lCisJICAgICBvZiB0aGUgZG9jdW1lbnQKK0Zvb3Qgbm90ZSAzOiBDb21tYW5kcyB1c2VkIHdpdGggOmcgYXJlIGV4IGNvbW1hbmRzLCBzbyBhIGhlbHAgc2VhcmNoIHNob3VsZAorCSAgICAgYmUsCisJCTpoZWxwIDombHQ7aGVscC10b3BpYyZndDsgZWcuIDpoZWxwIDprCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkRlbGV0aW5nCituZXN0ZWQgcmVwbHkgdGhyZWFkcyBpbiBlbWFpbHM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjI4Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIyODwvQT48QlI+CisKK0kgZmluZCB0aGUgZm9sbG93aW5nIHNldHRpbmcgdXNlZnVsIHdoZW4gcmVwbHlpbmcgdG8gZW1haWwgdGhyZWFkcyB0aGF0IGhhdmUKK2xvdHMgb2YgbGluZXMgbGlrZSB0aGUgZm9sbG93aW5nOiAmZ3Q7IGJsYWggJmd0OyAmZ3Q7IGJsYWggJmd0OyAmZ3Q7ICZndDsgYmxhaAorCithdXRvY21kIEZpbGVUeXBlIG1haWwgbWFwICZsdDtGOCZndDsgOiVnL14mZ3Q7ICZndDsvZCZsdDtDUiZndDsKKworV2hlbiByZXBseWluZyB0byBhIG1haWwgYW5kIHlvdSB3YW50IHRvIHJlbW92ZSBldmVyeXRoaW5nIGV4Y2VwdCB3aGF0IHRoZQorcGVyc29uIHlvdSBhcmUgZGlyZWN0bHkgcmVwbHlpbmcgdG8gd3JvdGUganVzdCBwcmVzcyBGOC4gIEZyb20gdGhlIGV4YW1wbGUKK2Fib3ZlLCB5b3Ugd291bGQganVzdCBiZSBsZWZ0IHdpdGggJmd0OyBibGFoCisKK1doYXQgaXQgZG9lcyBpcyBzaW1wbHkgbWF0Y2ggYW55IGxpbmUgc3RhcnRpbmcgd2l0aCAmZ3Q7ICZndDsgYW5kIGRlbGV0ZXMgaXQuCitJdCdzIG5vdCBwZXJmZWN0IGFzIHNpZ3MgYW5kIG90aGVyIGRlYnJpcyBtYXkgcmVtYWluIGJ1dCBpdCB0YWtlcyBhIGxvdAorb2YgdGhlIGdydW50IHdvcmsgb3V0IG9mIHJlcGx5aW5nIHRvIG1haWxzLiAgVGhlIGF1dG9jbWQgb25seSBtYXBzIEY4IHdoZW4KK3VzaW5nIG1haWxzLCB0aGlzIGlzIGhhbmR5IGlmIHlvdSB1c2UgRjggZm9yIG90aGVyIHRoaW5ncyBhcyBJIGRvLgorCis6aGVscCBhdXRvY21kIDpoZWxwIG1hcCA6aGVscCA6ZworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5GaXJzdAordGhpbmcgdG8gdHJ5IGJlZm9yZSBhc2tpbmcgaGVscDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMjkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjI5PC9BPjxCUj4KKworSSd2ZSBzZWVuIHNldmVyYWwgcXVlc3Rpb25zIGFza2VkIGluIHRoZSByZWZsZWN0b3Igd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZQoraGVscCBmaWxlcy4gIFllYWgsIEkga25vdyB0aGUgaGVscCBpcyBodWdlLiBCdXQsIHlvdSBjYW4gdHJ5IHRoaXMgY29tbWFuZAordG8gc2hvdyBhIGxpc3Qgb2YgcmVsYXRlZCB0b3BpY3MgeW91IGFyZSB0cnlpbmc6CisgICA6aGUgJmx0O3RvcGljJmd0OyZsdDtjLWQmZ3Q7CitJdCBpcyAic29tZSB0b3BpYyIgZm9sbG93ZWQgYnkgdGhlIGtleSBzZXF1ZW5jZSBDdHJsLUQuIEZvciBlZzoKKyAgIDpoZSB4dGVybSZsdDtjLWQmZ3Q7Cit3aWxsIHNob3cgYWxsIHRoZSBoZWxwIHRvcGljcyBtYXRjaGluZyB4dGVybS4gVGhlbiB5b3UgY2FuIGRvCitjb21wbGV0aW9uL2NvcHktbi1wYXN0ZSB0aGUgdG9waWMgeW91IGFyZSBzZWFyY2hpbmcuIE9mIGNvdXJzZSB5b3UgY2FuIGN5Y2xlCit0aHJvdWdoIGFsbCB0aGUgdG9waWNzIHRocm91Z2ggcmVwZWF0ZWQgJmx0O1RBQlMmZ3Q7LCBidXQgaWYgdGhlIG51bWJlciBvZgoraGl0cyBhcmUgaHVnZSwgaXQgaXMgY3VtYmVyc29tZS4KKworRW5qb3kgdmltbWluZyBiZWdpbm5lcnMhISEgIC1BcnVuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmNvcHkKK2N1cnJlbnQgZmlsZSB0byBhbm90aGVyIGxvY2F0aW9uIGZyb20gd2l0aGluIHZpbTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjMwPC9BPjxCUj4KKworSSB3b3JrIG9uIGpzcCBwYWdlcyBpbiBteSBzb3VyY2UgdHJlZSBidXQgSSBoYXZlIHRvIGNvcHkgdGhlIGpzcCBmaWxlcyBvdmVyCit0byB0aGUgdG9tY2F0IGRpcmVjdG9yeSBpbiBvcmRlciB0byB2aWV3IG15IGNoYW5nZXMuVGhlIGZvbGxvd2luZyBtYXBwaW5nCit3aWxsIGNvcHkgdGhlIGZpbGUgYmVpbmcgZWRpdGVkIHRvIGFub3RoZXIgbG9jYXRpb24uCisKK2NvbW1hbmQgQ3BhZ2Ugc2lsZW50ICFjcCAnJTpwJyAiYzovUHJvZ3JhfjEvVG9tY2F0L3dlYmFwcHMvY29uc29sZS9wYWdlcy8lIgorCitFeHBsYW5hdGlvbjoKKworJSByZWZlcnMgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICU6cCByZWZlcnMgdG8gdGhlIHBhdGggdG8gdGhlIGZpbGUgc2lsZW50CitzdXBwcmVzc2VzIHRoZSBjb21tYW5kIHByb21wdCB3aW5kb3cuCisKK1VzYWdlOgorCis6Q3BhZ2UKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkxvY2FsaXplZCBjb2xvciBzY2hlbWVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIzMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzE8L0E+PEJSPgorCitpIGZyZXF1ZW50bHkgbGlrZSB0byBlZGl0IG11bHRpcGxlIGZpbGVzIGluIHRoZSBzYW1lIHZpbSBzZXNzaW9uLiAgaG93ZXZlciwKK2lmIGkgY29tZSBpbnRvIHZpbSBmcm9tIGFub3RoZXIgd2luZG93IGkgZnJlcXVlbnRseSBoaXQgJ2knIGFuZCBzdGFydCB0eXBpbmcKK2luIHdoYXRldmVyIGJ1ZmZlciBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZCAtLSB0aGlzIGlzIG9mdGVuIHRoZSB3cm9uZyBvbmUKKyhyZXF1aXJlcyAmbHQ7ZXNjJmd0OywgdW5kbywgZ28gdGhlIG90aGVyIGJ1ZmZlciBhbmQgLiB0byByZWRvKS4KKworb25lIHdheSB0byB3b3JrIGFyb3VuZCB0aGlzIGZvciBtZSBpcyB0byB1c2UgYSBkaWZmZXJlbnQgY29sb3Igc2NoZW1lCitkZXBlbmRpbmcgb24gd2hhdCBmaWxlIGknbSB3b3JraW5nIG9uOgorCithdSBCdWZFbnRlciAqIGlmIChleGlzdHMoImI6Y29sb3JzX25hbWUiKSkgfCBsZXQgYjpjdXJyZW50X2NvbG9ycz1jb2xvcnNfbmFtZQorfCBleGVjdXRlICJjb2xvcnNjaGVtZSAiIC4gYjpjb2xvcnNfbmFtZSB8IGVuZGlmCisKK2F1IEJ1ZkxlYXZlICogaWYgKGV4aXN0cygiYjpjdXJyZW50X2NvbG9ycyIpKSB8IGV4ZWN1dGUgImNvbG9yc2NoZW1lICIKKy4gYjpjdXJyZW50X2NvbG9ycyB8IGVuZGlmCisKK2lmIHlvdSBkZWZpbmUgYjpjb2xvcnNfbmFtZSB3aXRoIGEgcGFydGljdWxhciBjb2xvciBzY2hlbWUgbmFtZSwgdGhlbiB0aGUKK2Fib3ZlIGF1dG9jb21tYW5kcyB3aWxsIHN3aXRjaCB0byB0aGF0IGNvbG9yc2NoZW1lIHdoZW4geW91IGVudGVyIHRoYXQgd2luZG93CithbmQgd2lsbCByZXR1cm4gdG8gdGhlIG9yaWdpbmFsIGNvbG9yIHVwb24gZGVwYXJ0dXJlLgorCitpbnNpZGUgZnRwbHVnaW4vamF2YS52aW0sIGZvciBleGFtcGxlLCBpIG1pZ2h0IGhhdmUgYjpjb2xvcnNfbmFtZSBzZXQgdG8KKydtb3JuaW5nJywgY2F1c2luZyBhbGwgamF2YSBmaWxlcyB0byBoYXZlIGEgZGlzdGluZ3Vpc2hpbmcgY29sb3Igc2NoZW1lLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5TZWFyY2gKK0pESyBoZWxwIGZvciBrZXl3b3JkIGF0IGN1cnNvcjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjMyPC9BPjxCUj4KKworIElmIHlvdSBhcmUgdXNpbmcgdGhlIFdpbjMyIHZlcnNpb24gb2YgVmltIHlvdSBjYW4gdXNlIHRoaXMgdGlwIHRvIHNlYXJjaAorIHRoZSBKZGsgaGVscCBmb3IgdGhlIGtleXdvcmQgdW5kZXIgdGhlIGN1cnNvci4KK1lvdSBuZWVkIHRoZSB3aW5obHAzMiB2ZXJzaW9uIG9mIHRoZSBKZGsgZG9jcyBmcm9tIHRoaXMgVVJMIC0gPEEKK0hSRUY9Imh0dHA6Ly93d3cuY29uZmx1ZW50LmZyL2phdmFkb2MvaW5kZXhlLmh0bWwuIj5odHRwOi8vd3d3LmNvbmZsdWVudC5mci9qYXZhZG9jL2luZGV4ZS5odG1sLjwvQT48QlI+CitJdCBpcyBhIDE2bWIgRC9MIGFuZCBhcHByb3ggODVtYiB1bnppcHBlZCEKKworSSBhZGRlZCBhIGNvbW1hbmQgdG8gdGhlIHBvcHVwIG1lbnUgOmFtZW51IFBvcFVwLkphdmFIZWxwICAgOiFzdGFydCB3aW5obHAzMgorLWsgJmx0O2N3b3JkJmd0OyBGOlxqZGtcd2luaGVscFxKREsxMy5ITFAgJmx0O0NSCisKK0FuZCBhbHNvIG1hZGUgYSBrZXltYXBwaW5nIG1hcCBKIDohc3RhcnQgd2luaGxwMzIgLWsgJmx0O2N3b3JkJmd0OworRjpcamRrXHdpbmhlbHBcSkRLMTMuSExQICZsdDtDUiZndDsKKworVHJpdmlhbCB5ZXMsIGJ1dCBJIGZpbmQgaXQgcXVpdGUgdXNlZnVsLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Tb21lCit0aXBzIGZvciB1c2luZyBWaW0gdG8gd3JpdGUgTGlzcCBjb2RlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIzMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzM8L0E+PEJSPgorCitGb3Igc29tZSB0aXBzIG9uIGhvdyB0byB1c2UgVmltIGZvciB3cml0aW5nIExpc3AgY29kZSwgc2VlIDxBCitIUkVGPSJodHRwOi8vd3d3Lmxpc3AtcC5vcmcvaTAwMC8xNS12aW0uIj5odHRwOi8vd3d3Lmxpc3AtcC5vcmcvaTAwMC8xNS12aW0uPC9BPjxCUj4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VmkoTSkKK0NvbW1hbmQgTGluZSB0aXBzICYgdHJpY2tzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIzNCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzQ8L0E+PEJSPgorCitIaSBWSU1NRVJzCisKK1RoZXNlIHRpcHMgc2F2ZSBtZSB3ZWFyaW5nIG91dCBteSBkZWxpY2F0ZSBsaXR0bGUgZmluZ2VycyB3aXRoIHVubmVjZXNzYXJ5CitrZXlzdHJva2VzLiAgVGhleSBhc3N1bWUgVW5peCwgYnV0IEkgYWxzbyB1c2UgdGhlbSBvbiBhIFdpbmRvd3MgVW5peCBTaGVsbAorKE1LUykgYXMgd2VsbAorCisjIFdoZW4gSSBrbm93IHRoZSBmaWxlIGkgd2FudCB0byBlZGl0IGlzIHRoZSBtb3N0IHJlY2VudCBmaWxlIGluIGEgZGlyZWN0b3J5CisKK2FsaWFzIC14IHZldz0ndmkgYGxccyAtdCAqIHwgaGVhZCAtMSBgJworCisjV2hlbiBJIGtub3cgdGhlIGZpbGUgSSB3YW50IHRvIGVkaXQgY29udGFpbnMgYSB1bmlxdWUga2V5d29yZCAjdGhpcyBpcworYWN0dWFsbHkgaW4gYSBsaXR0bGUgc2hlbGwgc2NyaXB0IGNhbGwgZWQgdmcgd2hlcmUgdGhlIGtleXdvcmQgaXMgcGFzc2VkIGFzCitwYXJhbWV0ZXIgJDEgIy9iaW4vc2ggI25hbWUgdmcgdmkuZXhlICAkKGdyZXAgLWlzbCAkMSAqKSAmCisKKyMgc29tZSB2YXJpYXRpb25zIGFsaWFzIC14IHZwPSd2aSBgbFxzIC10ICouQChwbHxjZ2kpfCBoZWFkIC0xIGAnCisKKyNleGVjdXRlIHRoZSBtb3N0IHJlY2VudCBzY3JpcHQgKEkgY2FsbCB0aGlzIGZyb20gd2l0aGluIFZJTSB3aXRoIGEgbWFwcGVkCitidXR0b24pIGFsaWFzIC14IHhldz0nYGxccyAtdCAqLnBsIHwgaGVhZCAtMSBgJworCitDaGVlcnMgenphcHBlcgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Ub2dnbGUKK2hpZ2hsaWdodCB3b3JkIHVuZGVyIGN1cnNvciwgdG8gZmluZCBjdXJzb3IuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIzNSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzU8L0E+PEJSPgorCitXaGVuIHRoZSBzY3JlZW4gaGFzIHNjcm9sbGVkIHN1Y2ggYXMgZHVyaW5nIGEgc2VhcmNoLCBpdCBtYXkgYmUgZGlmZmljdWx0IHRvCitmaW5kIHRoZSBjdXJzb3IuICA6aGVscCAlIyBleHBsYWlucyB0aGUgcGF0dGVybiBvbmUgY2FuIHVzZSB0byBoaWdobGlnaHQgdGhlCit3b3JkIGFyb3VuZCB0aGUgY3Vyc29yLCB3aGljaCBnaXZlcyBhIGJpZ2dlciB0YXJnZXQgdG8gbG9vayBmb3Igb24gdGhlIHNjcmVlbi4KK0kgaGF2ZSB0aGlzIGluIG15IC52aW1yYzoKKworZnVuY3Rpb24gVklNUkNXaGVyZSgpCisgICAgaWYgIWV4aXN0cygiczpoaWdobGlnaHRjdXJzb3IiKQorCW1hdGNoIFRvZG8gL1xrKlwlI1xrKi8gbGV0IHM6aGlnaGxpZ2h0Y3Vyc29yPTEKKyAgICBlbHNlCisJbWF0Y2ggTm9uZSB1bmxldCBzOmhpZ2hsaWdodGN1cnNvcgorICAgIGVuZGlmCitlbmRmdW5jdGlvbiBtYXAgJmx0O0MtSyZndDsgOmNhbGwgVklNUkNXaGVyZSgpJmx0O0NSJmd0OworCitUaGlzIG1lYW5zIHRoYXQgaW4gIm5vcm1hbCIgbW9kZSBjdHJsLWsgd2lsbCB0b2dnbGUgdGhlIGhpZ2hsaWdodC4gIFRvZG8gaXMKK2EgaGlnaHRsaWdodCBncm91cCB3aGNoIGlzIHBhcnRpY3VsYXJseSBlYXN5IHRvIHNlZS4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCitzZWUgIjpoZWxwIHM6IiwgIjpoZWxwIG1hdGNoIiwJIjpoZWxwIGV4aXN0cygpIiAgYW5kICI6aGVscCBmdW50aW9uIi4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+TWVudQorZm9yIGluc2VydGluZyBzcGVjaWFsIGNoYXJhY3RlcnM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjM2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIzNjwvQT48QlI+CisKK0ZpcnN0LCB0aGFua3MgZm9yIHRoZSBzY3JpcHQgcHJpbnRhc2NpaS52aW0uCisKK1doZW4gbG9va2luZyBhdCB0aGUgYXNjaWkgdGFibGUsIEkgZm91bmQgc29tZSBjaGFyYWN0ZXJzIEknZCBsaWtlIHRvIGhhdmUKK2luc2VydGVkIHdoZW4gZWRpdGluZy4JQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4geW91ciBfZ3ZpbXJjIGFuZCB5b3UKK2NhbiBzZWxlY3QgdGhlbSB2aWEgbWVudS4gIChjaGFuZ2UgdGhlIG5hbWVzIG9mIHRoZSBtZW51IGlmIHlvdSBkb24ndCBoYXZlCitHZXJtYW4gaW5zdGFsbGVkIG9yIGRvbid0IGxpa2UgbXkgdGl0bGVzKS4gIEkgYWxzbyBtYWRlIHNvbWUgYWJicmV2aWF0aW9ucwordG8gZ2V0IHNlcGFyYXRpb24gbGluZXMgaW4gZG9jdW1lbnRhdGlvbiBvciBjb2RlIGZpbGVzLCBlLmcuICBhYmIgZG90bGluCiuFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhV5NCithYmIgY2RvdGxpbgorLyqFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFKi9eTQorYWJiIGZkb3RsaW4KK5WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVXk0KK2FiYiBjZmRvdGxpbgorLyqVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVKi9eTSBhYmIKK2RsaW4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1eTQorYWJiIGNkbGluCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL15NIGFiYgorbGluIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXk0KK2FiYiBjbGluCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL15NIGFiYgordWxpbiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX15NCithYmIgY3VsaW4KKy8qX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyovXk0gYWJiCitVbGluIK+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vXk0KK2FiYiBjVWxpbgorLyqvr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vKi9eTQorCisoeW91IGhhdmUgdG8gc3Vic3RpdHV0ZSBeTSB3aXRoIENUUkxfViBDVFJMX00gb3IgZGVsZXRlIGl0KQorCisyMGltZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLm9wZW5cIGFuZ2xlXAmrCismbHQ7Qy1SJmd0Oz1ucjJjaGFyKDE3MSkmbHQ7Q1ImZ3Q7IDIwbm1lbnUgRWRpdGllcmVuLlNvbmRlcnplaWNoZW4ub3BlblwKK2FuZ2xlXAkgIKsJICBhJmx0O0MtUiZndDs9bnIyY2hhcigxNzEpJmx0O0NSJmd0OyZsdDtFU0MmZ3Q7CisyMGltZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLmNsb3NlXCBhbmdsZVwJuworJmx0O0MtUiZndDs9bnIyY2hhcigxODcpJmx0O0NSJmd0OyAyMG5tZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLmNsb3NlXAorYW5nbGVcCSC7CSBhJmx0O0MtUiZndDs9bnIyY2hhcigxODcpJmx0O0NSJmd0OyZsdDtFU0MmZ3Q7CisyMGltZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLnN0YXJ0XCBtYXJrXAmECismbHQ7Qy1SJmd0Oz1ucjJjaGFyKDEzMikmbHQ7Q1ImZ3Q7IDIwbm1lbnUgRWRpdGllcmVuLlNvbmRlcnplaWNoZW4uc3RhcnRcCittYXJrXAkghAkgYSZsdDtDLVImZ3Q7PW5yMmNoYXIoMTMyKSZsdDtDUiZndDsmbHQ7RVNDJmd0OworMjBpbWVudSBFZGl0aWVyZW4uU29uZGVyemVpY2hlbi5lbmRcIG1hcmtcCVwJlAorJmx0O0MtUiZndDs9bnIyY2hhcigxNDgpJmx0O0NSJmd0OyAyMG5tZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLmVuZFwKK21hcmtcCSAgIFwJICAglAkgICBhJmx0O0MtUiZndDs9bnIyY2hhcigxNDgpJmx0O0NSJmd0OyZsdDtFU0MmZ3Q7CisyMGltZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLmZhdFwgZG90XAlcCZUKKyZsdDtDLVImZ3Q7PW5yMmNoYXIoMTQ5KSZsdDtDUiZndDsgMjBubWVudSBFZGl0aWVyZW4uU29uZGVyemVpY2hlbi5mYXRcCitkb3RcCSAgIFwJICAglQkgICBhJmx0O0MtUiZndDs9bnIyY2hhcigxNDkpJmx0O0NSJmd0OyZsdDtFU0MmZ3Q7CisyMGltZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLmV0Y1wJXAlcCYUKKyZsdDtDLVImZ3Q7PW5yMmNoYXIoMTMzKSZsdDtDUiZndDsgMjBubWVudSBFZGl0aWVyZW4uU29uZGVyemVpY2hlbi5ldGNcCitcCVwJhQlhJmx0O0MtUiZndDs9bnIyY2hhcigxMzMpJmx0O0NSJmd0OyZsdDtFU0MmZ3Q7CisyMGltZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLiF1bmRlcnNjb3JlXAlcCa8KKyZsdDtDLVImZ3Q7PW5yMmNoYXIoMTc1KSZsdDtDUiZndDsgMjBubWVudSBFZGl0aWVyZW4uU29uZGVyemVpY2hlbi4hdW5kZXJzY29yZVwKK1wJrwlhJmx0O0MtUiZndDs9bnIyY2hhcigxNzUpJmx0O0NSJmd0OyZsdDtFU0MmZ3Q7CisyMGltZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLmNvcHlyaWdodFwJXAmpCismbHQ7Qy1SJmd0Oz1ucjJjaGFyKDE2OSkmbHQ7Q1ImZ3Q7IDIwbm1lbnUgRWRpdGllcmVuLlNvbmRlcnplaWNoZW4uY29weXJpZ2h0XAorXAmpCWEmbHQ7Qy1SJmd0Oz1ucjJjaGFyKDE2OSkmbHQ7Q1ImZ3Q7Jmx0O0VTQyZndDsKKzIwaW1lbnUgRWRpdGllcmVuLlNvbmRlcnplaWNoZW4ucGFyYWdyYXBoXAlcCacKKyZsdDtDLVImZ3Q7PW5yMmNoYXIoMTY3KSZsdDtDUiZndDsgMjBubWVudSBFZGl0aWVyZW4uU29uZGVyemVpY2hlbi5wYXJhZ3JhcGhcCitcCacJYSZsdDtDLVImZ3Q7PW5yMmNoYXIoMTY3KSZsdDtDUiZndDsmbHQ7RVNDJmd0OworMjBpbWVudSBFZGl0aWVyZW4uU29uZGVyemVpY2hlbi5ub2l0YW1hbGN4ZVwJoQorJmx0O0MtUiZndDs9bnIyY2hhcigxNjEpJmx0O0NSJmd0OyAyMG5tZW51IEVkaXRpZXJlbi5Tb25kZXJ6ZWljaGVuLm5vaXRhbWFsY3hlXAoroQlhJmx0O0MtUiZndDs9bnIyY2hhcigxNjEpJmx0O0NSJmd0OyZsdDtFU0MmZ3Q7CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPklmCit5b3UgcHJlZmVyIHZlcnRpY2FsIHNwbGl0czwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjM3PC9BPjxCUj4KKworVGhpcyBpcyBqdXN0IGluIGNhc2UgdGhlcmUncyBzb21lYm9keSBlbHNlIHdobyBsaWtlcyB0byB3b3JrIGluIGEgbWF4aW1pemVkCit2aW0gd2luZG93IG9uIGEgaGlnaCByZXNvbHV0aW9uIGRlc2t0b3AuIElmIHlvdSBmb2xsb3cgZ29vZCBjb2RpbmcgcHJhY3RpY2UKK2FuZCBtYWtlIHN1cmUgeW91ciBwcm9ncmFtcyB1c2Ugb25seSA4MCBjaGFyYWN0ZXJzIGluIGVhY2ggcm93LCBoYXZlIHlvdQorbm90aWNlZCBob3cgbXVjaCBzcGFjZSBsaWVzIHVudXNlZCBvbiB0aGUgcmlnaHQ/CisKK0kgZmluZCB0aGF0IHRoZSBmb2xsb3dpbmcgc2V0dGluZ3Mga2VlcCBtZSBmcm9tIGV2ZXIgc2VlaW5nIGFub3RoZXIgaG9yaXpvbnRhbAorc3BsaXQsIHVubGVzcyBJIHNwZWNpZmljYWxseSBhc2sgZm9yIGl0LgorCitjYWJicmV2IHNwbGl0IHZzcGxpdCBjYWJicmV2IGhzcGxpdCBzcGxpdCBjYWJicmV2IHN0YSB2ZXJ0aWNhbCBzdGEgY2FiYnJldgoraGVscCB2ZXJ0aWNhbCBoZWxwIGNhYmJyZXYgbmV3IHZuZXcgY2FiYnJldiByaWdodCBib3RyaWdodAorCis7IEEgbW9yZSBoZWF2eXdlaWdodCBzb2x1dGlvbiBmb3IgXldeXSBmdW5jdGlvbiEgVG9nZ2xlU3BsaXQgKGRpcikKKyAgICBsZXQgY3VyckZuYW1lID0gYnVmbmFtZSAoIiUiKSBsZXQgb2xkID0gd2lubnIgKCkKKworICAgICIgV2luZG93IG5hdmlnYXRpb24gdG8gZW5zdXJlIHRoZSBjb3JyZWN0IHdpbmRvdyBpcyAnbGFzdCcuICBpZiAoYTpkaXIgPT0KKyAgICAidSIpCisJd2luY21kIGsgbGV0IGJhY2s9ImoiCisgICAgZWxzZWlmIChhOmRpciA9PSAiZCIpCisJd2luY21kIGogbGV0IGJhY2s9ImsiCisgICAgZWxzZWlmIChhOmRpciA9PSAibCIpCisJd2luY21kIGggbGV0IGJhY2s9ImwiCisgICAgZWxzZWlmIChhOmRpciA9PSAiciIpCisJd2luY21kIGwgbGV0IGJhY2s9ImgiCisgICAgZW5kaWYKKworICAgIGlmICh3aW5uciAoKSA9PSBvbGQpCisJZWNobyAiT3VjaCIgcmV0dXJuCisgICAgZW5kaWYKKworICAgIGV4ZWMgIndpbmNtZCAiIC4gYmFjaworCisgICAgcXVpdAorCisgICAgaWYgKGJhY2sgPT0gImoiIHx8IGJhY2sgPT0gImsiKQorCWxldCBvcmllbnRhdGlvbiA9ICJ2c3BsaXQiCisgICAgZWxzZQorCWxldCBvcmllbnRhdGlvbiA9ICJzcGxpdCIKKyAgICBlbmRpZgorCisgICAgaWYgKGJhY2sgPT0gImoiIHx8IGJhY2sgPT0gImwiKQorCWxldCBkaXIgPSAiYmVsb3ciCisgICAgZWxzZQorCWxldCBkaXIgPSAiYWJvdmUiCisgICAgZW5kaWYKKworICAgIGV4ZWMgZGlyIC4gIiAiIC4gb3JpZW50YXRpb24gIiAiIC4gY3VyckZuYW1lCitlbmRmdW5jdGlvbiBub3JlbWFwIF5XXl0gXldeXTpzaWxlbnQgY2FsbCBUb2dnbGVTcGxpdCAoImQiKSZsdDtDUiZndDsKKworOyBPcHRpb25hbC4gIHNldCBzcGxpdHJpZ2h0IDsgSW4gd2hpY2ggY2FzZSB0aGUgYWJvdmUgbWFwcGluZyBiZWNvbWVzOiBub3JlbWFwCiteV15dIDpzZXQgc3BsaXRiZWxvdyZsdDtDUiZndDteV15dOnNpbGVudCBjYWxsIFRvZ2dsZVNwbGl0ICgidSIpJmx0O0NSJmd0OzpzZXQKK25vc3BsaXRiZWxvdyZsdDtDUiZndDsgOyBPciB5b3UgY291bGQganVzdCBzZXQgc3BsaXRiZWxvdyA7IDotKQorCis7IFZlcnkgZWxlZ2FudCBhbmQgYWxtb3N0IHBlcmZlY3QsIGJ1dCBpdCBzY3Jld3MgdXAgaWYgeW91IHdhbnQgdG8gcnVuIGEKK2NvbW1hbmQgd2l0aCByYW5nZXMgOi0pIDtub3JlbWFwIDogOnZlcnRpY2FsJmx0O1NwYWNlJmd0OworCis7IEVPRgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5WZXJ5CitiYXNpYyBzZXNzaW9uIHBlcnNpc3RlbmNlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTIzOCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzg8L0E+PEJSPgorCitJIHVzZSB0aGUgZm9sbG93aW5nIGNvZGUgaW4gbXkgcGx1Z2lucyBkaXIgdG8gZWFzZSBzZXNzaW9uIHBlcnNpc3RhbmNlLiBJZgorSSB3YW50IG15IHNlc3Npb24gdG8gcGVyc2lzdCBJIHVzZSA6bWtzISBhbmQgdGhlbiB3aGVuZXZlciBJIG9wZW4gdGhlCitTZXNzaW9uLnZpbSBmaWxlLCBteSBzZXNzaW9uIGlzIHJlc3RvcmVkLiBJZiBJIGFtIHdvcmtpbmcgZnJvbSBhIHJlc3RvcmVkCitzZXNzaW9uIGFuZCBJIGNsb3NlIFZJTSwgdGhlIHNlc3Npb24gaXMgc2F2ZWQgYXV0b21hdGljYWxseS4gRHJhd2JhY2sgaXMKK3RoYXQgaXQgbWFrZXMgZWRpdGluZyB0aGUgU2Vzc2lvbi52aW0gZmlsZSBhIGJpdCBjdW1iZXJzb21lIDspCisKKyAgYXUgQnVmUmVhZCBTZXNzaW9uLnZpbSBzbyAlIGF1IFZpbUxlYXZlICogY2FsbCBTYXZlQ3VycmVudFNlc3Npb24oKQorCisgIGZ1bmN0aW9uISBTYXZlQ3VycmVudFNlc3Npb24oKQorICAgIGlmIHY6dGhpc19zZXNzaW9uICE9ICIiCisgICAgICBleGUgIm1rc2Vzc2lvbiEgIiAuIHY6dGhpc19zZXNzaW9uCisgICAgZW5kaWYKKyAgZW5kZnVuY3Rpb24KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPm1hcCBzaGlmdC11cCBhbmQgc2hpZnQtZG93bjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yMzkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjM5PC9BPjxCUj4KKworWW91IGNhbiBtYWtlIFZpbSBzY3JvbGwgdGhlIHRleHQgdXNpbmcgdGhlIHNoaWZ0ZWQgdXAvZG93biBhcnJvd3MsIHNvcnQKK29mIGxpa2UgeW91ciBicm93c2VyIChleGNlcHQgd2l0aCBzaGlmdGVkIGtleXMgOiksIGJ5IG1hcHBpbmcgU2hpZnQtVXAgdG8KK0N0cmwtWSBhbmQgU2hpZnQtRG93biB0byBDdHJsLUUuCisKKyAgICBtYXAgJmx0O3MtRG93biZndDsgJmx0O0MtRSZndDsgbWFwICZsdDtzLVVwJmd0OyAmbHQ7Qy1ZJmd0OworCitTaGlmdC1Eb3duIHdpbGwgdGhlbiBzY3JvbGwgZG93biAobGlrZSBtb3ZpbmcgYSBzY3JvbGwtYmFyIGRvd24sIG9yIGxpa2UKK21vdmluZyBhIGN1cnNvciBhdCB0aGUgYm90dG9tIG9mIGEgd2luZG93IGRvd24pLCBhbmQgU2hpZnQtVXAgd2lsbCB0aGVuCitzY3JvbGwgdXAgKGxpa2UgbW92aW5nIGEgc2Nyb2xsLWJhciB1cCwgZXRjKS4KKworSWYgeW91J2QgcmF0aGVyIHRoaW5rIGFib3V0IHRoZSB0ZXh0IG1vdmluZyBkb3duL3VwIGluc3RlYWQgb2YgdGhlIGN1cnNvcgorbW92aW5nIHVwL2Rvd24sIHlvdSBjYW4gb2YgY291cnNlIHN3YXAgdGhlIG1hcHBpbmdzLgorCitJZiB5b3Ugbm9ybWFsbHkgdXNlIGogYW5kIGsgZm9yIGN1cnNvciBtb3ZlbWVudCwgYW5kIHJhcmVseSB1c2UgdGhlIGFycm93CitrZXlzLCB5b3UgY2FuIG1hcCB0aGUgYXJyb3cga2V5cyBkaXJlY3RseSwgaW4gd2hpY2ggY2FzZSBJJ2QgcHJvYmFibHkgbWFwCit0aGUgc2hpZnRlZCBhcnJvdyBrZXlzIGJhY2sgdG8gY3Vyc29yIG1vdmVtZW50OgorCisgICAgbWFwICZsdDtkb3duJmd0OyAmbHQ7Yy1lJmd0OyBtYXAgJmx0O3VwJmd0OyAmbHQ7Yy15Jmd0OyBtYXAgJmx0O3MtZG93biZndDsKKyAgICBqIG1hcCAmbHQ7cy11cCZndDsgaworCitTZWUgOmhlbHAgY3RybC1lLCA6aGVscCBjdHJsLXksIGFuZCA6aGVscCBrZXktbWFwcGluZy4KKworU2VlIGFsc28gOmhlbHAgaV9jdHJsLW8gYW5kIDpoZWxwIG1hcC1tb2RlcyBmb3IgaG93IHRvIHNldCB1cCB0aGVzZSBtYXBwaW5ncworZm9yIHVzZSBpbiBvdGhlciBtb2RlcyAobGlrZSBpbnNlcnQgbW9kZSA6KS4KKworKFZpbSBieSBkZWZhdWx0IG1hcHMgcy1Eb3duIGFuZCBzLVVwIHRvIEN0cmwtRiBhbmQgQ3RybC1CLCBmb3IgYm90aCBub3JtYWwgYW5kCit2aXN1YWwgbW9kZS4gIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSBjaGFuZ2Ugc29tZSBvZiB0aGUgYWJvdmUgbWFwcGluZ3MgdG8KKyJubWFwIiwgJ2NhdXNlIHlvdSdsbCBwcm9iYWJseSBhbHNvIHdhbnQgdG8gbG9vayBpbiB0byAidm1hcCIuKQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+SGlkZWFsbCBmb3IgVmltPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI0MCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNDA8L0E+PEJSPgorCitYZW1hY3MgaGFzIGEgaGlkZSBhbGwgZnVuY3Rpb24gd2hpY2ggY2FuIG1ha2UgYWxsIHRoZSBmdW5jdGlvbiBpbiB5b3VyIEMgZmlsZSBhCitmb2xkIGFuZCBjbG9zZSB0aGVtLiBBbmQgaGVyZSBpcyBzb21ldGhpbmcgc21hbGwgdG8gYWNoaWV2ZSBzaW1pbGlhciB1bmRlciBWaW0uCisKK2Z1bmMhIEhpZGVBbGwoKQorICAgc3luIHJlZ2lvbiBteUZvbGQgc3RhcnQ9InsiIGVuZD0ifSIgdHJhbnNwYXJlbnQgZm9sZCBzeW4gc3luYyBmcm9tc3RhcnQKKyAgIHNldCBmb2xkbmVzdG1heD0xIHNldCBmb2xkbWV0aG9kPXN5bnRheAorZW5kZnVuYworCithbWVudSBXaGF0ZXZlci5IaWRlXCBhbGwgOmNhbGwgSGlkZUFsbCgpJmx0O0NSJmd0OworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+IkhpZGUiIEZvbGRpbmcgTWFya2VyczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNDEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQxPC9BPjxCUj4KKworSSB3YW50ZWQgdG8gc3RhcnQgdXNpbmcgZm9sZGluZyB3aXRob3V0IGhhdmluZyB0byBnZXQgdXNlZCB0byBzZWVpbmcgdGhlCisoZGVmYXVsdCkgbWFya2VycywgYS5rLmEge3t7IGFuZCB9fX0uIFNvLCBoZXJlIGFyZSAyIGF1dG9jbWQncyB0aGF0IHdpbGwKK21ha2UgdGhlbSBmYWRlIHRvIGJsYWNrLi4uLmJnPWJsYWNrIGZnPWJsYWNrCisKK2F1IEJ1ZlJlYWQsQnVmTmV3ZmlsZQkqIHN5biBtYXRjaCBmbXJrciAnIip7e3tcfCIqfX19JwkJIHwKKwkJCVwgc3luIGNsdXN0ZXIgdmltQ29tbWVudEdyb3VwIGNvbnRhaW5zPWZtcmtyCSB8CisJCQlcIGhpIGZtcmtyIHRlcm09Tk9ORSBndWliZz1ibGFjayAgIGd1aWZnPWJsYWNrIFwKKwkJCWN0ZXJtYmc9YmxhY2sgY3Rlcm1mZz1ibGFjaworCithdSBCdWZSZWFkLEJ1Zk5ld2ZpbGUJKiBzeW4gbWF0Y2ggZm1ya3IgJyIqe3t7XHwiKn19fScKKwkJCVwgY29udGFpbmVkaW49dmltTGluZUNvbW1lbnQgY29udGFpbmVkCQkgfAorCQkJXCBoaSBmbXJrciB0ZXJtPU5PTkUgZ3VpYmc9YmxhY2sgICBndWlmZz1ibGFjayBcCisJCQljdGVybWJnPWJsYWNrIGN0ZXJtZmc9YmxhY2sKKworVGhleSBib3RoIGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcsIGJ1dCB3aXRoIGRpZmZlcmVudCBtZXRob2RzLCBzbyBzaW1wbHkgcGljaworb25lIGFuZCBzZWUgdGhvc2UgYW5ub3lpbmcgKGF0IGxlYXN0IHRvIG1lKSBtYXJrZXJzIGZhZGUgYXdheS4JSSBqdXN0IHRyaWVkCitpdCBvdXQgd2l0aCB2aW0gZmlsZXMsIGJ1dCB5b3UgY2FuIGVhc2lseSBtb2RpZnkgaXQgZm9yIGFueSBvdGhlciBmaWxldHlwZXMuCisKK1RoYW5rcyB0byBDb2xpbidzIGxlYWQgd2l0aCAnOmhlbHAgYy1zeW50YXgnCWZvciB0aGUgMXN0IGF1LiAgVGhhbmtzIHRvCitCZW5qaSdzIGxlYWQgd2l0aCAnOmhlbHAgY29udGFpbmVkaW4nIGZvciB0aGUgMm5kIGF1LiAgVW5kZXJzdGFuZGluZyBtb3N0CitvZiB0aGUgc3ludGF4LnR4dCBkb2N1bWVudCBmaWxlIHdvdWxkIGFsc28gYmUgaGVscGZ1bC4KKworVG8gZmlndXJlIG91dCB3aGF0IGhpZ2hsaWdodGluZyBncm91cCB0aGUgTWFya2VyIGlzIGluLCBJIHdvdWxkIHN1Z2dlc3QKK3VzaW5nIENoaXAncyB2aW10aXAjOTkuCisKK0hhcHB5IFZpbW1pbmchCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5UaGUgcG93ZXIgb2YgIlxfIiBpbiByZWctZXg8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI0MjwvQT48QlI+CisKK09uZSBvZiB0aGUgbW9zdCB1bmNlbGVicmF0ZWQgZmVhdHVyZSBvZiB2aW0gNi4wIGlzIHRoZSBhYmlsaXR5IHRvIHNwYW4gYQorc2VhcmNoIGFjcm9zcyBtdWx0aXBsZSBsaW5lcy4KKworXF9eICAgbWFwcyBhIGJlZ2luaW5nIG9mIGxpbmUgYW55d2hlcmUgaW4gc2VhcmNoIHBhdHRlcm4uICBcXyQJIC0tLSItLS0tLSBlbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4gIFxfcwktLS0iLS0tLS0tIHNwYWNlCistLS0tLS0tLS0tLS0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAuCisKK2UuZyAgL3tcX3Mgd2lsbCBtYXAgYWxsIHdoaXRlIHNwYWNlcyBhbmQgbmV3LWxpbmUgY2hhcnMgYWZ0ZXIgYSAieyIKKworVGhlIFxfIGNhbiBiZSBhcHBlbmRlZCB0byBvdGhlciBvYmplY3RzIGFzIHdlbGwuIHN1Y2ggYXMgXF9VLCAgXF9MLCAgXF8uICh0aGlzCitvbmUncyByaXNreSkgLgorCitTZWUgOmhlbHAgcGF0dGVybiBmb3IgbW9yZSBkZXRhaWxzLiAgTmpveQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+RGV2ZWxvcCB2aW0gbW9kdWxlcyBvbiBXaW48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI0MzwvQT48QlI+CisKK1dlJ3JlIHRyeWluZyB0byBkZXZlbG9wIHR4dDJwZGYudmltIDxBCitIUkVGPSJodHRwOi8vdmltLnNvdXJjZWZvcmdlLm5ldC9zY3JpcHRzL3NjcmlwdC5waHA/c2NyaXB0X2lkPTI4MyBvbgorV2luLiI+aHR0cDovL3ZpbS5zb3VyY2Vmb3JnZS5uZXQvc2NyaXB0cy9zY3JpcHQucGhwP3NjcmlwdF9pZD0yODMKK29uIFdpbi48L0E+PEJSPiBJdCdzIGEgdmVyeSBzaW1wbGUgbW9kdWxlIHRvIHNhdmUgdGhlCitjdXJyZW50IGZpbGUgYW5kIGNvbnZlcnQgaXQgdG8gUERGIHVzaW5nIG91ciB0eHQycGRmIHRvb2wgPEEKK0hSRUY9Imh0dHA6Ly93d3cuc2FuZmFjZS5jb20vdHh0MnBkZi5odG1sIj5odHRwOi8vd3d3LnNhbmZhY2UuY29tL3R4dDJwZGYuaHRtbDwvQT48QlI+CitPbiBvdXIgV2luZG93cyAyMDAwIHdlJ3ZlIGRldmVsb3BlZCBpdC4gSXQgd29ya3MgZ29vZC4JVG9kYXkgd2UndmUgdGVzdGVkCit0aGUgbW9kdWxlIG9uIExpbnV4LiBTdXJwcmlzZTogaXQgZG9lc24ndCB3b3JrLiAgRGVmYXVsdCBXaW4gVmltIGNvbmZpZ3VyZQorc2F2ZSBvbiBXaW4gdGV4dCBpbiBXaW4gd2F5OiBFT0wgXHJcbi4JQSBWaW0gbW9kdWxlIG1hZGUgaW4gdGhpcyB3YXkgY2FuJ3QKK3dvcmsgb24gTGludXggKHByb2JhYmx5IG9uIGV2ZXJ5IFVuaXggT1MpLiAgSWYgeW91IHdhbnQgdG8gbWFrZSBhIFZpbSBtb2R1bGUKK29uIFdpbiBhbmQgeW91IHdhbnQgaXQgY2FuIHdvcmsgYWxzbyBvbiBVbml4ICh3ZSBob3BlIHRoZSBzYW1lIHJ1bGEgY2FuIHdvcmsKK2Fsc28gb24gZGlmZmVyZW50IE9TKSB5b3UndmUgdG8gc2F2ZSB0aGUgVmltIG1vZHVsZSB3aXRoIFVuaXggRU9MIChcbikuCisKK1BsZWFzZSBzZW5kIHVzIChzYW5mYWNlQHNhbmZhY2UuY29tKSB5b3VyIG5vdGVzIGFib3V0IG90aGVyIE9TIChlLmcuIE9wZW5WTVMpLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Bc2sKK3ZpbSB3aGVyZSBhbiBvcHRpb24gd2FzIHNldC48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQ0Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI0NDwvQT48QlI+CisKKyAgICAgV2hlbiB0aGluZ3MgZ28gd3JvbmcsIGl0IGlzIHNvbWV0aW1lcyBoYXJkIHRvIGZpZ3VyZSBvdXQgd2h5LgorICAgICBGb3IgZXhhbXBsZSwKK2FuIG9wdGlvbiBtaWdodCBiZSBzZXQgaW4gdGhlIHN5c3RlbSB2aW1yYyBmaWxlLCBpbiBhIHBlcnNvbmFsIHZpbXJjIGZpbGUsCitpbiBhIHBsdWdpbiAoZ2xvYmFsIG9yIGxvY2FsKSwgb3IgaW50ZXJhY3RpdmVseS4gIFZpbSB3aWxsIHRlbGwgeW91IHdoZXJlCit0aGUgY3VycmVudCB2YWx1ZSB3YXMgc2V0IGlmIHlvdSBhc2s6CisKKzp2ZXJib3NlIHNldCBoaXN0b3J5PworCit3aWxsIHRlbGwgeW91IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSAnaGlzdG9yeScgb3B0aW9uLCBhbmQgd2hlcmUgaXQgd2FzIHNldC4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+V29ya2luZword2l0aCBVbmljb2RlIChwbGF0Zm9ybS1pbmRlcGVuZGVudCk8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQ1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI0NTwvQT48QlI+CisKK0hlcmUgYXJlIHRoZSBtYWluIG9wdGlvbnMgeW91IHdpbGwgd2FudCB0byBzZXQgaWYgeW91IHdhbnQgdG8gd29yayB3aXRoCitVbmljb2RlIGZpbGVzIGluIChnKXZpbSAoc2VlIGF0IGJvdHRvbSB3aGF0IGhlbHAgdGFncyB0byBsb29rIGZvcikKKworaWYgaGFzKCJtdWx0aV9ieXRlIikKKyAgICAgc2V0IGVuY29kaW5nPXV0Zi04CQkJICAgICAgIiBob3cgdmltIHNoYWxsIHJlcHJlc2VudAorICAgICBjaGFyYWN0ZXJzIGludGVybmFsbHkgc2V0Z2xvYmFsIGZpbGVlbmNvZGluZz11dGYtOAkJIiBlbXB0eSBpcworICAgICBhbHNvIE9LIChkZWZhdWx0cyB0byBzYW1lIGFzICdlbmNvZGluZycpLiBPciB5b3UgbWF5IHdhbnQgdG8gc2V0IG9uZQorICAgICBvZiB0aGUgdWNzIGVuY29kaW5ncyAod2hpY2gKKwkJCQkJCQkgICIgbWF5IHVzZSBsZXNzIGRpc2sKKwkJCQkJCQkgIHNwYWNlIGlmIHlvdSB1c2UKKwkJCQkJCQkgIG9ubHkgImFscGhhYmV0aWMiCisJCQkJCQkJICBzY3JpcHRzIHN1Y2ggYXMKKwkJCQkJCQkgIExhdGluLCBHcmVlaywKKwkJCQkJCQkgIEN5cmlsbGljLCBIZWJyZXcKKwkJCQkJCQkgIG9yIEFyYWJpYywgYW5kICIKKwkJCQkJCQkgIG5vdCAiaWRlb2dyYXBoaWMiCisJCQkJCQkJICBzY3JpcHRzIGxpa2UKKwkJCQkJCQkgIENoaW5lc2UsIEphcGFuZXNlCisJCQkJCQkJICBvciBLb3JlYW4uIFdpdGgKKwkJCQkJCQkgIHRoZSB1Y3MgZW5jb2RpbmdzCisJCQkJCQkJICBpdCBpcyB1c3VhbGx5IGJldHRlcgorICAgICBzZXQgYm9tYgkJCQkJICAgIiAgdG8gYWxzbyBzZXQgJ2JvbWInCisgICAgIG9uICgnYnl0ZS1vcmRlci1tYXJrIiBvcHRpb24sIGlycmVsZXZhbnQgZm9yIHV0Zi04IGJ1dCBub3QgZm9yCisgICAgIHVjcykgc2V0IHRlcm1lbmNvZGluZz1pc28tODg1OS0xNQkgICIgb3Igd2hhdGV2ZXIgaXMgYXBwcm9wcmlhdGUKKyAgICAgdG8geW91ciBsb2NhbGUgKGlzby04ODU5LTE1IGlzIExhdGluMSArIEV1cm8gY3VycmVuY3kgc2lnbikgc2V0CisgICAgIGZpbGVlbmNvZGluZ3M9dWNzLWJvbSxpc28tODg1OS0xNSxpc28tODg1OS0zLHV0Zi04CisJICIgb3Igd2hhdGV2ZXIgaXMgYXBwcm9wcmlhdGUgdG8gdGhlIGtpbmRzIG9mIGZpbGVzIHlvdSB3YW50IHRvCisJIGVkaXQgIiAnZmlsZWVuY29kaW5ncycgZGVmaW5lcyB0aGUgaGV1cmlzdGljIHRvIHNldCAnZmlsbGVuY29kaW5nJworCSAobG9jYWwgdG8gYnVmZmVyKSB3aGVuIHJlYWRpbmcgYW4gZXhpc3RpbmcgZmlsZS4gVGhlIGZpcnN0IG9uZSB0aGF0CisJIG1hdGNoZXMgd2lsbCBiZSB1c2VkLgkiIHVjcy1ib20gaXMgInVjcyB3aXRoIGJ5dGUtb3JkZXItbWFyayI7CisJIGl0IG11c3Qgbm90IGNvbWUgYWZ0ZXIgdWNzLTggaWYgeW91IHdhbnQgaXQgdG8gYmUgdXNlZAorZWxzZQorICAgICBlY2hvZXJyICJTb3JyeSwgdGhpcyB2ZXJzaW9uIG9mIChnKXZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggK211bHRpX2J5dGUiCitlbmRpZgorCitJbiAicmVwbGFjZSIgbW9kZSwgb25lIHV0ZiBjaGFyYWN0ZXIgKG9uZSBvciBtb3JlIGRhdGEgYnl0ZXMpIHJlcGxhY2VzIG9uZQordXRmIGNoYXJhY3RlciAod2hpY2ggbmVlZCBub3QgdXNlIHRoZSBzYW1lIG51bWJlciBvZiBieXRlcykgSW4gIm5vcm1hbCIgbW9kZSwKK2dhIHNob3dzIHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhlIGN1cnNvciBhcyB0ZXh0LCBkZWNpbWFsLCBvY3RhbCBhbmQgaGV4OyBnOAorc2hvd3Mgd2hpY2ggYnl0ZShzKSBpcy9hcmUgdXNlZCB0byByZXByZXNlbnQgaXQgSW4gImluc2VydCIgb3IgInJlcGxhY2UiIG1vZGUsCisgIC0gYW55IGNoYXJhY3RlciBkZWZpbmVkIG9uIHlvdXIga2V5Ym9hcmQgY2FuIGJlIGVudGVyZWQgdGhlIHVzdWFsIHdheSAoZXZlbgorICB3aXRoIGRlYWQga2V5cyBpZiB5b3UgaGF2ZSB0aGVtLCBlLmcuIOLq7vT7ICDk6+/2/CkgLSBhbnkgY2hhcmFjdGVyIHdoaWNoCisgIGhhcyBhICJkaWdyYXBoIiAodGhlcmUgYXJlIGEgaHVnZSBsb3Qgb2YgdGhlbSwgc2VlIDpkaWcgYWZ0ZXIgc2V0dGluZworICBlbmM9dXRmLTgpIGNhbiBiZSBlbnRlcmVkIHdpdGggYSBDdHJsLUsgcHJlZml4IC0gYW55IHV0ZiBjaGFyYWN0ZXIgYXQKKyAgYWxsIGNhbiBiZSBlbnRlcmVkIHdpdGggYSBDdHJsLVYgcHJlZml4LCBlaXRoZXIgJmx0O0N0cmwtViZndDsgdSBhYWFhCisgIG9yICZsdDtDdHJsLVYmZ3Q7IFUgYmJiYmJiYmIsIHdpdGggMCAmbHQ7PSBhYWFhICZsdDs9IEZGRkYsIG9yIDAgJmx0Oz0KKyAgYmJiYmJiYmIgJmx0Oz0gN0ZGRkZGRkYKKworVW5pY29kZSBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaHRtbCAiYm9keSB0ZXh0IiwgYXQgbGVhc3QgZm9yIE5ldHNjYXBlIDYgYW5kCitwcm9iYWJseSBmb3IgSUU7IGJ1dCBvbiBteSBtYWNoaW5lIGl0IGRvZXNuJ3QgZGlzcGxheSBwcm9wZXJseSBhcyAidGl0bGUgdGV4dCIKKyhpLmUuLCBiZXR3ZWVuICZsdDt0aXRsZSZndDsmbHQ7L3RpdGxlJmd0OyB0YWdzIGluIHRoZSAmbHQ7aGVhZCZndDsgcGFydCkuCisKK0d2aW0gd2lsbCBkaXNwbGF5IGl0IHByb3Blcmx5IGlmIHlvdSBoYXZlIHRoZSBmb250cyBmb3IgaXQsIHByb3ZpZGVkIHRoYXQKK3lvdSBzZXQgJ2d1aWZvbnQnIHRvIHNvbWUgZml4ZWQtd2lkdGggZm9udCB3aGljaCBoYXMgdGhlIGdseXBocyB5b3Ugd2FudAordG8gdXNlIChDb3VyaWVyIE5ldyBpcyBPSyBmb3IgRnJlbmNoLCBHZXJtYW4sIEdyZWVrLCBSdXNzaWFuIGFuZCBtb3JlLAorYnV0IEknbSBub3Qgc3VyZSBhYm91dCBIZWJyZXcgb3IgQXJhYmljOyBpdHMgZ2x5cGhzIGFyZSBvZiBhIG1vcmUgImZpeGVkIgord2lkdGggdGhhbiB0aG9zZSBvZiwgZS5nLiBMdWNpZGEgQ29uc29sZTogdGhlIGxhdHRlciBjYW4gYmUgYW5ub3lpbmcgaWYgeW91CituZWVkIGJvbGQgQ3lyaWxsaWMgd3JpdGluZykuCisKK3NlZToKKworOmggdXRmOCA6aCAnZW5jJyA6aCAnZmVuYycgOmggJ2ZlbmNzJyA6aCAndGVuYycgOmggJ2JvbWInIDpoICdndWlmb250JworOmggZ2EgOmggZzggOmggaV9DdHJsLVZfZGlnaXQKKworSGFwcHkgVmltbWluZyAhICBUb255LgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5Xb3JraW5nCit3aXRoIFVuaWNvZGUgKHRoZSBzYW1lLCByZXdyaXR0ZW4gZm9yIGxlZ2liaWxpdHkpPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI0NiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNDY8L0E+PEJSPgorCisxLiBXaGVyZSB0byBsb29rIGZvciBoZWxwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gOmggdXRmOCA6aCBlbmNvZGluZy12YWx1ZXMKKzpoICdlbmMnIDpoICdmZW5jJyA6aCAnZmVuY3MnIDpoICd0ZW5jJyA6aCAnYm9tYicgOmggJ2d1aWZvbnQnIDpoIGdhIDpoIGc4Cis6aCA6ZGlnIDpoIGlfQ3RybC1WX2RpZ2l0IDpoIGhhcygpCisKKzIuIFdoYXQgdG8gZG8gKFRoZXNlIGFyZSAqZXhhbXBsZXMqLiBNb2RpZnkgdGhlbSB0byBzdWl0IHlvdXIgd29yaworZW52aXJvbm1lbnQuKSAgLS0tLS0tLS0tLS0tLSBpZiBoYXMoIm11bHRpX2J5dGUiKQorICAgICBzZXQgZW5jb2Rpbmc9dXRmLTggc2V0Z2xvYmFsIGZpbGVlbmNvZGluZz11dGYtOAorICAgICBzZXQgYm9tYiBzZXQgdGVybWVuY29kaW5nPWlzby04ODU5LTE1IHNldAorICAgICBmaWxlZW5jb2RpbmdzPXVjcy1ib20saXNvLTg4NTktMTUsaXNvLTg4NTktMyx1dGYtOAorZWxzZQorICAgICBlY2hvZXJyICJTb3JyeSwgdGhpcyB2ZXJzaW9uIG9mIChnKXZpbSB3YXMgbm90IGNvbXBpbGVkIHdpdGggK211bHRpX2J5dGUiCitlbmRpZgorCiszLiBXaGF0IHRoZSBhYm92ZSBkb2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKiBoYXMoIm11bHRpX2J5dGUiKSBjaGVja3MgaWYKK3lvdSBoYXZlIHRoZSByaWdodCBvcHRpb25zIGNvbXBpbGVkLWluLiBJZiB5b3UgaGF2ZW4ndCBnb3Qgd2hhdCBpdCB0YWtlcywKK2l0J3Mgbm8gdXNlIHRyeWluZyB0byB1c2UgVW5pY29kZS4KKworKiAnZW5jb2RpbmcnIHNldHMgaG93IHZpbSBzaGFsbCByZXByZXNlbnQgY2hhcmFjdGVycyBpbnRlcm5hbGx5LiBVdGYtOCBpcworbmVjZXNzYXJ5IGZvciBtb3N0IGZsYXZvcnMgb2YgVW5pY29kZS4KKworKiAnZmlsZWVuY29kaW5nJyBzZXRzIHRoZSBlbmNvZGluZyBmb3IgYSBwYXJ0aWN1bGFyIGZpbGUgKGxvY2FsIHRvIGJ1ZmZlcik7Cis6c2V0Z2xvYmFsIHNldHMgdGhlIGRlZmF1bHQgdmFsdWUuIEFuIGVtcHR5IHZhbHVlIGNhbiBhbHNvIGJlIHVzZWQ6IGl0IGRlZmF1bHRzCit0byBzYW1lIGFzICdlbmNvZGluZycuIE9yIHlvdSBtYXkgd2FudCB0byBzZXQgb25lIG9mIHRoZSB1Y3MgZW5jb2RpbmdzLCBJdAorbWlnaHQgbWFrZSB0aGUgc2FtZSBkaXNrIGZpbGUgYmlnZ2VyIG9yIHNtYWxsZXIgZGVwZW5kaW5nIG9uIHlvdXIgcGFydGljdWxhcgorbWl4IG9mIGNoYXJhY3RlcnMuIEFsc28sIElJVUMsIHV0Zi04IGlzIGFsd2F5cyBiaWctZW5kaWFuIChoaWdoIGJpdCBmaXJzdCkKK3doaWxlIHVjcyBjYW4gYmUgYmlnLWVuZGlhbiBvciBsaXR0bGUtZW5kaWFuLCBzbyBpZiB5b3UgdXNlIGl0LCB5b3Ugd2lsbAorcHJvYmFibHkgbmVlZCB0byBzZXQgJ2JvbWIiIChzZWUgYmVsb3cpLgorCisqICdib21iJyAoYm9vbGVhbik6IGlmIHNldCwgdmltIHdpbGwgcHV0IGEgImJ5dGUgb3JkZXIgbWFyayIgYXQgdGhlIHN0YXJ0CitvZiB1Y3MgZmlsZXMuIFRoaXMgb3B0aW9uIGlzIGlycmVsZXZhbnQgZm9yIG1vc3Qgbm9uLXVjcyBmaWxlcyAodXRmLTgsCitpc28tODg1OSwgZXRjLikKKworKiAndGVybWVuY29kaW5nJyBkZWZpbmVzIGhvdyB5b3VyIGtleWJvYXJkIGVuY29kZXMgd2hhdCB5b3UgdHlwZS4gVGhlIHZhbHVlCit5b3UgcHV0IHRoZXJlIHdpbGwgZGVwZW5kIG9uIHlvdXIgbG9jYWxlOiBpc28tODg1OS0xNSBpcyBMYXRpbjEgKyBFdXJvIGN1cnJlbmN5CitzaWduLCBidXQgeW91IG1heSB3YW50IHNvbWV0aGluZyBlbHNlIGZvciwgc2F5LCBhbiBFYXN0ZXJuIEV1cm9wZWFuIGtleWJvYXJkLgorCisqICdmaWxlZW5jb2RpbmdzJyBkZWZpbmVzIHRoZSBoZXVyaXN0aWMgdG8gc2V0ICdmaWxlZW5jb2RpbmcnIChsb2NhbCB0byBidWZmZXIpCit3aGVuIHJlYWRpbmcgYW4gZXhpc3RpbmcgZmlsZS4gVGhlIGZpcnN0IG9uZSB0aGF0IG1hdGNoZXMgd2lsbCBiZSB1c2VkIChhbmQsCitJSVVDLCBpZiB0aGVyZSBpcyBubyBtYXRjaCwgVmltIGZhbGxzIGJhY2sgb24gTGF0aW4xKS4gVWNzLWJvbSBpcyAidWNzIHdpdGgKK2J5dGUtb3JkZXItbWFyayI7IGl0IG11c3Qgbm90IGNvbWUgYWZ0ZXIgdXRmLTggaWYgeW91IHdhbnQgaXQgdG8gYmUgdXNlZC4KKworNC4gQWRkaXRpb25hbCByZW1hcmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqIEluICJyZXBsYWNlIiBtb2RlLCBvbmUgdXRmCitjaGFyYWN0ZXIgKG9uZSBvciBtb3JlIGRhdGEgYnl0ZXMpIHJlcGxhY2VzIG9uZSB1dGYgY2hhcmFjdGVyICh3aGljaCBuZWVkCitub3QgdXNlIHRoZSBzYW1lIG51bWJlciBvZiBieXRlcykKKworKiBJbiAibm9ybWFsIiBtb2RlLCBnYSBzaG93cyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgYXMgdGV4dCwgZGVjaW1hbCwKK29jdGFsIGFuZCBoZXg7IGc4IHNob3dzIHdoaWNoIGJ5dGUocykgaXMvYXJlIHVzZWQgdG8gcmVwcmVzZW50IGl0LgorCisqIEluICJpbnNlcnQiIG9yICJyZXBsYWNlIiBtb2RlLAorICAtIGFueSBjaGFyYWN0ZXIgZGVmaW5lZCBvbiB5b3VyIGtleWJvYXJkIGNhbiBiZSBlbnRlcmVkIHRoZSB1c3VhbCB3YXkKKyAgKGV2ZW4gd2l0aCBkZWFkIGtleXMgaWYgeW91IGhhdmUgdGhlbSwgZS5nLiBGcmVuY2ggY2lyY3VtZmxleCwgR2VybWFuCisgIHVtbGF1dCwgZXRjLik7IC0gYW55IGNoYXJhY3RlciB3aGljaCBoYXMgYSAiZGlncmFwaCIgKHRoZXJlIGFyZSBhIGh1Z2UgbG90CisgIG9mIHRoZW0sIHNlZSA6ZGlnIGFmdGVyIHNldHRpbmcgZW5jPXV0Zi04KSBjYW4gYmUgZW50ZXJlZCB3aXRoIGEgQ3RybC1LCisgIHByZWZpeDsgLSBhbnkgdXRmIGNoYXJhY3RlciBhdCBhbGwgY2FuIGJlIGVudGVyZWQgd2l0aCBhIEN0cmwtViBwcmVmaXgsCisgIGVpdGhlciAmbHQ7Q3RybC1WJmd0OyB1IGFhYWEgb3IgJmx0O0N0cmwtViZndDsgVSBiYmJiYmJiYiwgd2l0aCAwICZsdDs9CisgIGFhYWEgJmx0Oz0gRkZGRiwgb3IgMCAmbHQ7PSBiYmJiYmJiYiAmbHQ7PSA3RkZGRkZGRi4KKworKiBVbmljb2RlIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBodG1sICJib2R5IHRleHQiLCBhdCBsZWFzdCBmb3IgTmV0c2NhcGUgNiBhbmQKK3Byb2JhYmx5IGZvciBJRTsgYnV0IG9uIG15IG1hY2hpbmUgaXQgZG9lc24ndCBkaXNwbGF5IHByb3Blcmx5IGFzICJ0aXRsZSB0ZXh0IgorKGkuZS4sIGJldHdlZW4gJmx0O3RpdGxlJmd0OyZsdDsvdGl0bGUmZ3Q7IHRhZ3MgaW4gdGhlICZsdDtoZWFkJmd0OyBwYXJ0KS4KKworKiBHdmltIHdpbGwgZGlzcGxheSBpdCBwcm9wZXJseSBpZiB5b3UgaGF2ZSB0aGUgZm9udHMgZm9yIGl0LCBwcm92aWRlZAordGhhdCB5b3Ugc2V0ICdndWlmb250JyB0byBzb21lIGZpeGVkLXdpZHRoIGZvbnQgd2hpY2ggaGFzIHRoZSBnbHlwaHMgeW91Cit3YW50IHRvIHVzZSAoQ291cmllciBOZXcgaXMgT0sgZm9yIEZyZW5jaCwgR2VybWFuLCBHcmVlaywgUnVzc2lhbiBhbmQgbW9yZSwKK2J1dCBJJ20gbm90IHN1cmUgYWJvdXQgSGVicmV3IG9yIEFyYWJpYzsgaXRzIGdseXBocyBhcmUgb2YgYSBtb3JlICJmaXhlZCIKK3dpZHRoIHRoYW4gdGhvc2Ugb2YsIGUuZy4gTHVjaWRhIENvbnNvbGU6IHRoZSBsYXR0ZXIgY2FuIGJlIGF3a3dhcmQgaWYgeW91CituZWVkIGJvbGQgQ3lyaWxsaWMgd3JpdGluZykuCisKK0hhcHB5IFZpbW1pbmcgISAgVG9ueS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlByZWV4aXN0aW5nIGNvZGUgaW5kZW50YXRpb248L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQ3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI0NzwvQT48QlI+CisKK1VzaW5nIHRhYnMgYXMgZWxlbWVudGFyeSB1bml0IGluIHlvdXIgY29kZSBpbmRlbnRhdGlvbiBoYXMgdHdvIGFkdmFudGFnZXM6CitmaXJzdCwgeW91IG1heSBtb2RpZnkgJ3RhYnN0b3AnIGFuZCBpbW1lZGlhdGVseSBhbGwgdGhlIGluZGVudGF0aW9ucyBkZXB0aHMKK2FyZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gaXQ7IHNlY29uZCwgeW91ciBmaWxlIHdpbGwgYmUgc21hbGxlci4KKworQnV0IGhvdyBjYW4gd2UgY2hhbmdlIHNvbWUgYWxyZWFkeS13cml0dGVuIGNvZGUgaW4gb3JkZXIgdG8gY29udmVydCBzcGFjZXMKK3RvIHRhYnMuIFZlcnkgc2ltcGxlISAgU3VwcG9zZSB5b3VyIG9sZCBjb2RlIGhhcyBhbiBpbmRlbnRhdGlvbiB1bml0IG9mCisyIHNwYWNlcyA6cmV0ISAyIDp4IHdpbGwgcmVwbGFjZSBldmVyeSAyLXNwYWNlcyB0byBvbmUgdGFiLCBpbmRlcGVuZGVudGx5Citmcm9tIHlvdXIgY3VycmVudCB0YWJzdG9wIHZhbHVlLCBhbmQgd2lsbCBzYXZlIHRoZSBtb2RpZmllZCBmaWxlLiAgVGhlbiwKK2lmIHlvdSBvcGVuIGFnYWluIHRoZSBmaWxlIHdpdGggdGFic3RvcD0yLCB0aGUgZmlsZSB3aWxsIGxvb2sgYXMgYmVmb3JlIGJ1dAoraXQgd2lsbCBiZSBzbWFsbGVyLiBJZiB5b3Ugb3BlbiB0aGUgZmlsZSB3aXRoIHRhYnN0b3A9NCwgdGhlIGNvZGUgdmlsbCBoYXZlCithIG1vcmUgaW5kZW50ZWQgbG9vaywgYW5kIHNvIG9uLi4uCisKK0NoZWVycyEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+QXV0by1zYXZlCit0aGUgY3VycmVudCBidWZmZXIgcGVyaW9kaWNhbGx5LjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNDgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQ4PC9BPjxCUj4KKworSSBoYXZlIG5vICBpZGVhIGlmIHRoaXMgd2FzIGltcGxlbWVudGVkICBpbiB2aW0gNS4zIG9yIG5vdCwgIGJ1dCB5b3UgY2FuCitkZWZpbml0ZWx5ICBkbyB0aGUgIGZvbGxvd2luZyAga2x1ZGdlICBpbiA2LnggIGJ5ICB1c2luZyBDdXJzb3JIb2xkICBhbmQKK2xvY2FsdGltZToKKworLSBXaGVuIHlvdSAgc3RhcnQgcmVhZGluZyBhIGZpbGUsICBzZXQgYSBidWZmZXIgdmFyaWFibGUgIHRvIHRoZSBjdXJyZW50CisgIHRpbWU6CisKKyAgYXUgQnVmUmVhZCxCdWZOZXdGaWxlICogbGV0IGI6c3RhcnRfdGltZT1sb2NhbHRpbWUoKQorCistIFNldCBhICBDdXJzb3JIb2xkIGV2ZW50ICB0byBjaGVjayAgdG8gc2VlIGlmCWVub3VnaCB0aW1lICBoYXMgZWxhcHNlZAorICBzaW5jZSB0aGUgbGFzdCBzYXZlIGFuZCBzYXZlIGlmIG5vdDoKKworICBhdSBDdXJzb3JIb2xkICogY2FsbCBVcGRhdGVGaWxlKCkKKworLSBEZWZpbmUgYSBmdW5jdGlvbiB0byBzYXZlIHRoZSBmaWxlIGlmIG5lZWRlZDoKKworICAiIG9ubHkgd3JpdGUgaWYgbmVlZGVkIGFuZCB1cGRhdGUgdGhlIHN0YXJ0IHRpbWUgYWZ0ZXIgdGhlIHNhdmUKKyAgZnVuY3Rpb24hIFVwZGF0ZUZpbGUoKQorICAgIGlmICgobG9jYWx0aW1lKCkgLSBiOnN0YXJ0X3RpbWUpICZndDs9IDYwKQorICAgICAgdXBkYXRlIGxldCBiOnN0YXJ0X3RpbWU9bG9jYWx0aW1lKCkKKyAgICBlbHNlCisgICAgICBlY2hvICJPbmx5ICIgLiAobG9jYWx0aW1lKCkgLSBiOnN0YXJ0X3RpbWUpIC4gIiBzZWNvbmRzIGhhdmUgZWxhcHNlZAorICAgICAgc28gZmFyLiIKKyAgICBlbmRpZgorICBlbmRmdW5jdGlvbgorCistIFJlc2V0IHRoZSBzdGFydCB0aW1lIGV4cGxpY2l0bHkgYWZ0ZXIgZWFjaCBzYXZlLgorCisgIGF1IEJ1ZldyaXRlUHJlICogbGV0IGI6c3RhcnRfdGltZT1sb2NhbHRpbWUoKQorCitPYnZpb3VzbHksIHlvdQlzaG91bGQgZ2V0IHJpZCBvZiAgdGhlIGVsc2UgcG9ydGlvbiBvbmNlICB5b3UncmUgY2VydGFpbgordGhhdCB0aGlzIGRvZXMgaW5kZWVkIGRvIHdoYXQgeW91IHdhbnRlZC4KKworVGhlICB0aGluZyAgdG8Jbm90ZSAgaXMgIHRoYXQJdGhlICBDdXJzb3JIb2xkICB3aWxsICBvbmx5ICBmaXJlICBhZnRlcgorJ3VwZGF0ZXRpbWUnIG1pbGxpc2Vjb25kcyAgb2YgaW5hY3Rpdml0eSBoYXZlICBlbGFwc2VkLiBTbywgaWYJeW91IHR5cGUKK3JhcGlkbHkgZm9yICBvbmUgYW5kICBhIGhhbGYgIG1pbnV0ZXMgbm9uLXN0b3AsICBpdCB3b24ndCAgYWN0dWFsbHkgc2F2ZQorYW55dGhpbmcgdW50aWwgeW91IFNUT1AgYWN0aXZpdHkgbG9uZyAgZW5vdWdoLiBUaGlzIG1heSBiZSB3aGF0IHlvdSB3YW50Cithbnl3YXkgYmVjYXVzZSBpdCB3b24ndCBpbnRlcnJ1cHQgeW91ciBhY3Rpdml0eSB3aXRoIGEgZm9yY2VkIHNhdmUuCisKK1RoZSBhY3R1YWwgc2F2ZS1kZWxheSBjYW4gYmUgY2hhbmdlZCBmcm9tICc2MCcgdG8gYW5vdGhlciBudW1iZXIgKGluIHNlY29uZHMpCitvciBhIHZhcmlhYmxlIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4gIFRoaXMgZW50aXJlIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIGVhc2lseQord3JhcHBlZCBpbnNpZGUgYSBuaWNlIHNjcmlwdCB3aGljaCBlbmFibGVzL2Rpc2FibGVzIHRoaXMgb24gYSBwZXItYnVmZmVyIGJhc2lzCisobWF5YmUgd2l0aCBtYXBzIGV0Yy4pLiAgSWYgZGVzaXJlZCwgSSBjYW4gcHJvdmlkZSB0aGF0IGFsc28uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlF1aWNrbHkKK2luc2VydCAjaWYgMCAtICNlbmRpZiBhcm91bmQgYmxvY2sgb2YgY29kZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNDkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjQ5PC9BPjxCUj4KKworT25lIG9mIG15IGZhdm9yaXRlIG1hY3JvcyB0aGF0IEkgdXNlIGluIHZpbSAoYW5kIHZpKSBpbnNlcnRzIGEgI2lmIDAgI2VuZGlmCitzYW5kd2ljaCBhcm91bmQgYSBibG9jayBvZiBjb2RlLiAgSSBhbHdheXMgbWFwIHRoaXMgdG8gdGhlIDIga2V5IHNlcXVlbmNlIDsnCit3aGljaCBpcyB0aGUgc2VtaS1jb2xvbiBmb2xsb3dlZCBieSB0aGUgc2luZ2xlIHF1b3RlLiAgTG9vayBhdCB5b3VyIGtleWJvYXJkLAoreW91IHdpbGwgbm90aWNlIHRoZXNlIGtleXMgYXJlIGFkamFjZW50IHRvIG9uZSBhbm90aGVyLiAgSSBsaWtlIHRoaXMgbWFwcGluZworYmVjYXVzZSBpdCdzIHZlcnkgZmFzdCwgbXkgZmluZ2VycyBlYXNpbHkgcm9sbCBmcm9tIG9uZSBrZXkgdG8gdGhlIG5leHQsCitvYnZpb3VzbHkgWU1NVi4KKworVG8gdXNlIHRoaXMgbWFwcGluZywgZ28gdG8gdGhlIGxpbmUgb2YgY29kZSB0aGF0IHlvdSB3YW50IHRoZSAnI2lmIDAnIHRvIGJlCitvbiwgdHlwZSBtYSB0byBtYXJrIHRoaXMgbGluZSB3aXRoIHRoZSBtYXJrZXIgYSwgdGhlbiBtb3ZlIHRvIHRoZSBsaW5lIHRoYXQKK3Nob3VsZCBiZSBsYXN0IGxpbmUganVzdCBhYm92ZSB0aGUgJyNlbmRpZicgYW5kIHByZXNzIDsnCisKKyAgICAiIGluc2VydCAjaWYgMCAtICNlbmRpZiBhcm91bmQgYmxvY2sgb2YgY29kZSBtYXAgOycgbXonYU8mbHQ7RXNjJmd0O2kjaWYKKyAgICAwJmx0O0VzYyZndDsnem8mbHQ7RXNjJmd0O2kjZW5kaWYmbHQ7RXNjJmd0OworCistLSBEYXZpZCBUaG9tcHNvbiBkYXQxOTY1QHlhaG9vLmNvbQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+T25lIGJpZyB3aW5kb3c8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjUwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1MDwvQT48QlI+CisKK0lmIHlvdSBsaWtlIHRvIHNlZSB5b3VyIGZpbGVzIGluIGZ1bGxzY3JlZW4sIGFuZCB5b3UgaGF2ZSB0byBlZGl0IG1vcmUgZmlsZXMsCit5b3UgY2FuIGRvIHRoZSBmb2xsb3dpbmcuICAqIFVzZSBvbmx5IG9uZSB3aW5kb3cgKiBPcGVuIGZ1cnRoZXIgZmlsZXMgd2l0aCA6ZSAqCit0eXBlIDpubSAmbHQ7QS1VcCZndDsgOmJwISZsdDtDUiZndDsgKiB0eXBlIDpubSAmbHQ7QS1Eb3duJmd0OyA6Ym4hJmx0O0NSJmd0OworKiB0eXBlIDpubSAmbHQ7Qy1GNCZndDsgOmJkISZsdDtDUiZndDsgWW91IGNhbiBvZiBjb3Vyc2UgY2hhbmdlIHRoZSBrZXlzLgorTm93IHRvIHN3aXRjaCBiZXR3ZWVuIHdpbmRvd3MsIHlvdSBjYW4gcHJlc3MgQWx0LVVwLCBhbmQgQWx0LURvd24gKEp1c3QgaW4KK3RoZSBHVUksIGlmIHlvdSB1c2UgY29uc29sZSwgZG9uJ3QgdXNlIEFsdCBrZXkpIEFub3RoZXIgaWRlYSBpcyB0byBtYXAgdGhlbQordG8gQ3RybC1UYWIsIGFuZCBDdHJsLVNoaWZ0LVRhYiBUbyBjbG9zZSB0aGUgY3VycmVudCBmaWxlIHlvdSBjYW4gcHJlc3MgQ3RybC1GNAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5hbGlnbgorI2VuZGlmIHdpdGggY29ycmVzcG9uZGluZyAjaWYvI2lmZGVmPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1MSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNTE8L0E+PEJSPgorCitJZiB5b3UgdHJ5IHRvIGltcG9zZSBhbnkgc29ydCBvZiBhbGlnbm1lbnQgb24geW91ciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywKK3JhdGhlciB0aGFuIGp1c3Qgc3RhcnRpbmcgdGhlbSBvbiBjb2x1bW4gMCwgdGhpcyBtYXBwaW5nIHdpbGwgYWxpZ24gdGhlICNlbmRpZgorJ2NvcnJlY3RseScgd2hlbiB5b3UgdHlwZSAnI2VuJywgc3RhcnQgYSBuZXcgbGluZSwgYW5kIGJyaW5nIHlvdSBiYWNrIHRvCit0aGUgY29ycmVjdCBhbGlnbm1lbnQgdG8gZWRpdCBjb2RlLgorCitpbm9yZW1hcCAmbHQ7YnVmZmVyJmd0OyAjZW4KK1gmbHQ7QlMmZ3Q7Jmx0O0VzYyZndDs/I2lmJmx0O0NSJmd0OyJ6eTBeT2cwInpwRGEjZW5kaWYmbHQ7Q1ImZ3Q7WCZsdDtCUyZndDsmbHQ7RXNjJmd0Oz8jZW5kPy0xJmx0O0NSJmd0O14ienkwXk8wInpwRGEKKworSSBhbSByZWFzb25hYmx5IHN1cmUgdGhpcyBpcyBpbnNlbnNpdGl2ZSB0byB2aW0gb3B0aW9ucy4uLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5weXRob24KK3NjcmlwdCB0byBhbGlnbiBzdGF0ZW1lbnRzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1MiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNTI8L0E+PEJSPgorCitpIGtub3cgdGhlcmUncyBzb21lIGF3ayBzY3JpcHRzIG91dCB0aGVyZSB0aGF0IGRvIHRoZSBzYW1lIHRoaW5nLCBhbmQgaWYgaQord2VyZSBhIHJlYWwgdHJvb3BlciBpIHdvdWxkIGhhdmUgd3JpdHRlbiB0aGlzIGluIHZpbXMgaW50ZXJuYWwgbGFuZ3VhZ2UgYnV0Li4uCisKK2kgd3JvdGUgYSBweXRob24gc2NyaXB0IHRvIGFsaWduIHN0YXRlbWVudHMuCisKK2kgcHV0IHRoaXMgaW4gbXkgLnZpbXJjOiBtYXAgTCA6IWxpbmVVcC5weSZsdDtjciZndDsgICAiIG9mIGNvdXJzZSBsaW5lVXAucHkKK2lzIHNvbWV3aGVyZSBpbiBteSBwYXRoCisKK2FuZCBpIGhhdmUgdGhpcyBweXRob24gZmlsZSBzb21ld2hlcmUgaW4gbXkgcGF0aDogPEEKK0hSRUY9Imh0dHA6Ly9vcGhpbml0eS5jb20vcmVzL2RvdEZpbGVzL2xpbmVVcC5weSI+aHR0cDovL29waGluaXR5LmNvbS9yZXMvZG90RmlsZXMvbGluZVVwLnB5PC9BPjxCUj4KKworc28gbm93IGkgY2FuIGp1c3QgcGlwZSB0aGUgb2ZmZW5kaW5nIGxpbmVzIHRocnUgbXkgY29kZTogOjUsIDEwICFsaW5lVXAucHkKK29yIHVzaW5nIHRoZSBtYXBwaW5nIGFib3ZlLCB2aXN1YWxseSBzZWxlY3QgdGhlIGxpbmVzIGFuZCBwcmVzcyAnTCcKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VGhlCitwb3dlciBvZiB8ICh2NzV8ci0gYWN0dWFsbHkuLi4pPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1MyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNTM8L0E+PEJSPgorCisnfCcgYXMgeW91IG1heSB3ZWxsIGJlIGF3YXJlIGlzIHRoZSBnb3RvIGNvbHVtbiBtb3Rpb24sIGFuZCB0aGF0ICI3NXwiCit3aWxsIHBsYWNlIHlvdXIgY3Vyc29yIG9uIGNvbHVtbiA3NSBvZiB0aGUgY3VycmVudCBsaW5lLgorCitUaGF0IGluIGl0c2VsZiBpcyBwcmV0dHkgaGFuZHkgYXQgdGltZXMsIGJ1dCBzb21lIHRydWUgcG93ZXIgYXJpc2VzIHdoZW4KK3VzZWQgaW4gY29uanVjdGlvbiB3aXRoIHZpc3VhbCBtb2RlIGFuZCByZXBsYWNlLiBPciB5b3UgY291bGQganVzdCBzYXkgYQorc25lYWt5IHRyaWNrIDopCisKK3Y3NXxyLSB3aWxsIHJlcGFjZSBmcm9tIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiBsaW5lIHdpdGggJy0nICpicmVha2Rvd24qCit2IHRvIHR1cm4gb24gdmlzdWFsIG1vZGUgNzUgZm9yIHRoZSBjb3VudCB8ICpiYXIqIHRvIGdvdG8gY29sdW1uIHIgdG8gZW50ZXIKK3JlcGFjZSAtIHRvIHNwZWNpZnkgdGhlIGNoYXIgdG8gcmVwbGFjZS4KKworQSBoYW5keSBhbmQgcXVpY2sgd2F5IHRvIG1ha2UgYSBub3RpY2FibGUgc2VjdGlvbiBvZiB5b3VyIGNvZGUgKG9yIHdoYXRldmVyKS4KKworQSBoYW5keSB3YXkgdG8gdXNlIHRoaXMgKGZvcm1hdGVkIHRvIGp1c3QgZHJvcCBpbnRvIERyQ2hpcCdzIENTdHVicyk6ICIvLworLVtGZXJhbF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyIvLyAmbHQ7Y3Vyc29yJmd0OworCWVsc2VpZiB3cmQgPT0gIi8vIgorCQlleGUgIm5vcm0hIGEKKwkJLVtBdXRob3JJZF1cJmx0O2VzYyZndDskbHY3NXxyLSRhXCZsdDtjciZndDtcJmx0O2VzYyZndDskYSAiCisKKyIvLyAtW0ZlcmFsOjE0Ni8wMkAwODozMV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIi8vICZsdDtjdXJzb3ImZ3Q7CisJZWxzZWlmIHdyZCA9PSAiLy8vIgorCQlleGUgIm5vcm0hIHMKKwkJLVtBdXRob3JJZDpcJmx0O0MtUiZndDs9c3RyZnRpbWUoJyVqLyV5QCVIOiVNJylcJmx0O0NSJmd0O11cJmx0O2VzYyZndDskbHY3NXxyLSRhXCZsdDtjciZndDtcJmx0O2VzYyZndDskYQorCQkiCisKKyIvKiAtW0ZlcmFsOjE0Ni8wMkAwODozMV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIiAqICZsdDtjdXJzb3ImZ3Q7ICIgKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwllbHNlaWYgd3JkID09ICIvKiIKKwkJZXhlICJub3JtISBhCisJCS1bQXV0aG9ySWQ6XCZsdDtDLVImZ3Q7PXN0cmZ0aW1lKCclai8leUAlSDolTScpXCZsdDtDUiZndDtdXCZsdDtlc2MmZ3Q7JGx2NzV8ci0kYVwmbHQ7Y3ImZ3Q7XCZsdDtjciZndDtcJmx0O2VzYyZndDsybHY3MnxyLSRhCisJCSovXCZsdDtlc2MmZ3Q7ayRhICIKKworSGF2ZSB0byBsb3ZlIFZJTSEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VXNpbmcKK1wlW10gdG8gZWFzaWx5IG1hdGNoIHBhcnRzIG9mIGEgd29yZC48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjU0Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1NDwvQT48QlI+CisKK1RoaXMgY29kZSBmcmFnbWVudCBpcyBzdWl0YWJsZSB0byBkcm9wIGludG8gRHJDaGlwJ3MgQ1N0dWJzLgorQWZ0ZXIgbXVjaCBzZWFyY2hpbmcgSSB3YXMgdW5hYmxlIHRvIGZpbmQgYSB0aXAgbm9yIHNjcmlwdAorbnVtYmVyIHRvIHJlZmVyYW5jZSwgSSBiZWxpZXZlIHdoZXJlIEkgZm91bmQgRHIuIENoaXAncyBDU3R1YnMgb3JpZ2luYWxseSA6IDxBCitIUkVGPSJodHRwOi8vdXNlcnMuZXJvbHMuY29tL2FzdHJvbmF1dC92aW0vdmltc2NyaXB0L2RyY3N0dWJzLnZpbSI+aHR0cDovL3VzZXJzLmVyb2xzLmNvbS9hc3Ryb25hdXQvdmltL3ZpbXNjcmlwdC9kcmNzdHVicy52aW08L0E+PEJSPgorVGhhbmsgeW91IERyLiBDaGlwISAoPQorCitJZiB5b3UgaGF2ZSBldmVyIHdhbnRlZCB0byBtYXRjaCBwYXJ0cyBvZiBhIHdvcmQgeW91IG1heSBoYXZlIGNvbnNpZGVyZWQKK3NvbWV0aGluZyBsaWtlOiBpZiB3cmQgPT0gInJlIiB8fCB3cmQgPT0gInJldCIgfHwgd3JkID09ICJyZXR1IiB8fCB3cmQgPT0KKyJyZXR1ciIKKyAgICJkbyBzb21ldGhpbmcKKworQWx0aG91Z2h0IHRoZSBhYm92ZSB3b3JrcyB3ZWxsIGVub3VnaCBpdCBpcyBhIHBhaW4gdG8gbWFpbnRhaW4gYW5kIGFkZCBuZXcKK3dvcmRzIChub3QgdG8gbWVudGlvbiBpdHMganVzdCBhIHRvdWNoIG1lc3N5IDspICkKKworQSBtb3JlIGVsZWdhbnQgKGFuZCBlYXNpZXIgdG8gdXNlIEkgYmVsaWV2ZSkgbWV0aG9kIHdvdWxkIGJlIHRvIHVzZSBcJVtdCithcyBwYXJ0IG9mIGEgcGF0dGVybi4KKworRm9yIGluc3RhbmNlLCAiXFwmbHQ7cmVcXCVbdHVyXVxcJmd0OyIgd2lsbCBtYXRjaCAicmUiLCAicmV0IiwgInJldHUiIG9yCisicmV0dXIiCisKKypicmVha2Rvd24qIFxcJmx0OyA9IHN0YXJ0IG9mIHdvcmQgcmUgPSBmaXJzdCBsZXR0ZXJzIG9mIHdvcmQgd2Ugd2FudCB0bworcmVxdWlyZSB0byBtYXRjaCBcXCVbdHVyXSA9IG9wdGlvbmFsbHkgbWF0Y2ggY2hhcnMgYmV3dGVlbiB0aGUgYnJhY2VzLAoraS5lLiAndCcsICd0dScgb3IgJ3R1cicgXFwmZ3Q7ID0gZW5kIG9mIHdvcmQKKworU28sIHdlIGNhbiB1c2UgdGhpcyBhcyBhIHBhdHRlcm4gZm9yIG1hdGNoIGxpa2Ugc28gKEluIERyQ2hpcCdzIENTdHVicykKKworZWxzZWlmIG1hdGNoKHdyZCwgIlxcJmx0O3JlXFwlW3R1cl1cXCZndDsiKSAmZ3Q7IC0xCisgICAgZXhlICJub3JtISBiZFdpcmV0dXJuXCZsdDtFc2MmZ3Q7IgorCitXaGljaCwgSSB0aGluaywgaXMgYSBsaXR0bGUgYmV0dGVyIHRoYW4gdGhlIGxvbmdlciBhbHRlcm5hdGl2ZTogIiAgdnMgZWxzZWlmCit3cmQgPT0gInJlIiB8fCB3cmQgPT0gInJldCIgfHwgd3JkID09ICJyZXR1IiB8fCB3cmQgPT0gInJldHVyIgorICAgIGV4ZSAibm9ybSEgYmRXaXJldHVyblwmbHQ7RXNjJmd0OyIKKworSnVzdCBhbm90aGVyIG9uZSBvZiB0aG9zZSBWSU0gdGhpbmdzIHRoYXQgbWFkZSBtZSBzbWlsZSA6KQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+YXJiaXRyYXJ5IHRhZ3MgZm9yIGZpbGUgbmFtZXM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjU1Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1NTwvQT48QlI+CisKK1RoaXMgZGVmaW5pdGVseSB3b3JrIG9uIGxpbnV4IGFuZCB0aGVyZSBpcyBwcm9iYWJseSBzb21lIHdpbmRvd3MgZXF1aXZhbGVudC4KK0kndmUgc3RhcnRlZCB3b3JraW5nIHdpdGggdG9tY2F0IGFuZCBtYW55IG1hbnkgLmpzcCBmaWxlcy4gIEkgZmluZCB0aGlzCit0cmljayB0byBiZSB2ZXJ5IGhlbHBmdWwuCisKK2ZpbmQgLW5hbWUgJyouanNwJyAtcHJpbnRmICclZlx0JVBcdDFcbicgfHNvcnQgJmd0OyBqc3AudGFncworCitUaGlzIHdpbGwgY3JlYXRlIGEgZmlsZSBjYWxsZWQganNwLnRhZ3Mgd2l0aCB0YWcgZW50cmllcyBmb3IgZWFjaCAuanNwIGZpbGUuCitXaXRoaW4gVmltIEkgdXNlCisKKzpzZXQgdGFncys9anNwLnRhZ3MKKworTm93IEkgY2FuIHRvIHNpbXBsZSA6dGFnIGZpbGUuanNwIHRvIHF1aWNrbHkgc3dpdGNoIGIvdyB0aGUgbWFueSwgbWFueQorLmpzcCBmaWxlcy4KKworT25lIGltcG9ydGFudCBub3RlLiAgVGhlIHV0aWxpdHkgc29ydCB3aWxsIHVzZSB0aGUgdmFsdWUgb2YgTENfQ09MTEFURSB0byBzb3J0CithY2NvcmRpbmcgdG8geW91ciBsb2NhbGUuICBUaGlzIHdpbGwgZ2l2ZSBWaW0gaXNzdWVzLiAgU28gdHJ5ICJMQ19DT0xMQVRFPUMKK3NvcnQiIGluc3RlYWQgb2YgcGxhaW4gInNvcnQiCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk9wZW5pbmcKK2N1cnJlbnQgVmltIGZpbGUgaW4geW91ciBXaW5kb3dzIGJyb3dzZXI8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjU2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1NjwvQT48QlI+CisKK0hpIFZpbW1lcnMKKworb3BlbiBjdXJyZW50IGZpbGUgaW4gYnJvd3NlcgorCittYXAgLGYJIDp1cGRhdGUmbHQ7Q1ImZ3Q7OnNpbGVudCAhc3RhcnQgYzpccHJvZ3JhfjFcaW50ZXJufjFcaWV4cGxvcmUuZXhlCitmaWxlOi8vJTpwJmx0O0NSJmd0OworCitvcGVuIGh0dHAgbGluayB1bmRlciBjdXJzb3IgaW4geW91ciBicm93c2VyCisKK21hcCAsaQkgOnVwZGF0ZSZsdDtDUiZndDs6ICFzdGFydCBjOlxwcm9ncmF+MVxpbnRlcm5+MVxpZXhwbG9yZS5leGUKKyZsdDtjV09SRCZndDsmbHQ7Q1ImZ3Q7CisKK05vdGUgdXNlIG9mIGNXT1JEIChub3QgY3dvcmQpIG1lYW5pbmcgT1VURVIgV29yZAorCitXb3JrcyBmb3IgbWUgaW4gWFAgJiA5OCAoT3JpZ2luYWwgY2FtZSBmcm9tIGEgcG9zdGluZyBieSBSYWxmIEFyZW5zKQorCit6emFwcGVyCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5mYXN0IHBhZ2UgdXAvZG93bi48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjU3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI1NzwvQT48QlI+CisKK2kgZGlzY292ZXJlZCBhIGNvb2wgd2F5IHRvIG1vdmUgYmV0d2VlbiBwYWdlcyBvZiB0aGUgc2FtZSBkb2N1bWVudCBpbiB2aW0KKzYuMS4gcHJlc3MgYSBudW1iZXIgaW4gLW5vcm1hbCBtb2RlLSBhbmQgdGhlIHBhZ2UgdXAvZG93bi4gdGhlIGRvY3VtZW50Cit3aWxsIG1vdmUgd2l0aCB0aGF0IG51bWJlciBvZiBwYWdlcyB1cC9kb3duLmlmIHRoZSBudW1iZXIgaXMgZ3JlYXRlciB0aGF0Cit0aGUgbnIgb2YgcGFnZXMsIGRvY3VtZW50IHdpbGwgbW92ZSB0byBiZWdpbi9lbmQgb2YgZmlsZS4gIGkgZGlkbid0IHRlc3QgaXQKK29uIG90aGVyIHZlcnNpb24uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmhvdworbG9uZyBpcyB0aGUgY3VycmVudCB3b3JkPzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNTgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjU4PC9BPjxCUj4KKworZXZlciB3b25kZXJlZCBob3cgbG9uZyB0aGUgY3VycmVudCB3b3JkIGlzPyAgdGhpcyBjYW4gYmUgcXVpdGUgdXNlZnVsIHdoZW4KK2VkaXRpbmcgZGF0YSBmaWxlcy4gIHNpbXBseSBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIC52aW1yYworCitubWFwICZsdDtDLV8mZ3Q7IDplY2hvICd3b3JkJyBleHBhbmQoIiZsdDtjd29yZCZndDsiKSAnICB3b3JkbGVuID0nCitzdHJsZW4oZXhwYW5kKCImbHQ7Y3dvcmQmZ3Q7IikpJmx0O0NSJmd0OworCithbmQgaXQgd2lsbCB0ZWxsIHlvdSB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLCBhbmQgaG93IGxvbmcgaXQgaXMuCisKK2FuZCBmb3IgdGhpbmdzIHRoYXQgYXJlbnQgd29yZHMsIHRoaXMgYWRkaXRpb24gdG8geW91ciAudmltcmMgd29ya3Mgb24KK3NlY3Rpb25zIG9mIGEgbGluZSB0aGF0IGhhdmUgYmVlbiBoaWdodGxpZ3RlZCBpbiB2aXN1YWwgbW9kZQorCit2bWFwICZsdDtDLV8mZ3Q7ICIteTplY2hvICd3b3JkJyBALSAnICB3b3JkbGVuID0nIHN0cmxlbihALSkmbHQ7Q1ImZ3Q7CisKK2FnYWluIHlvdSBzZWUgdGhlICJ3b3JkIiwgYW5kIGl0cyBsZW5ndGggdGhpcyBtYXkgYWxzbyB3b3JrIG9uIHZpbSA1LngsCitidXQgaSBoYXZlbnQgY2hlY2tlZCB0byBtYWtlIHN1cmUuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnJlbW92aW5nCit0aGUgdG9vbGJhciAoaWNvbnMpIGZyb20gZ3ZpbTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNTkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjU5PC9BPjxCUj4KKworQ2hhbmdlIGdvb2Qgb3IgYmFkIHVzdWFsbHkgIGVuY291bnRlcnMgaW50ZXJpYSBmcm9tIHBlb3BsZSBpbiBleGNlcHRpbmcgaXQuCitndmltIDYuMCBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0aGF0IGludHJvZHVjZWQgdGhlIGljb25zIHNob3J0Y3V0IGluIHNoYXBlCitvZiBhIHRvb2xiYXIgdW5kZXIgdGhlIG1lbnUuICB3aGVuIHdlIHVwZ3JhZGVkIHRvIHRoZSBuZXcgYW5kIGltcHJvdmVkIHZpbQorNi4xIGZyb20gdmltIDUuNyBzb21lIG9mIHBlb3BsZSBpbiBvdXIgY29tcGFueSBlbmNvdW50ZXJlZCBzb21lIHByb2JsZW1zCit3aXRoIHRoZWlyIHN5bnRheCBoaWdobGlnaHRpbmcgYW5kIHNvbWUgb2YgdGhlbSBvYmplY3RlZCBvbiB0aGUgbmV3IHRvb2xiYXIKK3doaWNoIGRpc3BsYXllZCBpY29ucyBmb3Igc29tZSBjb21tb24gdGFza3MgZm9yIHBlb3BsZSBtb3JlIHVzZWQgdG8gR1VJLgorCitJIGZpbmFsbHkgZmlndXJlZCBvdXQgaG93IHRvIHJlbW92ZSB0aGlzIG5ldyBmZWF0dXJlIHNpbmNlIEkgYWxzbyBkaWRuJ3QKK3NlZSBtdWNoIHVzZSBmb3IgaXQKKworSGVyZSBpcyBmb3IgYWxsIHRob3NlIHdobyBoYXZlbid0IGZpZ3VyZWQgaXQgb3V0IHlldAorCitJbiB5b3VyIC5ndmltcmMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHR3byBsaW5lcworCit1bm1lbnUgVG9vbEJhciB1bm1lbnUhIFRvb2xCYXIKKworRG9pbmcgdGhpcyBmcm9tIGFuIG9wZW4gZ3ZpbSBkb2VzIG5vdCByZW1vdmUgdGhlbSBidXQgZ3JheXMgdGhlbSBvdXQgYnV0Citkb2luZyBmcm9tIGd2aW1yYyBkb2VzIHRoZSBqb2IKKworSSB3YXMgYWxzbyB0cnlpbmcgdG8gcmVtb3ZlIHRoZSBtZW51cyBhdCB0aGUgdG9wIGFuZCBhbG1vc3Qgc3VjY2VlZGVkIHdpdGgKK2Egc2ltaWxhciB0ZWNobmlxdWUgYnV0IHNvbWVob3cgdGhlIEJ1ZmZlciBtZW51IGl0ZW0gc3RheXMgdGhlcmUgbm8gbWF0dGVyCit3aGF0LiBJTUhPIGl0IGlzIGEgYnVnIGJ1dCBpdCBjb3VsZCB2ZXJ5IHdlbGwgYmUgYSBmZWF0dXJlIDspCisKK0kgdHJpZWQgdGhpcworCit1bm1lbnUgKiB1bm1lbnUhICoKKworZXZlbiBhZGRlZCB0aGlzIGxpbmUgYWZ0ZXIgdGhlIGFib3ZlIHR3byBidXQgZGlkbid0IGhlbHAgdW5tZW51IEJ1ZmZlcnMKKworSSBob3BlIHRoaXMgYmVuZWZpdHMgeW91IGFsbCBhcyBtdWNoIGFzIEkgaGF2ZSBiZW5lZml0dGVkIGZyb20gYWxsIHlvdXIgdGlwcworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+Z3ZpbS0tJmd0O21vdXNlLS0mZ3Q7cG9wdXAgbWVudTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjYwPC9BPjxCUj4KKworVGhpcyB0aXAgaXMgZm9yIHRob3NlIHdobyBwcmVmZXIgdG8gZG8gc29tZSBvZiB0aGUgY29tbW9uIG9wZXJhdGlvbnMgbGlrZQorY3V0L2NvcHkvcGFzdGUgZXRjIHVzaW5nIG1vdXNlLiBBbGwgdSBoYXZlIHRvIGRvIGlzCisKKyA6c2V0IG1vdXNlbW9kZWw9cG9wdXAKKworYnkgdGhpcyB1IGdldCBhIHBvcHVwIG1lbnUgb24gcmlnaHQgY2xpY2sgb2YgeW91ciBtb3VzZSBhbmQgdSBjYW4gZG8gYWxsCit0aGUgY29tbW9uIG9wZXJhdGlvbnMgbGlrZSB1bmRvLCBjdXQsIGNvcHksIHBhc3RlLCBzZWxlY3QgZXRjIHVzaW5nIG1vdXNlLgorCit1IGNhbiBhbHNvIGN1c3RvbWlzZSB5b3VyIHBvcHVwIG1lbnUgYnkgZWRpdGluZyAkVklNUlVOVElNRS9tZW51LnZpbQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5DbG9zZQord2luZG93cyBmcm9tICBHdmltIHBvdXAgbWVudTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjYxPC9BPjxCUj4KKworVG8gY2xvc2Ugd2luZG93cyBmcm9tIHRoZSBwb3B1cCBtZW51IGFkZCB0aGVzZSBsaW5lcyB0byB5b3VyIC5ndmltcmMKKworOmFtZW51IFBvcFVwLkNsb3NlLlwgV2luZG93IDpjb25maXJtIGNsb3NlJmx0O0NSJmd0OyA6YW1lbnUgUG9wVXAuQ2xvc2UuXAorT3RoZXIgIDpjb25maXJtIG9ubHkmbHQ7Q1ImZ3Q7CisKK1lvdSBvYnZpb3VzbHkgbmVlZCAnOnNldCBtb3VzZW1vZGVsPXBvcHVwJyBpbiB5b3VyIC5ndmltcmMgYXMgd2VsbCA6PSkKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Qm9yZWQKK29mIHVyIGFycm93IHNoYXBwZWQgbW91c2VwdHI/PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI2MiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjI8L0E+PEJSPgorCitoZXJlIGlzIGhvdyB1IGNhbiBjaGFuZ2UgdGhlIHNoYXBlIG9mIHVyIG1vdXNlcHRyIGluIGd2aW0uCisKKzpzZXQgbW91c2VzaGFwZT1uOnBlbmNpbAorCit0aGlzIHdpbGwgY2hhbmdlIHRoZSBzaGFwZSBvZiB0aGUgbW91c2VwdHIgdG8gcGVuY2lsIGluIG5vcm1hbCBtb2RlLiAgdSBjYW4KK2Nob29zZSBkaWZmZXJlbnQgc2hhcGVzIGZvciBkaWZmZXJlbnQgbW9kZXMuIHNlZSA6aCBtb3VzZXNoYXBlCisKK1dhbnQgbW9yZSBzaGFwZXM/CisKK1RoZW4gbG9vayBmb3IgdGhlIGZpbGUgY3Vyc29yZm9udC5oIGluIHVyIFgxMS8gZGlyZWN0b3J5LiAgVGhpcyBmaWxlIGNvbnRhaW5zCitsb3RzIG9mIGN1cnNvciBzaGFwZSAjZGVmaW5lIGRlZmluaXRpb25zLCBsaWtlIC4gICNkZWZpbmUgWENfaGVhcnQgNjIgLgorbm93IDpzZXQgbW91c2VzaGFwZT1uOjYyIHdpbGwgc2V0IHRoZSBzaGFwZSBvZiB0aGUgbW91c2VwdHIgdG8gaGVhcnQgaW4KK25vcm1hbCBtb2RlLgorCistbmNyCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5jb2xvciBhY3RpdmUgbGluZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjYzPC9BPjxCUj4KKworVGhpcyB0aXAgc2hvd3MgaG93IHRvIGNvbG9yIHRoZSBhY3RpdmUgbGluZSwgdGhlIGxpbmUgaW4gd2hpY2ggdGhlIGN1cnNvcgoraXMsIGZvciBiZXR0ZXIgcmVhZGluZy4gIFlvdSBzaG91bGQgdHJ5IHBvc3NpYmlsaXR5IDIgYmVmb3JlIDEsIElNSE8gaXQgaXMKK21vc3RseSB1c2FibGUuCisKK3Bvc3NpYmlsaXR5IDE6CisgICAgIDphdSEgQ3Vyc29ySG9sZCAqIGxldCBALyA9ICdcJScgLiBsaW5lKCcuJykgLiAnbC4qJyA6c2V0IHV0PTUwMAorCitleHBsYW5hdGlvbjoKKyAgICAgQWZ0ZXIgNTAwIG1zIG9mIHdhaXRpbmcgZm9yIHlvdSB0byBoaXQgYSBrZXksIHZpbSBzZXRzIHRoZSBzZWFyY2gKKyAgICAgcmVnaXN0ZXIgdG8gYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyB0aGUgY3VycmVudCBsaW5lLgorCitwcm9ibGVtOgorICAgICBSZWdpc3RlciAvIGhvbGRzIHRoZSBzZWFyY2ggcGF0dGVybiwgc28geW91IGNhbm5vdCBoYXZlIGNvbG9yIHRoZSBhY3RpdmUKKyAgICAgbGluZSBhbmQgc2VhcmNoLiAgVGhlcmVmb3JlIGFub3RoZXIgc29sdXRpb246CisKK3Bvc3NpYmlsaXR5IDI6CisgICAgIDpoaWdobGlnaHQgQ3VycmVudExpbmUgZ3VpYmc9ZGFya2dyZXkgZ3VpZmc9d2hpdGUJICAgKG9yIHdoYXRldmVyCisgICAgIGNvbG9ycyB5b3Ugd2FudCkgOmF1ISBDdXJzb3Job2xkICogZXhlICdtYXRjaCBDdXJyZW50TGluZSAvXCUnCisgICAgIC4gbGluZSgnLicpIC4gJ2wuKi8nIDpzZXQgdXQ9MTAwCisKK2V4cGxhbmF0aW9uOgorICAgICBUaGlzIHNvbHV0aW9uIHVzZXMgJ21hdGNoJyB0byBoaWdobGlnaHQgYSBzdHJpbmcsIGl0IGRvZXMgbm90IGludGVyZmFjZQorICAgICB3aXRoIHRoZSBjdXJyZW50IHNlYXJjaCBwYXR0ZXJuLgorCithZGRpdGlvbjoKKyAgICAgVHVybmluZyB0aGUgaGlnaGxpZ2huaW5nIG9mZjoKKwkgIDphdSEgQ3Vyc29yaG9sZCA6bWF0Y2ggbm9uZQorICAgICBUaGUgb3JkZXIgb2YgdGhlc2UgY29tbWFuZHMgYXJlIGltcG9ydGFudC4gSWYgOm1hdGNoIG5vbmUgaXMgZXhlY3V0ZWQKKyAgICAgZmlyc3QsIHRoZSBhdXRvY29tbWFuZCB3b3VsZCBhbG1vc3QgaW1tZWRpYXRlbHkgZXhlY3V0ZSBhbm90aGVyIG1hdGNoCisgICAgIGNvbW1hbmQuCisKK3JlZmVyZW5jZXMgdG8gdmltIGhlbHA6CisgICAgIDpoZWxwIEN1cnNvcmhvbGQgOmhlbHAgJ3V0JyA6aGVscCAvXCVsIDpoZWxwICIvIDpoZWxwIFwlCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkY1CitDb21waWxlIGFuZCBSdW4sIEY4IENvbXBpbGUgKGFsYSBWaXN1YWwgU3R1ZGlvKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjY0PC9BPjxCUj4KKworSSBsb3ZlIHZpbSwgaXQncyBteSBkZWZhdWx0IGVkaXRvciBvbiBteSBTdW4sIFdpbmRvd3MsIExpbnV4IGFuZCAqQlNEIGJveGVuLgorVGhhdCBzYWlkLCBJIGhhdGUgaGF2aW5nIHRvIGZsaXAgd2luZG93cyB0byBjb21waWxlIHdoaWxlIGRvaW5nIHRoZQord3JpdGUtJmd0O2NvbXBpbGUtJmd0O2RlYnVnIGxvb3AuCisKK0lmIHlvdSdyZSB1c2VkIHRvIFZpc3VhbCBTdHVkaW8gYW5kIHRoZSBhYmlsaXR5IGl0IGhhcyB0byBqdXN0IGhpdCBGNSB0bworY29tcGlsZSBhbmQgcnVuIHRoZSBjdXJyZW50IGZpbGUgb3IgRjggdG8gY29tcGlsZSBvciBzdGVwIHRocm91Z2ggdGhlIGNvZGUKK3lvdSdsbCBhcHByZWNpYXRlIHRoaXMuLi4KKworVGhpcyBpcyBteSBXaW5kb3dzIHZlcnNpb24gb2YgdGhpcyBzY3JpcGxldC90aXBsZXQuICBGb3Igb3RoZXIgcGxhdGZvcm1zLAoreW91J2xsIHdhbnQgdG8gY2hhbmdlIHRoZSBJRiBFTFNFIGxvb3BzLiAgWW91IHNob3VsZCBhY3R1YWxseSBuZXZlciBzZWUKK3RoZSAiVW5zdWNjZXNzZnVsIiBtZXNzYWdlIGZyb20gdGhlIGNvbXBpbGUvcnVuIGxvb3AgdW5sZXNzIHRoZSBjb21waWxlcgorY29tcGxldGVseSBib21icyBvdXQuCVRoaXMgaXMgZnJvbSBteSBfdmltcmMuLi4KKworbWFwICZsdDtGNSZndDsgOmNhbGwgQ29tcGlsZVJ1bkdjYygpJmx0O0NSJmd0OworCittYXAgJmx0O0Y4Jmd0OyA6IGNhbGwgQ29tcGlsZUdjYygpJmx0O0NSJmd0OworCitmdW5jISBDb21waWxlUnVuR2NjKCkKKwkJZXhlYyAidyIgICAiU2F2ZSB0aGUgZmlsZSBleGVjICIhZ2NjICUgLW8gJSZsdDsgJiYgY3IgMTAgJiYgSUYKKwkJRVhJU1QgJSZsdDsuZXhlICglJmx0OykgRUxTRSBiYW5uZXIgLWMgPSBDb21waWxlIFVuc3VjY2Vzc2Z1bAorCQkiIGV4ZWMgImkiICJqdW1wIGJhY2sgd2hlcmUgd2Ugd2VyZQorCisKK2VuZGZ1bmMKKworZnVuYyEgQ29tcGlsZUdjYygpCisJCWV4ZWMgInciIGV4ZWMgIiFnY2MgJSAtbyAlJmx0OwkmJiBJRiBFWElTVCAlJmx0Oy5leGUgKGNyIDUgJiYKKwkJYmFubmVyIC1jICMgU3VjY2VzcykgRUxTRSBiYW5uZXIgLWMgIyBDb21waWxlIFVuc3VjY2Vzc2Z1bAorCQkiIGV4ZWMgImkiCisKK2VuZGZ1bmMKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkZhc3QgaGVscCBpbiBmdWxsIHdpbmRvdzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjY1PC9BPjxCUj4KKworWW91IGNhbiBnZXQgZmFzdCBhY2Nlc3MgdG8gaGVscCBieSB3cml0aW5nIHNtYWxsIHNjcmlwdAorCisjIS9iaW4vYmFzaCB2aW0gLWMgImhlbHAgJDEiIC1jIG9ubHkKKworbm93IG5hbWUgaXQgZWcuIHZpaCBhbmQgZnJvbSBjbAorCiskIHZpaCBtYWtlcHJnCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj51c2UgLVMgY29tbWFuZCBsaW5lIHN3aXRjaDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjYiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjY2PC9BPjxCUj4KKworVGhlIC1TIHN3aXRjaCBjb3VsZCBiZSB1c2VkIHRvIHNpbXBsaWZ5IGNvbW1vbiBpZGlvbTogc3RhcnQgVmltIGFuZCBzb3VyY2UKK2Egc2NyaXB0IGZpbGU6IGd2aW0gLWMgIjpzbyBmb29iYXIudmltIiBnb3QgdHJhbnNsYXRlZCBpbnRvIGd2aW0gLVMgZm9vYmFyLnZpbQorCitZZXMsIHRoaXMgdGlwIGlzIHRyaXZpYWwgYnV0IEkgc3RpbGwgc2VlIHRoZSAtYyAiOnNvIHgiIHdheSB0b28gb2Z0ZW4uIFRpbWUKK3RvIHVwZGF0ZSB5b3VyIG1pbmQhCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5zZWxlY3RpdmVseSBkaXNwbGF5aW5nIGFiYnJldmlhdGlvbnM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjY3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI2NzwvQT48QlI+CisKK0hpIFZpbW1lcnMsIGFiYnJldmlhdGlvbnMgaGF2ZSBhbHdheXMgYmVlbiBvbmUgb2YgdGhlIG1vc3QgdXNlZnVsIHBhcnRzIG9mCit2aShtKSwgdHJvdWJsZSBpcyB3aGVuIHlvdSd2ZSBnb3QgdG9vIG1hbnkgeW91IGZvcmdvdCB3aGF0IHlvdSBjYWxsZWQgdGhlbS4KKworWW91IGNhbiBvZiBjb3Vyc2UgbGlzdCB0aGUgd2hvbGUgbG90IHdpdGgKKworOmFiJmx0O2NyJmd0OworCitCdXQgZGlkIHlvdSBrbm93IHRoYXQgeW91IGNhbiB0eXBlIHRoZSBmaXJzdCBmZXcgbGV0dGVycyBvZiB5b3VyIGFiYnJldmlhdGlvbnMKK2FuZCBnZXQgYSBsaXN0IG9mIGp1c3QgdGhvcyBhYnMgZWcKKworOmFiIHBocCZsdDtjciZndDsgZ2l2ZXMgbWUgYWxsIG15IHBocCBhYnMgJiA6YWIgcGVybCZsdDtjciZndDsgZ2l2ZXMgbWUgYWxsCitteSBwZXJscworCithbHNvIHRyeSBjb250cm9sLUQgaW5zdHJhZCBvZiAmbHQ7Y3ImZ3Q7CisKK3p6YXBwZXIKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+R2V0IGN1cnNvcgorcG9zaXRpb24gYXMgYnl0ZSBwZXJjZW50YWdlIGluc3RlYWQgb2YgbGluZSBwZXJjZW50YWdlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI2OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjg8L0E+PEJSPgorCitPbiBsaW5lIDMwMCBvZiBhIHRob3VzYW5kIGxpbmUgZmlsZSwgVmltIHdpbGwgc2hvdyB5b3UgdGhhdCB5b3UncmUgMzAlCit0aHJvdWdoIHRoZSBmaWxlLiAgQnV0IHdoYXQgaWYgbW9zdCBvZiB0aGUgbGluZXMgaGF2ZSBvbmUgY2hhcmFjdGVyIGluIHRoZW0sCithbmQgc29tZSBvZiB0aGVtIGhhdmUgdHdlbnR5IHRob3VzYW5kPwlTb21ldGltZXMgaXQgY29tZXMgaW4gaGFuZHkgdG8ga25vdworeW91ciBwZXJjZW50YWdlIHRocm91Z2ggdGhlIGZpbGUgaW4gdGVybXMgb2YgY3VycmVudC1ieXRlIC8gdG90YWwtYnl0ZXMuCitJIGxvb2tlZCB0aHJvdWdoIHRoZSBWaW0gZG9jcyBhbmQgY291bGRuJ3QgZmluZCBhIHdheSB0byBkbyB0aGlzLCBzbyBJIHdyb3RlCithIFZpbSBmdW5jdGlvbiB0byBzaG93IGl0LgorCitQdXQgdGhpcyBpbiB5b3VyIC52aW1yYzoKKworZnVuY3Rpb24hIFBlcmNlbnQoKQorICAgIGxldCBieXRlID0gbGluZTJieXRlKCBsaW5lKCAiLiIgKSApICsgY29sKCAiLiIgKSAtIDEgbGV0IHNpemUgPSAobGluZTJieXRlKAorICAgIGxpbmUoICIkIiApICsgMSApIC0gMSkgIiByZXR1cm4gYnl0ZSAuICIgIiAuIHNpemUgLiAiICIgLiAoYnl0ZSAqIDEwMCkKKyAgICAvIHNpemUgcmV0dXJuIChieXRlICogMTAwKSAvIHNpemUKK2VuZGZ1bmN0aW9uCisKKyhVbmNvbW1lbnQgdGhlIGZpcnN0IHJldHVybiB0byBzZWUgaW50ZXJtZWRpYXRlIHZhbHVlcy4pCisKK0FuZCBwdXQgdGhpcyBzb21ld2hlcmUgaW4geW91ciAic2V0IHN0YXR1c2xpbmU9Li4uIjoKKworICAgICV7UGVyY2VudCgpfSUlCisKK1NlZSAiaGVscCBzdGF0dXNsaW5lIiwgImhlbHAgZXZhbCIuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlN5bnRheCBoaWdobGlnaHRpbmcKK2lzICJvdXQgb2Ygc3luYyIsIHNlZW1zIHRvIGNvcnJlY3QgaXRzZWxmIHdpdGggcmVmcmVzaCA/PzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNjkiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjY5PC9BPjxCUj4KKworVGhpcyBvbmUgaGFzIGNvbWUgYWNyb3NzIHRoZSAndmltJyB1c2VycyBtYWlsaW5nIGxpc3QgbWFueSB0aW1lcywgYW5kIHByb2JhYmx5Citjb21wLmVkaXRvcnMgYXMgd2VsbC4uLgorCitTdW1tYXJ5OiBzZWUgOmhlbHAgOnN5bi1zeW5jIGFuZCBzZWFyY2ggZm9yICdzeW5jJyBpbiB5b3VyIGZhdm9yaXRlIHN5bnRheAorZmlsZSBpbiAkVklNUlVOVElNRS9zeW50YXgKKworTG9uZyBWZXJzaW9uOiBUaGUgc3ludGF4IGhpZ2hsaWdodCBjb2RlIHV0aWxpemVzIGEgY2VydGFpbiBzeW5jaHJvbml6YXRpb24KK21ldGhvZCB0byBlZmZpY2llbnRseSBmaWd1cmUgb3V0IHN5bnRheCBoaWdobGlnaHRpbmcsIHNwZWNpZmljYWxseSBpZiB5b3UKK2FyZW4ndCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgZmlsZS4JVGhlIHNwZWNpZmljIHNldHRpbmcgaXMgJ3N5bnRheAorc3luYycuCUZvciB2YXJpb3VzIGZpbGUgdHlwZXMgdGhlIG1ldGhvZCBpcyBzZXQgYnkgZGVmYXVsdCBpbiB0aGlzIGlzIHNldHVwCitpbiB0aGUgc3ludGF4IGZpbGUgYW5kIG9uZSBjYW4gdmFyeSB0aGUgZGVncmVlIG9mIHRyb3VibGUgd2hpY2ggVklNIGdvZXMgdG8gdG8KK3RyeSBhbmQgZmlndXJlIHRoaXMgb3V0LiAgQXMgYW4gZXhhbXBsZSBmb3IgQywgZnJvbSAkVklNUlVOVElNRS9zeW50YXgvYy52aW06CisKK2lmIGV4aXN0cygiY19taW5saW5lcyIpCisgIGxldCBiOmNfbWlubGluZXMgPSBjX21pbmxpbmVzCitlbHNlCisgIGlmICFleGlzdHMoImNfbm9faWYwIikKKyAgICBsZXQgYjpjX21pbmxpbmVzID0gNTAJIiAjaWYgMCBjb25zdHJ1Y3RzIGNhbiBiZSBsb25nCisgIGVsc2UKKyAgICBsZXQgYjpjX21pbmxpbmVzID0gMTUJIiBtb3N0bHkgZm9yICgpIGNvbnN0cnVjdHMKKyAgZW5kaWYKK2VuZGlmIGV4ZWMgInN5biBzeW5jIGNjb21tZW50IGNDb21tZW50IG1pbmxpbmVzPSIgLiBiOmNfbWlubGluZXMKKworV2hlcmUgY19taW5saW5lcyBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgbGluZXMgdGhhdCBWSU0gZ29lcyBiYWNrd2FyZCB0byB0cnkKK3RvIGZpbmQgdGhlIHN0YXJ0IG9mIGEgY29tbWVudCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZy4gIElmIHRoYXQgbGluZSB3aGljaAorc3RhcnRzIGEgY29tbWVudCBpcyBvdXRzaWRlIG9mIHRoYXQgcmFuZ2UsIGhpZ2hsaWdodGluZyB3aWxsIGFwcGVhciB3cm9uZy4KKworWW91IGNhbiBlYXNpbHkgc2V0IHVwIHNvbWV0aGluZyBsaWtlIHRoaXMgaW4geW91ciAudmltcmM6IGxldCBjX21pbmxpbmVzPTUwMAorb3IgZXZlbiBiaWdnZXIsIGJ1dCByZWFsaXplIHRoYXQgaXQgaXMgYSBwZXJmb3JtYW5jZSB0cmFkZS1vZmYgYW5kIHRoYXQKK3N5bnRheCBoaWdobGlnaHRpbmcgd2lsbCBzbG93IHRoaW5ncyBkb3duLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+SW5zZXJ0IGEgc2luZ2xlIGNoYXJhY3RlcjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjcwPC9BPjxCUj4KKworVXNpbmcgSW5zZXJ0IG1vZGUgdG8gaW5zZXJ0IGEgc2luZ2xlIGNoYXJhY3RlciBmZWVscyBjbHVtc3kgKHlvdSBuZWVkIDMKK2tleXByZXNzZXMgZm9yIG9uZSBjaGFyYWN0ZXIpLCBzbyBoZXJlJ3MgYSBzbGlnaHRseSBlYXNpZXIgd2F5OgorCis6bm1hcCAmbHQ7c3BhY2UmZ3Q7IGlfJmx0O2VzYyZndDtyCisKK05vdywgd2hlbiBpbiBOb3JtYWwgbW9kZSwganVzdCBwcmVzcyBzcGFjZSBmb2xsb3dlZCBieSB3aGF0IGl0IGlzIHlvdSB3YW50Cit0byBpbnNlcnQuCisKK0JVRzogUmVwZWF0aW5nIHRoZSBpbnNlcnRpb24gd2l0aCAuIGRvZXNuJ3Qgd29yay4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+ZWFzeQorKHVuKWNvbW1lbnRpbmcgb3V0IG9mIHNvdXJjZSBjb2RlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI3MSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzE8L0E+PEJSPgorCitTb21ldGhpbmcgdGhhdCBJIGRvIHF1aXRlIGFsb3QgaXMgY29tbWVudCBvdXQgYmxvY2tzIG9mIHRleHQsIG9ubHkgdG8gdW5jb21tZW50Cit0aGF0IHNhbWUgYmxvY2sgbGF0ZXIuIFRoZSBmb2xsb3dpbmcgbWFwcGluZ3MgaGF2ZSBwcm92ZW4gdXNlZnVsIHRvIG1lLiBUaGV5CitjYW4gYmUgYXBwbGllZCB1c2luZyB2aXN1YWxseSBzZWxlY3RlZCBibG9ja3MsIG9yIHdpdGggbW90aW9uIGtleXMuCisKKyIgbGhzIGNvbW1lbnRzIG1hcCAsIyA6cy9eLyMvJmx0O0NSJmd0OyBtYXAgLC8gOnMvXi9cL1wvLyZsdDtDUiZndDsgbWFwICwmZ3Q7Cis6cy9eLyZndDsgLyZsdDtDUiZndDsgbWFwICwiIDpzL14vXCIvJmx0O0NSJmd0OyBtYXAgLCUgOnMvXi8lLyZsdDtDUiZndDsKK21hcCAsISA6cy9eLyEvJmx0O0NSJmd0OyBtYXAgLDsgOnMvXi87LyZsdDtDUiZndDsgbWFwICwtIDpzL14vLS0vJmx0O0NSJmd0OworbWFwICxjIDpzL15cL1wvXFx8Xi0tXFx8XiZndDsgXFx8XlsjIiUhO10vLyZsdDtDUiZndDsKKworIiB3cmFwcGluZyBjb21tZW50cyBtYXAgLCogOnMvXlwoLipcKSQvXC9cKiBcMSBcKlwvLyZsdDtDUiZndDsgbWFwICwoCis6cy9eXCguKlwpJC9cKFwqIFwxIFwqXCkvJmx0O0NSJmd0OyBtYXAgLCZsdDsgOnMvXlwoLipcKSQvJmx0OyEtLQorXDEgLS0mZ3Q7LyZsdDtDUiZndDsgbWFwICxkIDpzL15cKFsvKF1cKlxcfCZsdDshLS1cKSBcKC4qXCkKK1woXCpbLyldXFx8LS0mZ3Q7XCkkL1wyLyZsdDtDUiZndDsKKworVGhlIGNvbW1hbmRzIHRvIGNvbW1lbnQgYSBzZWxlY3Rpb24gb2YgdGV4dCBhcmUgYXMgZm9sbG93cywgYmVnaW5pbmcgd2l0aAorYmVnaW5pbmctb2YtbGluZSBjb21tZW50czoKKworICAgICwjCSAgc2hlbGwsIHBlcmwsIGV0YyAsLwkgIGMrKyAsJmd0OyAgICBlbWFpbCBxdW90ZSAsIgkgIHZpbSAsJQorICAgIGxhdGV4LCBwcm9sb2cgLCEJICBhc3NlbWJseT8uLi4gYWRkIHNpbmdsZSAhICAsOyAgICAgIHNjaGVtZSAsLQorICAgIGRvbid0IHJlbWVtYmVyIHRoaXMgb25lLi4uIGFkZCAtLSAsYyAgICAgY2xlYXJzIGFueSBvZiB0aGUgcHJldmlvdXMKKyAgICBjb21tZW50cworCitIZXJlIGFyZSB0aGUgd3JhcHBpbmcgY29tbWVudHMsIGVhY2ggbGluZSB3cmFwcGVkIGluZGl2aWR1YWxseToKKworICAgICwqCSAgICBjICwoICAgICAgIFN0YW5kYXJkIE1MICwmbHQ7ICAgICAgaHRtbCAsZAkgICBjbGVhcnMgYW55IG9mCisgICAgdGhlIHdyYXBwaW5nIGNvbW1lbnRzCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmF1dG9tYXRpY2FseQorZm9ybWF0aW5nIHBhc3RlZCB0ZXh0IChwPWBdKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjcyPC9BPjxCUj4KKworSW4gdGltZXMgcGFzdCBJIHVzZWQgYSBuaWNlIGVkaXRvciB0aGF0IGhhZCB0aGUgbmVhdCBmZWF0dXJlIG9mIGF1dG9tYXRpY2FsbHkKK3NldHRpbmcgcGFzdGVkIHRleHQgdG8gdGhlIHByb3BlciBpbmRlbnQgbGV2ZWwuIFJlY2VudGx5IEkndmUgYmVndW4gdG8gbWlzcwordGhpcyBzbyBJIHdlbnQgbG9va2luZyBpbiB0aGUgaGVscCBhbmQgY2FtcCB1cCB3aXRoLi4uLgorCis9YF0KKword2hpY2ggd2lsbCBmb3JtYXQgdG8gdGhlIGVuZCBvZiB0aGUgcGFzdGVkIHRleHQuLi4gUGVyZmVjdCB0byBjYWxsIHJpZ2h0CithZnRlciB5b3UgcGFzdCBzb21ldGhpbmcgYXMgdGhlIGN1cnNvciBlbmRzIHVwIGF0IHRoZSB0b3Agb2YgdGhlIHBhc3RlZCB0ZXh0LAordGh1cyB0aGUgbWFwcGluZzoKKworOm1hcCAmbHQ7Yy1wJmd0OyA9YF0KKworIiBieSB0aGUgYnkgdGhlIGFib3ZlIG1heSBzaG91bGQgYmUgbm1hcCBhbmQgSSBhbSBwcmV0dHkgc3VyZSBjLXAgaXMgdW51c2VkLAoreW91ciBtaWxlYWdlIHdpbGwgdmFyeSBubyBkb3VidC4KKworSG93ZXZlciBJIHdhbnRlZCB0aGUgZm9ybWF0dGluZyB0byBhdXRvbWF0aWNhbGx5IGJlIGRvbmUgc28gaXQgd2FzIHR3byBzaW1wbGUKKyhvbmNlIEkgZmlndXJlZCBvdXQgaG93ISkgbm5vcmVtYXA6CisKKyIgW0ZlcmFsOjE4NS8wMkAxNDoyN10gbWFwIGMtcCB0byB3aGF0IHAgd2FzIChwYXN0IHdpdGggbm8gZm9ybWF0dGluZyksIG1hcAorcCB0byBwIGFuZCA9IHRvIGVuZCBvZiBwYXN0ZWQgdGV4dC4gIDpubm9yZW1hcCBwIHA9YF0gOm5ub3JlbWFwICZsdDtjLXAmZ3Q7IHAKKworVGhpcyBzaW1wbHkgKGFzIHRoZSBjb21tZW50IGhpbnRzIGF0KSBtYXBzIG5vcm1hbCBtb2RlIHAgdG8gd2hhdCBwIGRpZCAocGFzdGUpCit0aGVuID0gdG8gYF0gKGxhc3QgY2hhcmFjdGVyIGluIHRoZSBwcmV2aW91c2x5IGNoYW5nZWQgdGV4dCkuIFdoaWxlIGN0cmwrcAoranVzdCBkb2VzIHdoYXQgcCBkaWQuIChqdXN0IGluIGNhc2UgeW91IGZpbmQgeW91IGRvbid0IHdhbnQgYSBiaXQgb2YgdGV4dAorYXV0byBmb3JtYXR0ZWQuKS4KKworcmVmZXJlbmNlOiA6aCA6bm5vcmVtYXAgOmggcCA6aCA9IDpoIGBdCisKK1doYXRldmVyIHRoZSBuYW1lIG9mIHRoaXMgaWRlYSBpcywgdGlzIHNvbWV0aGluZyBJIGZpbmQgaGFuZHkgOikKKworSGFwcHkgVklNaW5nCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkZhc3QKK2ZpeGluZyBvZiBlbWFpbCBxdW90YXRpb25zICh0b28gbG9uZyBsaW5lcyk8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjczIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI3MzwvQT48QlI+CisKK1doZW4gdXNpbmcgVklNIGFzIHlvdXIgZWRpdG9yIG9mIGNob2ljZSwgZXZlbiBmb3IgZW1haWwgcHJvY2Vzc2luZyAtIGFzIEkKK2RvIC0gaXQgaXMgb2Z0ZW4gdW5wbGVhc2luZyBob3cgc29tZSBNVUEncyBxdW90ZSB0aGUgZW1haWwgYm9keSBwcm9kdWNlZCBieQorbWFpbGVycyBzdWNoIGFzIE91dGxvb2suIFRoZSBsaW5lcyBvZnRlbiBzcGFuIGFjcm9zcyBtdWx0aXBsZSB2aXN1YWwgbGluZXMKK2FuZCBpdHMgZGlmZmljdWx0IHRvIHJlcGx5IG9uIGNlcnRhaW4gcGFydHMgb2YgaXQuCisKK1dpdGggVklNLCB5b3UgY2FuIHF1aWNrbHkgZml4IHRob3NlIHF1b3RhdGlvbnMgdG8gbWFpbnRhaW4gYSBwcm9wZXIgNzUgY2hhcgorYnJlYWsuIEZvciBleGFtcGxlLCB3aGVuIHVzaW5nIE11dHQsIHB1dCB0aGlzIGxpbmUgaW4geW91ciAubXV0dHJjLCBvciB1c2UKK2EgY3VzdG9tIC52aW1yY19tYWlsIGZvciBpdDoKKworc2V0IGVkaXRvcj0idmltIC1jICdzZXQgZm89dGNycScgLWMgJ3NldCB0dz03NiciCisKK0ZvciBvdGhlciBNVUEncyB0aGlzIGhhcyB0byBiZSBmaXR0ZWQuIEhvd2V2ZXIsIG5vdywgd2hlbiB5b3VyIHF1b3RlZCBlbWFpbAoraXMgZGlzcGxheWVkLCB5b3UgY2FuIHVzZSB0aGlzIFZJTSBzZXF1ZW5jZSB0byBmaXggaXQ6CisKKzEuIG1vdmUgY3Vyc29yIHRvIGZpcnN0IGxpbmUgb2YgYnJva2VuIHBhcmFncmFwaCAyLiBwcmVzcyAnVicgYW5kIG1vdmUgdG8gdGhlCitsYXN0IGxpbmUgb2YgdGhlIHBhcmFncmFwaCB5b3Ugd2FudCB0byBmaXggMy4gcHJlc3MgJ2cnIGFuZCB0aGVuICdxJy4gVGhlCittYXJrZWQgdGV4dCB3aWxsIHdyYXAgYXJvdW5kIHRvIHlvdXIgc3BlY2lmaWVkIHRleHR3aWR0aCAoNzYgaW4gb3VyIGNhc2UpCithbmQgdGhlIHF1b3RhdGlvbnMgd2lsbCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBsaW5lcworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+U29tZSB1c2VmdWwgbWFwcGluZ3MgZm9yIFRlWDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjc0PC9BPjxCUj4KKworWW91IGtub3csIFRlWCByZXF1aXJlcyBhIGxvdCBvZiBhZGRpdGlvbmFsIGZvcm1hdHRpbmcgY29kZS4gSSdtIHRpcmVkIG9mCitvcGVuaW5nIGFuZCBjbG9zaW5nIGJyYWNlcywgYnJha2V0cywKKyBcYmVnaW5uaW5nIGFuZCBcZW5kaW5nIGV0Yy4gSSBwYXJ0aWN1bGFybHkgaGF0ZSB0eXBpbmcgXGJlZ2luIGFuZCBcZW5kLgorVG8gaGVscCBteXNlbGYgYW5kIHRvIHNhdmUgYSBmZXcobm90IGEgZmV3KSBrZXlzdHJva2VzIEkgbmF0dXJhbHkgY2FtZSB1cCB0bworc29tZSBzb2x1dGlvbnMsIHdoaWNoIEkgd2lzaCB0byBzaGFyZSB3aXRoIG90aGVyIFRlWG5pY2lhbnMgYW5kIFRlWHBlcnRzIHdoaGljaAordXNlIFZpbS4gICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Y3V0IGhlcmU9PT09PT09PT09PT09PT09PT09PT09PT09CisiPT09PT09PT09PT09PT09IHlvdSBjYW4gcHV0IGl0IGluIH4vLnZpbS9hZnRlci9mdHBsdWdpbi90ZXgudmltCis9PT09PT09PT09PT09PT0gIiAiIE5vdGU6IGlfJmx0O0MtTCZndDsgIiBUaGlzIGNvbnN0cnVjdHMgYSBza2VsZXRvbiBvZiBhIFRlWAorZW52aXJvbm1lbnQuICAiIFlvdSB3cml0ZSBhIGxpbmUgbGlrZSB0aGlzOiAiIGZsb2F0aW5nZmlndXJlOmh0Jmx0O0MtTCZndDsKKyIgYW5kIGFmdGVyIHlvdSBwcmVzcyAmbHQ7Qy1MJmd0OywgeW91IGdldDogIiAiIFxiZWdpbltodF17ZmxvYXRpbmdmaWd1cmV9CisiICIgXGVuZHtmbG9hdGluZ2ZpZ3VyZX0gIiAtLSBJTlNFUlQgLS0gIiAiIHdoZXJlIGZsb2F0aW5nZmlndXJlIGlzIHRoZQorZGVzaXJlZCBlbnZpcm9ubWVudCAiIGh0IGFyZSBvcHRpb25zICIgOiBpcyBkZWxpbWl0ZXI7IGluIGZhY3QsIHlvdSBjYW4KK3VzZSB3aGF0ZXZlciBkZWxpbWl0ZXIgeW91IHdhbnQgIiBhcyBsb25nIGl0IGlzIG5vdCBpbiAmaXNrZXl3b3JkIG9wdGlvbi4KK2lub3JlbWFwICZsdDtidWZmZXImZ3Q7ICZsdDtDLUwmZ3Q7IBsKKwkJCVw6cy9bXl1bOmFsbnVtOl0mbHQ7YmFyJmd0O11cKy8sL2VnCisJCQlcSVxiZWdpbnsbZWF9WxtBXRslZCUlUCBcOnMvXFssL1svZSBcOnMvLF0vXS9lCisJCQlcOnMvXFtdLy9lIFwwZnt5JW9cZW5kG3BPCitpbm9yZW1hcCAmbHQ7YnVmZmVyJmd0OyB7IHt9G2kgaW5vcmVtYXAgJmx0O2J1ZmZlciZndDsgWyBbXRtpIGlub3JlbWFwCismbHQ7YnVmZmVyJmd0OyBeIF57fRtpIGlub3JlbWFwICZsdDtidWZmZXImZ3Q7IF8gX3t9G2kgaW5vcmVtYXAgJmx0O2J1ZmZlciZndDsKK1woIFwoXCkbaGkgaW5vcmVtYXAgJmx0O2J1ZmZlciZndDsgXFsgXFtcXRtoaQorCisiIE5vdGU6IHZfJmx0O0MtTCZndDsgIiBGb3IgdGhpcyB0byB3b3JrLCB5b3UgaGF2ZSB0byB3cml0ZSBvbiBhIGJsYW5rCitsaW5lIHRoZSBuYW1lIG9mICIgdGhlIGRlc2lyZWQgZW52aXJvbm1lbnQgYW5kIG9wdGlvbnMgKHNlZSBpXyZsdDtDLUwmZ3Q7KQorYW5kIHZpc3VhbCBzZWxlY3QgIiAoZnJvbSB0b3AgdG8gYm90dG9tKSB0aGlzIGFuZCBmb2xsb3dpbmcgbGluZXMuICAiIEFmdGVyCitwcmVzc2luZyAmbHQ7Qy1MJmd0OyB0aGUgc2VsZWN0ZWQgbGluZXMgd2lsbCBiZSBzdXJyb3VuZGVkICIgd2l0aCBiZWdpbi9lbmQKK3NrZWxldG9uIG9mIHRoZSBlbnZpcm9ubWVudC4gIHZub3JlbWFwICZsdDtidWZmZXImZ3Q7ICZsdDtDLUwmZ3Q7IG8bCisJCQlcOnMvW15dWzphbG51bTpdJmx0O2JhciZndDtdXCsvLC9lZworCQkJXElcYmVnaW57G2VhfVsbQV0bJWQlJVAgXDpzL1xbLC9bL2UgXDpzLyxdL10vZQorCQkJXDpzL1xbXS8vZSBcMGZ7eSVndm8bb1xlbmQbcAorIgl2bm9yZW1hcCAmbHQ7YnVmZmVyJmd0OyB7IGRpe30bUCAiCSB2bm9yZW1hcCAmbHQ7YnVmZmVyJmd0OworWyBkaVtdG1Agdm5vcmVtYXAgJmx0O2J1ZmZlciZndDsgHiBkaV57fRtQIHZub3JlbWFwICZsdDtidWZmZXImZ3Q7IB8gZGlfe30bUAordm5vcmVtYXAgJmx0O2J1ZmZlciZndDsgXCggZGlcKFwpG2hQIHZub3JlbWFwICZsdDtidWZmZXImZ3Q7IFxbIGRpXFtcXRtoUAorCisiIFRoaXMgbWFrZXMgInR3byBzcGFjZXMgYWZ0ZXIgYSBjb21tYSIgYmVmb3JlIGV2ZXJ5IDp3cml0ZSBhdSBCdWZXcml0ZVByZQorKi50ZXggJXMvLFwoXFNcKS8sIFwxL2dlCisKKyI9PT09PT09PT09PT09PT09PT09PSBZb3UgY2FuIHB1dCB0aGlzIGluIHlvdXIgfi8udmltcmMKKz09PT09PT09PT09PT09PT09PT09PT09PSAiIElmIGN1cnNvciBpcyBpbnNpZGUgYnJhY2VzIGFuZCBub3QgYmVmb3JlIGNvbW1hLAorYmxhbmsgb3Igb3BlbmluZyBicmFjZSwgIiBleGl0IHRoZSBicmFjZSBibG9jayBhbmQgc3RheSBpbiBpbnNlcnQgbW9kZS4gICIKK0lmIGN1cnNvciBpcyBvdXRzaWRlIGJyYWNlcywgaXQgaW5zZXJ0cyBhIHNwYWNlIG9yIHBlcmZvcm0gYW4gYWJicmV2aWF0aW9uCisiIGFzIG5vcm1hbC4gIGZ1bmN0aW9uISBDbGV2ZXJTcGFjZSgpCisJbGV0IENoYXJPbkN1cnNvciA9IHN0cnBhcnQoIGdldGxpbmUoJy4nKSwgY29sKCcuJyktMiwgMSkgbGV0CisJQ2hhckFmdGVyQ3Vyc29yID0gc3RycGFydCggZ2V0bGluZSgnLicpLCBjb2woJy4nKSwgMSkgaWYgQ2hhck9uQ3Vyc29yCisJIX4gJyxcfFxzXHwoJyAmJiBDaGFyQWZ0ZXJDdXJzb3IgPX4gJylcfF1cfH0nCisJCW5vcm1hbCB4CisJZW5kaWYKK2VuZGZ1bmN0aW9uIGlub3JlbWFwICZsdDtTcGFjZSZndDsgJmx0O1NwYWNlJmd0Oxs6Y2FsbCBDbGV2ZXJTcGFjZSgpJmx0O0xGJmd0O2EKKworIiBJIHVzZSB0aGUgbGFzdCBmdW5jdGlvbiBub3Qgb25seSBmb3IgTGFUZVggYnV0IGFsc28gaW4gQyBzb3VyY2VzLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+U29tZSB1c2VmdWwgbWFwcGluZ3MgZm9yIFRlWDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjc1PC9BPjxCUj4KKworWW91IGtub3csIFRlWCByZXF1aXJlcyBhIGxvdCBvZiBhZGRpdGlvbmFsIGZvcm1hdHRpbmcgY29kZS4gSSdtIHRpcmVkIG9mCitvcGVuaW5nIGFuZCBjbG9zaW5nIGJyYWNlcywgYnJha2V0cywKKyBcYmVnaW5uaW5nIGFuZCBcZW5kaW5nIGV0Yy4gSSBwYXJ0aWN1bGFybHkgaGF0ZSB0eXBpbmcgXGJlZ2luIGFuZCBcZW5kLgorVG8gaGVscCBteXNlbGYgYW5kIHRvIHNhdmUgYSBmZXcobm90IGEgZmV3KSBrZXlzdHJva2VzIEkgbmF0dXJhbHkgY2FtZSB1cCB0bworc29tZSBzb2x1dGlvbnMsIHdoaWNoIEkgd2lzaCB0byBzaGFyZSB3aXRoIG90aGVyIFRlWG5pY2lhbnMgYW5kIFRlWHBlcnRzIHdoaGljaAordXNlIFZpbS4gICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Y3V0IGhlcmU9PT09PT09PT09PT09PT09PT09PT09PT09CisiPT09PT09PT09PT09PT09IHlvdSBjYW4gcHV0IGl0IGluIH4vLnZpbS9hZnRlci9mdHBsdWdpbi90ZXgudmltCis9PT09PT09PT09PT09PT0gIiAiIE5vdGU6IGlfJmx0O0MtTCZndDsgIiBUaGlzIGNvbnN0cnVjdHMgYSBza2VsZXRvbiBvZiBhIFRlWAorZW52aXJvbm1lbnQuICAiIFlvdSB3cml0ZSBhIGxpbmUgbGlrZSB0aGlzOiAiIGZsb2F0aW5nZmlndXJlOmh0Jmx0O0MtTCZndDsKKyIgYW5kIGFmdGVyIHlvdSBwcmVzcyAmbHQ7Qy1MJmd0OywgeW91IGdldDogIiAiIFxiZWdpbltodF17ZmxvYXRpbmdmaWd1cmV9CisiICIgXGVuZHtmbG9hdGluZ2ZpZ3VyZX0gIiAtLSBJTlNFUlQgLS0gIiAiIHdoZXJlIGZsb2F0aW5nZmlndXJlIGlzIHRoZQorZGVzaXJlZCBlbnZpcm9ubWVudCAiIGh0IGFyZSBvcHRpb25zICIgOiBpcyBkZWxpbWl0ZXI7IGluIGZhY3QsIHlvdSBjYW4KK3VzZSB3aGF0ZXZlciBkZWxpbWl0ZXIgeW91IHdhbnQgIiBhcyBsb25nIGl0IGlzIG5vdCBpbiAmaXNrZXl3b3JkIG9wdGlvbi4KK2lub3JlbWFwICZsdDtidWZmZXImZ3Q7ICZsdDtDLUwmZ3Q7IBsKKwkJCVw6cy9bXl1bOmFsbnVtOl0mbHQ7YmFyJmd0O11cKy8sL2VnCisJCQlcSVxiZWdpbnsbZWF9WxtBXRslZCUlUCBcOnMvXFssL1svZSBcOnMvLF0vXS9lCisJCQlcOnMvXFtdLy9lIFwwZnt5JW9cZW5kG3BPCitpbm9yZW1hcCAmbHQ7YnVmZmVyJmd0OyB7IHt9G2kgaW5vcmVtYXAgJmx0O2J1ZmZlciZndDsgWyBbXRtpIGlub3JlbWFwCismbHQ7YnVmZmVyJmd0OyBeIF57fRtpIGlub3JlbWFwICZsdDtidWZmZXImZ3Q7IF8gX3t9G2kgaW5vcmVtYXAgJmx0O2J1ZmZlciZndDsKK1woIFwoXCkbaGkgaW5vcmVtYXAgJmx0O2J1ZmZlciZndDsgXFsgXFtcXRtoaQorCisiIE5vdGU6IHZfJmx0O0MtTCZndDsgIiBGb3IgdGhpcyB0byB3b3JrLCB5b3UgaGF2ZSB0byB3cml0ZSBvbiBhIGJsYW5rCitsaW5lIHRoZSBuYW1lIG9mICIgdGhlIGRlc2lyZWQgZW52aXJvbm1lbnQgYW5kIG9wdGlvbnMgKHNlZSBpXyZsdDtDLUwmZ3Q7KQorYW5kIHZpc3VhbCBzZWxlY3QgIiAoZnJvbSB0b3AgdG8gYm90dG9tKSB0aGlzIGFuZCBmb2xsb3dpbmcgbGluZXMuICAiIEFmdGVyCitwcmVzc2luZyAmbHQ7Qy1MJmd0OyB0aGUgc2VsZWN0ZWQgbGluZXMgd2lsbCBiZSBzdXJyb3VuZGVkICIgd2l0aCBiZWdpbi9lbmQKK3NrZWxldG9uIG9mIHRoZSBlbnZpcm9ubWVudC4gIHZub3JlbWFwICZsdDtidWZmZXImZ3Q7ICZsdDtDLUwmZ3Q7IG8bCisJCQlcOnMvW15dWzphbG51bTpdJmx0O2JhciZndDtdXCsvLC9lZworCQkJXElcYmVnaW57G2VhfVsbQV0bJWQlJVAgXDpzL1xbLC9bL2UgXDpzLyxdL10vZQorCQkJXDpzL1xbXS8vZSBcMGZ7eSVndm8bb1xlbmQbcAorIgl2bm9yZW1hcCAmbHQ7YnVmZmVyJmd0OyB7IGRpe30bUCAiCSB2bm9yZW1hcCAmbHQ7YnVmZmVyJmd0OworWyBkaVtdG1Agdm5vcmVtYXAgJmx0O2J1ZmZlciZndDsgHiBkaV57fRtQIHZub3JlbWFwICZsdDtidWZmZXImZ3Q7IB8gZGlfe30bUAordm5vcmVtYXAgJmx0O2J1ZmZlciZndDsgXCggZGlcKFwpG2hQIHZub3JlbWFwICZsdDtidWZmZXImZ3Q7IFxbIGRpXFtcXRtoUAorCisiIFRoaXMgbWFrZXMgInR3byBzcGFjZXMgYWZ0ZXIgYSBjb21tYSIgYmVmb3JlIGV2ZXJ5IDp3cml0ZSBhdSBCdWZXcml0ZVByZQorKi50ZXggJXMvLFwoXFNcKS8sIFwxL2dlCisKKyI9PT09PT09PT09PT09PT09PT09PSBZb3UgY2FuIHB1dCB0aGlzIGluIHlvdXIgfi8udmltcmMKKz09PT09PT09PT09PT09PT09PT09PT09PSAiIElmIGN1cnNvciBpcyBpbnNpZGUgYnJhY2VzIGFuZCBub3QgYmVmb3JlIGNvbW1hLAorYmxhbmsgb3Igb3BlbmluZyBicmFjZSwgIiBleGl0IHRoZSBicmFjZSBibG9jayBhbmQgc3RheSBpbiBpbnNlcnQgbW9kZS4gICIKK0lmIGN1cnNvciBpcyBvdXRzaWRlIGJyYWNlcywgaXQgaW5zZXJ0cyBhIHNwYWNlIG9yIHBlcmZvcm0gYW4gYWJicmV2aWF0aW9uCisiIGFzIG5vcm1hbC4gIGZ1bmN0aW9uISBDbGV2ZXJTcGFjZSgpCisJbGV0IENoYXJPbkN1cnNvciA9IHN0cnBhcnQoIGdldGxpbmUoJy4nKSwgY29sKCcuJyktMiwgMSkgbGV0CisJQ2hhckFmdGVyQ3Vyc29yID0gc3RycGFydCggZ2V0bGluZSgnLicpLCBjb2woJy4nKSwgMSkgaWYgQ2hhck9uQ3Vyc29yCisJIX4gJyxcfFxzXHwoJyAmJiBDaGFyQWZ0ZXJDdXJzb3IgPX4gJylcfF1cfH0nCisJCW5vcm1hbCB4CisJZW5kaWYKK2VuZGZ1bmN0aW9uIGlub3JlbWFwICZsdDtTcGFjZSZndDsgJmx0O1NwYWNlJmd0Oxs6Y2FsbCBDbGV2ZXJTcGFjZSgpJmx0O0xGJmd0O2EKKworIiBJIHVzZSB0aGUgbGFzdCBmdW5jdGlvbiBub3Qgb25seSBmb3IgTGFUZVggYnV0IGFsc28gaW4gQyBzb3VyY2VzLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+RnVuY3Rpb24gc2lnbmF0dXJlIHByZXZpZXdlcjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzYiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjc2PC9BPjxCUj4KKworSGF2ZSB5b3UgZXZlciB0cmllZCB0byBjYWxsIGEgZnVuY3Rpb24gd2hpY2ggcGFyYW1ldGVycyB5b3UgaGF2ZSBmb3Jnb3R0ZW4/CitFc3BlY2lhbGx5IHRob3NlIGxvbmcgbmFtZWQgYW5kIHdpdGggbG9uZyBwYXJhbWV0ZXIgbGlzdCBHVEsrIGZ1bmN0aW9ucworbGlrZSBndGtfbWVudV9pdGVtX2ltYWdlX2Zyb21fc3RvY2tfbmV3KC4uLi4uLi4uLi4pICEhISAgQnkgYWNjaWRlbnQgSSBzYXcgYQorZnVuY3Rpb24gaW4gVmltIGhlbHAuIEl0J3MgbmFtZSB3YXMgUHJldmlld1dvcmQgYW5kIGl0IGFsbG93ZWQgb25lIHRvIGp1bXAKK2luIHRoZSBwcmV2aWV3IHdpbmRvdyB0byB0aGUgdGFnIGZvciB0aGUgd29yZCBjdXJzb3IgaXMgb24uICBJIF9zbGlnaHRseV8KK21vZGlmaWVkIHRoaXMgZnVuY3Rpb24gbm90IHRvIG5lZWQgdGFncyBmaWxlLCBidXQgdG8gc2VhcmNoIGluY2x1ZGVkIGZpbGVzCitpbnN0ZWFkLiAgSSB3cm90ZSBhbm90aGVyIGZ1bmN0aW9uLCB3aGljaCB1c2VzIHRoZSBhYm92ZSBzYWlkIG9uZSwgd2hpY2gKK3RyaWdnZXJzIFByZXZpZXdXb3JkIHdoZW4geW91IG9wZW4gdGhlIHBhcmVudGhlc2lzIGFmdGVyIGEgZnVuY3Rpb24gbmFtZS4KK0hlcmUgaXQgaXM6ICIgTm90ZTogIiBUaGlzIGlzIGxpdGVyYWxseSBzdG9sZW4gZnJvbSBWaW0gaGVscC4gVGhlIG9ubHkKK2NoYW5nZXMgYXJlOiAiICgxKSBpZiB3ICE9ICIiCQkgICAgYmVjb21lcwkgIGlmIHcgPX4gIlxrIiAiCisoMikgZXhlICJzaWxlbnQhIHB0YWcgIiAuIHcgIGJlY29tZXMJICAgZXhlICJzaWxlbnQhIHBzZWFyY2ggIiAuIHcgIiAqCitUaGUgZmlyc3QgY2hhbmdlIHByZXZlbnRzIFByZXZpZXdXb3JkIG9mIHNlYXJjaGluZyB3aGlsZSBjdXJzb3IgaXMgb24gc29tZSAiCitub24ta2V5d29yZCBjaGFyYWN0ZXJzLCBlLmcuIGJyYWNlcywgYXN0ZXJpc2tzLCBldGMuICBmdW5jdGlvbiEgUHJldmlld1dvcmQoKQorCWlmICZwcmV2aWV3d2luZG93CQkJIiBkb24ndCBkbyB0aGlzIGluIHRoZQorCXByZXZpZXcgd2luZG93CisJCXJldHVybgorCWVuZGlmIGxldCB3ID0gZXhwYW5kKCImbHQ7Y3dvcmQmZ3Q7IikJICAgICAgIiBnZXQgdGhlIHdvcmQgdW5kZXIKKwljdXJzb3IgaWYgdyA9fiAiXGsiCQkJICAgICAgICIgaWYgdGhlcmUgaXMgb25lCisJIjpwdGFnIiB0byBpdAorCisJCSIgRGVsZXRlIGFueSBleGlzdGluZyBoaWdobGlnaHQgYmVmb3JlIHNob3dpbmcgYW5vdGhlciB0YWcKKwkJc2lsZW50ISB3aW5jbWQgUAkJCSIganVtcCB0byBwcmV2aWV3CisJCXdpbmRvdyBpZiAmcHJldmlld3dpbmRvdwkJICAgICAgICIgaWYgd2UgcmVhbGx5CisJCWdldCB0aGVyZS4uLgorCQkJbWF0Y2ggbm9uZQkJCSIgZGVsZXRlIGV4aXN0aW5nCisJCQloaWdobGlnaHQgd2luY21kIHAJCQkgICIgYmFjayB0bworCQkJb2xkIHdpbmRvdworCQllbmRpZgorCisJCSIgVHJ5IGRpc3BsYXlpbmcgYSBtYXRjaGluZyB0YWcgZm9yIHRoZSB3b3JkIHVuZGVyIHRoZSBjdXJzb3IKKwkJbGV0IHY6ZXJybXNnID0gIiIgZXhlICJzaWxlbnQhIHBzZWFyY2ggIiAuIHcgaWYgdjplcnJtc2cgPX4KKwkJInRhZyBub3QgZm91bmQiCisJCQlyZXR1cm4KKwkJZW5kaWYKKworCQlzaWxlbnQhIHdpbmNtZCBQCQkJIiBqdW1wIHRvIHByZXZpZXcKKwkJd2luZG93IGlmICZwcmV2aWV3d2luZG93CSAgICAgICAiIGlmIHdlIHJlYWxseSBnZXQKKwkJdGhlcmUuLi4KKwkJCWlmIGhhcygiZm9sZGluZyIpCisJCQkJc2lsZW50ISAuZm9sZG9wZW4JCSIgZG9uJ3Qgd2FudAorCQkJCWEgY2xvc2VkIGZvbGQKKwkJCWVuZGlmIGNhbGwgc2VhcmNoKCIkIiwgImIiKQkgICAgICAiIHRvIGVuZCBvZgorCQkJcHJldmlvdXMgbGluZSBsZXQgdyA9IHN1YnN0aXR1dGUodywgJ1xcJywgJ1xcXFwnLAorCQkJIiIpIGNhbGwgc2VhcmNoKCdcJmx0O1xWJyAuIHcgLiAnXCZndDsnKSAgICAiCisJCQlwb3NpdGlvbiBjdXJzb3Igb24gbWF0Y2ggIiBBZGQgYSBtYXRjaCBoaWdobGlnaHQgdG8KKwkJCXRoZSB3b3JkIGF0IHRoaXMgcG9zaXRpb24gaGkgcHJldmlld1dvcmQgdGVybT1ib2xkCisJCQljdGVybWJnPWdyZWVuIGd1aWJnPWdyZWVuIGV4ZSAnbWF0Y2ggcHJldmlld1dvcmQgIlwlJworCQkJLiBsaW5lKCIuIikgLiAnbFwlJyAuIGNvbCgiLiIpIC4gJ2NcayoiJyB3aW5jbWQgcAorCQkJIiBiYWNrIHRvIG9sZCB3aW5kb3cKKwkJZW5kaWYKKwllbmRpZgorZW5kZnVuY3Rpb24gYXUhIEN1cnNvckhvbGQgKi5bY2hdIG5lc3RlZCBjYWxsIFByZXZpZXdXb3JkKCkKKworIiBOb3RlOiAiIFdoZW4geW91IG9wZW4gYSBwYXJlbnRoZXNpcyBhZnRlciBhIGZ1bmN0aW9uIG5hbWUsIGFuZAorYXQgdGhlICIgbGluZSBlbmQsIHRoYXQgZnVuY3Rpb24ncyBkZWZpbml0aW9uIGlzIHByZXZpZXdlZCB0aHJvdWdoCitQcmV2aWV3V29yZCgpLgkiIFRoaXMgaXMgaW5zcGlyZWQgZnJvbSBEZWxwaGkncyBDb2RlSW5zaWdodCB0ZWNobm9sb2d5LgorIiBTb21ldGhpbmcgc2ltaWxhciAoUHJldmlld0NsYXNzTWVtYmVycykgY291bGQgYmUgd3JpdHRlbiBmb3IgIiB0aGUgQysrCit1c2VycywgZm9yIHByZXZpZXdpbmcgdGhlIGNsYXNzIG1lbWJlcnMgd2hlbiB5b3UgdHlwZSAiIGEgZG90IGFmdGVyIGFuCitvYmplY3QgbmFtZS4gICIgSWYgc29tZWJvZHkgZGVjaWRlcyB0byB3cml0ZSBpdCwgcGxlYXNlLCBtYWlsIGl0IHRvIG1lLgorZnVuY3Rpb24hIFByZXZpZXdGdW5jdGlvblNpZ25hdHVyZSgpCisJbGV0IENoYXJPbkN1cnNvciA9IHN0cnBhcnQoIGdldGxpbmUoJy4nKSwgY29sKCcuJyktMiwgMSkgaWYgY29sKCIuIikgPT0KKwljb2woIiQiKQorCQljYWxsIFByZXZpZXdXb3JkKCkKKwllbmRpZiByZXR1cm4gIigiCitlbmRmdW5jdGlvbiBpbm9yZW1hcCAmbHQ7YnVmZmVyJmd0OyAoCismbHQ7Qy1SJmd0Oz1QcmV2aWV3RnVuY3Rpb25TaWduYXR1cmUoKSZsdDtMRiZndDsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkZ1bmN0aW9uIHNpZ25hdHVyZSBwcmV2aWV3ZXI8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjc3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI3NzwvQT48QlI+CisKK0hhdmUgeW91IGV2ZXIgdHJpZWQgdG8gY2FsbCBhIGZ1bmN0aW9uIHdoaWNoIHBhcmFtZXRlcnMgeW91IGhhdmUgZm9yZ290dGVuPworRXNwZWNpYWxseSB0aG9zZSBsb25nIG5hbWVkIGFuZCB3aXRoIGxvbmcgcGFyYW1ldGVyIGxpc3QgR1RLKyBmdW5jdGlvbnMKK2xpa2UgZ3RrX21lbnVfaXRlbV9pbWFnZV9mcm9tX3N0b2NrX25ldyguLi4uLi4uLi4uKSAhISEgIEJ5IGFjY2lkZW50IEkgc2F3IGEKK2Z1bmN0aW9uIGluIFZpbSBoZWxwLiBJdCdzIG5hbWUgd2FzIFByZXZpZXdXb3JkIGFuZCBpdCBhbGxvd2VkIG9uZSB0byBqdW1wCitpbiB0aGUgcHJldmlldyB3aW5kb3cgdG8gdGhlIHRhZyBmb3IgdGhlIHdvcmQgY3Vyc29yIGlzIG9uLiAgSSBfc2xpZ2h0bHlfCittb2RpZmllZCB0aGlzIGZ1bmN0aW9uIG5vdCB0byBuZWVkIHRhZ3MgZmlsZSwgYnV0IHRvIHNlYXJjaCBpbmNsdWRlZCBmaWxlcworaW5zdGVhZC4gIEkgd3JvdGUgYW5vdGhlciBmdW5jdGlvbiwgd2hpY2ggdXNlcyB0aGUgYWJvdmUgc2FpZCBvbmUsIHdoaWNoCit0cmlnZ2VycyBQcmV2aWV3V29yZCB3aGVuIHlvdSBvcGVuIHRoZSBwYXJlbnRoZXNpcyBhZnRlciBhIGZ1bmN0aW9uIG5hbWUuCitIZXJlIGl0IGlzOiAiIE5vdGU6ICIgVGhpcyBpcyBsaXRlcmFsbHkgc3RvbGVuIGZyb20gVmltIGhlbHAuIFRoZSBvbmx5CitjaGFuZ2VzIGFyZTogIiAoMSkgaWYgdyAhPSAiIgkJICAgIGJlY29tZXMJICBpZiB3ID1+ICJcayIgIgorKDIpIGV4ZSAic2lsZW50ISBwdGFnICIgLiB3ICBiZWNvbWVzCSAgIGV4ZSAic2lsZW50ISBwc2VhcmNoICIgLiB3ICIgKgorVGhlIGZpcnN0IGNoYW5nZSBwcmV2ZW50cyBQcmV2aWV3V29yZCBvZiBzZWFyY2hpbmcgd2hpbGUgY3Vyc29yIGlzIG9uIHNvbWUgIgorbm9uLWtleXdvcmQgY2hhcmFjdGVycywgZS5nLiBicmFjZXMsIGFzdGVyaXNrcywgZXRjLiAgZnVuY3Rpb24hIFByZXZpZXdXb3JkKCkKKwlpZiAmcHJldmlld3dpbmRvdwkJCSIgZG9uJ3QgZG8gdGhpcyBpbiB0aGUKKwlwcmV2aWV3IHdpbmRvdworCQlyZXR1cm4KKwllbmRpZiBsZXQgdyA9IGV4cGFuZCgiJmx0O2N3b3JkJmd0OyIpCSAgICAgICIgZ2V0IHRoZSB3b3JkIHVuZGVyCisJY3Vyc29yIGlmIHcgPX4gIlxrIgkJCSAgICAgICAiIGlmIHRoZXJlIGlzIG9uZQorCSI6cHRhZyIgdG8gaXQKKworCQkiIERlbGV0ZSBhbnkgZXhpc3RpbmcgaGlnaGxpZ2h0IGJlZm9yZSBzaG93aW5nIGFub3RoZXIgdGFnCisJCXNpbGVudCEgd2luY21kIFAJCQkiIGp1bXAgdG8gcHJldmlldworCQl3aW5kb3cgaWYgJnByZXZpZXd3aW5kb3cJCSAgICAgICAiIGlmIHdlIHJlYWxseQorCQlnZXQgdGhlcmUuLi4KKwkJCW1hdGNoIG5vbmUJCQkiIGRlbGV0ZSBleGlzdGluZworCQkJaGlnaGxpZ2h0IHdpbmNtZCBwCQkJICAiIGJhY2sgdG8KKwkJCW9sZCB3aW5kb3cKKwkJZW5kaWYKKworCQkiIFRyeSBkaXNwbGF5aW5nIGEgbWF0Y2hpbmcgdGFnIGZvciB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yCisJCWxldCB2OmVycm1zZyA9ICIiIGV4ZSAic2lsZW50ISBwc2VhcmNoICIgLiB3IGlmIHY6ZXJybXNnID1+CisJCSJ0YWcgbm90IGZvdW5kIgorCQkJcmV0dXJuCisJCWVuZGlmCisKKwkJc2lsZW50ISB3aW5jbWQgUAkJCSIganVtcCB0byBwcmV2aWV3CisJCXdpbmRvdyBpZiAmcHJldmlld3dpbmRvdwkgICAgICAgIiBpZiB3ZSByZWFsbHkgZ2V0CisJCXRoZXJlLi4uCisJCQlpZiBoYXMoImZvbGRpbmciKQorCQkJCXNpbGVudCEgLmZvbGRvcGVuCQkiIGRvbid0IHdhbnQKKwkJCQlhIGNsb3NlZCBmb2xkCisJCQllbmRpZiBjYWxsIHNlYXJjaCgiJCIsICJiIikJICAgICAgIiB0byBlbmQgb2YKKwkJCXByZXZpb3VzIGxpbmUgbGV0IHcgPSBzdWJzdGl0dXRlKHcsICdcXCcsICdcXFxcJywKKwkJCSIiKSBjYWxsIHNlYXJjaCgnXCZsdDtcVicgLiB3IC4gJ1wmZ3Q7JykgICAgIgorCQkJcG9zaXRpb24gY3Vyc29yIG9uIG1hdGNoICIgQWRkIGEgbWF0Y2ggaGlnaGxpZ2h0IHRvCisJCQl0aGUgd29yZCBhdCB0aGlzIHBvc2l0aW9uIGhpIHByZXZpZXdXb3JkIHRlcm09Ym9sZAorCQkJY3Rlcm1iZz1ncmVlbiBndWliZz1ncmVlbiBleGUgJ21hdGNoIHByZXZpZXdXb3JkICJcJScKKwkJCS4gbGluZSgiLiIpIC4gJ2xcJScgLiBjb2woIi4iKSAuICdjXGsqIicgd2luY21kIHAKKwkJCSIgYmFjayB0byBvbGQgd2luZG93CisJCWVuZGlmCisJZW5kaWYKK2VuZGZ1bmN0aW9uIGF1ISBDdXJzb3JIb2xkICouW2NoXSBuZXN0ZWQgY2FsbCBQcmV2aWV3V29yZCgpCisKKyIgTm90ZTogIiBXaGVuIHlvdSBvcGVuIGEgcGFyZW50aGVzaXMgYWZ0ZXIgYSBmdW5jdGlvbiBuYW1lLCBhbmQKK2F0IHRoZSAiIGxpbmUgZW5kLCB0aGF0IGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBpcyBwcmV2aWV3ZWQgdGhyb3VnaAorUHJldmlld1dvcmQoKS4JIiBUaGlzIGlzIGluc3BpcmVkIGZyb20gRGVscGhpJ3MgQ29kZUluc2lnaHQgdGVjaG5vbG9neS4KKyIgU29tZXRoaW5nIHNpbWlsYXIgKFByZXZpZXdDbGFzc01lbWJlcnMpIGNvdWxkIGJlIHdyaXR0ZW4gZm9yICIgdGhlIEMrKwordXNlcnMsIGZvciBwcmV2aWV3aW5nIHRoZSBjbGFzcyBtZW1iZXJzIHdoZW4geW91IHR5cGUgIiBhIGRvdCBhZnRlciBhbgorb2JqZWN0IG5hbWUuICAiIElmIHNvbWVib2R5IGRlY2lkZXMgdG8gd3JpdGUgaXQsIHBsZWFzZSwgbWFpbCBpdCB0byBtZS4KK2Z1bmN0aW9uISBQcmV2aWV3RnVuY3Rpb25TaWduYXR1cmUoKQorCWxldCBDaGFyT25DdXJzb3IgPSBzdHJwYXJ0KCBnZXRsaW5lKCcuJyksIGNvbCgnLicpLTIsIDEpIGlmIGNvbCgiLiIpID09CisJY29sKCIkIikKKwkJY2FsbCBQcmV2aWV3V29yZCgpCisJZW5kaWYgcmV0dXJuICIoIgorZW5kZnVuY3Rpb24gaW5vcmVtYXAgJmx0O2J1ZmZlciZndDsgKAorJmx0O0MtUiZndDs9UHJldmlld0Z1bmN0aW9uU2lnbmF0dXJlKCkmbHQ7TEYmZ3Q7CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5hbGwgdGhlIHJpZ2h0IG1vdmVzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI3OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yNzg8L0E+PEJSPgorCitPbmUgb2YgdGhlIHByaW5jaXBsZXMgb2YgZWZmZWN0aXZlIHRleHQgZWRpdGluZyBpcyBtb3ZpbmcgYXJvdW5kIHZlcnkKK2VmZmljaWVudGx5LiAgRm9sbG93aW5nIGFyZSBzb21lIHBvaW50ZXJzIHdoaWNoIG1heSBoZWxwIHUgZG8gdGhhdC4KKworICAgIGgJICAgbW92ZSBvbmUgY2hhcmFjdGVyIGxlZnQgagkgICBtb3ZlIG9uZSByb3cgZG93bgorICAgawkgICBtb3ZlIG9uZSByb3cgdXAgbAkgICAgIG1vdmUgb25lIGNoYXIuIHJpZ2h0LiAgdwkgICAgbW92ZQorICAgdG8gYmVnaW5pbmcgb2YgbmV4dCB3b3JkIGIJICAgIG1vdmUgdG8gYmVnaW5pbmcgb2YgcHJldmlvdXMgd29yZAorICAgZQkgICBtb3ZlIHRvIGVuZCBvZiB3b3JkIFcgICAgIG1vdmUgdG8gYmVnaW5pbmcgb2YgbmV4dCB3b3JkIGFmdGVyIGEKKyAgIHdoaXRlc3BhY2UgQiAgICAgIG1vdmUgdG8gYmVnaW5pbmcgb2YgcGVydmlvdXMgd29yZCBiZWZvcmUgYSB3aGl0ZXNwYWNlCisgICBFCSAgbW92ZSB0byBlbmQgb2Ygd29yZCBiZWZvcmUgYSB3aGl0ZXNwYWNlLgorCisoQWxsIHRoZSBhYm92ZSBtb3ZlbWVudHMgY2FuIGJlIHByZWNlZWRlZCBieSBhIG51bWVyaWMgdmFsdWUgLiBpLmUgICc0aicKK3dpbGwgbW92ZSA0IHJvd3MgZG93biApCisKKyAgIF4JICAgIG1vdmUgdG8gZmlyc3Qgbm9uIGJsYW5rIGNoYXIgb2YgdGhlIGxpbmUuICBnXyAgICAgIG1vdmUgdG8gbGFzdCBub24KKyAgIGJsYW5rIGNoYXIgb2YgdGhlIGxpbmUuICAwCSAgICAgbW9ldiB0byBiZWdpbmluZyBvZiBsaW5lICQgICAgICAgIG1vdmUKKyAgIHRvIGVuZCBvZiBsaW5lLiAgZ2cJICAgIG1vdmUgdG8gZmlyc3QgbGluZS4gIEcJICBtb3ZlIHRvIGxhc3QgbGluZS4KKyAgIG5HCSAgIG1vdmUgdG8gIm4idGggbGluZS4JSAkgdG9wIG9mIHNjcmVlbi4KKyAgTQkgICAgbWlkZGxlIG9mIHNjcmVlbgorICAgTAkgICAgYm90dG9tIG9mIHNjcmVlbgorICAgIEN0cmwtRCAgIG1vdmUgaGFsZiBwYWdlIGRvd24gQ3RybC1VICAgbW92ZSBoYWxmIHBhZ2UgdXAuICBDdHJsLUIgICBwYWdlLXVwCisgICAgQ3RybC1GICAgcGFnZSBkb3duLgorCisgICAgIEN0cmwtbyAgbGFzdCBjdXJzb3IgcG9zaXRpb24uICAnW2EteiwwLTksQS1aXSAgICBqdW1wIHRvIHRoZSBtYXJrZXIuICh1CisgICAgIGNhbiBzZXQgYSBtYXJrZXIgb24gbGluZSBieSA6LSAgIG1bYS16QS1aLDAtOV0gYW5kIHRoZW4ganVtcCBiYWNrIHRvCisgICAgIGl0IGJ5ICdbYS16LEEtWjAtOV0KKworICAgICAgbiAgIG5leHQgbWF0Y2hpbmcgc2VhcmNoIHBhdHRlcm4gTiAgcHJldmlvdXMgbWF0Y2hpbmcgc2VhcmNoIHBhdHRlcm4gKgorICAgICAgbmV4dCB3b3JkIHVuZGVyIGN1cnNvcgorICAgICAjCSAgcHJldmlvdXMgd29yZCB1bmRlciBjdXJzb3IuICBnKiAgIG5leHQgbWF0Y2hpbmcgc2VhcmNoIHBhdHRlcm4KKyAgICAgdW5kZXIgY3Vyc29yLiAgZyMJcHJldmlvdXMgbWF0Y2hpbmcgc2VhcmNoIHBhdHRlcm4gdW5kZXIgY3Vyc29yLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5PbiBXaW5kb3dzLCBtYWtlIEdWaW0KK3RoZSBkZWZhdWx0IGFjdGlvbiBmb3IgZG91YmxlLWNsaWNrIHdpdGggInVua25vd24gZmlsZSB0eXBlcyI8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjc5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI3OTwvQT48QlI+CisKK0kgZmluZCBteXNlbGYgaW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHJlZ2lzdHJ5IG1vZGlmaWNhdGlvbiBmb3IgYWxsIG15CitQQydzIG5vdyAoZXZlbiBvdGhlciBwZW9wbGUncyBQQydzKS4gIEl0IGFwcGxpZXMgdG8gTWljcm9zb2Z0IFdpbmRvd3MKK21hY2hpbmVzIG9ubHkuCVRoZSBmb2xsb3dpbmcgaXMgYWxzbyBmb3IgV2luZG93cyA5eC4uLiAgTlQgb3IgWFAgb3IgMjAwMAorbWF5IHJlcXVpcmUgbW9kaWZpY2F0aW9ucyAod2hpY2ggSSBkb24ndCBjYXJlIHRvIHVuZGVyc3RhbmQhKS4KKworVGhlIHByb2JsZW06IFlvdSBkb3VibGUtY2xpY2sgb24gYSBmaWxlIHRoYXQgZG9lc24ndCBoYXZlIGEgJ3JlZ2lzdGVyZWQgdHlwZScKK2FuZCB0aGF0IHBlc2t5ICJXaGF0IHByb2dyYW0gc2hvdWxkIEkgdXNlPyIgZGlhbG9nIHBvcHMgdXAuICBFdmVuIHdvcnNlLAorZGVwZW5kaW5nIG9uIHRoZSBpbnN0YWxsYXRpb24sIHRoZSBHVmltIGljb24gbWF5IG5vdCBiZSBsaXN0ZWQsIGFuZCBvbmUgaGFzCit0byBicm93c2UgdG8gdGhlIGV4ZWN1dGFibGUuLi4JYW5kIHRoZW4gdGhlIHR5cGUgYmVjb21lcyBmb3JldmVyIGJvbmRlZAordG8gYmVpbmcgZWRpdHRlZCB3aXRoIEdWaW0gKGlmIHRoYXQgYm94IGlzIGNoZWNrZWQpLiAgVGhlIHN0YW5kYXJkIFZpbSA2LjEKK2luc3RhbGxhdGlvbiBkb2VzIGluY2x1ZGUgYSAicmlnaHQgY2xpY2sgdG8gZWRpdCIgbWVudSBpdGVtIGZvciBhbGwgZmlsZXMsCitidXQgYSBkb3VibGUtY2xpY2sgaXMgc28gbXVjaCBmYXN0ZXIhCisKK1RoZSBzb2x1dGlvbjogV2hhdCBpZiB1bnJlZ2lzdGVyZWQgdHlwZXMgd291bGQganVzdCBhdXRvbWF0aWNhbGx5IG9wZW4gdXAKK2luIEdWaW0/ICBXZWxsLCB0aGV5IGNhbi4uICB3aXRoIGEgbGl0dGxlIHJlZ2lzdHJ5IHRyaWNrZXJ5LgorCitIb3cgdG8gSW5zdGFsbCBpdDoKKworU3RlcCAxLiBDcmVhdGUgYSB0ZXh0IGZpbGUgY2FsbGVkICJ2aW1hbHdheXMucmVnIiBhbmQgcGFzdGUgdGhlIGJlbG93IHRleHQKK2ludG8gaXQuCisKK1N0ZXAgMi4gIEltcG9ydGFudCBOT1RFOiBZb3Ugd2lsbCBoYXZlIHRvIGVkaXQgdGhlIHBhdGhuYW1lIHRvIGNvcnJlc3BvbmQKK3RvIHRoZSBwYXRobmFtZSBvZiB5b3VyIEdWaW0uZXhlLiAgVGhlIHRleHQgYmVsb3cgd29ya3MgZmluZSBmb3IgYSBHVmltIDYuMQorZGVmYXVsdCBpbnN0YWxsYXRpb24uCisKK1N0ZXAgMzogU2F2ZSB0aGUgZmlsZS4KKworU3RlcCA0OiBSaWdodC1jbGljayBvbiB0aGUgZmlsZSBhbmQgc2VsZWN0ICJpbnN0YWxsIi4gIFRoZW4geW91IGFyZSBkb25lIQorCistLS0tLS0gdmltYWx3YXlzLnJlZyAgLS0tLS0tLSBjdXQgaGVyZSAtLS0tLS1zbmlwLS0tc25pcC0tLSBSRUdFRElUNAorCitbSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXENsYXNzZXNcKlxzaGVsbF0KKworW0hLRVlfTE9DQUxfTUFDSElORVxTT0ZUV0FSRVxDbGFzc2VzXCpcc2hlbGxcT3BlbiB3aXRoICZHVmltXSBAPSJPcGVuCit3aXRoICZHVmltIgorCitbSEtFWV9MT0NBTF9NQUNISU5FXFNPRlRXQVJFXENsYXNzZXNcKlxzaGVsbFxPcGVuIHdpdGggJkdWaW1cY29tbWFuZF0KK0A9IlwiQzpcXHZpbVxcdmltNjFcXGd2aW0uZXhlXCIgXCIlMVwiIgorCistLS0tZW5kIG9mIGZpbGUtLS0tIGN1dCBoZXJlLS0tLS0gc25pcC0tLXNuaXAtLS0tCisKK05vdGUgMS4gIFRoaXMgY2FuJ3QgYmUgZGUtaW5zdGFsbGVkIGF1dG9tYXRpY2FsbHksIGFuZCBpZiB5b3Ugd2FudCB0byByZW1vdmUKK2l0LCB5b3UnbGwgaGF2ZSB0byBlZGl0IHRoZSByZWdpc3RyeSBieSBoYW5kIChhbm5veWluZywgYnV0IGVhc3kpLgorCitOb3RlIDIuICBLZWVwIHRoaXMgZmlsZSBhcm91bmQsIHNvIHdoZW4geW91IHVwZ3JhZGUgeW91ciBHVmltLCBhbGwgeW91IGhhdmUKK3RvIGRvIGlzIG1vZGlmeSB0aGUgcGF0aG5hbWUgKHRvIHNheSwgZm9yIGV4YW1wbGUsIHZpbTYyKSBhbmQgdGhlbiBpbnN0YWxsCitpdCBhZ2Fpbi4KKworT2ssIHRoYW5rcyBmb3IgcGxheWluZyEgIEFuZCB0aGFua3MgdG8gdGhlIGF1dGhvcihzKSBvZiBWaW0gYW5kIEdWaW0uCitJZiBpdCB3ZXJlbid0IGZvciB0aGVtLCBJJ2Qgc3RpbGwgYmUgdXNpbmcgZWx2aXMgb3Igc3RldmllIQorCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkludGVncmF0aW9uCit3aXRoIFB5VW5pdCB0ZXN0aW5nIGZyYW1ld29yazwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjgwPC9BPjxCUj4KKworVmltIGhhcyBhIHdvbmRlcmZ1bCBhYmlsaXR5IHRvIGludGVncmF0ZSB3aXRoIGV4dGVybmFsIHRvb2xzLCBsaWtlIGNvbXBpbGVycywKK21ha2UsIGN0YWdzIGV0Yy4gIFRoYXQncyBvbmUgb2YgdGhlIHJlYXNvbnMgd2UgbG92ZSBpdC4KKworUHlVbml0IGNhbiBiZSBzZWVuIGFzIGEgImNvbXBpbGVyIiBmb3IgdGhlIFB5dGhvbiB0ZXN0IGNvZGUuICBUbyB1bmRlcnN0YW5kCitpdCwgVmltIHNob3VsZCBiZSB0b2xkIGFib3V0IHRoZSBsYW5ndWFnZSB0aGUgUHlVbml0IHNwZWFrcy4gVGhpcyBjb3VsZCBiZQorZG9uZSB3aXRoICdlcnJvcmZvcm1hdCcgb3B0aW9uOgorCitzZXRsb2NhbCBlZm09JUNcICUuJSMsJUFcIFwgRmlsZVwgXCIlZlwiXFwsXCBsaW5lXCAlbCUuJSMsJVolWyVeXCBdJVxcQD0lbQorCitUaGlzIG1hZ2ljIHNwZWxsIGVuYWJsZXMgVmltIHRvIHBhcnNlIHVuaXR0ZXN0LlRleHRSdW5uZXIncyBvdXRwdXQgYW5kIHRvCitlbnRlciBxdWljay1maXggbW9kZS4gIFRvIHJ1biBhbGwgeW91ciB1bml0IHRlc3RzIGF0IG9uY2UgeW91J2xsIG5lZWQgdG8gc2V0dXAKKydtYWtlcHJnJyBvcHRpb24gYW5kIHByb3ZpZGUgYSBydW5uZXIuCUknbSB1c2luZyB0aGlzIHNldHVwOgorCitzZXRsb2NhbCBtYWtlcHJnPS4vYWxsdGVzdHMucHkKKworQW5kIGNvbnRlbnRzIG9mIHRoZSBhbGx0ZXN0cy5weSAoZm9yIHRoZSBzYWtlIG9mIGNvbXBsZXRlbmVzcyk6CisKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjIKKworaW1wb3J0IHVuaXR0ZXN0IGltcG9ydCBzeXMgc3lzLnBhdGguYXBwZW5kKCd1bml0dGVzdHMnKQorCittb2R1bGVzX3RvX3Rlc3QgPSAoCisJJ2Zvb1Rlc3QnLCAnYmFyVGVzdCcsICdiYXpUZXN0JywKKykKKworZGVmIHN1aXRlKCk6CisgICAgYWxsdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKSBmb3IgbW9kdWxlIGluIG1hcChfX2ltcG9ydF9fLAorICAgIG1vZHVsZXNfdG9fdGVzdCk6CisJYWxsdGVzdHMuYWRkVGVzdCh1bml0dGVzdC5maW5kVGVzdENhc2VzKG1vZHVsZSkpCisgICAgcmV0dXJuIGFsbHRlc3RzCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0nc3VpdGUnKQorCis9PT09PT09PT09PT09PSBlbmQgb2YgdGhlIGFsbHRlc3RzLnB5IGZpbGUgPT09PT09PT09PT09PT09PT09PT09PT09CisKK1doaWxlIHRhbGtpbmcgYWJvdXQgaXQsIEknZCBhbHNvIHN1Z2dlc3QgdG8gYWRkIGEgY291cGxlIG9mIG1hcHBpbmdzLgorSW4gdGhlIGVuZCwgbXkgdmltL2ZpbGVzL2Z0cGx1Z2luL3B5dGhvbi52aW0gbG9va3MgbGlrZSB0aGlzOgorCitzZXRsb2NhbCBtYWtlcHJnPS4vYWxsdGVzdHMucHlcIC1xIHNldGxvY2FsIGVmbT0lQ1wgJS4lIywlQVwgXCBGaWxlXCBcIiVmXCJcXCxcCitsaW5lXCAlbCUuJSMsJVolWyVeXCBdJVxcQD0lbSBpYWJiciAmbHQ7YnVmZmVyJmd0OyBzYWUgc2VsZi5hc3NlcnRFcXVhbHMKK2lhYmJyICZsdDtidWZmZXImZ3Q7IHNhciBzZWxmLmFzc2VydFJhaXNlcworCitGb3IgZGV0YWlscyBzZWUgOmhlbHAgcXVpY2stZml4LCAgOmhlbHAKKydlZm0nIGFuZCAgOmhlbHAgJ21ha2VwcmcnLiAgU2VlIGFsc286CTxBCitIUkVGPSJodHRwOi8vYzIuY29tL2NnaS93aWtpP1B5dGhvblVuaXQiPmh0dHA6Ly9jMi5jb20vY2dpL3dpa2k/UHl0aG9uVW5pdDwvQT48QlI+CisKK01hbnkgdGhhbmtzIHRvIFN0ZWZhbiBSb2VtZXIgd2hvIHBhdGllbnRseSBzcGVudCBxdWl0ZSBzb21lIHRpbWUgdG8gYnVpbGQKKydlZm0nIGZvciBtZS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlN0YXRlZnVsIHp6PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI4MSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODE8L0E+PEJSPgorCitEbyB5b3UgZmluZCB5b3Vyc2VsZiBoaXR0aW5nICd6eicgYWxsIHRoZSB0aW1lIGluIG9yZGVyIHRvIHNlZSBzb21lIGNvbnRleHQgb2YKK3doYXQgeW91J3JlIGN1cnJlbnRseSB3b3JraW5nIG9uPyBJZiBzbywgdGhlbiB0aGlzIHRpcCBtaWdodCBiZSBmb3IgeW91LiBJZgoreW91IGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgaW4geW91ciB2aW1yYywgeW91IGNhbiB0b2dnbGUgenogbW9kZSBieSBwcmVzc2luZworJmx0O0xlYWRlciZndDt6ei4KKworIiBtYWludGFpbiBhIGNvbnN0YW50IHp6IHN0YXRlLCBzZWNvbmQgY2FsbCB3aWxsIHRvZ2dsZSBpdCBiYWNrIG9mZiBtYXAKKyZsdDtMZWFkZXImZ3Q7enogICAgOmxldCAmc2Nyb2xsb2ZmPTk5OS0mc2Nyb2xsb2ZmJmx0O0NSJmd0OworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+Rm9sZGluZyB3aXRoIFJlZ3VsYXIgRXhwcmVzc2lvbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODIiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjgyPC9BPjxCUj4KKworV2VsbCwgSSd2ZSB0cmllZCB0byB1bmRlcnN0YW5kIHNvbWUgb2YgdGhlIGZvbGRpbmcgc2NyaXB0cywgYnV0IGxpZmUncyB0b28KK3Nob3J0LiBJbnN0ZWFkLCBJIGFkZGVkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8gbXkgdmltcmMgZmlsZS4KKworc2V0Citmb2xkZXhwcj0oZ2V0bGluZSh2OmxudW0pPX5ALyk/MDooZ2V0bGluZSh2OmxudW0tMSk9fkAvKVx8XHwoZ2V0bGluZSh2OmxudW0rMSk9fkAvKT8xOjIKK21hcCBceiA6c2V0IGZvbGRtZXRob2Q9ZXhwciBmb2xkbGV2ZWw9MCBmb2xkY29sdW1uPTImbHQ7Q1ImZ3Q7CisKK1RoZSBmaXJzdCBsaW5lIGlzIGFuIGV4dGVuc2lvbiBvZiBmb2xkZXhwcj0oZ2V0bGluZSh2OmxudW0pPX5ALyk/MDoxIFRoZQorc2Vjb25kIGxpbmUgKHJlKXNldHMgdGhlIGZvbGRtZXRob2QgdG8gZXhwcihlc3Npb24pIHBsdXMuCisKK0ZpcnN0IHNlYXJjaCBmb3IgL3JlZ2V4cC8sIHRoZW4gZm9sZCBldmVyeXRoaW5nIGVsc2Ugd2l0aCBceiBVc2UgenIgdG8gcmV2ZWFsCittb3JlIGNvbnRleHQgKGJlZm9yZS9hZnRlcikgbGluZXMuCisKK1lvdSBjb3VsZCBhZGQgKGdldGxpbmUodjpsbnVtLTIpPX5ALylcfFx8KGdldGxpbmUodjpsbnVtKzIpPX5ALyk/MjozIGJ1dCBpdAord2lsbCB0YWtlIGxvbmdlciBhcyBmb2xkZWQgbGluZXMgKHRoZSBtYWpvcml0eSkgZXZhbHVhdGUgdGhlIGZ1bGwgZXhwcmVzc2lvbi4KKworV2hhdCBjb3VsZCBiZSBlYXNpZXI/CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlR1cm4KK29uIHN5bnRheCBjb2xvcmluZyBpbiBNYWMgT1MgWDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjgzPC9BPjxCUj4KKworVGhpcyB0aXAgaXMgYWN0dWFsbHkgZm9yIHZpbSA2LjEuIFRvIHR1cm4gb24gc3ludGF4IGNvbG9yaW5nIGluIE1hYyBPUyBYCitlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLCBvciBwbGFjZSB0aGVtIGluIHlvdXIgJEhPTUUvLnZpbXJjIGZpbGUuCisKKzpzZXQgdGVybT1idWlsdGluX2Jlb3MtYW5zaSA6c3ludGF4IG9uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk1hcHBpbmcKK3RvIHByaW50IHN5bnRheCBoaWdobGlnaHRlZCBidWZmZXIgaW4gQiZXPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI4NCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODQ8L0E+PEJSPgorCitJIHVzZSB0aGlzIG1hcHBpbmcgdG8gcHJpbnQgc3ludGF4IGhpZ2hsaWdodGVkIEMrKyBjb2RlIGluIEImVyBUaGlzIHRpcAorbmVlZHMgdmltc2NyaXB0ICMyMzMgcHJpbnRfYncuCisKK1RoZSBtYXBwaW5nIGlzIGFzIGZvbGxvd3MgbWFwICZsdDtDLXAmZ3Q7IDpjb2xvcgorcHJpbnRfYncmbHQ7Q1ImZ3Q7OmhhcmRjb3B5Jmx0O0NSJmd0Ozpjb2xvciBzZWFuJmx0O0NSJmd0OzpzeW4gb24mbHQ7Q1ImZ3Q7CisKK0NoYW5nZSAiOmNvbG9yIHNlYW4iIHRvIHdoYXRldmVyIGlzIHlvdXIgY2hvc2VuIGNvbG9yIHNjaGVtZS4gIE5lZWQgdG8KK2NoYW5nZSBsaW5lIDcgb2YgcHJpbnRfYncgZnJvbSAic3ludGF4IHJlc2V0IiB0byAic3ludGF4IG9mZiIgJmx0O0MtcCZndDsKK29uIGEgc3ludGF4IGhpZ2hsaWdodGVkIGJ1ZmZlciB0dXJucyBvZmYgc3ludGF4IGhpZ2hsaWdodGluZyAsIHNldHMgdGhlCitjb2xvcnMgdG8gQiZXLCBwcmludHMgdGhlIGJ1ZmZlciwgcmVzZXRzIHRoZSBjb2xvciBzY2hlbWUgYW5kIHR1cm5zIG9uIHN5bnRheAoraGlnaGxpZ2h0aW5nIGFnYWluLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+RG9uJ3QgdXNlIHRoZSBlc2NhcGUga2V5ITwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjg1PC9BPjxCUj4KKworVmltIChhbnkgdmkgcmVhbGx5KSBpcyBhIGRyZWFtIGZvciB0b3VjaCB0eXBpc3RzLi4uIFVudGlsIHlvdSB3YW50IHRvIHN3aXRjaAorZnJvbSBpbnNlcnQgbW9kZSB0byBub3JtYWwgbW9kZS4gIFRoZW4geW91J3ZlIGdvdCB0byByZWFjaCB3YXkgdXAgdG8gd2hhY2sKK3RoZSBlc2NhcGUga2V5LgorCitPciBhdCBsZWFzdCB0aGF0J3Mgd2hhdCBJIHdhcyBkb2luZyB1bnRpbCBJIHJlYWxpemVkIHRoYXQgKGRydW0gcm9sbCBwbGVhc2UpCisKKwkJICAgIEVzYyBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gY29udHJvbC1bICAodGhhdCdzIHRoZQorCQkgICAgY29udHJvbCBrZXkgcGx1cyB0aGUgbGVmdCBzcXVhcmUgYnJhY2tldCBrZXkpCisKK1RoYXQgbGl0dGxlIGJpdCBvZiBrbm93bGVkZ2UsIHBsdXMgbWFwcGluZyBteSBjYXBzIGxvY2sgdG8gYW5vdGhlciBjb250cm9sCitrZXksIHdhcyB3aGF0IHR1cm5lZCBteSBmYXNjaW5hdGlvbiB3aXRoIFZpbSBpbnRvIHRydWUgbG92ZS4gIFlvdSBuZXZlciBoYXZlCit0byBsb3NlIHRyYWNrIG9mIHRoZSBob21lIHJvdyBhZ2FpbiEKKworRm9yIFhmcmVlODYgdXNlcnMgLSB5b3UgY2FuIG1ha2UgdGhlIGNhcHNsb2NrIGtleSBhbm90aGVyIGNvbnRyb2wga2V5IGJ5IGFkZGluZworCitPcHRpb24gIlhrYk9wdGlvbnMiICJjdHJsOm5vY2FwcyIKKwordG8gdGhlIElucHV0RGV2aWNlIHNlY3Rpb24gb2YgeW91ciBYRjg2Q29uZmlnIGZpbGUuCisKK0ZvciBXaW5kb3dzIE5ULzIwMDAgdXNlcnMgIC0gdXNlIHRoZSBmb2xsb3dpbmcgLnJlZyBmaWxlIHRvIGRvIHRoZSBzYW1lIHRoaW5nOgorCitSRUdFRElUNAorCitbSEtFWV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50Q29udHJvbFNldFxDb250cm9sXEtleWJvYXJkIExheW91dF0KKyJTY2FuY29kZSBNYXAiPWhleDowMCwwMCwwMCwwMCwwMCwwMCwwMCwwMCwwMiwwMCwwMCwwMCwxZCwwMCwzYSwwMCwwMCwwMCwwMCwwMAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5SZWNvdmVyCithZnRlciBkb2luZyBzb21ldGhpbmcuLi4gdWdseS48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjg2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI4NjwvQT48QlI+CisKK0kgd2FzIG9uY2UgZWRpdGluZyBhIGZpbGUgYW5kIHdhbnRlZCB0byB0ZXN0IHNvbWV0aGluZy4gVGhlIHRlc3Qgd2FzIG1lYW50Cit0byBhZGQgYSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGZyb20gb3V0c2lkZSB2aW0uIEFsbCB3YXMgZmluZSwgYnV0CitpbnN0ZWFkIG9mICZndDsmZ3Q7LCBJIHdyb3RlICZndDsuIFlvdSBjYW4gaW1hZ2luZSB3aGF0IGhhcHBlbmVkLi4uIDopCisKK0lmIHlvdSBoYXBwZW4gdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhhdCwgdGhlIHNvbHV0aW9uIGlzOgorCis6cmVjb3ZlcgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+Q29vbCB0cmljayB0byBjaGFuZ2UgbnVtYmVyczwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjg3PC9BPjxCUj4KKworSW4gdGhlIGd2aW0gaWYgeW91IHdhbnQgdG8gZGVjcmVtZW50IGFueSBudW1iZXIganVzdCBwdXQgdXIgY3VyY29yIG9uIHRoYXQKK251bWJlciBpbiBFc2MgbW9kZSBhbmQgcHJlcyAmbHQ7Q1RSTCZndDsgWAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5BIGtleW1hcHBpbmcKK3RvIGdlbmVyYXRlIEphdmEgc2V0dGVycyBhbmQgZ2V0dGVycyBhdXRvbWF0aWNhbGx5PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI4OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODg8L0E+PEJSPgorCitUaGlzIG1hcHBpbmcgbWFrZXMgaXQgbXVjaCBzaW1wbGVyIHRvIHdyaXRlIG5ldyBqYXZhIGNsYXNzZXMgYnkgc2ltcGxpZnlpbmcKK3NvbWUgb2YgdGhlIGR1bGwgcmVwZXRhdGl2ZSBjb2RpbmcgKGllIHNldHRlcnMgYW5kIGdldHRlcnMpLgorCitUbyB1c2UsIGZpcnN0IHdyaXRlIGEgYmFzaWMgY2xhc3Mgd2l0aCB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworcHVibGljIGNsYXNzIE15Q2xhc3MgeworCisgICAgIHByaXZhdGUgJmx0O3R5cGUmZ3Q7ICZsdDt2YXJuYW1lJmd0OyA9ICZsdDtpbml0dmFsdWUmZ3Q7OyBwcml2YXRlCisgICAgICZsdDt0eXBlJmd0OyAmbHQ7dmFybmFtZSZndDsgPSBpbml0dmFsdWUmZ3Q7OworCisgICAgIC8vIGdldHRlcnMKKworICAgICAvLyBzZXR0ZXJzCisKK30KKworTm90ZSB0aGUgZ2V0dGVycy9zZXR0ZXJzIGNvbW1lbnQgLS0gdGhleSBhcmUgaW1wb3J0YW50IGFzIHRoZXkgYXJlIHVzZWQgdG8KK3BsYWNlIHRoZSBnZXR0ZXJzIGFuZCBzZXR0ZXJzLgorCitUaGUgbWFwcGluZyBpczoKKworbWFwIGpncyBtYXd2LyAmbHQ7RW50ZXImZ3Q7InR5LworJmx0O0VudGVyJmd0O3d2d2gibnkvZ2V0dGVycyZsdDtFbnRlciZndDskYSZsdDtFbnRlciZndDsmbHQ7RW50ZXImZ3Q7cHVibGljCismbHQ7RXNjJmd0OyJ0cGEmbHQ7RXNjJmd0OyJucGJpZ2V0Jmx0O0VzYyZndDtsfmVhKCkmbHQ7RW50ZXImZ3Q7eyZsdDtFbnRlciZndDsmbHQ7VGFiJmd0O3JldHVybgorJmx0O0VzYyZndDsibnBhOyZsdDtFbnRlciZndDt9Jmx0O0VzYyZndDs9Jmx0O0VudGVyJmd0OyZsdDtFc2MmZ3Q7L3NldHRlcnMmbHQ7RW50ZXImZ3Q7JGEmbHQ7RW50ZXImZ3Q7Jmx0O0VudGVyJmd0O3B1YmxpYwordm9pZCAmbHQ7RXNjJmd0OyJucGJpc2V0Jmx0O0VzYyZndDtsfmVhKCZsdDtFc2MmZ3Q7InRwYQorJmx0O0VzYyZndDsibnBhKSZsdDtFbnRlciZndDt7Jmx0O0VudGVyJmd0OyZsdDtUYWImZ3Q7dGhpcy4mbHQ7RXNjJmd0OyJucGE9Jmx0O0VzYyZndDsibnBhOyZsdDtFbnRlciZndDt9Jmx0O0VzYyZndDs9Jmx0O0VudGVyJmd0O2BhaworCisodGhlIGFib3ZlIHNob3VsZCBiZSBvbmUgbG9uZyBsaW5lIHdpdGggbm8gc3BhY2VzIGJldHdlZW4gdGhlIGVuZCBvZiB0aGUKK2xpbmVzIGFib3ZlKS4KKworVG8gdXNlIHRoaXMgdG8gZ2VuZXJhdGUgYSBjbGFzcyBnbyB0byB0aGUgdmFyaWFibGUgdGhhdCBzaG91bGQgaGF2ZSBhCitzZXR0ZXIvZ2V0dGVyIGFuZCBwbGFjZSB0aGUgY3Vyc2VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlICdwcml2YXRlJzoKKworICAgcHJpdmF0ZSAmbHQ7dHlwZSZndDsgJmx0O3ZhcmlhYmxlJmd0OyA9ICZsdDtpbml0dmFsdWUmZ3Q7JyBeCisKK1RoZW4gdHlwZToKKworamdzCisKK3RoaXMgd2lsbCBjcmVhdGUgdGhlIGZpcnN0IGdldHRlci9zZXR0ZXIgYW5kIHRoZW4gbW92ZSB1cCB0byB0aGUgbmV4dAordmFyaWFibGUuICBZb3UgY2FuIGp1c3Qga2VlcCB0eXBpbmcgamdzIHVudGlsIGFsbCB0aGUgIGdldHRlcnMvc2V0dGVycyBoYXZlCitiZWVuIGdlbmVyYXRlZC4KKworVGhpcyBzaG91bGQgbWFwcGluZyBpc24ndCBwZXJmZWN0IGFuZCBzb21lb25lIGNvdWxkIHByb2JhYmx5IG1ha2UgaXQgYSBsaXR0bGUKK2NsZWFuZXIuICBJdCBjb3VsZCBhbHNvIHJlbGF0aXZlbHkgZWFzaWx5IGJlIGFkYXB0ZWQgdG8gQysrLiAgUGxlYXNlIGZlZWwgZnJlZQordG8gc2VuZCBtZSBhbnkgZmVlZGJhY2svZW5oYW5jZW1lbnRzIGFzIEkgYW0gdHJ5aW5nIHRvIGNvbXBpbGUgYSBsaXN0IG9mIHRoZXNlLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5BbHRlcm5hdGl2ZQorJmx0O2VzY2FwZSZndDsgdGhhdCBhbGxvd3MgeW91IHRvIGRvIGEgInF1aWNrIGFuZCBkaXJ0eQoraW5zZXJ0IiBhbmQgZ2V0IG91dCBpbnRvIG5vcm1hbCBtb2RlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI4OSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yODk8L0E+PEJSPgorCitUaGlzIGlzIGFuIGFsdGVybmF0aXZlIGtleSBjb21ibyBmb3IgdGhlIGVzY2FwZSBrZXkgZnJvbSB0aGUgb25lIG1lbnRpb25lZAorYnkgRGF2aWQgQS4gUm9nZXJzIGluIHZpbXRpcCAjMjg1LgorCitJIGRvIGEgbG90IG9mIGVkaXR0aW5nIGluIFZpbSwgYW5kIEkndmUgYWx3YXlzIGZvdW5kIG15c2VsZiBpbiBzaXR1YXRpb25zIHdoZXJlCitJIGhhZCB0byAiZG8gYSBxdWljayBpbnNlcnQiIC0gYmFzaWNhbGx5IChmcm9tIG5vcm1hbCBtb2RlKSwgY2hhbmdlIGludG8gaW5zZXJ0Cittb2RlLCB0eXBlIGluIG9uZSBxdWljayB3b3JkLCB0aGVuICZsdDtlc2MmZ3Q7IG91dCwgdGhlbiBuYXZpZ2F0ZSBlbHNld2hlcmUuCisKK0FzIGhhcyBiZWVuIHJpZ2h0bHkgb2JzZXJ2ZWQgYnkgYSBsb3Qgb2YgcGVvcGxlLCB0aGUgJmx0O2VzYyZndDsga2V5IGNhbgorc29tZXRpbWVzIGJlIGEgbGl0dGxlIGJpdCBvdXQgb2YgdGhlIHdheS4gQnV0IHRoYXQncyBubyBwcm9ibGVtIGZvciBWaU0sIGlzIGl0PworCitBdCBmaXJzdCwgSSB0aG91Z2h0IG9mIGVkaXR0aW5nIHRoZSBWaU0gc291cmNlIGNvZGUgaXRzZWxmLCBpbiBvcmRlciB0byBjb21lCit1cCB3aXRoIGEgY29tbWFuZCB0aGF0IGNvdWxkIGRvIHRoaW5ncyBsaWtlIHNheSAibGV0IG1lIGp1bXAgaW50byBpbnNlcnQKK21vZGUsIHR5cGUgYSBmZXcgcXVpY2sgd29yZHMsIHRoZW4gZXNjYXBlIG91dCBpbnRvIG5vcm1hbCBtb2RlIHdoZW4gaSBwcmVzcworc29tZXRoaW5nIGxpa2UgZG91YmxlICZsdDtzcGFjZSZndDsiLgorCitJdCB3YXMgb25seSBsYXRlciB3aGVuIHJlYWRpbmcgdGhyb3VnaCB0aGUgc2VjdGlvbiBpbgorSmVzc2UgR29lcnoncyAiQmVnaW5uZXIncyBHdWlkZSB0byBWaU0iIG9uIHJlbWFwcGluZyAoPEEKK0hSRUY9Imh0dHA6Ly9uZXdiaWVkb2Muc291cmNlZm9yZ2UubmV0L3R1dG9yaWFscy92aW0vbWFwcGluZy12aW0uaHRtbCkKK3RoYXQgSSBnb3QgaW5zcGlyZWQgdG8gcmV0YWtlIGEgbG9vayBhdCB1c2luZyByZW1hcHBpbmcgYXMgYW4gYWx0ZXJuYXRpdmUKK2luc3RlYWQuIj5odHRwOi8vbmV3YmllZG9jLnNvdXJjZWZvcmdlLm5ldC90dXRvcmlhbHMvdmltL21hcHBpbmctdmltLmh0bWwpCit0aGF0IEkgZ290IGluc3BpcmVkIHRvIHJldGFrZSBhIGxvb2sgYXQgdXNpbmcgcmVtYXBwaW5nIGFzIGFuIGFsdGVybmF0aXZlCitpbnN0ZWFkLjwvQT48QlI+CisKK1RoaXMgaXMgd2hhdCBJIGNhbWUgdXAgd2l0aC4uIFVzZSB3aGF0ZXZlciBpcyBjb21mb3J0YWJsZSBmb3IgeW91IC0gc2luZ2xlCitvciBkb3VibGUgJmx0O1NoaWZ0LXNwYWNlJmd0OworCis6bWFwISAmbHQ7Uy1zcGFjZSZndDsgJmx0O2VzYyZndDsgOm1hcCEgJmx0O1Mtc3BhY2UmZ3Q7Jmx0O1Mtc3BhY2UmZ3Q7CismbHQ7ZXNjJmd0OworCitXaXRoIHRoaXMgcXVpY2sgY29tYm8gKCJTaGlmdCIsICsgJmx0O3NwYWNlJmd0OyksIG9uZSBjYW4gZWFzaWx5IChhbmQgbWlnaHQKK0kgYWRkLCBpbnR1aXRpdmVseSkgImRvIGEgcXVpY2sgaW5zZXJ0IiBhbmQgZXhpdCBxdWlja2x5IG91dCBpbnRvIG5vcm1hbAorbW9kZS4gSSBndWVzcyBJIGFsd2F5cyB0aG91Z2h0IHRoZSAmbHQ7c3BhY2UmZ3Q7IHdvdWxkIGJlIGEgZ29vZCB3YXkgdG8KK2RvIHRoaXMgc29ydCBvZiB0aGluZywgc2luY2UgaXQgaXMgYWZ0ZXIgYWxsLCBzbyBpbnR1aXRpdmUgaW4gdGhlIHR5cGluZworcHJvY2Vzcy4gU28gd2h5IG5vdCBtYWtlIGl0IHN1Y2ggdGhhdCBpdCBjYW4gImVzY2FwZSIgeW91IG91dCBpbnRvIG5vcm1hbAorbW9kZSBhcyB3ZWxsPyBKdXN0IHR5cGUgJ2knLCB0byBnbyBpbnRvIGluc2VydCBtb2RlLCB0eXBlIGluIHlvdXIgc3R1ZmYsCithbmQgb25jZSB5b3UncmUgZG9uZSwgaGl0IFNoaWZ0LXNwYWNlIQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5UZXh0CitQcm9jZXNzaW5nIFdpdGggSW50ZWdyYXRlZCBTcGVsbCBDaGVja2luZzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjkwPC9BPjxCUj4KKworSSBoYXZlIHdyaXR0ZW4gYW4gSFRNTCBkb2N1bWVudCB0byBoZWxwIG90aGVycyB1c2UgVmltIGFzIGEgYmFzaWMgdGV4dAorcHJvY2Vzc2luZyBhcHBsaWNhdGlvbi4gSXQgZGlzY3Vzc2VzIGhvdyB0byBpbnRlZ3JhdGUgc3BlbGwgY2hlY2tpbmcsCitkaWN0aW9uYXJ5LCBhbmQgdGhlc2F1cnVzIGFwcGxpY2F0aW9ucy4gSXQgYWxzbyB0YWxrcyBhYm91dCB3cmFwcGluZyBsaW5lcywKK2luZGVudGF0aW9uLCBqdXN0aWZpY2F0aW9uLCBhbmQgdGhlIHZpbSBzZXR0aW5ncyB0aGF0IGVmZmVjdCB0aGUgYmVoYXZpb3IKK29mIHRoZXNlIG9wZXJhdGlvbnMuIFRoZSBkb2N1bWVudCBjYW4gYmUgZm91bmQgYXQ6CisgICA8QQorICAgSFJFRj0iaHR0cDovL3d3dy5oaWdobGV5LXJlY29tbWVuZGVkLmNvbS90ZXh0LXByb2Nlc3NpbmcuaHRtbCI+aHR0cDovL3d3dy5oaWdobGV5LXJlY29tbWVuZGVkLmNvbS90ZXh0LXByb2Nlc3NpbmcuaHRtbDwvQT48QlI+CisKK0V2ZXJ5dGhpbmcgaGFzIGJlZW4gdGVzdGVkIHdpdGggVU5JWCwgTGludXgsIFdpbmRvd3MsIGFuZCBXaW5kb3dzIHdpdGgKK0N5Z3dpbiBwYXRmb3Jtcy4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+XlAKKyYgYXV0byBmaWxsaW5nIG9mIHZhcmlhYmxlcyBhbmQgdGV4dDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjkxPC9BPjxCUj4KKworRG8geW91IGtub3cgeW91IGNhbiBhdXRvIGZpbGwgdGhlIHZhcmlhYmxlIGFuZCBuYW1lcyBhcyB5b3UgdHlwZSB5b3VyIGNvZGUKKz8gVGhpcyB3aWxsIGhlbHAgbW9zdCBvZiB0aGUgcHJvZ3JhbW1lcnMsIHdobyBhbHdheXMgdHJ5IGhhcmQgdG8gcmVtZW1iZXIgdGhlCit2YXJpYWJsZSBuYW1lcyBhbmQgYnJvd3NlIHRocm91Z2ggYWxsIHRoZSBmaWxlcyB0byBmaW5kIG91dCB0aGUgdmFyaWFibGUgbmFtZS4KKyAgIFVzZSBDdHJsK1AgYW5kIEN0cmwrTiB0byBhdXRvZmlsbCB0aGUgdmFyaWFibGVzIG5hbWVzIGV0Yy4gSnVzdCBwcmFjdGljZSwKKyAgIHlvdSB3aWxsIGZlZWwgdGhlIGVhc2Ugb2YgdXNpbmcgdmltCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj52aW0gKyBjc2NvcGUgKyBjeWd3aW48L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjkyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI5MjwvQT48QlI+CisKK0kndmUgZm91bmQgdGhhdCB2aW0gKyBjc2NvcGUgKyBjeWd3aW4gZG9lcyBub3Qgd29yay4gVGhlIHByb2JsZW0gc2VlbXMgdG8KK2JlIHRoYXQgaW4KKworc3ByaW50ZihjbWQsICJleGVjICVzIC1kbCAtZiAlcyIsIHByb2csIGNzaW5mb1tpXS5mbmFtZSk7CisKK3ZpbSBleGVjcyBjc2NvcGUgd2l0aCB0aGUgIi1kbCIgb3B0aW9ucywgY2F1c2luZyBpdCB0byBmYWlsLiBJdCBpcyBwcm9iYWJseQorYSBjc2NvcGUgYnVnLCBidXQgYSBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0b3AgYnVpbGQgdmltIHdpdGhvdXQgdGhhZCAiZCI6CisKK3NwcmludGYoY21kLCAiZXhlYyAlcyAtbCAtZiAlcyIsIHByb2csIGNzaW5mb1tpXS5mbmFtZSk7CisKK3NlZW1zIHRvIHdvcmsgZm9yIG1lIQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5yZW1lbWJlcgord2hlcmUgeW91IGhhZCBlbmRlZCByZWFkaW5nIGhlbHA8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MjkzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI5MzwvQT48QlI+CisKK1lvdSBjb3VsZCBqdW1wIHRvIHRoZSBsYXN0IHBsYWNlIHlvdSBoYWQgYmVlbiB3aGlsZSByZWFkaW5nIFZpbSBoZWxwIGZpbGVzCitpZiB5b3UgYWRkIHRoaXMgdG8geW91ciAudmltcmMgZmlsZToKKworYXUgQnVmTGVhdmUgKiBpZiAmZnQgPT0gImhlbHAiIHwgbWFyayBIIHwgZW5kaWYKKworVGhlbiB1c2UgJ0ggdG8gZ28gdG8gdGhlIG1hcmsgSC4KKworVG8gd29yayBiZXR3ZWVuIFZpbSBydW5zICd2aW1pbmZvJyBvcHRpb24gc2hvdWxkIGJlIHNldHVwIHRvIHNhdmUgZmlsZSBtYXJrcy4KK1NlZSA6aGVscCAndmltaW5mbycgYW5kIDpoZWxwIGZpbGUtbWFya3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlVzZQorQ3RybC1TIHRvIHNhdmUgY3VycmVudCBvciBuZXcgZmlsZXMuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI5NCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTQ8L0E+PEJSPgorCitJIHdhbnRlZCB0byBoYXZlIGEgc2luZ2xlIGtleSBzdHJva2UgdGhhdCB3b3VsZCBzYXZlIGV4aXN0aW5nIGZpbGVzLCBvciBjYWxsCit0aGUgZmlsZSBicm93c2VyLiAgSGVyZSdzIGEga2V5IG1hcCBmb3IgQ3RybC1TIHRvIGFjY29tcGxpc2ggdGhhdCAocGxhY2UgaW4KK3ZpbXJjIGZpbGUpOgorCitpZiBoYXMoImd1aV9ydW5uaW5nIikKKyAgIiBJZiB0aGUgY3VycmVudCBidWZmZXIgaGFzIG5ldmVyIGJlZW4gc2F2ZWQsIGl0IHdpbGwgaGF2ZSBubyBuYW1lLAorICAiIGNhbGwgdGhlIGZpbGUgYnJvd3NlciB0byBzYXZlIGl0LCBvdGhlcndpc2UganVzdCBzYXZlIGl0LiAgOm1hcAorICAmbHQ7c2lsZW50Jmd0OyAmbHQ7Qy1TJmd0OyA6aWYgZXhwYW5kKCIlIikgPT0gIiImbHQ7Q1ImZ3Q7OmJyb3dzZSBjb25maXJtCisgIHcmbHQ7Q1ImZ3Q7OmVsc2UmbHQ7Q1ImZ3Q7OmNvbmZpcm0gdyZsdDtDUiZndDs6ZW5kaWYmbHQ7Q1ImZ3Q7CitlbmRpZgorCitUb20gS2ltcHRvbgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+TGluZS93b3JkL2ZpbGUvd2hhdGV2ZXIgY29tcGxldGlvbjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjk1PC9BPjxCUj4KKworSW4gYWRkaXRpb24gdG8gdmltdGlwICMyOTEgeW91IGNhbiB1c2Ugd2hvbGUgJmx0O0MteCZndDsgY29tcGxldGlvbiBtb2RlLiBJdAorY2FuIGNvbXBsZXRlIHdob2xlIGxpbmVzICgmbHQ7Qy14Jmd0O2wsIHRoZW4gJmx0O0MtcCZndDssICZsdDtDLW4mZ3Q7KSwKK2ZpbGVuYW1lcyAoJmx0O0MtZiZndDspLCBrZXl3b3Jkcywgd29yZHMgZnJvbSBjdXN0b20gZGljdGlvbmFyeSBhbmQgbWFueSwKK21hbnkgb3RoZXJzLiBEdXJpbmcgY29kaW5nIGl0IHVzdWFsbHkgc2F2ZXMgYSBMT1Qgb2Yga2V5IHN0cm9rZXMgOykgVGhpcworbW9kZSBoYXMgbWFueSBvdGhlciBwb3dlcmZ1bCBmZWF0dXJlcywgZm9yIGV4YW1wbGUgd2hlbiBjb21wbGV0aW5nIHdvcmQgKGJ5CismbHQ7Qy14Jmd0OyZsdDtDLXAmZ3Q7IG9yIGp1c3QgYnkgJmx0O0MtcCZndDspIHlvdSBjYW4gY29udGludWUgY29tcGxldGlvbgord2l0aCBhbm90aGVyICZsdDtDLXgmZ3Q7Jmx0O0MtcCZndDsuIEZvciBleGFtcGxlLCBhZnRlciB3cml0aW5nIHN1Y2ggdGV4dDoKKwordGhpcyBpcyBmaXJzdCBsaW5lIHNlY29uZCBsaW5lIGlzIGhlcmUKKworUGxhY2luZyBjdXJzb3IgYXQgdGhpcmQgbGluZSBhbmQgcHJlc3NpbmcgJmx0O0MteCZndDtsIHdpbGwgZG91YmxlIGxhc3QKK2xpbmUgLSAmbHQ7Qy1uJmd0OywgJmx0O0MtcCZndDsgaW4gdGhpcyBtb21lbnQgY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZQorY29tcGxldGVkIGxpbmUuIE9yLCBpbnN0ZWFkIG9mIGNvbXBsZXRpbmcgd2hvbGUgbGluZSB5b3UgY2FuIHByZXNzICdmJyBhbmQKK3RoZW4gY29tcGxldGUgYnkgJmx0O0MtcCZndDsgd2hpY2ggd2lsbCByZXN1bHQgaW4gJ2ZpcnN0JyB3b3JkLiBBZnRlciB0aGF0Cit5b3UgY2FuICZsdDtDLXgmZ3Q7Jmx0O0MtcCZndDsgdG8gZ2V0ICdsaW5lJyB3b3JkIChzaW5jZSB0aGlzIGlzIG5leHQgd29yZAorYWZ0ZXIgJ2ZpcnN0JykuIFRyeSB5b3Vyc2VsZiBmb3Igb3RoZXIgcG93ZXJmdWwgY29tYmluYXRpb25zLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5BdHRhY2gKK3RoZSBjdXJyZW50bHkgb3BlbiBmaWxlIHRvIGVtYWlsPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI5NiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTY8L0E+PEJSPgorCitUaGlzIGlzIHZlcnkgc2ltcGxlLCBidXQgbW9zdCBwZW9wbGUgZG9uJ3Qgc2VlbSB0byB0YWtlIGFkdmFudGFnZSBvZgordGhpcy4gT2Z0ZW4geW91IGhhdmUgc29tZSBmaWxlIChzb3VyY2UgY29kZSBvciBvdGhlciB0ZXh0IGZpbGUpIGFscmVhZHkgb3BlbgoraW4gYW4gZXhpc3RpbmcgdmltIHNlc3Npb24gYW5kIHlvdSBuZWVkIHRvIGF0dGFjaCBpdCB3aXRoIGFuIGVtYWlsLiBJdCBpcwordmVyeSBzaW1wbGUuCisgICAgLSBGaXJzdCBjb3B5IHRoZSBmaWxlbmFtZSBpbnRvIGNsaXBib2FyZC4gRm9yIHRoaXMgSSBwdXQgdGhlIGZvbGxvd2luZworICAgIG1hcHBpbmcgaW4gdmltcmMgYW5kIHByZXNzICZsdDtGMiZndDs6CisJIG5ub3JlbWFwICZsdDtGMiZndDsgOmxldCBAKj1leHBhbmQoIiU6cCIpJmx0O2NyJmd0OworICAgIC0gR28gdG8geW91ciBlbWFpbCBjb21wb3NlIHdpbmRvdyBhbmQgdXNlIHlvdXIgcmVndWxhciBmaWxlIGF0dGFjaG1lbnQKKyAgICBtZW51IChJbnNlcnQtJmd0O0ZpbGUgaW4gb3V0bG9vaykgYW5kIHByZXNzIF5WIChvciB3aGF0ZXZlciBrZXkgdG8gcGFzdGUKKyAgICBjbGlwYm9hcmQpIGFuZCBwcmVzcyBFbnRlci4KKworVGhhdCBpcyBhbGwgdGhlcmUgdG8gaXQuIElmIHlvdSBhcmUgb24gd2luZG93cyBhbmQgeW91ciBlbWFpbCBjbGllbnQgZG9lc24ndAorYWNjZXB0IGZvcndhcmQtc2xhc2hlcywgdGhlbiB5b3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhlIG1hcCB0bzoKKworCSBubm9yZW1hcCAmbHQ7RjImZ3Q7IDpsZXQgQCo9c3Vic3RpdHV0ZShleHBhbmQoIiU6cCIpLCAiLyIsICJcXCIsCisJICJnIikmbHQ7Y3ImZ3Q7CisKK0hUSCwgSGFyaQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5TdGFydAoraW4gaW5zZXJ0IG1vZGUgd2l0aG91dCBsb29zaW5nIHlvdXIgZXNjYXBlIGtleTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTciPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9Mjk3PC9BPjxCUj4KKworVGhlcmUgYXJlIHR3byBwYXJ0cyB0byB0aGlzLCBlYWNoIGlzIGZhaXJseSBzaW1wbGUuCisKK0ZpcnN0LCBJIHdhbnQgdG8gc3RhcnQgaW4gaW5zZXJ0IG1vZGUuCVdlbGwgInNldCBpbSEiIGluIG15IHZpbXJjIGRpZCB0aGUKK2pvYiwgYnV0IEkgbG9zdCB0aGUgZXNjYXBlIGtleS4gIFNlY29uZCwgSSBoYXZlIGZvdW5kIHRoYXQgb2Z0ZW4gdGltZXMsCit3aGVuIEknbSBpbiBjb21tYW5kIG1vZGUsIEkgaGl0IGVzY2FwZSB0cnlpbmcgdG8gZ2V0IGJhY2sgaW50byBpbnNlcnQgbW9kZS4KK0kgYW0gYWx3YXlzIHJld2FyZGVkIHdpdGggYSBiZWVwLCB0ZWxsaW5nIG1lIG9uY2UgYWdhaW4gSSBtYWRlIHRoYXQgbWlzdGFrZS4KKworU28gSSBtYXBwZWQgZXNjIGluIGNvbW1hbmQgbW9kZSB0byBzZXQgaW5zZXJ0IG1vZGUgKCI6c2V0IGltIikgYW5kIEkgbWFwcGVkCitlc2MgaW4gaW5zZXJ0IG1vZGUgdG8gdW5zZXQgaW5zZXJ0IG1vZGUgKCZsdDtjLW8mZ3Q7OnNldCBpbSkgIFdlbGwgdGhlbiBJCityZWFsaXplZCBpZiB5b3UgaGl0ICJpIiBpbiBjb21tYW5kIG1vZGUsIGVzY2FwZSB3b3VsZGluZyB3b3JrIHRoZSBmaXJzdCB0aW1lLgorU28gaGVyZSdzIHRoZSBjb2RlIHRvIGFkZCB0byB5b3VyIHZpbXJjOgorCitzZXQgaW0hCQkJICAgICAiIHN0YXJ0IGluIGluc2VydCBtb2RlIG1hcCAmbHQ7ZXNjJmd0OyA6c2V0CitpbSEmbHQ7Y3ImZ3Q7CSAgICAiIGVzY2FwZSBpbiBjb21tYW5kIG1vZGUgZ29lcyB0byBpbnNlcnQgbW9kZSBtYXAKK2kgOnNldCBpbSEmbHQ7Y3ImZ3Q7CSAgICAgICAiIGkgaW4gY29tbWFuZCBtb2RlIGdvZXMgdG8gaW5zZXJ0IG1vZGUKK21hcCEgJmx0O2VzYyZndDsgJmx0O2MtbyZndDs6c2V0IGltISZsdDtjciZndDsgIiBlc2NhcGUgaW4gaW5zZXJ0IG1vZGUgZ29lcwordG8gY29tbWFuZCBtb2RlCisKK3NlZSA6aGVscCBpbnNlcnQKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Q2hhbmdpbmcKK2Nhc2Ugd2l0aCByZWd1bGFyIGV4cHJlc3Npb25zPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI5OCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTg8L0E+PEJSPgorCitJIHN0dW1ibGVkIGFjcm9zcyB0aGlzIGZhY3RvaWQgb24gYSB3ZWJzaXRlIGFib3V0IHZpLiBJIGhhdmVuJ3QgYmVlbiBhYmxlIHRvCitsb2NhdGUgaXQgaW4gdGhlIFZpbSBkb2N1bWVudGF0aW9uLCBidXQgaXQgd29ya3MgaW4gVmltLCBhbmQgaXQncyB2ZXJ5IGhhbmR5LgorCitUaGVyZSBhcmUgdGltZXMgdGhhdCB5b3UgbWlnaHQgbGlrZSB0byBnbyB0aHJvdWdoIGEgZmlsZSBhbmQgY2hhbmdlIHRoZSBjYXNlCitvZiBjaGFyYWN0ZXJzIHRoYXQgbWF0Y2ggc29tZSBhcmJpdHJhcnkgY3JpdGVyaWEuIElmIHlvdSB1bmRlcnN0YW5kIHJlZ3VsYXIKK2V4cHJlc3Npb25zIHdlbGwsIHlvdSBjYW4gYWN0dWFsbHkgZG8gdGhpcyBmYWlybHkgZWFzaWx5LgorCitJdCdzIGFzIHNpbXBsZSBhcyBwbGFjaW5nIFxVIG9yIFxMIGluIGZyb250IG9mIGFueSBiYWNrcmVmZXJlbmNlcyBpbiB5b3VyCityZWd1bGFyIGV4cHJlc3Npb25zLiBWaW0gd2lsbCBtYWtlIHRoZSB0ZXh0IGluIHRoZSBiYWNrcmVmZXJlbmNlIHVwcGVyY2FzZQorb3IgbG93ZXJjYXNlIChyZXNwZWN0aXZlbHkpLgorCisoQSAiYmFja3JlZmVyZW5jZSIgaXMgYSBwYXJ0IG9mIGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVmZXJzIHRvIGEgcHJldmlvdXMKK3BhcnQgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24uIFRoZSBtb3N0IGNvbW1vbiBiYWNrcmVmZXJuY2VzIGFyZSAmLCBcMSwgXDIsCitcMywgLi4uICwgXDkpLgorCitTb21lIGV4YW1wbGVzIHRoYXQgZGVtb25zdHJhdGUgdGhlIHBvd2VyIG9mIHRoaXMgdGVjaG5pcXVlOgorCitMb3dlcmNhc2UgdGhlIGVudGlyZSBmaWxlIC0gOiVzLy4qL1xMJi9nCisKKygmIGlzIGEgaGFuZHkgYmFja3JlZmVyZW5jZSB0aGF0IHJlZmVycyB0byB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGUgbWF0Y2guKQorCitVcHBlcmNhc2UgYWxsIHdvcmRzIHRoYXQgYXJlIHByZWNlZGVkIGJ5IGEgJmx0OyAoaS5lLiBvcGVuaW5nIEhUTUwgdGFnIG5hbWVzKToKKzolcy8mbHQ7XChcdypcKS8mbHQ7XFVcMS9nCisKK1BsZWFzZSBhZGQgYSBub3RlIGlmIHlvdSBrbm93IHdoZXJlIHRoaXMgaXMgaW4gdGhlIGRvY3VtZW50YXRpb24uIEkgaGF2ZQorZG9uZSBDdHJsLUQgc2VhcmNoZXMgb24gdXBwZXIsIGxvd2VyLCBcVSwgYW5kIFxMIHdpdGggbm8gbHVjay4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPk9wZW4gZmlsZSB1bmRlciBjdXJzb3IuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTI5OSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0yOTk8L0E+PEJSPgorCitBIGxpdHRsZSB0aGluZyB0aGF0IEkgZGlkIGFuZCBmb3VuZCBxdWl0ZSB1c2VmdWw6CisKK2Z1bmN0aW9uISBPcGVuRmlsZVVuZGVyQ3Vyc29yKCkKKwlsZXQgRmlsZU5hbWUgPSBleHBhbmQoIiZsdDtjZmlsZSZndDsiKSBsZXQgT2xkUGF0aCA9IGdldGN3ZCgpIHNpbGVudCBjZAorCSU6cDpoIGV4ZWN1dGUgInNpbGVudCBzcCArZSAiIC4gRmlsZU5hbWUgZXhlY3V0ZSAic2lsZW50IGNkICIgLiBPbGRQYXRoCitlbmRmdW5jdGlvbgorCittYXAhIHNpbGVudCAmbHQ7TS1lJmd0OyA6Y2FsbCBPcGVuRmlsZVVuZGVyQ3Vyc29yKCkmbHQ7Q1ImZ3Q7CisKK1RoZW4gdXNlIEFsdCtFIG9uIGEgZmlsZW5hbWUgdG8gb3BlbiBpdCAocmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSB0aGUKK2N1cnJlbnQgZmlsZSByZXNpZGVzIGluKS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+TWFraW5nCithIHRhZ3MgZmlsZSBmb3IgSURMIChJbnRlcmFjdGl2ZSBEYXRhIExhbmd1YWdlKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzAwPC9BPjxCUj4KKworSSBoYXZlIHJlY2VudGx5IGJlZ2FuIHVzaW5nIHRoZSB0YWdzIGZlYXR1cmVzIG9mIHZpbSAoOmhlbHAgdGFncykgd2l0aCBteQorZm9ydHJhbiBjb2RlcyBhbmQgY29tZSB0byBhcHByZWNpYXRlIHRoZWlyIHBvd2VyLiAgSSBhbHNvIGRvIGEgbG90IG9mIGNvZGluZworaW4gSURMIChJbnRlcmFjdGl2ZSBEYXRhIExhbmd1YWdlKSwgYnV0IGZvdW5kIHRoYXQgY3RhZ3MgZGlkIG5vdCBoYXZlIG5hdGl2ZQorc3VwcG9ydCBmb3IgSURMLiAgSWYgeW91IHRha2UgdGhlIHRpbWUgeW91IGNhbiBsZWFybiBob3cgdG8gZ2V0IGN0YWdzIHRvCitzdXBwb3J0IElETCwgYnV0IEkgZm91bmQsIGFmdGVyIGEgc2VhcmNoIG9mIHVzZW5ldCwgdGhhdCBzb21lb25lIGVsc2UgaGFzCithbHJlYWR5IGRvbmUgdGhpcyBhbmQgd3JpdHRlbiBhIHBlcmwgc2NyaXB0IGNhbGxlZCBpZGx0YWdzLiAgSXQgaXMgcGFydAorb2YgYW4gZW1hY3MgcGFja2FnZSAoaXMgYW55b25lIHN0aWxsIHJlYWRpbmc/KSB0aGF0IHlvdSBuZWVkIHRvIGRvd25sb2FkLAorY2FsbGVkIGlkbHdhdmUsIHdoaWNoIGlzIGxvY2F0ZWQgYXQ6CisJCSAgICAgIDxBIEhSRUY9Imh0dHA6Ly9pZGx3YXZlLm9yZy8iPmh0dHA6Ly9pZGx3YXZlLm9yZy88L0E+PEJSPgorYW5kIGN1cnJlbnRseSAoSSBkb24ndCBrbm93IGlmIHRoaXMgd2lsbCBjaGFuZ2UpIHRoZSBkaXJlY3QgZG93bmxvYWQgbGluayBpcworCQkgICAgICA8QQorCQkgICAgICBIUkVGPSJodHRwOi8vaWRsd2F2ZS5vcmcvZG93bmxvYWQvaWRsd2F2ZS50YXIuZ3oiPmh0dHA6Ly9pZGx3YXZlLm9yZy9kb3dubG9hZC9pZGx3YXZlLnRhci5nejwvQT48QlI+CitJbiB0aGUgdXNlbmV0IHBhZ2VzIHRoZSBtYWludGFpbmVyLCBKRCBTbWl0aCwgd2FzIHN1Z2dlc3RpbmcgdGhhdCBpZGx3YXZlCitoYWQgb3V0Z3Jvd24gaWRsdGFncyBhbmQgd2FzIG5vdCBzdXJlIGl0IHdhcyBzdGlsbCBuZWVkZWQsIHNvIEkgZG9uJ3Qga25vdworaG93IGxvbmcgaXQgd2lsbCBiZSBhdmFpbGFibGUuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkVkaXQKK2ZpbGVzIGluIHBhdGgsIG9yIHJlbGF0ZWQuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMwMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDE8L0E+PEJSPgorCitZb3UgY2FuIHdyaXRlIGEgbGl0dGxlIHNoZWxsIGZ1bmN0aW9uIHRoYXQgd2lsbCBsZXQgeW91IGVhc2lseSBlZGl0IGFueSBmaWxlCit0aGF0IGlzIGluIHRoZSBwYXRoLCBvciB3aGljaCdzIGxvY2F0aW9uIGNhbiBiZSByZXRyaWV2ZWQgd2l0aCB0aGUgd2hlcmVpcwordG9vbC4gVGhpcyBpcyBzb21ldGhpbmcgc2ltaWxhciB0byB3aGF0IEkgaGF2ZSBpbiAvZXRjL3Byb2ZpbGU6CisKK2Z1bmN0aW9uIHZ2aW0oKSB7IHZpbSBgd2hlcmVpcyAkMXxjdXQgLWQ6IC1mMmAgfSBmdW5jdGlvbiBnZ3ZpbSgpIHsgZ3ZpbQorYHdoZXJlaXMgJDF8Y3V0IC1kOiAtZjJgIH0KKworVGhlbiBqdXN0IHR5cGUsIGZvciBleGFtcGxlLCAidnZpbSBscyIsIGFuZCB5b3UnbGwgc3RhcnQgdmltIHdpdGggL2Jpbi9scworYW5kIC91c3Ivc2hhcmUvbWFuL2xzLjEuZ3ogbG9hZGVkIDopIChpdCdzIG5vdCB2ZXJ5IHVzZWZ1bCB0byBlZGl0IC9iaW4vbHMsCitidXQgeW91IGdldCB0aGUgaWRlZWEgOykKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlVzZSBndmltIGluIGttYWlsPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMwMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDI8L0E+PEJSPgorCitUbyBhdXRvbWF0aWNhbGx5IG9wZW4gZ3ZpbSB0byBlZGl0IGluIGttYWlsLCAiLWYiIGNvbW1hbmQgbGluZSBvcHRpb24gbXVzdAorYmUgdXNlZCAuICBJbiBrbWFpbCBjb25maWd1cmF0aW9uIGdvIHRvIHRoZSBjb21wb3NlciBzZXR0aW5ncyAsIGFuZCB3cml0ZQoraW4gdGhlICJ1c2UgZXh0ZXJuYWwgZWRpdG9yIiBmaWVsZCB0aGUgZm9sbG93aW5nIGNvbW1hbmQgOiAiZ3ZpbSAtZiAlZiIKK1dpdGhvdXQgLWYgb3B0aW9uIGd2aW0gd291bGQgd29yayBpbiBiYWNrZ3JvdW5kIGFuZCBlZGl0aW5nIHdvdWxkIG5vdCBoYXZlCithbnkgZWZmZWN0IG9uIGttYWlsLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5TdGF0dXNsaW5lCitUYWIgTGV2ZWwgRnVuY3Rpb24gUnVsZXIgVFZJTTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDMiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzAzPC9BPjxCUj4KKworSSB1c2UgdGhpcyBmdW5jdGlvbiB0byBsZXQgbWUga25vdyBpZiBteSBjdXJzb3IgaXMgb24gYSBUQUIgY29sdW1uLiAgVGhlIHQqCitvbiB0aGUgcnVsZXIgbWVhbnMgSSBhbSBub3QuIEJ1dCB0MyBtZWFucyB0aGUgY3Vyc29yIGlzIG9uIHRhYmxldmVsIDMgfnZpbXJjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNeSBSdWxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcjQsYzEzLHQzIH52aW1yYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTXkgUnVsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHI0LGMxNCx0KiBJZiB5b3UKK3dhbnQgdG8gY2hhbmdlIGEgdGFiIGxldmVsIHlvdSBjYW4gZHJhZyBvciBwdXNoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBsaW5lCit0byBhIGRlc2lyZWQgdGFiIGxldmVsLiAobW9yZSBvbiB0aGF0IGxhdGVyKSBUaGlzIHJ1bGVyIHJlcGxhY2VtZW50IHdpbGwgbGV0Cit5b3Uga25vdyB3aGVyZSB5b3UgYXJlLCB3aGV0aGVyIHlvdSBsaWtlIHRvIHVzZSBzcGFjZSB0YWJzIChzZWUgdmltdGlwICMxMiApCitvciByZWd1bGFyIHRhYnMuICBNeSBmdW5jdGlvbiBpcyBzZXQgdG8gZm91ciBzcGFjZSB0YWJzIHN0b3BzIGFuZCBvbmx5IGdvZXMKKzkgbGV2ZWxzIGJ1dCBjYW4gYmUgZWFzaWx5IG1vZGlmaWVkLgorCitBY3R1YWxseSBJIGp1c3Qgd2FudGVkIHRvIGxlYXJuIGhvdyB0byB1c2UgYSBmdW5jdGlvbiBpbiBteSBfdmltcmMgYW5kIHRoaXMKK3dhcyBteSBmaXJzdCBhdHRlbXB0LiAgQWRkIHRoaXMgdG8geW91ciBfdmltcmMKKworIi0tLS0tLS0tLS0tLS0tLS0tLS0tY3V0LS0tLS0tLS0tLS0tLS0tLS0tIHNldCBsYXN0c3RhdHVzPTIgIlRoaXMgbWFrZXMgc3VyZQordGhlIHJ1bGVyIHNob3dzLiAgU2VlCSBoZWxwIGxhc3RzdGF0dXMgc2V0IHN0YXR1c2xpbmU9JWZcIC0tLS0tLS0tLVwgTXlcCitSdWxlclwgLS0tLS0tLS0tLVwgciVsLGMlYyx0JXtTaG93VGFiKCl9ICJTZWUgaGVscCBzdGF0dXNsaW5lICAoSSB0b2dnbGUKK2JldHdlZW4gMTIgaGVscGZ1bCBydWxlcnMgLS0gbW9yZSBvbiB0aGF0IGxhdGVyKSBmdSBTaG93VGFiKCkKKyAgICBsZXQgVGFiTGV2PScqJyBsZXQgQ29sPShjb2woIi4iKSkgIGlmIENvbCA9PSAxIHwgbGV0IFRhYkxldj0nMCcgfAorICAgIGVuIGlmIENvbCA9PSA1IHwgbGV0IFRhYkxldj0nMScgfCBlbiBpZiBDb2wgPT0gOSB8IGxldCBUYWJMZXY9JzInIHwKKyAgICBlbiBpZiBDb2wgPT0xMyB8IGxldCBUYWJMZXY9JzMnIHwgZW4gaWYgQ29sID09MTcgfCBsZXQgVGFiTGV2PSc0JyB8CisgICAgZW4gaWYgQ29sID09MjEgfCBsZXQgVGFiTGV2PSc1JyB8IGVuIGlmIENvbCA9PTI1IHwgbGV0IFRhYkxldj0nNicgfAorICAgIGVuIGlmIENvbCA9PTI5IHwgbGV0IFRhYkxldj0nNycgfCBlbiBpZiBDb2wgPT0zMyB8IGxldCBUYWJMZXY9JzgnIHwKKyAgICBlbiBpZiBDb2wgPT0zNyB8IGxldCBUYWJMZXY9JzknIHwgZW4KK3JldHVybiBUYWJMZXYgZW5kZiAiVGhlIHJ1bGVyIChzdGF0dXNsaW5lKSBzaG93cyBhIHQqIHVubGVzcyB5b3UgYXJlIG9uCitjb2wgMSw1LDksMTMsLi4uICAiLS0tLS0tLS0tLS0tLS0tLS0tLWN1dC0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmdW5jdGlvbiBTaG93VGFiKCkgZ2V0cyBjYWxsZWQgYW5kIHVwZGF0ZXMgdGhlIHJ1bGVyIHdpdGggZXZlcnkgY3Vyc29yCittb3ZlIGJ1dCBpdCBkb2VzIG5vdCBzbG93IHRoaW5ncyBkb3duIGFzIEkgdHlwZS4gIFBlcmhhcHMgYSBzcGVlZCB0eXBpc3QKK21heSBjb21wbGFpbiA6LSkgSW4gY2FzZSBJIHdyaXRlIHNvbWV0aGluZyBlbHNlIHlvdSBtYXkgc2VhcmNoIG9uIHRoZSBrZXkKK3dvcmQgVFZJTSBCZXN0IFdpc2hlcwkgICAgIFRWSU0gVGFtZWQgVmltCSAgIHBhcmFkb2NzQGZyb250aWVybmV0Lm5ldAorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+Zm9sZCBicmFjZXMgYW5kIGphdmFkb2M8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzA0Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMwNDwvQT48QlI+CisKK0lmIHlvdSdkIGxpa2UgdG8gaGF2ZSBqYXZhZG9jIGZvbGRlZCB0b2dldGhlciB3aXRoIGFyZWFzIGluIGJyYWNlcyB0cnkgdGhhdAorJmx0O3ByZSZndDsgc2V0IGZvbGRtZXRob2Q9c3ludGF4IHNldCBmb2xkZW5hYmxlIHN5biByZWdpb24gZm9sZEJyYWNlcworc3RhcnQ9L3svIGVuZD0vfS8gdHJhbnNwYXJlbnQgZm9sZCBzeW4gcmVnaW9uIGZvbGRKYXZhZG9jIHN0YXJ0PSwvXCpcKiwKK2VuZD0sXCovLCB0cmFuc3BhcmVudCBmb2xkIGtlZXBlbmQgJmx0Oy9wcmUmZ3Q7IGFuZCBwbGF5IGEgYml0IHdpdGg6CismbHQ7cHJlJmd0OyBzZXQgZm9sZGxldmVsPTAgc2V0IGZvbGRuZXN0bWF4PTEwICZsdDsvcHJlJmd0OyBwYXJhbWV0ZXJzCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPkJlc3QKK29mIFZJTSBUaXBzIChWSU0ncyBiZXN0IEZlYXR1cmVzKTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzA1PC9BPjxCUj4KKworSGVyZSdzIGEgbmVjZXNzYXJpbHkgY3J5cHRpYyBsaXN0IG9mICJNWSIgQmVzdCBWaW0gVGlwcwordGhhdCBJJ3ZlIGdsZWFuZWQgZnJvbSA8QSBIUkVGPSJodHRwOi8vdmltLnNmLm5ldC8gICYKK2NvbXAuZWRpdG9ycyAgIj5odHRwOi8vdmltLnNmLm5ldC8gICYgY29tcC5lZGl0b3JzICA8L0E+PEJSPiA8QQorSFJFRj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3Vwcz9zYWZlPW9mZiZncm91cD1jb21wLmVkaXRvcnMiPmh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/c2FmZT1vZmYmZ3JvdXA9Y29tcC5lZGl0b3JzPC9BPjxCUj4KKwordXBkYXRlZCB2ZXJzaW9uIGF0IDxBCitIUkVGPSJodHRwOi8vd3d3LnJheW5pbmZvLmNvLnVrL3ZpbXRpcHMuaHRtbCI+aHR0cDovL3d3dy5yYXluaW5mby5jby51ay92aW10aXBzLmh0bWw8L0E+PEJSPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFic29sdXRlbHkgZXNzZW50aWFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZpbS5zZi5uZXQJICAgOiBWaXNpdCBmcmVxdWVudGx5IGNvbXAuZWRpdG9ycyAgICA6ICJWSU0iIGRvbWluYXRlZAorbmV3c2dyb3VwICogIyBnKiBnIwkgICAgIDogZmluZCB3b3JkIHVuZGVyIGN1cnNvciAoZm9yd2FyZHMvYmFja3dhcmRzKQorJQkJICAgIDogbWF0Y2ggYnJhY2tldHMge31bXSgpIG1hdGNoaXQudmltICAgICAgOiAlIG5vdyBtYXRjaGVzCit0YWdzICZsdDt0ciZndDsmbHQ7dGQmZ3Q7Jmx0O3NjcmlwdCZndDsgZXRjICZsdDtDLU4mZ3Q7ICZsdDtDLVAmZ3Q7ICAgOiB3b3JkCitjb21wbGV0aW9uIGluIGluc2VydCBtb2RlICZsdDtDLVgmZ3Q7Jmx0O0MtTCZndDsgICAgOiBMaW5lIGNvbXBsZXRlIFNVUEVSCitVU0VGVUwgLyZsdDtDLVImZ3Q7Jmx0O0MtVyZndDsJIDogUHVsbCAmbHQ7Y3dvcmQmZ3Q7IG9udG8gc2VhcmNoL2NvbW1hbmQKK2xpbmUgOnNldCBpZ25vcmVjYXNlICMgeW91IG5lYXJseSBhbHdheXMgd2FudCB0aGlzIDpzeW50YXggb24JIDogY29sb3VyCitzeW50YXggaW4gUGVybCxIVE1MLFBIUCBldGMgOmggc2xhc2gmbHQ7Qy1EJmd0OyA6IHR5cGUgY29udHJvbC1EIGFuZCBnZXQgYQorbGlzdCBhbGwgaGVscCB0b3BpY3MgY29udGFpbmluZworCQkgICBzbGFzaCAocGx1cyB1c2UgVEFCIGZvciBIZWxwIGNvbXBsZXRpb24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTUFLRSBJVCBFQVNZIFRPIFVQREFURS9SRUxPQURfdmltcmMgOm5tYXAKKyxzIDpzb3VyY2UgJFZJTS9fdmltcmMgOm5tYXAgLHYgOmUgJFZJTS9fdmltcmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI1ZJU1VBTCBNT0RFIE1hcHBpbmdzIDp2bWFwIHNiICJ6ZGkmbHQ7YiZndDsmbHQ7Qy1SJmd0O3ombHQ7L2ImZ3Q7Jmx0O0VTQyZndDsKKzogd3JhcCAmbHQ7YiZndDsmbHQ7L2ImZ3Q7IGFyb3VuZCBWSVNVQUxMWSBzZWxlY3RlZAorVGV4dCA6dm1hcCBzdCAiemRpJmx0Oz89ICZsdDtDLVImZ3Q7eiA/Jmd0OyZsdDtFU0MmZ3Q7Cis6IHdyYXAgJmx0Oz89CT8mZ3Q7IGFyb3VuZCBWSVNVQUxMWSBzZWxlY3RlZCBUZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhwbG9yaW5nIDpFeAkJCQkgICAgOiBmaWxlIGV4cGxvcmVyIG5vdGUgY2FwaXRhbCBFeCBcYmUKKzogYnVpbHRpbiBidWZmZXIgZXhwbG9yZXIgOmxzCQkJCSAgOiBsaXN0IG9mIGJ1ZmZlcnMoZWcKK2ZvbGxvd2luZykgOmNkIC4uCQkJICAgOiBtb3ZlIHRvIHBhcmVudCBkaXJlY3RvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHcmVhdCBndXUJCQkJOiBsb3dlcmNhc2UgbGluZSBnVVUKKzogdXBwZXJjYXNlIGxpbmUgZ2YJCQkJIDogb3BlbiBmaWxlIG5hbWUgdW5kZXIKK2N1cnNvciAoU1VQRVIpIGdhCQkJICAgICAgIDogZGlzcGxheSBoZXgsYXNjaWkgdmFsdWUgb2YKK2NoYXJhY3RlciB1bmRlciBjdXJzb3IgZ2dWR2c/CQkJICAgICAgIDogcm90MTMgd2hvbGUgZmlsZQorQ1RSTC1BLENUUkwtWAkJCTogaW5jcmVtZW50LGRlY2VyZW1lbnQgbnVtYmVyIHVuZGVyIGN1cnNvcgorCQkJCSAgd2luMzIgdXNlcnMgbXVzdCByZW1hcCBDTlRSTC1BCitDVFJMLVI9NSo1CQkJOiBpbnNlcnQgMjUgaW50byB0ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZXMgYWxsIG90aGVyIHRpcHMgc3VwZXJmbHVvdXMgOmggNDIgOmggaG9seS1ncmFpbCA6aGVscCEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYXJrZXJzICYgbW92aW5nIGFib3V0ICcuCQkgIDoganVtcCB0byBsYXN0IG1vZGlmaWNhdGlvbgorbGluZSAoU1VQRVIpIGAuCQkgICAgICA6IGp1bXAgdG8gZXhhY3Qgc3BvdCBpbiBsYXN0IG1vZGlmaWNhdGlvbgorbGluZSAmbHQ7Qy1PJmd0OwkgICAgOiByZXRyYWNlIHlvdXIgbW92ZW1lbnRzIGluIGZpbGUKKyhvbGQpICZsdDtDLUkmZ3Q7CSAgICAgOiByZXRyYWNlIHlvdXIgbW92ZW1lbnRzIGluIGZpbGUgKG5ldykKKzpqdShtcHMpIDpoZWxwIGp1bXAtbW90aW9ucyA6aGlzdG9yeQkgICAgICA6IGxpc3Qgb2YgYWxsIHlvdXIgY29tbWFuZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBYmJyZXZpYXRpb25zICYgbWFwcyA6bWFwICAgJmx0O2Y3Jmd0OyAgIDonYSwnYnchIGM6L2FhYS94IDptYXAgICAmbHQ7ZjgmZ3Q7Cis6ciBjOi9hYWEveCA6bWFwICAgJmx0O2Y5Jmd0Owk6dyZsdDtDUiZndDs6IWM6L3BocC9waHAuZXhlICUmbHQ7Q1ImZ3Q7Cis6bWFwICAgJmx0O2YxMSZndDsgIDoudyEgYzovYWFhL3hyJmx0O0NSJmd0OyA6bWFwICAgJmx0O2YxMiZndDsgIDpyCitjOi9hYWEveHImbHQ7Q1ImZ3Q7IDphYiBwaHAJICAgICAgOiBsaXN0IG9mIGFiYnJldmlhdGlvbnMgYmVnaW5uaW5nCitwaHAgOm1hcCAsCSAgICAgIDogbGlzdCBvZiBtYXBzIGJlZ2lubmluZyAsICMgRm9yIHVzZSBpbiBNYXBzCismbHQ7Q1ImZ3Q7CSAgICAgICA6IGNhcnJpYWdlIFJldHVybiBmb3IgbWFwcyAmbHQ7RVNDJmd0OwkJIDoKK0VzY2FwZSAmbHQ7TEVBREVSJmd0OwkgICAgICA6IG5vcm1hbGx5IFwgJmx0O0JBUiZndDsJCSAgOiB8IHBpcGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaXN0IHlvdXIgUmVnaXN0ZXJzIDpyZWcJICAgICAgIDogZGlzcGxheSBjb250ZW50cworb2YgYWxsIHJlZ2lzdGVycyAiMXAuLi4uCSAgOiByZXRyaWV2ZSBudW1lcmljIGJ1ZmZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVc2VmdWwgdHJpY2sgImF5eUBhCQkgOiBleGVjdXRlICJWaW0gY29tbWFuZCIgaW4gYQordGV4dCBmaWxlIHl5QCIJCSAgICA6IHNhbWUgdGhpbmcgdXNpbmcgdW5uYW1lZCByZWdpc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdldCBvdXRwdXQgZnJvbSBvdGhlciBjb21tYW5kcyA6ciFscy5leGUJICA6CityZWFkcyBpbiBvdXRwdXQgb2YgbHMgISFkYXRlCSAgICAgICA6IHNhbWUgdGhpbmcKKzolIXNvcnQgLXUJIDogdXNlIGFuIGV4dGVybmFsIHByb2dyYW0gdG8gZmlsdGVyIGNvbnRlbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNdWx0aXBsZSBGaWxlcyBNYW5hZ2VtZW50IDp3bgkJICAgICA6IHdyaXRlIGZpbGUgYW5kIG1vdmUgdG8KK25leHQgKFNVUEVSKSA6YmQJICAgICAgOiByZW1vdmUgZmlsZSBmcm9tIGJ1ZmZlciBsaXN0IChTVVBFUikKKzpzYXYgcGhwLmh0bWwJIDogU2F2ZSBjdXJyZW50IGZpbGUgYXMgcGhwLmh0bWwgYW5kICJtb3ZlIiB0byBwaHAuaHRtbAorOnNwIGZyZWQudHh0CSA6IG9wZW4gZnJlZC50eHQgaW50byBhIHNwbGl0IDplIQkgICAgICAgOiByZXR1cm4gdG8KK3VubW9kaWZpZWQgZmlsZSA6dyBjOi9hYWEvJQkgOiBzYXZlIGZpbGUgZWxzZXdoZXJlIDplICMJCSAgICA6CitlZGl0IGFsdGVybmF0aXZlIGZpbGUgOmUgJSA6cmV3CQkgICAgICAgOiByZXd3aW5kIHRvIGZpcnN0IGZpbGUgaW4KK0FSR1MgOmJuCQkgOiBuZXh0IGZpbGUgOmJwCQkgOiBuZXh0IGZpbGUgOmJyZXcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWNvcmRpbmcgKEJFU1QgVElQIG9mIEFMTCkgcXEgICMgcmVjb3JkIHRvIHEgeW91ciBjb21tYW5kcworcSBAcSB0byBleGVjdXRlIEBAIHRvIFJlcGVhdCAjIGVkaXRpbmcgYSByZWdpc3Rlci9yZWNvcmRpbmcgImFwCismbHQ7eW91IGNhbiBub3cgc2VlIHJlZ2lzdGVyIGNvbnRlbnRzLCBlZGl0IGFzIHJlcXVpcmVkJmd0OyAiYWRkIEBhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgX3ZpbXJjIGVzc2VudGlhbHMgOnNldCBpbmNzZWFyY2ggOiBqdW1wcyB0byBzZWFyY2ggd29yZCBhcyB5b3UgdHlwZSAoYW5ub3lpbmcKK2J1dCBleGNlbGxlbnQpIDpzZXQgd2lsZGlnbm9yZT0qLm8sKi5vYmosKi5iYWssKi5leGUgOnNldCBzaGlmdHdpZHRoPTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsYXVuY2hpbmcgV2luIElFIDpubWFwICxmIDp1cGRhdGUmbHQ7Q1ImZ3Q7OnNpbGVudAorIXN0YXJ0IGM6XHByb2dyYX4xXGludGVybn4xXGlleHBsb3JlLmV4ZQorZmlsZTovLyU6cCZsdDtDUiZndDsgOm5tYXAgLGkgOnVwZGF0ZSZsdDtDUiZndDs6ICFzdGFydAorYzpccHJvZ3JhfjFcaW50ZXJufjFcaWV4cGxvcmUuZXhlICZsdDtjV09SRCZndDsmbHQ7Q1ImZ3Q7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRlRQaW5nIGZyb20gVklNIGNtYXAgLHIgIDpOcmVhZCA8QQorSFJFRj0iZnRwOi8vMjA5LjUxLjEzNC4xMjIvcHVibGljX2h0bWwvaW5kZXguaHRtbAorIj5mdHA6Ly8yMDkuNTEuMTM0LjEyMi9wdWJsaWNfaHRtbC9pbmRleC5odG1sIDwvQT48QlI+IGNtYXAgLHcJOk53cml0ZSA8QQorSFJFRj0iZnRwOi8vMjA5LjUxLjEzNC4xMjIvcHVibGljX2h0bWwvaW5kZXguaHRtbCI+ZnRwOi8vMjA5LjUxLjEzNC4xMjIvcHVibGljX2h0bWwvaW5kZXguaHRtbDwvQT48QlI+CitndmltIDxBCitIUkVGPSJmdHA6Ly8yMDkuNTEuMTM0LjEyMi9wdWJsaWNfaHRtbC9pbmRleC5odG1sIj5mdHA6Ly8yMDkuNTEuMTM0LjEyMi9wdWJsaWNfaHRtbC9pbmRleC5odG1sPC9BPjxCUj4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhcHBlbmRpbmcgdG8gcmVnaXN0ZXJzICh1c2UgQ0FQSVRBTCkgIyB5YW5rCis1IGxpbmVzIGludG8gImEiIHRoZW4gYWRkIGEgZnVydGhlciA1ICJhNXl5IDEwaiAiQTV5eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbSSAgICAgOiBzaG93IGxpbmVzIG1hdGNoaW5nIHdvcmQgdW5kZXIgY3Vyc29yICZsdDtjd29yZCZndDsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI0NvbnZlbnRpb25hbCBTaGlmdGluZyA6J2EsJ2ImZ3Q7Jmd0OyAjIHZpc3VhbCBzaGlmdGluZworKGJ1aWx0aW4tcmVwZWF0KSA6dm5vcmVtYXAgJmx0OyAmbHQ7Z3YgOnZub3JlbWFwICZndDsgJmd0O2d2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2VhcmNoaW5nIC9eam9lLipmcmVkLipiaWxsLyA6IG5vcm1hbCAvXltBLUpdXCsvCSAgIDogc2VhcmNoCitmb3IgbGluZXMgYmVnaW5uaW5nIEEtSiBmb2xsb3dlZCBieSBhdCBsZWF0IDEgQS1KIC9mb3J1bVwoXF8uXCkqcGVudAorc2VhcmNoIG92ZXIgcG9zc2libGUgbXVsdGlwbGUgbGluZXMgL2ZyZWRcX3Mqam9lL2kgICAgOiBhbnkKK3doaXRlc3BhY2UgaW5jbHVkaW5nIG5ld2xpbmUgL2ZyZWRcfGpvZSAgICAgICAgOiBTZWFyY2ggZm9yIEZSRUQgT1IgSk9FCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNzdWJzdGl0dXRpb24gOiVzL2ZyZWQvam9lL2lnYwkJICA6IGdlbmVyYWwgc3Vic3RpdHV0ZSBjb21tYW5kCis6JXMvXHIvL2cJCSAgICA6IERlbGV0ZSBET1MgcmV0dXJucyBeTSA6J2EsJ2JnL2ZyZWQvcy9kaWNrL2pvZS9nYworOiBWRVJZIFVTRUZVTCA6cy9cKC4qXCk6XCguKlwpL1wyIDogIFwxLyAgOiByZXZlcnNlIGZpZWxkcyBzZXBhcmF0ZWQKK2J5IDogOiVzL14uXHstfXBkZi9uZXcucGRmLyAgbm9uIGdyZWVkeSBtYXRjaGluZyAoaWUgdG8gZmlyc3QgcGRmKQorOnMvZnJlZC8mbHQ7Yy1yJmd0O2EvZyBzdWJzdGl0dXRlICJmcmVkIiB3aXRoIGNvbnRlbnRzIG9mIHJlZ2lzdGVyICJhIgorOiVzL15cKC4qXClcblwxL1wxJC8gIGRlbGV0ZSBkdXBsaWNhdGUgbGluZXMgIyBub24tZ3JlZWR5IG1hdGNoaW5nCitcey19IDolcy9eLlx7LX1wZGYvbmV3LnBkZi8gOmhlbHAgL1x7LX0gOnMvZnJlZC8mbHQ7Yy1yJmd0O2EvZworc3Vic3RpdHV0ZSAiZnJlZCIgd2l0aCBjb250ZW50cyBvZiByZWdpc3RlciAiYSIgIyBtdWx0aXBsZSBjb21tYW5kcworOiVzL1xmXCtcLmdpZlwmZ3Q7L1xyJlxyL2cgfCB2L1wuZ2lmJC9kIHwgJXMvZ2lmL2pwZy8gOiVzL3N1Y2tcfGJ1Y2svbG9vcHkvZ2MKKzogT1JpbmcgOnMvX19kYXRlX18vXD1zdHJmdGltZSgiJWMiKS8gOiBpbnNlcnQgZGF0ZXN0cmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGdsb2JhbCBjb21tYW5kIDpnL15ccyokL2QJICA6ZGVsZXRlIGFsbCBibGFuayBsaW5lcyA6ZyEvXmRkL2QJICAgOgorZGVsZXRlIGxpbmVzIG5vdCBjb250YWluaW5nIHN0cmluZyA6di9eZGQvZAkgICAgOiBkZWxldGUgbGluZXMgbm90Citjb250YWluaW5nIHN0cmluZyA6Zy9mcmVkLywvam9lL2QgIDogbm90IGxpbmUgYmFzZWQgOnYvLi8uLC8uLy0xam9pbiA6IGNvbXByZXNzCitlbXB0eSBsaW5lcyA6J2EsJ2IgZy9eRXJyb3IvIC4gdyAmZ3Q7Jmd0OyBlcnJvcnMudHh0IDpnL2NtYXBcfGZvcm0vcCAgOiBPUmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhc3RlIHJlZ2lzdGVyICogOnJlZGlyIEAqICAgOiByZWRpcmVjdCBjb21tYW5kcyB0byBwYXN0ZSA6cmVkaXIKK0VORCAiKnl5CTogeWFuayB0byBwYXN0ZSAiKnAJICAgIDogaW5zZXJ0IHBhc3RlIGJ1ZmZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZvcm1hdHRpbmcgdGV4dCBncSZsdDtDUiZndDsgZ3FhcCAgKGEgaXMgbW90aW9uIHAgcGFyYWdyYXBoICh2aXN1YWwgbW9kZSkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3BlcmF0ZSBjb21tYW5kIG92ZXIgbXVsdGlwbGUgZmlsZXMgOmFyZ2RvCislcy9mb28vYmFyLyA6YnVmZG8gJXMvZm9vL2Jhci8gOndpbmRvICVzL2Zvby9iYXIvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tbWFuZCBsaW5lIHRyaWNrcyBndmltIC1oIGxzIHwgZ3ZpbSAtICAgOiBlZGl0IGEgUElQRSEhICAjCit2Zy5rc2ggKHNoZWxsIHNjcmlwdCkgIyB2aSBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5IGNvbnRhaW5pbmcKK2tleXdvcmQgJDEgYW5kIGp1bXAgdG8gJDEgZ3ZpbS5leGUgLWMgIi8kMSIgICQoZ3JlcCAtaXNsICIkMSIgKikgJgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk9wZW4gYQord2ViLWJyb3dzZXIgd2l0aCB0aGUgVVJMIGluIHRoZSBjdXJyZW50IGxpbmU8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzA2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMwNjwvQT48QlI+CisKK2Z1bmN0aW9uISBCcm93c2VyICgpCisgICAgbGV0IGxpbmUgPSBnZXRsaW5lICgiLiIpICBsZXQgbGluZSA9IG1hdGNoc3RyIChsaW5lLCAiaHR0cFteIF0qIikgZXhlYworICAgICIhbmV0c2NhcGUgIi5saW5lCitlbmRmdW5jdGlvbgorCittYXAgJmx0O0xlYWRlciZndDt3IDpjYWxsIEJyb3dzZXIgKCkmbHQ7Q1ImZ3Q7CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPmFubm95aW5nCisiSGl0IGFueSBrZXkgdG8gY2xvc2UgdGhpcyB3aW5kb3cuLi4iPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMwNyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDc8L0E+PEJSPgorCitpIHVzZSBndmltIGFuZCBiYXNoIGhlYXZpbHkgdW5kZXIgd2luOTguICBpIGhhdmUKKworbGV0ICRIT01FID0gc3Vic3RpdHV0ZSgkSE9NRSwgJ1xcJywgJy8nLCAnZycpIHNldCBzaGVsbD1iYXNoXCAtLXJjZmlsZVwKK1wiJEhPTUVcIl9iYXNocmNcIC1pCisKK2luIG15IF92aW1yYywgYW5kIHNvbWV0aGluZyBsaWtlCisKK2Z1bmN0aW9uIGJyKCkgeyBpZiBbICQxIF07IHRoZW4KKwlleHBsb3Jlci5leGUgJHsxLy9cLy9cXH0KKyAgICBlbHNlCisJZXhwbG9yZXIuZXhlICR7UFdELy9cLy9cXH0KKyAgICBmaQorfQorCitpbiBteSBfYmFzaHJjLiB3aGVuIGkgZmluaXNoIGVkaXRpbmcgb25lIGh0bWwgZmlsZSwgaSBzaW1wbHkgdHlwZSA6IWJyICUKKworZXZlcnl0aGluZyB3b3JrcyBmaW5lIG5vdy4gYnV0IHdoZW4gOiFiciAlIGV4ZWN1dGVzLCBvbmUgY29uc29sZSB3aW5kb3cgd2lsbAorYnVtcCBvdXQgYW5kIHdhaXQgbWUgdG8gcHJlc3Mgc29tZSBrZXkgdG8gY29udGl1ZS4gaSBjb25zaWRlciB0aGlzIHF1aWV0Cithbm5veWluZy4gaSB3YW50IHRoZSBjb25zb2xlIHdpbmRvdyB0byBkaXNhcHBlYXIgYXV0b21hdGljYWxseSBpZiBubyBmYXVsdAoraGFzIGhhcHBlbmVkLiAgZG9lcyBhbnlvbmUga25vdyBob3cgdG8gYWNoaWV2ZSB0aGlzPyAgdGhhbmtzLgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+TW92ZSB0aHJvdWdoIHdyYXBwZWQgbGluZXMuPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMwOCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDg8L0E+PEJSPgorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgZmFjdCB0aGF0IHdoZW4geW91IHByZXNzIFVwIGFuZCBEb3duIG9uIGEgd3JhcHBlZCBsaW5lLAoreW91IGdldCB0byB0aGUgbmV4dCBwaGlzaWNhbCBsaW5lIGluc3RlYWQgb2YgdGhlIG5leHQgbGluZSBvbiB0aGUgc2NyZWVuLAoreW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCitpbWFwICZsdDtzaWxlbnQmZ3Q7ICZsdDtEb3duJmd0OyAmbHQ7Qy1vJmd0O2dqIGltYXAgJmx0O3NpbGVudCZndDsgJmx0O1VwJmd0OworJmx0O0MtbyZndDtnaworCitubWFwICZsdDtzaWxlbnQmZ3Q7ICZsdDtEb3duJmd0OyBnaiBubWFwICZsdDtzaWxlbnQmZ3Q7ICZsdDtVcCZndDsgZ2sKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Y2xvc2UKK3ZpbSB5b3UgbGVmdCBvcGVuIHJlbW90ZWx5PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMwOSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMDk8L0E+PEJSPgorCitWaW0gNiBoYXMgdGhpcyBjb29sIGNsaWVudC1zZXJ2ZXIgcHJvdG9jb2wuIEkgdXNlIGl0IGFsbCB0aGUgdGltZSB0byBlZGl0CithIGZpbGUgaW4gYW4gZXhpc3RpbmcgZ3ZpbSwgbGlrZSBzbyAkIGd2aW0gLS1yZW1vdGUgW2ZpbGVuYW1lXQorCitUb2RheSBJIGxlZnQgbXlzZWxmIGxvZ2dlZCBpbiBhdCB0aGUgY29uc29sZSBhdCB3b3JrLCBhbmQgd2hlbiBJIGdvdCBob21lCitJIHJlYWxpemVkIEkgaGFkIGxlZnQgdmltIHJ1bm5pbmcgd2l0aCBmaWxlcyAgdW5zYXZlZC4gSSB0aGluayBJIGV2ZW4gbGVmdAoraXQgaW4gaW5zZXJ0IG1vZGUuIEkgd2FudGVkIHRvIGVkaXQgdGhlc2UgZmlsZXMgYXQgaG9tZS4gU28gSSBzc2gnZCB0byB0aGUKK21hY2hpbmUgYW5kIHN0YXJ0ZWQgcGxheWluZyB3aXRoIHRoZSAtLXJlbW90ZSBjb21tYW5kcy4KKworOmhlbHAgd2FzIGEgYml0IGNyeXB0aWMKKyAgIC0tcmVtb3RlLXNlbmQge2tleXN9CQlTZW5kIHtrZXlzfSB0byBzZXJ2ZXIgYW5kIGV4aXQuCisKK0FmdGVyIGEgbG90IG9mIGZhaWxlZCBhdHRlbXB0cywgSSBmaW5hbGx5IHN1Y2NlZWRlZCBpbiBnZXR0aW5nIHRoZSByZW1vdGUKK3ZpbSB0byBzYXZlIGl0cyBidWZmZXJzIGFuZCBxdWl0LgorCiskIERJU1BMQVk9OjAgdmltIC0tc2VydmVybmFtZSBHVklNIC0tcmVtb3RlLXNlbmQgJyZsdDtFU0MmZ3Q7OndxYSZsdDtDUiZndDsnCisKK0EgY291cGxlIG9mIG5vdGFibGUgdGhpbmdzLiBUaGVuIGVudmlyb25tZW50IHZhcmlhYmxlIERJU1BMQVkgaGFzIHRvIGJlIHRoZQorZGlzcGxheSBvZiB0aGUgcmVtb3RlIHZpbSwgYW5kIHlvdSBoYXZlIHRvIGJlIGFibGUgdG8gb3BlbiB0aGF0IGRpc3BsYXkuIFRoZQorY2xpZW50LXNlcnZlciBzdHVmZiBpcyBkb25lIHRocm91Z2ggWC4KKworVGhlICZsdDtDUiZndDsgaXMgaW1wb3J0YW50LiBUaGlzIHBhcnQgZWx1ZGVkIG1lIGZvciBhIGxvbmcgdGltZS4gVGhlIHtrZXlzfQorYXJlIGp1c3QgbGlrZSBrZXlzIHlvdSB3b3VsZCBwcmVzcyBpZiB5b3Ugd2VyZSBlZGl0aW5nIGF0IHRoZSBjb25zb2xlLAorYW5kIHlvdSBoYXZlIHRvIHByZXNzIGVudGVyLCBvciB2aW0gd29uJ3QgZG8gYW55dGhpbmcuCisKK0NoZWNrIHlvdXIgLnN3cCBmaWxlcyB0byBtYWtlIHN1cmUgdmltIHJlYWxseSBjbG9zZWQgdGhlIGZpbGVzIGl0IHdhcworZWRpdGluZy4gVmltIHByb3ZpZGVzIGxpdHRsZSBmZWVkYmFjayBhcyB0byB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHdoYXQKK3lvdSdyZSB0cnlpbmcgdG8gZG8gcmVtb3RlbHkuIE5vbmV0aGVsZXNzLCBpdCdzIGNsZWFybHkgYSB1c2VmdWwgZmVhdHVyZSB0bworaGF2ZSBhdmFpbGFibGUuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnNob3dpbmcgYXNjaWkKK3ZhbHVlIG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpbiBkZWNpbWFsLCBoZXgsIGFuZCBvY3RhbDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMTAiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzEwPC9BPjxCUj4KKworZG9udCBrbm93IGlmIHlvdSBndXlzIGtub3cgdGhpcyBvciBub3QsIGJ1dCBpIHdhcyB0cnlpbmcgdG8gbWFrZSB0aGUgd29yZAorImhlbGxvIiB0byB1cHBlciBjYXNlIGJ5IHRyeWluZyAiZ2FVdyIgKD0gd2hpY2ggZGlkbnQgd29yayBidXQgaXQgc2hvd2VkCit0aGUgZGVjaW1hbCwgaGV4LCBhbmQgb2N0YWwgb2YgdGhlIGNoYXIgdW5kZXIgdGhlIGN1cnNvci4uLiBuY2llIHRvIGtub3cuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPk9wZW4KK3RoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgY3VycmVudGx5IG9wZW4gZmlsZTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMTEiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzExPC9BPjxCUj4KKworT2NjYXNpb25hbGx5LCBvbiB3aW5kb3dzLCBJIGhhdmUgZmlsZXMgb3BlbiBpbiBndmltLCB0aGF0IHRoZSBmb2xkZXIgZm9yIHRoYXQKK2ZpbGUgaXMgbm90IG9wZW4uIFRoaXMga2V5IG1hcCBvcGVucyB0aGUgZm9sZGVyIHRoYXQgY29udGFpbnMgdGhlIGN1cnJlbnRseQorb3BlbiBmaWxlLiBUaGUgZXhwYW5kKCkgaXMgc28gdGhhdCB3ZSBkb24ndCB0cnkgdG8gb3BlbiB0aGUgZm9sZGVyIG9mIGFuCithbm9ueW1vdXMgYnVmZmVyLCB3ZSB3b3VsZCBnZXQgYW4gZXhwbG9yZXIgZXJyb3IgZGlhbG9nIGluIHRoYXQgY2FzZS4KKworaWYgaGFzKCJndWlfcnVubmluZyIpCisgaWYgaGFzKCJ3aW4zMiIpCisgICAgIiBPcGVuIHRoZSBmb2xkZXIgY29udGFpbmluZyB0aGUgY3VycmVudGx5IG9wZW4gZmlsZS4gRG91YmxlICZsdDtDUiZndDsgYXQKKyAgICBlbmQgIiBpcyBzbyB5b3UgZG9uJ3QgaGF2ZSB0byBoaXQgcmV0dXJuIGFmdGVyIGNvbW1hbmQuIERvdWJsZSBxdW90ZXMgYXJlCisgICAgIiBub3QgbmVjZXNzYXJ5IGluIHRoZSAnZXhwbG9yZXIuZXhlICU6cDpoJyBzZWN0aW9uLiAgOm1hcCAmbHQ7c2lsZW50Jmd0OworICAgICZsdDtDLUY1Jmd0OyA6aWYgZXhwYW5kKCIlOnA6aCIpICE9ICIiJmx0O0NSJmd0Ozohc3RhcnQgZXhwbG9yZXIuZXhlCisgICAgJTpwOmgmbHQ7Q1ImZ3Q7OmVuZGlmJmx0O0NSJmd0OyZsdDtDUiZndDsKKyAgZW5kaWYKK2VuZGlmCisKK1RvbS4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkNvcHksIEN1dCwgYW5kIFBhc3RlPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMTI8L0E+PEJSPgorCitQUzogY29weSwgY3V0LCBhbmQgcGFzdGUgYXJlIHRoZSB3b3JkcyBmcm9tICh1c3VhbGx5KSBndWkgZWRpdG9yLgorCitFdmVyIHRyeSB0byBjdXQgKG9yIGNvcHkpIHNvbWUgbGluZXMgYW5kIHBhc3RlIHRvIGFub3RoZXIgcGxhY2U/ICBJZiB5b3UKK25lZWQgdG8gY291bnQgdGhlIGxpbmVzIGZpcnN0LCB0aGVuIHRyeSB0aGVzZSB0byBlbGltaW5hdGUgY291bnRpbmcgdGFzay4KKworQ3V0IGFuZCBQYXN0ZToKKworMS4gUGxhY2UgdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBibG9jayB5b3Ugd2FudCB0byBDVVQuICAyLiBNYXJrCitpdCB3aXRoIG1kIDMuIEdvIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAgNC4gQ3V0IGl0IHdpdGggZCdkIDUuIEdvIHRvIHRoZQorbmV3IGxvY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gUEFTVEUgdGhvc2UgdGV4dC4gIDYuIFByZXNzIFAuCisKK0NvcHkgYW5kIFBhc3RlOgorCisxLiBQbGFjZSB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrIHlvdSB3YW50IHRvIENPUFkuICAyLiBNYXJrCitpdCB3aXRoIG15IDMuIEdvIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAgNC4gQ3V0IGl0IHdpdGggeSd5IDUuIEdvIHRvIHRoZQorbmV3IGxvY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gUEFTVEUgdGhvc2UgdGV4dC4gIDYuIFByZXNzIFAuCisKK1RoZSBuYW1lIG9mIHRoZSBtYXJrIHVzZWQgaXMgcmVsYXRlZCB0byB0aGUgb3BlcmF0aW9uIChkOmRlbGV0ZSBvciB5OnlhbmspLgorSSBmb3VuZCB0aGF0IHRob3NlIG1hcmsgbmFtZXMgcmVxdWlyZXMgbWluaW1hbCBtb3ZlbWVudCBvZiBteSBmaW5nZXIuIDspCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnByaW50aW5nCit1c2luZyBrcHJpbnRlciAodW5peCArIGtkZSk8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzEzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxMzwvQT48QlI+CisKK2p1c3QgYWRkIHNldCBwcmludGV4cHI9c3lzdGVtKCdrcHJpbnRlcidcIC5cICdcICdcIC5cIHY6Zm5hbWVfaW4pXCAuXAorZGVsZXRlKHY6Zm5hbWVfaW4pXCArXCB2OnNoZWxsX2Vycm9yIHRvIHlvdXIgfi8udmltcmM7IGZ1cnRoZXIgb24gYWxsIHlvdXIKK3ByaW50aW5nIHdpbGwgYmUgcGlwZWQgdGhyb3VnaCB0aGUgbmljZSBhbmQgY29uc2lzdGVudCBwcmludC1kaWFsb2cgb2Yga2RlLgorCitsZywgdG9tdGUKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkluc2VydCBhbmQgYmFjay4uLjwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMTQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzE0PC9BPjxCUj4KKwordGhpcyBpcyByZWxhdGVkIHRvIHZpbXRpcCAjMjg5IGluIHRlcm1zIG9mIHByb2dyYW1tZXJzIChsaWtlIEkpIHRvbyBsYXp5IHRvCittb3ZlIHRoZWlyIGhhbmRzIHRvIHJlYWNoIHRoZSBmYXIgZmFyIGF3YXkgJmx0O2VzYyZndDsga2V5Li4uLiBqb2tpbmchIDopCisgIGFjdHVhbGx5IHRoZSBsZXNzIHlvdXIgaGFuZHMgbW92ZSBhcm91bmQgdGhlIGZhc3RlciB5b3UgdHlwZSwgYW5kIHRoZSBmZXN0ZXIKKyAgeW91IHR5cGUgdGhlIG1vcmUgdGltZSB5b3UgaGF2ZSBvbiB5b3VyIGhhbmRzIHRvIHRoaW5rIG9mICJ3aGF0IiB5b3UgdHlwZS4uLgorCitoZXJlIGlzIGEgc21hbGwgc25pcHBldCBmcm9tIG15IG1hcHBpbmdzIGZpbGUsIHJlYWR5IHRvIHNwZWVkIHRoaW5ncyB1cDogLy8KK3RoZSBrZXkgb3ZlcmxvYWRpbmcgbWlnaHQgYmUgYSBzb21ld2hhdCBjb25mdXNpbmcgYXQgZmlyc3QuLi4uCisKKy0tY3V0LS0tIGltYXAgJmx0O1MtU3BhY2UmZ3Q7ICZsdDtlc2MmZ3Q7bCBpbWFwICZsdDtDLUNSJmd0OyAmbHQ7ZXNjJmd0O28KK2ltYXAgJmx0O1MtQ1ImZ3Q7ICZsdDtlc2MmZ3Q7TworCitubWFwICZsdDtTLVNwYWNlJmd0OyBpIG5tYXAgJmx0O3NwYWNlJmd0OyZsdDtzcGFjZSZndDsgaSBubm9yZW1hcCAmbHQ7Q1ImZ3Q7CitvIG5tYXAgJmx0O1MtQ1ImZ3Q7IE8KKworLS0tdW5jdXQtLS0KKworR29vZCBsdWNrISEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPiJTbWFydCAmbHQ7aG9tZSZndDsiPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxNSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMTU8L0E+PEJSPgorCit0byBtYWtlIGl0IGZhc3RlciB0byBuYXZpZ2F0ZSB0aHJvdWdoIGluZGVudGVkIGNvZGUgaGVyZSBpcyBhIGNvbW1vbiB3YXkgdG8KKyJnbyBob21lIi4uLgorCistLS1jdXQtLS0gZnVuISBzOlNtYXJ0SG9tZSgpCisgICAgaWYgY29sKCcuJykgIT0gbWF0Y2goZ2V0bGluZSgnLicpLCAnXFMnKSsxCisJbm9ybSBeCisgICAgZWxzZQorCTpjYWxsIGN1cnNvcihsaW5lKCcuJyksMikgbm9ybSBoCisgICAgZW5kaWYKK2VuZGZ1biBpbm9yZW1hcCAmbHQ7c2lsZW50Jmd0OyZsdDtob21lJmd0OyAmbHQ7Qy1PJmd0OzpjYWxsCismbHQ7U0lEJmd0O1NtYXJ0SG9tZSgpJmx0O0NSJmd0OyBubm9yZW1hcCAmbHQ7c2lsZW50Jmd0OyZsdDtob21lJmd0OyA6Y2FsbAorJmx0O1NJRCZndDtTbWFydEhvbWUoKSZsdDtDUiZndDsgdm5vcmVtYXAgJmx0O3NpbGVudCZndDsmbHQ7aG9tZSZndDsgOmNhbGwKKyZsdDtTSUQmZ3Q7U21hcnRIb21lKCkmbHQ7Q1ImZ3Q7CisKKy0tLXVuY3V0LS0tCisKK3doYXQgdGhpcyBzbmlwcGV0IGRvZXMgaXMgbWFrZSB0aGUgJmx0O2hvbWUmZ3Q7IGtleSBiZWhhdmUgYXMgaXQgZG9lcyBpbgorc3VjaCBJREVzIGFzIFB5dGhvbldpbiBvciBNU1Zpc3VhbFN0dWRpbywgYW5kIHRoYXQgaXMgZmlyc3QgZ28gdG8gdGhlIGZpcnN0Citub24gd2hpdGVzcGFjZSwgYW5kIHRoZW4gdG8gdGhlIGZpcnN0IGNoYXIgb24gdGhlIGxpbmUuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlVzaW5nCisvcGF0dGVybi8gc2VhcmNoIGluIGEgc2NyaXB0PC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxNiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMTY8L0E+PEJSPgorCitUaGVyZSBhcmUgYSBudW1iZXIgb2Ygd2F5cyB5b3UgY2FuIHNlYXJjaCBmb3IgYSBwYXR0ZXJuIGluIGEgc2NyaXB0LgorVGhlIHNlYXJjaCBmdW5jdGlvbiBpcyB0aGUgdHlwaWNhbCB3YXkgdG8gc2VhcmNoIGZvciBhIHBhdHRlcm4uICBCdXQsIGl0CitoYXMgbGltaXRlZCBvcHRpb25zLiAgSW4gcGFydGljdWxhciwgdGhlcmUgYXJlIG5vIG9wdGlvbnMgdG8gY29udHJvbCB0aGUKK3Bvc2l0aW9uIG9mIHRoZSBjdXJzb3IgYWZ0ZXIgaXQgbWF0Y2hlcyB0aGUgcGF0dGVybi4KKworSW5zdGVhZCB5b3UgY2FuIHVzZSA6bm9ybWFsIGNvbW1hbmQuICBUaGUgc2VjcmV0IGlzIHRvIGFkZCBhICZsdDtDUiZndDsKKyheTSkgb24gdGhlIGVuZCBvZiB0aGUgY29tbWFuZC4gICBGb3IgZXhhbXBsZSwgdG8gc2VhcmNoIGZvciAicGF0dGVybiIKK2FuZCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGVuZCBvZiB0aGUgbWF0Y2hpbmcgcGF0dGVybiBpc3N1ZSB0aGUgY29tbWFuZDoKKworOm5vcm1hbCAvcGF0dGVybi9lKzFeTQorCit3aGVyZSBeTSBpcyBhIHJlYWwgY2FycmlhZ2UgcmV0dXJuLiAgSXQgY2FuIGJlIGVudGVyZWQgd2l0aAorJmx0O2MtdiZndDsmbHQ7Yy1tJmd0Oy4KKworQW5vdGhlciB1c2UgaXMgd2hlbiB5b3Ugd2FudCB0byBlbnRlciBhIGJ1bmNoIG9mIG5vcm1hbCBjb21tYW5kcyB0b2dldGhlci4KK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2VyZSBsb29raW5nIHRvIGZpbmQgYSAneycgdG8gaGlnaGxpZ2h0IGFuZCBkZWxldGUKK2EgQyBibG9jay4gIFRoZSAneycgbWF5IG5vdCBiZSBvbiB0aGUgc2FtZSBsaW5lIHNvIHlvdSBjYW4ndCB1c2UgdGhlICJmIgorbm9ybWFsIGNvbW1hbmQuCisKKzpub3JtYWwgVi97L15NJWQKKworQSBkcmF3YmFjayB0byB1c2luZyB0aGUgbm9ybWFsIGNvbW1hbmQgaXMgdGhhdCBpZiB0aGUgcGF0dGVybiBkb2VzIG5vdAorbWF0Y2ggdGhlbiBpdCBpcyBkaWZmaWN1bHQgdG8gZGV0ZWN0LiAgQWxzbywgeW91IGNhbiBnZXQgaW4gdHJvdWJsZSB3aXRoCit0aGUgd3JhcHNjYW4gc2V0dGluZy4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgY29tbWFuZHMgbG9vayBhdAorCis6aGVscCAvIDpoZWxwIG5vcm1hbCA6aGVscCBzZWFyY2goKQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+TW96aWxsYSBWaW0gS2V5YmluZGluZ3M8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzE3Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxNzwvQT48QlI+CisKK0lmIHlvdSB1c2UgVklNIHlvdSBsaWtlIHRoZSBoLCBqLCBrLCBhbmQgbCBtb3ZlbWVudCBrZXlzLiAgSSBmb3VuZCBteXNlbGYKK2Fubm95ZWQgYXQgbm90IGhhdmluZyB0aGVzZSBtb3ZlbWVudCBrZXlzIGF2YWlsYWJsZSB3aGVuIGJyb3dzaW5nIHdlYiBwYWdlcy4KK01vdmluZyB0byB0aGUgYXJyb3cga2V5cyBvbiBhIGxhcHRvcCBpcyBhbm5veWluZyB0byBqdXN0IHNjcm9sbCB0aGUgcGFnZS4KKworTG9jYXRlIHlvdXIgbW96aWxsYS9yZXMvYnVpbHRpbiBkaXJlY3RvcnkgKHZhcmllcyBieSBwbGF0Zm9ybSkuIFlvdSBjb3VsZAorc2VhcmNoIGZvciBodG1sQmluZGluZ3MueG1sIHRvIGZpbmQgaXQuIChpZS4gbG9jYXRlIGh0bWxCaW5kaW5ncy54bWwuCisKK09uIE1hYyBPUyBYIGl0J3MgaW5zaWRlIHRoZSBNb3ppbGxhIGFwcGxpY2F0aW9uIGJ1bmRsZS4KKy9BcHBsaWNhdGlvbnMvTW96aWxsYS9Nb3ppbGxhLmFwcC9Db250ZW50cy9NYWNPUy9yZXMvYnVpbHRpbi4KKworQ3JlYXRlIGEgbmV3IFhNTCBmaWxlIGNhbGxlZCB1c2VySFRNTEJpbmRpbmdzLnhtbCwgbWFraW5nIGl0IGV4ZWN1dGFibGUgZm9yCithbGwgdXNlcnMgYW5kIG1ha2luZyBzdXJlIHRoZSBDUkxGIGZvcm1hdCBpcyB0aGUgc2FtZSBhcyBodG1sQmluZGluZ3MueG1sLgoraS5lLiBvbiBNYWMgT1MgWCBtb3N0IGZpbGVzIHVzZSBcciBidXQgVmltIHdyaXRlcyBcbiBpbnN0ZWFkLiBZb3UgY2FuIGVpdGhlcgorc2F2ZSB0aGUgZmlsZSB3aXRoIFZpbSBhcyBhIE1hYyBmb3JtYXR0ZWQgZmlsZSBvciB1c2UgdHIgJ1xuJyAnXHInICZsdDsKK2lucHV0LnhtbCAmZ3Q7IG91dHB1dC54bWwgdG8gY29udmVydCB0aGUgZmlsZS4KKworUGxhY2UgdGhlIGZvbGxvd2luZyBYTUwgaW50byB0aGUgdXNlckhUTUxCaW5kaW5ncy54bWwgZmlsZS4KKworJmx0Oz94bWwgdmVyc2lvbj0iMS4wIj8mZ3Q7CisKKyZsdDtiaW5kaW5ncyBpZD0iaHRtbEJpbmRpbmdzIgorICAgeG1sbnM9IjxBCisgICBIUkVGPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3hibCIiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcveGJsIjwvQT48QlI+CisgICB4bWxuczp4dWw9IjxBCisgICBIUkVGPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL2tleW1hc3Rlci9nYXRla2VlcGVyL3RoZXJlLmlzLm9ubHkueHVsIiZndDsiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcva2V5bWFzdGVyL2dhdGVrZWVwZXIvdGhlcmUuaXMub25seS54dWwiJmd0OzwvQT48QlI+CisKKyAgJmx0O2JpbmRpbmcgaWQ9ImJyb3dzZXJVc2VyIiZndDsKKyAgICAmbHQ7aGFuZGxlcnMmZ3Q7CisgICAgICAmbHQ7aGFuZGxlciBldmVudD0ia2V5cHJlc3MiIGtleT0iaCIgY29tbWFuZD0iY21kX3Njcm9sbExlZnQiLyZndDsKKyAgICAgICZsdDtoYW5kbGVyIGV2ZW50PSJrZXlwcmVzcyIga2V5PSJqIiBjb21tYW5kPSJjbWRfc2Nyb2xsTGluZURvd24iLyZndDsKKyAgICAgICZsdDtoYW5kbGVyIGV2ZW50PSJrZXlwcmVzcyIga2V5PSJrIiBjb21tYW5kPSJjbWRfc2Nyb2xsTGluZVVwIi8mZ3Q7CisgICAgICAmbHQ7aGFuZGxlciBldmVudD0ia2V5cHJlc3MiIGtleT0ibCIgY29tbWFuZD0iY21kX3Njcm9sbFJpZ2h0Ii8mZ3Q7CisgICAgJmx0Oy9oYW5kbGVycyZndDsKKyAgJmx0Oy9iaW5kaW5nJmd0OworICAgICZsdDsvYmluZGluZ3MmZ3Q7CisKK1RoZXJlIGFyZSBtYW55IG1vcmUgYmluZGluZ3Mgb25lIGNvdWxkIGNvbmZpZ3VyZSB0byBnZXQgVmltIGxpa2Uga2V5YmluZGluZ3MuCitZb3UgY2FuIHJlYWQgPEEgSFJFRj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy91bml4L2N1c3RvbWl6aW5nLmh0bWwja2V5cyBmb3IKK21vcmUgaW5mb3JtYXRpb24uIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL3VuaXgvY3VzdG9taXppbmcuaHRtbCNrZXlzIGZvcgorbW9yZSBpbmZvcm1hdGlvbi48L0E+PEJSPgorCitQUy4gIEkgbG92ZSB0aGUga2V5bWFzdGVyL2dhdGVrZWVwZXIgeHVsIHJlZmVyZW5jZSBpbiB0aGUgeHVsIFVSTCBhYm92ZS4KK0l0J3MgZnJvbSB0aGUgb3JpZ2luYWwgR2hvc3RCdXN0ZXJzIG1vdmllLiAgOy0pCisKKworCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5FeHRlbmRlZAorQnJhY2tldCBhbmQgUGFyZW50aGVzaXMgKyBleHRyYXMgZm9yIHBlcmw8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzE4Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxODwvQT48QlI+CisKK1RoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIHZpbXRpcCAjMTUzIEkgZm91bmQgdGhpcyB0aXAgdXNlZnVsLCBidXQgdGhlIGp1bXAKK3NlZW1lZCBvdXQgb2YgcGxhY2UgZm9yIG1lLCBJIGNvdWxkbid0IGVudGVyIGp1c3Qgb25lICcgb3IgIiwgYW5kIHNvIEkgY3JlYXRlZAorYW4gaW1wcm92ZW1lbnQgQmFzaWNhbGx5LCBJIHNldCBpdCB1cCBzbyB0aGF0IHdoZW4geW91J3JlIGluIHBlcmwgYW5kIGhhdmUKK2Egbm9uIGtleXdvcmQgY2hhcmN0ZXIsIChleGNlcHQgZm9yIEAsICQgYW5kICUgZm9yIHBlcmwpIGFuZCB5b3UgdHlwZSBhIHsKK3lvdSBnZXQ6IHsKKyAgICAgICB8ICZsdDstIGN1cnNvcgorfSBXaGVyZSBhcywgd2hlbiBJIGhhdmUgYSBrZXl3b3JkIEkgZ2V0OiB3b3Jke30gV2l0aCB0aGUgY3Vyc29yIGluIHRoZSBtaWRkbGUsCitmb3IgaGFzaGVzIGluIHBlcmwuICBJIGNhbiBqdW1wIG91dCBvZiBhbnkgYmxvY2ssIGV4Y2VwdCB0aGUgIiIgb3IgJycgYmxvY2tzLAorYnkgdHlwaW5nIHRoZWlyIGNsb3NpbmcgY2hhcmN0ZXIuICBTbyB9IGp1bXBzIG1lIG91dCBwYXN0IHRoZSBuZXh0IH0gaW4KK3RoZSBmaWxlLgorCitXYXJuaW5nLCB0aGlzIHNlYXJjaCBtYXkgd3JhcCBhcm91bmQuCisKK0ZpbmFsbHksIEkgbWFkZSBpdCBzbyB0aGF0LCB1c2luZyB0aGUgYWx0IGtleSwgJmx0O0FsdC0nJmd0OyBpbnNlcnRzIGEgJworJmx0O0FsdC0vJmd0OyBpbnNlcnRzIGEgIiAmbHQ7QWx0LVsmZ3Q7IGluc2VydHMgYSBbICZsdDtBbHQtXSZndDsgaW5zZXJ0cyBhCitdICZsdDtBbHQtLSZndDsgaW5zZXJ0cyBhIHsgJmx0O0FsdC09Jmd0OyBpbnNlcnRzIGEgfSAmbHQ7QWx0LSwmZ3Q7IGluc2VydHMKK2EgJmx0OyAmbHQ7QWx0LS4mZ3Q7IGluc2VydHMgYSAmZ3Q7CisKKyIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICIgRmlsZSAtCittYXRjaE1lLnZpbSAiIERhdGUgLQkJICAgIFdlZG5lc2RheSwgQXVndXN0IDIxLCAyMDAyCisiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIFRoaXMgY29kZSBmaXhlcyBteSBwcm9ibGVtIHdpdGggIiBkb2VzIHRoZSBvbmUgZm9ybWF0IGZvciBwZXJsIGFuZCBzdGlsbAora2VlcHMgaGFzaGVzIGZ1bmN0aW9uISBJbnNlcnRCcmFja2V0cygpCisJbGV0IGZpbGVUeXBlID0gJmZ0CisKKwlpZiBmaWxlVHlwZSA9PSAncGVybCcKKwkJbGV0IGNvbCA9IGNvbCgnLicpIC0gMSBpZiAhY29sIHx8IGdldGxpbmUoJy4nKVtjb2wgLSAxXSAhfgorCQknXGsnICYmIGdldGxpbmUoJy4nKVtjb2wgLSAxXSAhfiAnXCQnICYmIGdldGxpbmUoJy4nKVtjb2wgLSAxXQorCQkhfiAnQCcgJiYgZ2V0bGluZSgnLicpW2NvbCAtIDFdICF+ICclJwkmJiBnZXRsaW5lKCcuJylbY29sIC0KKwkJMV0gIX4gJyMnCisJCQlyZXR1cm4gIntcJmx0O2NyJmd0O1wmbHQ7YnMmZ3Q7fVwmbHQ7ZXNjJmd0O2tvIgorCQllbHNlCisJCQlyZXR1cm4gInt9XCZsdDtlc2MmZ3Q7aVwmbHQ7Yy1vJmd0OzplY2hvIFwmbHQ7Y3ImZ3Q7IgorCQllbmRpZgorCWVsc2UKKwkJcmV0dXJuICJ7XCZsdDtjciZndDtcJmx0O2JzJmd0O31cJmx0O2VzYyZndDtrbyIKKwllbmRpZgorZW5kZnVuY3Rpb24KKworIiBUaGlzIGNvZGUganVtcHMgb3V0IG9mIHRoZSBicmFja2V0cyBmdW5jdGlvbiEgSnVtcE5leHQobm9ybUNoYXIpCisJbGV0IHJldCA9CisJIlwmbHQ7c3BhY2UmZ3Q7XCZsdDtlc2MmZ3Q7bWFcJmx0O2xlZnQmZ3Q7L1xcIi5hOm5vcm1DaGFyLiJcJmx0O2NyJmd0O21iYGFpXCZsdDtkZWwmZ3Q7XCZsdDtlc2MmZ3Q7YGJpXCZsdDtyaWdodCZndDsiCisJcmV0dXJuIHJldAorZW5kZnVuY3Rpb24KKworIiBtYXBwaW5ncyBpbm9yZW1hcCAiICIiJmx0O2VzYyZndDtpJmx0O2MtbyZndDs6ZWNobworJmx0O2NyJmd0OyBpbm9yZW1hcCAnICcnJmx0O2VzYyZndDtpJmx0O2MtbyZndDs6ZWNobyAmbHQ7Y3ImZ3Q7Citpbm9yZW1hcCAmbHQ7ICZsdDsmZ3Q7Jmx0O2VzYyZndDtpJmx0O2MtbyZndDs6ZWNobyAmbHQ7Y3ImZ3Q7Citpbm9yZW1hcCAoICgpJmx0O2VzYyZndDtpJmx0O2MtbyZndDs6ZWNobyAmbHQ7Y3ImZ3Q7IGlub3JlbWFwIFsKK1tdJmx0O2VzYyZndDtpJmx0O2MtbyZndDs6ZWNobyAmbHQ7Y3ImZ3Q7IGlub3JlbWFwIHsgJmx0O2MtciZndDs9SW5zZXJ0QnJhY2tldHMKKygpJmx0O2NyJmd0OyBpbm9yZW1hcCAmZ3Q7ICZsdDtjLXImZ3Q7PUp1bXBOZXh0KCImZ3Q7IikmbHQ7Y3ImZ3Q7Citpbm9yZW1hcCApICZsdDtjLXImZ3Q7PUp1bXBOZXh0KCIpIikmbHQ7Y3ImZ3Q7Citpbm9yZW1hcCBdICZsdDtjLXImZ3Q7PUp1bXBOZXh0KCJdIikmbHQ7Y3ImZ3Q7IGlub3JlbWFwIH0KKyZsdDtjLXImZ3Q7PUp1bXBOZXh0KCJ9IikmbHQ7Y3ImZ3Q7IGlub3JlbWFwICZsdDttLVsmZ3Q7IFsgaW5vcmVtYXAgJmx0O20tXSZndDsKK10gaW5vcmVtYXAgJmx0O20tLyZndDsgIiBpbm9yZW1hcCAmbHQ7bS0tJmd0OyB7IGlub3JlbWFwICZsdDttLT0mZ3Q7IH0KK2lub3JlbWFwICZsdDttLSwmZ3Q7ICZsdDsgaW5vcmVtYXAgJmx0O20tLiZndDsgJmd0OyBpbm9yZW1hcCAmbHQ7bS0nJmd0OyAnCisKKyIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICIgRW5kIE9mIEZpbGUKKyIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0lmIHlvdSBoYXZlIGFueSBvdGhlciBzdWdnZXN0aW9ucywgZHJvcCBhIG5vdGUuLi4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+dGV4dAorZm9ybWF0dGluZyAobGluaW5nIHVwID0ncywoJ3MgZXRjKSk8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzE5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMxOTwvQT48QlI+CisKK3NvbWUgdGltZSBvbncgd291bGQgbGlrZSB0byByZWZvcm1hdCB0ZXh0IGxpa2UgYT0xOyBmb289MjsgbG9uZ3N0cmluZz0xOyBjPTIKKwordG8KKworYQkgICAgICAgPTE7IGZvbwkJID0yOyBsb25nc3RyaW5nICA9MTsgYwkJICAgID0yOworCitOb3RlIEkgYW0gbm90IHN1cmUgd2V0aGVyIHRoZSBjb2RlIGFib3ZlIGlzIGRpc3BsYXllZCBwcm9wZXJseSBpbiB5b3VyIGJyb3dzZXJzCit3aGF0ICBpcyBiYXNpY2FsbHkgc2hvd3MgaXMgYWxsIHRoZSA9J3MgYXJlIGxpbmVkIHVwIGluIGEgc2luZ2xlIGNvbHVtbgorYW5kIHRoaXMgIGlzIGhvdyB3ZSBhY2hpdmUgaXQgMGY9MjBpJmx0O3NwYWNlJmd0OyZsdDtlc2MmZ3Q7MDIwbHZmPWh4IGFuZAordGhpcyBpcyB3aGF0IGl0IGRvZXMgMAkJCQkgICBnb2VzIHRvIGZpcnN0IGNvbHVtbiBmPQorZmluZHMgbmV4dCBvY2N1cmFuY2Ugb2YgPSBvbiBjdXJyZW50IGxpbmUgMjBpJmx0O3NwYWNlJmd0OyZsdDtlc2MmZ3Q7CitpbnNlcnRzIDIwIHNwYWNlcyBiZWZvcmUgPSAwCQkJCSAgIGdvZXNiYWNrIHRvCitmaXJzdCBjb2x1bW4gMjBsCQkJICAgICBmb3J3YXJkIDIwIGNvbHVtbiB2Zj1oeAorZGVsZXRlcyBldmVyeXRoaW5nIHVwIHRvIHRoZSA9IHNpZ24KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPkJvcmxhbmQgcGFnZXVwL2Rvd24gYmVoYXZpZXI8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzIwIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMyMDwvQT48QlI+CisKK2JvcmxhbmRiZWhhdmllciA9IHRoZSBjdXJzb3Iga2VlcHMgdGhlIHNhbWUgeHkgcG9zaXRpb24gZHVyaW5nIHBhZ2V1cC9kb3duCisKK0ltIG5ldyB0byBWSU0gc2NyaXB0aW5nLCBpbSBzdXJlIGl0IGNhbiBiZSBkb25lIHNtYXJ0ZXI/ICBJIHJlYWQgdmltdGlwICMxMDUKK2FuZCBpdCBnYXZlIG1lIGEgY2x1ZSBvZiBob3cgQm9ybGFuZFBhZ2VVcC9Eb3duIGNvdWxkIGJlIGRvbmUuCisKKyIgaSBjb3VsZCdudCBmaW5kIGFueSBnZXRfbnVtYmVyX29mX3Zpc2libGVfbGluZXMgZnVuY3Rpb24sIHNvIGkgbWFkZSBteSBvd24uCitmdW5jdGlvbiBHZXROdW1iZXJPZlZpc2libGVMaW5lcygpCisgICAgbGV0IGN1cl9saW5lID0gbGluZSgiLiIpICBsZXQgY3VyX2NvbCA9IHZpcnRjb2woIi4iKSAgbm9ybWFsIEggbGV0CisgICAgdG9wX2xpbmUgPSBsaW5lKCIuIikgIG5vcm1hbCBMIGxldCBib3RfbGluZSA9IGxpbmUoIi4iKQorCisgICAgZXhlY3V0ZSAibm9ybWFsICIgLiBjdXJfbGluZSAuICJHIiBleGVjdXRlICJub3JtYWwgIiAuIGN1cl9jb2wgLiAifCIKKyAgICByZXR1cm4gYm90X2xpbmUgLSB0b3BfbGluZQorZW5kZnVuYworCisiIG5vcmVtYXAgJmx0O1BhZ2VVcCZndDsgMzkmbHQ7Qy1VJmd0OzpzZXQgc2Nyb2xsPTAmbHQ7Q1ImZ3Q7CitmdW5jdGlvbiEgTXlQYWdlVXAoKQorICAgIGxldCB2aXNpYmxlX2xpbmVzID0gR2V0TnVtYmVyT2ZWaXNpYmxlTGluZXMoKSBleGVjdXRlICJub3JtYWwgIgorICAgIC4gdmlzaWJsZV9saW5lcyAuICJcJmx0O0MtVSZndDs6c2V0IHNjcm9sbD0wXHIiCitlbmRmdW5jdGlvbgorCisiIG5vcmVtYXAgJmx0O1BhZ2VEb3duJmd0OyAzOSZsdDtDLUQmZ3Q7OnNldCBzY3JvbGw9MCZsdDtDUiZndDsKK2Z1bmN0aW9uISBNeVBhZ2VEb3duKCkKKyAgICBsZXQgdmlzaWJsZV9saW5lcyA9IEdldE51bWJlck9mVmlzaWJsZUxpbmVzKCkgZXhlY3V0ZSAibm9ybWFsICIKKyAgICAuIHZpc2libGVfbGluZXMgLiAiXCZsdDtDLUQmZ3Q7OnNldCBzY3JvbGw9MFxyIgorZW5kZnVuY3Rpb24KKworIiBCb3JsYW5kUGFzY2FsIHBhZ2V1cC9kb3duIGJlaGF2aWVyISAgIiB0b2RvOiB3aGVuIGhpdHRpbmcgdG9wL2JvdHRvbSBvZiBmaWxlLAordGhlbiByZXN0b3JlIFkgdG8gbGFzdFkgbm9yZW1hcCAmbHQ7UGFnZVVwJmd0OyA6Y2FsbCBNeVBhZ2VVcCgpJmx0O0NSJmd0Oworbm9yZW1hcCAmbHQ7UGFnZURvd24mZ3Q7IDpjYWxsIE15UGFnZURvd24oKSZsdDtDUiZndDsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+Q2VudHVyYQorc3dhcCB3aXRoIHVwcGVyL2xvd2VyIGxpbmUgYmVoYXZpZXI8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzIxIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMyMTwvQT48QlI+CisKK0kgd2FzIG9uY2UgZm9yY2VkIHRvIHVzZSBhIHdpbmRvd3MgZGV2ZWxvcG1lbnQgc3VpdGUgY2FsbGVkICJDZW50dXJhIi4KK1RoZSBvbmx5IGdvb2QgdGhpbmcgaSByZW1lbWJlciB3YXMgaXRzIHN3YXAgY3VycmVudF9saW5lIHdpdGggdXBwZXIvbG93ZXIgbGluZS4KKworZnVuY3Rpb24hIE15U3dhcFVwKCkKKyAgICBsZXQgY3VyX2NvbCA9IHZpcnRjb2woIi4iKQlub3JtYWwgZGRra3AgZXhlY3V0ZSAibm9ybWFsICIgLiBjdXJfY29sIC4gInwiCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiEgTXlTd2FwRG93bigpCisgICAgbGV0IGN1cl9jb2wgPSB2aXJ0Y29sKCIuIikJbm9ybWFsIGRkcCBleGVjdXRlICJub3JtYWwgIiAuIGN1cl9jb2wgLiAifCIKK2VuZGZ1bmN0aW9uCisKKyIgc3dhcCBsaW5lcyBhbmQgcHJlc2VydmUgY3Vyc29yeCAiIHRvZG86IGluIHZpc3VhbCBtb2RlLCBwZXJmb3JtIHN3YXAgd2l0aAorbGluZSBiZWZvcmUvYWZ0ZXIgdGhlIHNlbGVjdGlvbiBub3JlbWFwICZsdDtTLVVwJmd0OyA6Y2FsbCBNeVN3YXBVcCgpJmx0O0NSJmd0Oworbm9yZW1hcCAmbHQ7Uy1Eb3duJmd0OyA6Y2FsbCBNeVN3YXBEb3duKCkmbHQ7Q1ImZ3Q7CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPnRleHQKK3RlbXBsYXRlIHdpdGggcGxhY2Vob2xkZXJzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMyMiI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMjI8L0E+PEJSPgorCitNYW55IHNjcmlwdHMvZnRwbHVnaW4gcHJvdmlkZSB0ZXh0IG9yIGNvZGUgdGVtcGxhdGVzLiBTYWRseSBub25lIG9mIHRoZQorbWFya3MgdGhlIHBsYWNlcyB3aGVyZSB5b3UgYXJlIHN1cHBvc2VkIHRvICJmaWxsIGluIHRoZSBmb3JtIi4JTXkgb3duIGNvZGUKK3RlbXBsYXRlcyBmb3IgQy9DKysgaW5zZXJ0IGEgdHJpcGxlIHBlcmNlbnQgKCUlJSkgd2hlcmUgeW91IGFyZSBzdXBwb3NlZCB0bworZW50ZXIgc29tZXRoaW5nLiBJIG1hcHBlZCA7OyB0byBmaW5kIHRoZSBuZXh0ICUlJSBhbmQgY2hhbmdlIHRoZW0uICBBbGwgdGhlCit0ZW1wbGF0ZSBtYXBwaW5ncyBhcmUgaW5zZXJ0LW1vZGUgb25seSwgd2hpbGUgdGhlICJza2lwIHRvIG5leHQgcGxhY2Vob2xkZXIiCitpcyBib3RoIGluc2VydCBhbmQgbm9ybWFsIG1vZGUgZW5hYmxlZC4KKworQSBjb21wbGV0ZSBmb3ItbG9vcCB0ZW1wbGF0ZSBmb3IgQysrIGxvb2tzIGxpa2U6CisKKzppbWFwICZsdDtidWZmZXImZ3Q7IDtmbyAmbHQ7Qy1PJmd0O216Zm9yKCAlJSU7ICUlJTsgJSUlKSZsdDtDUiZndDt7IC8vCislJSUmbHQ7Q1ImZ3Q7JSUlJmx0O0NSJmd0O30mbHQ7Q1ImZ3Q7Jmx0O0MtTyZndDsnejs7CisKK1RoZSBjb21tYW5kIHRvIGdvIHRvIHRoZSBuZXh0IHBsYWNlaG9sZGVyIGlzIHRoaXM6CisKKzppbWFwICZsdDtidWZmZXImZ3Q7IDs7ICZsdDtDLU8mZ3Q7LyUlJSZsdDtDUiZndDsmbHQ7Qy1PJmd0O2MzbCA6bm1hcAorJmx0O2J1ZmZlciZndDsgOzsgLyUlJSZsdDtDUiZndDtjM2wKKworRXZlcnkgdGltZSBJIG5lZWQgYSBmb3ItbG9vcCA7Zm8gcHJvZHVjZXMgdGhpcyAoIF8gaXMgdGhlIGN1cnNvciBwb3NpdGlvbikKKzogZm9yKCBfOyAlJSUgOyAlJSUpIHsgLy8gJSUlCisgICUlJQorfQorCitOb3cgSSBlbnRlciBzdGFydGluZyB2YWx1ZSAoaT0wKTogZm9yKCBpPTBfOyAlJSUgOyAlJSUpIHsgLy8gJSUlCisgICUlJQorfQorCithbmQgZ28gdG8gdGhlIGNvbmRpdGlvbiB1c2luZyA7OyBmb3IoIGk9MDsgXyA7ICUlJSkgeyAvLyAlJSUKKyAgJSUlCit9CisKK2FuZCBzbyBmb3J0aC4KKworVGhlIGNob2ljZSBvZiAlJSUgcHJvdmVkIHRvIGJlIGFsbW9zdCB1bml2ZXJzYWwsIGl0IGV2ZW4gd29ya3MgaW4gTUFUTEFCIG9yCitMYVRlWCB3aGVyZSAlIGlzIHRoZSBjb21tZW50IGNoYXJhY3Rlci4KKworRXZlbiBpZiB5b3UgZm9yZ2V0IHRvIHJlcGxhY2Ugb25lICUlJSwgdGhhdCdzIG5vdCBhIHByb2JsZW0gYXMgdGhlIGNvbXBpbGVyCitmbGFncyBpcyBhcyBhIHN5bnRheCBlcnJvciAoZXhjZXB0IE1BVExBQiBhbmQgTGFUZVgsIG9mIGNvdXJzZSkuCisKK0l0IG1hZGUgbXkgbGlmZSBlYXNpZXIsIG1heWJlIGl0IHdvcmtzIGZvciB5b3UuCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj51c2luZyBmb2xkZXJzIHdpdGggbGF0ZXg8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzIzIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMyMzwvQT48QlI+CisKK3NldCBmb2xkbWFya2VyPVxcYmVnaW4sXFxlbmQgc2V0IGZvbGRtZXRob2Q9bWFya2VyCisKK3RoaXMgaXMgdXNlZnVsIHdpdGggYmlnIGxhdGV4IGRvY3VtZW50CisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPiA8aHRtbD48Y2VudGVyPlNlYXJjaAorYW5kIHJlcGxhY2UgaW4gZmlsZXMgbmFtZWQgTkFNRTwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMjQiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzI0PC9BPjxCUj4KKworSSdtIG5vdCBzdXJlIGlmIHRoZXJlIGlzIGEgc2ltcGxlIHdheSB0byBkbyB0aGlzIGZyb20gd2l0aGluIFZpbSwgYnV0LAorSSB3cm90ZSB0aGlzIHNpbXBsZSBzY3JpcHQgdGhhdCBkb2VzIGl0LiBJdCBiYXNpY2FsbHkgc2VhcmNoZXMgZm9yIGZpbGVzCituYW1lZCBOQU1FRCAod2hhdGV2ZXIgbmFtZSBwYXNzKSBmb3IgYSBnaXZlbiBzdHJpbmcgYW5kIHJlcGxhY2VzIHRoYXQgd2l0aAorYSBnaXZlbiBzdHJpbmc6IGZpbmRfcmVwbGFjZS5zaCBOQU1FRCAic3RyaW5nX3RvX2ZpbmQiICJzdHJpbmdfdG9fcmVwbGFjZSIKKworVGhpcyBpcyBhbGwgZG9uZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2l0aG91dCBvcGVuaW5nIFZpbS4KKworT2YgY291cnNlIG9uZSBjb3VsZCBkbyB0aGluZ3MgbGlrZToKKwkJICAgIDpsZXQgbiA9IDEgOndoaWxlIG4gJmx0Oz0gYXJnYygpCSAgIiBsb29wIG92ZXIgYWxsCisJCSAgICBmaWxlcyBpbiBhcmdsaXN0IDoJZXhlICJhcmd1bWVudCAiIC4gbiA6ICAiIHN0YXJ0IGF0CisJCSAgICB0aGUgbGFzdCBjaGFyIGluIHRoZSBmaWxlIGFuZCB3cmFwIGZvciB0aGUgOiAgIiBmaXJzdAorCQkgICAgc2VhcmNoIHRvIGZpbmQgbWF0Y2ggYXQgc3RhcnQgb2YgZmlsZSA6ICBub3JtYWwgRyQgOgorCQkgICAgbGV0IGZsYWdzID0gInciIDogIHdoaWxlIHNlYXJjaCgiZm9vIiwgZmxhZ3MpICZndDsgMCA6CisJCSAgICBzL2Zvby9iYXIvZyA6ICAgIGxldCBmbGFncyA9ICJXIiA6CWVuZHdoaWxlIDogIHVwZGF0ZQorCQkgICAgIiB3cml0ZSB0aGUgZmlsZSBpZiBtb2RpZmllZCA6ICBsZXQgbiA9IG4gKyAxIDplbmR3aGlsZQorCitBcyBzdWdnZXN0ZWQgaW4gdGhlIFZpbSBoZWxwIGZpbGVzIDotKSBidXQsIEkgd2FudGVkIHRvIGdvIGFuZCBmaW5kIG9ubHkKK3RoZXNlIGZpbGVzLi4uIGhlcmUgaXMgdGhlIHNjcmlwdDoKKyAgICAgIDEgIyEvYmluL3NoIDIgIyBMdWlzIE1vbmRlc2kgJmx0OyBsZW1zeDFAaG90bWFpbC5jb20gJmd0OyAzICMKKyAgICAgIERFU0NSSVBUSU9OOiA0ICMJIGl0IHVzZXMgdmltIHRvIHJlcGxhY2UgYSBnaXZlbiBzdHJpbmcgZm9yIDUgIworICAgICAgYW5vdGhlciBpbiBhICBudW1iZXIgb2YgZmlsZXMgNiAjIDcgIyB1c2FnZTogOCAjCSBmaW5kX3JlcGxhY2Uuc2ggZmlsZQorICAgICAgInN0cmluZyIgInJlcGxhY2UiIDkgIworICAgICAxMCBpZiBbICQxIC1hICQyIC1hICQzIF07IHRoZW4gMTEJICAgZm9yIGkgaW4gYGZpbmQgLiAtbmFtZSAiJDEiCisgICAgIC10eXBlIGYgfCB4YXJncyBncmVwIC1sICQyYDsgZG8gMTIJCSMgaG93IGRvIHNlYXJjaCBhbmQgcmVwbGFjZQorICAgICAxMwkJIyB0aGUgc2NyZWVuIG1pZ2h0IGZsaWNrZXIuLi4gdmltIG9wZW5pbmcgYW5kIGNsb3NpbmcuLi4KKyAgICAgMTQJCXZpbSAtYyAiOiVzLyQyLyQzL2ciIC1jICI6d3EiICRpIDE1CWRvbmUgMTYgICAgIGV4aXQgMAorICAgICAxNyBmaSAxOCAjIEkgc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgMTkgZWNobyAtZSAiVVNBR0U6IGZpbmRfcmVwbGFjZS5zaAorICAgICBmaWxlICdzdHJpbmcnICdyZXBsYWNlJyBcblxuIiAyMCBleGl0IDEKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+RXJyb3Jmb3JtYXQKK2ZvciBqYXZhL2FudC9qdW5pdC9jeWd3aW4vYmFzaDwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMjUiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzI1PC9BPjxCUj4KKworSWYgeW91IHByb2dyYW0gaW4gSmF2YSBhbmQgdXNlIEpha2FydGEgYW50IGZvciBidWlsZHMgKmFuZCogaWYgeW91IGhhdmUgdGhlCitiYXNoIHNoZWxsLCB0aGlzIHRpcCB3aWxsIG1ha2UgeW91ciBkZXZlbG9wbWVudCBleHBlcmllbmNlIGEgbGl0dGxlIHNtb290aGVyLgorCitUaGlzIHRpcCB3aWxsIHJlc3VsdCBpbiBhIHdvcmtpbmcgY29tcGlsZS9lZGl0L2RlYnVnIHN5c3RlbSAoaW4gV2luMzIgdmltL2d2aW0KK2FuZCBpbiBDeWd3aW4gdmltKSB0aGF0IHRha2VzIHlvdSB0byB0aGUgZXhhY3QgbGluZXMgd2hlcmUgdGhlIGJ1aWxkIGZhaWxzLAord2hldGhlciB0aGUgZmFpbHVyZSBpcyBhIGNvbXBpbGF0aW9uIGVycm9yIG9yIGEganVuaXQgdGVzdCBmYWlsdXJlLiAgSWYgeW91Cit1c2UgYmFzaCBvbiBhIGxpbnV4IGJveCwgeW91IHNob3VsZG4ndCBoYXZlIHRvIGNoYW5nZSB2ZXJ5IG11Y2ggdG8gZ2V0CitldmVyeXRoaW5nIHRvIHdvcmsuCisKK1RoZXJlIGFyZSA2IHNlY3Rpb25zOiAxLiBzZXQgdXAgeW91ciBidWlsZCBzY3JpcHQgMi4gc2V0IHVwIG1ha2VwcmcgMy4gc2V0Cit1cCBzaGVsbCBvcHRpb25zIDQuIHNldCB1cCBwYXRoIGZvcm1hdHRpbmcgb3B0aW9ucyA1LiBzZXQgdXAgeW91ciBlcnJvcmZvcm1hdAorNi4gc2V0IHVwIGtleSBtYXBwaW5ncworCitTZXQgdXAgYnVpbGQgc2NyaXB0IC0tLS0tLS0tLS0tLS0tLS0tLS0gQWRkIHRoZSBmb2xsb3dpbmcgc2NyaXB0IHRvIHlvdXIgcGF0aAorKEkgdXNlIC91c3IvbG9jYWwvYmluLyk6CisKK215bWFrZTogIyEvYmluL2Jhc2ggY2QgL3dvcmsvIGFudCAtZW1hY3MgJCogMiZndDsmMSB8IHRyICdcXCcgLyB8IHRyIF5NICcKKycgfCBzZWQgLXUgLW4gLWYgL3Vzci9sb2NhbC9iaW4vdGVzdGVycm9ycy5zZWQgfCB0ZWUgL3RtcC9lcnJvcnMKKworQ29tbWVudDogc2VkIC11IGlzIG5vbi1zdGFuZGFyZCwgdXNlIHRoZSBjb2RlIGF0OiA8QQorSFJFRj0iaHR0cDovL21haWwuZ251Lm9yZy9waXBlcm1haWwvYnVnLWdudS11dGlscy8yMDAyLU1heS8wMDAxOTIuaHRtbCB0bworZ2V0Ij5odHRwOi8vbWFpbC5nbnUub3JnL3BpcGVybWFpbC9idWctZ251LXV0aWxzLzIwMDItTWF5LzAwMDE5Mi5odG1sIHRvCitnZXQ8L0E+PEJSPiB0aGUgLXUgb3B0aW9uIGZvciBzZWQgKHRoaXMgYXZvaWRzIHdhaXRpbmcgZm9yIHRoZSBidWlsZCBvdXRwdXQKK3RvIGdldCB0byB0aGUgc2NyZWVuKQorCit0ZXN0ZXJyb3JzLnNlZDogIyBUaGlzIGFzc3VtZXMgdGhhdCBhbGwgeW91ciBqdW5pdCB0ZXN0IGNhc2VzIGFyZSBpbiBhIGNvbS4qCitwYWNrYWdlIC9eUnVubmluZyBjb21cLi8geworICAgICMgZHVwbGljYXRlIHRoZSBsaW5lIHMhXCguKlwpIVwxXAorXDEhCisgICAgUAorCisgICAgIyB0dXJuIHRoZSB0ZXN0IHBhY2thZ2UgaW50byBhIGRpcmVjdG9yeSBwYXRoIGZvciAlRCBlcnJvcmZvcm1hdAorICAgIHMhLipcKGNvbVwuLipcKVwuW0EtWmEtel9dW0EtWmEtejAtOV9dKiFcMSEgIHMhXC4hLyFnIHMhLiohRW50ZXJpbmc6CisgICAgL3dvcmsvc3JjLyYhCisKKyAgICAjIHByaW50IHRoZSBsaW5lIGFuZCBnbyBvbiBwIG4KK30KKworIyBqdXN0IHBhc3MgYW55IHVubWF0Y2hlZCBsaW5lcyB0aHJvdWdoIHAKKworU2V0IHVwIG1ha2VwcmcgLS0tLS0tLS0tLS0tLS0gQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91ciB2aW1yYzoKKyAgYXV0b2NtZCBCdWZOZXdGaWxlLEJ1ZlJlYWQgL3dvcmsvKi5qYXZhIHNldCBtYWtlcHJnPW15bWFrZSBhdXRvY21kCisgIEJ1Zk5ld0ZpbGUsQnVmUmVhZCA/Oi93b3JrLyouamF2YSBzZXQgbWFrZXByZz1teW1ha2UKKworU2V0IHVwIHNoZWxsIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWRkIHRoZSBmb2xsb3dpbmcgbGluZXMgdG8geW91cgordmltcmM6CisgICIgaW4gb3JkZXIgdG8gaGF2ZSBiYXNoIGFzIHRoZSBzaGVsbCBmb3Igd2luMzIgdmkuZXhlIGFuZCBndmltLmV4ZSwKKyAgeW91IGhhdmUgIiB0byBzZXQgdGhlc2Ugb3B0aW9ucywgYW5kIGFsc28gYnVpbGQgdmltcnVuLmV4ZSBpbiB0aGUgY3lnd2luCisgIGVudmlyb25tZW50ICIgc28gdGhhdCB0aGUgc3lzdGVtKCkgY2FsbCBpcyBleGVjdXRlZCB2aWEgYmFzaCwgbm90IGNtZC5leGUKKyAgLS0gdGhlIGNvbW1hbmQgIiB0byBidWlsZCB2aW1ydW4uZXhlIGlzICJtYWtlIC1mIE1ha2VfY3lnLm1hayB2aW1ydW4uZXhlIgorICBzZXQgc2hlbGw9YmFzaC5leGUgc2V0IHNoZWxsY21kZmxhZz0tYyBzZXQgc2hlbGxzbGFzaAorCitBbHNvIHRvIHVzZSB0aGlzIGVudmlyb25tZW50IGluIFdpbjMyIGd2aW0sIHlvdSBtdXN0IHJlY29tcGlsZSB2aW1ydW4gc28KK3RoYXQgZ3ZpbSBpbnZva2VzIHRoZSBzaGVsbCB2aWEgYmFzaCwgbm90IHZpYSBjbWQuZXhlLgorCitTZXQgdXAgcGF0aCBmb3JtYXR0aW5nIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkZCB0aGUKK2ZvbGxvd2luZyBsaW5lcyB0byB5b3VyIHZpbXJjOgorICAiIGFsbG93cyBET1MgZmlsZSBuYW1lcyBmcm9tIFVOSVggKEN5Z3dpbikgdmltIHNldCBpc2ZuYW1lKz1cCisKK1NldCB1cCB5b3VyIGVycm9yZm9ybWF0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFkZCB0aGUgZm9sbG93aW5nIGxpbmVzIHRvCit5b3VyIHZpbXJjOgorICAiIHRoZSAiXCVERW50ZXJpbmc6XCAlZiwiIHJ1bGUgcmVsaWVzIG9uIGEgc2VkIHNjcmlwdCB3aGljaCBnZW5lcmF0ZXMgIgorICAiRW50ZXJpbmc6ICIgbWVzc2FnZXMgZm9yIGVhY2ggdGVzdCBjbGFzcyBydW4gKHRoZSBkaXJlY3RvcnkgbmFtZSBpcyAiCisgIGdlbmVyYXRlZCBmcm9tIHRoZSB0ZXN0IGNsYXNzIHBhY2thZ2UgYW5kIGEgaGFyZC1jb2RlZCBzcmMgcm9vdCkKKworICAiIHRoZSAiJVxcQyIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBleGNlcHRpb24gbWF0Y2hpbmcgbGluZSB0ZWxscyB0byBtYXRjaAorICAiIGNhc2UtZXhhY3QgKHRoZSBleGNlcHRpb24gbWF0aGNoaW5nIGxpbmVzIHJlbHkgb24gdGhlICVEIHJ1bGUgdGhhdCBzZXRzCisgICIgdXAgdGhlIGNvcnJlY3QgZGlyZWN0b3J5IGZyb20gdGhlIHBhY2thZ2Ugc3RydWN0dXJlKQorCisgICIgYW50L2p1bml0L2phdmFjIGVycm9yZm9ybWF0IHNldCBlcnJvcmZvcm1hdD0KKyAgICAgIFwlLUclLiUjYnVpbGQueG1sOiUuJSMsIFwlLUclLiUjd2FybmluZzpcICUuJSMsIFwlLUclXFxDJS4lI0VYUEVDVEVEJS4lIywKKyAgICAgIFwlZjolbDpcICUjJW0sIFxDOiVmOiVsOlwgJW0sIFwlREVudGVyaW5nOlwgJWZcICVcXD0sIFwlRUNhdXNlZFwKKyAgICAgIGJ5OiVbJV46XSUjOiVcXD1cICVcXD0lbSwgXCVFUm9vdFwgY2F1c2U6JVslXjpdJSM6JVxcPVwgJVxcPSVtLAorICAgICAgXCVFY29tLiVbJV46XSUjOiVcXD1cICVcXD0lbSwgXCVFb3JnLiVbJV46XSUjOiVcXD1cICVcXD0lbSwKKyAgICAgIFwlRWphdmEuJVslXjpdJSM6JVxcPVwgJVxcPSVtLCBcJUVqdW5pdC4lWyVeOl0lIzolXFw9XCAlXFw9JW0sCisgICAgICBcJS1aJVxcQ1wgYXRcIGNvbS5teXBrZy4lLiUjLnRlc3QlW0EtWl0lLiUjKCVmOiVsKVwgJVxcPSwKKyAgICAgIFwlLVolXFxDXCBhdFwgY29tLm15cGtnLiUuJSMuc2V0VXAoJWY6JWwpXCAlXFw9LCBcJS1aJVxcQ1wgYXRcCisgICAgICBjb20ubXlwa2cuJS4lIy50ZWFyRG93biglZjolbClcICVcXD0sIFwlLVolXlwgJSMlJCwgXCUtQyUuJSMsIFwlLUclLiUjCisKK05PVEU6IE1ha2Ugc3VyZSB0aGF0IHRoZSBjaGFyYWN0ZXIgYmVmb3JlICJhdCIgaXMgYW4gYWN0dWFsIFRhYiBjaGFyYWN0ZXIKK2luIHRoZSB0aHJlZSBsb25nIC1aIGxpbmVzIGFib3ZlCisKK0hlcmUgaXMgYW4gYW5ub3RhdGVkIHZlcnNpb246CisgIHNldCBlcnJvcmZvcm1hdD0KKyAgICAgICIgZG9uJ3QgdHJlYXQgdGhlIGJ1aWxkLnhtbCBkaWFnbm9zdGljIGFzIGFuIGVycm9yCisgICAgICBcJS1HJS4lI2J1aWxkLnhtbDolLiUjLAorCisgICAgICAiIGRvbid0IHRyZWF0IHdhcm5pbmcgbGluZXMgYXMgZXJyb3JzIFwlLUclLiUjd2FybmluZzpcICUuJSMsCisKKyAgICAgICIgZG9uJ3QgdHJlYXQgbGluZXMgY29udGFpbmluZyAiRVhQRUNURUQiIGFzIGVycm9ycworICAgICAgXCUtRyVcXEMlLiUjRVhQRUNURUQlLiUjLAorCisgICAgICAiIGxvb2sgZm9yIHRoaXMgc3RhbmRhcmQgZXJyb3IgZm9ybWF0IFwlZjolbDpcICUjJW0sCisKKyAgICAgICIgbG9vayBmb3IgdGhpcyBzdGFuZGFyZCBlcnJvciBmb3JtYXQgKHdpdGggQzogb24gZnJvbnQpIFxDOiVmOiVsOlwgJW0sCisKKyAgICAgICIgbG9vayBmb3Igc3BlY2lhbCBzZWQtZ2VuZXJhdGVkICJFbnRlcmluZyIgbGluZXMgd2hpbGUgcnVubmluZyB0ZXN0cworICAgICAgXCVERW50ZXJpbmc6XCAlZlwgJVxcPSwKKworICAgICAgIiBsb29rIGZvciBleGNlcHRpb25zIHRoYXQgd2VyZSB0aHJvd24gaW4gdGhlIHRlc3RzLCB1c2UgdGhlIGV4Y2VwdGlvbgorICAgICAgIiBkZXNjcmlwdGlvbiBhcyB0aGUgZXJyb3IgbWVzc2FnZSAoZG9uJ3Qga25vdyBob3cgdG8gYWxzbyBpbmNsdWRlIHRoZQorICAgICAgIiBleGNlcHRpb24gbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZSkgXCVFQ2F1c2VkXCBieTolWyVeOl0lIzolXFw9XAorICAgICAgJVxcPSVtLCBcJUVSb290XCBjYXVzZTolWyVeOl0lIzolXFw9XCAlXFw9JW0sIFwlRWNvbS4lWyVeOl0lIzolXFw9XAorICAgICAgJVxcPSVtLCBcJUVvcmcuJVslXjpdJSM6JVxcPVwgJVxcPSVtLCBcJUVqYXZhLiVbJV46XSUjOiVcXD1cICVcXD0lbSwKKyAgICAgIFwlRWp1bml0LiVbJV46XSUjOiVcXD1cICVcXD0lbSwKKworICAgICAgIiB1c2luZyB0aGUgIkVudGVyaW5nIiBkaXJlY3RvcnkgYW5kIHRoZSBmaWxlbmFtZS9saW5lIG51bWJlciBwcm92aWRlZAorICAgICAgIiBpbiB0aGUgZXhjZXB0aW9uIHRyYWNlLCBnbyB0byB0aGUgdGVzdCBtZXRob2Qgd2hlcmUgdGhlIGV4Y2VwdGlvbgorICAgICAgIiB3YXMgdGhyb3duIFwlLVolXFxDXCBhdFwgY29tLm15cGtnLiUuJSMudGVzdCVbQS1aXSUuJSMoJWY6JWwpXAorICAgICAgJVxcPSwgXCUtWiVcXENcIGF0XCBjb20ubXlwa2cuJS4lIy5zZXRVcCglZjolbClcICVcXD0sIFwlLVolXFxDXCBhdFwKKyAgICAgIGNvbS5teXBrZy4lLiUjLnRlYXJEb3duKCVmOiVsKVwgJVxcPSwKKworICAgICAgIiBlbXB0eSBsaW5lcyB0ZXJtaW5hdGUgc2VhcmNoaW5nIGZvciBmdXJ0aGVyIGV4Y2VwdGlvbiBsaW5lcyBcJS1aJV5cCisgICAgICAlIyUkLAorCisgICAgICAiIGFueSBsaW5lIGNhbiBpbnRlcnZlbmUgYmV0d2VlbiB0aGUgc3RhcnQgb2YgYW4gZXhjZXB0aW9uIHByaW50b3V0CisgICAgICAiIGFuZCB0aGUgbGluZSB3aGVyZSBpdCBlbmRzIChsYXN0IGluIGxpc3Qgc28gdGhhdCBpdCBpcyBtYXRjaGVkIGlmCisgICAgICAiIG5vbmUgb2YgdGhlIG90aGVyIGV4Y2VwdGlvbiB0cmFjZSBwYXR0ZXJucyBtYXRjaCkgXCUtQyUuJSMsCisKKyAgICAgICIgYWxsIG90aGVyIGxpbmVzIGFyZSBub3QgZXJyb3JzIFwlLUclLiUjCisKK1NldCB1cCBrZXkgbWFwcGluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byB5b3VyIHZpbXJjOgorICBubWFwICZsdDtGMTAmZ3Q7IDpjbGlzdCZsdDtDUiZndDsgbm1hcCAmbHQ7RjExJmd0OyA6Y3ByZXYmbHQ7Q1ImZ3Q7IG5tYXAKKyAgJmx0O0YxMiZndDsgOmNuZXh0Jmx0O0NSJmd0OworCitUaGlzIGFsbG93cyBmb3IgcXVpY2sgZXJyb3IgbmF2aWdhdGlvbi4KKworTk9URVMgLS0tLS0gVmltIHRyZWF0cyB0aGUgIkVudGVyaW5nOiAvd29yay9zcmMvLi4uIiBtZXNzYWdlcyBpbiBhIHdlaXJkIHdheS4KK0lmIHRoZXJlIGFyZSBhbnkgYWN0dWFsIGVycm9ycywgdGhlbiB0aGVzZSBlcnJvciBsaW5lcyBhcmUgaWdub3JlZCBieSB0aGUKKzpjbmV4dCBhbmQgOmNwcmV2IGNvbW1hbmRzLCBidXQgaWYgdGhlcmUgYXJlIG5vIHJlYWwgZXJyb3JzLCB0aGVuIDpjbmV4dCBhbmQKKzpjcHJldiByb2xsIHRocm91Z2ggdGhlc2UgIkVudGVyaW5nOiIgbWVzc2FnZXMgYXMgaWYgdGhleSB3ZXJlIGVycm9ycywgYnV0CitzaW5jZSB0aGV5IGRvbid0IGluY2x1ZGUgYW55IGxpbmUgbnVtYmVycywgdGhlIGN1cnNvciBwb3NpdGlvbiBpcyBuZXZlciBtb3ZlZC4KKworSSB0aG91Z2h0IHRoYXQgdGhpcyB3YXMgc3RyYW5nZSwgYnV0IGV2ZW4gc3RyYW5nZXIsIGl0IGlzIHByb2dyYW1tZWQgZGlyZWN0bHkKK2ludG8gdGhlIHZpbSBlcnJvciBoYW5kbGluZyBjb2RlIHRvIGZ1bmN0aW9uIGV4YWN0bHkgdGhpcyB3YXkuCVRoZXJlIHdlcmUKK25vIGNvbW1lbnRzLCBhbmQgbm9ib2R5IHJlc3BvbmRlZCBvbiB0aGUgdmltIG1haWxpbmcgbGlzdCwgc28gSSBqdXN0IGRlY2lkZWQKK3RvIGxpdmUgd2l0aCBpdC4KKworVGhlIHVwc2hvdCBvZiBpdCBhbGwgaXMgdGhhdCBpZiB5b3Ugc2VlIGFuIGVycm9yIGxpa2UgIkVudGVyaW5nOiIsIGNoYW5jZXMKK2FyZSB0aGF0IHlvdXIgYnVpbGQgc3VjY2VlZGVkIGFuZCBhbGwgdGhlIHRlc3RzIHJhbiB3aXRob3V0IGEgcHJvYmxlbS4KKworSG9wZSB0aGlzIGhlbHBzLi4uCisKK01haWwgbWUgd2l0aCBidWdzIGF0IGpkc3Vtc2lvbiBhdCBlYXJ0aGxpbmsubmV0LgorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4gPGh0bWw+PGNlbnRlcj5IZWxwCitmb3IgVklNIEhlbHAgKFZJTSBRdWlja1JlZik8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzI2Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMyNjwvQT48QlI+CisKK1R5cGUgOmhlbHAgcXVpY2tyZWYgb3IgOmggcXVpYworCitBbmQgZ2V0IGEgVklNIENvbW1hbmQgUXVpY2sgUmVmZXJlbmNlIFBhZ2UgYnJpbGxpYW50IGZvciBiZWdpbm5lcnMgJgorb2xkdGltZXJzIGFsaWtlCisKK3R5cGUgOmggaGVscCB0byBsZWFybiBob3cgdG8gdXNlIGhlbHAKKworT3RoZXIgSGVscCBUaXBzCisKKyMgaGVscCBmb3IgaGVscCA6aCB2aXN1YWwmbHQ7Qy1EJmd0OyZsdDt0YWImZ3Q7ICAgICA6IG9idGFpbiAgbGlzdCBvZiBhbGwKK3Zpc3VhbCBoZWxwIHRvcGljcworCQkJOiBUaGVuIHVzZSB0YWIgdG8gc3RlcCB0aHJ1IHRoZW0KKzpoIGN0cmwmbHQ7Qy1EJmd0OwkgICAgICA6IGxpc3QgaGVscCBvZiBhbGwgY29udHJvbCBrZXlzIDpoIDpyCis6IGhlbHAgZm9yIDpleCBjb21tYW5kIDpoIENUUkwtUgkgICAgICAgOiBub3JtYWwgbW9kZSA6aCBccgorOiB3aGF0J3MgXHIgaW4gYSByZWdleHAgOmggaV9DVFJMLVIJCTogaGVscCBmb3Igc2F5ICZsdDtDLVImZ3Q7CitpbiBpbnNlcnQgbW9kZSA6aCBjX0NUUkwtUgkgICAgICAgOiBoZWxwIGZvciBzYXkgJmx0O0MtUiZndDsgaW4gY29tbWFuZAorbW9kZSA6aCB2X0NUUkwtVgkgICAgIDogdmlzdWFsIG1vZGUgOmggdHV0b3IJCSA6IFZJTSBUdXRvcgorCitUaGVzZSBhcmUgYWxzbyBsaXN0ZWQgaW4gbXkgQmVzdCBPZiBWSU0gVGlwcyB2aW10aXAgIzMwNQorCis8L3ByZT48L3RpcD4gPC9odG1sPiA8VGlwIGNhdGVnb3J5PSJLVmltIj4KKzxodG1sPjxjZW50ZXI+a2V5IG1hcHBpbmdzPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMyNyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMjc8L0E+PEJSPgorCitJIHVzZSBteSBsZWZ0IHRodW1iIGZvciB0aGUgYWx0IGtleSBhbmQgcmlnaHQgZm9yIHRoZSBzcGFjZS4gVXNpbmcgdGhpcworY29tYm8sIHlvdSBjYW4gZ2V0IHNvbWUgdXNlZnVsIGtleSBtYXBzIGZvciB3aGljaCB5b3UgZG9uJ3QgaGF2ZSB0byBtb3ZlCit5b3VyIGhhbmRzLiBJIGZpbmQgSSBoYXZlIHRvIHR1cm4gbXkgaGFuZCBhIGxpdHRsZSB0byBwcmVzcyB0aGUgbGVmdCBjdHJsIGtleS4KKworVGhlc2UgYXJlIHNvbWUgbWFwcyBpIHVzZSBmb3IgQyBwcm9ncmFtbWluZy4KKworbWFwICcgYCBtYXAgJmx0O0MtZiZndDsgOncmbHQ7Qy1tJmd0OzohbWFrZSZsdDtDLW0mZ3Q7IG1hcCAmbHQ7TS1dJmd0OworJmx0O0MtXSZndDsJCQkJCSAgICBUYWdzIG1hcCAmbHQ7TS1bJmd0OworJmx0O0MtdCZndDsJCQkJCSAgICAgVGFncyBtYXAgJmx0O00tdSZndDsKKzohY3RhZ3MgLVIgKiZsdDtDLW0mZ3Q7CQkJCQkJIEJ1aWxkCitUYWdzIG1hcCAmbHQ7TS1jJmd0OyBJLyombHQ7RXNjJmd0O0EqLyZsdDtFc2MmZ3Q7CitDb21tZW50IGN1cnJlbnQgbGluZSBtYXAgJmx0O00tZCZndDsgXnh4JHh4CitEZWxldGUgY29tbWVudCBmb3IgYSBzaW5nbGUgbGluZSBtYXAgJmx0O00tbCZndDsKK1t7emYlCQkJCQkgICAgICAgRm9sZCB1cHRvIHRoZSBlbmNsb3NpbmcgYnJhY2UKK2xldmVsIG1hcCAmbHQ7TS1vJmd0OyB6bwkJCQkJICAgb3BlbiBmb2xkCittYXAgJmx0O00taSZndDsgemMJCQkJCSAgICBjbG9zZSBmb2xkIG1hcAorJmx0O00tLiZndDsgOmNuJmx0O0MtbSZndDsJCQkJCSAgICBHbwordG8gbmV4dCBlcnJvciBpbiBsaXN0IG1hcCAmbHQ7TS0sJmd0OyA6Y3AmbHQ7Qy1tJmd0OworcHJldmlvdXMgZXJyb3IgaW4gbGlzdAorCitpbWFwICZsdDtUYWImZ3Q7ICZsdDtDLXAmZ3Q7CitDb21wbGV0ZSB3b3JkIGlub3JlbWFwICZsdDtTLVRhYiZndDsgJmx0O1RhYiZndDsKK1RhYiBpbm9yZW1hcCB7ICZsdDtDUiZndDt7Jmx0O0NSJmd0OworQnJhY2UgYW5kIGxpbmUgaW5vcmVtYXAgfSAmbHQ7Q1ImZ3Q7fQorYnJhY2UgYW5kIGxpbmUuIHNhdmVzIG9uZSBlbnRlciBzdHJva2UKKworaW1hcCAmbHQ7TS1qJmd0OyAmbHQ7RXNjJmd0OworRXNjYXBlLiBEb24ndCB3YW50IHRvIG1vdmUgbXkgaGFuZCB0byBlc2Mga2V5LglpbWFwICZsdDtNLWsmZ3Q7ICZsdDtDLXkmZ3Q7CitDb3B5IGxpbmUgZnJvbSBhYm92ZS4gIGltYXAgJmx0O00tcSZndDsgLyogICovJmx0O0VzYyZndDtoaGkKK0NvbW1lbnQgc2VsZWN0ZWQgbGluZXMKKworbm9yZW1hcCAmbHQ7TS1yJmd0OyBkZGtveyZsdDtDLW0mZ3Q7fSZsdDtFc2MmZ3Q7a3BrbwkJIENvbnZlcnQgYQorc2ltcGxlIHN0YXRlbWVudCB0byBhIGNvbXBvdW5kIHN0YXRlbWVudC4gQW5kIHBsYWNlIGN1cnNvciBhYm92ZSBwcmV2IGxpbmUuCitub3JlbWFwICZsdDtNLWsmZ3Q7IGRka297Jmx0O0MtbSZndDt9Jmx0O0VzYyZndDtrcG8JCVNhbWUgYXMKK2Fib3ZlIGJ1dCBwbGFjZSBjdXJzb3IgYmVsb3cgb2xkIGxpbmUuCisKK3Zub3JlbWFwICZsdDtNLWomZ3Q7ICZsdDtFc2MmZ3Q7IHZub3JlbWFwICZsdDtNLWMmZ3Q7CitkaS8qJmx0O0MtbSZndDsvJmx0O0MtbSZndDsmbHQ7RXNjJmd0O2trcAkgICAgQ29tbWVudGVkIHNlbGVjdGVkIHRleHQKKworbm1hcCAmbHQ7TS1uJmd0OyA6bm9oJmx0O0NSJmd0OwkJCSAgICAgIE5vIGhpbGlnaHQKKworQnllLAorICAgIE5pdGhpbi4KKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+IDxodG1sPjxjZW50ZXI+VmltCitpbiBNaWNyb3NvZnQgVmlzdWFsIEZveHBybzwvY2VudGVyPiA8cHJlPiA8QQorSFJFRj0iaHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMjgiPmh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzI4PC9BPjxCUj4KKworWW91IGNhbiB0ZWxsIE1TIFZGUCB0byB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yIGZvciBlZGl0aW5nIHByb2plY3QgZmlsZXMuCitUbyB0ZWxsIE1TIFZGUCB0byB1c2UgVmltOgorCitzdGFydCByZWdlZGl0IGxvY2F0ZSBbSEtFWV9DVVJSRU5UX1VTRVIKKyBcU29mdHdhcmUKKyAgXE1pY3Jvc29mdAorICAgXFZpc3VhbEZveFBybworICAgIFw1LjAKKyAgICAgXE9wdGlvbnNdCisKK2FuZCBjcmVhdGUgYSBuZXcgaXRlbSBURURJVCB3aXRoIHN0cmluZyBjb250ZW50ICIvTgorQzpcUHJvZ3JhfjFcdmltXHZpbTYxXGd2aW0uZXhlIiAob3Igd2hhdGV2ZXIgeW91ciBwYXRoIHRvIFZpbSBoYXBwZW5zIHRvIGJlLikKKworVGhpcyB3aWxsIG5vdCByZXBsYWNlIHRoZSBpbnRlcm5hbCBWRlAgZWRpdG9yIGZvciBzdWNoIHRoaW5ncyBhcyBtb2RpZnlpbmcgdGhlCisiY2xpY2sgbWV0aG9kIiBmb3IgYSBidXR0b24gKHVuZm9ydHVuYXRlbHkpLCBidXQgd2hlbiB5b3UgbW9kaWZ5IGEgcHJvZ3JhbSwKK1ZGUCB3aWxsIGZpcmUgdXAgZ3ZpbS4KKworU3RhcnQgTVMgVkZQLCBzdGFydCBIZWxwIGFuZCBsb29rIGZvciBURURJVC4gOy0pCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5BIG1hcCBmb3Igc3dhcHBpbmcgd29yZHM8L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzI5Ij5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMyOTwvQT48QlI+CisKK1B1dCB0aGUgZm9sbG93aW5nIG1hcCBpbnRvIHlvdXIgJmx0Oy52aW1yYyZndDs6CisKKyAgbm1hcCAmbHQ7c2lsZW50Jmd0OyBndworICAiX3lpdzpzL1woXCUjXHdcK1wpXChcV1wrXClcKFx3XCtcKS9cM1wyXDEvJmx0O2NyJmd0OyZsdDtjLW8mZ3Q7Jmx0O2MtbCZndDsKKworVGhlbiB3aGVuIHlvdSBwdXQgdGhlIGN1cnNvciBvbiBvciBpbiBhIHdvcmQsIHByZXNzICJndyIsIGFuZCB0aGUgd29yZCB3aWxsCitiZSBzd2FwcGVkIHdpdGggdGhlIG5leHQgd29yZC4JVGhlIHdvcmRzIG1heSBldmVuIGJlIHNlcGFyYXRlZCBieSBwdW5jdHVhdGlvbgorKHN1Y2ggYXMgImFiYyA9IGRlZiIpLgorCitXaGlsZSB3ZSdyZSB0YWxraW5nIHN3YXBwaW5nLCBoZXJlJ3MgYSBtYXAgZm9yIHN3YXBwaW5nIGNoYXJhY3RlcnM6CisKKyAgbm1hcCAmbHQ7c2lsZW50Jmd0OyBnYyAgICB4cGgKKworVGhpcyBoaW50IHdhcyBmb3JtZWQgaW4gYSBjb2xsYWJvcmF0aW9uIGJldHdlZW4gQ2hpcCBDYW1wYmVsbCAtIEFydW4gRWFzaSAtCitCZW5qaSBGaXNoZXIKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPmhvdyB0byBzdG9wIGF1dG8gaW5kZW50aW5nPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMzMCI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMzA8L0E+PEJSPgorCitTaW5jZSBWSU0gNi4wIHRoZSBpbmRlbnQgaGFzIGJlZW4gaW1wcm92ZWQgc28gbXVjaC4gIEJ1dCBzb21ldGltZXMgd2hlbgord2UgYXJlIHBhc3RpbmcgZm9ybWF0ZWQgdGV4dCAoc291cmNlIGNvZGUgb3IgSFRNTCBldGMpIGludG8gYSBidWZmZXIsIFZJTQoraW5kZW50cyBhZ2FpbiBzbyB0aGF0IGxpbmVzIHdpbGwgYmUgcGFkZGVkIHdpdGggdG9vIG11Y2ggc3BhY2VzLgorCitTZXR0aW5nIG5vY2luZGVudCwgbm9hdXRvaW5kZW50LCBub3NtYXJ0aW5kZW50IHN0aWxsIGNhbm5vdCBzdG9wIHRoaXMuCUFsbCB5b3UKK25lZWQgdG8gZG8gaXMgInNldCBwYXN0ZSIsIHRoZW4gcGFzdGUgeW91ciBzdHVmZiwgYW5kIHRoZW4gInNldCBub3Bhc3RlIiBhZ2Fpbi4KKworUmVmOiBpbmRlbnRleHByCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5tb2RsaW5lIG1hZ2ljLi4uPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMzMSI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMzE8L0E+PEJSPgorCisgIE9uZSAgb2YgdGhlICB0aGluZ3MgYWJvdXQgIHZpbSB0aGF0ICBhcmUgYm90aCAgcXVpdGUgc2ltcGxlICB5ZXQgdmVyeQordXNlZnVsIGlzIHRoYXQgeW91IGNhbiBzdG9yZSAgYnktZmlsZSBzZXR0aW5ncy4uLiB0aGF0IGlzIGVhY2ggZmlsZSBjYW4KK2NvbnRhaW4gc2V0dGluZ3Mgc3BlY2lmaWMgdG8gaXQuIHRoaXMgIHRoaW5nIGlzIGNhbGxlZCBhIG1vZGxpbmUgKDpoZWxwCittb2RsaW5lKS4gdGhvdWdoIHRoaXMgIGlzIGxpbWl0ZWQgdG8gb25seSB0aGUgICdzZXQnIGNvbW1hbmQgYXJndW1lbnRzLCB5b3UKK2NhbiBkbyBhbGxvdCBvZiBsb2NhbCB0byAgZmlsZSB0aGluZ3MgbGlrZSB0aGUgaW5kZW50IHR5cGUsIGZvbGRpbmcgbWV0aG9kCithbmQgc28gb24uCisKK3RoZSBzeW50YXggaXMgYXMgZm9sbG93czoKKworLy8gdmltOnNldCB0cz00IHN3PTQgbm93cmFwOgorCitvcgorCisvKiB2aW06bm9haTp0cz0yOnN3PTQ6ICovCisKKyAgVGhlIG1vZGxpbmVzIGNhbiBiZSBjb250YWluZWQgaW4gY29tbWVudHMgc28gYXMgdG8gbm90IGludGVyZmVyZSB3aXRoCit0aGUgZmlsZSAgc3ludGF4IChzaG93biBoZXJlICBmb3IgQy9DKyspLiB0aGVzZSAgbGluZXMgYXJlIHJlYWQgIGJ5IHZpbSB3aGVuCitpdCBsb2FkcyB0aGUgIGZpbGUsIGFuZCB0aGV5IGNhbiBlaXRoZXIgYmUgaW4gdGhlICBmaXJzdCBvciBsYXN0IDUgbGluZXMKKyhieSBkZWZhdWx0KS4KKworcmVmZXIgdG8gJzpoZWxwIG1vZGxpbmUnCisKKy8vYW5kIGEgaGFwcHkgMjB0aCBiaXJ0aGRheSB0byB0aGUgZ29vZCBvbGQgc21pbGV5ISEgOi0pCisKKzwvcHJlPjwvdGlwPiA8L2h0bWw+IDxUaXAgY2F0ZWdvcnk9IktWaW0iPgorPGh0bWw+PGNlbnRlcj5tYWtlIGZvb3Rub3RlcyBpbiB2aW08L2NlbnRlcj4gPHByZT4gPEEKK0hSRUY9Imh0dHA6Ly92aW0uc2YubmV0L3RpcF92aWV3LnBocD90aXBfaWQ9MzMyIj5odHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMzMjwvQT48QlI+CisKK0kgZm91bmQgYXQgPEEKK0hSRUY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cHM/cT12aW0rY2hhbmdpbmcrc2hlbGwrdG8renNoJmhsPWVuJmxyPSZpZT1VVEYtOCZzZWxtPVNfUmg5LjcxNiUyNGE1LjEyNDE1MCU0MG5ld3MudWNoaWNhZ28uZWR1JnJudW09NCI+aHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3Vwcz9xPXZpbStjaGFuZ2luZytzaGVsbCt0byt6c2gmaGw9ZW4mbHI9JmllPVVURi04JnNlbG09U19SaDkuNzE2JTI0YTUuMTI0MTUwJTQwbmV3cy51Y2hpY2Fnby5lZHUmcm51bT00PC9BPjxCUj4KK2EgbWFjcm8gdG8gaW5zZXJ0IGZvb3Rub3RlcyBpbiB2aW0sIGJ1dCBpdCBkb2Vzbid0IHdvcmsgYXMgb2YgdmltNi4wLiAgc28gaQord3JvdGUgbXkgb3duOyB0aGlzIG1hY3JvIHJlcXVpcmVzIHR3byBkaWZmZXJlbnRzIHNob3J0Y3V0cywgb25lIGZvciBlbnRlcmluZwordGhlIGZpcnN0IGZvb3Rub3RlLCB0aGUgb3RoZXIgb25lIGZvciBhbGwgc3Vic2VxdWVudCBmb290bm90ZXMuCisKK3doZW4geW91IGhpdCAiSzAiIChmaXJzdCBmb290bm90ZSkgb3IgIktLIiAoYWxsIG90aGVyIGZvb3Rub3RlcykgaW4gbm9ybWFsCittb2RlLCB5b3VyIGN1cnNvciBpcyBwb3NpdGlvbm5lZCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCwgaW4gdGhlIGZvb3Rub3RlICYKK2luIGluc2VydCBtb2RlLiBUaGUgImEiIGJvb2ttYXJrIGlzIHNldCB0byB0aGUgcGxhY2Ugd2hlcmUgeW91IGVudGVyZWQgdGhlCitmb290bm90ZSBpbiB0aGUgdGV4dC4gc28gYSAiYGEiIHdpbGwgYnJpbmcgeW91IGJhY2sgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQorZm9vdG5vdGUgaW4gdGhlIHRleHQuCisKKyIgZm9yIG5vdyByZXF1aXJlcyBlbnRlcmluZyBLMCBmb3IgdGhlIGZpcnN0IGZvb3Rub3RlIGFuZCB0aGVuIEtLCitubWFwIEswIGlbMF0mbHQ7ZXNjJmd0O21hRyRpJmx0O2VuZCZndDsmbHQ7ZW50ZXImZ3Q7WzBdIG5tYXAgS0sKK21hRyQ/XFtbMC05XSpcXSZsdDtlbnRlciZndDt5dF1HJGkmbHQ7ZW5kJmd0OyZsdDtlbnRlciZndDsmbHQ7ZXNjJmd0O3AmbHQ7Qy1hJmd0O2kmbHQ7ZW5kJmd0O10mbHQ7ZXNjJmd0O2BhUCZsdDtDLWEmZ3Q7Jmx0O3JpZ2h0Jmd0O2ldJmx0O2VzYyZndDttYUckaSZsdDtlbmQmZ3Q7Jmx0O2VuZCZndDsKKworPC9wcmU+PC90aXA+IDwvaHRtbD4gPFRpcCBjYXRlZ29yeT0iS1ZpbSI+Cis8aHRtbD48Y2VudGVyPlN5bnRheC1iYXNlZCBmb2xkaW5nIGZvciBjL2MrKy9qYXZhPC9jZW50ZXI+IDxwcmU+IDxBCitIUkVGPSJodHRwOi8vdmltLnNmLm5ldC90aXBfdmlldy5waHA/dGlwX2lkPTMzMyI+aHR0cDovL3ZpbS5zZi5uZXQvdGlwX3ZpZXcucGhwP3RpcF9pZD0zMzM8L0E+PEJSPgorCitIZXJlJ3MgYSBmdW5jdGlvbiB0byB0b2dnbGUgdGhlIHVzZSBvZiBzeW50YXgtYmFzZWQgZm9sZGluZyBmb3IgYSBjL2MrKy9qYXZhCitmaWxlLiBJdCBhbHNvIGhhbmRsZXMgZm9sZGluZyBtYXJrZXJzLgorCitmdW5jdGlvbiEgT3V0bGluZVRvZ2dsZSgpCisgICAgaWYgKCEgZXhpc3RzICgiYjpvdXRsaW5lX21vZGUiKSkKKwlsZXQgYjpvdXRsaW5lX21vZGUgPSAwCisgICAgZW5kaWYKKworICAgIGlmIChiOm91dGxpbmVfbW9kZSA9PSAwKQorCXN5biByZWdpb24gbXlGb2xkIHN0YXJ0PSJ7IiBlbmQ9In0iIHRyYW5zcGFyZW50IGZvbGQgc3luIHN5bmMKKwlmcm9tc3RhcnQgc2V0IGZvbGRtZXRob2Q9c3ludGF4CisKKwlzaWxlbnQhIGV4ZWMgIiVzL3t7ey8mbHQ7Jmx0OyZsdDsvIiBzaWxlbnQhIGV4ZWMgIiVzL319fS8mZ3Q7Jmd0OyZndDsvIgorCisJbGV0IGI6b3V0bGluZV9tb2RlID0gMQorICAgIGVsc2UKKwlzZXQgZm9sZG1ldGhvZD1tYXJrZXIKKworCXNpbGVudCEgZXhlYyAiJXMvJmx0OyZsdDsmbHQ7L3t7ey8iIHNpbGVudCEgZXhlYyAiJXMvJmd0OyZndDsmZ3Q7L319fS8iCisKKwlsZXQgYjpvdXRsaW5lX21vZGUgPSAwCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKzwvaHRtbD48L3RpcD4K