CkluZm9ybWFsIHN0YW5kYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTS4gTmlsc3NvbgpEb2N1bWVudDogaWQzdjIuMy4wLnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgM3JkIEZlYnJ1YXJ5IDE5OTkKCgogICAgICAgICAgICAgICAgICAgICAgICAgICBJRDMgdGFnIHZlcnNpb24gMi4zLjAKClN0YXR1cyBvZiB0aGlzIGRvY3VtZW50CgogICBUaGlzIGRvY3VtZW50IGlzIGFuIGluZm9ybWFsIHN0YW5kYXJkIGFuZCByZXBsYWNlcyB0aGUgSUQzdjIuMi4wCiAgIHN0YW5kYXJkIFtJRDN2Ml0uIFRoZSBpbmZvcm1hbCBzdGFuZGFyZCBpcyByZWxlYXNlZCBzbyB0aGF0CiAgIGltcGxlbWVudG9ycyBjb3VsZCBoYXZlIGEgc2V0IHN0YW5kYXJkIGJlZm9yZSBhIGZvcm1hbCBzdGFuZGFyZCBpcwogICBzZXQuIFRoZSBmb3JtYWwgc3RhbmRhcmQgd2lsbCB1c2UgYW5vdGhlciB2ZXJzaW9uIG9yIHJldmlzaW9uIG51bWJlcgogICBpZiBub3QgaWRlbnRpY2FsIHRvIHdoYXQgaXMgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIFRoZSBjb250ZW50cwogICBpbiB0aGlzIGRvY3VtZW50IG1heSBjaGFuZ2UgZm9yIGNsYXJpZmljYXRpb25zIGJ1dCBuZXZlciBmb3IgYWRkZWQgb3IKICAgYWx0ZXJlZCBmdW5jdGlvbmFsbGl0eS4KCiAgIERpc3RyaWJ1dGlvbiBvZiB0aGlzIGRvY3VtZW50IGlzIHVubGltaXRlZC4KCgpBYnN0cmFjdAoKICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIElEM3YyLjMuMCwgd2hpY2ggaXMgYSBtb3JlIGRldmVsb3BlZAogICB2ZXJzaW9uIG9mIHRoZSBJRDN2MiBpbmZvcm1hbCBzdGFuZGFyZCBbSUQzdjJdICh2ZXJzaW9uIDIuMi4wKSwKICAgZXZvbHZlZCBmcm9tIHRoZSBJRDMgdGFnZ2luZyBzeXN0ZW0uIFRoZSBJRDN2MiBvZmZlcnMgYSBmbGV4aWJsZSB3YXkKICAgb2Ygc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dCBhbiBhdWRpbyBmaWxlIHdpdGhpbiBpdHNlbGYgdG8gZGV0ZXJtaW5lCiAgIGl0cyBvcmlnaW4gYW5kIGNvbnRlbnRzLiBUaGUgaW5mb3JtYXRpb24gbWF5IGJlIHRlY2huaWNhbAogICBpbmZvcm1hdGlvbiwgc3VjaCBhcyBlcXVhbGlzYXRpb24gY3VydmVzLCBhcyB3ZWxsIGFzIHJlbGF0ZWQgbWV0YQogICBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aXRsZSwgcGVyZm9ybWVyLCBjb3B5cmlnaHQgZXRjLgoKCjEuICAgVGFibGUgb2YgY29udGVudHMKCiAgIDIuICAgQ29udmVudGlvbnMgaW4gdGhpcyBkb2N1bWVudAogICAzLiAgIElEM3YyIG92ZXJ2aWV3CiAgICAgMy4xLiAgIElEM3YyIGhlYWRlcgogICAgIDMuMi4gICBJRDN2MiBleHRlbmRlZCBoZWFkZXIKICAgICAzLjMuICAgSUQzdjIgZnJhbWVzIG92ZXJ2aWV3CiAgICAgICAzLjMuMS4gICBGcmFtZSBoZWFkZXIgZmxhZ3MKICAgICAgIDMuMy4yLiAgIERlZmF1bHQgZmxhZ3MKICAgNC4gICBEZWNsYXJlZCBJRDN2MiBmcmFtZXMKICAgICA0LjEuICAgVW5pcXVlIGZpbGUgaWRlbnRpZmllcgogICAgIDQuMi4gICBUZXh0IGluZm9ybWF0aW9uIGZyYW1lcwogICAgICAgNC4yLjEuICAgVGV4dCBpbmZvcm1hdGlvbiBmcmFtZXMgLSBkZXRhaWxzCiAgICAgICA0LjIuMi4gICBVc2VyIGRlZmluZWQgdGV4dCBpbmZvcm1hdGlvbiBmcmFtZQogICAgIDQuMy4gICBVUkwgbGluayBmcmFtZXMKICAgICAgIDQuMy4xLiAgIFVSTCBsaW5rIGZyYW1lcyAtIGRldGFpbHMKICAgICAgIDQuMy4yLiAgIFVzZXIgZGVmaW5lZCBVUkwgbGluayBmcmFtZQogICAgIDQuNC4gICBJbnZvbHZlZCBwZW9wbGUgbGlzdAogICAgIDQuNS4gICBNdXNpYyBDRCBJZGVudGlmaWVyCiAgICAgNC42LiAgIEV2ZW50IHRpbWluZyBjb2RlcwogICAgIDQuNy4gICBNUEVHIGxvY2F0aW9uIGxvb2t1cCB0YWJsZQogICAgIDQuOC4gICBTeW5jZWQgdGVtcG8gY29kZXMKICAgICA0LjkuICAgVW5zeWNocm9uaXNlZCBseXJpY3MvdGV4dCB0cmFuc2NyaXB0aW9uCiAgICAgNC4xMC4gIFN5bmNocm9uaXNlZCBseXJpY3MvdGV4dAogICAgIDQuMTEuICBDb21tZW50cwogICAgIDQuMTIuICBSZWxhdGl2ZSB2b2x1bWUgYWRqdXN0bWVudAogICAgIDQuMTMuICBFcXVhbGlzYXRpb24KICAgICA0LjE0LiAgUmV2ZXJiCiAgICAgNC4xNS4gIEF0dGFjaGVkIHBpY3R1cmUKICAgICA0LjE2LiAgR2VuZXJhbCBlbmNhcHN1bGF0ZWQgb2JqZWN0CiAgICAgNC4xNy4gIFBsYXkgY291bnRlcgogICAgIDQuMTguICBQb3B1bGFyaW1ldGVyCiAgICAgNC4xOS4gIFJlY29tbWVuZGVkIGJ1ZmZlciBzaXplCiAgICAgNC4yMC4gIEF1ZGlvIGVuY3J5cHRpb24KICAgICA0LjIxLiAgTGlua2VkIGluZm9ybWF0aW9uCiAgICAgNC4yMi4gIFBvc2l0aW9uIHN5bmNocm9uaXNhdGlvbiBmcmFtZQogICAgIDQuMjMuICBUZXJtcyBvZiB1c2UKICAgICA0LjI0LiAgT3duZXJzaGlwIGZyYW1lCiAgICAgNC4yNS4gIENvbW1lcmNpYWwgZnJhbWUKICAgICA0LjI2LiAgRW5jcnlwdGlvbiBtZXRob2QgcmVnaXN0cmF0aW9uCiAgICAgNC4yNy4gIEdyb3VwIGlkZW50aWZpY2F0aW9uIHJlZ2lzdHJhdGlvbgoJIDQuMjguICBQcml2YXRlIGZyYW1lCiAgIDUuICAgVGhlICd1bnN5bmNocm9uaXNhdGlvbiBzY2hlbWUnCiAgIDYuICAgQ29weXJpZ2h0CiAgIDcuICAgUmVmZXJlbmNlcwogICA4LiAgIEFwcGVuZGl4CiAgICAgQS4gICBBcHBlbmRpeCBBIC0gR2VucmUgTGlzdCBmcm9tIElEM3YxCiAgIDkuICAgQXV0aG9yJ3MgQWRkcmVzcwoKCjIuICAgQ29udmVudGlvbnMgaW4gdGhpcyBkb2N1bWVudAoKICAgSW4gdGhlIGV4YW1wbGVzLCB0ZXh0IHdpdGhpbiAiIiBpcyBhIHRleHQgc3RyaW5nIGV4YWN0bHkgYXMgaXQKICAgYXBwZWFycyBpbiBhIGZpbGUuIE51bWJlcnMgcHJlY2VkZWQgd2l0aCAkIGFyZSBoZXhhZGVjaW1hbCBhbmQKICAgbnVtYmVycyBwcmVjZWRlZCB3aXRoICUgYXJlIGJpbmFyeS4gJHh4IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBieXRlCiAgIHdpdGggdW5rbm93biBjb250ZW50LiAleCBpcyB1c2VkIHRvIGluZGljYXRlIGEgYml0IHdpdGggdW5rbm93bgogICBjb250ZW50LiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgKE1TQikgb2YgYSBieXRlIGlzIGNhbGxlZCAnYml0IDcnCiAgIGFuZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpIGlzIGNhbGxlZCAnYml0IDAnLgoKICAgQSB0YWcgaXMgdGhlIHdob2xlIHRhZyBkZXNjcmliZWQgaW4gdGhpcyBkb2N1bWVudC4gQSBmcmFtZSBpcyBhIGJsb2NrCiAgIG9mIGluZm9ybWF0aW9uIGluIHRoZSB0YWcuIFRoZSB0YWcgY29uc2lzdHMgb2YgYSBoZWFkZXIsIGZyYW1lcyBhbmQKICAgb3B0aW9uYWwgcGFkZGluZy4gQSBmaWVsZCBpcyBhIHBpZWNlIG9mIGluZm9ybWF0aW9uOyBvbmUgdmFsdWUsIGEKICAgc3RyaW5nIGV0Yy4gQSBudW1lcmljIHN0cmluZyBpcyBhIHN0cmluZyB0aGF0IGNvbnNpc3RzIG9mIHRoZQogICBjaGFyYWN0ZXJzIDAtOSBvbmx5LgoKCjMuICAgSUQzdjIgb3ZlcnZpZXcKCiAgIFRoZSB0d28gYmlnZ2VzdCBkZXNpZ24gZ29hbHMgd2VyZSB0byBiZSBhYmxlIHRvIGltcGxlbWVudCBJRDN2MgogICB3aXRob3V0IGRpc3R1cmJpbmcgb2xkIHNvZnR3YXJlIHRvbyBtdWNoIGFuZCB0aGF0IElEM3YyIHNob3VsZCBiZQogICBhcyBmbGV4aWJsZSBhbmQgZXhwYW5kYWJsZSBhcyBwb3NzaWJsZS4KCiAgIFRoZSBmaXJzdCBjcml0ZXJpb24gaXMgbWV0IGJ5IHRoZSBzaW1wbGUgZmFjdCB0aGF0IHRoZSBNUEVHIFtNUEVHXQogICBkZWNvZGluZyBzb2Z0d2FyZSB1c2VzIGEgc3luY3NpZ25hbCwgZW1iZWRkZWQgaW4gdGhlIGF1ZGlvc3RyZWFtLCB0bwogICAnbG9jayBvbiB0bycgdGhlIGF1ZGlvLiBTaW5jZSB0aGUgSUQzdjIgdGFnIGRvZXNuJ3QgY29udGFpbiBhIHZhbGlkCiAgIHN5bmNzaWduYWwsIG5vIHNvZnR3YXJlIHdpbGwgYXR0ZW1wdCB0byBwbGF5IHRoZSB0YWcuIElmLCBmb3IgYW55CiAgIHJlYXNvbiwgY29pbmNpZGVuY2UgbWFrZSBhIHN5bmNzaWduYWwgYXBwZWFyIHdpdGhpbiB0aGUgdGFnIGl0IHdpbGwKICAgYmUgdGFrZW4gY2FyZSBvZiBieSB0aGUgJ3Vuc3luY2hyb25pc2F0aW9uIHNjaGVtZScgZGVzY3JpYmVkIGluCiAgIHNlY3Rpb24gNS4KCiAgIFRoZSBzZWNvbmQgY3JpdGVyaW9uIGhhcyBtYWRlIGEgbW9yZSBub3RpY2VhYmxlIGltcGFjdCBvbiB0aGUgZGVzaWduCiAgIG9mIHRoZSBJRDN2MiB0YWcuIEl0IGlzIGNvbnN0cnVjdGVkIGFzIGEgY29udGFpbmVyIGZvciBzZXZlcmFsCiAgIGluZm9ybWF0aW9uIGJsb2NrcywgY2FsbGVkIGZyYW1lcywgd2hvc2UgZm9ybWF0IG5lZWQgbm90IGJlIGtub3duIHRvCiAgIHRoZSBzb2Z0d2FyZSB0aGF0IGVuY291bnRlcnMgdGhlbS4gQXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IGZyYW1lIHRoZXJlCiAgIGlzIGFuIGlkZW50aWZpZXIgdGhhdCBleHBsYWlucyB0aGUgZnJhbWVzJyBmb3JtYXQgYW5kIGNvbnRlbnQsIGFuZCBhCiAgIHNpemUgZGVzY3JpcHRvciB0aGF0IGFsbG93cyBzb2Z0d2FyZSB0byBza2lwIHVua25vd24gZnJhbWVzLgoKICAgSWYgYSB0b3RhbCByZXZpc2lvbiBvZiB0aGUgSUQzdjIgdGFnIHNob3VsZCBiZSBuZWVkZWQsIHRoZXJlIGlzIGEKICAgdmVyc2lvbiBudW1iZXIgYW5kIGEgc2l6ZSBkZXNjcmlwdG9yIGluIHRoZSBJRDN2MiBoZWFkZXIuCgogICBUaGUgSUQzIHRhZyBkZXNjcmliZWQgaW4gdGhpcyBkb2N1bWVudCBpcyBtYWlubHkgdGFyZ2V0ZWQgYXQgZmlsZXMKICAgZW5jb2RlZCB3aXRoIE1QRUctMS8yIGxheWVyIEksIE1QRUctMS8yIGxheWVyIElJLCBNUEVHLTEvMiBsYXllciBJSUkKICAgYW5kIE1QRUctMi41LCBidXQgbWF5IHdvcmsgd2l0aCBvdGhlciB0eXBlcyBvZiBlbmNvZGVkIGF1ZGlvLgoKICAgVGhlIGJpdG9yZGVyIGluIElEM3YyIGlzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0IChNU0IpLiBUaGUKICAgYnl0ZW9yZGVyIGluIG11bHRpYnl0ZSBudW1iZXJzIGlzIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAoZS5nLgogICAkMTIzNDU2Nzggd291bGQgYmUgZW5jb2RlZCAkMTIgMzQgNTYgNzgpLgoKICAgSXQgaXMgcGVybWl0dGVkIHRvIGluY2x1ZGUgcGFkZGluZyBhZnRlciBhbGwgdGhlIGZpbmFsIGZyYW1lIChhdCB0aGUKICAgZW5kIG9mIHRoZSBJRDMgdGFnKSwgbWFraW5nIHRoZSBzaXplIG9mIGFsbCB0aGUgZnJhbWVzIHRvZ2V0aGVyCiAgIHNtYWxsZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBpbiB0aGUgaGVhZCBvZiB0aGUgdGFnLiBBIHBvc3NpYmxlCiAgIHB1cnBvc2Ugb2YgdGhpcyBwYWRkaW5nIGlzIHRvIGFsbG93IGZvciBhZGRpbmcgYSBmZXcgYWRkaXRpb25hbAogICBmcmFtZXMgb3IgZW5sYXJnZSBleGlzdGluZyBmcmFtZXMgd2l0aGluIHRoZSB0YWcgd2l0aG91dCBoYXZpbmcgdG8KICAgcmV3cml0ZSB0aGUgZW50aXJlIGZpbGUuIFRoZSB2YWx1ZSBvZiB0aGUgcGFkZGluZyBieXRlcyBtdXN0IGJlICQwMC4KCgozLjEuICAgSUQzdjIgaGVhZGVyCgogICBUaGUgSUQzdjIgdGFnIGhlYWRlciwgd2hpY2ggc2hvdWxkIGJlIHRoZSBmaXJzdCBpbmZvcm1hdGlvbiBpbiB0aGUKICAgZmlsZSwgaXMgMTAgYnl0ZXMgYXMgZm9sbG93czoKCiAgICAgSUQzdjIvZmlsZSBpZGVudGlmaWVyICAgICAgIklEMyIKICAgICBJRDN2MiB2ZXJzaW9uICAgICAgICAgICAgICAkMDMgMDAKICAgICBJRDN2MiBmbGFncyAgICAgICAgICAgICAgICAlYWJjMDAwMDAKICAgICBJRDN2MiBzaXplICAgICAgICAgICAgIDQgKiAlMHh4eHh4eHgKCiAgIFRoZSBmaXJzdCB0aHJlZSBieXRlcyBvZiB0aGUgdGFnIGFyZSBhbHdheXMgIklEMyIgdG8gaW5kaWNhdGUgdGhhdAogICB0aGlzIGlzIGFuIElEM3YyIHRhZywgZGlyZWN0bHkgZm9sbG93ZWQgYnkgdGhlIHR3byB2ZXJzaW9uIGJ5dGVzLiBUaGUKICAgZmlyc3QgYnl0ZSBvZiBJRDN2MiB2ZXJzaW9uIGlzIGl0J3MgbWFqb3IgdmVyc2lvbiwgd2hpbGUgdGhlIHNlY29uZAogICBieXRlIGlzIGl0cyByZXZpc2lvbiBudW1iZXIuIEluIHRoaXMgY2FzZSB0aGlzIGlzIElEM3YyLjMuMC4gQWxsCiAgIHJldmlzaW9ucyBhcmUgYmFja3dhcmRzIGNvbXBhdGlibGUgd2hpbGUgbWFqb3IgdmVyc2lvbnMgYXJlIG5vdC4gSWYKICAgc29mdHdhcmUgd2l0aCBJRDN2Mi4yLjAgYW5kIGJlbG93IHN1cHBvcnQgc2hvdWxkIGVuY291bnRlciB2ZXJzaW9uCiAgIHRocmVlIG9yIGhpZ2hlciBpdCBzaG91bGQgc2ltcGx5IGlnbm9yZSB0aGUgd2hvbGUgdGFnLiBWZXJzaW9uIGFuZAogICByZXZpc2lvbiB3aWxsIG5ldmVyIGJlICRGRi4KCiAgIFRoZSB2ZXJzaW9uIGlzIGZvbGxvd2VkIGJ5IG9uZSB0aGUgSUQzdjIgZmxhZ3MgZmllbGQsIG9mIHdoaWNoCiAgIGN1cnJlbnRseSBvbmx5IHRocmVlIGZsYWdzIGFyZSB1c2VkLgoKCiAgIGEgLSBVbnN5bmNocm9uaXNhdGlvbgoKICAgICBCaXQgNyBpbiB0aGUgJ0lEM3YyIGZsYWdzJyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QKICAgICB1bnN5bmNocm9uaXNhdGlvbiBpcyB1c2VkIChzZWUgc2VjdGlvbiA1IGZvciBkZXRhaWxzKTsgYSBzZXQgYml0CiAgICAgaW5kaWNhdGVzIHVzYWdlLgoKCiAgIGIgLSBFeHRlbmRlZCBoZWFkZXIKCiAgICAgVGhlIHNlY29uZCBiaXQgKGJpdCA2KSBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGhlYWRlciBpcwogICAgIGZvbGxvd2VkIGJ5IGFuIGV4dGVuZGVkIGhlYWRlci4gVGhlIGV4dGVuZGVkIGhlYWRlciBpcyBkZXNjcmliZWQgaW4KICAgICBzZWN0aW9uIDMuMi4KCgogICBjIC0gRXhwZXJpbWVudGFsIGluZGljYXRvcgoKICAgICBUaGUgdGhpcmQgYml0IChiaXQgNSkgc2hvdWxkIGJlIHVzZWQgYXMgYW4gJ2V4cGVyaW1lbnRhbAogICAgIGluZGljYXRvcicuIFRoaXMgZmxhZyBzaG91bGQgYWx3YXlzIGJlIHNldCB3aGVuIHRoZSB0YWcgaXMgaW4gYW4KICAgICBleHBlcmltZW50YWwgc3RhZ2UuCgogICBBbGwgdGhlIG90aGVyIGZsYWdzIHNob3VsZCBiZSBjbGVhcmVkLiBJZiBvbmUgb2YgdGhlc2UgdW5kZWZpbmVkCiAgIGZsYWdzIGFyZSBzZXQgdGhhdCBtaWdodCBtZWFuIHRoYXQgdGhlIHRhZyBpcyBub3QgcmVhZGFibGUgZm9yIGEKICAgcGFyc2VyIHRoYXQgZG9lcyBub3Qga25vdyB0aGUgZmxhZ3MgZnVuY3Rpb24uCgogICBUaGUgSUQzdjIgdGFnIHNpemUgaXMgZW5jb2RlZCB3aXRoIGZvdXIgYnl0ZXMgd2hlcmUgdGhlIG1vc3QKICAgc2lnbmlmaWNhbnQgYml0IChiaXQgNykgaXMgc2V0IHRvIHplcm8gaW4gZXZlcnkgYnl0ZSwgbWFraW5nIGEgdG90YWwKICAgb2YgMjggYml0cy4gVGhlIHplcm9lZCBiaXRzIGFyZSBpZ25vcmVkLCBzbyBhIDI1NyBieXRlcyBsb25nIHRhZyBpcwogICByZXByZXNlbnRlZCBhcyAkMDAgMDAgMDIgMDEuCgogICBUaGUgSUQzdjIgdGFnIHNpemUgaXMgdGhlIHNpemUgb2YgdGhlIGNvbXBsZXRlIHRhZyBhZnRlcgogICB1bnN5Y2hyb25pc2F0aW9uLCBpbmNsdWRpbmcgcGFkZGluZywgZXhjbHVkaW5nIHRoZSBoZWFkZXIgYnV0IG5vdAogICBleGNsdWRpbmcgdGhlIGV4dGVuZGVkIGhlYWRlciAodG90YWwgdGFnIHNpemUgLSAxMCkuIE9ubHkgMjggYml0cwogICAocmVwcmVzZW50aW5nIHVwIHRvIDI1Nk1CKSBhcmUgdXNlZCBpbiB0aGUgc2l6ZSBkZXNjcmlwdGlvbiB0byBhdm9pZAogICB0aGUgaW50cm9kdWN1Y3Rpb24gb2YgJ2ZhbHNlIHN5bmNzaWduYWxzJy4KCiAgIEFuIElEM3YyIHRhZyBjYW4gYmUgZGV0ZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhdHRlcm46CiAgICAgJDQ5IDQ0IDMzIHl5IHl5IHh4IHp6IHp6IHp6IHp6CiAgIFdoZXJlIHl5IGlzIGxlc3MgdGhhbiAkRkYsIHh4IGlzIHRoZSAnZmxhZ3MnIGJ5dGUgYW5kIHp6IGlzIGxlc3MgdGhhbgogICAkODAuCgoKMy4yLiAgIElEM3YyIGV4dGVuZGVkIGhlYWRlcgoKICAgVGhlIGV4dGVuZGVkIGhlYWRlciBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IGlzIG5vdCB2aXRhbCB0byB0aGUKICAgY29ycmVjdCBwYXJzaW5nIG9mIHRoZSB0YWcgaW5mb3JtYXRpb24sIGhlbmNlIHRoZSBleHRlbmRlZCBoZWFkZXIgaXMKICAgb3B0aW9uYWwuCgogICAgIEV4dGVuZGVkIGhlYWRlciBzaXplICAgJHh4IHh4IHh4IHh4CiAgICAgRXh0ZW5kZWQgRmxhZ3MgICAgICAgICAkeHggeHgKICAgICBTaXplIG9mIHBhZGRpbmcgICAgICAgICR4eCB4eCB4eCB4eAoKICAgV2hlcmUgdGhlICdFeHRlbmRlZCBoZWFkZXIgc2l6ZScsIGN1cnJlbnRseSA2IG9yIDEwIGJ5dGVzLCBleGNsdWRlcwogICBpdHNlbGYuIFRoZSAnU2l6ZSBvZiBwYWRkaW5nJyBpcyBzaW1wbHkgdGhlIHRvdGFsIHRhZyBzaXplIGV4Y2x1ZGluZwogICB0aGUgZnJhbWVzIGFuZCB0aGUgaGVhZGVycywgaW4gb3RoZXIgd29yZHMgdGhlIHBhZGRpbmcuIFRoZSBleHRlbmRlZAogICBoZWFkZXIgaXMgY29uc2lkZXJlZCBzZXBhcmF0ZSBmcm9tIHRoZSBoZWFkZXIgcHJvcGVyLCBhbmQgYXMgc3VjaCBpcwogICBzdWJqZWN0IHRvIHVuc3luY2hyb25pc2F0aW9uLgoKICAgVGhlIGV4dGVuZGVkIGZsYWdzIGFyZSBhIHNlY29uZGFyeSBmbGFnIHNldCB3aGljaCBkZXNjcmliZXMgZnVydGhlcgogICBhdHRyaWJ1dGVzIG9mIHRoZSB0YWcuIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGFzCiAgIGZvbGxvd3MKCiAgICAgJXgwMDAwMDAwIDAwMDAwMDAwCgoKICAgeCAtIENSQyBkYXRhIHByZXNlbnQKCiAgICAgSWYgdGhpcyBmbGFnIGlzIHNldCBmb3VyIGJ5dGVzIG9mIENSQy0zMiBkYXRhIGlzIGFwcGVuZGVkIHRvIHRoZQogICAgIGV4dGVuZGVkIGhlYWRlci4gVGhlIENSQyBzaG91bGQgYmUgY2FsY3VsYXRlZCBiZWZvcmUKICAgICB1bnN5bmNocm9uaXNhdGlvbiBvbiB0aGUgZGF0YSBiZXR3ZWVuIHRoZSBleHRlbmRlZCBoZWFkZXIgYW5kIHRoZQogICAgIHBhZGRpbmcsIGkuZS4gdGhlIGZyYW1lcyBhbmQgb25seSB0aGUgZnJhbWVzLgoKICAgICAgICBUb3RhbCBmcmFtZSBDUkMgICAgICAgICR4eCB4eCB4eCB4eAoKCjMuMy4gICBJRDN2MiBmcmFtZSBvdmVydmlldwoKICAgQXMgdGhlIHRhZyBjb25zaXN0cyBvZiBhIHRhZyBoZWFkZXIgYW5kIGEgdGFnIGJvZHkgd2l0aCBvbmUgb3IgbW9yZQogICBmcmFtZXMsIGFsbCB0aGUgZnJhbWVzIGNvbnNpc3RzIG9mIGEgZnJhbWUgaGVhZGVyIGZvbGxvd2VkIGJ5IG9uZSBvcgogICBtb3JlIGZpZWxkcyBjb250YWluaW5nIHRoZSBhY3R1YWwgaW5mb3JtYXRpb24uIFRoZSBsYXlvdXQgb2YgdGhlCiAgIGZyYW1lIGhlYWRlcjoKCiAgICAgRnJhbWUgSUQgICAkeHggeHggeHggeHggIChmb3VyIGNoYXJhY3RlcnMpCiAgICAgU2l6ZSAgICAgICAkeHggeHggeHggeHgKICAgICBGbGFncyAgICAgICR4eCB4eAoKICAgVGhlIGZyYW1lIElEIG1hZGUgb3V0IG9mIHRoZSBjaGFyYWN0ZXJzIGNhcGl0YWwgQS1aIGFuZCAwLTkuCiAgIElkZW50aWZpZXJzIGJlZ2lubmluZyB3aXRoICJYIiwgIlkiIGFuZCAiWiIgYXJlIGZvciBleHBlcmltZW50YWwgdXNlCiAgIGFuZCBmcmVlIGZvciBldmVyeW9uZSB0byB1c2UsIHdpdGhvdXQgdGhlIG5lZWQgdG8gc2V0IHRoZQogICBleHBlcmltZW50YWwgYml0IGluIHRoZSB0YWcgaGVhZGVyLiBIYXZlIGluIG1pbmQgdGhhdCBzb21lb25lIGVsc2UKICAgbWlnaHQgaGF2ZSB1c2VkIHRoZSBzYW1lIGlkZW50aWZpZXIgYXMgeW91LiBBbGwgb3RoZXIgaWRlbnRpZmllcnMgYXJlCiAgIGVpdGhlciB1c2VkIG9yIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgoKICAgVGhlIGZyYW1lIElEIGlzIGZvbGxvd2VkIGJ5IGEgc2l6ZSBkZXNjcmlwdG9yLCBtYWtpbmcgYSB0b3RhbCBoZWFkZXIKICAgc2l6ZSBvZiB0ZW4gYnl0ZXMgaW4gZXZlcnkgZnJhbWUuIFRoZSBzaXplIGlzIGNhbGN1bGF0ZWQgYXMgZnJhbWUKICAgc2l6ZSBleGNsdWRpbmcgZnJhbWUgaGVhZGVyIChmcmFtZSBzaXplIC0gMTApLgoKICAgSW4gdGhlIGZyYW1lIGhlYWRlciB0aGUgc2l6ZSBkZXNjcmlwdG9yIGlzIGZvbGxvd2VkIGJ5IHR3byBmbGFncwogICBieXRlcy4gVGhlc2UgZmxhZ3MgYXJlIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMy4xLgoKICAgVGhlcmUgaXMgbm8gZml4ZWQgb3JkZXIgb2YgdGhlIGZyYW1lcycgYXBwZWFyYW5jZSBpbiB0aGUgdGFnLAogICBhbHRob3VnaCBpdCBpcyBkZXNpcmVkIHRoYXQgdGhlIGZyYW1lcyBhcmUgYXJyYW5nZWQgaW4gb3JkZXIgb2YKICAgc2lnbmlmaWNhbmNlIGNvbmNlcm5pbmcgdGhlIHJlY29nbml0aW9uIG9mIHRoZSBmaWxlLiBBbiBleGFtcGxlIG9mCiAgIHN1Y2ggb3JkZXI6IFVGSUQsIFRJVDIsIE1DREksIFRSQ0sgLi4uCgogICBBIHRhZyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGZyYW1lLiBBIGZyYW1lIG11c3QgYmUgYXQgbGVhc3QgMQogICBieXRlIGJpZywgZXhjbHVkaW5nIHRoZSBoZWFkZXIuCgogICBJZiBub3RoaW5nIGVsc2UgaXMgc2FpZCBhIHN0cmluZyBpcyByZXByZXNlbnRlZCBhcyBJU08tODg1OS0xCiAgIFtJU08tODg1OS0xXSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSAkMjAgLSAkRkYuIFN1Y2ggc3RyaW5ncyBhcmUKICAgcmVwcmVzZW50ZWQgYXMgPHRleHQgc3RyaW5nPiwgb3IgPGZ1bGwgdGV4dCBzdHJpbmc+IGlmIG5ld2xpbmVzIGFyZQogICBhbGxvd2VkLCBpbiB0aGUgZnJhbWUgZGVzY3JpcHRpb25zLiBBbGwgVW5pY29kZSBzdHJpbmdzIFtVTklDT0RFXSB1c2UKICAgMTYtYml0IHVuaWNvZGUgMi4wIChJU08vSUVDIDEwNjQ2LTE6MTk5MywgVUNTLTIpLiBVbmljb2RlIHN0cmluZ3MKICAgbXVzdCBiZWdpbiB3aXRoIHRoZSBVbmljb2RlIEJPTSAoJEZGIEZFIG9yICRGRSBGRikgdG8gaWRlbnRpZnkgdGhlCiAgIGJ5dGUgb3JkZXIuCgogICBBbGwgbnVtZXJpYyBzdHJpbmdzIGFuZCBVUkxzIFtVUkxdIGFyZSBhbHdheXMgZW5jb2RlZCBhcyBJU08tODg1OS0xLgogICBUZXJtaW5hdGVkIHN0cmluZ3MgYXJlIHRlcm1pbmF0ZWQgd2l0aCAkMDAgaWYgZW5jb2RlZCB3aXRoIElTTy04ODU5LTEKICAgYW5kICQwMCAwMCBpZiBlbmNvZGVkIGFzIHVuaWNvZGUuIElmIG5vdGhpbmcgZWxzZSBpcyBzYWlkIG5ld2xpbmUKICAgY2hhcmFjdGVyIGlzIGZvcmJpZGRlbi4gSW4gSVNPLTg4NTktMSBhIG5ldyBsaW5lIGlzIHJlcHJlc2VudGVkLCB3aGVuCiAgIGFsbG93ZWQsIHdpdGggJDBBIG9ubHkuIEZyYW1lcyB0aGF0IGFsbG93IGRpZmZlcmVudCB0eXBlcyBvZiB0ZXh0CiAgIGVuY29kaW5nIGhhdmUgYSB0ZXh0IGVuY29kaW5nIGRlc2NyaXB0aW9uIGJ5dGUgZGlyZWN0bHkgYWZ0ZXIgdGhlCiAgIGZyYW1lIHNpemUuIElmIElTTy04ODU5LTEgaXMgdXNlZCB0aGlzIGJ5dGUgc2hvdWxkIGJlICQwMCwgaWYgVW5pY29kZQogICBpcyB1c2VkIGl0IHNob3VsZCBiZSAkMDEuIFN0cmluZ3MgZGVwZW5kZW50IG9uIGVuY29kaW5nIGlzCiAgIHJlcHJlc2VudGVkIGFzIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+LCBvciA8ZnVsbCB0ZXh0CiAgIHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+IGlmIG5ld2xpbmVzIGFyZSBhbGxvd2VkLiAgQW55IGVtcHR5CiAgIFVuaWNvZGUgc3RyaW5ncyB3aGljaCBhcmUgTlVMTC10ZXJtaW5hdGVkIG1heSBoYXZlIHRoZSBVbmljb2RlIEJPTQogICBmb2xsb3dlZCBieSBhIFVuaWNvZGUgTlVMTCAoJEZGIEZFIDAwIDAwIG9yICRGRSBGRiAwMCAwMCkuCgogICBUaGUgdGhyZWUgYnl0ZSBsYW5ndWFnZSBmaWVsZCBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBsYW5ndWFnZSBvZiB0aGUKICAgZnJhbWUncyBjb250ZW50LCBhY2NvcmRpbmcgdG8gSVNPLTYzOS0yIFtJU08tNjM5LTJdLgoKICAgQWxsIFVSTHMgW1VSTF0gbWF5IGJlIHJlbGF0aXZlLCBlLmcuICJwaWN0dXJlLnBuZyIsICIuLi9kb2MudHh0Ii4KCiAgIElmIGEgZnJhbWUgaXMgbG9uZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLCBlLmcuIGhhdmluZyBtb3JlIGZpZWxkcyB0aGFuCiAgIHNwZWNpZmllZCBpbiB0aGlzIGRvY3VtZW50LCB0aGF0IGluZGljYXRlcyB0aGF0IGFkZGl0aW9ucyB0byB0aGUKICAgZnJhbWUgaGF2ZSBiZWVuIG1hZGUgaW4gYSBsYXRlciB2ZXJzaW9uIG9mIHRoZSBJRDN2MiBzdGFuZGFyZC4gVGhpcwogICBpcyByZWZsZWN0ZWQgYnkgdGhlIHJldmlzaW9uIG51bWJlciBpbiB0aGUgaGVhZGVyIG9mIHRoZSB0YWcuCgoKMy4zLjEuICAgRnJhbWUgaGVhZGVyIGZsYWdzCgogICBJbiB0aGUgZnJhbWUgaGVhZGVyIHRoZSBzaXplIGRlc2NyaXB0b3IgaXMgZm9sbG93ZWQgYnkgdHdvIGZsYWdzCiAgIGJ5dGVzLiBBbGwgdW51c2VkIGZsYWdzIG11c3QgYmUgY2xlYXJlZC4gVGhlIGZpcnN0IGJ5dGUgaXMgZm9yCiAgICdzdGF0dXMgbWVzc2FnZXMnIGFuZCB0aGUgc2Vjb25kIGJ5dGUgaXMgZm9yIGVuY29kaW5nIHB1cnBvc2VzLiBJZiBhbgogICB1bmtub3duIGZsYWcgaXMgc2V0IGluIHRoZSBmaXJzdCBieXRlIHRoZSBmcmFtZSBtYXkgbm90IGJlIGNoYW5nZWQKICAgd2l0aG91dCB0aGUgYml0IGNsZWFyZWQuIElmIGFuIHVua25vd24gZmxhZyBpcyBzZXQgaW4gdGhlIHNlY29uZCBieXRlCiAgIGl0IGlzIGxpa2VseSB0byBub3QgYmUgcmVhZGFibGUuIFRoZSBmbGFncyBmaWVsZCBpcyBkZWZpbmVkIGFzCiAgIGZvbGxvd3MuCgogICAgICVhYmMwMDAwMCAlaWprMDAwMDAKCgogICBhIC0gVGFnIGFsdGVyIHByZXNlcnZhdGlvbgoKICAgICBUaGlzIGZsYWcgdGVsbHMgdGhlIHNvZnR3YXJlIHdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lIGlmIGl0IGlzCiAgICAgdW5rbm93biBhbmQgdGhlIHRhZyBpcyBhbHRlcmVkIGluIGFueSB3YXkuIFRoaXMgYXBwbGllcyB0byBhbGwKICAgICBraW5kcyBvZiBhbHRlcmF0aW9ucywgaW5jbHVkaW5nIGFkZGluZyBtb3JlIHBhZGRpbmcgYW5kIHJlb3JkZXJpbmcKICAgICB0aGUgZnJhbWVzLgoKICAgICAwICAgICBGcmFtZSBzaG91bGQgYmUgcHJlc2VydmVkLgogICAgIDEgICAgIEZyYW1lIHNob3VsZCBiZSBkaXNjYXJkZWQuCgoKICAgYiAtIEZpbGUgYWx0ZXIgcHJlc2VydmF0aW9uCgogICAgIFRoaXMgZmxhZyB0ZWxscyB0aGUgc29mdHdhcmUgd2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUgaWYgaXQgaXMKICAgICB1bmtub3duIGFuZCB0aGUgZmlsZSwgZXhjbHVkaW5nIHRoZSB0YWcsIGlzIGFsdGVyZWQuIFRoaXMgZG9lcyBub3QKICAgICBhcHBseSB3aGVuIHRoZSBhdWRpbyBpcyBjb21wbGV0ZWx5IHJlcGxhY2VkIHdpdGggb3RoZXIgYXVkaW8gZGF0YS4KCiAgICAgMCAgICAgRnJhbWUgc2hvdWxkIGJlIHByZXNlcnZlZC4KICAgICAxICAgICBGcmFtZSBzaG91bGQgYmUgZGlzY2FyZGVkLgoKCiAgIGMgLSBSZWFkIG9ubHkKCiAgICAgIFRoaXMgZmxhZywgaWYgc2V0LCB0ZWxscyB0aGUgc29mdHdhcmUgdGhhdCB0aGUgY29udGVudHMgb2YgdGhpcwogICAgICBmcmFtZSBpcyBpbnRlbmRlZCB0byBiZSByZWFkIG9ubHkuIENoYW5naW5nIHRoZSBjb250ZW50cyBtaWdodAogICAgICBicmVhayBzb21ldGhpbmcsIGUuZy4gYSBzaWduYXR1cmUuIElmIHRoZSBjb250ZW50cyBhcmUgY2hhbmdlZCwKICAgICAgd2l0aG91dCBrbm93bGVkZ2UgaW4gd2h5IHRoZSBmcmFtZSB3YXMgZmxhZ2dlZCByZWFkIG9ubHkgYW5kCiAgICAgIHdpdGhvdXQgdGFraW5nIHRoZSBwcm9wZXIgbWVhbnMgdG8gY29tcGVuc2F0ZSwgZS5nLiByZWNhbGN1bGF0aW5nCiAgICAgIHRoZSBzaWduYXR1cmUsIHRoZSBiaXQgc2hvdWxkIGJlIGNsZWFyZWQuCgoKICAgaSAtIENvbXByZXNzaW9uCgogICAgICBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyBjb21wcmVzc2VkLgoKICAgICAgMCAgICAgRnJhbWUgaXMgbm90IGNvbXByZXNzZWQuCiAgICAgIDEgICAgIEZyYW1lIGlzIGNvbXByZXNzZWQgdXNpbmcgemxpYiBbemxpYl0gd2l0aCA0IGJ5dGVzIGZvcgogICAgICAgICAgICAnZGVjb21wcmVzc2VkIHNpemUnIGFwcGVuZGVkIHRvIHRoZSBmcmFtZSBoZWFkZXIuCgoKICAgaiAtIEVuY3J5cHRpb24KCiAgICAgIFRoaXMgZmxhZyBpbmRpY2F0ZXMgd2V0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMgZW5yeXB0ZWQuIElmIHNldAogICAgICBvbmUgYnl0ZSBpbmRpY2F0aW5nIHdpdGggd2hpY2ggbWV0aG9kIGl0IHdhcyBlbmNyeXB0ZWQgd2lsbCBiZQogICAgICBhcHBlbmRlZCB0byB0aGUgZnJhbWUgaGVhZGVyLiBTZWUgc2VjdGlvbiA0LjI2LiBmb3IgbW9yZQogICAgICBpbmZvcm1hdGlvbiBhYm91dCBlbmNyeXB0aW9uIG1ldGhvZCByZWdpc3RyYXRpb24uCgogICAgICAwICAgICBGcmFtZSBpcyBub3QgZW5jcnlwdGVkLgogICAgICAxICAgICBGcmFtZSBpcyBlbmNyeXB0ZWQuCgoKICAgayAtIEdyb3VwaW5nIGlkZW50aXR5CgogICAgICBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUgYmVsb25ncyBpbiBhIGdyb3VwCiAgICAgIHdpdGggb3RoZXIgZnJhbWVzLiBJZiBzZXQgYSBncm91cCBpZGVudGlmaWVyIGJ5dGUgaXMgYWRkZWQgdG8gdGhlCiAgICAgIGZyYW1lIGhlYWRlci4gRXZlcnkgZnJhbWUgd2l0aCB0aGUgc2FtZSBncm91cCBpZGVudGlmaWVyIGJlbG9uZ3MKICAgICAgdG8gdGhlIHNhbWUgZ3JvdXAuCgogICAgICAwICAgICBGcmFtZSBkb2VzIG5vdCBjb250YWluIGdyb3VwIGluZm9ybWF0aW9uCiAgICAgIDEgICAgIEZyYW1lIGNvbnRhaW5zIGdyb3VwIGluZm9ybWF0aW9uCgoKICAgU29tZSBmbGFncyBpbmRpY2F0ZXMgdGhhdCB0aGUgZnJhbWUgaGVhZGVyIGlzIGV4dGVuZGVkIHdpdGgKICAgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBmcmFtZQogICBoZWFkZXIgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGZsYWdzIGluZGljYXRpbmcgdGhlIGFkZGl0aW9ucy4gSS5lLgogICB0aGUgZm91ciBieXRlcyBvZiBkZWNvbXByZXNzZWQgc2l6ZSB3aWxsIHByZWNlZWQgdGhlIGVuY3J5cHRpb24KICAgbWV0aG9kIGJ5dGUuIFRoZXNlIGFkZGl0aW9ucyB0byB0aGUgZnJhbWUgaGVhZGVyLCB3aGlsZSBub3QgaW5jbHVkZWQKICAgaW4gdGhlIGZyYW1lIGhlYWRlciBzaXplIGJ1dCBhcmUgaW5jbHVkZWQgaW4gdGhlICdmcmFtZSBzaXplJyBmaWVsZCwKICAgYXJlIG5vdCBzdWJqZWN0IHRvIGVuY3J5cHRpb24gb3IgY29tcHJlc3Npb24uCgoKMy4zLjIuICAgRGVmYXVsdCBmbGFncwoKICAgVGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBmcmFtZXMgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQgY2FuIGJlCiAgIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIGNsYXNzZXMuIFRoZSBmbGFncyBtYXkgYmUgc2V0IGRpZmZlcmVudGx5CiAgIGlmIGZvdW5kIG1vcmUgc3VpdGFibGUgYnkgdGhlIHNvZnR3YXJlLgoKICAgIDEuIERpc2NhcmRlZCBpZiB0YWcgaXMgYWx0ZXJlZCwgZGlzY2FyZGVkIGlmIGZpbGUgaXMgYWx0ZXJlZC4KCiAgICAgICBOb25lLgoKICAgIDIuIERpc2NhcmRlZCBpZiB0YWcgaXMgYWx0ZXJlZCwgcHJlc2VydmVkIGlmIGZpbGUgaXMgYWx0ZXJlZC4KCiAgICAgICBOb25lLgoKICAgIDMuIFByZXNlcnZlZCBpZiB0YWcgaXMgYWx0ZXJlZCwgZGlzY2FyZGVkIGlmIGZpbGUgaXMgYWx0ZXJlZC4KCiAgICAgICBBRU5DLCBFVENPLCBFUVVBLCBNTExULCBQT1NTLCBTWUxULCBTWVRDLCBSVkFELCBURU5DLCBUTEVOLCBUU0laCgogICAgNC4gUHJlc2VydmVkIGlmIHRhZyBpcyBhbHRlcmVkLCBwcmVzZXJ2ZWQgaWYgZmlsZSBpcyBhbHRlcmVkLgoKICAgICAgIFRoZSByZXN0IG9mIHRoZSBmcmFtZXMuCgoKNC4gICBEZWNsYXJlZCBJRDN2MiBmcmFtZXMKCiAgIFRoZSBmb2xsb3dpbmcgZnJhbWVzIGFyZSBkZWNsYXJlZCBpbiB0aGlzIGRyYWZ0LgoKICA0LjIxICBBRU5DIEF1ZGlvIGVuY3J5cHRpb24KICA0LjE1ICBBUElDIEF0dGFjaGVkIHBpY3R1cmUKCiAgNC4xMSAgQ09NTSBDb21tZW50cwogIDQuMjUgIENPTVIgQ29tbWVyY2lhbCBmcmFtZQoKICA0LjI2ICBFTkNSIEVuY3J5cHRpb24gbWV0aG9kIHJlZ2lzdHJhdGlvbgogIDQuMTMgIEVRVUEgRXF1YWxpemF0aW9uCiAgNC42ICAgRVRDTyBFdmVudCB0aW1pbmcgY29kZXMKCiAgNC4xNiAgR0VPQiBHZW5lcmFsIGVuY2Fwc3VsYXRlZCBvYmplY3QKICA0LjI3ICBHUklEIEdyb3VwIGlkZW50aWZpY2F0aW9uIHJlZ2lzdHJhdGlvbgoKICA0LjQgICBJUExTIEludm9sdmVkIHBlb3BsZSBsaXN0CgogIDQuMjEgIExJTksgTGlua2VkIGluZm9ybWF0aW9uCgogIDQuNSAgIE1DREkgTXVzaWMgQ0QgaWRlbnRpZmllcgogIDQuNyAgIE1MTFQgTVBFRyBsb2NhdGlvbiBsb29rdXAgdGFibGUKCiAgNC4yNCAgT1dORSBPd25lcnNoaXAgZnJhbWUKCiAgNC4yOC4gUFJJViBQcml2YXRlIGZyYW1lCiAgNC4xNyAgUENOVCBQbGF5IGNvdW50ZXIKICA0LjE4ICBQT1BNIFBvcHVsYXJpbWV0ZXIKICA0LjIyICBQT1NTIFBvc2l0aW9uIHN5bmNocm9uaXNhdGlvbiBmcmFtZQoKICA0LjE5ICBSQlVGIFJlY29tbWVuZGVkIGJ1ZmZlciBzaXplCiAgNC4xMiAgUlZBRCBSZWxhdGl2ZSB2b2x1bWUgYWRqdXN0bWVudAogIDQuMTQgIFJWUkIgUmV2ZXJiCgogIDQuMTAgIFNZTFQgU3luY2hyb25pemVkIGx5cmljL3RleHQKICA0LjggICBTWVRDIFN5bmNocm9uaXplZCB0ZW1wbyBjb2RlcwoKICA0LjIuMSBUQUxCIEFsYnVtL01vdmllL1Nob3cgdGl0bGUKICA0LjIuMSBUQlBNIEJQTSAoYmVhdHMgcGVyIG1pbnV0ZSkKICA0LjIuMSBUQ09NIENvbXBvc2VyCiAgNC4yLjEgVENPTiBDb250ZW50IHR5cGUKICA0LjIuMSBUQ09QIENvcHlyaWdodCBtZXNzYWdlCiAgNC4yLjEgVERBVCBEYXRlCiAgNC4yLjEgVERMWSBQbGF5bGlzdCBkZWxheQogIDQuMi4xIFRFTkMgRW5jb2RlZCBieQogIDQuMi4xIFRFWFQgTHlyaWNpc3QvVGV4dCB3cml0ZXIKICA0LjIuMSBURkxUIEZpbGUgdHlwZQogIDQuMi4xIFRJTUUgVGltZQogIDQuMi4xIFRJVDEgQ29udGVudCBncm91cCBkZXNjcmlwdGlvbgogIDQuMi4xIFRJVDIgVGl0bGUvc29uZ25hbWUvY29udGVudCBkZXNjcmlwdGlvbgogIDQuMi4xIFRJVDMgU3VidGl0bGUvRGVzY3JpcHRpb24gcmVmaW5lbWVudAogIDQuMi4xIFRLRVkgSW5pdGlhbCBrZXkKICA0LjIuMSBUTEFOIExhbmd1YWdlKHMpCiAgNC4yLjEgVExFTiBMZW5ndGgKICA0LjIuMSBUTUVEIE1lZGlhIHR5cGUKICA0LjIuMSBUT0FMIE9yaWdpbmFsIGFsYnVtL21vdmllL3Nob3cgdGl0bGUKICA0LjIuMSBUT0ZOIE9yaWdpbmFsIGZpbGVuYW1lCiAgNC4yLjEgVE9MWSBPcmlnaW5hbCBseXJpY2lzdChzKS90ZXh0IHdyaXRlcihzKQogIDQuMi4xIFRPUEUgT3JpZ2luYWwgYXJ0aXN0KHMpL3BlcmZvcm1lcihzKQogIDQuMi4xIFRPUlkgT3JpZ2luYWwgcmVsZWFzZSB5ZWFyCiAgNC4yLjEgVE9XTiBGaWxlIG93bmVyL2xpY2Vuc2VlCiAgNC4yLjEgVFBFMSBMZWFkIHBlcmZvcm1lcihzKS9Tb2xvaXN0KHMpCiAgNC4yLjEgVFBFMiBCYW5kL29yY2hlc3RyYS9hY2NvbXBhbmltZW50CiAgNC4yLjEgVFBFMyBDb25kdWN0b3IvcGVyZm9ybWVyIHJlZmluZW1lbnQKICA0LjIuMSBUUEU0IEludGVycHJldGVkLCByZW1peGVkLCBvciBvdGhlcndpc2UgbW9kaWZpZWQgYnkKICA0LjIuMSBUUE9TIFBhcnQgb2YgYSBzZXQKICA0LjIuMSBUUFVCIFB1Ymxpc2hlcgogIDQuMi4xIFRSQ0sgVHJhY2sgbnVtYmVyL1Bvc2l0aW9uIGluIHNldAogIDQuMi4xIFRSREEgUmVjb3JkaW5nIGRhdGVzCiAgNC4yLjEgVFJTTiBJbnRlcm5ldCByYWRpbyBzdGF0aW9uIG5hbWUKICA0LjIuMSBUUlNPIEludGVybmV0IHJhZGlvIHN0YXRpb24gb3duZXIKICA0LjIuMSBUU0laIFNpemUKICA0LjIuMSBUU1JDIElTUkMgKGludGVybmF0aW9uYWwgc3RhbmRhcmQgcmVjb3JkaW5nIGNvZGUpCiAgNC4yLjEgVFNTRSBTb2Z0d2FyZS9IYXJkd2FyZSBhbmQgc2V0dGluZ3MgdXNlZCBmb3IgZW5jb2RpbmcKICA0LjIuMSBUWUVSIFllYXIKICA0LjIuMiBUWFhYIFVzZXIgZGVmaW5lZCB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lCgogIDQuMSAgIFVGSUQgVW5pcXVlIGZpbGUgaWRlbnRpZmllcgogIDQuMjMgIFVTRVIgVGVybXMgb2YgdXNlCiAgNC45ICAgVVNMVCBVbnN5Y2hyb25pemVkIGx5cmljL3RleHQgdHJhbnNjcmlwdGlvbgoKICA0LjMuMSBXQ09NIENvbW1lcmNpYWwgaW5mb3JtYXRpb24KICA0LjMuMSBXQ09QIENvcHlyaWdodC9MZWdhbCBpbmZvcm1hdGlvbgogIDQuMy4xIFdPQUYgT2ZmaWNpYWwgYXVkaW8gZmlsZSB3ZWJwYWdlCiAgNC4zLjEgV09BUiBPZmZpY2lhbCBhcnRpc3QvcGVyZm9ybWVyIHdlYnBhZ2UKICA0LjMuMSBXT0FTIE9mZmljaWFsIGF1ZGlvIHNvdXJjZSB3ZWJwYWdlCiAgNC4zLjEgV09SUyBPZmZpY2lhbCBpbnRlcm5ldCByYWRpbyBzdGF0aW9uIGhvbWVwYWdlCiAgNC4zLjEgV1BBWSBQYXltZW50CiAgNC4zLjEgV1BVQiBQdWJsaXNoZXJzIG9mZmljaWFsIHdlYnBhZ2UKICA0LjMuMiBXWFhYIFVzZXIgZGVmaW5lZCBVUkwgbGluayBmcmFtZQoKCjQuMS4gICBVbmlxdWUgZmlsZSBpZGVudGlmaWVyCgogICBUaGlzIGZyYW1lJ3MgcHVycG9zZSBpcyB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBhdWRpbyBmaWxlIGluIGEKICAgZGF0YWJhc2UgdGhhdCBtYXkgY29udGFpbiBtb3JlIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSBjb250ZW50LgogICBTaW5jZSBzdGFuZGFyZGlzYXRpb24gb2Ygc3VjaCBhIGRhdGFiYXNlIGlzIGJleW9uZCB0aGlzIGRvY3VtZW50LCBhbGwKICAgZnJhbWVzIGJlZ2luIHdpdGggYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBVUkwgW1VSTF0KICAgY29udGFpbmluZyBhbiBlbWFpbCBhZGRyZXNzLCBvciBhIGxpbmsgdG8gYSBsb2NhdGlvbiB3aGVyZSBhbiBlbWFpbAogICBhZGRyZXNzIGNhbiBiZSBmb3VuZCwgdGhhdCBiZWxvbmdzIHRvIHRoZSBvcmdhbmlzYXRpb24gcmVzcG9uc2libGUKICAgZm9yIHRoaXMgc3BlY2lmaWMgZGF0YWJhc2UgaW1wbGVtZW50YXRpb24uIFF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlCiAgIGRhdGFiYXNlIHNob3VsZCBiZSBzZW50IHRvIHRoZSBpbmRpY2F0ZWQgZW1haWwgYWRkcmVzcy4gVGhlIFVSTAogICBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHRoZSBhY3R1YWwgZGF0YWJhc2UgcXVlcmllcy4gVGhlIHN0cmluZwogICAiaHR0cDovL3d3dy5pZDMub3JnL2R1bW15L3VmaWQuaHRtbCIgc2hvdWxkIGJlIHVzZWQgZm9yIHRlc3RzLgogICBTb2Z0d2FyZSB0aGF0IGlzbid0IHRvbGQgb3RoZXJ3aXNlIG1heSBzYWZlbHkgcmVtb3ZlIHN1Y2ggZnJhbWVzLiBUaGUKICAgJ093bmVyIGlkZW50aWZpZXInIG11c3QgYmUgbm9uLWVtcHR5IChtb3JlIHRoYW4ganVzdCBhIHRlcm1pbmF0aW9uKS4KICAgVGhlICdPd25lciBpZGVudGlmaWVyJyBpcyB0aGVuIGZvbGxvd2VkIGJ5IHRoZSBhY3R1YWwgaWRlbnRpZmllciwKICAgd2hpY2ggbWF5IGJlIHVwIHRvIDY0IGJ5dGVzLiBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSAiVUZJRCIgZnJhbWUKICAgaW4gYSB0YWcsIGJ1dCBvbmx5IG9uZSB3aXRoIHRoZSBzYW1lICdPd25lciBpZGVudGlmaWVyJy4KCiAgICAgPEhlYWRlciBmb3IgJ1VuaXF1ZSBmaWxlIGlkZW50aWZpZXInLCBJRDogIlVGSUQiPgogICAgIE93bmVyIGlkZW50aWZpZXIgICAgICAgIDx0ZXh0IHN0cmluZz4gJDAwCiAgICAgSWRlbnRpZmllciAgICAgICAgICAgICAgPHVwIHRvIDY0IGJ5dGVzIGJpbmFyeSBkYXRhPgoKCjQuMi4gICBUZXh0IGluZm9ybWF0aW9uIGZyYW1lcwoKICAgVGhlIHRleHQgaW5mb3JtYXRpb24gZnJhbWVzIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgZnJhbWVzLCBjb250YWluaW5nCiAgIGluZm9ybWF0aW9uIGxpa2UgYXJ0aXN0LCBhbGJ1bSBhbmQgbW9yZS4gVGhlcmUgbWF5IG9ubHkgYmUgb25lIHRleHQKICAgaW5mb3JtYXRpb24gZnJhbWUgb2YgaXRzIGtpbmQgaW4gYW4gdGFnLiBJZiB0aGUgdGV4dHN0cmluZyBpcwogICBmb2xsb3dlZCBieSBhIHRlcm1pbmF0aW9uICgkMDAgKDAwKSkgYWxsIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KICAgc2hvdWxkIGJlIGlnbm9yZWQgYW5kIG5vdCBiZSBkaXNwbGF5ZWQuIEFsbCB0ZXh0IGZyYW1lIGlkZW50aWZpZXJzCiAgIGJlZ2luIHdpdGggIlQiLiBPbmx5IHRleHQgZnJhbWUgaWRlbnRpZmllcnMgYmVnaW4gd2l0aCAiVCIsIHdpdGggdGhlCiAgIGV4Y2VwdGlvbiBvZiB0aGUgIlRYWFgiIGZyYW1lLiBBbGwgdGhlIHRleHQgaW5mb3JtYXRpb24gZnJhbWVzIGhhdmUKICAgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CgogICAgIDxIZWFkZXIgZm9yICdUZXh0IGluZm9ybWF0aW9uIGZyYW1lJywgSUQ6ICJUMDAwIiAtICJUWlpaIiwKICAgICBleGNsdWRpbmcgIlRYWFgiIGRlc2NyaWJlZCBpbiA0LjIuMi4+CiAgICAgVGV4dCBlbmNvZGluZyAgICAgICAgICAgICAgICAkeHgKICAgICBJbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+CgoKNC4yLjEuICAgVGV4dCBpbmZvcm1hdGlvbiBmcmFtZXMgLSBkZXRhaWxzCgogIFRBTEIKICAgVGhlICdBbGJ1bS9Nb3ZpZS9TaG93IHRpdGxlJyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgdGhlIHRpdGxlIG9mIHRoZQogICByZWNvcmRpbmcoL3NvdXJjZSBvZiBzb3VuZCkgd2hpY2ggdGhlIGF1ZGlvIGluIHRoZSBmaWxlIGlzIHRha2VuCiAgIGZyb20uCgogIFRCUE0KICAgVGhlICdCUE0nIGZyYW1lIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYmVhdHMgcGVyIG1pbnV0ZSBpbiB0aGUKICAgbWFpbnBhcnQgb2YgdGhlIGF1ZGlvLiBUaGUgQlBNIGlzIGFuIGludGVnZXIgYW5kIHJlcHJlc2VudGVkIGFzIGEKICAgbnVtZXJpY2FsIHN0cmluZy4KCiAgVENPTQogICBUaGUgJ0NvbXBvc2VyKHMpJyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgdGhlIG5hbWUgb2YgdGhlIGNvbXBvc2VyKHMpLgogICBUaGV5IGFyZSBzZXBlcmF0ZWQgd2l0aCB0aGUgIi8iIGNoYXJhY3Rlci4KCiAgVENPTgogICBUaGUgJ0NvbnRlbnQgdHlwZScsIHdoaWNoIHByZXZpb3VzbHkgd2FzIHN0b3JlZCBhcyBhIG9uZSBieXRlIG51bWVyaWMKICAgdmFsdWUgb25seSwgaXMgbm93IGEgbnVtZXJpYyBzdHJpbmcuIFlvdSBtYXkgdXNlIG9uZSBvciBzZXZlcmFsIG9mCiAgIHRoZSB0eXBlcyBhcyBJRDN2MS4xIGRpZCBvciwgc2luY2UgdGhlIGNhdGVnb3J5IGxpc3Qgd291bGQgYmUKICAgaW1wb3NzaWJsZSB0byBtYWludGFpbiB3aXRoIGFjY3VyYXRlIGFuZCB1cCB0byBkYXRlIGNhdGVnb3JpZXMsCiAgIGRlZmluZSB5b3VyIG93bi4KCiAgIFJlZmVyZW5jZXMgdG8gdGhlIElEM3YxIGdlbnJlcyBjYW4gYmUgbWFkZSBieSwgYXMgZmlyc3QgYnl0ZSwgZW50ZXIKICAgIigiIGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGZyb20gdGhlIGdlbnJlcyBsaXN0IChhcHBlbmRpeCBBLikgYW5kCiAgIGVuZGVkIHdpdGggYSAiKSIgY2hhcmFjdGVyLiBUaGlzIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYQogICByZWZpbmVtZW50LCBlLmcuICIoMjEpIiBvciAiKDQpRXVyb2Rpc2NvIi4gU2V2ZXJhbCByZWZlcmVuY2VzIGNhbiBiZQogICBtYWRlIGluIHRoZSBzYW1lIGZyYW1lLCBlLmcuICIoNTEpKDM5KSIuIElmIHRoZSByZWZpbmVtZW50IHNob3VsZAogICBiZWdpbiB3aXRoIGEgIigiIGNoYXJhY3RlciBpdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCAiKCgiLCBlLmcuICIoKEkKICAgY2FuIGZpZ3VyZSBvdXQgYW55IGdlbnJlKSIgb3IgIig1NSkoKEkgdGhpbmsuLi4pIi4gVGhlIGZvbGxvd2luZyBuZXcKICAgY29udGVudCB0eXBlcyBpcyBkZWZpbmVkIGluIElEM3YyIGFuZCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgc2FtZSB3YXkKICAgYXMgdGhlIG51bWVyaWcgY29udGVudCB0eXBlcywgZS5nLiAiKFJYKSIuCgogICAgIFJYICBSZW1peAogICAgIENSICBDb3ZlcgoKICBUQ09QCiAgIFRoZSAnQ29weXJpZ2h0IG1lc3NhZ2UnIGZyYW1lLCB3aGljaCBtdXN0IGJlZ2luIHdpdGggYSB5ZWFyIGFuZCBhCiAgIHNwYWNlIGNoYXJhY3RlciAobWFraW5nIGZpdmUgY2hhcmFjdGVycyksIGlzIGludGVuZGVkIGZvciB0aGUKICAgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgb3JpZ2luYWwgc291bmQsIG5vdCB0aGUgYXVkaW8gZmlsZSBpdHNlbGYuCiAgIFRoZSBhYnNlbmNlIG9mIHRoaXMgZnJhbWUgbWVhbnMgb25seSB0aGF0IHRoZSBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAgaXMgdW5hdmFpbGFibGUgb3IgaGFzIGJlZW4gcmVtb3ZlZCwgYW5kIG11c3Qgbm90IGJlIGludGVycHJldGVkIHRvCiAgIG1lYW4gdGhhdCB0aGUgc291bmQgaXMgcHVibGljIGRvbWFpbi4gRXZlcnkgdGltZSB0aGlzIGZpZWxkIGlzCiAgIGRpc3BsYXllZCB0aGUgZmllbGQgbXVzdCBiZSBwcmVjZWRlZCB3aXRoICJDb3B5cmlnaHQgIiAoQykgIiAiLCB3aGVyZQogICAoQykgaXMgb25lIGNoYXJhY3RlciBzaG93aW5nIGEgQyBpbiBhIGNpcmNsZS4KCiAgVERBVAogICBUaGUgJ0RhdGUnIGZyYW1lIGlzIGEgbnVtZXJpYyBzdHJpbmcgaW4gdGhlIERETU0gZm9ybWF0IGNvbnRhaW5pbmcKICAgdGhlIGRhdGUgZm9yIHRoZSByZWNvcmRpbmcuIFRoaXMgZmllbGQgaXMgYWx3YXlzIGZvdXIgY2hhcmFjdGVycwogICBsb25nLgoKICBURExZCiAgIFRoZSAnUGxheWxpc3QgZGVsYXknIGRlZmluZXMgdGhlIG51bWJlcnMgb2YgbWlsbGlzZWNvbmRzIG9mIHNpbGVuY2UKICAgYmV0d2VlbiBldmVyeSBzb25nIGluIGEgcGxheWxpc3QuIFRoZSBwbGF5ZXIgc2hvdWxkIHVzZSB0aGUgIkVUQyIKICAgZnJhbWUsIGlmIHByZXNlbnQsIHRvIHNraXAgaW5pdGlhbCBzaWxlbmNlIGFuZCBzaWxlbmNlIGF0IHRoZSBlbmQgb2YKICAgdGhlIGF1ZGlvIHRvIG1hdGNoIHRoZSAnUGxheWxpc3QgZGVsYXknIHRpbWUuIFRoZSB0aW1lIGlzIHJlcHJlc2VudGVkCiAgIGFzIGEgbnVtZXJpYyBzdHJpbmcuCgogIFRFTkMKICAgVGhlICdFbmNvZGVkIGJ5JyBmcmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgcGVyc29uIG9yCiAgIG9yZ2FuaXNhdGlvbiB0aGF0IGVuY29kZWQgdGhlIGF1ZGlvIGZpbGUuIFRoaXMgZmllbGQgbWF5IGNvbnRhaW4gYQogICBjb3B5cmlnaHQgbWVzc2FnZSwgaWYgdGhlIGF1ZGlvIGZpbGUgYWxzbyBpcyBjb3B5cmlnaHRlZCBieSB0aGUKICAgZW5jb2Rlci4KCiAgVEVYVAogICBUaGUgJ0x5cmljaXN0KHMpL1RleHQgd3JpdGVyKHMpJyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgdGhlIHdyaXRlcihzKQogICBvZiB0aGUgdGV4dCBvciBseXJpY3MgaW4gdGhlIHJlY29yZGluZy4gVGhleSBhcmUgc2VwZXJhdGVkIHdpdGggdGhlCiAgICIvIiBjaGFyYWN0ZXIuCgogIFRGTFQKICAgVGhlICdGaWxlIHR5cGUnIGZyYW1lIGluZGljYXRlcyB3aGljaCB0eXBlIG9mIGF1ZGlvIHRoaXMgdGFnIGRlZmluZXMuCiAgIFRoZSBmb2xsb3dpbmcgdHlwZSBhbmQgcmVmaW5lbWVudHMgYXJlIGRlZmluZWQ6CgogICAgIE1QRyAgICBNUEVHIEF1ZGlvCiAgICAgICAvMSAgICAgTVBFRyAxLzIgbGF5ZXIgSQogICAgICAgLzIgICAgIE1QRUcgMS8yIGxheWVyIElJCiAgICAgICAvMyAgICAgTVBFRyAxLzIgbGF5ZXIgSUlJCiAgICAgICAvMi41ICAgTVBFRyAyLjUKICAgICAgIC9BQUMgICBBZHZhbmNlZCBhdWRpbyBjb21wcmVzc2lvbgogICAgIFZRRiAgICBUcmFuc2Zvcm0tZG9tYWluIFdlaWdodGVkIEludGVybGVhdmUgVmVjdG9yIFF1YW50aXphdGlvbgogICAgIFBDTSAgICBQdWxzZSBDb2RlIE1vZHVsYXRlZCBhdWRpbwoKICAgYnV0IG90aGVyIHR5cGVzIG1heSBiZSB1c2VkLCBub3QgZm9yIHRoZXNlIHR5cGVzIHRob3VnaC4gVGhpcyBpcyB1c2VkCiAgIGluIGEgc2ltaWxhciB3YXkgdG8gdGhlIHByZWRlZmluZWQgdHlwZXMgaW4gdGhlICJUTUVEIiBmcmFtZSwgYnV0CiAgIHdpdGhvdXQgcGFyZW50aGVzZXMuIElmIHRoaXMgZnJhbWUgaXMgbm90IHByZXNlbnQgYXVkaW8gdHlwZSBpcwogICBhc3N1bWVkIHRvIGJlICJNUEciLgoKICBUSU1FCiAgIFRoZSAnVGltZScgZnJhbWUgaXMgYSBudW1lcmljIHN0cmluZyBpbiB0aGUgSEhNTSBmb3JtYXQgY29udGFpbmluZwogICB0aGUgdGltZSBmb3IgdGhlIHJlY29yZGluZy4gVGhpcyBmaWVsZCBpcyBhbHdheXMgZm91ciBjaGFyYWN0ZXJzCiAgIGxvbmcuCgogIFRJVDEKICAgVGhlICdDb250ZW50IGdyb3VwIGRlc2NyaXB0aW9uJyBmcmFtZSBpcyB1c2VkIGlmIHRoZSBzb3VuZCBiZWxvbmdzIHRvCiAgIGEgbGFyZ2VyIGNhdGVnb3J5IG9mIHNvdW5kcy9tdXNpYy4gRm9yIGV4YW1wbGUsIGNsYXNzaWNhbCBtdXNpYyBpcwogICBvZnRlbiBzb3J0ZWQgaW4gZGlmZmVyZW50IG11c2ljYWwgc2VjdGlvbnMgKGUuZy4gIlBpYW5vIENvbmNlcnRvIiwKICAgIldlYXRoZXIgLSBIdXJyaWNhbmUiKS4KCiAgVElUMgogICBUaGUgJ1RpdGxlL1NvbmduYW1lL0NvbnRlbnQgZGVzY3JpcHRpb24nIGZyYW1lIGlzIHRoZSBhY3R1YWwgbmFtZSBvZgogICB0aGUgcGllY2UgKGUuZy4gIkFkYWdpbyIsICJIdXJyaWNhbmUgRG9ubmEiKS4KCiAgVElUMwogICBUaGUgJ1N1YnRpdGxlL0Rlc2NyaXB0aW9uIHJlZmluZW1lbnQnIGZyYW1lIGlzIHVzZWQgZm9yIGluZm9ybWF0aW9uCiAgIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRlbnRzIHRpdGxlIChlLmcuICJPcC4gMTYiIG9yICJQZXJmb3JtZWQKICAgbGl2ZSBhdCBXZW1ibGV5IikuCgogIFRLRVkKICAgVGhlICdJbml0aWFsIGtleScgZnJhbWUgY29udGFpbnMgdGhlIG11c2ljYWwga2V5IGluIHdoaWNoIHRoZSBzb3VuZAogICBzdGFydHMuIEl0IGlzIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIHdpdGggYSBtYXhpbXVtIGxlbmd0aCBvZiB0aHJlZQogICBjaGFyYWN0ZXJzLiBUaGUgZ3JvdW5kIGtleXMgYXJlIHJlcHJlc2VudGVkIHdpdGggIkEiLCJCIiwiQyIsIkQiLCJFIiwKICAgIkYiIGFuZCAiRyIgYW5kIGhhbGZrZXlzIHJlcHJlc2VudGVkIHdpdGggImIiIGFuZCAiIyIuIE1pbm9yIGlzCiAgIHJlcHJlc2VudGVkIGFzICJtIi4gRXhhbXBsZSAiQ2JtIi4gT2ZmIGtleSBpcyByZXByZXNlbnRlZCB3aXRoIGFuICJvIgogICBvbmx5LgoKICBUTEFOCiAgIFRoZSAnTGFuZ3VhZ2UocyknIGZyYW1lIHNob3VsZCBjb250YWluIHRoZSBsYW5ndWFnZXMgb2YgdGhlIHRleHQgb3IKICAgbHlyaWNzIHNwb2tlbiBvciBzdW5nIGluIHRoZSBhdWRpby4gVGhlIGxhbmd1YWdlIGlzIHJlcHJlc2VudGVkIHdpdGgKICAgdGhyZWUgY2hhcmFjdGVycyBhY2NvcmRpbmcgdG8gSVNPLTYzOS0yLiBJZiBtb3JlIHRoYW4gb25lIGxhbmd1YWdlIGlzCiAgIHVzZWQgaW4gdGhlIHRleHQgdGhlaXIgbGFuZ3VhZ2UgY29kZXMgc2hvdWxkIGZvbGxvdyBhY2NvcmRpbmcgdG8KICAgdGhlaXIgdXNhZ2UuCgogIFRMRU4KICAgVGhlICdMZW5ndGgnIGZyYW1lIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIGF1ZGlvZmlsZSBpbgogICBtaWxsaXNlY29uZHMsIHJlcHJlc2VudGVkIGFzIGEgbnVtZXJpYyBzdHJpbmcuCgogIFRNRUQKICAgVGhlICdNZWRpYSB0eXBlJyBmcmFtZSBkZXNjcmliZXMgZnJvbSB3aGljaCBtZWRpYSB0aGUgc291bmQKICAgb3JpZ2luYXRlZC4gVGhpcyBtYXkgYmUgYSB0ZXh0IHN0cmluZyBvciBhIHJlZmVyZW5jZSB0byB0aGUKICAgcHJlZGVmaW5lZCBtZWRpYSB0eXBlcyBmb3VuZCBpbiB0aGUgbGlzdCBiZWxvdy4gUmVmZXJlbmNlcyBhcmUgbWFkZQogICB3aXRoaW4gIigiIGFuZCAiKSIgYW5kIGFyZSBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgdGV4dCByZWZpbmVtZW50LAogICBlLmcuICIoTUMpIHdpdGggZm91ciBjaGFubmVscyIuIElmIGEgdGV4dCByZWZpbmVtZW50IHNob3VsZCBiZWdpbgogICB3aXRoIGEgIigiIGNoYXJhY3RlciBpdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCAiKCgiIGluIHRoZSBzYW1lIHdheQogICBhcyBpbiB0aGUgIlRDTyIgZnJhbWUuIFByZWRlZmluZWQgcmVmaW5lbWVudHMgaXMgYXBwZW5kZWQgYWZ0ZXIgdGhlCiAgIG1lZGlhIHR5cGUsIGUuZy4gIihDRC9BKSIgb3IgIihWSUQvUEFML1ZIUykiLgoKICAgIERJRyAgICBPdGhlciBkaWdpdGFsIG1lZGlhCiAgICAgIC9BICAgIEFuYWxvZyB0cmFuc2ZlciBmcm9tIG1lZGlhCgogICAgQU5BICAgIE90aGVyIGFuYWxvZyBtZWRpYQogICAgICAvV0FDICBXYXggY3lsaW5kZXIKICAgICAgLzhDQSAgOC10cmFjayB0YXBlIGNhc3NldHRlCgogICAgQ0QgICAgIENECiAgICAgIC9BICAgIEFuYWxvZyB0cmFuc2ZlciBmcm9tIG1lZGlhCiAgICAgIC9ERCAgIERERAogICAgICAvQUQgICBBREQKICAgICAgL0FBICAgQUFECgogICAgTEQgICAgIExhc2VyZGlzYwogICAgICAvQSAgICAgQW5hbG9nIHRyYW5zZmVyIGZyb20gbWVkaWEKCiAgICBUVCAgICAgVHVybnRhYmxlIHJlY29yZHMKICAgICAgLzMzICAgIDMzLjMzIHJwbQogICAgICAvNDUgICAgNDUgcnBtCiAgICAgIC83MSAgICA3MS4yOSBycG0KICAgICAgLzc2ICAgIDc2LjU5IHJwbQogICAgICAvNzggICAgNzguMjYgcnBtCiAgICAgIC84MCAgICA4MCBycG0KCiAgICBNRCAgICAgTWluaURpc2MKICAgICAgL0EgICAgQW5hbG9nIHRyYW5zZmVyIGZyb20gbWVkaWEKCiAgICBEQVQgICAgREFUCiAgICAgIC9BICAgIEFuYWxvZyB0cmFuc2ZlciBmcm9tIG1lZGlhCiAgICAgIC8xICAgIHN0YW5kYXJkLCA0OCBrSHovMTYgYml0cywgbGluZWFyCiAgICAgIC8yICAgIG1vZGUgMiwgMzIga0h6LzE2IGJpdHMsIGxpbmVhcgogICAgICAvMyAgICBtb2RlIDMsIDMyIGtIei8xMiBiaXRzLCBub25saW5lYXIsIGxvdyBzcGVlZAogICAgICAvNCAgICBtb2RlIDQsIDMyIGtIei8xMiBiaXRzLCA0IGNoYW5uZWxzCiAgICAgIC81ICAgIG1vZGUgNSwgNDQuMSBrSHovMTYgYml0cywgbGluZWFyCiAgICAgIC82ICAgIG1vZGUgNiwgNDQuMSBrSHovMTYgYml0cywgJ3dpZGUgdHJhY2snIHBsYXkKCiAgICBEQ0MgICAgRENDCiAgICAgIC9BICAgIEFuYWxvZyB0cmFuc2ZlciBmcm9tIG1lZGlhCgogICAgRFZEICAgIERWRAogICAgICAvQSAgICBBbmFsb2cgdHJhbnNmZXIgZnJvbSBtZWRpYQoKICAgIFRWICAgICBUZWxldmlzaW9uCiAgICAgIC9QQUwgICAgUEFMCiAgICAgIC9OVFNDICAgTlRTQwogICAgICAvU0VDQU0gIFNFQ0FNCgogICAgVklEICAgIFZpZGVvCiAgICAgIC9QQUwgICAgUEFMCiAgICAgIC9OVFNDICAgTlRTQwogICAgICAvU0VDQU0gIFNFQ0FNCiAgICAgIC9WSFMgICAgVkhTCiAgICAgIC9TVkhTICAgUy1WSFMKICAgICAgL0JFVEEgICBCRVRBTUFYCgogICAgUkFEICAgIFJhZGlvCiAgICAgIC9GTSAgIEZNCiAgICAgIC9BTSAgIEFNCiAgICAgIC9MVyAgIExXCiAgICAgIC9NVyAgIE1XCgogICAgVEVMICAgIFRlbGVwaG9uZQogICAgICAvSSAgICBJU0ROCgogICAgTUMgICAgIE1DIChub3JtYWwgY2Fzc2V0dGUpCiAgICAgIC80ICAgIDQuNzUgY20vcyAobm9ybWFsIHNwZWVkIGZvciBhIHR3byBzaWRlZCBjYXNzZXR0ZSkKICAgICAgLzkgICAgOS41IGNtL3MKICAgICAgL0kgICAgVHlwZSBJIGNhc3NldHRlIChmZXJyaWMvbm9ybWFsKQogICAgICAvSUkgICBUeXBlIElJIGNhc3NldHRlIChjaHJvbWUpCiAgICAgIC9JSUkgIFR5cGUgSUlJIGNhc3NldHRlIChmZXJyaWMgY2hyb21lKQogICAgICAvSVYgICBUeXBlIElWIGNhc3NldHRlIChtZXRhbCkKCiAgICBSRUUgICAgUmVlbAogICAgICAvOSAgICA5LjUgY20vcwogICAgICAvMTkgICAxOSBjbS9zCiAgICAgIC8zOCAgIDM4IGNtL3MKICAgICAgLzc2ICAgNzYgY20vcwogICAgICAvSSAgICBUeXBlIEkgY2Fzc2V0dGUgKGZlcnJpYy9ub3JtYWwpCiAgICAgIC9JSSAgIFR5cGUgSUkgY2Fzc2V0dGUgKGNocm9tZSkKICAgICAgL0lJSSAgVHlwZSBJSUkgY2Fzc2V0dGUgKGZlcnJpYyBjaHJvbWUpCiAgICAgIC9JViAgIFR5cGUgSVYgY2Fzc2V0dGUgKG1ldGFsKQoKICBUT0FMCiAgIFRoZSAnT3JpZ2luYWwgYWxidW0vbW92aWUvc2hvdyB0aXRsZScgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIHRoZSB0aXRsZQogICBvZiB0aGUgb3JpZ2luYWwgcmVjb3JkaW5nIChvciBzb3VyY2Ugb2Ygc291bmQpLCBpZiBmb3IgZXhhbXBsZSB0aGUKICAgbXVzaWMgaW4gdGhlIGZpbGUgc2hvdWxkIGJlIGEgY292ZXIgb2YgYSBwcmV2aW91c2x5IHJlbGVhc2VkIHNvbmcuCgogIFRPRk4KICAgVGhlICdPcmlnaW5hbCBmaWxlbmFtZScgZnJhbWUgY29udGFpbnMgdGhlIHByZWZlcnJlZCBmaWxlbmFtZSBmb3IgdGhlCiAgIGZpbGUsIHNpbmNlIHNvbWUgbWVkaWEgZG9lc24ndCBhbGxvdyB0aGUgZGVzaXJlZCBsZW5ndGggb2YgdGhlCiAgIGZpbGVuYW1lLiBUaGUgZmlsZW5hbWUgaXMgY2FzZSBzZW5zaXRpdmUgYW5kIGluY2x1ZGVzIGl0cyBzdWZmaXguCgogIFRPTFkKICAgVGhlICdPcmlnaW5hbCBseXJpY2lzdChzKS90ZXh0IHdyaXRlcihzKScgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIHRoZQogICB0ZXh0IHdyaXRlcihzKSBvZiB0aGUgb3JpZ2luYWwgcmVjb3JkaW5nLCBpZiBmb3IgZXhhbXBsZSB0aGUgbXVzaWMgaW4KICAgdGhlIGZpbGUgc2hvdWxkIGJlIGEgY292ZXIgb2YgYSBwcmV2aW91c2x5IHJlbGVhc2VkIHNvbmcuIFRoZSB0ZXh0CiAgIHdyaXRlcnMgYXJlIHNlcGVyYXRlZCB3aXRoIHRoZSAiLyIgY2hhcmFjdGVyLgoKICBUT1BFCiAgIFRoZSAnT3JpZ2luYWwgYXJ0aXN0KHMpL3BlcmZvcm1lcihzKScgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIHRoZQogICBwZXJmb3JtZXIocykgb2YgdGhlIG9yaWdpbmFsIHJlY29yZGluZywgaWYgZm9yIGV4YW1wbGUgdGhlIG11c2ljIGluCiAgIHRoZSBmaWxlIHNob3VsZCBiZSBhIGNvdmVyIG9mIGEgcHJldmlvdXNseSByZWxlYXNlZCBzb25nLiBUaGUKICAgcGVyZm9ybWVycyBhcmUgc2VwZXJhdGVkIHdpdGggdGhlICIvIiBjaGFyYWN0ZXIuCgogIFRPUlkKICAgVGhlICdPcmlnaW5hbCByZWxlYXNlIHllYXInIGZyYW1lIGlzIGludGVuZGVkIGZvciB0aGUgeWVhciB3aGVuIHRoZQogICBvcmlnaW5hbCByZWNvcmRpbmcsIGlmIGZvciBleGFtcGxlIHRoZSBtdXNpYyBpbiB0aGUgZmlsZSBzaG91bGQgYmUgYQogICBjb3ZlciBvZiBhIHByZXZpb3VzbHkgcmVsZWFzZWQgc29uZywgd2FzIHJlbGVhc2VkLiBUaGUgZmllbGQgaXMKICAgZm9ybWF0dGVkIGFzIGluIHRoZSAiVFlFUiIgZnJhbWUuCgogIFRPV04KICAgVGhlICdGaWxlIG93bmVyL2xpY2Vuc2VlJyBmcmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgb3duZXIgb3IKICAgbGljZW5zZWUgb2YgdGhlIGZpbGUgYW5kIGl0J3MgY29udGVudHMuCgogIFRQRTEKICAgVGhlICdMZWFkIGFydGlzdChzKS9MZWFkIHBlcmZvcm1lcihzKS9Tb2xvaXN0KHMpL1BlcmZvcm1pbmcgZ3JvdXAnIGlzCiAgIHVzZWQgZm9yIHRoZSBtYWluIGFydGlzdChzKS4gVGhleSBhcmUgc2VwZXJhdGVkIHdpdGggdGhlICIvIgogICBjaGFyYWN0ZXIuCgogIFRQRTIKICAgVGhlICdCYW5kL09yY2hlc3RyYS9BY2NvbXBhbmltZW50JyBmcmFtZSBpcyB1c2VkIGZvciBhZGRpdGlvbmFsCiAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZXJmb3JtZXJzIGluIHRoZSByZWNvcmRpbmcuCgogIFRQRTMKICAgVGhlICdDb25kdWN0b3InIGZyYW1lIGlzIHVzZWQgZm9yIHRoZSBuYW1lIG9mIHRoZSBjb25kdWN0b3IuCgogIFRQRTQKICAgVGhlICdJbnRlcnByZXRlZCwgcmVtaXhlZCwgb3Igb3RoZXJ3aXNlIG1vZGlmaWVkIGJ5JyBmcmFtZSBjb250YWlucwogICBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZW9wbGUgYmVoaW5kIGEgcmVtaXggYW5kIHNpbWlsYXIKICAgaW50ZXJwcmV0YXRpb25zIG9mIGFub3RoZXIgZXhpc3RpbmcgcGllY2UuCgogIFRQT1MKICAgVGhlICdQYXJ0IG9mIGEgc2V0JyBmcmFtZSBpcyBhIG51bWVyaWMgc3RyaW5nIHRoYXQgZGVzY3JpYmVzIHdoaWNoCiAgIHBhcnQgb2YgYSBzZXQgdGhlIGF1ZGlvIGNhbWUgZnJvbS4gVGhpcyBmcmFtZSBpcyB1c2VkIGlmIHRoZSBzb3VyY2UKICAgZGVzY3JpYmVkIGluIHRoZSAiVEFMQiIgZnJhbWUgaXMgZGl2aWRlZCBpbnRvIHNldmVyYWwgbWVkaXVtcywgZS5nLiBhCiAgIGRvdWJsZSBDRC4gVGhlIHZhbHVlIG1heSBiZSBleHRlbmRlZCB3aXRoIGEgIi8iIGNoYXJhY3RlciBhbmQgYQogICBudW1lcmljIHN0cmluZyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFydHMgaW4gdGhlIHNldC4gRS5nLgogICAiMS8yIi4KCiAgVFBVQgogICBUaGUgJ1B1Ymxpc2hlcicgZnJhbWUgc2ltcGx5IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBsYWJlbCBvcgogICBwdWJsaXNoZXIuCgogIFRSQ0sKICAgVGhlICdUcmFjayBudW1iZXIvUG9zaXRpb24gaW4gc2V0JyBmcmFtZSBpcyBhIG51bWVyaWMgc3RyaW5nCiAgIGNvbnRhaW5pbmcgdGhlIG9yZGVyIG51bWJlciBvZiB0aGUgYXVkaW8tZmlsZSBvbiBpdHMgb3JpZ2luYWwKICAgcmVjb3JkaW5nLiBUaGlzIG1heSBiZSBleHRlbmRlZCB3aXRoIGEgIi8iIGNoYXJhY3RlciBhbmQgYSBudW1lcmljCiAgIHN0cmluZyBjb250YWluaW5nIHRoZSB0b3RhbCBudW1lciBvZiB0cmFja3MvZWxlbWVudHMgb24gdGhlIG9yaWdpbmFsCiAgIHJlY29yZGluZy4gRS5nLiAiNC85Ii4KCiAgVFJEQQogICBUaGUgJ1JlY29yZGluZyBkYXRlcycgZnJhbWUgaXMgYSBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGNvbXBsZW1lbnQgdG8KICAgdGhlICJUWUVSIiwgIlREQVQiIGFuZCAiVElNRSIgZnJhbWVzLiBFLmcuICI0dGgtN3RoIEp1bmUsIDEydGggSnVuZSIKICAgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgIlRZRVIiIGZyYW1lLgoKICBUUlNOCiAgIFRoZSAnSW50ZXJuZXQgcmFkaW8gc3RhdGlvbiBuYW1lJyBmcmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUKICAgaW50ZXJuZXQgcmFkaW8gc3RhdGlvbiBmcm9tIHdoaWNoIHRoZSBhdWRpbyBpcyBzdHJlYW1lZC4KCiAgVFJTTwogICBUaGUgJ0ludGVybmV0IHJhZGlvIHN0YXRpb24gb3duZXInIGZyYW1lIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZQogICBvd25lciBvZiB0aGUgaW50ZXJuZXQgcmFkaW8gc3RhdGlvbiBmcm9tIHdoaWNoIHRoZSBhdWRpbyBpcwogICBzdHJlYW1lZC4KCiAgVFNJWgogICBUaGUgJ1NpemUnIGZyYW1lIGNvbnRhaW5zIHRoZSBzaXplIG9mIHRoZSBhdWRpb2ZpbGUgaW4gYnl0ZXMsCiAgIGV4Y2x1ZGluZyB0aGUgSUQzdjIgdGFnLCByZXByZXNlbnRlZCBhcyBhIG51bWVyaWMgc3RyaW5nLgoKICBUU1JDCiAgIFRoZSAnSVNSQycgZnJhbWUgc2hvdWxkIGNvbnRhaW4gdGhlIEludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nCiAgIENvZGUgW0lTUkNdICgxMiBjaGFyYWN0ZXJzKS4KCiAgVFNTRQogICBUaGUgJ1NvZnR3YXJlL0hhcmR3YXJlIGFuZCBzZXR0aW5ncyB1c2VkIGZvciBlbmNvZGluZycgZnJhbWUKICAgaW5jbHVkZXMgdGhlIHVzZWQgYXVkaW8gZW5jb2RlciBhbmQgaXRzIHNldHRpbmdzIHdoZW4gdGhlIGZpbGUgd2FzCiAgIGVuY29kZWQuIEhhcmR3YXJlIHJlZmVycyB0byBoYXJkd2FyZSBlbmNvZGVycywgbm90IHRoZSBjb21wdXRlciBvbgogICB3aGljaCBhIHByb2dyYW0gd2FzIHJ1bi4KCiAgVFlFUgogICBUaGUgJ1llYXInIGZyYW1lIGlzIGEgbnVtZXJpYyBzdHJpbmcgd2l0aCBhIHllYXIgb2YgdGhlIHJlY29yZGluZy4KICAgVGhpcyBmcmFtZXMgaXMgYWx3YXlzIGZvdXIgY2hhcmFjdGVycyBsb25nICh1bnRpbCB0aGUgeWVhciAxMDAwMCkuCgoKNC4yLjIuICAgVXNlciBkZWZpbmVkIHRleHQgaW5mb3JtYXRpb24gZnJhbWUKCiAgIFRoaXMgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIG9uZS1zdHJpbmcgdGV4dCBpbmZvcm1hdGlvbiBjb25jZXJuaW5nIHRoZQogICBhdWRpb2ZpbGUgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgb3RoZXIgIlQiLWZyYW1lcy4gVGhlIGZyYW1lIGJvZHkKICAgY29uc2lzdHMgb2YgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RyaW5nLCByZXByZXNlbnRlZCBhcyBhIHRlcm1pbmF0ZWQKICAgc3RyaW5nLCBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIHN0cmluZy4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUKICAgIlRYWFgiIGZyYW1lIGluIGVhY2ggdGFnLCBidXQgb25seSBvbmUgd2l0aCB0aGUgc2FtZSBkZXNjcmlwdGlvbi4KCiAgICAgPEhlYWRlciBmb3IgJ1VzZXIgZGVmaW5lZCB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lJywgSUQ6ICJUWFhYIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAkeHgKICAgICBEZXNjcmlwdGlvbiAgICAgICA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPiAkMDAgKDAwKQogICAgIFZhbHVlICAgICAgICAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+CgoKNC4zLiAgIFVSTCBsaW5rIGZyYW1lcwoKICAgV2l0aCB0aGVzZSBmcmFtZXMgZHluYW1pYyBkYXRhIHN1Y2ggYXMgd2VicGFnZXMgd2l0aCB0b3VyaW5nCiAgIGluZm9ybWF0aW9uLCBwcmljZSBpbmZvcm1hdGlvbiBvciBwbGFpbiBvcmRpbmFyeSBuZXdzIGNhbiBiZSBhZGRlZCB0bwogICB0aGUgdGFnLiBUaGVyZSBtYXkgb25seSBiZSBvbmUgVVJMIFtVUkxdIGxpbmsgZnJhbWUgb2YgaXRzIGtpbmQgaW4gYW4KICAgdGFnLCBleGNlcHQgd2hlbiBzdGF0ZWQgb3RoZXJ3aXNlIGluIHRoZSBmcmFtZSBkZXNjcmlwdGlvbi4gSWYgdGhlCiAgIHRleHRzdHJpbmcgaXMgZm9sbG93ZWQgYnkgYSB0ZXJtaW5hdGlvbiAoJDAwICgwMCkpIGFsbCB0aGUgZm9sbG93aW5nCiAgIGluZm9ybWF0aW9uIHNob3VsZCBiZSBpZ25vcmVkIGFuZCBub3QgYmUgZGlzcGxheWVkLiBBbGwgVVJMIGxpbmsKICAgZnJhbWUgaWRlbnRpZmllcnMgYmVnaW5zIHdpdGggIlciLiBPbmx5IFVSTCBsaW5rIGZyYW1lIGlkZW50aWZpZXJzCiAgIGJlZ2lucyB3aXRoICJXIi4gQWxsIFVSTCBsaW5rIGZyYW1lcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgoKICAgICA8SGVhZGVyIGZvciAnVVJMIGxpbmsgZnJhbWUnLCBJRDogIlcwMDAiIC0gIldaWloiLCBleGNsdWRpbmcgIldYWFgiCiAgICAgZGVzY3JpYmVkIGluIDQuMy4yLj4KICAgICBVUkwgICAgICAgICAgICAgIDx0ZXh0IHN0cmluZz4KCgo0LjMuMS4gICBVUkwgbGluayBmcmFtZXMgLSBkZXRhaWxzCgogIFdDT00KICAgVGhlICdDb21tZXJjaWFsIGluZm9ybWF0aW9uJyBmcmFtZSBpcyBhIFVSTCBwb2ludGluZyBhdCBhIHdlYnBhZ2UKICAgd2l0aCBpbmZvcm1hdGlvbiBzdWNoIGFzIHdoZXJlIHRoZSBhbGJ1bSBjYW4gYmUgYm91Z2h0LiBUaGVyZSBtYXkgYmUKICAgbW9yZSB0aGFuIG9uZSAiV0NPTSIgZnJhbWUgaW4gYSB0YWcsIGJ1dCBub3Qgd2l0aCB0aGUgc2FtZSBjb250ZW50LgoKICBXQ09QCiAgIFRoZSAnQ29weXJpZ2h0L0xlZ2FsIGluZm9ybWF0aW9uJyBmcmFtZSBpcyBhIFVSTCBwb2ludGluZyBhdCBhCiAgIHdlYnBhZ2Ugd2hlcmUgdGhlIHRlcm1zIG9mIHVzZSBhbmQgb3duZXJzaGlwIG9mIHRoZSBmaWxlIGlzCiAgIGRlc2NyaWJlZC4KCiAgV09BRgogICBUaGUgJ09mZmljaWFsIGF1ZGlvIGZpbGUgd2VicGFnZScgZnJhbWUgaXMgYSBVUkwgcG9pbnRpbmcgYXQgYSBmaWxlCiAgIHNwZWNpZmljIHdlYnBhZ2UuCgogIFdPQVIKICAgVGhlICdPZmZpY2lhbCBhcnRpc3QvcGVyZm9ybWVyIHdlYnBhZ2UnIGZyYW1lIGlzIGEgVVJMIHBvaW50aW5nIGF0CiAgIHRoZSBhcnRpc3RzIG9mZmljaWFsIHdlYnBhZ2UuIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lICJXT0FSIiBmcmFtZQogICBpbiBhIHRhZyBpZiB0aGUgYXVkaW8gY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwZXJmb3JtZXIsIGJ1dCBub3Qgd2l0aAogICB0aGUgc2FtZSBjb250ZW50LgoKICBXT0FTCiAgIFRoZSAnT2ZmaWNpYWwgYXVkaW8gc291cmNlIHdlYnBhZ2UnIGZyYW1lIGlzIGEgVVJMIHBvaW50aW5nIGF0IHRoZQogICBvZmZpY2lhbCB3ZWJwYWdlIGZvciB0aGUgc291cmNlIG9mIHRoZSBhdWRpbyBmaWxlLCBlLmcuIGEgbW92aWUuCgogIFdPUlMKICAgVGhlICdPZmZpY2lhbCBpbnRlcm5ldCByYWRpbyBzdGF0aW9uIGhvbWVwYWdlJyBjb250YWlucyBhIFVSTAogICBwb2ludGluZyBhdCB0aGUgaG9tZXBhZ2Ugb2YgdGhlIGludGVybmV0IHJhZGlvIHN0YXRpb24uCgogIFdQQVkKICAgVGhlICdQYXltZW50JyBmcmFtZSBpcyBhIFVSTCBwb2ludGluZyBhdCBhIHdlYnBhZ2UgdGhhdCB3aWxsIGhhbmRsZQogICB0aGUgcHJvY2VzcyBvZiBwYXlpbmcgZm9yIHRoaXMgZmlsZS4KCiAgV1BVQgogICBUaGUgJ1B1Ymxpc2hlcnMgb2ZmaWNpYWwgd2VicGFnZScgZnJhbWUgaXMgYSBVUkwgcG9pbnRpbmcgYXQgdGhlCiAgIG9mZmljaWFsIHdlcGFnZSBmb3IgdGhlIHB1Ymxpc2hlci4KCgo0LjMuMi4gICBVc2VyIGRlZmluZWQgVVJMIGxpbmsgZnJhbWUKCiAgIFRoaXMgZnJhbWUgaXMgaW50ZW5kZWQgZm9yIFVSTCBbVVJMXSBsaW5rcyBjb25jZXJuaW5nIHRoZSBhdWRpb2ZpbGUKICAgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgb3RoZXIgIlciLWZyYW1lcy4gVGhlIGZyYW1lIGJvZHkgY29uc2lzdHMKICAgb2YgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RyaW5nLCByZXByZXNlbnRlZCBhcyBhIHRlcm1pbmF0ZWQgc3RyaW5nLAogICBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIFVSTC4gVGhlIFVSTCBpcyBhbHdheXMgZW5jb2RlZCB3aXRoIElTTy04ODU5LTEKICAgW0lTTy04ODU5LTFdLiBUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSAiV1hYWCIgZnJhbWUgaW4gZWFjaCB0YWcsCiAgIGJ1dCBvbmx5IG9uZSB3aXRoIHRoZSBzYW1lIGRlc2NyaXB0aW9uLgoKICAgICA8SGVhZGVyIGZvciAnVXNlciBkZWZpbmVkIFVSTCBsaW5rIGZyYW1lJywgSUQ6ICJXWFhYIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAkeHgKICAgICBEZXNjcmlwdGlvbiAgICAgICA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPiAkMDAgKDAwKQogICAgIFVSTCAgICAgICAgICAgICAgIDx0ZXh0IHN0cmluZz4KCgo0LjQuICAgSW52b2x2ZWQgcGVvcGxlIGxpc3QKCiAgIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGEgbG90IG9mIHBlb3BsZSBjb250cmlidXRpbmcgdG8gYW4gYXVkaW8gZmlsZSBpbgogICB2YXJpb3VzIHdheXMsIHN1Y2ggYXMgbXVzaWNpYW5zIGFuZCB0ZWNobmljaWFucywgdGhlICdUZXh0CiAgIGluZm9ybWF0aW9uIGZyYW1lcycgYXJlIG9mdGVuIGluc3VmZmljaWVudCB0byBsaXN0IGV2ZXJ5b25lIGludm9sdmVkCiAgIGluIGEgcHJvamVjdC4gVGhlICdJbnZvbHZlZCBwZW9wbGUgbGlzdCcgaXMgYSBmcmFtZSBjb250YWluaW5nIHRoZQogICBuYW1lcyBvZiB0aG9zZSBpbnZvbHZlZCwgYW5kIGhvdyB0aGV5IHdlcmUgaW52b2x2ZWQuIFRoZSBib2R5IHNpbXBseQogICBjb250YWlucyBhIHRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggdGhlIGludm9sdmVtZW50IGRpcmVjdGx5IGZvbGxvd2VkCiAgIGJ5IGEgdGVybWluYXRlZCBzdHJpbmcgd2l0aCB0aGUgaW52b2x2ZWUgZm9sbG93ZWQgYnkgYSBuZXcKICAgaW52b2x2ZW1lbnQgYW5kIHNvIG9uLiBUaGVyZSBtYXkgb25seSBiZSBvbmUgIklQTFMiIGZyYW1lIGluIGVhY2gKICAgdGFnLgoKICAgICA8SGVhZGVyIGZvciAnSW52b2x2ZWQgcGVvcGxlIGxpc3QnLCBJRDogIklQTFMiPgogICAgIFRleHQgZW5jb2RpbmcgICAgICAgICAgJHh4CiAgICAgUGVvcGxlIGxpc3Qgc3RyaW5ncyAgICA8dGV4dCBzdHJpbmdzIGFjY29yZGluZyB0byBlbmNvZGluZz4KCgo0LjUuICAgTXVzaWMgQ0QgaWRlbnRpZmllcgoKICAgVGhpcyBmcmFtZSBpcyBpbnRlbmRlZCBmb3IgbXVzaWMgdGhhdCBjb21lcyBmcm9tIGEgQ0QsIHNvIHRoYXQgdGhlIENECiAgIGNhbiBiZSBpZGVudGlmaWVkIGluIGRhdGFiYXNlcyBzdWNoIGFzIHRoZSBDRERCIFtDRERCXS4gVGhlIGZyYW1lCiAgIGNvbnNpc3RzIG9mIGEgYmluYXJ5IGR1bXAgb2YgdGhlIFRhYmxlIE9mIENvbnRlbnRzLCBUT0MsIGZyb20gdGhlIENELAogICB3aGljaCBpcyBhIGhlYWRlciBvZiA0IGJ5dGVzIGFuZCB0aGVuIDggYnl0ZXMvdHJhY2sgb24gdGhlIENEIHBsdXMgOAogICBieXRlcyBmb3IgdGhlICdsZWFkIG91dCcgbWFraW5nIGEgbWF4aW11bSBvZiA4MDQgYnl0ZXMuIFRoZSBvZmZzZXQgdG8KICAgdGhlIGJlZ2lubmluZyBvZiBldmVyeSB0cmFjayBvbiB0aGUgQ0Qgc2hvdWxkIGJlIGRlc2NyaWJlZCB3aXRoIGEKICAgZm91ciBieXRlcyBhYnNvbHV0ZSBDRC1mcmFtZSBhZGRyZXNzIHBlciB0cmFjaywgYW5kIG5vdCB3aXRoIGFic29sdXRlCiAgIHRpbWUuIFRoaXMgZnJhbWUgcmVxdWlyZXMgYSBwcmVzZW50IGFuZCB2YWxpZCAiVFJDSyIgZnJhbWUsIGV2ZW4gaWYKICAgdGhlIENEJ3Mgb25seSBnb3Qgb25lIHRyYWNrLiBUaGVyZSBtYXkgb25seSBiZSBvbmUgIk1DREkiIGZyYW1lIGluCiAgIGVhY2ggdGFnLgoKICAgICA8SGVhZGVyIGZvciAnTXVzaWMgQ0QgaWRlbnRpZmllcicsIElEOiAiTUNESSI+CiAgICAgQ0QgVE9DICAgICAgICAgICAgICAgIDxiaW5hcnkgZGF0YT4KCgo0LjYuICAgRXZlbnQgdGltaW5nIGNvZGVzCgogICBUaGlzIGZyYW1lIGFsbG93cyBzeW5jaHJvbmlzYXRpb24gd2l0aCBrZXkgZXZlbnRzIGluIGEgc29uZyBvciBzb3VuZC4KICAgVGhlIGhlYWRlciBpczoKCiAgICAgPEhlYWRlciBmb3IgJ0V2ZW50IHRpbWluZyBjb2RlcycsIElEOiAiRVRDTyI+CiAgICAgVGltZSBzdGFtcCBmb3JtYXQgICAgJHh4CgogICBXaGVyZSB0aW1lIHN0YW1wIGZvcm1hdCBpczoKCiAgICAgJDAxICBBYnNvbHV0ZSB0aW1lLCAzMiBiaXQgc2l6ZWQsIHVzaW5nIE1QRUcgW01QRUddIGZyYW1lcyBhcyB1bml0CiAgICAgJDAyICBBYnNvbHV0ZSB0aW1lLCAzMiBiaXQgc2l6ZWQsIHVzaW5nIG1pbGxpc2Vjb25kcyBhcyB1bml0CgogICBBYm9sdXRlIHRpbWUgbWVhbnMgdGhhdCBldmVyeSBzdGFtcCBjb250YWlucyB0aGUgdGltZSBmcm9tIHRoZQogICBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCgogICBGb2xsb3dlZCBieSBhIGxpc3Qgb2Yga2V5IGV2ZW50cyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKCiAgICAgVHlwZSBvZiBldmVudCAgICR4eAogICAgIFRpbWUgc3RhbXAgICAgICAkeHggKHh4IC4uLikKCiAgIFRoZSAnVGltZSBzdGFtcCcgaXMgc2V0IHRvIHplcm8gaWYgZGlyZWN0bHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgc291bmQgb3IgYWZ0ZXIgdGhlIHByZXZpb3VzIGV2ZW50LiBBbGwgZXZlbnRzIHNob3VsZCBiZSBzb3J0ZWQgaW4KICAgY2hyb25vbG9naWNhbCBvcmRlci4gVGhlIHR5cGUgb2YgZXZlbnQgaXMgYXMgZm9sbG93czoKCiAgICAgJDAwICBwYWRkaW5nIChoYXMgbm8gbWVhbmluZykKICAgICAkMDEgIGVuZCBvZiBpbml0aWFsIHNpbGVuY2UKICAgICAkMDIgIGludHJvIHN0YXJ0CiAgICAgJDAzICBtYWlucGFydCBzdGFydAogICAgICQwNCAgb3V0cm8gc3RhcnQKICAgICAkMDUgIG91dHJvIGVuZAogICAgICQwNiAgdmVyc2Ugc3RhcnQKICAgICAkMDcgIHJlZnJhaW4gc3RhcnQKICAgICAkMDggIGludGVybHVkZSBzdGFydAogICAgICQwOSAgdGhlbWUgc3RhcnQKICAgICAkMEEgIHZhcmlhdGlvbiBzdGFydAogICAgICQwQiAga2V5IGNoYW5nZQogICAgICQwQyAgdGltZSBjaGFuZ2UKICAgICAkMEQgIG1vbWVudGFyeSB1bndhbnRlZCBub2lzZSAoU25hcCwgQ3JhY2tsZSAmIFBvcCkKICAgICAkMEUgIHN1c3RhaW5lZCBub2lzZQogICAgICQwRiAgc3VzdGFpbmVkIG5vaXNlIGVuZAogICAgICQxMCAgaW50cm8gZW5kCiAgICAgJDExICBtYWlucGFydCBlbmQKICAgICAkMTIgIHZlcnNlIGVuZAogICAgICQxMyAgcmVmcmFpbiBlbmQKICAgICAkMTQgIHRoZW1lIGVuZAoKICAgICAkMTUtJERGICByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoKICAgICAkRTAtJEVGICBub3QgcHJlZGVmaW5lZCBzeW5jIDAtRgoKICAgICAkRjAtJEZDICByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoKICAgICAkRkQgIGF1ZGlvIGVuZCAoc3RhcnQgb2Ygc2lsZW5jZSkKICAgICAkRkUgIGF1ZGlvIGZpbGUgZW5kcwogICAgICRGRiAgb25lIG1vcmUgYnl0ZSBvZiBldmVudHMgZm9sbG93cyAoYWxsIHRoZSBmb2xsb3dpbmcgYnl0ZXMgd2l0aAogICAgICAgICAgdGhlIHZhbHVlICRGRiBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uKQoKICAgVGVybWluYXRpbmcgdGhlIHN0YXJ0IGV2ZW50cyBzdWNoIGFzICJpbnRybyBzdGFydCIgaXMgbm90IHJlcXVpcmVkLgogICBUaGUgJ05vdCBwcmVkZWZpbmVkIHN5bmMncyAoJEUwLUVGKSBhcmUgZm9yIHVzZXIgZXZlbnRzLiBZb3UgbWlnaHQKICAgd2FudCB0byBzeW5jaHJvbmlzZSB5b3VyIG11c2ljIHRvIHNvbWV0aGluZywgbGlrZSBzZXR0aW5nIG9mIGFuCiAgIGV4cGxvc2lvbiBvbi1zdGFnZSwgdHVybmluZyBvbiB5b3VyIHNjcmVlbnNhdmVyIGV0Yy4KCiAgIFRoZXJlIG1heSBvbmx5IGJlIG9uZSAiRVRDTyIgZnJhbWUgaW4gZWFjaCB0YWcuCgoKNC43LiAgIE1QRUcgbG9jYXRpb24gbG9va3VwIHRhYmxlCgogICBUbyBpbmNyZWFzZSBwZXJmb3JtYW5jZSBhbmQgYWNjdXJhY3kgb2YganVtcHMgd2l0aGluIGEgTVBFRyBbTVBFR10KICAgYXVkaW8gZmlsZSwgZnJhbWVzIHdpdGggdGltZWNvZGVzIGluIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIGZpbGUKICAgbWlnaHQgYmUgdXNlZnVsLiBUaGUgSUQzdjIgZnJhbWUgaW5jbHVkZXMgcmVmZXJlbmNlcyB0aGF0IHRoZQogICBzb2Z0d2FyZSBjYW4gdXNlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbnMgaW4gdGhlIGZpbGUuIEFmdGVyIHRoZSBmcmFtZQogICBoZWFkZXIgaXMgYSBkZXNjcmlwdG9yIG9mIGhvdyBtdWNoIHRoZSAnZnJhbWUgY291bnRlcicgc2hvdWxkCiAgIGluY3JlYXNlIGZvciBldmVyeSByZWZlcmVuY2UuIElmIHRoaXMgdmFsdWUgaXMgdHdvIHRoZW4gdGhlIGZpcnN0CiAgIHJlZmVyZW5jZSBwb2ludHMgb3V0IHRoZSBzZWNvbmQgZnJhbWUsIHRoZSAybmQgcmVmZXJlbmNlIHRoZSA0dGgKICAgZnJhbWUsIHRoZSAzcmQgcmVmZXJlbmNlIHRoZSA2dGggZnJhbWUgZXRjLiBJbiBhIHNpbWlsYXIgd2F5IHRoZQogICAnYnl0ZXMgYmV0d2VlbiByZWZlcmVuY2UnIGFuZCAnbWlsbGlzZWNvbmRzIGJldHdlZW4gcmVmZXJlbmNlJyBwb2ludHMKICAgb3V0IGJ5dGVzIGFuZCBtaWxsaXNlY29uZHMgcmVzcGVjdGl2ZWx5LgoKICAgRWFjaCByZWZlcmVuY2UgY29uc2lzdHMgb2YgdHdvIHBhcnRzOyBhIGNlcnRhaW4gbnVtYmVyIG9mIGJpdHMsIGFzCiAgIGRlZmluZWQgaW4gJ2JpdHMgZm9yIGJ5dGVzIGRldmlhdGlvbicsIHRoYXQgZGVzY3JpYmVzIHRoZSBkaWZmZXJlbmNlCiAgIGJldHdlZW4gd2hhdCBpcyBzYWlkIGluICdieXRlcyBiZXR3ZWVuIHJlZmVyZW5jZScgYW5kIHRoZSByZWFsaXR5IGFuZAogICBhIGNlcnRhaW4gbnVtYmVyIG9mIGJpdHMsIGFzIGRlZmluZWQgaW4gJ2JpdHMgZm9yIG1pbGxpc2Vjb25kcwogICBkZXZpYXRpb24nLCB0aGF0IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHdoYXQgaXMgc2FpZCBpbgogICAnbWlsbGlzZWNvbmRzIGJldHdlZW4gcmVmZXJlbmNlJyBhbmQgdGhlIHJlYWxpdHkuIFRoZSBudW1iZXIgb2YgYml0cwogICBpbiBldmVyeSByZWZlcmVuY2UsIGkuZS4gJ2JpdHMgZm9yIGJ5dGVzIGRldmlhdGlvbicrJ2JpdHMgZm9yCiAgIG1pbGxpc2Vjb25kcyBkZXZpYXRpb24nLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgZm91ci4gVGhlcmUgbWF5IG9ubHkKICAgYmUgb25lICJNTExUIiBmcmFtZSBpbiBlYWNoIHRhZy4KCiAgICAgPEhlYWRlciBmb3IgJ0xvY2F0aW9uIGxvb2t1cCB0YWJsZScsIElEOiAiTUxMVCI+CiAgICAgTVBFRyBmcmFtZXMgYmV0d2VlbiByZWZlcmVuY2UgICR4eCB4eAogICAgIEJ5dGVzIGJldHdlZW4gcmVmZXJlbmNlICAgICAgICAkeHggeHggeHgKICAgICBNaWxsaXNlY29uZHMgYmV0d2VlbiByZWZlcmVuY2UgJHh4IHh4IHh4CiAgICAgQml0cyBmb3IgYnl0ZXMgZGV2aWF0aW9uICAgICAgICR4eAogICAgIEJpdHMgZm9yIG1pbGxpc2Vjb25kcyBkZXYuICAgICAkeHgKCiAgIFRoZW4gZm9yIGV2ZXJ5IHJlZmVyZW5jZSB0aGUgZm9sbG93aW5nIGRhdGEgaXMgaW5jbHVkZWQ7CgogICAgIERldmlhdGlvbiBpbiBieXRlcyAgICAgICAgICV4eHguLi4uCiAgICAgRGV2aWF0aW9uIGluIG1pbGxpc2Vjb25kcyAgJXh4eC4uLi4KCgo0LjguICAgU3luY2hyb25pc2VkIHRlbXBvIGNvZGVzCgogICBGb3IgYSBtb3JlIGFjY3VyYXRlIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZW1wbyBvZiBhIG11c2ljYWwgcGllY2UgdGhpcwogICBmcmFtZSBtaWdodCBiZSB1c2VkLiBBZnRlciB0aGUgaGVhZGVyIGZvbGxvd3Mgb25lIGJ5dGUgZGVzY3JpYmluZwogICB3aGljaCB0aW1lIHN0YW1wIGZvcm1hdCBzaG91bGQgYmUgdXNlZC4gVGhlbiBmb2xsb3dzIG9uZSBvciBtb3JlCiAgIHRlbXBvIGNvZGVzLiBFYWNoIHRlbXBvIGNvZGUgY29uc2lzdHMgb2Ygb25lIHRlbXBvIHBhcnQgYW5kIG9uZSB0aW1lCiAgIHBhcnQuIFRoZSB0ZW1wbyBpcyBpbiBCUE0gZGVzY3JpYmVkIHdpdGggb25lIG9yIHR3byBieXRlcy4gSWYgdGhlCiAgIGZpcnN0IGJ5dGUgaGFzIHRoZSB2YWx1ZSAkRkYsIG9uZSBtb3JlIGJ5dGUgZm9sbG93cywgd2hpY2ggaXMgYWRkZWQKICAgdG8gdGhlIGZpcnN0IGdpdmluZyBhIHJhbmdlIGZyb20gMiAtIDUxMCBCUE0sIHNpbmNlICQwMCBhbmQgJDAxIGlzCiAgIHJlc2VydmVkLiAkMDAgaXMgdXNlZCB0byBkZXNjcmliZSBhIGJlYXQtZnJlZSB0aW1lIHBlcmlvZCwgd2hpY2ggaXMKICAgbm90IHRoZSBzYW1lIGFzIGEgbXVzaWMtZnJlZSB0aW1lIHBlcmlvZC4gJDAxIGlzIHVzZWQgdG8gaW5kaWNhdGUgb25lCiAgIHNpbmdsZSBiZWF0LXN0cm9rZSBmb2xsb3dlZCBieSBhIGJlYXQtZnJlZSBwZXJpb2QuCgogICBUaGUgdGVtcG8gZGVzY3JpcHRvciBpcyBmb2xsb3dlZCBieSBhIHRpbWUgc3RhbXAuIEV2ZXJ5IHRpbWUgdGhlCiAgIHRlbXBvIGluIHRoZSBtdXNpYyBjaGFuZ2VzLCBhIHRlbXBvIGRlc2NyaXB0b3IgbWF5IGluZGljYXRlIHRoaXMgZm9yCiAgIHRoZSBwbGF5ZXIuIEFsbCB0ZW1wbyBkZXNjcmlwdG9ycyBzaG91bGQgYmUgc29ydGVkIGluIGNocm9ub2xvZ2ljYWwKICAgb3JkZXIuIFRoZSBmaXJzdCBiZWF0LXN0cm9rZSBpbiBhIHRpbWUtcGVyaW9kIGlzIGF0IHRoZSBzYW1lIHRpbWUgYXMKICAgdGhlIGJlYXQgZGVzY3JpcHRpb24gb2NjdXJzLiBUaGVyZSBtYXkgb25seSBiZSBvbmUgIlNZVEMiIGZyYW1lIGluCiAgIGVhY2ggdGFnLgoKICAgICA8SGVhZGVyIGZvciAnU3luY2hyb25pc2VkIHRlbXBvIGNvZGVzJywgSUQ6ICJTWVRDIj4KICAgICBUaW1lIHN0YW1wIGZvcm1hdCAgICR4eAogICAgIFRlbXBvIGRhdGEgICAgICAgICAgPGJpbmFyeSBkYXRhPgoKICAgV2hlcmUgdGltZSBzdGFtcCBmb3JtYXQgaXM6CgogICAgICQwMSAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBNUEVHIFtNUEVHXSBmcmFtZXMgYXMgdW5pdAogICAgICQwMiAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBtaWxsaXNlY29uZHMgYXMgdW5pdAoKICAgQWJvbHV0ZSB0aW1lIG1lYW5zIHRoYXQgZXZlcnkgc3RhbXAgY29udGFpbnMgdGhlIHRpbWUgZnJvbSB0aGUKICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgoKCjQuOS4gICBVbnN5Y2hyb25pc2VkIGx5cmljcy90ZXh0IHRyYW5zY3JpcHRpb24KCiAgIFRoaXMgZnJhbWUgY29udGFpbnMgdGhlIGx5cmljcyBvZiB0aGUgc29uZyBvciBhIHRleHQgdHJhbnNjcmlwdGlvbiBvZgogICBvdGhlciB2b2NhbCBhY3Rpdml0aWVzLiBUaGUgaGVhZCBpbmNsdWRlcyBhbiBlbmNvZGluZyBkZXNjcmlwdG9yIGFuZAogICBhIGNvbnRlbnQgZGVzY3JpcHRvci4gVGhlIGJvZHkgY29uc2lzdHMgb2YgdGhlIGFjdHVhbCB0ZXh0LiBUaGUKICAgJ0NvbnRlbnQgZGVzY3JpcHRvcicgaXMgYSB0ZXJtaW5hdGVkIHN0cmluZy4gSWYgbm8gZGVzY3JpcHRvciBpcwogICBlbnRlcmVkLCAnQ29udGVudCBkZXNjcmlwdG9yJyBpcyAkMDAgKDAwKSBvbmx5LiBOZXdsaW5lIGNoYXJhY3RlcnMKICAgYXJlIGFsbG93ZWQgaW4gdGhlIHRleHQuIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lICdVbnN5bmNocm9uaXNlZAogICBseXJpY3MvdGV4dCB0cmFuc2NyaXB0aW9uJyBmcmFtZSBpbiBlYWNoIHRhZywgYnV0IG9ubHkgb25lIHdpdGggdGhlCiAgIHNhbWUgbGFuZ3VhZ2UgYW5kIGNvbnRlbnQgZGVzY3JpcHRvci4KCiAgICAgPEhlYWRlciBmb3IgJ1Vuc3luY2hyb25pc2VkIGx5cmljcy90ZXh0IHRyYW5zY3JpcHRpb24nLCBJRDogIlVTTFQiPgogICAgIFRleHQgZW5jb2RpbmcgICAgICAgICR4eAogICAgIExhbmd1YWdlICAgICAgICAgICAgICR4eCB4eCB4eAogICAgIENvbnRlbnQgZGVzY3JpcHRvciAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgTHlyaWNzL3RleHQgICAgICAgICAgPGZ1bGwgdGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPgoKCjQuMTAuICAgU3luY2hyb25pc2VkIGx5cmljcy90ZXh0CgogICBUaGlzIGlzIGFub3RoZXIgd2F5IG9mIGluY29ycG9yYXRpbmcgdGhlIHdvcmRzLCBzYWlkIG9yIHN1bmcgbHlyaWNzLAogICBpbiB0aGUgYXVkaW8gZmlsZSBhcyB0ZXh0LCB0aGlzIHRpbWUsIGhvd2V2ZXIsIGluIHN5bmMgd2l0aCB0aGUKICAgYXVkaW8uIEl0IG1pZ2h0IGFsc28gYmUgdXNlZCB0byBkZXNjcmliaW5nIGV2ZW50cyBlLmcuIG9jY3VycmluZyBvbiBhCiAgIHN0YWdlIG9yIG9uIHRoZSBzY3JlZW4gaW4gc3luYyB3aXRoIHRoZSBhdWRpby4gVGhlIGhlYWRlciBpbmNsdWRlcyBhCiAgIGNvbnRlbnQgZGVzY3JpcHRvciwgcmVwcmVzZW50ZWQgd2l0aCBhcyB0ZXJtaW5hdGVkIHRleHRzdHJpbmcuIElmIG5vCiAgIGRlc2NyaXB0b3IgaXMgZW50ZXJlZCwgJ0NvbnRlbnQgZGVzY3JpcHRvcicgaXMgJDAwICgwMCkgb25seS4KCiAgICAgPEhlYWRlciBmb3IgJ1N5bmNocm9uaXNlZCBseXJpY3MvdGV4dCcsIElEOiAiU1lMVCI+CiAgICAgVGV4dCBlbmNvZGluZyAgICAgICAgJHh4CiAgICAgTGFuZ3VhZ2UgICAgICAgICAgICAgJHh4IHh4IHh4CiAgICAgVGltZSBzdGFtcCBmb3JtYXQgICAgJHh4CiAgICAgQ29udGVudCB0eXBlICAgICAgICAgJHh4CiAgICAgQ29udGVudCBkZXNjcmlwdG9yICAgPHRleHQgc3RyaW5nIGFjY29yZGluZyB0byBlbmNvZGluZz4gJDAwICgwMCkKCgogICBFbmNvZGluZzogICAkMDAgIElTTy04ODU5LTEgW0lTTy04ODU5LTFdIGNoYXJhY3RlciBzZXQgaXMgdXNlZCA9PiAkMDAKICAgICAgICAgICAgICAgICAgICBpcyBzeW5jIGlkZW50aWZpZXIuCiAgICAgICAgICAgICAgICQwMSAgVW5pY29kZSBbVU5JQ09ERV0gY2hhcmFjdGVyIHNldCBpcyB1c2VkID0+ICQwMCAwMCBpcwogICAgICAgICAgICAgICAgICAgIHN5bmMgaWRlbnRpZmllci4KCiAgIENvbnRlbnQgdHlwZTogICAkMDAgaXMgb3RoZXIKICAgICAgICAgICAgICAgICAgICQwMSBpcyBseXJpY3MKICAgICAgICAgICAgICAgICAgICQwMiBpcyB0ZXh0IHRyYW5zY3JpcHRpb24KICAgICAgICAgICAgICAgICAgICQwMyBpcyBtb3ZlbWVudC9wYXJ0IG5hbWUgKGUuZy4gIkFkYWdpbyIpCiAgICAgICAgICAgICAgICAgICAkMDQgaXMgZXZlbnRzIChlLmcuICJEb24gUXVpam90ZSBlbnRlcnMgdGhlIHN0YWdlIikKICAgICAgICAgICAgICAgICAgICQwNSBpcyBjaG9yZCAoZS5nLiAiQmIgRiBGc3VzIikKICAgICAgICAgICAgICAgICAgICQwNiBpcyB0cml2aWEvJ3BvcCB1cCcgaW5mb3JtYXRpb24KCiAgIFRpbWUgc3RhbXAgZm9ybWF0IGlzOgoKICAgICAkMDEgIEFic29sdXRlIHRpbWUsIDMyIGJpdCBzaXplZCwgdXNpbmcgTVBFRyBbTVBFR10gZnJhbWVzIGFzIHVuaXQKICAgICAkMDIgIEFic29sdXRlIHRpbWUsIDMyIGJpdCBzaXplZCwgdXNpbmcgbWlsbGlzZWNvbmRzIGFzIHVuaXQKCiAgIEFib2x1dGUgdGltZSBtZWFucyB0aGF0IGV2ZXJ5IHN0YW1wIGNvbnRhaW5zIHRoZSB0aW1lIGZyb20gdGhlCiAgIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KCiAgIFRoZSB0ZXh0IHRoYXQgZm9sbG93cyB0aGUgZnJhbWUgaGVhZGVyIGRpZmZlcnMgZnJvbSB0aGF0IG9mIHRoZQogICB1bnN5bmNocm9uaXNlZCBseXJpY3MvdGV4dCB0cmFuc2NyaXB0aW9uIGluIG9uZSBtYWpvciB3YXkuIEVhY2gKICAgc3lsbGFibGUgKG9yIHdoYXRldmVyIHNpemUgb2YgdGV4dCBpcyBjb25zaWRlcmVkIHRvIGJlIGNvbnZlbmllbnQgYnkKICAgdGhlIGVuY29kZXIpIGlzIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmb2xsb3dlZCBieSBhIHRpbWUgc3RhbXAKICAgZGVub3Rpbmcgd2hlcmUgaW4gdGhlIHNvdW5kIGZpbGUgaXQgYmVsb25ncy4gRWFjaCBzeW5jIHRodXMgaGFzIHRoZQogICBmb2xsb3dpbmcgc3RydWN0dXJlOgoKICAgICBUZXJtaW5hdGVkIHRleHQgdG8gYmUgc3luY2VkICh0eXBpY2FsbHkgYSBzeWxsYWJsZSkKICAgICBTeW5jIGlkZW50aWZpZXIgKHRlcm1pbmF0b3IgdG8gYWJvdmUgc3RyaW5nKSAgICQwMCAoMDApCiAgICAgVGltZSBzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeHggKHh4IC4uLikKCiAgIFRoZSAndGltZSBzdGFtcCcgaXMgc2V0IHRvIHplcm8gb3IgdGhlIHdob2xlIHN5bmMgaXMgb21pdHRlZCBpZgogICBsb2NhdGVkIGRpcmVjdGx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNvdW5kLiBBbGwgdGltZSBzdGFtcHMKICAgc2hvdWxkIGJlIHNvcnRlZCBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLiBUaGUgc3luYyBjYW4gYmUgY29uc2lkZXJlZAogICBhcyBhIHZhbGlkYXRvciBvZiB0aGUgc3Vic2VxdWVudCBzdHJpbmcuCgogICBOZXdsaW5lICgkMEEpIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQgaW4gYWxsICJTWUxUIiBmcmFtZXMgYW5kIHNob3VsZAogICBiZSB1c2VkIGFmdGVyIGV2ZXJ5IGVudHJ5IChuYW1lLCBldmVudCBldGMuKSBpbiBhIGZyYW1lIHdpdGggdGhlCiAgIGNvbnRlbnQgdHlwZSAkMDMgLSAkMDQuCgogICBBIGZldyBjb25zaWRlcmF0aW9ucyByZWdhcmRpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzOiBXaGl0ZXNwYWNlCiAgIHNlcGFyYXRpbmcgd29yZHMgc2hvdWxkIG1hcmsgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyB3b3JkLCB0aHVzCiAgIG9jY3VycmluZyBpbiBmcm9udCBvZiB0aGUgZmlyc3Qgc3lsbGFibGUgb2YgYSBuZXcgd29yZC4gVGhpcyBpcyBhbHNvCiAgIHZhbGlkIGZvciBuZXcgbGluZSBjaGFyYWN0ZXJzLiBBIHN5bGxhYmxlIGZvbGxvd2VkIGJ5IGEgY29tbWEgc2hvdWxkCiAgIG5vdCBiZSBicm9rZW4gYXBhcnQgd2l0aCBhIHN5bmMgKGJvdGggdGhlIHN5bGxhYmxlIGFuZCB0aGUgY29tbWEKICAgc2hvdWxkIGJlIGJlZm9yZSB0aGUgc3luYykuCgogICBBbiBleGFtcGxlOiBUaGUgIlVTTFQiIHBhc3NhZ2UKCiAgICAgIlN0cmFuZ2VycyBpbiB0aGUgbmlnaHQiICQwQSAiRXhjaGFuZ2luZyBnbGFuY2VzIgoKICAgd291bGQgYmUgIlNZTFQiIGVuY29kZWQgYXM6CgogICAgICJTdHJhbmciICQwMCB4eCB4eCAiZXJzIiAkMDAgeHggeHggIiBpbiIgJDAwIHh4IHh4ICIgdGhlIiAkMDAgeHggeHgKICAgICAiIG5pZ2h0IiAkMDAgeHggeHggMEEgIkV4IiAkMDAgeHggeHggImNoYW5nIiAkMDAgeHggeHggImluZyIgJDAwIHh4CiAgICAgeHggImdsYW4iICQwMCB4eCB4eCAiY2VzIiAkMDAgeHggeHgKCiAgIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lICJTWUxUIiBmcmFtZSBpbiBlYWNoIHRhZywgYnV0IG9ubHkgb25lCiAgIHdpdGggdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kIGNvbnRlbnQgZGVzY3JpcHRvci4KCgo0LjExLiAgIENvbW1lbnRzCgogICBUaGlzIGZyYW1lIGlzIGluZGVuZGVkIGZvciBhbnkga2luZCBvZiBmdWxsIHRleHQgaW5mb3JtYXRpb24gdGhhdAogICBkb2VzIG5vdCBmaXQgaW4gYW55IG90aGVyIGZyYW1lLiBJdCBjb25zaXN0cyBvZiBhIGZyYW1lIGhlYWRlcgogICBmb2xsb3dlZCBieSBlbmNvZGluZywgbGFuZ3VhZ2UgYW5kIGNvbnRlbnQgZGVzY3JpcHRvcnMgYW5kIGlzIGVuZGVkCiAgIHdpdGggdGhlIGFjdHVhbCBjb21tZW50IGFzIGEgdGV4dCBzdHJpbmcuIE5ld2xpbmUgY2hhcmFjdGVycyBhcmUKICAgYWxsb3dlZCBpbiB0aGUgY29tbWVudCB0ZXh0IHN0cmluZy4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUKICAgY29tbWVudCBmcmFtZSBpbiBlYWNoIHRhZywgYnV0IG9ubHkgb25lIHdpdGggdGhlIHNhbWUgbGFuZ3VhZ2UgYW5kCiAgIGNvbnRlbnQgZGVzY3JpcHRvci4KCiAgICAgPEhlYWRlciBmb3IgJ0NvbW1lbnQnLCBJRDogIkNPTU0iPgogICAgIFRleHQgZW5jb2RpbmcgICAgICAgICAgJHh4CiAgICAgTGFuZ3VhZ2UgICAgICAgICAgICAgICAkeHggeHggeHgKICAgICBTaG9ydCBjb250ZW50IGRlc2NyaXAuIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgVGhlIGFjdHVhbCB0ZXh0ICAgICAgICA8ZnVsbCB0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+CgoKNC4xMi4gICBSZWxhdGl2ZSB2b2x1bWUgYWRqdXN0bWVudAoKICAgVGhpcyBpcyBhIG1vcmUgc3ViamVjdGl2ZSBmdW5jdGlvbiB0aGFuIHRoZSBwcmV2aW91cyBvbmVzLiBJdCBhbGxvd3MKICAgdGhlIHVzZXIgdG8gc2F5IGhvdyBtdWNoIGhlIHdhbnRzIHRvIGluY3JlYXNlL2RlY3JlYXNlIHRoZSB2b2x1bWUgb24KICAgZWFjaCBjaGFubmVsIHdoaWxlIHRoZSBmaWxlIGlzIHBsYXllZC4gVGhlIHB1cnBvc2UgaXMgdG8gYmUgYWJsZSB0bwogICBhbGlnbiBhbGwgZmlsZXMgdG8gYSByZWZlcmVuY2Ugdm9sdW1lLCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvCiAgIGNoYW5nZSB0aGUgdm9sdW1lIGNvbnN0YW50bHkuIFRoaXMgZnJhbWUgbWF5IGFsc28gYmUgdXNlZCB0byBiYWxhbmNlCiAgIGFkanVzdCB0aGUgYXVkaW8uIElmIHRoZSB2b2x1bWUgcGVhayBsZXZlbHMgYXJlIGtub3duIHRoZW4gdGhpcyBjb3VsZAogICBiZSBkZXNjcmliZWQgd2l0aCB0aGUgJ1BlYWsgdm9sdW1lIHJpZ2h0JyBhbmQgJ1BlYWsgdm9sdW1lIGxlZnQnCiAgIGZpZWxkLiBJZiBQZWFrdm9sdW1lIGlzIG5vdCBrbm93biB0aGVzZSBmaWVsZHMgY291bGQgYmUgbGVmdCB6ZXJvZWQKICAgb3IsIGlmIG5vIG90aGVyIGRhdGEgZm9sbG93cywgYmUgY29tcGxldGVseSBvbWl0dGVkLiBUaGVyZSBtYXkgb25seQogICBiZSBvbmUgIlJWQUQiIGZyYW1lIGluIGVhY2ggdGFnLgoKICAgICA8SGVhZGVyIGZvciAnUmVsYXRpdmUgdm9sdW1lIGFkanVzdG1lbnQnLCBJRDogIlJWQUQiPgogICAgIEluY3JlbWVudC9kZWNyZW1lbnQgICAgICAgICAgICUwMHh4eHh4eAogICAgIEJpdHMgdXNlZCBmb3Igdm9sdW1lIGRlc2NyLiAgICR4eAogICAgIFJlbGF0aXZlIHZvbHVtZSBjaGFuZ2UsIHJpZ2h0ICR4eCB4eCAoeHggLi4uKQogICAgIFJlbGF0aXZlIHZvbHVtZSBjaGFuZ2UsIGxlZnQgICR4eCB4eCAoeHggLi4uKQogICAgIFBlYWsgdm9sdW1lIHJpZ2h0ICAgICAgICAgICAgICR4eCB4eCAoeHggLi4uKQogICAgIFBlYWsgdm9sdW1lIGxlZnQgICAgICAgICAgICAgICR4eCB4eCAoeHggLi4uKQoKICAgSW4gdGhlIGluY3JlbWVudC9kZWNyZW1lbnQgZmllbGQgYml0IDAgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgcmlnaHQKICAgY2hhbm5lbCBhbmQgYml0IDEgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgbGVmdCBjaGFubmVsLiAxIGlzCiAgIGluY3JlbWVudCBhbmQgMCBpcyBkZWNyZW1lbnQuCgogICBUaGUgJ2JpdHMgdXNlZCBmb3Igdm9sdW1lIGRlc2NyaXB0aW9uJyBmaWVsZCBpcyBub3JtYWxseSAkMTAgKDE2CiAgIGJpdHMpIGZvciBNUEVHIDIgbGF5ZXIgSSwgSUkgYW5kIElJSSBbTVBFR10gYW5kIE1QRUcgMi41LiBUaGlzIHZhbHVlCiAgIG1heSBub3QgYmUgJDAwLiBUaGUgdm9sdW1lIGlzIGFsd2F5cyByZXByZXNlbnRlZCB3aXRoIHdob2xlIGJ5dGVzLAogICBwYWRkZWQgaW4gdGhlIGJlZ2lubmluZyAoaGlnaGVzdCBiaXRzKSB3aGVuICdiaXRzIHVzZWQgZm9yIHZvbHVtZQogICBkZXNjcmlwdGlvbicgaXMgbm90IGEgbXVsdGlwbGUgb2YgZWlnaHQuCgogICBUaGlzIGRhdGFibG9jayBpcyB0aGVuIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSB2b2x1bWUgZGVmaW5pdGlvbiBmb3IKICAgdGhlIGxlZnQgYW5kIHJpZ2h0IGJhY2sgY2hhbm5lbHMuIElmIHRoaXMgaW5mb3JtYXRpb24gaXMgYXBwZW5kZWQgdG8KICAgdGhlIGZyYW1lIHRoZSBmaXJzdCB0d28gY2hhbm5lbHMgd2lsbCBiZSB0cmVhdGVkIGFzIGZyb250IGNoYW5uZWxzLgogICBJbiB0aGUgaW5jcmVtZW50L2RlY3JlbWVudCBmaWVsZCBiaXQgMiBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSByaWdodAogICBiYWNrIGNoYW5uZWwgYW5kIGJpdCAzIGZvciB0aGUgbGVmdCBiYWNrIGNoYW5uZWwuCgogICAgIFJlbGF0aXZlIHZvbHVtZSBjaGFuZ2UsIHJpZ2h0IGJhY2sgJHh4IHh4ICh4eCAuLi4pCiAgICAgUmVsYXRpdmUgdm9sdW1lIGNoYW5nZSwgbGVmdCBiYWNrICAkeHggeHggKHh4IC4uLikKICAgICBQZWFrIHZvbHVtZSByaWdodCBiYWNrICAgICAgICAgICAgICR4eCB4eCAoeHggLi4uKQogICAgIFBlYWsgdm9sdW1lIGxlZnQgYmFjayAgICAgICAgICAgICAgJHh4IHh4ICh4eCAuLi4pCgogICBJZiB0aGUgY2VudGVyIGNoYW5uZWwgYWRqdXN0bWVudCBpcyBwcmVzZW50IHRoZSBmb2xsb3dpbmcgaXMgYXBwZW5kZWQKICAgdG8gdGhlIGV4aXN0aW5nIGZyYW1lLCBhZnRlciB0aGUgbGVmdCBhbmQgcmlnaHQgYmFjayBjaGFubmVscy4gVGhlCiAgIGNlbnRlciBjaGFubmVsIGlzIHJlcHJlc2VudGVkIGJ5IGJpdCA0IGluIHRoZSBpbmNyZWFzZS9kZWNyZWFzZQogICBmaWVsZC4KCiAgICAgUmVsYXRpdmUgdm9sdW1lIGNoYW5nZSwgY2VudGVyICAkeHggeHggKHh4IC4uLikKICAgICBQZWFrIHZvbHVtZSBjZW50ZXIgICAgICAgICAgICAgICR4eCB4eCAoeHggLi4uKQoKICAgSWYgdGhlIGJhc3MgY2hhbm5lbCBhZGp1c3RtZW50IGlzIHByZXNlbnQgdGhlIGZvbGxvd2luZyBpcyBhcHBlbmRlZAogICB0byB0aGUgZXhpc3RpbmcgZnJhbWUsIGFmdGVyIHRoZSBjZW50ZXIgY2hhbm5lbC4gVGhlIGJhc3MgY2hhbm5lbCBpcwogICByZXByZXNlbnRlZCBieSBiaXQgNSBpbiB0aGUgaW5jcmVhc2UvZGVjcmVhc2UgZmllbGQuCgogICAgIFJlbGF0aXZlIHZvbHVtZSBjaGFuZ2UsIGJhc3MgICR4eCB4eCAoeHggLi4uKQogICAgIFBlYWsgdm9sdW1lIGJhc3MgICAgICAgICAgICAgICR4eCB4eCAoeHggLi4uKQoKCjQuMTMuICAgRXF1YWxpc2F0aW9uCgogICBUaGlzIGlzIGFub3RoZXIgc3ViamVjdGl2ZSwgYWxpZ25tZW50IGZyYW1lLiBJdCBhbGxvd3MgdGhlIHVzZXIgdG8KICAgcHJlZGVmaW5lIGFuIGVxdWFsaXNhdGlvbiBjdXJ2ZSB3aXRoaW4gdGhlIGF1ZGlvIGZpbGUuIFRoZXJlIG1heSBvbmx5CiAgIGJlIG9uZSAiRVFVQSIgZnJhbWUgaW4gZWFjaCB0YWcuCgogICAgIDxIZWFkZXIgb2YgJ0VxdWFsaXNhdGlvbicsIElEOiAiRVFVQSI+CiAgICAgQWRqdXN0bWVudCBiaXRzICAgICR4eAoKICAgVGhlICdhZGp1c3RtZW50IGJpdHMnIGZpZWxkIGRlZmluZXMgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgZm9yCiAgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhZGp1c3RtZW50LiBUaGlzIGlzIG5vcm1hbGx5ICQxMCAoMTYgYml0cykgZm9yCiAgIE1QRUcgMiBsYXllciBJLCBJSSBhbmQgSUlJIFtNUEVHXSBhbmQgTVBFRyAyLjUuIFRoaXMgdmFsdWUgbWF5IG5vdCBiZQogICAkMDAuCgogICBUaGlzIGlzIGZvbGxvd2VkIGJ5IDIgYnl0ZXMgKyAoJ2FkanVzdG1lbnQgYml0cycgcm91bmRlZCB1cCB0byB0aGUKICAgbmVhcmVzdCBieXRlKSBmb3IgZXZlcnkgZXF1YWxpc2F0aW9uIGJhbmQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQsCiAgIGdpdmluZyBhIGZyZXF1ZW5jeSByYW5nZSBvZiAwIC0gMzI3NjdIejoKCiAgICAgSW5jcmVtZW50L2RlY3JlbWVudCAgICV4IChNU0Igb2YgdGhlIEZyZXF1ZW5jeSkKICAgICBGcmVxdWVuY3kgICAgICAgICAgICAgKGxvd2VyIDE1IGJpdHMpCiAgICAgQWRqdXN0bWVudCAgICAgICAgICAgICR4eCAoeHggLi4uKQoKICAgVGhlIGluY3JlbWVudC9kZWNyZW1lbnQgYml0IGlzIDEgZm9yIGluY3JlbWVudCBhbmQgMCBmb3IgZGVjcmVtZW50LgogICBUaGUgZXF1YWxpc2F0aW9uIGJhbmRzIHNob3VsZCBiZSBvcmRlcmVkIGluY3JlYXNpbmdseSB3aXRoIHJlZmVyZW5jZQogICB0byBmcmVxdWVuY3kuIEFsbCBmcmVxdWVuY2llcyBkb24ndCBoYXZlIHRvIGJlIGRlY2xhcmVkLiBUaGUKICAgZXF1YWxpc2F0aW9uIGN1cnZlIGluIHRoZSByZWFkaW5nIHNvZnR3YXJlIHNob3VsZCBiZSBpbnRlcnBvbGF0ZWQKICAgYmV0d2VlbiB0aGUgdmFsdWVzIGluIHRoaXMgZnJhbWUuIFRocmVlIGVxdWFsIGFkanVzdG1lbnRzIGZvciB0aHJlZQogICBzdWJzZXF1ZW50IGZyZXF1ZW5jaWVzLiBBIGZyZXF1ZW5jeSBzaG91bGQgb25seSBiZSBkZXNjcmliZWQgb25jZSBpbgogICB0aGUgZnJhbWUuCgoKNC4xNC4gICBSZXZlcmIKCiAgIFlldCBhbm90aGVyIHN1YmplY3RpdmUgb25lLiBZb3UgbWF5IGhlcmUgYWRqdXN0IGVjaG9lcyBvZiBkaWZmZXJlbnQKICAga2luZHMuIFJldmVyYiBsZWZ0L3JpZ2h0IGlzIHRoZSBkZWxheSBiZXR3ZWVuIGV2ZXJ5IGJvdW5jZSBpbiBtcy4KICAgUmV2ZXJiIGJvdW5jZXMgbGVmdC9yaWdodCBpcyB0aGUgbnVtYmVyIG9mIGJvdW5jZXMgdGhhdCBzaG91bGQgYmUKICAgbWFkZS4gJEZGIGVxdWFscyBhbiBpbmZpbml0ZSBudW1iZXIgb2YgYm91bmNlcy4gRmVlZGJhY2sgaXMgdGhlCiAgIGFtb3VudCBvZiB2b2x1bWUgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgdG8gdGhlIG5leHQgZWNobyBib3VuY2UuICQwMAogICBpcyAwJSwgJEZGIGlzIDEwMCUuIElmIHRoaXMgdmFsdWUgd2VyZSAkN0YsIHRoZXJlIHdvdWxkIGJlIDUwJSB2b2x1bWUKICAgcmVkdWN0aW9uIG9uIHRoZSBmaXJzdCBib3VuY2UsIDUwJSBvZiB0aGF0IG9uIHRoZSBzZWNvbmQgYW5kIHNvIG9uLgogICBMZWZ0IHRvIGxlZnQgbWVhbnMgdGhlIHNvdW5kIGZyb20gdGhlIGxlZnQgYm91bmNlIHRvIGJlIHBsYXllZCBpbiB0aGUKICAgbGVmdCBzcGVha2VyLCB3aGlsZSBsZWZ0IHRvIHJpZ2h0IG1lYW5zIHNvdW5kIGZyb20gdGhlIGxlZnQgYm91bmNlIHRvCiAgIGJlIHBsYXllZCBpbiB0aGUgcmlnaHQgc3BlYWtlci4KCiAgICdQcmVtaXggbGVmdCB0byByaWdodCcgaXMgdGhlIGFtb3VudCBvZiBsZWZ0IHNvdW5kIHRvIGJlIG1peGVkIGluIHRoZQogICByaWdodCBiZWZvcmUgYW55IHJldmVyYiBpcyBhcHBsaWVkLCB3aGVyZSAkMDAgaWQgMCUgYW5kICRGRiBpcyAxMDAlLgogICAnUHJlbWl4IHJpZ2h0IHRvIGxlZnQnIGRvZXMgdGhlIHNhbWUgdGhpbmcsIGJ1dCByaWdodCB0byBsZWZ0LgogICBTZXR0aW5nIGJvdGggcHJlbWl4IHRvICRGRiB3b3VsZCByZXN1bHQgaW4gYSBtb25vIG91dHB1dCAoaWYgdGhlCiAgIHJldmVyYiBpcyBhcHBsaWVkIHN5bW1ldHJpYykuIFRoZXJlIG1heSBvbmx5IGJlIG9uZSAiUlZSQiIgZnJhbWUgaW4KICAgZWFjaCB0YWcuCgogICAgIDxIZWFkZXIgZm9yICdSZXZlcmInLCBJRDogIlJWUkIiPgogICAgIFJldmVyYiBsZWZ0IChtcykgICAgICAgICAgICAgICAgICR4eCB4eAogICAgIFJldmVyYiByaWdodCAobXMpICAgICAgICAgICAgICAgICR4eCB4eAogICAgIFJldmVyYiBib3VuY2VzLCBsZWZ0ICAgICAgICAgICAgICR4eAogICAgIFJldmVyYiBib3VuY2VzLCByaWdodCAgICAgICAgICAgICR4eAogICAgIFJldmVyYiBmZWVkYmFjaywgbGVmdCB0byBsZWZ0ICAgICR4eAogICAgIFJldmVyYiBmZWVkYmFjaywgbGVmdCB0byByaWdodCAgICR4eAogICAgIFJldmVyYiBmZWVkYmFjaywgcmlnaHQgdG8gcmlnaHQgICR4eAogICAgIFJldmVyYiBmZWVkYmFjaywgcmlnaHQgdG8gbGVmdCAgICR4eAogICAgIFByZW1peCBsZWZ0IHRvIHJpZ2h0ICAgICAgICAgICAgICR4eAogICAgIFByZW1peCByaWdodCB0byBsZWZ0ICAgICAgICAgICAgICR4eAoKCjQuMTUuICAgQXR0YWNoZWQgcGljdHVyZQoKICAgVGhpcyBmcmFtZSBjb250YWlucyBhIHBpY3R1cmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYXVkaW8gZmlsZS4KICAgSW1hZ2UgZm9ybWF0IGlzIHRoZSBNSU1FIHR5cGUgYW5kIHN1YnR5cGUgW01JTUVdIGZvciB0aGUgaW1hZ2UuIEluCiAgIHRoZSBldmVudCB0aGF0IHRoZSBNSU1FIG1lZGlhIHR5cGUgbmFtZSBpcyBvbWl0dGVkLCAiaW1hZ2UvIiB3aWxsIGJlCiAgIGltcGxpZWQuIFRoZSAiaW1hZ2UvcG5nIiBbUE5HXSBvciAiaW1hZ2UvanBlZyIgW0pGSUZdIHBpY3R1cmUgZm9ybWF0CiAgIHNob3VsZCBiZSB1c2VkIHdoZW4gaW50ZXJvcGVyYWJpbGl0eSBpcyB3YW50ZWQuIERlc2NyaXB0aW9uIGlzIGEKICAgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHBpY3R1cmUsIHJlcHJlc2VudGVkIGFzIGEgdGVybWluYXRlZAogICB0ZXh0c3RyaW5nLiBUaGUgZGVzY3JpcHRpb24gaGFzIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycywKICAgYnV0IG1heSBiZSBlbXB0eS4gVGhlcmUgbWF5IGJlIHNldmVyYWwgcGljdHVyZXMgYXR0YWNoZWQgdG8gb25lIGZpbGUsCiAgIGVhY2ggaW4gdGhlaXIgaW5kaXZpZHVhbCAiQVBJQyIgZnJhbWUsIGJ1dCBvbmx5IG9uZSB3aXRoIHRoZSBzYW1lCiAgIGNvbnRlbnQgZGVzY3JpcHRvci4gVGhlcmUgbWF5IG9ubHkgYmUgb25lIHBpY3R1cmUgd2l0aCB0aGUgcGljdHVyZQogICB0eXBlIGRlY2xhcmVkIGFzIHBpY3R1cmUgdHlwZSAkMDEgYW5kICQwMiByZXNwZWN0aXZlbHkuIFRoZXJlIGlzIHRoZQogICBwb3NzaWJpbGl0eSB0byBwdXQgb25seSBhIGxpbmsgdG8gdGhlIGltYWdlIGZpbGUgYnkgdXNpbmcgdGhlICdNSU1FCiAgIHR5cGUnICItLT4iIGFuZCBoYXZpbmcgYSBjb21wbGV0ZSBVUkwgW1VSTF0gaW5zdGVhZCBvZiBwaWN0dXJlIGRhdGEuCiAgIFRoZSB1c2Ugb2YgbGlua2VkIGZpbGVzIHNob3VsZCBob3dldmVyIGJlIHVzZWQgc3BhcmluZ2x5IHNpbmNlIHRoZXJlCiAgIGlzIHRoZSByaXNrIG9mIHNlcGFyYXRpb24gb2YgZmlsZXMuCgogICAgIDxIZWFkZXIgZm9yICdBdHRhY2hlZCBwaWN0dXJlJywgSUQ6ICJBUElDIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAgJHh4CiAgICAgTUlNRSB0eXBlICAgICAgICAgIDx0ZXh0IHN0cmluZz4gJDAwCiAgICAgUGljdHVyZSB0eXBlICAgICAgICR4eAogICAgIERlc2NyaXB0aW9uICAgICAgICA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPiAkMDAgKDAwKQogICAgIFBpY3R1cmUgZGF0YSAgICAgICA8YmluYXJ5IGRhdGE+CgoKICAgUGljdHVyZSB0eXBlOiAgJDAwICBPdGhlcgogICAgICAgICAgICAgICAgICAkMDEgIDMyeDMyIHBpeGVscyAnZmlsZSBpY29uJyAoUE5HIG9ubHkpCiAgICAgICAgICAgICAgICAgICQwMiAgT3RoZXIgZmlsZSBpY29uCiAgICAgICAgICAgICAgICAgICQwMyAgQ292ZXIgKGZyb250KQogICAgICAgICAgICAgICAgICAkMDQgIENvdmVyIChiYWNrKQogICAgICAgICAgICAgICAgICAkMDUgIExlYWZsZXQgcGFnZQogICAgICAgICAgICAgICAgICAkMDYgIE1lZGlhIChlLmcuIGxhYmxlIHNpZGUgb2YgQ0QpCiAgICAgICAgICAgICAgICAgICQwNyAgTGVhZCBhcnRpc3QvbGVhZCBwZXJmb3JtZXIvc29sb2lzdAogICAgICAgICAgICAgICAgICAkMDggIEFydGlzdC9wZXJmb3JtZXIKICAgICAgICAgICAgICAgICAgJDA5ICBDb25kdWN0b3IKICAgICAgICAgICAgICAgICAgJDBBICBCYW5kL09yY2hlc3RyYQogICAgICAgICAgICAgICAgICAkMEIgIENvbXBvc2VyCiAgICAgICAgICAgICAgICAgICQwQyAgTHlyaWNpc3QvdGV4dCB3cml0ZXIKICAgICAgICAgICAgICAgICAgJDBEICBSZWNvcmRpbmcgTG9jYXRpb24KICAgICAgICAgICAgICAgICAgJDBFICBEdXJpbmcgcmVjb3JkaW5nCiAgICAgICAgICAgICAgICAgICQwRiAgRHVyaW5nIHBlcmZvcm1hbmNlCiAgICAgICAgICAgICAgICAgICQxMCAgTW92aWUvdmlkZW8gc2NyZWVuIGNhcHR1cmUKICAgICAgICAgICAgICAgICAgJDExICBBIGJyaWdodCBjb2xvdXJlZCBmaXNoCiAgICAgICAgICAgICAgICAgICQxMiAgSWxsdXN0cmF0aW9uCiAgICAgICAgICAgICAgICAgICQxMyAgQmFuZC9hcnRpc3QgbG9nb3R5cGUKICAgICAgICAgICAgICAgICAgJDE0ICBQdWJsaXNoZXIvU3R1ZGlvIGxvZ290eXBlCgoKNC4xNi4gICBHZW5lcmFsIGVuY2Fwc3VsYXRlZCBvYmplY3QKCiAgIEluIHRoaXMgZnJhbWUgYW55IHR5cGUgb2YgZmlsZSBjYW4gYmUgZW5jYXBzdWxhdGVkLiBBZnRlciB0aGUgaGVhZGVyLAogICAnRnJhbWUgc2l6ZScgYW5kICdFbmNvZGluZycgZm9sbG93cyAnTUlNRSB0eXBlJyBbTUlNRV0gcmVwcmVzZW50ZWQgYXMKICAgYXMgYSB0ZXJtaW5hdGVkIHN0cmluZyBlbmNvZGVkIHdpdGggSVNPIDg4NTktMSBbSVNPLTg4NTktMV0uIFRoZQogICBmaWxlbmFtZSBpcyBjYXNlIHNlbnNpdGl2ZSBhbmQgaXMgZW5jb2RlZCBhcyAnRW5jb2RpbmcnLiBUaGVuIGZvbGxvd3MKICAgYSBjb250ZW50IGRlc2NyaXB0aW9uIGFzIHRlcm1pbmF0ZWQgc3RyaW5nLCBlbmNvZGVkIGFzICdFbmNvZGluZycuCiAgIFRoZSBsYXN0IHRoaW5nIGluIHRoZSBmcmFtZSBpcyB0aGUgYWN0dWFsIG9iamVjdC4gVGhlIGZpcnN0IHR3bwogICBzdHJpbmdzIG1heSBiZSBvbWl0dGVkLCBsZWF2aW5nIG9ubHkgdGhlaXIgdGVybWluYXRpb25zLiBNSU1FIHR5cGUgaXMKICAgYWx3YXlzIGFuIElTTy04ODU5LTEgdGV4dCBzdHJpbmcuIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lICJHRU9CIgogICBmcmFtZSBpbiBlYWNoIHRhZywgYnV0IG9ubHkgb25lIHdpdGggdGhlIHNhbWUgY29udGVudCBkZXNjcmlwdG9yLgoKICAgICA8SGVhZGVyIGZvciAnR2VuZXJhbCBlbmNhcHN1bGF0ZWQgb2JqZWN0JywgSUQ6ICJHRU9CIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAgICAgICR4eAogICAgIE1JTUUgdHlwZSAgICAgICAgICAgICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBGaWxlbmFtZSAgICAgICAgICAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgQ29udGVudCBkZXNjcmlwdGlvbiAgICA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY/NkaW5nPiAkMDAgKDAwKQogICAgIEVuY2Fwc3VsYXRlZCBvYmplY3QgICAgPGJpbmFyeSBkYXRhPgoKCjQuMTcuICAgUGxheSBjb3VudGVyCgogICBUaGlzIGlzIHNpbXBseSBhIGNvdW50ZXIgb2YgdGhlIG51bWJlciBvZiB0aW1lcyBhIGZpbGUgaGFzIGJlZW4KICAgcGxheWVkLiBUaGUgdmFsdWUgaXMgaW5jcmVhc2VkIGJ5IG9uZSBldmVyeSB0aW1lIHRoZSBmaWxlIGJlZ2lucyB0bwogICBwbGF5LiBUaGVyZSBtYXkgb25seSBiZSBvbmUgIlBDTlQiIGZyYW1lIGluIGVhY2ggdGFnLiBXaGVuIHRoZQogICBjb3VudGVyIHJlYWNoZXMgYWxsIG9uZSdzLCBvbmUgYnl0ZSBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUKICAgY291bnRlciB0aHVzIG1ha2luZyB0aGUgY291bnRlciBlaWdodCBiaXRzIGJpZ2dlci4gIFRoZSBjb3VudGVyIG11c3QKICAgYmUgYXQgbGVhc3QgMzItYml0cyBsb25nIHRvIGJlZ2luIHdpdGguCgogICAgIDxIZWFkZXIgZm9yICdQbGF5IGNvdW50ZXInLCBJRDogIlBDTlQiPgogICAgIENvdW50ZXIgICAgICAgICR4eCB4eCB4eCB4eCAoeHggLi4uKQoKCjQuMTguICAgUG9wdWxhcmltZXRlcgoKICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBmcmFtZSBpcyB0byBzcGVjaWZ5IGhvdyBnb29kIGFuIGF1ZGlvIGZpbGUgaXMuCiAgIE1hbnkgaW50ZXJlc3RpbmcgYXBwbGljYXRpb25zIGNvdWxkIGJlIGZvdW5kIHRvIHRoaXMgZnJhbWUgc3VjaCBhcyBhCiAgIHBsYXlsaXN0IHRoYXQgZmVhdHVyZXMgYmV0dGVyIGF1ZGlvZmlsZXMgbW9yZSBvZnRlbiB0aGFuIG90aGVycyBvciBpdAogICBjb3VsZCBiZSB1c2VkIHRvIHByb2ZpbGUgYSBwZXJzb24ncyB0YXN0ZSBhbmQgZmluZCBvdGhlciAnZ29vZCcgZmlsZXMKICAgYnkgY29tcGFyaW5nIHBlb3BsZSdzIHByb2ZpbGVzLiBUaGUgZnJhbWUgaXMgdmVyeSBzaW1wbGUuIEl0IGNvbnRhaW5zCiAgIHRoZSBlbWFpbCBhZGRyZXNzIHRvIHRoZSB1c2VyLCBvbmUgcmF0aW5nIGJ5dGUgYW5kIGEgZm91ciBieXRlIHBsYXkKICAgY291bnRlciwgaW50ZW5kZWQgdG8gYmUgaW5jcmVhc2VkIHdpdGggb25lIGZvciBldmVyeSB0aW1lIHRoZSBmaWxlIGlzCiAgIHBsYXllZC4gVGhlIGVtYWlsIGlzIGEgdGVybWluYXRlZCBzdHJpbmcuIFRoZSByYXRpbmcgaXMgMS0yNTUgd2hlcmUKICAgMSBpcyB3b3JzdCBhbmQgMjU1IGlzIGJlc3QuIDAgaXMgdW5rbm93bi4gSWYgbm8gcGVyc29uYWwgY291bnRlciBpcwogICB3YW50ZWQgaXQgbWF5IGJlIG9taXR0ZWQuICBXaGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgYWxsIG9uZSdzLCBvbmUKICAgYnl0ZSBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY291bnRlciB0aHVzIG1ha2luZyB0aGUgY291bnRlcgogICBlaWdodCBiaXRzIGJpZ2dlciBpbiB0aGUgc2FtZSBhd2F5IGFzIHRoZSBwbGF5IGNvdW50ZXIgKCJQQ05UIikuCiAgIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lICJQT1BNIiBmcmFtZSBpbiBlYWNoIHRhZywgYnV0IG9ubHkgb25lCiAgIHdpdGggdGhlIHNhbWUgZW1haWwgYWRkcmVzcy4KCiAgICAgPEhlYWRlciBmb3IgJ1BvcHVsYXJpbWV0ZXInLCBJRDogIlBPUE0iPgogICAgIEVtYWlsIHRvIHVzZXIgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIFJhdGluZyAgICAgICAgICAkeHgKICAgICBDb3VudGVyICAgICAgICAgJHh4IHh4IHh4IHh4ICh4eCAuLi4pCgoKNC4xOS4gICBSZWNvbW1lbmRlZCBidWZmZXIgc2l6ZQoKICAgU29tZXRpbWVzIHRoZSBzZXJ2ZXIgZnJvbSB3aGljaCBhIGF1ZGlvIGZpbGUgaXMgc3RyZWFtZWQgaXMgYXdhcmUgb2YKICAgdHJhbnNtaXNzaW9uIG9yIGNvZGluZyBwcm9ibGVtcyByZXN1bHRpbmcgaW4gaW50ZXJydXB0aW9ucyBpbiB0aGUKICAgYXVkaW8gc3RyZWFtLiBJbiB0aGVzZSBjYXNlcywgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBjYW4gYmUKICAgcmVjb21tZW5kZWQgYnkgdGhlIHNlcnZlciB1c2luZyB0aGlzIGZyYW1lLiBJZiB0aGUgJ2VtYmVkZGVkIGluZm8KICAgZmxhZycgaXMgdHJ1ZSAoMSkgdGhlbiB0aGlzIGluZGljYXRlcyB0aGF0IGFuIElEMyB0YWcgd2l0aCB0aGUKICAgbWF4aW11bSBzaXplIGRlc2NyaWJlZCBpbiAnQnVmZmVyIHNpemUnIG1heSBvY2N1ciBpbiB0aGUgYXVkaW9zdHJlYW0uCiAgIEluIHN1Y2ggY2FzZSB0aGUgdGFnIHNob3VsZCByZXNpZGUgYmV0d2VlbiB0d28gTVBFRyBbTVBFR10gZnJhbWVzLCBpZgogICB0aGUgYXVkaW8gaXMgTVBFRyBlbmNvZGVkLiBJZiB0aGUgcG9zaXRpb24gb2YgdGhlIG5leHQgdGFnIGlzIGtub3duLAogICAnb2Zmc2V0IHRvIG5leHQgdGFnJyBtYXkgYmUgdXNlZC4gVGhlIG9mZnNldCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlCiAgIGVuZCBvZiB0YWcgaW4gd2hpY2ggdGhpcyBmcmFtZSByZXNpZGVzIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZQogICBoZWFkZXIgaW4gdGhlIG5leHQuIFRoaXMgZmllbGQgbWF5IGJlIG9taXR0ZWQuIEVtYmVkZGVkIHRhZ3MgYXJlCiAgIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQgc2luY2UgdGhpcyBjb3VsZCByZW5kZXIgdW5wcmVkaWN0YWJsZQogICBiZWhhdmlvdXIgZnJvbSBwcmVzZW50IHNvZnR3YXJlL2hhcmR3YXJlLgoKICAgRm9yIGFwcGxpY2F0aW9ucyBsaWtlIHN0cmVhbWluZyBhdWRpbyBpdCBtaWdodCBiZSBhbiBpZGVhIHRvIGVtYmVkCiAgIHRhZ3MgaW50byB0aGUgYXVkaW8gc3RyZWFtIHRob3VnaC4gSWYgdGhlIGNsaWVudHMgY29ubmVjdHMgdG8KICAgaW5kaXZpZHVhbCBjb25uZWN0aW9ucyBsaWtlIEhUVFAgYW5kIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdG8gYmVnaW4KICAgZXZlcnkgdHJhbnNtaXNzaW9uIHdpdGggYSB0YWcsIHRoZW4gdGhpcyB0YWcgc2hvdWxkIGluY2x1ZGUgYQogICAncmVjb21tZW5kZWQgYnVmZmVyIHNpemUnIGZyYW1lLiBJZiB0aGUgY2xpZW50IGlzIGNvbm5lY3RlZCB0byBhCiAgIGFyYml0cmFyeSBwb2ludCBpbiB0aGUgc3RyZWFtLCBzdWNoIGFzIHJhZGlvIG9yIG11bHRpY2FzdCwgdGhlbiB0aGUKICAgJ3JlY29tbWVuZGVkIGJ1ZmZlciBzaXplJyBmcmFtZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gZXZlcnkgdGFnLgogICBFdmVyeSB0YWcgdGhhdCBpcyBwaWNrZWQgdXAgYWZ0ZXIgdGhlIGluaXRpYWwvZmlyc3QgdGFnIGlzIHRvIGJlCiAgIGNvbnNpZGVyZWQgYXMgYW4gdXBkYXRlIG9mIHRoZSBwcmV2aW91cyBvbmUuIEUuZy4gaWYgdGhlcmUgaXMgYQogICAiVElUMiIgZnJhbWUgaW4gdGhlIGZpcnN0IHJlY2VpdmVkIHRhZyBhbmQgb25lIGluIHRoZSBzZWNvbmQgdGFnLAogICB0aGVuIHRoZSBmaXJzdCBzaG91bGQgYmUgJ3JlcGxhY2VkJyB3aXRoIHRoZSBzZWNvbmQuCgogICBUaGUgJ0J1ZmZlciBzaXplJyBzaG91bGQgYmUga2VwdCB0byBhIG1pbmltdW0uIFRoZXJlIG1heSBvbmx5IGJlIG9uZQogICAiUkJVRiIgZnJhbWUgaW4gZWFjaCB0YWcuCgogICAgIDxIZWFkZXIgZm9yICdSZWNvbW1lbmRlZCBidWZmZXIgc2l6ZScsIElEOiAiUkJVRiI+CiAgICAgQnVmZmVyIHNpemUgICAgICAgICAgICAgICAkeHggeHggeHgKICAgICBFbWJlZGRlZCBpbmZvIGZsYWcgICAgICAgICUwMDAwMDAweAogICAgIE9mZnNldCB0byBuZXh0IHRhZyAgICAgICAgJHh4IHh4IHh4IHh4CgoKNC4yMC4gICBBdWRpbyBlbmNyeXB0aW9uCgogICBUaGlzIGZyYW1lIGluZGljYXRlcyBpZiB0aGUgYWN0dWFsIGF1ZGlvIHN0cmVhbSBpcyBlbmNyeXB0ZWQsIGFuZCBieQogICB3aG9tLiBTaW5jZSBzdGFuZGFyZGlzYXRpb24gb2Ygc3VjaCBlbmNyeXBpb24gc2NoZW1lIGlzIGJleW9uZCB0aGlzCiAgIGRvY3VtZW50LCBhbGwgIkFFTkMiIGZyYW1lcyBiZWdpbiB3aXRoIGEgdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhCiAgIFVSTCBjb250YWluaW5nIGFuIGVtYWlsIGFkZHJlc3MsIG9yIGEgbGluayB0byBhIGxvY2F0aW9uIHdoZXJlIGFuCiAgIGVtYWlsIGFkZHJlc3MgY2FuIGJlIGZvdW5kLCB0aGF0IGJlbG9uZ3MgdG8gdGhlIG9yZ2FuaXNhdGlvbgogICByZXNwb25zaWJsZSBmb3IgdGhpcyBzcGVjaWZpYyBlbmNyeXB0ZWQgYXVkaW8gZmlsZS4gUXVlc3Rpb25zCiAgIHJlZ2FyZGluZyB0aGUgZW5jcnlwdGVkIGF1ZGlvIHNob3VsZCBiZSBzZW50IHRvIHRoZSBlbWFpbCBhZGRyZXNzCiAgIHNwZWNpZmllZC4gSWYgYSAkMDAgaXMgZm91bmQgZGlyZWN0bHkgYWZ0ZXIgdGhlICdGcmFtZSBzaXplJyBhbmQgdGhlCiAgIGF1ZGlvZmlsZSBpbmRlZWQgaXMgZW5jcnlwdGVkLCB0aGUgd2hvbGUgZmlsZSBtYXkgYmUgY29uc2lkZXJlZAogICB1c2VsZXNzLgoKICAgQWZ0ZXIgdGhlICdPd25lciBpZGVudGlmaWVyJywgYSBwb2ludGVyIHRvIGFuIHVuZW5jcnlwdGVkIHBhcnQgb2YgdGhlCiAgIGF1ZGlvIGNhbiBiZSBzcGVjaWZpZWQuIFRoZSAnUHJldmlldyBzdGFydCcgYW5kICdQcmV2aWV3IGxlbmd0aCcgaXMKICAgZGVzY3JpYmVkIGluIGZyYW1lcy4gSWYgbm8gcGFydCBpcyB1bmVuY3J5cHRlZCwgdGhlc2UgZmllbGRzIHNob3VsZAogICBiZSBsZWZ0IHplcm9lZC4gQWZ0ZXIgdGhlICdwcmV2aWV3IGxlbmd0aCcgZmllbGQgZm9sbG93cyBvcHRpb25hbGx5IGEKICAgZGF0YWJsb2NrIHJlcXVpcmVkIGZvciBkZWNyeXB0aW9uIG9mIHRoZSBhdWRpby4gVGhlcmUgbWF5IGJlIG1vcmUKICAgdGhhbiBvbmUgIkFFTkMiIGZyYW1lcyBpbiBhIHRhZywgYnV0IG9ubHkgb25lIHdpdGggdGhlIHNhbWUgJ093bmVyCiAgIGlkZW50aWZpZXInLgoKICAgICA8SGVhZGVyIGZvciAnQXVkaW8gZW5jcnlwdGlvbicsIElEOiAiQUVOQyI+CiAgICAgT3duZXIgaWRlbnRpZmllciAgIDx0ZXh0IHN0cmluZz4gJDAwCiAgICAgUHJldmlldyBzdGFydCAgICAgICR4eCB4eAogICAgIFByZXZpZXcgbGVuZ3RoICAgICAkeHggeHgKICAgICBFbmNyeXB0aW9uIGluZm8gICAgPGJpbmFyeSBkYXRhPgoKCjQuMjEuICAgTGlua2VkIGluZm9ybWF0aW9uCgogICBUbyBrZWVwIHNwYWNlIHdhc3RlIGFzIGxvdyBhcyBwb3NzaWJsZSB0aGlzIGZyYW1lIG1heSBiZSB1c2VkIHRvIGxpbmsKICAgaW5mb3JtYXRpb24gZnJvbSBhbm90aGVyIElEM3YyIHRhZyB0aGF0IG1pZ2h0IHJlc2lkZSBpbiBhbm90aGVyIGF1ZGlvCiAgIGZpbGUgb3IgYWxvbmUgaW4gYSBiaW5hcnkgZmlsZS4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIG1ldGhvZCBpcwogICBvbmx5IHVzZWQgd2hlbiB0aGUgZmlsZXMgYXJlIHN0b3JlZCBvbiBhIENELVJPTSBvciBvdGhlcgogICBjaXJjdW1zdGFuY2VzIHdoZW4gdGhlIHJpc2sgb2YgZmlsZSBzZXBlcmF0aW9uIGlzIGxvdy4gVGhlIGZyYW1lCiAgIGNvbnRhaW5zIGEgZnJhbWUgaWRlbnRpZmllciwgd2hpY2ggaXMgdGhlIGZyYW1lIHRoYXQgc2hvdWxkIGJlIGxpbmtlZAogICBpbnRvIHRoaXMgdGFnLCBhIFVSTCBbVVJMXSBmaWVsZCwgd2hlcmUgYSByZWZlcmVuY2UgdG8gdGhlIGZpbGUgd2hlcmUKICAgdGhlIGZyYW1lIGlzIGdpdmVuLCBhbmQgYWRkaXRpb25hbCBJRCBkYXRhLCBpZiBuZWVkZWQuIERhdGEgc2hvdWxkIGJlCiAgIHJldHJpZXZlZCBmcm9tIHRoZSBmaXJzdCB0YWcgZm91bmQgaW4gdGhlIGZpbGUgdG8gd2hpY2ggdGhpcyBsaW5rCiAgIHBvaW50cy4gVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgIkxJTksiIGZyYW1lIGluIGEgdGFnLCBidXQgb25seQogICBvbmUgd2l0aCB0aGUgc2FtZSBjb250ZW50cy4gQSBsaW5rZWQgZnJhbWUgaXMgdG8gYmUgY29uc2lkZXJlZCBhcwogICBwYXJ0IG9mIHRoZSB0YWcgYW5kIGhhcyB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgaWYgaXQgd2FzIGEgcGh5c2ljYWwKICAgcGFydCBvZiB0aGUgdGFnIChpLmUuIG9ubHkgb25lICJSVlJCIiBmcmFtZSBhbGxvd2VkLCB3aGV0aGVyIGl0J3MKICAgbGlua2VkIG9yIG5vdCkuCgogICAgIDxIZWFkZXIgZm9yICdMaW5rZWQgaW5mb3JtYXRpb24nLCBJRDogIkxJTksiPgogICAgIEZyYW1lIGlkZW50aWZpZXIgICAgICAgICR4eCB4eCB4eAogICAgIFVSTCAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0cmluZz4gJDAwCiAgICAgSUQgYW5kIGFkZGl0aW9uYWwgZGF0YSAgPHRleHQgc3RyaW5nKHMpPgoKICAgRnJhbWVzIHRoYXQgbWF5IGJlIGxpbmtlZCBhbmQgbmVlZCBubyBhZGRpdGlvbmFsIGRhdGEgYXJlICJJUExTIiwKICAgIk1DSUQiLCAiRVRDTyIsICJNTExUIiwgIlNZVEMiLCAiUlZBRCIsICJFUVVBIiwgIlJWUkIiLCAiUkJVRiIsIHRoZQogICB0ZXh0IGluZm9ybWF0aW9uIGZyYW1lcyBhbmQgdGhlIFVSTCBsaW5rIGZyYW1lcy4KCiAgIFRoZSAiVFhYWCIsICJBUElDIiwgIkdFT0IiIGFuZCAiQUVOQyIgZnJhbWVzIG1heSBiZSBsaW5rZWQgd2l0aAogICB0aGUgY29udGVudCBkZXNjcmlwdG9yIGFzIGFkZGl0aW9uYWwgSUQgZGF0YS4KCiAgIFRoZSAiQ09NTSIsICJTWUxUIiBhbmQgIlVTTFQiIGZyYW1lcyBtYXkgYmUgbGlua2VkIHdpdGggdGhyZWUgYnl0ZXMKICAgb2YgbGFuZ3VhZ2UgZGVzY3JpcHRvciBkaXJlY3RseSBmb2xsb3dlZCBieSBhIGNvbnRlbnQgZGVzY3JpcHRvciBhcwogICBhZGRpdGlvbmFsIElEIGRhdGEuCgoKNC4yMi4gICBQb3NpdGlvbiBzeW5jaHJvbmlzYXRpb24gZnJhbWUKCiAgIFRoaXMgZnJhbWUgZGVsaXZlcnMgaW5mb3JtYXRpb24gdG8gdGhlIGxpc3RlbmVyIG9mIGhvdyBmYXIgaW50byB0aGUKICAgYXVkaW8gc3RyZWFtIGhlIHBpY2tlZCB1cDsgaW4gZWZmZWN0LCBpdCBzdGF0ZXMgdGhlIHRpbWUgb2Zmc2V0IG9mCiAgIHRoZSBmaXJzdCBmcmFtZSBpbiB0aGUgc3RyZWFtLiBUaGUgZnJhbWUgbGF5b3V0IGlzOgoKICAgICA8SGVhZCBmb3IgJ1Bvc2l0aW9uIHN5bmNocm9uaXNhdGlvbicsIElEOiAiUE9TUyI+CiAgICAgVGltZSBzdGFtcCBmb3JtYXQgICAgICAgICAkeHgKICAgICBQb3NpdGlvbiAgICAgICAgICAgICAgICAgICR4eCAoeHggLi4uKQoKICAgV2hlcmUgdGltZSBzdGFtcCBmb3JtYXQgaXM6CgogICAgICQwMSAgQWJzb2x1dGUgdGltZSwgMzIgYml0IHNpemVkLCB1c2luZyBNUEVHIGZyYW1lcyBhcyB1bml0CiAgICAgJDAyICBBYnNvbHV0ZSB0aW1lLCAzMiBiaXQgc2l6ZWQsIHVzaW5nIG1pbGxpc2Vjb25kcyBhcyB1bml0CgogICBhbmQgcG9zaXRpb24gaXMgd2hlcmUgaW4gdGhlIGF1ZGlvIHRoZSBsaXN0ZW5lciBzdGFydHMgdG8gcmVjZWl2ZSwKICAgaS5lLiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGZyYW1lLiBJZiB0aGlzIGZyYW1lIGlzIHVzZWQgaW4gdGhlCiAgIGJlZ2lubmluZyBvZiBhIGZpbGUgdGhlIHZhbHVlIGlzIGFsd2F5cyAwLiBUaGVyZSBtYXkgb25seSBiZSBvbmUKICAgIlBPU1MiIGZyYW1lIGluIGVhY2ggdGFnLgoKCjQuMjMuICAgVGVybXMgb2YgdXNlIGZyYW1lCgogICBUaGlzIGZyYW1lIGNvbnRhaW5zIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHRlcm1zIG9mIHVzZSBhbmQKICAgb3duZXJzaGlwIG9mIHRoZSBmaWxlLiBNb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIGNvbmNlcm5pbmcgdGhlIGxlZ2FsCiAgIHRlcm1zIG1pZ2h0IGJlIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSAiV0NPUCIgZnJhbWUuIE5ld2xpbmVzIGFyZQogICBhbGxvd2VkIGluIHRoZSB0ZXh0LiBUaGVyZSBtYXkgb25seSBiZSBvbmUgIlVTRVIiIGZyYW1lIGluIGEgdGFnLgoKICAgICA8SGVhZGVyIGZvciAnVGVybXMgb2YgdXNlIGZyYW1lJywgSUQ6ICJVU0VSIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAgICAkeHgKICAgICBMYW5ndWFnZSAgICAgICAgICAgICAkeHggeHggeHgKICAgICBUaGUgYWN0dWFsIHRleHQgICAgICA8dGV4dCBzdHJpbmcgYWNjb3JkaW5nIHRvIGVuY29kaW5nPgoKCjQuMjQuICAgT3duZXJzaGlwIGZyYW1lCgogICBUaGUgb3duZXJzaGlwIGZyYW1lIG1pZ2h0IGJlIHVzZWQgYXMgYSByZW1pbmRlciBvZiBhIG1hZGUgdHJhbnNhY3Rpb24KICAgb3IsIGlmIHNpZ25lZCwgYXMgcHJvb2YuIE5vdGUgdGhhdCB0aGUgIlVTRVIiIGFuZCAiVE9XTiIgZnJhbWVzIGFyZQogICBnb29kIHRvIHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoaXMgb25lLiBUaGUgZnJhbWUgYmVnaW5zLCBhZnRlciB0aGUKICAgZnJhbWUgSUQsIHNpemUgYW5kIGVuY29kaW5nIGZpZWxkcywgd2l0aCBhICdwcmljZSBwYXllZCcgZmllbGQuIFRoZQogICBmaXJzdCB0aHJlZSBjaGFyYWN0ZXJzIG9mIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIGN1cnJlbmN5IHVzZWQgZm9yCiAgIHRoZSB0cmFuc2FjdGlvbiwgZW5jb2RlZCBhY2NvcmRpbmcgdG8gSVNPIDQyMTcgW0lTTy00MjE3XSBhbHBoYWJldGljCiAgIGN1cnJlbmN5IGNvZGUuIENvbmNhdGVuYXRlZCB0byB0aGlzIGlzIHRoZSBhY3R1YWwgcHJpY2UgcGF5ZWQsIGFzIGEKICAgbnVtZXJpY2FsIHN0cmluZyB1c2luZyAiLiIgYXMgdGhlIGRlY2ltYWwgc2VwYXJhdG9yLiBOZXh0IGlzIGFuIDgKICAgY2hhcmFjdGVyIGRhdGUgc3RyaW5nIChZWVlZTU1ERCkgZm9sbG93ZWQgYnkgYSBzdHJpbmcgd2l0aCB0aGUgbmFtZQogICBvZiB0aGUgc2VsbGVyIGFzIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBmcmFtZS4gVGhlcmUgbWF5IG9ubHkgYmUgb25lCiAgICJPV05FIiBmcmFtZSBpbiBhIHRhZy4KCiAgICAgPEhlYWRlciBmb3IgJ093bmVyc2hpcCBmcmFtZScsIElEOiAiT1dORSI+CiAgICAgVGV4dCBlbmNvZGluZyAgICAgJHh4CiAgICAgUHJpY2UgcGF5ZWQgICAgICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBEYXRlIG9mIHB1cmNoLiAgICA8dGV4dCBzdHJpbmc+CiAgICAgU2VsbGVyICAgICAgICAgICAgPHRleHQgc3RyaW5nIGFjY29yZGluZyB0byBlbmNvZGluZz4KCgo0LjI1LiAgIENvbW1lcmNpYWwgZnJhbWUKCiAgIFRoaXMgZnJhbWUgZW5hYmxlcyBzZXZlcmFsIGNvbXBldGluZyBvZmZlcnMgaW4gdGhlIHNhbWUgdGFnIGJ5CiAgIGJ1bmRsaW5nIGFsbCBuZWVkZWQgaW5mb3JtYXRpb24uIFRoYXQgbWFrZXMgdGhpcyBmcmFtZSByYXRoZXIgY29tcGxleAogICBidXQgaXQncyBhbiBlYXNpZXIgc29sdXRpb24gdGhhbiBpZiBvbmUgdHJpZXMgdG8gYWNoaWV2ZSB0aGUgc2FtZQogICByZXN1bHQgd2l0aCBzZXZlcmFsIGZyYW1lcy4gVGhlIGZyYW1lIGJlZ2lucywgYWZ0ZXIgdGhlIGZyYW1lIElELAogICBzaXplIGFuZCBlbmNvZGluZyBmaWVsZHMsIHdpdGggYSBwcmljZSBzdHJpbmcgZmllbGQuIEEgcHJpY2UgaXMKICAgY29uc3RydWN0ZWQgYnkgb25lIHRocmVlIGNoYXJhY3RlciBjdXJyZW5jeSBjb2RlLCBlbmNvZGVkIGFjY29yZGluZwogICB0byBJU08gNDIxNyBbSVNPLTQyMTddIGFscGhhYmV0aWMgY3VycmVuY3kgY29kZSwgZm9sbG93ZWQgYnkgYQogICBudW1lcmljYWwgdmFsdWUgd2hlcmUgIi4iIGlzIHVzZWQgYXMgZGVjaW1hbCBzZXBlcmF0b3IuIEluIHRoZSBwcmljZQogICBzdHJpbmcgc2V2ZXJhbCBwcmljZXMgbWF5IGJlIGNvbmNhdGVuYXRlZCwgc2VwZXJhdGVkIGJ5IGEgIi8iCiAgIGNoYXJhY3RlciwgYnV0IHRoZXJlIG1heSBvbmx5IGJlIG9uZSBjdXJyZW5jeSBvZiBlYWNoIHR5cGUuCgogICBUaGUgcHJpY2Ugc3RyaW5nIGlzIGZvbGxvd2VkIGJ5IGFuIDggY2hhcmFjdGVyIGRhdGUgc3RyaW5nIGluIHRoZQogICBmb3JtYXQgWVlZWU1NREQsIGRlc2NyaWJpbmcgZm9yIGhvdyBsb25nIHRoZSBwcmljZSBpcyB2YWxpZC4gQWZ0ZXIKICAgdGhhdCBpcyBhIGNvbnRhY3QgVVJMLCB3aXRoIHdoaWNoIHRoZSB1c2VyIGNhbiBjb250YWN0IHRoZSBzZWxsZXIsCiAgIGZvbGxvd2VkIGJ5IGEgb25lIGJ5dGUgJ3JlY2VpdmVkIGFzJyBmaWVsZC4gSXQgZGVzY3JpYmVzIGhvdyB0aGUKICAgYXVkaW8gaXMgZGVsaXZlcmVkIHdoZW4gYm91Z2h0IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIGxpc3Q6CgogICAgICAgICQwMCAgT3RoZXIKICAgICAgICAkMDEgIFN0YW5kYXJkIENEIGFsYnVtIHdpdGggb3RoZXIgc29uZ3MKICAgICAgICAkMDIgIENvbXByZXNzZWQgYXVkaW8gb24gQ0QKICAgICAgICAkMDMgIEZpbGUgb3ZlciB0aGUgSW50ZXJuZXQKICAgICAgICAkMDQgIFN0cmVhbSBvdmVyIHRoZSBJbnRlcm5ldAogICAgICAgICQwNSAgQXMgbm90ZSBzaGVldHMKICAgICAgICAkMDYgIEFzIG5vdGUgc2hlZXRzIGluIGEgYm9vayB3aXRoIG90aGVyIHNoZWV0cwogICAgICAgICQwNyAgTXVzaWMgb24gb3RoZXIgbWVkaWEKICAgICAgICAkMDggIE5vbi1tdXNpY2FsIG1lcmNoYW5kaXNlCgogICBOZXh0IGZvbGxvd3MgYSB0ZXJtaW5hdGVkIHN0cmluZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBzZWxsZXIgZm9sbG93ZWQKICAgYnkgYSB0ZXJtaW5hdGVkIHN0cmluZyB3aXRoIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHByb2R1Y3QuIFRoZQogICBsYXN0IHRoaW5nIGlzIHRoZSBhYmlsaXR5IHRvIGluY2x1ZGUgYSBjb21wYW55IGxvZ290eXBlLiBUaGUgZmlyc3Qgb2YKICAgdGhlbSBpcyB0aGUgJ1BpY3R1cmUgTUlNRSB0eXBlJyBmaWVsZCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0CiAgIHdoaWNoIHBpY3R1cmUgZm9ybWF0IGlzIHVzZWQuIEluIHRoZSBldmVudCB0aGF0IHRoZSBNSU1FIG1lZGlhIHR5cGUKICAgbmFtZSBpcyBvbWl0dGVkLCAiaW1hZ2UvIiB3aWxsIGJlIGltcGxpZWQuIEN1cnJlbnRseSBvbmx5ICJpbWFnZS9wbmciCiAgIGFuZCAiaW1hZ2UvanBlZyIgYXJlIGFsbG93ZWQuIFRoaXMgZm9ybWF0IHN0cmluZyBpcyBmb2xsb3dlZCBieSB0aGUKICAgYmluYXJ5IHBpY3R1cmUgZGF0YS4gVGhpcyB0d28gbGFzdCBmaWVsZHMgbWF5IGJlIG9taXR0ZWQgaWYgbm8KICAgcGljdHVyZSBpcyB0byBhdHRhY2guCgogICAgIDxIZWFkZXIgZm9yICdDb21tZXJjaWFsIGZyYW1lJywgSUQ6ICJDT01SIj4KICAgICBUZXh0IGVuY29kaW5nICAgICAgJHh4CiAgICAgUHJpY2Ugc3RyaW5nICAgICAgIDx0ZXh0IHN0cmluZz4gJDAwCiAgICAgVmFsaWQgdW50aWwgICAgICAgIDx0ZXh0IHN0cmluZz4KICAgICBDb250YWN0IFVSTCAgICAgICAgPHRleHQgc3RyaW5nPiAkMDAKICAgICBSZWNlaXZlZCBhcyAgICAgICAgJHh4CiAgICAgTmFtZSBvZiBzZWxsZXIgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgRGVzY3JpcHRpb24gICAgICAgIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+ICQwMCAoMDApCiAgICAgUGljdHVyZSBNSU1FIHR5cGUgIDxzdHJpbmc+ICQwMAogICAgIFNlbGxlciBsb2dvICAgICAgICA8YmluYXJ5IGRhdGE+CgoKNC4yNi4gICBFbmNyeXB0aW9uIG1ldGhvZCByZWdpc3RyYXRpb24KCiAgIFRvIGlkZW50aWZ5IHdpdGggd2hpY2ggbWV0aG9kIGEgZnJhbWUgaGFzIGJlZW4gZW5jcnlwdGVkIHRoZQogICBlbmNyeXB0aW9uIG1ldGhvZCBtdXN0IGJlIHJlZ2lzdGVyZWQgaW4gdGhlIHRhZyB3aXRoIHRoaXMgZnJhbWUuIFRoZQogICAnT3duZXIgaWRlbnRpZmllcicgaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggYSBVUkwgW1VSTF0KICAgY29udGFpbmluZyBhbiBlbWFpbCBhZGRyZXNzLCBvciBhIGxpbmsgdG8gYSBsb2NhdGlvbiB3aGVyZSBhbiBlbWFpbAogICBhZGRyZXNzIGNhbiBiZSBmb3VuZCwgdGhhdCBiZWxvbmdzIHRvIHRoZSBvcmdhbmlzYXRpb24gcmVzcG9uc2libGUKICAgZm9yIHRoaXMgc3BlY2lmaWMgZW5jcnlwdGlvbiBtZXRob2QuIFF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlCiAgIGVuY3J5cHRpb24gbWV0aG9kIHNob3VsZCBiZSBzZW50IHRvIHRoZSBpbmRpY2F0ZWQgZW1haWwgYWRkcmVzcy4gVGhlCiAgICdNZXRob2Qgc3ltYm9sJyBjb250YWlucyBhIHZhbHVlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWV0aG9kCiAgIHRocm91Z2hvdXQgdGhlIHdob2xlIHRhZy4gVmFsdWVzIGJlbG93ICQ4MCBhcmUgcmVzZXJ2ZWQuIFRoZSAnTWV0aG9kCiAgIHN5bWJvbCcgbWF5IG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgZW5jcnlwdGlvbiBzcGVjaWZpYyBkYXRhLiBUaGVyZQogICBtYXkgYmUgc2V2ZXJhbCAiRU5DUiIgZnJhbWVzIGluIGEgdGFnIGJ1dCBvbmx5IG9uZSBjb250YWluaW5nIHRoZQogICBzYW1lIHN5bWJvbCBhbmQgb25seSBvbmUgY29udGFpbmluZyB0aGUgc2FtZSBvd25lciBpZGVudGlmaWVyLiBUaGUKICAgbWV0aG9kIG11c3QgYmUgdXNlZCBzb21ld2hlcmUgaW4gdGhlIHRhZy4gU2VlIHNlY3Rpb24gMy4zLjEsIGZsYWcgagogICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCiAgICAgPEhlYWRlciBmb3IgJ0VuY3J5cHRpb24gbWV0aG9kIHJlZ2lzdHJhdGlvbicsIElEOiAiRU5DUiI+CiAgICAgT3duZXIgaWRlbnRpZmllciAgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIE1ldGhvZCBzeW1ib2wgICAgICAgJHh4CiAgICAgRW5jcnlwdGlvbiBkYXRhICAgICA8YmluYXJ5IGRhdGE+CgoKNC4yNy4gICBHcm91cCBpZGVudGlmaWNhdGlvbiByZWdpc3RyYXRpb24KCiAgIFRoaXMgZnJhbWUgZW5hYmxlcyBncm91cGluZyBvZiBvdGhlcndpc2UgdW5yZWxhdGVkIGZyYW1lcy4gVGhpcyBjYW4KICAgYmUgdXNlZCB3aGVuIHNvbWUgZnJhbWVzIGFyZSB0byBiZSBzaWduZWQuIFRvIGlkZW50aWZ5IHdoaWNoIGZyYW1lcwogICBiZWxvbmdzIHRvIGEgc2V0IG9mIGZyYW1lcyBhIGdyb3VwIGlkZW50aWZpZXIgbXVzdCBiZSByZWdpc3RlcmVkIGluCiAgIHRoZSB0YWcgd2l0aCB0aGlzIGZyYW1lLiBUaGUgJ093bmVyIGlkZW50aWZpZXInIGlzIGEgbnVsbC10ZXJtaW5hdGVkCiAgIHN0cmluZyB3aXRoIGEgVVJMIFtVUkxdIGNvbnRhaW5pbmcgYW4gZW1haWwgYWRkcmVzcywgb3IgYSBsaW5rIHRvIGEKICAgbG9jYXRpb24gd2hlcmUgYW4gZW1haWwgYWRkcmVzcyBjYW4gYmUgZm91bmQsIHRoYXQgYmVsb25ncyB0byB0aGUKICAgb3JnYW5pc2F0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzIGdyb3VwaW5nLiBRdWVzdGlvbnMgcmVnYXJkaW5nIHRoZQogICBncm91cGluZyBzaG91bGQgYmUgc2VudCB0byB0aGUgaW5kaWNhdGVkIGVtYWlsIGFkZHJlc3MuIFRoZSAnR3JvdXAKICAgc3ltYm9sJyBjb250YWlucyBhIHZhbHVlIHRoYXQgYXNzb2NpYXRlcyB0aGUgZnJhbWUgd2l0aCB0aGlzIGdyb3VwCiAgIHRocm91Z2hvdXQgdGhlIHdob2xlIHRhZy4gVmFsdWVzIGJlbG93ICQ4MCBhcmUgcmVzZXJ2ZWQuIFRoZSAnR3JvdXAKICAgc3ltYm9sJyBtYXkgb3B0aW9uYWxseSBiZSBmb2xsb3dlZCBieSBzb21lIGdyb3VwIHNwZWNpZmljIGRhdGEsIGUuZy4KICAgYSBkaWdpdGFsIHNpZ25hdHVyZS4gVGhlcmUgbWF5IGJlIHNldmVyYWwgIkdSSUQiIGZyYW1lcyBpbiBhIHRhZyBidXQKICAgb25seSBvbmUgY29udGFpbmluZyB0aGUgc2FtZSBzeW1ib2wgYW5kIG9ubHkgb25lIGNvbnRhaW5pbmcgdGhlIHNhbWUKICAgb3duZXIgaWRlbnRpZmllci4gVGhlIGdyb3VwIHN5bWJvbCBtdXN0IGJlIHVzZWQgc29tZXdoZXJlIGluIHRoZSB0YWcuCiAgIFNlZSBzZWN0aW9uIDMuMy4xLCBmbGFnIGogZm9yIG1vcmUgaW5mb3JtYXRpb24uCgogICAgIDxIZWFkZXIgZm9yICdHcm91cCBJRCByZWdpc3RyYXRpb24nLCBJRDogIkdSSUQiPgogICAgIE93bmVyIGlkZW50aWZpZXIgICAgICA8dGV4dCBzdHJpbmc+ICQwMAogICAgIEdyb3VwIHN5bWJvbCAgICAgICAgICAkeHgKCSBHcm91cCBkZXBlbmRlbnQgZGF0YSAgPGJpbmFyeSBkYXRhPgoKCjQuMjguICAgUHJpdmF0ZSBmcmFtZQoKICAgVGhpcyBmcmFtZSBpcyB1c2VkIHRvIGNvbnRhaW4gaW5mb3JtYXRpb24gZnJvbSBhIHNvZnR3YXJlIHByb2R1Y2VyCiAgIHRoYXQgaXRzIHByb2dyYW0gdXNlcyBhbmQgZG9lcyBub3QgZml0IGludG8gdGhlIG90aGVyIGZyYW1lcy4gVGhlCiAgIGZyYW1lIGNvbnNpc3RzIG9mIGFuICdPd25lciBpZGVudGlmaWVyJyBzdHJpbmcgYW5kIHRoZSBiaW5hcnkgZGF0YS4KICAgVGhlICdPd25lciBpZGVudGlmaWVyJyBpcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBhIFVSTCBbVVJMXQogICBjb250YWluaW5nIGFuIGVtYWlsIGFkZHJlc3MsIG9yIGEgbGluayB0byBhIGxvY2F0aW9uIHdoZXJlIGFuIGVtYWlsCiAgIGFkZHJlc3MgY2FuIGJlIGZvdW5kLCB0aGF0IGJlbG9uZ3MgdG8gdGhlIG9yZ2FuaXNhdGlvbiByZXNwb25zaWJsZQogICBmb3IgdGhlIGZyYW1lLiBRdWVzdGlvbnMgcmVnYXJkaW5nIHRoZSBmcmFtZSBzaG91bGQgYmUgc2VudCB0byB0aGUKICAgaW5kaWNhdGVkIGVtYWlsIGFkZHJlc3MuIFRoZSB0YWcgbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSAiUFJJViIKICAgZnJhbWUgYnV0IG9ubHkgd2l0aCBkaWZmZXJlbnQgY29udGVudHMuIEl0IGlzIHJlY29tbWVuZGVkIHRvIGtlZXAgdGhlCiAgIG51bWJlciBvZiAiUFJJViIgZnJhbWVzIGFzIGxvdyBhcyBwb3NzaWJsZS4KCiAgICAgPEhlYWRlciBmb3IgJ1ByaXZhdGUgZnJhbWUnLCBJRDogIlBSSVYiPgogICAgIE93bmVyIGlkZW50aWZpZXIgICAgICA8dGV4dCBzdHJpbmc+ICQwMAoJIFRoZSBwcml2YXRlIGRhdGEgICAgICA8YmluYXJ5IGRhdGE+CgoKNS4gICBUaGUgJ3Vuc3luY2hyb25pc2F0aW9uIHNjaGVtZScKCiAgIFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhlICd1bnN5bmNocm9uaXNhdGlvbiBzY2hlbWUnIGlzIHRvIG1ha2UgdGhlCiAgIElEM3YyIHRhZyBhcyBjb21wYXRpYmxlIGFzIHBvc3NpYmxlIHdpdGggZXhpc3Rpbmcgc29mdHdhcmUuIFRoZXJlIGlzCiAgIG5vIHVzZSBpbiAndW5zeW5jaHJvbmlzaW5nJyB0YWdzIGlmIHRoZSBmaWxlIGlzIG9ubHkgdG8gYmUgcHJvY2Vzc2VkCiAgIGJ5IG5ldyBzb2Z0d2FyZS4gVW5zeW5jaHJvbmlzYXRpb24gbWF5IG9ubHkgYmUgbWFkZSB3aXRoIE1QRUcgMiBsYXllcgogICBJLCBJSSBhbmQgSUlJIGFuZCBNUEVHIDIuNSBmaWxlcy4KCiAgIFdoZW5ldmVyIGEgZmFsc2Ugc3luY2hyb25pc2F0aW9uIGlzIGZvdW5kIHdpdGhpbiB0aGUgdGFnLCBvbmUgemVyb2VkCiAgIGJ5dGUgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGZpcnN0IGZhbHNlIHN5bmNocm9uaXNhdGlvbiBieXRlLiBUaGUKICAgZm9ybWF0IG9mIGEgY29ycmVjdCBzeW5jIHRoYXQgc2hvdWxkIGJlIGFsdGVyZWQgYnkgSUQzIGVuY29kZXJzIGlzIGFzCiAgIGZvbGxvd3M6CgogICAgICAgICAlMTExMTExMTEgMTExeHh4eHgKCiAgIEFuZCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aDoKCiAgICAgICAgICUxMTExMTExMSAwMDAwMDAwMCAxMTF4eHh4eAoKICAgVGhpcyBoYXMgdGhlIHNpZGUgZWZmZWN0IHRoYXQgYWxsICRGRiAwMCBjb21iaW5hdGlvbnMgaGF2ZSB0byBiZQogICBhbHRlcmVkLCBzbyB0aGV5IHdvbid0IGJlIGFmZmVjdGVkIGJ5IHRoZSBkZWNvZGluZyBwcm9jZXNzLiBUaGVyZWZvcmUKICAgYWxsIHRoZSAkRkYgMDAgY29tYmluYXRpb25zIGhhdmUgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgJEZGIDAwIDAwCiAgIGNvbWJpbmF0aW9uIGR1cmluZyB0aGUgdW5zeW5jaHJvbmlzYXRpb24uCgogICBUbyBpbmRpY2F0ZSB1c2FnZSBvZiB0aGUgdW5zeW5jaHJvbmlzYXRpb24sIHRoZSBmaXJzdCBiaXQgaW4gJ0lEMwogICBmbGFncycgc2hvdWxkIGJlIHNldC4gVGhpcyBiaXQgc2hvdWxkIG9ubHkgYmUgc2V0IGlmIHRoZSB0YWcKICAgY29udGFpbnMgYSwgbm93IGNvcnJlY3RlZCwgZmFsc2Ugc3luY2hyb25pc2F0aW9uLiBUaGUgYml0IHNob3VsZAogICBvbmx5IGJlIGNsZWFyIGlmIHRoZSB0YWcgZG9lcyBub3QgY29udGFpbiBhbnkgZmFsc2Ugc3luY2hyb25pc2F0aW9ucy4KCiAgIERvIGJlYXIgaW4gbWluZCwgdGhhdCBpZiBhIGNvbXByZXNzaW9uIHNjaGVtZSBpcyB1c2VkIGJ5IHRoZSBlbmNvZGVyLAogICB0aGUgdW5zeW5jaHJvbmlzYXRpb24gc2NoZW1lIHNob3VsZCBiZSBhcHBsaWVkICphZnRlcndhcmRzKi4gV2hlbgogICBkZWNvZGluZyBhIGNvbXByZXNzZWQsICd1bnN5bmNocm9uaXNlZCcgZmlsZSwgdGhlICd1bnN5bmNocm9uaXNhdGlvbgogICBzY2hlbWUnIHNob3VsZCBiZSBwYXJzZWQgZmlyc3QsIGRlY29tcHJlc3Npb24gYWZ0ZXJ3YXJkcy4KCiAgIElmIHRoZSBsYXN0IGJ5dGUgaW4gdGhlIHRhZyBpcyAkRkYsIGFuZCB0aGVyZSBpcyBhIG5lZWQgdG8gZWxpbWluYXRlCiAgIGZhbHNlIHN5bmNocm9uaXNhdGlvbnMgaW4gdGhlIHRhZywgYXQgbGVhc3Qgb25lIGJ5dGUgb2YgcGFkZGluZwogICBzaG91bGQgYmUgYWRkZWQuCgoKNi4gICBDb3B5cmlnaHQKCiAgIENvcHlyaWdodCAoQykgTWFydGluIE5pbHNzb24gMTk5OC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCiAgIFRoaXMgZG9jdW1lbnQgYW5kIHRyYW5zbGF0aW9ucyBvZiBpdCBtYXkgYmUgY29waWVkIGFuZCBmdXJuaXNoZWQgdG8KICAgb3RoZXJzLCBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IGNvbW1lbnQgb24gb3Igb3RoZXJ3aXNlIGV4cGxhaW4gaXQKICAgb3IgYXNzaXN0IGluIGl0cyBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgcHJlcGFyZWQsIGNvcGllZCwgcHVibGlzaGVkCiAgIGFuZCBkaXN0cmlidXRlZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCByZXN0cmljdGlvbiBvZiBhbnkKICAga2luZCwgcHJvdmlkZWQgdGhhdCBhIHJlZmVyZW5jZSB0byB0aGlzIGRvY3VtZW50IGlzIGluY2x1ZGVkIG9uIGFsbAogICBzdWNoIGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3Jrcy4gSG93ZXZlciwgdGhpcyBkb2N1bWVudCBpdHNlbGYgbWF5CiAgIG5vdCBiZSBtb2RpZmllZCBpbiBhbnkgd2F5IGFuZCByZWlzc3VlZCBhcyB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuCgogICBUaGUgbGltaXRlZCBwZXJtaXNzaW9ucyBncmFudGVkIGFib3ZlIGFyZSBwZXJwZXR1YWwgYW5kIHdpbGwgbm90IGJlCiAgIHJldm9rZWQuCgogICBUaGlzIGRvY3VtZW50IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBwcm92aWRlZCBvbiBhbgogICAiQVMgSVMiIGJhc2lzIGFuZCBUSEUgQVVUSE9SUyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKICAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgVVNFIE9GCiAgIFRIRSBJTkZPUk1BVElPTiBIRVJFSU4gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFJJR0hUUyBPUiBBTlkgSU1QTElFRAogICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KCgo3LiAgIFJlZmVyZW5jZXMKCiAgIFtDRERCXSBDb21wYWN0IERpc2MgRGF0YSBCYXNlCgogICAgICA8dXJsOmh0dHA6Ly93d3cuY2RkYi5jb20+CgogICBbSUQzdjJdIE1hcnRpbiBOaWxzc29uLCAiSUQzdjIgaW5mb3JtYWwgc3RhbmRhcmQiLgoKICAgICAgPHVybDpodHRwOi8vd3d3LmlkMy5vcmcvaWQzdjItMDAudHh0PgoKICAgW0lTTy02MzktMl0gSVNPL0ZESVMgNjM5LTIuCiAgIENvZGVzIGZvciB0aGUgcmVwcmVzZW50YXRpb24gb2YgbmFtZXMgb2YgbGFuZ3VhZ2VzLCBQYXJ0IDI6IEFscGhhLTMKICAgY29kZS4gVGVjaG5pY2FsIGNvbW1pdHRlZSAvIHN1YmNvbW1pdHRlZTogVEMgMzcgLyBTQyAyCgogICBbSVNPLTQyMTddIElTTyA0MjE3OjE5OTUuCiAgIENvZGVzIGZvciB0aGUgcmVwcmVzZW50YXRpb24gb2YgY3VycmVuY2llcyBhbmQgZnVuZHMuCiAgIFRlY2huaWNhbCBjb21taXR0ZWUgLyBzdWJjb21taXR0ZWU6IFRDIDY4CgogICBbSVNPLTg4NTktMV0gSVNPL0lFQyBESVMgODg1OS0xLgogICA4LWJpdCBzaW5nbGUtYnl0ZSBjb2RlZCBncmFwaGljIGNoYXJhY3RlciBzZXRzLCBQYXJ0IDE6IExhdGluCiAgIGFscGhhYmV0IE5vLiAxLiBUZWNobmljYWwgY29tbWl0dGVlIC8gc3ViY29tbWl0dGVlOiBKVEMgMSAvIFNDIDIKCiAgIFtJU1JDXSBJU08gMzkwMToxOTg2CiAgIEludGVybmF0aW9uYWwgU3RhbmRhcmQgUmVjb3JkaW5nIENvZGUgKElTUkMpLgogICBUZWNobmljYWwgY29tbWl0dGVlIC8gc3ViY29tbWl0dGVlOiBUQyA0NiAvIFNDIDkKCiAgIFtKRklGXSBKUEVHIEZpbGUgSW50ZXJjaGFuZ2UgRm9ybWF0LCB2ZXJzaW9uIDEuMDIKCiAgICAgIDx1cmw6aHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvSlBFRy9qZmlmLnR4dD4KCiAgIFtNSU1FXSBGcmVlZCwgTi4gIGFuZCBOLiBCb3JlbnN0ZWluLCAgIk11bHRpcHVycG9zZSBJbnRlcm5ldCBNYWlsCiAgIEV4dGVuc2lvbnMgKE1JTUUpIFBhcnQgT25lOiBGb3JtYXQgb2YgSW50ZXJuZXQgTWVzc2FnZSBCb2RpZXMiLAogICBSRkMgMjA0NSwgTm92ZW1iZXIgMTk5Ni4KCiAgICAgIDx1cmw6ZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMjA0NS50eHQ+CgogICBbTVBFR10gSVNPL0lFQyAxMTE3Mi0zOjE5OTMuCiAgIENvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQgYXVkaW8gZm9yIGRpZ2l0YWwgc3RvcmFnZQogICBtZWRpYSBhdCB1cCB0byBhYm91dCAxLDUgTWJpdC9zLCBQYXJ0IDM6IEF1ZGlvLgogICBUZWNobmljYWwgY29tbWl0dGVlIC8gc3ViY29tbWl0dGVlOiBKVEMgMSAvIFNDIDI5CiAgICBhbmQKICAgSVNPL0lFQyAxMzgxOC0zOjE5OTUKICAgR2VuZXJpYyBjb2Rpbmcgb2YgbW92aW5nIHBpY3R1cmVzIGFuZCBhc3NvY2lhdGVkIGF1ZGlvIGluZm9ybWF0aW9uLAogICBQYXJ0IDM6IEF1ZGlvLgogICBUZWNobmljYWwgY29tbWl0dGVlIC8gc3ViY29tbWl0dGVlOiBKVEMgMSAvIFNDIDI5CiAgICBhbmQKICAgSVNPL0lFQyBESVMgMTM4MTgtMwogICBHZW5lcmljIGNvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQgYXVkaW8gaW5mb3JtYXRpb24sCiAgIFBhcnQgMzogQXVkaW8gKFJldmlzaW9uIG9mIElTTy9JRUMgMTM4MTgtMzoxOTk1KQoKCiAgIFtQTkddIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MsIHZlcnNpb24gMS4wCgogICAgICA8dXJsOmh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1wbmctbXVsdGkuaHRtbD4KCiAgIFtVTklDT0RFXSBJU08vSUVDIDEwNjQ2LTE6MTk5My4KICAgVW5pdmVyc2FsIE11bHRpcGxlLU9jdGV0IENvZGVkIENoYXJhY3RlciBTZXQgKFVDUyksIFBhcnQgMToKICAgQXJjaGl0ZWN0dXJlIGFuZCBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUuCiAgIFRlY2huaWNhbCBjb21taXR0ZWUgLyBzdWJjb21taXR0ZWU6IEpUQyAxIC8gU0MgMgoKICAgICAgPHVybDpodHRwOi8vd3d3LnVuaWNvZGUub3JnPgoKICAgW1VSTF0gVC4gQmVybmVycy1MZWUsIEwuIE1hc2ludGVyICYgTS4gTWNDYWhpbGwsICJVbmlmb3JtIFJlc291cmNlCiAgIExvY2F0b3JzIChVUkwpLiIsIFJGQyAxNzM4LCBEZWNlbWJlciAxOTk0LgoKICAgICAgPHVybDpmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMxNzM4LnR4dD4KCiAgIFtaTElCXSBQLiBEZXV0c2NoLCBBbGFkZGluIEVudGVycHJpc2VzICYgSi1MLiBHYWlsbHksICJaTElCCiAgIENvbXByZXNzZWQKICAgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiB2ZXJzaW9uIDMuMyIsIFJGQyAxOTUwLCBNYXkgMTk5Ni4KCiAgICAgIDx1cmw6ZnRwOi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvcmZjMTk1MC50eHQ+CgoKOC4gICBBcHBlbmRpeAoKCkEuICAgQXBwZW5kaXggQSAtIEdlbnJlIExpc3QgZnJvbSBJRDN2MQoKICAgVGhlIGZvbGxvd2luZyBnZW5yZXMgaXMgZGVmaW5lZCBpbiBJRDN2MQoKICAgICAgMC5CbHVlcwogICAgICAxLkNsYXNzaWMgUm9jawogICAgICAyLkNvdW50cnkKICAgICAgMy5EYW5jZQogICAgICA0LkRpc2NvCiAgICAgIDUuRnVuawogICAgICA2LkdydW5nZQogICAgICA3LkhpcC1Ib3AKICAgICAgOC5KYXp6CiAgICAgIDkuTWV0YWwKICAgICAxMC5OZXcgQWdlCiAgICAgMTEuT2xkaWVzCiAgICAgMTIuT3RoZXIKICAgICAxMy5Qb3AKICAgICAxNC5SJkIKICAgICAxNS5SYXAKICAgICAxNi5SZWdnYWUKICAgICAxNy5Sb2NrCiAgICAgMTguVGVjaG5vCiAgICAgMTkuSW5kdXN0cmlhbAogICAgIDIwLkFsdGVybmF0aXZlCiAgICAgMjEuU2thCiAgICAgMjIuRGVhdGggTWV0YWwKICAgICAyMy5QcmFua3MKICAgICAyNC5Tb3VuZHRyYWNrCiAgICAgMjUuRXVyby1UZWNobm8KICAgICAyNi5BbWJpZW50CiAgICAgMjcuVHJpcC1Ib3AKICAgICAyOC5Wb2NhbAogICAgIDI5LkphenorRnVuawogICAgIDMwLkZ1c2lvbgogICAgIDMxLlRyYW5jZQogICAgIDMyLkNsYXNzaWNhbAogICAgIDMzLkluc3RydW1lbnRhbAogICAgIDM0LkFjaWQKICAgICAzNS5Ib3VzZQogICAgIDM2LkdhbWUKICAgICAzNy5Tb3VuZCBDbGlwCiAgICAgMzguR29zcGVsCiAgICAgMzkuTm9pc2UKICAgICA0MC5BbHRlcm5Sb2NrCiAgICAgNDEuQmFzcwogICAgIDQyLlNvdWwKICAgICA0My5QdW5rCiAgICAgNDQuU3BhY2UKICAgICA0NS5NZWRpdGF0aXZlCiAgICAgNDYuSW5zdHJ1bWVudGFsIFBvcAogICAgIDQ3Lkluc3RydW1lbnRhbCBSb2NrCiAgICAgNDguRXRobmljCiAgICAgNDkuR290aGljCiAgICAgNTAuRGFya3dhdmUKICAgICA1MS5UZWNobm8tSW5kdXN0cmlhbAogICAgIDUyLkVsZWN0cm9uaWMKICAgICA1My5Qb3AtRm9sawogICAgIDU0LkV1cm9kYW5jZQogICAgIDU1LkRyZWFtCiAgICAgNTYuU291dGhlcm4gUm9jawogICAgIDU3LkNvbWVkeQogICAgIDU4LkN1bHQKICAgICA1OS5HYW5nc3RhCiAgICAgNjAuVG9wIDQwCiAgICAgNjEuQ2hyaXN0aWFuIFJhcAogICAgIDYyLlBvcC9GdW5rCiAgICAgNjMuSnVuZ2xlCiAgICAgNjQuTmF0aXZlIEFtZXJpY2FuCiAgICAgNjUuQ2FiYXJldAogICAgIDY2Lk5ldyBXYXZlCiAgICAgNjcuUHN5Y2hhZGVsaWMKICAgICA2OC5SYXZlCiAgICAgNjkuU2hvd3R1bmVzCiAgICAgNzAuVHJhaWxlcgogICAgIDcxLkxvLUZpCiAgICAgNzIuVHJpYmFsCiAgICAgNzMuQWNpZCBQdW5rCiAgICAgNzQuQWNpZCBKYXp6CiAgICAgNzUuUG9sa2EKICAgICA3Ni5SZXRybwogICAgIDc3Lk11c2ljYWwKICAgICA3OC5Sb2NrICYgUm9sbAogICAgIDc5LkhhcmQgUm9jawoKICAgVGhlIGZvbGxvd2luZyBnZW5yZXMgYXJlIFdpbmFtcCBleHRlbnNpb25zCgogICAgIDgwLkZvbGsKICAgICA4MS5Gb2xrLVJvY2sKICAgICA4Mi5OYXRpb25hbCBGb2xrCiAgICAgODMuU3dpbmcKICAgICA4NC5GYXN0IEZ1c2lvbgogICAgIDg1LkJlYm9iCiAgICAgODYuTGF0aW4KICAgICA4Ny5SZXZpdmFsCiAgICAgODguQ2VsdGljCiAgICAgODkuQmx1ZWdyYXNzCiAgICAgOTAuQXZhbnRnYXJkZQogICAgIDkxLkdvdGhpYyBSb2NrCiAgICAgOTIuUHJvZ3Jlc3NpdmUgUm9jawogICAgIDkzLlBzeWNoZWRlbGljIFJvY2sKICAgICA5NC5TeW1waG9uaWMgUm9jawogICAgIDk1LlNsb3cgUm9jawogICAgIDk2LkJpZyBCYW5kCiAgICAgOTcuQ2hvcnVzCiAgICAgOTguRWFzeSBMaXN0ZW5pbmcKICAgICA5OS5BY291c3RpYwogICAgMTAwLkh1bW91cgogICAgMTAxLlNwZWVjaAogICAgMTAyLkNoYW5zb24KICAgIDEwMy5PcGVyYQogICAgMTA0LkNoYW1iZXIgTXVzaWMKICAgIDEwNS5Tb25hdGEKICAgIDEwNi5TeW1waG9ueQogICAgMTA3LkJvb3R5IEJhc3MKICAgIDEwOC5QcmltdXMKICAgIDEwOS5Qb3JuIEdyb292ZQogICAgMTEwLlNhdGlyZQogICAgMTExLlNsb3cgSmFtCiAgICAxMTIuQ2x1YgogICAgMTEzLlRhbmdvCiAgICAxMTQuU2FtYmEKICAgIDExNS5Gb2xrbG9yZQogICAgMTE2LkJhbGxhZAogICAgMTE3LlBvd2VyIEJhbGxhZAogICAgMTE4LlJoeXRobWljIFNvdWwKICAgIDExOS5GcmVlc3R5bGUKICAgIDEyMC5EdWV0CiAgICAxMjEuUHVuayBSb2NrCiAgICAxMjIuRHJ1bSBTb2xvCiAgICAxMjMuQWNhcGVsbGEKICAgIDEyNC5FdXJvLUhvdXNlCiAgICAxMjUuRGFuY2UgSGFsbAoKCjkuICAgQXV0aG9yJ3MgQWRkcmVzcwoKICAgV3JpdHRlbiBieQoKICAgICBNYXJ0aW4gTmlsc3NvbgogICAgIFJ5ZHN25GdlbiAyNDYgQy4gMzAKICAgICBTLTU4NCAzNCBMaW5r9nBpbmcKICAgICBTd2VkZW4KCiAgICAgRW1haWw6IG5pbHNzb25AaWQzLm9yZwoKCiAgIEVkaXRlZCBieQoKICAgICBEaXJrIE1haG9uZXkKICAgICA1NyBQZWNoZXkgU3RyZWV0CiAgICAgQ2hlcm1zaWRlIFEKICAgICBBdXN0cmFsaWEgNDAzMgoKICAgICBFbWFpbDogZGlya0BpZDMub3JnCgoKICAgICBKb2hhbiBTdW5kc3Ry9m0KICAgICBBbHPkdHRlcnNnYXRhbiA1IEEuIDM0CiAgICAgUy01ODQgMzUgTGlua/ZwaW5nCiAgICAgU3dlZGVuCgogICAgIEVtYWlsOiBqb2hhbkBpZDMub3JnCgoK