Km1sYW5nLnR4dCogICAgIEZvciBWaW0gdmVyc2lvbiA3LjIuICBMYXN0IGNoYW5nZTogMjAwOCBKdW4gMDgKCgoJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKCgpNdWx0aS1sYW5ndWFnZSBmZWF0dXJlcwkJCQkqbXVsdGlsYW5nKiAqbXVsdGktbGFuZyoKClRoaXMgaXMgYWJvdXQgdXNpbmcgbWVzc2FnZXMgYW5kIG1lbnVzIGluIHZhcmlvdXMgbGFuZ3VhZ2VzLiAgRm9yIGVkaXRpbmcKbXVsdGktYnl0ZSB0ZXh0IHNlZSB8bXVsdGlieXRlfC4KClRoZSBiYXNpY3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgdXNlciBtYW51YWw6IHx1c3JfNDUudHh0fC4KCjEuIE1lc3NhZ2VzCQkJfG11bHRpbGFuZy1tZXNzYWdlc3wKMi4gTWVudXMJCQl8bXVsdGlsYW5nLW1lbnVzfAozLiBTY3JpcHRzCQkJfG11bHRpbGFuZy1zY3JpcHRzfAoKQWxzbyBzZWUgfGhlbHAtdHJhbnNsYXRlZHwgZm9yIG11bHRpLWxhbmd1YWdlIGhlbHAuCgp7VmkgZG9lcyBub3QgaGF2ZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXN9Cntub3QgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aG91dCB0aGUgfCttdWx0aV9sYW5nfCBmZWF0dXJlfQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIE1lc3NhZ2VzCQkJCQkJKm11bHRpbGFuZy1tZXNzYWdlcyoKClZpbSBwaWNrcyB1cCB0aGUgbG9jYWxlIGZyb20gdGhlIGVudmlyb25tZW50LiAgSW4gbW9zdCBjYXNlcyB0aGlzIG1lYW5zIFZpbQp3aWxsIHVzZSB0aGUgbGFuZ3VhZ2UgdGhhdCB5b3UgcHJlZmVyLCB1bmxlc3MgaXQncyBub3QgYXZhaWxhYmxlLgoKVG8gc2VlIGEgbGlzdCBvZiBzdXBwb3J0ZWQgbG9jYWxlIG5hbWVzIG9uIHlvdXIgc3lzdGVtLCBsb29rIGluIG9uZSBvZiB0aGVzZQpkaXJlY3RvcmllcyAoZm9yIFVuaXgpOgoJL3Vzci9saWIvbG9jYWxlIH4KCS91c3Ivc2hhcmUvbG9jYWxlIH4KVW5mb3J0dW5hdGVseSwgdXBwZXIvbG93ZXJjYXNlIGRpZmZlcmVuY2VzIG1hdHRlci4gIEFsc28gd2F0Y2ggb3V0IGZvciB0aGUKdXNlIG9mICItIiBhbmQgIl8iLgoKCQkJCQkgICAgKjpsYW4qICo6bGFuZyogKjpsYW5ndWFnZSogKkUxOTcqCjpsYW5bZ3VhZ2VdCjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10KOmxhbltndWFnZV0gY3R5W3BlXQo6bGFuW2d1YWdlXSB0aW1bZV0KCQkJUHJpbnQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgKGFrYSBsb2NhbGUpLgoJCQlXaXRoIHRoZSAibWVzc2FnZXMiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQltZXNzYWdlcyBpcyBwcmludGVkLiAgVGVjaG5pY2FsOiBMQ19NRVNTQUdFUy4KCQkJV2l0aCB0aGUgImN0eXBlIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IKCQkJY2hhcmFjdGVyIGVuY29kaW5nIGlzIHByaW50ZWQuICBUZWNobmljYWw6IExDX0NUWVBFLgoJCQlXaXRoIHRoZSAidGltZSIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCXN0cmZ0aW1lKCkgaXMgcHJpbnRlZC4gIFRlY2huaWNhbDogTENfVElNRS4KCQkJV2l0aG91dCBhcmd1bWVudCBhbGwgcGFydHMgb2YgdGhlIGxvY2FsZSBhcmUgcHJpbnRlZAoJCQkodGhpcyBpcyBzeXN0ZW0gZGVwZW5kZW50KS4KCQkJVGhlIGN1cnJlbnQgbGFuZ3VhZ2UgY2FuIGFsc28gYmUgb2J0YWluZWQgd2l0aCB0aGUKCQkJfHY6bGFuZ3wsIHx2OmN0eXBlfCBhbmQgfHY6bGNfdGltZXwgdmFyaWFibGVzLgoKOmxhbltndWFnZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIG1lc1tzYWdlc10ge25hbWV9CjpsYW5bZ3VhZ2VdIGN0eVtwZV0ge25hbWV9CjpsYW5bZ3VhZ2VdIHRpbVtlXSB7bmFtZX0KCQkJU2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIChha2EgbG9jYWxlKSB0byB7bmFtZX0uCgkJCVRoZSBsb2NhbGUge25hbWV9IG11c3QgYmUgYSB2YWxpZCBsb2NhbGUgb24geW91cgoJCQlzeXN0ZW0uICBTb21lIHN5c3RlbXMgYWNjZXB0IGFsaWFzZXMgbGlrZSAiZW4iIG9yCgkJCSJlbl9VUyIsIGJ1dCBzb21lIG9ubHkgYWNjZXB0IHRoZSBmdWxsIHNwZWNpZmljYXRpb24KCQkJbGlrZSAiZW5fVVMuSVNPXzg4NTktMSIuCgkJCVdpdGggdGhlICJtZXNzYWdlcyIgYXJndW1lbnQgdGhlIGxhbmd1YWdlIHVzZWQgZm9yCgkJCW1lc3NhZ2VzIGlzIHNldC4gIFRoaXMgY2FuIGJlIGRpZmZlcmVudCB3aGVuIHlvdSB3YW50LAoJCQlmb3IgZXhhbXBsZSwgRW5nbGlzaCBtZXNzYWdlcyB3aGlsZSBlZGl0aW5nIEphcGFuZXNlCgkJCXRleHQuICBUaGlzIHNldHMgJExDX01FU1NBR0VTLgoJCQlXaXRoIHRoZSAiY3R5cGUiIGFyZ3VtZW50IHRoZSBsYW5ndWFnZSB1c2VkIGZvcgoJCQljaGFyYWN0ZXIgZW5jb2RpbmcgaXMgc2V0LiAgVGhpcyBhZmZlY3RzIHRoZSBsaWJyYXJpZXMKCQkJdGhhdCBWaW0gd2FzIGxpbmtlZCB3aXRoLiAgSXQncyB1bnVzdWFsIHRvIHNldCB0aGlzIHRvCgkJCWEgZGlmZmVyZW50IHZhbHVlIGZyb20gJ2VuY29kaW5nJy4gIFRoaXMgc2V0cwoJCQkkTENfQ1RZUEUuCgkJCVdpdGggdGhlICJ0aW1lIiBhcmd1bWVudCB0aGUgbGFuZ3VhZ2UgdXNlZCBmb3IgdGltZQoJCQlhbmQgZGF0ZSBtZXNzYWdlcyBpcyBzZXQuICBUaGlzIGFmZmVjdHMgc3RyZnRpbWUoKS4KCQkJVGhpcyBzZXRzICRMQ19USU1FLgoJCQlXaXRob3V0IGFuIGFyZ3VtZW50IGJvdGggYXJlIHNldCwgYW5kIGFkZGl0aW9uYWxseQoJCQkkTEFORyBpcyBzZXQuCgkJCVdoZW4gY29tcGlsZWQgd2l0aCB0aGUgfCtmbG9hdHwgZmVhdHVyZSB0aGUgTENfTlVNRVJJQwoJCQl2YWx1ZSB3aWxsIGFsd2F5cyBiZSBzZXQgdG8gIkMiLCBzbyB0aGF0IGZsb2F0aW5nCgkJCXBvaW50IG51bWJlcnMgdXNlICcuJyBhcyB0aGUgZGVjaW1hbCBwb2ludC4KCQkJVGhpcyB3aWxsIG1ha2UgYSBkaWZmZXJlbmNlIGZvciBpdGVtcyB0aGF0IGRlcGVuZCBvbgoJCQl0aGUgbGFuZ3VhZ2UgKHNvbWUgbWVzc2FnZXMsIHRpbWUgYW5kIGRhdGUgZm9ybWF0KS4KCQkJTm90IGZ1bGx5IHN1cHBvcnRlZCBvbiBhbGwgc3lzdGVtcwoJCQlJZiB0aGlzIGZhaWxzIHRoZXJlIHdpbGwgYmUgYW4gZXJyb3IgbWVzc2FnZS4gIElmIGl0CgkJCXN1Y2NlZWRzIHRoZXJlIGlzIG5vIG1lc3NhZ2UuICBFeGFtcGxlOiA+CgkJCQk6bGFuZ3VhZ2UKCQkJCUN1cnJlbnQgbGFuZ3VhZ2U6IEMKCQkJCTpsYW5ndWFnZSBkZV9ERS5JU09fODg1OS0xCgkJCQk6bGFuZ3VhZ2UgbWVzCgkJCQlDdXJyZW50IG1lc3NhZ2VzIGxhbmd1YWdlOiBkZV9ERS5JU09fODg1OS0xCgkJCQk6bGFuZyBtZXMgZW4KPAoKTVMtV0lORE9XUyBNRVNTQUdFIFRSQU5TTEFUSU9OUwkJCQkqd2luMzItZ2V0dGV4dCoKCklmIHlvdSB1c2VkIHRoZSBzZWxmLWluc3RhbGxpbmcgLmV4ZSBmaWxlLCBtZXNzYWdlIHRyYW5zbGF0aW9ucyBzaG91bGQgd29yawphbHJlYWR5LiAgT3RoZXJ3aXNlIGdldCB0aGUgbGliaW50bC5kbGwgZmlsZSBpZiB5b3UgZG9uJ3QgaGF2ZSBpdCB5ZXQ6CgoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nZXR0ZXh0CgpUaGlzIGFsc28gY29udGFpbnMgdG9vbHMgeGdldHRleHQsIG1zZ2Zvcm1hdCBhbmQgb3RoZXJzLgoKbGliaW50bC5kbGwgc2hvdWxkIGJlIHBsYWNlZCBpbiBzYW1lIGRpcmVjdG9yeSB3aXRoIChnKXZpbS5leGUsIG9yIHNvbWUKcGxhY2Ugd2hlcmUgUEFUSCBlbnZpcm9ubWVudCB2YWx1ZSBkZXNjcmliZS4gIE1lc3NhZ2UgZmlsZXMgKHZpbS5tbykKaGF2ZSB0byBiZSBwbGFjZWQgaW4gIiRWSU1SVU5USU1FL2xhbmcveHgvTENfTUVTU0FHRVMiLCB3aGVyZSAieHgiIGlzIHRoZQphYmJyZXZpYXRpb24gb2YgdGhlIGxhbmd1YWdlIChtb3N0bHkgdHdvIGxldHRlcnMpLgoKSWYgeW91IHdyaXRlIHlvdXIgb3duIHRyYW5zbGF0aW9ucyB5b3UgbmVlZCB0byBnZW5lcmF0ZSB0aGUgLnBvIGZpbGUgYW5kCmNvbnZlcnQgaXQgdG8gYSAubW8gZmlsZS4gIFlvdSBuZWVkIHRvIGdldCB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgcmVhZAp0aGUgZmlsZSAic3JjL3BvL1JFQURNRS50eHQiLgoKVG8gb3ZlcnJ1bGUgdGhlIGF1dG9tYXRpYyBjaG9pY2Ugb2YgdGhlIGxhbmd1YWdlLCBzZXQgdGhlICRMQU5HIHZhcmlhYmxlIHRvCnRoZSBsYW5ndWFnZSBvZiB5b3VyIGNob2ljZS4gIHVzZSAiZW4iIHRvIGRpc2FibGUgdHJhbnNsYXRpb25zLiA+CgogIDpsZXQgJExBTkcgPSAnamEnCgoodGV4dCBmb3IgV2luZG93cyBieSBNdXJhb2thIFRhcm8pCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gTWVudXMJCQkJCQkqbXVsdGlsYW5nLW1lbnVzKgoKU2VlIHw0NS4yfCBmb3IgdGhlIGJhc2ljcywgZXNwLiB1c2luZyAnbGFuZ21lbnUnLgoKTm90ZSB0aGF0IGlmIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIG1lbnVzIGFmdGVyIHRoZSB0cmFuc2xhdGlvbiB3YXMKZG9uZSwgc29tZSBvZiB0aGUgbWVudXMgbWF5IGJlIHNob3duIGluIEVuZ2xpc2guICBQbGVhc2UgdHJ5IGNvbnRhY3RpbmcgdGhlCm1haW50YWluZXIgb2YgdGhlIHRyYW5zbGF0aW9uIGFuZCBhc2sgaGltIHRvIHVwZGF0ZSBpdC4gIFlvdSBjYW4gZmluZCB0aGUKbmFtZSBhbmQgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIHRyYW5zbGF0b3IgaW4KIiRWSU1SVU5USU1FL2xhbmcvbWVudV88bGFuZz4udmltIi4KClRvIHNldCB0aGUgZm9udCAob3IgZm9udHNldCkgdG8gdXNlIGZvciB0aGUgbWVudXMsIHVzZSB0aGUgfDpoaWdobGlnaHR8CmNvbW1hbmQuICBFeGFtcGxlOiA+CgoJOmhpZ2hsaWdodCBNZW51IGZvbnQ9azEyLHIxMgoKCkFMSUFTIExPQ0FMRSBOQU1FUwoKVW5mb3J0dW5hdGVseSwgdGhlIGxvY2FsZSBuYW1lcyBhcmUgZGlmZmVyZW50IG9uIHZhcmlvdXMgc3lzdGVtcywgZXZlbiB0aG91Z2gKdGhleSBhcmUgZm9yIHRoZSBzYW1lIGxhbmd1YWdlIGFuZCBlbmNvZGluZy4gIElmIHlvdSBkbyBub3QgZ2V0IHRoZSBtZW51CnRyYW5zbGF0aW9ucyB5b3UgZXhwZWN0ZWQsIGNoZWNrIHRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5kOiA+CgoJZWNobyB2OmxhbmcKCk5vdyBjaGVjayB0aGUgIiRWSU1SVU5USU1FL2xhbmciIGRpcmVjdG9yeSBmb3IgbWVudSB0cmFuc2xhdGlvbiBmaWxlcyB0aGF0IHVzZQphIHNpbWlsYXIgbGFuZ3VhZ2UuICBBIGRpZmZlcmVuY2UgaW4gYSAiLSIgYmVpbmcgYSAiXyIgYWxyZWFkeSBjYXVzZXMgYSBmaWxlCm5vdCB0byBiZSBmb3VuZCEgIEFub3RoZXIgY29tbW9uIGRpZmZlcmVuY2UgdG8gd2F0Y2ggb3V0IGZvciBpcyAiaXNvODg1OS0xIgp2ZXJzdXMgImlzb184ODU5LTEiLiAgRm9ydHVuYXRlbHkgVmltIG1ha2VzIGFsbCBuYW1lcyBsb3dlcmNhc2UsIHRodXMgeW91CmRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgY2FzZSBkaWZmZXJlbmNlcy4gIFNwYWNlcyBhcmUgY2hhbmdlZCB0bwp1bmRlcnNjb3JlcywgdG8gYXZvaWQgaGF2aW5nIHRvIGVzY2FwZSB0aGVtLgoKSWYgeW91IGZpbmQgYSBtZW51IHRyYW5zbGF0aW9uIGZpbGUgZm9yIHlvdXIgbGFuZ3VhZ2Ugd2l0aCBhIGRpZmZlcmVudCBuYW1lLApjcmVhdGUgYSBmaWxlIGluIHlvdXIgb3duIHJ1bnRpbWUgZGlyZWN0b3J5IHRvIGxvYWQgdGhhdCBvbmUuICBUaGUgbmFtZSBvZgp0aGF0IGZpbGUgY291bGQgYmU6ID4KCgl+Ly52aW0vbGFuZy9tZW51Xzx2Omxhbmc+LnZpbQoKQ2hlY2sgdGhlICdydW50aW1lcGF0aCcgb3B0aW9uIGZvciBkaXJlY3RvcmllcyB3aGljaCBhcmUgc2VhcmNoZWQuICBJbiB0aGF0CmZpbGUgcHV0IGEgY29tbWFuZCB0byBsb2FkIHRoZSBtZW51IGZpbGUgd2l0aCB0aGUgb3RoZXIgbmFtZTogPgoKCXJ1bnRpbWUgbGFuZy9tZW51XzxvdGhlcl9sYW5nPi52aW0KCgpUUkFOU0xBVElORyBNRU5VUwoKSWYgeW91IHdhbnQgdG8gZG8geW91ciBvd24gdHJhbnNsYXRpb25zLCB5b3UgY2FuIHVzZSB0aGUgfDptZW51dHJhbnN8IGNvbW1hbmQsCmV4cGxhaW5lZCBiZWxvdy4gIEl0IGlzIHJlY29tbWVuZGVkIHRvIHB1dCB0aGUgdHJhbnNsYXRpb25zIGZvciBvbmUgbGFuZ3VhZ2UKaW4gYSBWaW0gc2NyaXB0LiAgRm9yIGEgbGFuZ3VhZ2UgdGhhdCBoYXMgbm8gdHJhbnNsYXRpb24geWV0LCBwbGVhc2UgY29uc2lkZXIKYmVjb21pbmcgdGhlIG1haW50YWluZXIgYW5kIG1ha2UgeW91ciB0cmFuc2xhdGlvbnMgYXZhaWxhYmxlIHRvIGFsbCBWaW0gdXNlcnMuClNlbmQgYW4gZS1tYWlsIHRvIHRoZSBWaW0gbWFpbnRhaW5lciA8bWFpbnRhaW5lckB2aW0ub3JnPi4KCgkJCQkJKjptZW51dCogKjptZW51dHJhbnMqICo6bWVudXRyYW5zbGF0ZSoKOm1lbnV0W3JhbnNsYXRlXSBjbGVhcgoJCQlDbGVhciBhbGwgbWVudSB0cmFuc2xhdGlvbnMuCgo6bWVudXRbcmFuc2xhdGVdIHtlbmdsaXNofSB7bXlsYW5nfQoJCQlUcmFuc2xhdGUgbWVudSBuYW1lIHtlbmdsaXNofSB0byB7bXlsYW5nfS4gIEFsbAoJCQlzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSAiJiIgYW5kICI8VGFiPiIgbmVlZCB0byBiZQoJCQlpbmNsdWRlZC4gIFNwYWNlcyBhbmQgZG90cyBuZWVkIHRvIGJlIGVzY2FwZWQgd2l0aCBhCgkJCWJhY2tzbGFzaCwganVzdCBsaWtlIGluIG90aGVyIHw6bWVudXwgY29tbWFuZHMuCgpTZWUgdGhlICRWSU1SVU5USU1FL2xhbmcgZGlyZWN0b3J5IGZvciBleGFtcGxlcy4KClRvIHRyeSBvdXQgeW91ciB0cmFuc2xhdGlvbnMgeW91IGZpcnN0IGhhdmUgdG8gcmVtb3ZlIGFsbCBtZW51cy4gIFRoaXMgaXMgaG93CnlvdSBjYW4gZG8gaXQgd2l0aG91dCByZXN0YXJ0aW5nIFZpbTogPgoJOnNvdXJjZSAkVklNUlVOVElNRS9kZWxtZW51LnZpbQoJOnNvdXJjZSA8eW91ci1uZXctbWVudS1maWxlPgoJOnNvdXJjZSAkVklNUlVOVElNRS9tZW51LnZpbQoKRWFjaCBwYXJ0IG9mIGEgbWVudSBwYXRoIGlzIHRyYW5zbGF0ZWQgc2VwYXJhdGVseS4gIFRoZSByZXN1bHQgaXMgdGhhdCB3aGVuCiJIZWxwIiBpcyB0cmFuc2xhdGVkIHRvICJIaWxmZSIgYW5kICJPdmVydmlldyIgdG8gItxiZXJibGljayIgdGhlbgoiSGVscC5PdmVydmlldyIgd2lsbCBiZSB0cmFuc2xhdGVkIHRvICJIaWxmZS7cYmVyYmxpY2siLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFNjcmlwdHMJCQkJCQkqbXVsdGlsYW5nLXNjcmlwdHMqCgpJbiBWaW0gc2NyaXB0cyB5b3UgY2FuIHVzZSB0aGUgfHY6bGFuZ3wgdmFyaWFibGUgdG8gZ2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlCihsb2NhbGUpLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgIkMiIG9yIGNvbWVzIGZyb20gdGhlICRMQU5HIGVudmlyb25tZW50CnZhcmlhYmxlLgoKVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBzaW1wbGUgd2F5LCB0byBtYWtlCmEgbWVzc2FnZSBhZGFwdCB0byBsYW5ndWFnZSBwcmVmZXJlbmNlcyBvZiB0aGUgdXNlciwgPgoKCTppZiB2OmxhbmcgPX4gImRlX0RFIgoJOiAgZWNobyAiR3V0ZW4gTW9yZ2VuIgoJOmVsc2UKCTogIGVjaG8gIkdvb2QgbW9ybmluZyIKCTplbmRpZgo8CgogdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6Cg==