CkluZm9ybWFsIHN0YW5kYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTS4gTmlsc3NvbgpEb2N1bWVudDogaWQzdjIuNC4wLXN0cnVjdHVyZS50eHQgICAgICAgICAgICAgICAgICAgICAgMTYgU2VwdGVtYmVyIDIwMDEKCgogICAgICAgICAgICAgICAgIElEMyB0YWcgdmVyc2lvbiAyLjQuMCAtIE1haW4gU3RydWN0dXJlCgpTdGF0dXMgb2YgdGhpcyBkb2N1bWVudAoKICAgVGhpcyBkb2N1bWVudCBpcyBhbiBpbmZvcm1hbCBzdGFuZGFyZCBhbmQgcmVwbGFjZXMgdGhlIElEM3YyLjMuMAogICBzdGFuZGFyZCBbSUQzdjJdLiBBIGZvcm1hbCBzdGFuZGFyZCB3aWxsIHVzZSBhbm90aGVyIHJldmlzaW9uIG51bWJlcgogICBldmVuIGlmIHRoZSBjb250ZW50IGlzIGlkZW50aWNhbCB0byBkb2N1bWVudC4gVGhlIGNvbnRlbnRzIGluIHRoaXMKICAgZG9jdW1lbnQgbWF5IGNoYW5nZSBmb3IgY2xhcmlmaWNhdGlvbnMgYnV0IG5ldmVyIGZvciBhZGRlZCBvciBhbHRlcmVkCiAgIGZ1bmN0aW9uYWxsaXR5LgoKICAgRGlzdHJpYnV0aW9uIG9mIHRoaXMgZG9jdW1lbnQgaXMgdW5saW1pdGVkLgoKCkFic3RyYWN0CgogICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgbWFpbiBzdHJ1Y3R1cmUgb2YgSUQzdjIuNC4wLCB3aGljaCBpcyBhCiAgIHJldmlzZWQgdmVyc2lvbiBvZiB0aGUgSUQzdjIgaW5mb3JtYWwgc3RhbmRhcmQgW0lEM3YyXSB2ZXJzaW9uCiAgIDIuMy4wLiBUaGUgSUQzdjIgb2ZmZXJzIGEgZmxleGlibGUgd2F5IG9mIHN0b3JpbmcgYXVkaW8gbWV0YQogICBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGF1ZGlvIGZpbGUgaXRzZWxmLiBUaGUgaW5mb3JtYXRpb24gbWF5IGJlCiAgIHRlY2huaWNhbCBpbmZvcm1hdGlvbiwgc3VjaCBhcyBlcXVhbGlzYXRpb24gY3VydmVzLCBhcyB3ZWxsIGFzCiAgIHRpdGxlLCBwZXJmb3JtZXIsIGNvcHlyaWdodCBldGMuCgogICBJRDN2Mi40LjAgaXMgbWVhbnQgdG8gYmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gSUQzdjIuMy4wIGluIG9yZGVyCiAgIHRvIGFsbG93IGZvciBpbXBsZW1lbnRhdGlvbnMgdG8gYmUgcmV2aXNlZCBhcyBlYXNpbHkgYXMgcG9zc2libGUuCgoKMS4gICBUYWJsZSBvZiBjb250ZW50cwoKICAgICAgICBTdGF0dXMgb2YgdGhpcyBkb2N1bWVudAogICAgICAgIEFic3RyYWN0CiAgIDEuICAgVGFibGUgb2YgY29udGVudHMKICAgMi4gICBDb252ZW50aW9ucyBpbiB0aGlzIGRvY3VtZW50CiAgIDIuICAgU3RhbmRhcmQgb3ZlcnZpZXcKICAgMy4gICBJRDN2MiBvdmVydmlldwogICAgIDMuMS4gICBJRDN2MiBoZWFkZXIKICAgICAzLjIuICAgSUQzdjIgZXh0ZW5kZWQgaGVhZGVyCiAgICAgMy4zLiAgIFBhZGRpbmcKICAgICAzLjQuICAgSUQzdjIgZm9vdGVyCiAgIDQuICAgSUQzdjIgZnJhbWVzIG92ZXJ2aWV3CiAgICAgNC4xLiAgIEZyYW1lIGhlYWRlciBmbGFncwogICAgICAgNC4xLjEuIEZyYW1lIHN0YXR1cyBmbGFncwogICAgICAgNC4xLjIuIEZyYW1lIGZvcm1hdCBmbGFncwogICA1LiAgIFRhZyBsb2NhdGlvbgogICA2LiAgIFVuc3luY2hyb25pc2F0aW9uCiAgICAgNi4xLiAgIFRoZSB1bnN5bmNocm9uaXNhdGlvbiBzY2hlbWUKICAgICA2LjIuICAgU3luY2hzYWZlIGludGVnZXJzCiAgIDcuICAgQ29weXJpZ2h0CiAgIDguICAgUmVmZXJlbmNlcwogICA5LiAgIEF1dGhvcidzIEFkZHJlc3MKCgoyLiAgIENvbnZlbnRpb25zIGluIHRoaXMgZG9jdW1lbnQKCiAgIFRleHQgd2l0aGluICIiIGlzIGEgdGV4dCBzdHJpbmcgZXhhY3RseSBhcyBpdCBhcHBlYXJzIGluIGEgdGFnLgogICBOdW1iZXJzIHByZWNlZGVkIHdpdGggJCBhcmUgaGV4YWRlY2ltYWwgYW5kIG51bWJlcnMgcHJlY2VkZWQgd2l0aCAlCiAgIGFyZSBiaW5hcnkuICR4eCBpcyB1c2VkIHRvIGluZGljYXRlIGEgYnl0ZSB3aXRoIHVua25vd24gY29udGVudC4gJXgKICAgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIGJpdCB3aXRoIHVua25vd24gY29udGVudC4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQKICAgYml0IChNU0IpIG9mIGEgYnl0ZSBpcyBjYWxsZWQgJ2JpdCA3JyBhbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAogICAoTFNCKSBpcyBjYWxsZWQgJ2JpdCAwJy4KCiAgIEEgdGFnIGlzIHRoZSB3aG9sZSB0YWcgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEEgZnJhbWUgaXMgYSBibG9jawogICBvZiBpbmZvcm1hdGlvbiBpbiB0aGUgdGFnLiBUaGUgdGFnIGNvbnNpc3RzIG9mIGEgaGVhZGVyLCBmcmFtZXMgYW5kCiAgIG9wdGlvbmFsIHBhZGRpbmcuIEEgZmllbGQgaXMgYSBwaWVjZSBvZiBpbmZvcm1hdGlvbjsgb25lIHZhbHVlLCBhCiAgIHN0cmluZyBldGMuIEEgbnVtZXJpYyBzdHJpbmcgaXMgYSBzdHJpbmcgdGhhdCBjb25zaXN0cyBvZiB0aGUKICAgY2hhcmFjdGVycyAiMDEyMzQ1Njc4OSIgb25seS4KCiAgIFRoZSBrZXkgd29yZHMgIk1VU1QiLCAiTVVTVCBOT1QiLCAiUkVRVUlSRUQiLCAiU0hBTEwiLCAiU0hBTEwgTk9UIiwKICAgIlNIT1VMRCIsICJTSE9VTEQgTk9UIiwgIlJFQ09NTUVOREVEIiwgICJNQVkiLCBhbmQgIk9QVElPTkFMIiBpbiB0aGlzCiAgIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyBkZXNjcmliZWQgaW4gUkZDIDIxMTkgW0tFWVdPUkRTXS4KCgozLiAgIElEM3YyIG92ZXJ2aWV3CgogICBJRDN2MiBpcyBhIGdlbmVyYWwgdGFnZ2luZyBmb3JtYXQgZm9yIGF1ZGlvLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZQogICB0byBzdG9yZSBtZXRhIGRhdGEgYWJvdXQgdGhlIGF1ZGlvIGluc2lkZSB0aGUgYXVkaW8gZmlsZSBpdHNlbGYuIFRoZQogICBJRDMgdGFnIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50IGlzIG1haW5seSB0YXJnZXRlZCBhdCBmaWxlcwogICBlbmNvZGVkIHdpdGggTVBFRy0xLzIgbGF5ZXIgSSwgTVBFRy0xLzIgbGF5ZXIgSUksIE1QRUctMS8yIGxheWVyIElJSQogICBhbmQgTVBFRy0yLjUsIGJ1dCBtYXkgd29yayB3aXRoIG90aGVyIHR5cGVzIG9mIGVuY29kZWQgYXVkaW8gb3IgYXMgYQogICBzdGFuZCBhbG9uZSBmb3JtYXQgZm9yIGF1ZGlvIG1ldGEgZGF0YS4KCiAgIElEM3YyIGlzIGRlc2lnbmVkIHRvIGJlIGFzIGZsZXhpYmxlIGFuZCBleHBhbmRhYmxlIGFzIHBvc3NpYmxlIHRvCiAgIG1lZXQgbmV3IG1ldGEgaW5mb3JtYXRpb24gbmVlZHMgdGhhdCBtaWdodCBhcmlzZS4gVG8gYWNoaWV2ZSB0aGF0CiAgIElEM3YyIGlzIGNvbnN0cnVjdGVkIGFzIGEgY29udGFpbmVyIGZvciBzZXZlcmFsIGluZm9ybWF0aW9uIGJsb2NrcywKICAgY2FsbGVkIGZyYW1lcywgd2hvc2UgZm9ybWF0IG5lZWQgbm90IGJlIGtub3duIHRvIHRoZSBzb2Z0d2FyZSB0aGF0CiAgIGVuY291bnRlcnMgdGhlbS4gQXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IGZyYW1lIGlzIGFuIHVuaXF1ZSBhbmQKICAgcHJlZGVmaW5lZCBpZGVudGlmaWVyLCBhIHNpemUgZGVzY3JpcHRvciB0aGF0IGFsbG93cyBzb2Z0d2FyZSB0byBza2lwCiAgIHVua25vd24gZnJhbWVzIGFuZCBhIGZsYWdzIGZpZWxkLiBUaGUgZmxhZ3MgZGVzY3JpYmVzIGVuY29kaW5nCiAgIGRldGFpbHMgYW5kIGlmIHRoZSBmcmFtZSBzaG91bGQgcmVtYWluIGluIHRoZSB0YWcsIHNob3VsZCBpdCBiZQogICB1bmtub3duIHRvIHRoZSBzb2Z0d2FyZSwgaWYgdGhlIGZpbGUgaXMgYWx0ZXJlZC4KCiAgIFRoZSBiaXRvcmRlciBpbiBJRDN2MiBpcyBtb3N0IHNpZ25pZmljYW50IGJpdCBmaXJzdCAoTVNCKS4gVGhlCiAgIGJ5dGVvcmRlciBpbiBtdWx0aWJ5dGUgbnVtYmVycyBpcyBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGUuZy4KICAgJDEyMzQ1Njc4IHdvdWxkIGJlIGVuY29kZWQgJDEyIDM0IDU2IDc4KSwgYWxzbyBrbm93biBhcyBiaWcgZW5kaWFuCiAgIGFuZCBuZXR3b3JrIGJ5dGUgb3JkZXIuCgogICBPdmVyYWxsIHRhZyBzdHJ1Y3R1cmU6CgogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgICB8ICAgICAgSGVhZGVyICgxMCBieXRlcykgICAgICB8CiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgIHwgICAgICAgRXh0ZW5kZWQgSGVhZGVyICAgICAgIHwKICAgICB8ICh2YXJpYWJsZSBsZW5ndGgsIE9QVElPTkFMKSB8CiAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgIHwgICBGcmFtZXMgKHZhcmlhYmxlIGxlbmd0aCkgIHwKICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAgfCAgICAgICAgICAgUGFkZGluZyAgICAgICAgICAgfAogICAgIHwgKHZhcmlhYmxlIGxlbmd0aCwgT1BUSU9OQUwpIHwKICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICAgfCBGb290ZXIgKDEwIGJ5dGVzLCBPUFRJT05BTCkgfAogICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCiAgIEluIGdlbmVyYWwsIHBhZGRpbmcgYW5kIGZvb3RlciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiBTZWUgZGV0YWlscyBpbgogICBzZWN0aW9ucyAzLjMsIDMuNCBhbmQgNS4KCgozLjEuICAgSUQzdjIgaGVhZGVyCgogICBUaGUgZmlyc3QgcGFydCBvZiB0aGUgSUQzdjIgdGFnIGlzIHRoZSAxMCBieXRlIHRhZyBoZWFkZXIsIGxhaWQgb3V0CiAgIGFzIGZvbGxvd3M6CgogICAgIElEM3YyL2ZpbGUgaWRlbnRpZmllciAgICAgICJJRDMiCiAgICAgSUQzdjIgdmVyc2lvbiAgICAgICAgICAgICAgJDA0IDAwCiAgICAgSUQzdjIgZmxhZ3MgICAgICAgICAgICAgICAgJWFiY2QwMDAwCiAgICAgSUQzdjIgc2l6ZSAgICAgICAgICAgICA0ICogJTB4eHh4eHh4CgogICBUaGUgZmlyc3QgdGhyZWUgYnl0ZXMgb2YgdGhlIHRhZyBhcmUgYWx3YXlzICJJRDMiLCB0byBpbmRpY2F0ZSB0aGF0CiAgIHRoaXMgaXMgYW4gSUQzdjIgdGFnLCBkaXJlY3RseSBmb2xsb3dlZCBieSB0aGUgdHdvIHZlcnNpb24gYnl0ZXMuIFRoZQogICBmaXJzdCBieXRlIG9mIElEM3YyIHZlcnNpb24gaXMgaXRzIG1ham9yIHZlcnNpb24sIHdoaWxlIHRoZSBzZWNvbmQKICAgYnl0ZSBpcyBpdHMgcmV2aXNpb24gbnVtYmVyLiBJbiB0aGlzIGNhc2UgdGhpcyBpcyBJRDN2Mi40LjAuIEFsbAogICByZXZpc2lvbnMgYXJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdoaWxlIG1ham9yIHZlcnNpb25zIGFyZSBub3QuIElmCiAgIHNvZnR3YXJlIHdpdGggSUQzdjIuNC4wIGFuZCBiZWxvdyBzdXBwb3J0IHNob3VsZCBlbmNvdW50ZXIgdmVyc2lvbgogICBmaXZlIG9yIGhpZ2hlciBpdCBzaG91bGQgc2ltcGx5IGlnbm9yZSB0aGUgd2hvbGUgdGFnLiBWZXJzaW9uIG9yCiAgIHJldmlzaW9uIHdpbGwgbmV2ZXIgYmUgJEZGLgoKICAgVGhlIHZlcnNpb24gaXMgZm9sbG93ZWQgYnkgdGhlIElEM3YyIGZsYWdzIGZpZWxkLCBvZiB3aGljaCBjdXJyZW50bHkKICAgZm91ciBmbGFncyBhcmUgdXNlZC4KCgogICBhIC0gVW5zeW5jaHJvbmlzYXRpb24KCiAgICAgQml0IDcgaW4gdGhlICdJRDN2MiBmbGFncycgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90CiAgICAgdW5zeW5jaHJvbmlzYXRpb24gaXMgYXBwbGllZCBvbiBhbGwgZnJhbWVzIChzZWUgc2VjdGlvbiA2LjEgZm9yCiAgICAgZGV0YWlscyk7IGEgc2V0IGJpdCBpbmRpY2F0ZXMgdXNhZ2UuCgoKICAgYiAtIEV4dGVuZGVkIGhlYWRlcgoKICAgICBUaGUgc2Vjb25kIGJpdCAoYml0IDYpIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgaGVhZGVyIGlzCiAgICAgZm9sbG93ZWQgYnkgYW4gZXh0ZW5kZWQgaGVhZGVyLiBUaGUgZXh0ZW5kZWQgaGVhZGVyIGlzIGRlc2NyaWJlZCBpbgogICAgIHNlY3Rpb24gMy4yLiBBIHNldCBiaXQgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiBhbiBleHRlbmRlZAogICAgIGhlYWRlci4KCgogICBjIC0gRXhwZXJpbWVudGFsIGluZGljYXRvcgoKICAgICBUaGUgdGhpcmQgYml0IChiaXQgNSkgaXMgdXNlZCBhcyBhbiAnZXhwZXJpbWVudGFsIGluZGljYXRvcicuIFRoaXMKICAgICBmbGFnIFNIQUxMIGFsd2F5cyBiZSBzZXQgd2hlbiB0aGUgdGFnIGlzIGluIGFuIGV4cGVyaW1lbnRhbCBzdGFnZS4KCgogICBkIC0gRm9vdGVyIHByZXNlbnQKCiAgICAgQml0IDQgaW5kaWNhdGVzIHRoYXQgYSBmb290ZXIgKHNlY3Rpb24gMy40KSBpcyBwcmVzZW50IGF0IHRoZSB2ZXJ5CiAgICAgZW5kIG9mIHRoZSB0YWcuIEEgc2V0IGJpdCBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIGEgZm9vdGVyLgoKCiAgIEFsbCB0aGUgb3RoZXIgZmxhZ3MgTVVTVCBiZSBjbGVhcmVkLiBJZiBvbmUgb2YgdGhlc2UgdW5kZWZpbmVkIGZsYWdzCiAgIGFyZSBzZXQsIHRoZSB0YWcgbWlnaHQgbm90IGJlIHJlYWRhYmxlIGZvciBhIHBhcnNlciB0aGF0IGRvZXMgbm90CiAgIGtub3cgdGhlIGZsYWdzIGZ1bmN0aW9uLgoKICAgVGhlIElEM3YyIHRhZyBzaXplIGlzIHN0b3JlZCBhcyBhIDMyIGJpdCBzeW5jaHNhZmUgaW50ZWdlciAoc2VjdGlvbgogICA2LjIpLCBtYWtpbmcgYSB0b3RhbCBvZiAyOCBlZmZlY3RpdmUgYml0cyAocmVwcmVzZW50aW5nIHVwIHRvIDI1Nk1CKS4KCiAgIFRoZSBJRDN2MiB0YWcgc2l6ZSBpcyB0aGUgc3VtIG9mIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgZXh0ZW5kZWQKICAgaGVhZGVyLCB0aGUgcGFkZGluZyBhbmQgdGhlIGZyYW1lcyBhZnRlciB1bnN5bmNocm9uaXNhdGlvbi4gSWYgYQogICBmb290ZXIgaXMgcHJlc2VudCB0aGlzIGVxdWFscyB0byAoJ3RvdGFsIHNpemUnIC0gMjApIGJ5dGVzLCBvdGhlcndpc2UKICAgKCd0b3RhbCBzaXplJyAtIDEwKSBieXRlcy4KCiAgIEFuIElEM3YyIHRhZyBjYW4gYmUgZGV0ZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhdHRlcm46CiAgICAgJDQ5IDQ0IDMzIHl5IHl5IHh4IHp6IHp6IHp6IHp6CiAgIFdoZXJlIHl5IGlzIGxlc3MgdGhhbiAkRkYsIHh4IGlzIHRoZSAnZmxhZ3MnIGJ5dGUgYW5kIHp6IGlzIGxlc3MgdGhhbgogICAkODAuCgoKMy4yLiBFeHRlbmRlZCBoZWFkZXIKCiAgIFRoZSBleHRlbmRlZCBoZWFkZXIgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBjYW4gcHJvdmlkZSBmdXJ0aGVyCiAgIGluc2lnaHQgaW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUgdGFnLCBidXQgaXMgbm90IHZpdGFsIHRvIHRoZSBjb3JyZWN0CiAgIHBhcnNpbmcgb2YgdGhlIHRhZyBpbmZvcm1hdGlvbjsgaGVuY2UgdGhlIGV4dGVuZGVkIGhlYWRlciBpcwogICBvcHRpb25hbC4KCiAgICAgRXh0ZW5kZWQgaGVhZGVyIHNpemUgICA0ICogJTB4eHh4eHh4CiAgICAgTnVtYmVyIG9mIGZsYWcgYnl0ZXMgICAgICAgJDAxCiAgICAgRXh0ZW5kZWQgRmxhZ3MgICAgICAgICAgICAgJHh4CgogICBXaGVyZSB0aGUgJ0V4dGVuZGVkIGhlYWRlciBzaXplJyBpcyB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgZXh0ZW5kZWQKICAgaGVhZGVyLCBzdG9yZWQgYXMgYSAzMiBiaXQgc3luY2hzYWZlIGludGVnZXIuIEFuIGV4dGVuZGVkIGhlYWRlciBjYW4KICAgdGh1cyBuZXZlciBoYXZlIGEgc2l6ZSBvZiBmZXdlciB0aGFuIHNpeCBieXRlcy4KCiAgIFRoZSBleHRlbmRlZCBmbGFncyBmaWVsZCwgd2l0aCBpdHMgc2l6ZSBkZXNjcmliZWQgYnkgJ251bWJlciBvZiBmbGFnCiAgIGJ5dGVzJywgaXMgZGVmaW5lZCBhczoKCiAgICAgJTBiY2QwMDAwCgogICBFYWNoIGZsYWcgdGhhdCBpcyBzZXQgaW4gdGhlIGV4dGVuZGVkIGhlYWRlciBoYXMgZGF0YSBhdHRhY2hlZCwgd2hpY2gKICAgY29tZXMgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBmbGFncyBhcmUgZW5jb3VudGVyZWQgKGkuZS4gdGhlIGRhdGEKICAgZm9yIGZsYWcgJ2InIGNvbWVzIGJlZm9yZSB0aGUgZGF0YSBmb3IgZmxhZyAnYycpLiBVbnNldCBmbGFncyBjYW5ub3QKICAgaGF2ZSBhbnkgYXR0YWNoZWQgZGF0YS4gQWxsIHVua25vd24gZmxhZ3MgTVVTVCBiZSB1bnNldCBhbmQgdGhlaXIKICAgY29ycmVzcG9uZGluZyBkYXRhIHJlbW92ZWQgd2hlbiBhIHRhZyBpcyBtb2RpZmllZC4KCiAgIEV2ZXJ5IHNldCBmbGFnJ3MgZGF0YSBzdGFydHMgd2l0aCBhIGxlbmd0aCBieXRlLCB3aGljaCBjb250YWlucyBhCiAgIHZhbHVlIGJldHdlZW4gMCBhbmQgMTI3ICgkMDAgLSAkN2YpLCBmb2xsb3dlZCBieSBkYXRhIHRoYXQgaGFzIHRoZQogICBmaWVsZCBsZW5ndGggaW5kaWNhdGVkIGJ5IHRoZSBsZW5ndGggYnl0ZS4gSWYgYSBmbGFnIGhhcyBubyBhdHRhY2hlZAogICBkYXRhLCB0aGUgdmFsdWUgJDAwIGlzIHVzZWQgYXMgbGVuZ3RoIGJ5dGUuCgoKICAgYiAtIFRhZyBpcyBhbiB1cGRhdGUKCiAgICAgSWYgdGhpcyBmbGFnIGlzIHNldCwgdGhlIHByZXNlbnQgdGFnIGlzIGFuIHVwZGF0ZSBvZiBhIHRhZyBmb3VuZAogICAgIGVhcmxpZXIgaW4gdGhlIHByZXNlbnQgZmlsZSBvciBzdHJlYW0uIElmIGZyYW1lcyBkZWZpbmVkIGFzIHVuaXF1ZQogICAgIGFyZSBmb3VuZCBpbiB0aGUgcHJlc2VudCB0YWcsIHRoZXkgYXJlIHRvIG92ZXJyaWRlIGFueQogICAgIGNvcnJlc3BvbmRpbmcgb25lcyBmb3VuZCBpbiB0aGUgZWFybGllciB0YWcuIFRoaXMgZmxhZyBoYXMgbm8KICAgICBjb3JyZXNwb25kaW5nIGRhdGEuCgogICAgICAgICBGbGFnIGRhdGEgbGVuZ3RoICAgICAgJDAwCgogICBjIC0gQ1JDIGRhdGEgcHJlc2VudAoKICAgICBJZiB0aGlzIGZsYWcgaXMgc2V0LCBhIENSQy0zMiBbSVNPLTMzMDldIGRhdGEgaXMgaW5jbHVkZWQgaW4gdGhlCiAgICAgZXh0ZW5kZWQgaGVhZGVyLiBUaGUgQ1JDIGlzIGNhbGN1bGF0ZWQgb24gYWxsIHRoZSBkYXRhIGJldHdlZW4gdGhlCiAgICAgaGVhZGVyIGFuZCBmb290ZXIgYXMgaW5kaWNhdGVkIGJ5IHRoZSBoZWFkZXIncyB0YWcgbGVuZ3RoIGZpZWxkLAogICAgIG1pbnVzIHRoZSBleHRlbmRlZCBoZWFkZXIuIE5vdGUgdGhhdCB0aGlzIGluY2x1ZGVzIHRoZSBwYWRkaW5nIChpZgogICAgIHRoZXJlIGlzIGFueSksIGJ1dCBleGNsdWRlcyB0aGUgZm9vdGVyLiBUaGUgQ1JDLTMyIGlzIHN0b3JlZCBhcyBhbgogICAgIDM1IGJpdCBzeW5jaHNhZmUgaW50ZWdlciwgbGVhdmluZyB0aGUgdXBwZXIgZm91ciBiaXRzIGFsd2F5cwogICAgIHplcm9lZC4KCiAgICAgICAgRmxhZyBkYXRhIGxlbmd0aCAgICAgICAkMDUKICAgICAgICBUb3RhbCBmcmFtZSBDUkMgICAgNSAqICUweHh4eHh4eAoKICAgZCAtIFRhZyByZXN0cmljdGlvbnMKCiAgICAgRm9yIHNvbWUgYXBwbGljYXRpb25zIGl0IG1pZ2h0IGJlIGRlc2lyZWQgdG8gcmVzdHJpY3QgYSB0YWcgaW4gbW9yZQogICAgIHdheXMgdGhhbiBpbXBvc2VkIGJ5IHRoZSBJRDN2MiBzcGVjaWZpY2F0aW9uLiBOb3RlIHRoYXQgdGhlCiAgICAgcHJlc2VuY2Ugb2YgdGhlc2UgcmVzdHJpY3Rpb25zIGRvZXMgbm90IGFmZmVjdCBob3cgdGhlIHRhZyBpcwogICAgIGRlY29kZWQsIG1lcmVseSBob3cgaXQgd2FzIHJlc3RyaWN0ZWQgYmVmb3JlIGVuY29kaW5nLiBJZiB0aGlzIGZsYWcKICAgICBpcyBzZXQgdGhlIHRhZyBpcyByZXN0cmljdGVkIGFzIGZvbGxvd3M6CgogICAgICAgIEZsYWcgZGF0YSBsZW5ndGggICAgICAgJDAxCiAgICAgICAgUmVzdHJpY3Rpb25zICAgICAgICAgICAlcHBxcnJzdHQKCiAgICAgcCAtIFRhZyBzaXplIHJlc3RyaWN0aW9ucwoKICAgICAgIDAwICAgTm8gbW9yZSB0aGFuIDEyOCBmcmFtZXMgYW5kIDEgTUIgdG90YWwgdGFnIHNpemUuCiAgICAgICAwMSAgIE5vIG1vcmUgdGhhbiA2NCBmcmFtZXMgYW5kIDEyOCBLQiB0b3RhbCB0YWcgc2l6ZS4KICAgICAgIDEwICAgTm8gbW9yZSB0aGFuIDMyIGZyYW1lcyBhbmQgNDAgS0IgdG90YWwgdGFnIHNpemUuCiAgICAgICAxMSAgIE5vIG1vcmUgdGhhbiAzMiBmcmFtZXMgYW5kIDQgS0IgdG90YWwgdGFnIHNpemUuCgogICAgIHEgLSBUZXh0IGVuY29kaW5nIHJlc3RyaWN0aW9ucwoKICAgICAgIDAgICAgTm8gcmVzdHJpY3Rpb25zCiAgICAgICAxICAgIFN0cmluZ3MgYXJlIG9ubHkgZW5jb2RlZCB3aXRoIElTTy04ODU5LTEgW0lTTy04ODU5LTFdIG9yCiAgICAgICAgICAgIFVURi04IFtVVEYtOF0uCgogICAgIHIgLSBUZXh0IGZpZWxkcyBzaXplIHJlc3RyaWN0aW9ucwoKICAgICAgIDAwICAgTm8gcmVzdHJpY3Rpb25zCiAgICAgICAwMSAgIE5vIHN0cmluZyBpcyBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMuCiAgICAgICAxMCAgIE5vIHN0cmluZyBpcyBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycy4KICAgICAgIDExICAgTm8gc3RyaW5nIGlzIGxvbmdlciB0aGFuIDMwIGNoYXJhY3RlcnMuCgogICAgICAgTm90ZSB0aGF0IG5vdGhpbmcgaXMgc2FpZCBhYm91dCBob3cgbWFueSBieXRlcyBpcyB1c2VkIHRvCiAgICAgICByZXByZXNlbnQgdGhvc2UgY2hhcmFjdGVycywgc2luY2UgaXQgaXMgZW5jb2RpbmcgZGVwZW5kZW50LiBJZiBhCiAgICAgICB0ZXh0IGZyYW1lIGNvbnNpc3RzIG9mIG1vcmUgdGhhbiBvbmUgc3RyaW5nLCB0aGUgc3VtIG9mIHRoZQogICAgICAgc3RydW5ncyBpcyByZXN0cmljdGVkIGFzIHN0YXRlZC4KCiAgICAgcyAtIEltYWdlIGVuY29kaW5nIHJlc3RyaWN0aW9ucwoKICAgICAgIDAgICBObyByZXN0cmljdGlvbnMKICAgICAgIDEgICBJbWFnZXMgYXJlIGVuY29kZWQgb25seSB3aXRoIFBORyBbUE5HXSBvciBKUEVHIFtKRklGXS4KCiAgICAgdCAtIEltYWdlIHNpemUgcmVzdHJpY3Rpb25zCgogICAgICAgMDAgIE5vIHJlc3RyaWN0aW9ucwogICAgICAgMDEgIEFsbCBpbWFnZXMgYXJlIDI1NngyNTYgcGl4ZWxzIG9yIHNtYWxsZXIuCiAgICAgICAxMCAgQWxsIGltYWdlcyBhcmUgNjR4NjQgcGl4ZWxzIG9yIHNtYWxsZXIuCiAgICAgICAxMSAgQWxsIGltYWdlcyBhcmUgZXhhY3RseSA2NHg2NCBwaXhlbHMsIHVubGVzcyByZXF1aXJlZAogICAgICAgICAgIG90aGVyd2lzZS4KCgozLjMuICAgUGFkZGluZwoKICAgSXQgaXMgT1BUSU9OQUwgdG8gaW5jbHVkZSBwYWRkaW5nIGFmdGVyIHRoZSBmaW5hbCBmcmFtZSAoYXQgdGhlIGVuZAogICBvZiB0aGUgSUQzIHRhZyksIG1ha2luZyB0aGUgc2l6ZSBvZiBhbGwgdGhlIGZyYW1lcyB0b2dldGhlciBzbWFsbGVyCiAgIHRoYW4gdGhlIHNpemUgZ2l2ZW4gaW4gdGhlIHRhZyBoZWFkZXIuIEEgcG9zc2libGUgcHVycG9zZSBvZiB0aGlzCiAgIHBhZGRpbmcgaXMgdG8gYWxsb3cgZm9yIGFkZGluZyBhIGZldyBhZGRpdGlvbmFsIGZyYW1lcyBvciBlbmxhcmdlCiAgIGV4aXN0aW5nIGZyYW1lcyB3aXRoaW4gdGhlIHRhZyB3aXRob3V0IGhhdmluZyB0byByZXdyaXRlIHRoZSBlbnRpcmUKICAgZmlsZS4gVGhlIHZhbHVlIG9mIHRoZSBwYWRkaW5nIGJ5dGVzIG11c3QgYmUgJDAwLiBBIHRhZyBNVVNUIE5PVCBoYXZlCiAgIGFueSBwYWRkaW5nIGJldHdlZW4gdGhlIGZyYW1lcyBvciBiZXR3ZWVuIHRoZSB0YWcgaGVhZGVyIGFuZCB0aGUKICAgZnJhbWVzLiBGdXJ0aGVybW9yZSBpdCBNVVNUIE5PVCBoYXZlIGFueSBwYWRkaW5nIHdoZW4gYSB0YWcgZm9vdGVyIGlzCiAgIGFkZGVkIHRvIHRoZSB0YWcuCgoKMy40LiAgIElEM3YyIGZvb3RlcgoKICAgVG8gc3BlZWQgdXAgdGhlIHByb2Nlc3Mgb2YgbG9jYXRpbmcgYW4gSUQzdjIgdGFnIHdoZW4gc2VhcmNoaW5nIGZyb20KICAgdGhlIGVuZCBvZiBhIGZpbGUsIGEgZm9vdGVyIGNhbiBiZSBhZGRlZCB0byB0aGUgdGFnLiBJdCBpcyBSRVFVSVJFRAogICB0byBhZGQgYSBmb290ZXIgdG8gYW4gYXBwZW5kZWQgdGFnLCBpLmUuIGEgdGFnIGxvY2F0ZWQgYWZ0ZXIgYWxsCiAgIGF1ZGlvIGRhdGEuIFRoZSBmb290ZXIgaXMgYSBjb3B5IG9mIHRoZSBoZWFkZXIsIGJ1dCB3aXRoIGEgZGlmZmVyZW50CiAgIGlkZW50aWZpZXIuCgogICAgIElEM3YyIGlkZW50aWZpZXIgICAgICAgICAgICIzREkiCiAgICAgSUQzdjIgdmVyc2lvbiAgICAgICAgICAgICAgJDA0IDAwCiAgICAgSUQzdjIgZmxhZ3MgICAgICAgICAgICAgICAgJWFiY2QwMDAwCiAgICAgSUQzdjIgc2l6ZSAgICAgICAgICAgICA0ICogJTB4eHh4eHh4CgoKNC4gICBJRDN2MiBmcmFtZSBvdmVydmlldwoKICAgQWxsIElEM3YyIGZyYW1lcyBjb25zaXN0cyBvZiBvbmUgZnJhbWUgaGVhZGVyIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlCiAgIGZpZWxkcyBjb250YWluaW5nIHRoZSBhY3R1YWwgaW5mb3JtYXRpb24uIFRoZSBoZWFkZXIgaXMgYWx3YXlzIDEwCiAgIGJ5dGVzIGFuZCBsYWlkIG91dCBhcyBmb2xsb3dzOgoKICAgICBGcmFtZSBJRCAgICAgICR4eCB4eCB4eCB4eCAgKGZvdXIgY2hhcmFjdGVycykKICAgICBTaXplICAgICAgNCAqICUweHh4eHh4eAogICAgIEZsYWdzICAgICAgICAgJHh4IHh4CgogICBUaGUgZnJhbWUgSUQgaXMgbWFkZSBvdXQgb2YgdGhlIGNoYXJhY3RlcnMgY2FwaXRhbCBBLVogYW5kIDAtOS4KICAgSWRlbnRpZmllcnMgYmVnaW5uaW5nIHdpdGggIlgiLCAiWSIgYW5kICJaIiBhcmUgZm9yIGV4cGVyaW1lbnRhbAogICBmcmFtZXMgYW5kIGZyZWUgZm9yIGV2ZXJ5b25lIHRvIHVzZSwgd2l0aG91dCB0aGUgbmVlZCB0byBzZXQgdGhlCiAgIGV4cGVyaW1lbnRhbCBiaXQgaW4gdGhlIHRhZyBoZWFkZXIuIEJlYXIgaW4gbWluZCB0aGF0IHNvbWVvbmUgZWxzZQogICBtaWdodCBoYXZlIHVzZWQgdGhlIHNhbWUgaWRlbnRpZmllciBhcyB5b3UuIEFsbCBvdGhlciBpZGVudGlmaWVycyBhcmUKICAgZWl0aGVyIHVzZWQgb3IgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCgogICBUaGUgZnJhbWUgSUQgaXMgZm9sbG93ZWQgYnkgYSBzaXplIGRlc2NyaXB0b3IgY29udGFpbmluZyB0aGUgc2l6ZSBvZgogICB0aGUgZGF0YSBpbiB0aGUgZmluYWwgZnJhbWUsIGFmdGVyIGVuY3J5cHRpb24sIGNvbXByZXNzaW9uIGFuZAogICB1bnN5bmNocm9uaXNhdGlvbi4gVGhlIHNpemUgaXMgZXhjbHVkaW5nIHRoZSBmcmFtZSBoZWFkZXIgKCd0b3RhbAogICBmcmFtZSBzaXplJyAtIDEwIGJ5dGVzKSBhbmQgc3RvcmVkIGFzIGEgMzIgYml0IHN5bmNoc2FmZSBpbnRlZ2VyLgoKICAgSW4gdGhlIGZyYW1lIGhlYWRlciB0aGUgc2l6ZSBkZXNjcmlwdG9yIGlzIGZvbGxvd2VkIGJ5IHR3byBmbGFnCiAgIGJ5dGVzLiBUaGVzZSBmbGFncyBhcmUgZGVzY3JpYmVkIGluIHNlY3Rpb24gNC4xLgoKICAgVGhlcmUgaXMgbm8gZml4ZWQgb3JkZXIgb2YgdGhlIGZyYW1lcycgYXBwZWFyYW5jZSBpbiB0aGUgdGFnLAogICBhbHRob3VnaCBpdCBpcyBkZXNpcmVkIHRoYXQgdGhlIGZyYW1lcyBhcmUgYXJyYW5nZWQgaW4gb3JkZXIgb2YKICAgc2lnbmlmaWNhbmNlIGNvbmNlcm5pbmcgdGhlIHJlY29nbml0aW9uIG9mIHRoZSBmaWxlLiBBbiBleGFtcGxlIG9mCiAgIHN1Y2ggb3JkZXI6IFVGSUQsIFRJVDIsIE1DREksIFRSQ0sgLi4uCgogICBBIHRhZyBNVVNUIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGZyYW1lLiBBIGZyYW1lIG11c3QgYmUgYXQgbGVhc3QgMQogICBieXRlIGJpZywgZXhjbHVkaW5nIHRoZSBoZWFkZXIuCgogICBJZiBub3RoaW5nIGVsc2UgaXMgc2FpZCwgc3RyaW5ncywgaW5jbHVkaW5nIG51bWVyaWMgc3RyaW5ncyBhbmQgVVJMcwogICBbVVJMXSwgYXJlIHJlcHJlc2VudGVkIGFzIElTTy04ODU5LTEgW0lTTy04ODU5LTFdIGNoYXJhY3RlcnMgaW4gdGhlCiAgIHJhbmdlICQyMCAtICRGRi4gU3VjaCBzdHJpbmdzIGFyZSByZXByZXNlbnRlZCBpbiBmcmFtZSBkZXNjcmlwdGlvbnMKICAgYXMgPHRleHQgc3RyaW5nPiwgb3IgPGZ1bGwgdGV4dCBzdHJpbmc+IGlmIG5ld2xpbmVzIGFyZSBhbGxvd2VkLiBJZgogICBub3RoaW5nIGVsc2UgaXMgc2FpZCBuZXdsaW5lIGNoYXJhY3RlciBpcyBmb3JiaWRkZW4uIEluIElTTy04ODU5LTEgYQogICBuZXdsaW5lIGlzIHJlcHJlc2VudGVkLCB3aGVuIGFsbG93ZWQsIHdpdGggJDBBIG9ubHkuCgogICBGcmFtZXMgdGhhdCBhbGxvdyBkaWZmZXJlbnQgdHlwZXMgb2YgdGV4dCBlbmNvZGluZyBjb250YWlucyBhIHRleHQKICAgZW5jb2RpbmcgZGVzY3JpcHRpb24gYnl0ZS4gUG9zc2libGUgZW5jb2RpbmdzOgoKICAgICAkMDAgICBJU08tODg1OS0xIFtJU08tODg1OS0xXS4gVGVybWluYXRlZCB3aXRoICQwMC4KICAgICAkMDEgICBVVEYtMTYgW1VURi0xNl0gZW5jb2RlZCBVbmljb2RlIFtVTklDT0RFXSB3aXRoIEJPTS4gQWxsCiAgICAgICAgICAgc3RyaW5ncyBpbiB0aGUgc2FtZSBmcmFtZSBTSEFMTCBoYXZlIHRoZSBzYW1lIGJ5dGVvcmRlci4KICAgICAgICAgICBUZXJtaW5hdGVkIHdpdGggJDAwIDAwLgogICAgICQwMiAgIFVURi0xNkJFIFtVVEYtMTZdIGVuY29kZWQgVW5pY29kZSBbVU5JQ09ERV0gd2l0aG91dCBCT00uCiAgICAgICAgICAgVGVybWluYXRlZCB3aXRoICQwMCAwMC4KICAgICAkMDMgICBVVEYtOCBbVVRGLThdIGVuY29kZWQgVW5pY29kZSBbVU5JQ09ERV0uIFRlcm1pbmF0ZWQgd2l0aCAkMDAuCgogICBTdHJpbmdzIGRlcGVuZGVudCBvbiBlbmNvZGluZyBhcmUgcmVwcmVzZW50ZWQgaW4gZnJhbWUgZGVzY3JpcHRpb25zCiAgIGFzIDx0ZXh0IHN0cmluZyBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+LCBvciA8ZnVsbCB0ZXh0IHN0cmluZwogICBhY2NvcmRpbmcgdG8gZW5jb2Rpbmc+IGlmIG5ld2xpbmVzIGFyZSBhbGxvd2VkLiBBbnkgZW1wdHkgc3RyaW5ncyBvZgogICB0eXBlICQwMSB3aGljaCBhcmUgTlVMTC10ZXJtaW5hdGVkIG1heSBoYXZlIHRoZSBVbmljb2RlIEJPTSBmb2xsb3dlZAogICBieSBhIFVuaWNvZGUgTlVMTCAoJEZGIEZFIDAwIDAwIG9yICRGRSBGRiAwMCAwMCkuCgogICBUaGUgdGltZXN0YW1wIGZpZWxkcyBhcmUgYmFzZWQgb24gYSBzdWJzZXQgb2YgSVNPIDg2MDEuIFdoZW4gYmVpbmcgYXMKICAgcHJlY2lzZSBhcyBwb3NzaWJsZSB0aGUgZm9ybWF0IG9mIGEgdGltZSBzdHJpbmcgaXMKICAgeXl5eS1NTS1kZFRISDptbTpzcyAoeWVhciwgIi0iLCBtb250aCwgIi0iLCBkYXksICJUIiwgaG91ciAob3V0IG9mCiAgIDI0KSwgIjoiLCBtaW51dGVzLCAiOiIsIHNlY29uZHMpLCBidXQgdGhlIHByZWNpc2lvbiBtYXkgYmUgcmVkdWNlZCBieQogICByZW1vdmluZyBhcyBtYW55IHRpbWUgaW5kaWNhdG9ycyBhcyB3YW50ZWQuIEhlbmNlIHZhbGlkIHRpbWVzdGFtcHMKICAgYXJlCiAgIHl5eXksIHl5eXktTU0sIHl5eXktTU0tZGQsIHl5eXktTU0tZGRUSEgsIHl5eXktTU0tZGRUSEg6bW0gYW5kCiAgIHl5eXktTU0tZGRUSEg6bW06c3MuIEFsbCB0aW1lIHN0YW1wcyBhcmUgVVRDLiBGb3IgZHVyYXRpb25zLCB1c2UKICAgdGhlIHNsYXNoIGNoYXJhY3RlciBhcyBkZXNjcmliZWQgaW4gODYwMSwgYW5kIGZvciBtdWx0aXBsZSBub24tCiAgIGNvbnRpZ3VvdXMgZGF0ZXMsIHVzZSBtdWx0aXBsZSBzdHJpbmdzLCBpZiBhbGxvd2VkIGJ5IHRoZSBmcmFtZQogICBkZWZpbml0aW9uLgoKICAgVGhlIHRocmVlIGJ5dGUgbGFuZ3VhZ2UgZmllbGQsIHByZXNlbnQgaW4gc2V2ZXJhbCBmcmFtZXMsIGlzIHVzZWQgdG8KICAgZGVzY3JpYmUgdGhlIGxhbmd1YWdlIG9mIHRoZSBmcmFtZSdzIGNvbnRlbnQsIGFjY29yZGluZyB0byBJU08tNjM5LTIKICAgW0lTTy02MzktMl0uIFRoZSBsYW5ndWFnZSBzaG91bGQgYmUgcmVwcmVzZW50ZWQgaW4gbG93ZXIgY2FzZS4gSWYgdGhlCiAgIGxhbmd1YWdlIGlzIG5vdCBrbm93biB0aGUgc3RyaW5nICJYWFgiIHNob3VsZCBiZSB1c2VkLgoKICAgQWxsIFVSTHMgW1VSTF0gTUFZIGJlIHJlbGF0aXZlLCBlLmcuICJwaWN0dXJlLnBuZyIsICIuLi9kb2MudHh0Ii4KCiAgIElmIGEgZnJhbWUgaXMgbG9uZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLCBlLmcuIGhhdmluZyBtb3JlIGZpZWxkcyB0aGFuCiAgIHNwZWNpZmllZCBpbiB0aGlzIGRvY3VtZW50LCB0aGF0IGluZGljYXRlcyB0aGF0IGFkZGl0aW9ucyB0byB0aGUKICAgZnJhbWUgaGF2ZSBiZWVuIG1hZGUgaW4gYSBsYXRlciB2ZXJzaW9uIG9mIHRoZSBJRDN2MiBzdGFuZGFyZC4gVGhpcwogICBpcyByZWZsZWN0ZWQgYnkgdGhlIHJldmlzaW9uIG51bWJlciBpbiB0aGUgaGVhZGVyIG9mIHRoZSB0YWcuCgoKNC4xLiAgIEZyYW1lIGhlYWRlciBmbGFncwoKICAgSW4gdGhlIGZyYW1lIGhlYWRlciB0aGUgc2l6ZSBkZXNjcmlwdG9yIGlzIGZvbGxvd2VkIGJ5IHR3byBmbGFnCiAgIGJ5dGVzLiBBbGwgdW51c2VkIGZsYWdzIE1VU1QgYmUgY2xlYXJlZC4gVGhlIGZpcnN0IGJ5dGUgaXMgZm9yCiAgICdzdGF0dXMgbWVzc2FnZXMnIGFuZCB0aGUgc2Vjb25kIGJ5dGUgaXMgYSBmb3JtYXQgZGVzY3JpcHRpb24uIElmIGFuCiAgIHVua25vd24gZmxhZyBpcyBzZXQgaW4gdGhlIGZpcnN0IGJ5dGUgdGhlIGZyYW1lIE1VU1QgTk9UIGJlIGNoYW5nZWQKICAgd2l0aG91dCB0aGF0IGJpdCBjbGVhcmVkLiBJZiBhbiB1bmtub3duIGZsYWcgaXMgc2V0IGluIHRoZSBzZWNvbmQKICAgYnl0ZSB0aGUgZnJhbWUgaXMgbGlrZWx5IHRvIG5vdCBiZSByZWFkYWJsZS4gU29tZSBmbGFncyBpbiB0aGUgc2Vjb25kCiAgIGJ5dGUgaW5kaWNhdGVzIHRoYXQgZXh0cmEgaW5mb3JtYXRpb24gaXMgYWRkZWQgdG8gdGhlIGhlYWRlci4gVGhlc2UKICAgZmllbGRzIG9mIGV4dHJhIGluZm9ybWF0aW9uIGlzIG9yZGVyZWQgYXMgdGhlIGZsYWdzIHRoYXQgaW5kaWNhdGVzCiAgIHRoZW0uIFRoZSBmbGFncyBmaWVsZCBpcyBkZWZpbmVkIGFzIGZvbGxvd3MgKGwgYW5kIG8gbGVmdCBvdXQgYmVjYXVzZQogICB0aGVpciByZXNlbWJsZW5jZSB0byBvbmUgYW5kIHplcm8pOgoKICAgICAlMGFiYzAwMDAgJTBoMDBrbW5wCgogICBTb21lIGZyYW1lIGZvcm1hdCBmbGFncyBpbmRpY2F0ZSB0aGF0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZmllbGRzCiAgIGFyZSBhZGRlZCB0byB0aGUgZnJhbWUuIFRoaXMgaW5mb3JtYXRpb24gaXMgYWRkZWQgYWZ0ZXIgdGhlIGZyYW1lCiAgIGhlYWRlciBhbmQgYmVmb3JlIHRoZSBmcmFtZSBkYXRhIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBmbGFncyB0aGF0CiAgIGluZGljYXRlcyB0aGVtLiBJLmUuIHRoZSBmb3VyIGJ5dGVzIG9mIGRlY29tcHJlc3NlZCBzaXplIHdpbGwgcHJlY2VkZQogICB0aGUgZW5jcnlwdGlvbiBtZXRob2QgYnl0ZS4gVGhlc2UgYWRkaXRpb25zIGFmZmVjdHMgdGhlICdmcmFtZSBzaXplJwogICBmaWVsZCwgYnV0IGFyZSBub3Qgc3ViamVjdCB0byBlbmNyeXB0aW9uIG9yIGNvbXByZXNzaW9uLgogICAKICAgVGhlIGRlZmF1bHQgc3RhdHVzIGZsYWdzIHNldHRpbmcgZm9yIGEgZnJhbWUgaXMsIHVubGVzcyBzdGF0ZWQKICAgb3RoZXJ3aXNlLCAncHJlc2VydmVkIGlmIHRhZyBpcyBhbHRlcmVkJyBhbmQgJ3ByZXNlcnZlZCBpZiBmaWxlIGlzCiAgIGFsdGVyZWQnLCBpLmUuICUwMDAwMDAwMC4KCgo0LjEuMS4gRnJhbWUgc3RhdHVzIGZsYWdzCgogICBhIC0gVGFnIGFsdGVyIHByZXNlcnZhdGlvbgoKICAgICBUaGlzIGZsYWcgdGVsbHMgdGhlIHRhZyBwYXJzZXIgd2hhdCB0byBkbyB3aXRoIHRoaXMgZnJhbWUgaWYgaXQgaXMKICAgICB1bmtub3duIGFuZCB0aGUgdGFnIGlzIGFsdGVyZWQgaW4gYW55IHdheS4gVGhpcyBhcHBsaWVzIHRvIGFsbAogICAgIGtpbmRzIG9mIGFsdGVyYXRpb25zLCBpbmNsdWRpbmcgYWRkaW5nIG1vcmUgcGFkZGluZyBhbmQgcmVvcmRlcmluZwogICAgIHRoZSBmcmFtZXMuCgogICAgIDAgICAgIEZyYW1lIHNob3VsZCBiZSBwcmVzZXJ2ZWQuCiAgICAgMSAgICAgRnJhbWUgc2hvdWxkIGJlIGRpc2NhcmRlZC4KCgogICBiIC0gRmlsZSBhbHRlciBwcmVzZXJ2YXRpb24KCiAgICAgVGhpcyBmbGFnIHRlbGxzIHRoZSB0YWcgcGFyc2VyIHdoYXQgdG8gZG8gd2l0aCB0aGlzIGZyYW1lIGlmIGl0IGlzCiAgICAgdW5rbm93biBhbmQgdGhlIGZpbGUsIGV4Y2x1ZGluZyB0aGUgdGFnLCBpcyBhbHRlcmVkLiBUaGlzIGRvZXMgbm90CiAgICAgYXBwbHkgd2hlbiB0aGUgYXVkaW8gaXMgY29tcGxldGVseSByZXBsYWNlZCB3aXRoIG90aGVyIGF1ZGlvIGRhdGEuCgogICAgIDAgICAgIEZyYW1lIHNob3VsZCBiZSBwcmVzZXJ2ZWQuCiAgICAgMSAgICAgRnJhbWUgc2hvdWxkIGJlIGRpc2NhcmRlZC4KCgogICBjIC0gUmVhZCBvbmx5CgogICAgICBUaGlzIGZsYWcsIGlmIHNldCwgdGVsbHMgdGhlIHNvZnR3YXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mIHRoaXMKICAgICAgZnJhbWUgYXJlIGludGVuZGVkIHRvIGJlIHJlYWQgb25seS4gQ2hhbmdpbmcgdGhlIGNvbnRlbnRzIG1pZ2h0CiAgICAgIGJyZWFrIHNvbWV0aGluZywgZS5nLiBhIHNpZ25hdHVyZS4gSWYgdGhlIGNvbnRlbnRzIGFyZSBjaGFuZ2VkLAogICAgICB3aXRob3V0IGtub3dsZWRnZSBvZiB3aHkgdGhlIGZyYW1lIHdhcyBmbGFnZ2VkIHJlYWQgb25seSBhbmQKICAgICAgd2l0aG91dCB0YWtpbmcgdGhlIHByb3BlciBtZWFucyB0byBjb21wZW5zYXRlLCBlLmcuIHJlY2FsY3VsYXRpbmcKICAgICAgdGhlIHNpZ25hdHVyZSwgdGhlIGJpdCBNVVNUIGJlIGNsZWFyZWQuCgoKNC4xLjIuIEZyYW1lIGZvcm1hdCBmbGFncwoKICAgaCAtIEdyb3VwaW5nIGlkZW50aXR5CgogICAgICBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoaXMgZnJhbWUgYmVsb25ncyBpbiBhIGdyb3VwCiAgICAgIHdpdGggb3RoZXIgZnJhbWVzLiBJZiBzZXQsIGEgZ3JvdXAgaWRlbnRpZmllciBieXRlIGlzIGFkZGVkIHRvIHRoZQogICAgICBmcmFtZS4gRXZlcnkgZnJhbWUgd2l0aCB0aGUgc2FtZSBncm91cCBpZGVudGlmaWVyIGJlbG9uZ3MgdG8gdGhlCiAgICAgIHNhbWUgZ3JvdXAuCgogICAgICAwICAgICBGcmFtZSBkb2VzIG5vdCBjb250YWluIGdyb3VwIGluZm9ybWF0aW9uCiAgICAgIDEgICAgIEZyYW1lIGNvbnRhaW5zIGdyb3VwIGluZm9ybWF0aW9uCgoKICAgayAtIENvbXByZXNzaW9uCgogICAgICBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBmcmFtZSBpcyBjb21wcmVzc2VkLgogICAgICBBICdEYXRhIExlbmd0aCBJbmRpY2F0b3InIGJ5dGUgTVVTVCBiZSBpbmNsdWRlZCBpbiB0aGUgZnJhbWUuCgogICAgICAwICAgICBGcmFtZSBpcyBub3QgY29tcHJlc3NlZC4KICAgICAgMSAgICAgRnJhbWUgaXMgY29tcHJlc3NlZCB1c2luZyB6bGliIFt6bGliXSBkZWZsYXRlIG1ldGhvZC4KICAgICAgICAgICAgSWYgc2V0LCB0aGlzIHJlcXVpcmVzIHRoZSAnRGF0YSBMZW5ndGggSW5kaWNhdG9yJyBiaXQKICAgICAgICAgICAgdG8gYmUgc2V0IGFzIHdlbGwuCgoKICAgbSAtIEVuY3J5cHRpb24KICAgCiAgICAgIFRoaXMgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIGVuY3J5cHRlZC4gSWYgc2V0LAogICAgICBvbmUgYnl0ZSBpbmRpY2F0aW5nIHdpdGggd2hpY2ggbWV0aG9kIGl0IHdhcyBlbmNyeXB0ZWQgd2lsbCBiZQogICAgICBhZGRlZCB0byB0aGUgZnJhbWUuIFNlZSBkZXNjcmlwdGlvbiBvZiB0aGUgRU5DUiBmcmFtZSBmb3IgbW9yZQogICAgICBpbmZvcm1hdGlvbiBhYm91dCBlbmNyeXB0aW9uIG1ldGhvZCByZWdpc3RyYXRpb24uIEVuY3J5cHRpb24KICAgICAgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgY29tcHJlc3Npb24uIFdoZXRoZXIgb3Igbm90IHNldHRpbmcgdGhpcyBmbGFnCiAgICAgIHJlcXVpcmVzIHRoZSBwcmVzZW5jZSBvZiBhICdEYXRhIExlbmd0aCBJbmRpY2F0b3InIGRlcGVuZHMgb24gdGhlCiAgICAgIHNwZWNpZmljIGFsZ29yaXRobSB1c2VkLgoKICAgICAgMCAgICAgRnJhbWUgaXMgbm90IGVuY3J5cHRlZC4KICAgICAgMSAgICAgRnJhbWUgaXMgZW5jcnlwdGVkLgoKICAgbiAtIFVuc3luY2hyb25pc2F0aW9uCgogICAgICBUaGlzIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHVuc3luY2hyb25pc2F0aW9uIHdhcyBhcHBsaWVkCiAgICAgIHRvIHRoaXMgZnJhbWUuIFNlZSBzZWN0aW9uIDYgZm9yIGRldGFpbHMgb24gdW5zeW5jaHJvbmlzYXRpb24uCiAgICAgIElmIHRoaXMgZmxhZyBpcyBzZXQgYWxsIGRhdGEgZnJvbSB0aGUgZW5kIG9mIHRoaXMgaGVhZGVyIHRvIHRoZQogICAgICBlbmQgb2YgdGhpcyBmcmFtZSBoYXMgYmVlbiB1bnN5bmNocm9uaXNlZC4gQWx0aG91Z2ggZGVzaXJhYmxlLCB0aGUKICAgICAgcHJlc2VuY2Ugb2YgYSAnRGF0YSBMZW5ndGggSW5kaWNhdG9yJyBpcyBub3QgbWFkZSBtYW5kYXRvcnkgYnkKICAgICAgdW5zeW5jaHJvbmlzYXRpb24uCgogICAgICAwICAgICBGcmFtZSBoYXMgbm90IGJlZW4gdW5zeW5jaHJvbmlzZWQuCiAgICAgIDEgICAgIEZyYW1lIGhhcyBiZWVuIHVuc3lyY2hyb25pc2VkLgoKICAgcCAtIERhdGEgbGVuZ3RoIGluZGljYXRvcgoKICAgICAgVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IGEgZGF0YSBsZW5ndGggaW5kaWNhdG9yIGhhcyBiZWVuIGFkZGVkIHRvCiAgICAgIHRoZSBmcmFtZS4gVGhlIGRhdGEgbGVuZ3RoIGluZGljYXRvciBpcyB0aGUgdmFsdWUgb25lIHdvdWxkIHdyaXRlCiAgICAgIGFzIHRoZSAnRnJhbWUgbGVuZ3RoJyBpZiBhbGwgb2YgdGhlIGZyYW1lIGZvcm1hdCBmbGFncyB3ZXJlCiAgICAgIHplcm9lZCwgcmVwcmVzZW50ZWQgYXMgYSAzMiBiaXQgc3luY2hzYWZlIGludGVnZXIuCgogICAgICAwICAgICAgVGhlcmUgaXMgbm8gRGF0YSBMZW5ndGggSW5kaWNhdG9yLgogICAgICAxICAgICAgQSBkYXRhIGxlbmd0aCBJbmRpY2F0b3IgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIGZyYW1lLgoKCjUuICAgVGFnIGxvY2F0aW9uCgogICBUaGUgZGVmYXVsdCBsb2NhdGlvbiBvZiBhbiBJRDN2MiB0YWcgaXMgcHJlcGVuZGVkIHRvIHRoZSBhdWRpbyBzbwogICB0aGF0IHBsYXllcnMgY2FuIGJlbmVmaXQgZnJvbSB0aGUgaW5mb3JtYXRpb24gd2hlbiB0aGUgZGF0YSBpcwogICBzdHJlYW1lZC4gSXQgaXMgaG93ZXZlciBwb3NzaWJsZSB0byBhcHBlbmQgdGhlIHRhZywgb3IgbWFrZSBhCiAgIHByZXBlbmQvYXBwZW5kIGNvbWJpbmF0aW9uLiBXaGVuIGRlY2lkaW5nIHVwb24gd2hlcmUgYW4gdW5lbWJlZGRlZAogICB0YWcgc2hvdWxkIGJlIGxvY2F0ZWQsIHRoZSBmb2xsb3dpbmcgb3JkZXIgb2YgcHJlZmVyZW5jZSBTSE9VTEQgYmUKICAgY29uc2lkZXJlZC4KICAgCiAgICAgMS4gUHJlcGVuZCB0aGUgdGFnLgoKICAgICAyLiBQcmVwZW5kIGEgdGFnIHdpdGggYWxsIHZpdGFsIGluZm9ybWF0aW9uIGFuZCBhZGQgYSBzZWNvbmQgdGFnIGF0IAogICAgICAgIHRoZSBlbmQgb2YgdGhlIGZpbGUsIGJlZm9yZSB0YWdzIGZyb20gb3RoZXIgdGFnZ2luZyBzeXN0ZW1zLiBUaGUKICAgICAgICBmaXJzdCB0YWcgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIFNFRUsgZnJhbWUuCiAgICAgIAogICAgIDMuIEFkZCBhIHRhZyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBiZWZvcmUgdGFncyBmcm9tIG90aGVyIHRhZ2dpbmcKICAgICAgICBzeXN0ZW1zLgogICAgICAKICAgSW4gY2FzZSAyIGFuZCAzIHRoZSB0YWcgY2FuIHNpbXBseSBiZSBhcHBlbmRlZCBpZiBubyBvdGhlciBrbm93biB0YWdzCiAgIGFyZSBwcmVzZW50LiBUaGUgc3VnZ2VzdGVkIG1ldGhvZCB0byBmaW5kIElEM3YyIHRhZ3MgYXJlOgogICAKICAgICAxLiBMb29rIGZvciBhIHByZXBlbmRlZCB0YWcgdXNpbmcgdGhlIHBhdHRlcm4gZm91bmQgaW4gc2VjdGlvbiAzLjEuCgogICAgIDIuIElmIGEgU0VFSyBmcmFtZSB3YXMgZm91bmQsIHVzZSBpdHMgdmFsdWVzIHRvIGd1aWRlIGZ1cnRoZXIKICAgICAgICBzZWFyY2hpbmcuCgogICAgIDMuIExvb2sgZm9yIGEgdGFnIGZvb3Rlciwgc2Nhbm5pbmcgZnJvbSB0aGUgYmFjayBvZiB0aGUgZmlsZS4KCiAgIEZvciBldmVyeSBuZXcgdGFnIHRoYXQgaXMgZm91bmQsIHRoZSBvbGQgdGFnIHNob3VsZCBiZSBkaXNjYXJkZWQKICAgdW5sZXNzIHRoZSB1cGRhdGUgZmxhZyBpbiB0aGUgZXh0ZW5kZWQgaGVhZGVyIChzZWN0aW9uIDMuMikgaXMgc2V0LgogICAKCjYuICAgVW5zeW5jaHJvbmlzYXRpb24KCiAgIFRoZSBvbmx5IHB1cnBvc2Ugb2YgdW5zeW5jaHJvbmlzYXRpb24gaXMgdG8gbWFrZSB0aGUgSUQzdjIgdGFnIGFzCiAgIGNvbXBhdGlibGUgYXMgcG9zc2libGUgd2l0aCBleGlzdGluZyBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUuIFRoZXJlIGlzCiAgIG5vIHVzZSBpbiAndW5zeW5jaHJvbmlzaW5nJyB0YWdzIGlmIHRoZSBmaWxlIGlzIG9ubHkgdG8gYmUgcHJvY2Vzc2VkCiAgIG9ubHkgYnkgSUQzdjIgYXdhcmUgc29mdHdhcmUgYW5kIGhhcmR3YXJlLiBVbnN5bmNocm9uaXNhdGlvbiBpcyBvbmx5CiAgIHVzZWZ1bCB3aXRoIHRhZ3MgaW4gTVBFRyAxLzIgbGF5ZXIgSSwgSUkgYW5kIElJSSwgTVBFRyAyLjUgYW5kIEFBQwogICBmaWxlcy4KCgo2LjEuICAgVGhlIHVuc3luY2hyb25pc2F0aW9uIHNjaGVtZQoKICAgV2hlbmV2ZXIgYSBmYWxzZSBzeW5jaHJvbmlzYXRpb24gaXMgZm91bmQgd2l0aGluIHRoZSB0YWcsIG9uZSB6ZXJvZWQKICAgYnl0ZSBpcyBpbnNlcnRlZCBhZnRlciB0aGUgZmlyc3QgZmFsc2Ugc3luY2hyb25pc2F0aW9uIGJ5dGUuIFRoZQogICBmb3JtYXQgb2Ygc3luY2hyb25pc2F0aW9ucyB0aGF0IHNob3VsZCBiZSBhbHRlcmVkIGJ5IElEMyBlbmNvZGVycyBpcwogICBhcyBmb2xsb3dzOgoKICAgICAgICAgJTExMTExMTExIDExMXh4eHh4CgogICBhbmQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGg6CgogICAgICAgICAlMTExMTExMTEgMDAwMDAwMDAgMTExeHh4eHgKCiAgIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCB0aGF0IGFsbCAkRkYgMDAgY29tYmluYXRpb25zIGhhdmUgdG8gYmUKICAgYWx0ZXJlZCwgc28gdGhleSB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSB0aGUgZGVjb2RpbmcgcHJvY2Vzcy4KICAgVGhlcmVmb3JlIGFsbCB0aGUgJEZGIDAwIGNvbWJpbmF0aW9ucyBoYXZlIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlCiAgICRGRiAwMCAwMCBjb21iaW5hdGlvbiBkdXJpbmcgdGhlIHVuc3luY2hyb25pc2F0aW9uLgoKICAgVG8gaW5kaWNhdGUgdXNhZ2Ugb2YgdGhlIHVuc3luY2hyb25pc2F0aW9uLCB0aGUgdW5zeW5jaHJvbmlzYXRpb24KICAgZmxhZyBpbiB0aGUgZnJhbWUgaGVhZGVyIHNob3VsZCBiZSBzZXQuIFRoaXMgYml0IE1VU1QgYmUgc2V0IGlmIHRoZQogICBmcmFtZSB3YXMgYWx0ZXJlZCBieSB0aGUgdW5zeW5jaHJvbmlzYXRpb24gYW5kIFNIT1VMRCBOT1QgYmUgc2V0IGlmCiAgIHVuYWx0ZXJlZC4gSWYgYWxsIGZyYW1lcyBpbiB0aGUgdGFnIGFyZSB1bnN5bmNocm9uaXNlZCB0aGUKICAgdW5zeW5jaHJvbmlzYXRpb24gZmxhZyBpbiB0aGUgdGFnIGhlYWRlciBTSE9VTEQgYmUgc2V0LiBJdCBNVVNUIE5PVAogICBiZSBzZXQgaWYgdGhlIHRhZyBoYXMgYSBmcmFtZSB3aGljaCBpcyBub3QgdW5zeW5jaHJvbmlzZWQuCgogICBBc3N1bWUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGF1ZGlvIHRvIGJlICRGRi4gVGhlIHNwZWNpYWwgY2FzZSB3aGVuCiAgIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGxhc3QgZnJhbWUgaXMgJEZGIGFuZCBubyBwYWRkaW5nIG5vciBmb290ZXIgaXMKICAgdXNlZCB3aWxsIHRoZW4gaW50cm9kdWNlIGEgZmFsc2Ugc3luY2hyb25pc2F0aW9uLiBUaGlzIGNhbiBiZSBzb2x2ZWQKICAgYnkgYWRkaW5nIGEgZm9vdGVyLCBhZGRpbmcgcGFkZGluZyBvciB1bnN5bmNocm9uaXNpbmcgdGhlIGZyYW1lIGFuZAogICBhZGQgJDAwIHRvIHRoZSBlbmQgb2YgdGhlIGZyYW1lIGRhdGEsIHRodXMgYWRkaW5nIG1vcmUgYnl0ZSB0byB0aGUKICAgZnJhbWUgc2l6ZSB0aGFuIGEgbm9ybWFsIHVuc3luY2hyb25pc2F0aW9uIHdvdWxkLiBBbHRob3VnaCBub3QKICAgcHJlZmVycmVkLCBpdCBpcyBhbGxvd2VkIHRvIGFwcGx5IHRoZSBsYXN0IG1ldGhvZCBvbiBhbGwgZnJhbWVzCiAgIGVuZGluZyB3aXRoICRGRi4KCiAgIEl0IGlzIHByZWZlcnJlZCB0aGF0IHRoZSB0YWcgaXMgZWl0aGVyIGNvbXBsZXRlbHkgdW5zeW5jaHJvbmlzZWQgb3IKICAgbm90IHVuc3luY2hyb25pc2VkIGF0IGFsbC4gQSBjb21wbGV0ZWx5IHVuc3luY2hyb25pc2VkIHRhZyBoYXMgbm8gCiAgIGZhbHNlIHN5bmNob25pc2F0aW9ucyBpbiBpdCwgYXMgZGVmaW5lZCBhYm92ZSwgYW5kIGRvZXMgbm90IGVuZCB3aXRoCiAgICRGRi4gQSBjb21wbGV0ZWx5IG5vbi11bnN5bmNocm9uaXNlZCB0YWcgY29udGFpbnMgbm8gdW5zeW5jaHJvbmlzZWQKICAgZnJhbWVzLCBhbmQgdGh1cyB0aGUgdW5zeW5jaHJvbmlzYXRpb24gZmxhZyBpbiB0aGUgaGVhZGVyIGlzIGNsZWFyZWQuCgogICBEbyBiZWFyIGluIG1pbmQsIHRoYXQgaWYgY29tcHJlc3Npb24gb3IgZW5jcnlwdGlvbiBpcyB1c2VkLCB0aGUKICAgdW5zeW5jaHJvbmlzYXRpb24gc2NoZW1lIE1VU1QgYmUgYXBwbGllZCBhZnRlcndhcmRzLiBXaGVuIGRlY29kaW5nIGFuCiAgIHVuc3luY2hyb25pc2VkIGZyYW1lLCB0aGUgdW5zeW5jaHJvbmlzYXRpb24gc2NoZW1lIE1VU1QgYmUgcmV2ZXJzZWQKICAgZmlyc3QsIGVuY3J5cHRpb24gYW5kIGRlY29tcHJlc3Npb24gYWZ0ZXJ3YXJkcy4KCgo2LjIuICAgU3luY2hzYWZlIGludGVnZXJzCgogICBJbiBzb21lIHBhcnRzIG9mIHRoZSB0YWcgaXQgaXMgaW5jb252ZW5pZW50IHRvIHVzZSB0aGUKICAgdW5zeWNocm9uaXNhdGlvbiBzY2hlbWUgYmVjYXVzZSB0aGUgc2l6ZSBvZiB1bnN5bmNocm9uaXNlZCBkYXRhIGlzCiAgIG5vdCBrbm93biBpbiBhZHZhbmNlLCB3aGljaCBpcyBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2l0aCBzaXplCiAgIGRlc2NyaXB0b3JzLiBUaGUgc29sdXRpb24gaW4gSUQzdjIgaXMgdG8gdXNlIHN5bmNoc2FmZSBpbnRlZ2VycywgaW4KICAgd2hpY2ggdGhlcmUgY2FuIG5ldmVyIGJlIGFueSBmYWxzZSBzeW5jaHMuIFN5bmNoc2FmZSBpbnRlZ2VycyBhcmUKICAgaW50ZWdlcnMgdGhhdCBrZWVwIGl0cyBoaWdoZXN0IGJpdCAoYml0IDcpIHplcm9lZCwgbWFraW5nIHNldmVuIGJpdHMKICAgb3V0IG9mIGVpZ2h0IGF2YWlsYWJsZS4gVGh1cyBhIDMyIGJpdCBzeW5jaHNhZmUgaW50ZWdlciBjYW4gc3RvcmUgMjgKICAgYml0cyBvZiBpbmZvcm1hdGlvbi4KICAgCiAgIEV4YW1wbGU6CiAgIAogICAgIDI1NSAoJTExMTExMTExKSBlbmNvZGVkIGFzIGEgMTYgYml0IHN5bmNoc2FmZSBpbnRlZ2VyIGlzIDM4MwogICAgICglMDAwMDAwMDEgMDExMTExMTEpLgoKCjcuICAgQ29weXJpZ2h0CgogICBDb3B5cmlnaHQgKEMpIE1hcnRpbiBOaWxzc29uIDIwMDAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgogICBUaGlzIGRvY3VtZW50IGFuZCB0cmFuc2xhdGlvbnMgb2YgaXQgbWF5IGJlIGNvcGllZCBhbmQgZnVybmlzaGVkIHRvCiAgIG90aGVycywgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhhdCBjb21tZW50IG9uIG9yIG90aGVyd2lzZSBleHBsYWluIGl0CiAgIG9yIGFzc2lzdCBpbiBpdHMgaW1wbGVtZW50YXRpb24gbWF5IGJlIHByZXBhcmVkLCBjb3BpZWQsIHB1Ymxpc2hlZAogICBhbmQgZGlzdHJpYnV0ZWQsIGluIHdob2xlIG9yIGluIHBhcnQsIHdpdGhvdXQgcmVzdHJpY3Rpb24gb2YgYW55CiAgIGtpbmQsIHByb3ZpZGVkIHRoYXQgYSByZWZlcmVuY2UgdG8gdGhpcyBkb2N1bWVudCBpcyBpbmNsdWRlZCBvbiBhbGwKICAgc3VjaCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MuIEhvd2V2ZXIsIHRoaXMgZG9jdW1lbnQgaXRzZWxmIG1heQogICBub3QgYmUgbW9kaWZpZWQgaW4gYW55IHdheSBhbmQgcmVpc3N1ZWQgYXMgdGhlIG9yaWdpbmFsIGRvY3VtZW50LgoKICAgVGhlIGxpbWl0ZWQgcGVybWlzc2lvbnMgZ3JhbnRlZCBhYm92ZSBhcmUgcGVycGV0dWFsIGFuZCB3aWxsIG5vdCBiZQogICByZXZva2VkLgoKICAgVGhpcyBkb2N1bWVudCBhbmQgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgcHJvdmlkZWQgb24gYW4KICAgJ0FTIElTJyBiYXNpcyBhbmQgVEhFIEFVVEhPUlMgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCiAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFVTRSBPRgogICBUSEUgSU5GT1JNQVRJT04gSEVSRUlOIFdJTEwgTk9UIElORlJJTkdFIEFOWSBSSUdIVFMgT1IgQU5ZIElNUExJRUQKICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCgoKOC4gICBSZWZlcmVuY2VzCgogICBbSUQzdjJdIE1hcnRpbiBOaWxzc29uLCAnSUQzdjIgaW5mb3JtYWwgc3RhbmRhcmQnLgoKICAgICAgPHVybDpodHRwOi8vd3d3LmlkMy5vcmcvaWQzdjIuMy4wLnR4dD4KCiAgIFtJU08tNjM5LTJdIElTTy9GRElTIDYzOS0yLgogICAnQ29kZXMgZm9yIHRoZSByZXByZXNlbnRhdGlvbiBvZiBuYW1lcyBvZiBsYW5ndWFnZXMsIFBhcnQgMjogQWxwaGEtMwogICBjb2RlLicgVGVjaG5pY2FsIGNvbW1pdHRlZSAvIHN1YmNvbW1pdHRlZTogVEMgMzcgLyBTQyAyCgogICBbSVNPLTMzMDldIElTTyAzMzA5CiAgICdJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIFN5c3RlbXMtLURhdGEgQ29tbXVuaWNhdGlvbiBIaWdoLUxldmVsIERhdGEKICAgTGluayBDb250cm9sIFByb2NlZHVyZS0tRnJhbWUgU3RydWN0dXJlJywgSVMgMzMwOSwgT2N0b2JlciAxOTg0LCAzcmQKICAgRWRpdGlvbi4KCiAgIFtJU08tODg1OS0xXSBJU08vSUVDIERJUyA4ODU5LTEuCiAgICc4LWJpdCBzaW5nbGUtYnl0ZSBjb2RlZCBncmFwaGljIGNoYXJhY3RlciBzZXRzLCBQYXJ0IDE6IExhdGluCiAgIGFscGhhYmV0IE5vLiAxLicgVGVjaG5pY2FsIGNvbW1pdHRlZSAvIHN1YmNvbW1pdHRlZTogSlRDIDEgLyBTQyAyCgogICBbSkZJRl0gJ0pQRUcgRmlsZSBJbnRlcmNoYW5nZSBGb3JtYXQsIHZlcnNpb24gMS4wMicKCiAgICAgIDx1cmw6aHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvSlBFRy9qZmlmLnR4dD4KCiAgIFtLRVlXT1JEU10gUy4gQnJhZG5lciwgJ0tleSB3b3JkcyBmb3IgdXNlIGluIFJGQ3MgdG8gSW5kaWNhdGUKICAgUmVxdWlyZW1lbnQgTGV2ZWxzJywgUkZDIDIxMTksIE1hcmNoIDE5OTcuCgogICAgICA8dXJsOmZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIxMTkudHh0PgoKICAgW01QRUddIElTTy9JRUMgMTExNzItMzoxOTkzLgogICAnQ29kaW5nIG9mIG1vdmluZyBwaWN0dXJlcyBhbmQgYXNzb2NpYXRlZCBhdWRpbyBmb3IgZGlnaXRhbCBzdG9yYWdlCiAgIG1lZGlhIGF0IHVwIHRvIGFib3V0IDEsNSBNYml0L3MsIFBhcnQgMzogQXVkaW8uJwogICBUZWNobmljYWwgY29tbWl0dGVlIC8gc3ViY29tbWl0dGVlOiBKVEMgMSAvIFNDIDI5CiAgICBhbmQKICAgSVNPL0lFQyAxMzgxOC0zOjE5OTUKICAgJ0dlbmVyaWMgY29kaW5nIG9mIG1vdmluZyBwaWN0dXJlcyBhbmQgYXNzb2NpYXRlZCBhdWRpbyBpbmZvcm1hdGlvbiwKICAgUGFydCAzOiBBdWRpby4nCiAgIFRlY2huaWNhbCBjb21taXR0ZWUgLyBzdWJjb21taXR0ZWU6IEpUQyAxIC8gU0MgMjkKICAgIGFuZAogICBJU08vSUVDIERJUyAxMzgxOC0zCiAgICdHZW5lcmljIGNvZGluZyBvZiBtb3ZpbmcgcGljdHVyZXMgYW5kIGFzc29jaWF0ZWQgYXVkaW8gaW5mb3JtYXRpb24sCiAgIFBhcnQgMzogQXVkaW8gKFJldmlzaW9uIG9mIElTTy9JRUMgMTM4MTgtMzoxOTk1KScKCiAgIFtQTkddICdQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzLCB2ZXJzaW9uIDEuMCcKCiAgICAgIDx1cmw6aHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXBuZy1tdWx0aS5odG1sPgoKICAgW1VOSUNPREVdIFRoZSBVbmljb2RlIENvbnNvcnRpdW0sCiAgICdUaGUgVW5pY29kZSBTdGFuZGFyZCBWZXJzaW9uIDMuMCcsIElTQk4gMC0yMDEtNjE2MzMtNS4KCiAgIDx1cmw6aHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL3N0YW5kYXJkL3ZlcnNpb25zL1VuaWNvZGUzLjAuaHRtPgoKICAgW1VSTF0gVC4gQmVybmVycy1MZWUsIEwuIE1hc2ludGVyICYgTS4gTWNDYWhpbGwsICdVbmlmb3JtIFJlc291cmNlCiAgIExvY2F0b3JzIChVUkwpJywgUkZDIDE3MzgsIERlY2VtYmVyIDE5OTQuCgogICAgICA8dXJsOmZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzE3MzgudHh0PgoKICAgW1VURi04XSBGLiBZZXJnZWF1LCAnVVRGLTgsIGEgdHJhbnNmb3JtYXRpb24gZm9ybWF0IG9mIElTTyAxMDY0NicsCiAgIFJGQyAyMjc5LCBKYW51YXJ5IDE5OTguCiAgIAogICAgICA8dXJsOmZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzIyNzkudHh0PgoKICAgW1VURi0xNl0gRi4gWWVyZ2VhdSwgJ1VURi0xNiwgYW4gZW5jb2Rpbmcgb2YgSVNPIDEwNjQ2JywgUkZDIDI3ODEsCiAgIEZlYnJ1YXJ5IDIwMDAuCiAgIAogICAgICA8dXJsOmZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL3JmYzI3ODEudHh0PgogICAKICAgW1pMSUJdIFAuIERldXRzY2gsIEFsYWRkaW4gRW50ZXJwcmlzZXMgJiBKLUwuIEdhaWxseSwgJ1pMSUIKICAgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uIHZlcnNpb24gMy4zJywgUkZDIDE5NTAsCiAgIE1heSAxOTk2LgoKICAgICAgPHVybDpmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9yZmMxOTUwLnR4dD4KCgo5LiAgIEF1dGhvcidzIEFkZHJlc3MKCiAgIFdyaXR0ZW4gYnkKCiAgICAgTWFydGluIE5pbHNzb24KICAgICBSeWRzduRnZW4gMjQ2IEMuIDMwCiAgICAgU0UtNTg0IDM0IExpbmv2cGluZwogICAgIFN3ZWRlbgoKICAgICBFbWFpbDogbmlsc3NvbkBpZDMub3JnCgo=