PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljc6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxOSBBdWcgMjAwMzoKICBmaXggVEkgSW5ub3ZhdG9yL09NQVAxNTEwIHBpbiBjb25maWdzCgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMTggQXVnIDIwMDMKICAtIGFkZCBzdXBwb3J0IGZvciBhcm05MjZlanMgY3B1IGNvcmUKICAtIGFkZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE2MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE0IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBiemlwMiB1bmNvbXByZXNzaW9uCgoqIEFkZCBHQ0MgbGlicmFyeSB0byBleGFtcGxlcy9NYWtlZmlsZSBzbyBHQ0MgdXRpbGl0eSBmdW5jdGlvbnMgd2lsbAogIGJlIHJlc29sdmVkLCB0b28KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZCB1c2luZyBzb2Z0d2FyZSBJMkMgZHJpdmVyCiAgKGJlY2F1c2Ugb2YgYmV0dGVyIHJlc3BvbnNlIHRvIGlwcm9iZSBjb21tYW5kKTsgZml4IHByb2JsZW0gd2l0aAogICJyZXNldCIgY29tbWFuZAoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggQXVnIDIwMDM6CiAgQWRkZWQgQ09ORklHX0JPT1RQX0ROUzIgYW5kIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FIHRvCiAgQ09ORklHX0JPT1RQX01BS1MgKHNlZSBSRUFETUUpLgoKKiBGaXggSUNVODYyIGVudmlyb25tZW50IHByb2JsZW0KCiogRml4IFJBTSBzaXplIGRldGVjdGlvbiBmb3IgUk1VIGJvYXJkCgoqIEltcGxlbWVudCAicmVzZXQiIGZvciBNR1Q1MTAwL01QQzUyMDAgc3lzdGVtcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjY6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBFdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gb24gSU5DQS1JUCB3b3JrIGZvciBhbGwgY2xvY2sgcmF0ZXM7CiAgYWxsb3cgc2VsZWN0aW9uIG9mIGNsb2NrIGZyZXF1ZW5jeSBhcyAibWFrZSIgdGFyZ2V0CgoqIEltcGxlbWVudCBtZW1vcnkgYXV0b3NpemluZyBjb2RlIGZvciBJY2VDdWJlIGJvYXJkcwoKKiBDb25maWd1cmUgbmV0d29yayBwb3J0IG9uIElOQ0EtSVAgZm9yIGF1dG9uZWdvdGlhdGlvbgoKKiBGaXggb3ZlcmZsb3cgcHJvYmxlbSBpbiBuZXR3b3JrIHRpbWVvdXQgY29kZQoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCA4IEF1ZyAyMDAzOgogIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMCAoY3JjMzJfbm9fY29tcCwgdG9vKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC41Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVwZGF0ZSBmb3IgVFFNIGJvYXJkIGRlZmF1bHRzOgogIGRpc2FibGUgY2xvY2tzX2luX21oeiwgZW5hYmxlIGJvb3QgY291bnQgbGltaXQKCiogUmVtb3ZlZCB0b29scy9nZGIgZnJvbSAibWFrZSBhbGwiIHRhcmdldC4gIEFkZGVkIG1ha2UgdGFyZ2V0ICJnZGJ0b29scyIKICBpbiB0b3BsZXZlbCBkaXJlY3RvcnkgaW5zdGVhZC4gIFJlbW92ZWQgYXN0ZXN0LmMgZnJvbSB0b29scy9nZGIgYmVjYXVzZQogIGl0IGlzIG5vIGxvbmdlciByZWxldmFudC4KCiogRml4IFBDSSBzdXBwb3J0IGZvciBNUEM1MjAwIC8gSWNlQ3ViZSBCb2FyZAoKKiBNYXAgSVNQMTM2MiBVU0IgT1RHIGNvbnRyb2xsZXIgZm9yIE5TQ1UgYm9hcmQKCiogUGF0Y2ggYnkgQnJhZCBQYXJrZXIsIDAyIEF1ZyAyMDAzOgogIGZpeCBzYzUyMF9jZHAgcHJvYmxlbXMKCiogSW1wbGVtZW50IEJvb3QgQ3ljbGUgRGV0ZWN0aW9uIChSZXEuIDIuMyBvZiBPU0RMIENHTCBSZXFpcmVtZW50cykKCiogQWxsb3cgZXJhc2UgY29tbWFuZCB0byBjcm9zcyBmbGFzaCBiYW5rIGJvdW5kYXJpZXMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBKdWwgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTHludXhXb3JrcyBLZXJuZWwgRG93bmxvYWRhYmxlIEltYWdlcyAoS0RJcykuCiAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNSBKdWwgMjAwMzoKICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgogIGZpeCB0eXBvIGluIG1wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI0IEp1bCAyMDAzOgogIEZpeGVzIGZvciBjbWRfbmFuZC5jOgogIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIGRldmljZXMgd2l0aCBubyBSZWFkeS9CdXN5IHNpZ25hbCBob29rZWQgdXAuCiAgLSBBZGRlZCBPTUFQMTUxMCByZWFkL3dyaXRlIHByb3RlY3QgaGFuZGxpbmcuCiAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCiAgICBmb3Igbm9uLUpGRlMyLgogIC0gU3dpdGNoZWQgZGVmYXVsdCBFQ0MgdG8gYmUgSkZGUzIuCgoqIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMAoKKiBQcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvIGFjY2VzcwogIHRoZSAnZ2xvYmFsX2RhdGEnIHN0cnVjdHVyZQogIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KCiogTWFrZSBJY2VDdWJlIE1HVDUxMDAgRkVDIGRyaXZlciB3b3JrCgoqIEltcGxlbWVudCBuZXcgbWVjaGFuaXNtIHRvIGV4cG9ydCBVLUJvb3QncyBmdW5jdGlvbnMgdG8gc3RhbmRhbG9uZQogIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CiAgdXNlIGEganVtcCB0YWJsZTsgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgZm9yIGRldGFpbHMKCiogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CiAgYWRkZWQgc3VwcG9ydCBmb3IgVW5pdHkgT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIzIEp1bCAyMDAzOgogIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwoKKiBGaXggY29sZCBib290IGRldGVjdGlvbiBmb3IgbG9nIGJ1ZmZlciByZXNldAoKKiBSZXR1cm4gZXJyb3IgZm9yIGludmFsaWQgbGVuZ3RoIHNwZWNpZmllcnMgd2l0aCAiY3AuWCIgZXRjLgoKKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKCiogQWxsb3cgZm9yIENPTkZJR19TUExBU0hfU0NSRUVOIGV2ZW4gd2hlbiBubyBleHBsaWNpdAogIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDE4IEp1bCAyMDAzOgogIC0gZml4IGVuZGluYW5lc3MgcHJvYmxlbSBpbiBjcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMxLmMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE4IEp1bCAyMDAzOgogIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCiAgLSBmaXggcHJpbnRvdXQgb2YgYmF1ZHJhdGUgZm9yICJsb2FkYiA8bG9hZGFkZHI+IDxiYXVkcmF0ZT4iCgoqIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKICB0byBtYWtlIHNlbGVjdGlvbiBlYXNpZXIuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IEp1bCAyMDAzOgogIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE3IEp1bHkgMDM6CiAgLSBGaXhlZCBidWcgaW4gT01BUDE1MTAgYmF1ZCByYXRlIGRpdmlzb3Igc2V0dGluZ3MuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE2IEp1bHkgMjAwMzoKICBNUEM4NjBGQURTIGZpeGVzOgogIC0gYWRkIE1QQzg2eEFEUyBzdXBwb3J0ICh1c2VzIE1QQzg2eEFEUy5oKQogIC0gYWRkIDg2NlAvVCBjb3JlIHN1cHBvcnQgKGFsc28gTVBDODU5VC9NUEM4NTlEU0wvTVBDODUyVCkKICAgIG8gUExQUkNSIGNoYW5nZXMKICAgIG8gQlJHIGNoYW5nZXMgKEVYVEFML1hUQUwgcmVzdHJpY3RlZCB0byAxME1IeikKICAgIG8gZG9uJ3QgdHJ1c3QgZ2NsaygpIHNvZnR3YXJlIG1lYXN1cmVtZW50IGJ5IGRlZmF1bHQsIGRlcGVuZCBvbgogICAgICBDT05GSUdfOHh4X0dDTEtfRlJFUQogIC0gYWRkIERSQU0gU0lNTSBub3QgaW5zdGFsbGVkIGRldGVjdGlvbgogIC0gdXNlIG1vcmUgImNvcnJlY3QiIFNEUkFNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCiAgLSBhbGxvdyBkaWZmZXJlbnQgU0RSQU0gc2l6ZXMgKDh4eEFEUyBoYXMgOE0pCiAgLSBkZWZhdWx0IERFUiBpcyAwCiAgLSByZW1vdmUgdW51c2VkIE1BTVIgZGVmaW5lcyBmcm9tIEZBRFM4NjBULmggKGFsbCBkb25lIGluIGZhZHMuYykKICAtIHJlbmFtZSBNQU1SL01CTVIgZGVmaW5lcyB0byBiZSBtb3JlIGNvbnNpc3RlbnQuIFNob3VsZCBldmVudHVhbGx5CiAgICBiZSBtZXJnZWQgaW50byBNeE1SIHRvIGJldHRlciByZWZsZWN0IHRoZSBQb3dlclFVSUNDIGRhdGFzaGVldC4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVsIDIwMDM6CiAgc3VwcG9ydCBuZXcgTW90b3JvbGEgUFEyRkFEUy1aVSBldmFsdWF0aW9uIGJvYXJkIHdoaWNoIHJlcGxhY2VkCiAgTVBDODI2MEFEUyBhbmQgTVBDODI2NkFEUwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIEljZUN1YmUgYm9hcmQgKHdpdGggTUdUNTEwMCBhbmQgTVBDNTIwMCBDUFVzKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUdUNTEwMCBhbmQgTVBDNTIwMCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxNSBKdWwgMjAwMzoKICB1cGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMDQgSnVsIDIwMDMKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGFybTkyNXQgY3B1IGNvcmUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTUxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAxNCBKdWwgMjAwMzoKICAtIGFkZCBJMkMgc3VwcG9ydCBmb3IgczNjMjQwMCBzeXN0ZW1zICh0cmFiIGJvYXJkKQogIC0gKHJlLSkgYWRkICJwaW5nIiB0byBjb21tYW5kIHRhYmxlCgoqIEZpeCBoYW5kbGluZyBvZiAic2xvdyIgUE9TVCByb3V0aW5lcwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDAzOgogIC0gQ29ycmVjdCBmbGFzaCBhbmQgSkZGUzIgc3VwcG9ydCBmb3IgTVBDODI2MEFEUwogIC0gZml4IFBWUiB2YWx1ZXMgYW5kIGNsb2NrIGdlbmVyYXRpb24gZm9yIFBvd2VyUVVJQ0MgSUkgZmFtaWx5CiAgICAoODI3MC84Mjc1LzgyODApCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDA4IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIE02OEsgdGFyZ2V0cwoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMyBKdWw6CiAgLSBGaXggUENJIGNvbmZpZyB0YWJsZSBmb3IgQTMwMDAKICAtIEZpeCBpb2Jhc2UgZm9yIG5hdHNlbWkuYwogICAgKFBDSV9CQVNFX0FERFJFU1NfMCBpcyB0aGUgSU8gYmFzZSByZWdpc3RlciBmb3IgRFA4MzgxNSkKCiogQWxsb3cgdG8gZW5hYmxlICJzbG93IiBQT1NUIHJvdXRpbmVzIGJ5IGtleSBwcmVzcyBvbiBwb3dlci1vbgoqIEZpeCB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgc3dpdGNoaW5nIG9mIExDRCBiYWNrbGlnaHQgb24gTFdNT04KKiBUd2VhayBvdXRwdXQgZm9ybWF0IGZvciBMV01PTgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEp1bCAyMDAzOgogIC0gRml4IGJ1ZyBpbiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRS4KICAtIEFSNDA1IGNvbmZpZyB1cGRhdGVkLgogIC0gT0NSVEMvT1JTRzogYnNwIGNvbW1hbmQgYWRkZWQuCiAgLSBBU0g0MDUgYnNwIHVwZGF0ZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBOU0NVIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjNNLCBUUU04NTBNLCBUUU04NTVNIGFuZCBUUU04NjBNIG1vZHVsZXMKCiogQWRkIHN1cHBvcnQgZm9yIEFtMjlMVjE2ME1MLCBBbTI5TFYzMjBNTCwgYW5kIEFtMjlMVjY0ME1MCiAgbWlycm9yIGJpdCBmbGFzaCBvbiBUUU04eHhNIG1vZHVsZXMKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDMwIEp1biAyMDAzOgogIGdldCByaWQgb2YgTUtfQ01EX0VOVFJZIG1hY3JvOyB1cGRhdGUgZG9jL1JFQURNRS5jb21tYW5kCgoqIFBhdGNoIGJ5IFNlYiBKYW1lcywgMzAgSnVuIDIwMDM6CiAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIEkyQyBjb25maWd1cmF0aW9uIGluIFJFQURNRQoKKiBGaXggcHJvYmxlbXMgd2l0aCBwcmV2aW91cyBsb2cgYnVmZmVyICJmaXhlcyIKCiogRml4IG1pbm9yIGhlbHAgdGV4dCBpc3N1ZXMKCiogImxvZyBhcHBlbmQiIGRpZCBub3QgYXBwZW5kIGEgbmV3bGluZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHNvbWUgbWlzc2luZyBjb21tYW5kcywgY2xlYW51cCBoZWFkZXIgZmlsZXMKICAoYXV0b3NjcmlwdCwgYm1wLCBic3AsIGZhdCwgbW1jLCBuYW5kLCBwb3J0aW8sIC4uLikKCiogUmV3cml0ZSBjb21tYW5kIGxvb2t1cCBhbmQgaGVscCBjb21tYW5kIChmaXggcHJvYmxlbXMgd2l0aCBidWJibGUKICBzb3J0IHdoZW4gc29ydGluZyBjb21tYW5kIG5hbWUgbGlzdCkuIE1pbm9yIGNsZWFudXAgaGVyZSBhbmQgdGhlcmUuCgoqIE1lcmdlIGZyb20gInN0YWJsZSBicmFuY2giLCB0YWcgTEFCRUxfMjAwM18wNl8yOF8xODAwLXN0YWJsZToKICAtIEFsbG93IHRvIGNhbGwgc3lzbW9uIGZ1bmN0aW9uIGludGVyYWN0aXZlbHkKICAtIFBJQyBvbiBMV01PTiBib2FyZCBuZWVkcyBkZWxheSBhZnRlciBwb3dlci1vbgogIC0gQWRkIG1pc3NpbmcgUlNSIGRlZmluaXRpb25zIGZvciBNUEM4eHgKICAtIEltcHJvdmUgbG9nIGJ1ZmZlciBoYW5kbGluZzogZ3VhcmFudGVlIGNsZWFuIHJlc2V0IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgc3VwcG9ydCBmb3IgRVhCSVRHRU4gYm9hcmQKICAtIEFkZCBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKCiogQ29kZSBjbGVhbnVwOgogIC0gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlLCB0cmFpbGluZyBlbXB0eSBsaW5lcywgQysrIGNvbW1lbnRzLCBldGMuCiAgLSBzcGxpdCBjbWRfYm9vdC5jIChzZXBhcmF0ZSBjbWRfYmRpbmZvLmMgYW5kIGNtZF9sb2FkLmMpCgoqIFBhdGNoZXMgYnkgS2VubmV0aCBKb2hhbnNzb24sIDI1IEp1biAyMDAzOgogIC0gbWFqb3IgcmV3b3JrIG9mIGNvbW1hbmQgc3RydWN0dXJlCiAgICAod29yayBkb25lIG1vc3RseSBieSBNaWNoYWwgQ2VuZHJvd3NraSBhbmQgSm9ha2ltIEtyaXN0aWFuc2VuKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDI2IEp1biAyMDAzOgogIC0gY3NiMjI2IGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gY3JlZGl0cyBmb3IgbG9nb2RsIHBvcnQgdXBkYXRlZAogIC0gaW5ub2tvbSBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGxvZ29kbCB0cmVlIHVwZGF0ZSwgc3RpbGwgd2l0aCBjb2Rpbmcgc3R5bGUgaW5jb25zaXN0ZW5jaWVzCiAgLSBhZGRlZCBPQ00gZm9yIHBwYzQwNSB3YXJuaW5nIHRvIFJFQURNRQoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjUgSnVuIDIwMDM6CiAgdXBkYXRlIE5ldFZpYSB3aXRoIFYyIGJvYXJkIHN1cHBvcnQKCiogSGVhZGVyIGZpbGUgY2xlYW51cCBmb3IgQVJNCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDI0IEp1biAyMDAzOgogIC0gbWFrZSBzdXJlIHRvIHVzZSBvbmx5IFUtYm9vdCBwcm92aWRlZCBoZWFkZXIgZmlsZXMKICAtIGZpeCBwcm9ibGVtcyB3aXRoICIucm9kYXRhLnN0cjEuNCIgc2VjdGlvbiBhcyB1c2VkIGJ5IEdDQy0zLngKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBKdW4gMjAwMzoKICAtIFVwZGF0ZSBlc2QgQVNINDA1IGJvYXJkIGZpbGVzLgogIC0gVXBkYXRlIGVzZCBEQVNBX1NJTSBjb25maWcgZmlsZS4KICAtIEFkZCBwaW5nIGNvbW1hbmQgdG8gc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMyBKdW4gMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjMgSnVuIDIwMDM6CiAgLSBjbGVhbnVwIG9mIEdDQyAzLnggY29tcGlsZXIgd2FybmluZ3MKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDQgSnVuIDIwMDM6CiAgYWRkIGxhcmdlIG1lbW9yeSBzdXBwb3J0IGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBFbmFibGVkIHN0YW5kYXJkIHUtYm9vdCBkZXZpY2UgYWJzdHJhY3Rpb24gZm9yIEFSTQogIC0gRW5hYmxlZCBjb25zb2xlIGRldmljZSBmb3IgQVJNCiAgLSBJbml0aWxpemVkIGJpX2JhdWRyYXRlIGZvciBBUk0KCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDIzIEFwciAyMDAzOgogIGZpeCBieXRlIG9yZGVyIGZvciA4MjR4IEkyQyBhZGRyZXNzZXMgKHdyaXRlIG9wKQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMCBKdW4gMjAwMzoKICAtIGh5bW9kIHVwZGF0ZQogIC0gY2xlYW51cCAoZXNwZWNpYWxseSBmb3IgZ2NjLTMueCBjb21waWxlcnMpCgoqIFBhdGNoIGJ5IFRvbSBHdWlsbGlhbXMsIDIwIEp1biAyMDAzOgogIGFkZGVkIENPTkZJR183NTBGWCBzdXBwb3J0IGZvciBJQk0gNzUwRlggcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBEZXZpbiBDcnVtYiwgMDIgQXByIDIwMDM6CiAgRml4IGNsb2NrIGRpdmlkZXIgcm91bmRpbmcgcHJvYmxlbSBpbiBkcml2ZXJzL3NlcmlhbC5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CiAgLSBGaXhlZCBzbWM5MWMxMTEgZHJpdmVyIHRvIHN5bmMgd2l0aCB0aGUgdS1ib290IGVudmlyb25tZW50CiAgICAoZHJpdmVyL3NtYzkxYzExMS5jKS4KICAtIEFkZGVkIGV0aF9pbml0IGVycm9yIHJldHVybiBjaGVjayBpbiBOZXRMb29wIChuZXQvbmV0LmMpLgoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTkgSnVuZSAyMDAzOgogIEFkZGVkIHN1cHBvcnQgZm9yIEEzMDAwIFNCQyBib2FyZCAoQXJ0aXMgTWljcm9zeXN0ZW1zIEluYy4pCgoqIFBhdGNoZXMgYnkgTXVycmF5IEplbnNlbiwgMTcgSnVuIDIwMDM6CiAgLSBIeW1vZCBib2FyZCBkYXRhYmFzZSBtb2RzOiBhZGQgIndobyIgZmllbGQgYW5kIG5ldyB4aWxpbnggY2hpcCB0eXBlcwogIC0gcHJvdmlkZSBuZXcgImluaXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gc28gY29kZSBleHRlcm5hbCB0bwogICAgImNvbW1vbi9tYWluLmMiIGNhbiB1c2UgdGhlICJyZXNldF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBiZWZvcmUKICAgIGVudGVyaW5nIHRoZSBtYWluIGxvb3AKICAtIGFkZCBEVFQgc3VwcG9ydCBmb3IgYWRtMTAyMSAobmV3IGZpbGUgZHR0L2FkbTEwMjEuYzsgY29uZmlnCiAgICBzbGlnaHRseSBkaWZmZXJlbnQuIHNlZSBpbmNsdWRlL2NvbmZpZ3MvaHltb2QuaCBmb3IgYW4gZXhhbXBsZQogICAgKHJlcXVpcmVzIENPTkZJR19EVFRfQURNMTAyMSwgQ09ORklHX0RUVF9TRU5TT1JTLCBhbmQKICAgIENGR19EVFRfQURNMTAyMSBkZWZpbmVkKQogIC0gYWRkIG5ldyAiZWVwcm9tX3Byb2JlKCkiIGZ1bmN0aW9uIHdoaWNoIGhhcyBzaW1pbGFyIGFyZ3MgYW5kCiAgICBiZWhhdmVzIGluIGEgc2ltaWxhciB3YXkgdG8gImVlcHJvbV9yZWFkKCkiIGV0Yy4KICAtIGFkZCA4MjYwIEZDQyBldGhlcm5ldCBsb29wYmFjayBjb2RlIChuZXcgImV0aF9sb29wYmFja190ZXN0KCkiCiAgICBmdW5jdGlvbiB3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmluaW5nIENPTkZJR19FVEhFUl9MT09QQkFDS19URVNUKQogIC0gZ2RidG9vbHMgY29weXJpZ2h0IHVwZGF0ZQogIC0gZW5zdXJlIHRoYXQgc2V0X21zcigpIGV4ZWN1dGVzIHRoZSAic3luYyIgYW5kICJpc3luYyIgaW5zdHJ1Y3Rpb25zCiAgICBhZnRlciB0aGUgIm10bXNyIiBpbnN0cnVjdGlvbiBpbiBjcHUvbXBjODI2MC9pbnRlcnJ1cHRzLmMKICAtIDgyNjAgSS9PIHBvcnRzIGZpeDogT3BlbiBEcmFpbiBzaG91bGQgYmUgc2V0IGxhc3Qgd2hlbiBjb25maWd1cmluZwogIC0gYWRkIFNJVSBJUlEgZGVmaW5lcyBmb3IgODI2MAogIC0gYWxsb3cgTERTQ1JJUFQgb3ZlcnJpZGUgYW5kIE9CSkNGTEFHUyBpbml0aWFsaXphdGlvbjogY2hhbmdlIHRvCiAgICBjb25maWcubWsgdG8gYWxsb3cgYm9hcmQgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUgdGhlIEdOVQogICAgbGlua2VyIHNjcmlwdCwgc2VsZWN0ZWQgdmlhIHRoZSBMRFNDUklQVCwgbWFrZSB2YXJpYWJsZSwgYW5kIHRvCiAgICBnaXZlIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIE9CSkNGTEFHUyBtYWtlIHZhcmlhYmxlCiAgLSA4MjYwIGkyYyBlbmhhbmNlbWVudDoKICAgIG8gY29ycmVjdGx5IGV4dGVuZHMgdGhlIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbAogICAgICBxdWV1ZWQgbWVzc2FnZXMgZm9yIGJvdGggdHJhbnNtaXQgYW5kIHJlY2VpdmUKICAgIG8gd2lsbCBub3QgY29udGludWUgd2l0aCByZWNlaXZlIGlmIHRyYW5zbWl0IHRpbWVzIG91dAogICAgbyBlbnN1cmVzIHRoYXQgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGRvbmUgZm9yIGFsbCBxdWV1ZWQgdHgKICAgICAgYW5kIHJ4IG1lc3NhZ2VzCiAgICBvIGNvcnJlY3RseSBkZXRlY3RzIGJvdGggdHggYW5kIHJ4IHRpbWVvdXRzLCBvbmx5IGRlbGl2ZXJzIG9uZSB0bwogICAgICB0aGUgY2FsbGJhY2ssIGFuZCBkb2VzIG5vdCBvdmVyd3JpdGUgYW4gZWFybGllciBlcnJvcgogICAgbyBsb2dpYyBpbiBpMmNfcHJvYmUgbm93IGNvcnJlY3QKICAtIGFkZCAidnByaW50ZigpIiBmdW5jdGlvbiBzbyB0aGF0ICJwYW5pYygpIiBmdW5jdGlvbiBjYW4gYmUKICAgIHRlY2huaWNhbGx5IGNvcnJlY3QKICAtIG1hbnkgSHltb2QgYm9hcmQgY2hhbmdlcwoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTQgSnVuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTG9nb3Ryb25pYyBETCBkYXRhbG9nZ2VyIGJvYXJkCiAgLSBjbGVhbnVwIHNlcmlhbCBsaW5lIGFmdGVyIGtlcm1pdCBiaW5hcnkgZG93bmxvYWQKICAtIGFkZCBkZWJ1Z1ggbWFjcm8gKGRlYnVnIGxldmVsIHN1cHBvcnQpCiAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0LgoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMTIgSnVuIDIwMDM6CiAgLSByZXdyaXRlIG9mIHRoZSBTM0MyNFgwIHJlZ2lzdGVyIGRlZmluaXRpb25zIHN0dWZmCiAgLSAiZHJpdmVyIiBmb3IgdGhlIGJ1aWx0LWluIFMzQzI0WDAgUlRDCgoqIFBhdGNoZXMgYnkgWXVsaSBCYXJjb2hlbiwgMTIgSnVuIDIwMDM6CiAgLSBBZGQgTUlJIHN1cHBvcnQgYW5kIEV0aGVybmV0IFBIWSBpbml0aWFsaXphdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZAogIC0gRml4IGluY29ycmVjdCBTSVVNQ1IgaW5pdGlhbGlzYXRpb24gY2F1c2VkIGJ5IHdyb25nIEhhcmQgUmVzZXQKICAgIGNvbmZpZ3VyYXRpb24gd29yZCBzdXBwbGllZCBieSBGUEdBIG9uIHNvbWUgTVBDODI2MEFEUyBib2FyZHMKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDEwIEp1biAyMDAzOgogIFVuaWZ5IHN0YXR1cyBMRUQgaW50ZXJmYWNlCgoqIEFkZCBzdXBwb3J0IGZvciBEUzEyODg3IFJUQzsgYWRkIFJUQyBzdXBwb3J0IGZvciBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMTEgSnVuIDIwMDM6CiAgTW9kaWZpY2F0aW9ucyBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0CiAgLSBBZGQgQXRtZWwgRGF0YUZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuCiAgLSBBZGQgcG9zc2liaWxpdHkgdG8gYm9vdCBhIExpbnV4IGZyb20gRGF0YUZsYXNoIHdpdGggQk9PVE0gY29tbWFuZC4KICAtIEFkZCBGbGFzaCBkZXRlY3Rpb24gb24gQXRtZWwgQVQ5MVJNOTIwMERLCiAgICAoYmV0d2VlbiBBdG1lbCBBVDQ5QlYxNjE0IGFuZCBBVDQ5QlYxNjE0QSBmbGFzaGVzKQogIC0gUmVwbGFjZSBvbGQgRXRoZXJuZXQgUEhZIGxheWVyIGZ1bmN0aW9ucwogIC0gQ2hhbmdlIGxpbmsgYWRkcmVzcwoKKiBQYXRjaCBieSBGcmFuayBTbWl0aCwgOSBKdW4gMjAwMzoKICB1c2UgQ1JJVF9FWENFUFRJT04gZm9yIG1hY2hpbmUgY2hlY2sgb24gNHh4CgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEzIEp1biAyMDAzOgogIGFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSAiY2FyaW5mbyIgY29tbWFuZCBpbiBjbWRfaW1tYXAuYwoKKiBGaXggQ09ORklHX05FVF9NVUxUSSBzdXBwb3J0IGluIGluY2x1ZGUvbmV0LmgKCiogUGF0Y2hlcyBieSBLeWxlIEhhcnJpcywgMTMgTWFyIDIwMDM6CiAgLSBBZGQgRkFUIHBhcnRpdGlvbiBzdXBwb3J0CiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBGQVQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgdmlkZW8KICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gRW5hYmxlIE1NQyBhbmQgRkFUIGZvciBsdWJib2NrIGJvYXJkCiAgLSBPdGhlciBtaXNjIGNoYW5nZXMgZm9yIGx1YmJvY2sgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCBBcHJpbCAwMiwgMjAwMzoKICBmaXggZm9yIFNNU0M5MTExMSBkcml2ZXIKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA0IEp1biAyMDAzOgogIG1ha2UgcHBjNDA1IGV0aGVybmV0IGRyaXZlciBjb21wYXRpYmxlIHdpdGggQ09ORklHX05FVF9NVUxUSSBvcHRpb24KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNSBKdW4gMjAwMzoKICAtIFBQQzR4eDogRml4IGJ1ZyBmb3IgaW5pdGlhbCBzdGFjayBpbiBkYXRhIGNhY2hlIGFzIHBvaW50ZWQgb3V0IGJ5CiAgICBUaG9tYXMgU2NoYWVmZXIgKHRzY2hhZWZlckBnaWdhLXN0cmVhbS5kZSkuIE5vdyBpbml0YWwgc3RhY2sgaW4KICAgIGRhdGEgY2FjaGUgY2FuIGJlIHVzZWQgZXZlbiBpZiB0aGUgY2hpcCBzZWxlY3QgaXMgaW4gdXNlLgogIC0gQ0ZHX1JYX0VUSF9CVUZGRVIgYWRkZWQgdG8gc2V0IHRoZSBldGhlcm5ldCByZWNlaXZlIGJ1ZmZlciBjb3VudAogICAgKHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pLgogIC0gQ2hhbmdlZCBjb25maWcgZmlsZXMgb2YgQ09ORklHX0VFUFJPMTAwIGJvYXJkcyB0byB1c2UgdGhlCiAgICBDRkdfUlhfRVRIX0JVRkZFUiBkZWZpbmUuCgoqIEFkZCBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgYXQgMTAwLzUwIE1IegoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgSnVuIDIwMDM6CiAgbWFqb3IgcmVjb25zdHJ1Y3Rpb24gb2YgbmV0d29ya2luZyBjb2RlOwogIGFkZCAicGluZyIgc3VwcG9ydCAob3V0Z29pbmcgb25seSEpCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBKdW5lIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDVUIGJvYXJkCgoqIFBhdGNoZXMgYnkgVWRpIEZpbmtlbHN0ZWluLCAyIEp1bmUgMjAwMzoKICAtIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBrZXlib2FyZHMsIGluaXRpYWxpemVkIGJ5IGRlZmluaW5nIGEKICAgIGJvYXJkLXNwZWNpZmljIGRydl9rZXlib2FyZF9pbml0IGFzIHdlbGwgYXMgZGVmaW5pbmcgQ09ORklHX0tFWUJPQVJEIC4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBSQkM4MjMgYm9hcmQuCiAgLSBjcHUvbXBjOHh4L2xjZC5jIG5vdyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZXMgdGhlCiAgICBIb3Jpem9udGFsIFBpeGVsIENvdW50IGZpZWxkLgoKKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gQk9PVFAgKGRoY3BfbGVhc2V0aW1lIG9wdGlvbikKICBbcG9pbnRlZCBvdXQgYnkgTmljb2xhcyBMYWNyZXNzb25uaehyZSwgMiBKdW4gMjAwM10KCiogUGF0Y2ggYnkgTWFyayBSYWtlcywgMTQgTWF5IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIEludGVsIGUxMDAwIGdpZyBjYXJkcy4KCiogUGF0Y2ggYnkgTnllIExpdSwgMyBKdW4gMjAwMzoKICBmaXggY3JpdGljYWwgdHlwbyBpbiBNQU1SIGRlZmluaXRpb24gKGluY2x1ZGUvbXBjOHh4LmgpCgoqIEZpeCByZXF1aXJlbWVudCB0byBhbGlnbiBVLUJvb3QgaW1hZ2Ugb24gMTYga0IgYm91bmRhcmllcyBvbiBQUEMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDIgSnVuIDIwMDMKICBNaW5vciBjaGFuZ2VzIGZvciBLVVA0SyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOSBNYXkgMjAwMzoKICBGaXhlZCByYXJwIGJvb3QgbWV0aG9kIGZvciBJQTMyIGFuZCBvdGhlciBsaXR0bGUtZW5kaWFuIENQVXMuCgoqIFBhdGNoIGJ5IE1hcmMgU2luZ2VyLCAyOCBNYXkgMjAwMzoKICBBZGRlZCBwb3J0IEkvTyBjb21tYW5kcy4KCiogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAyOCBNYXkgMjAwMwogIC0gY3B1L21wYzgyNHgvc3RhcnQuUzogZml4IHJlbG9jYXRpb24gY29kZSB3aGVuIGJvb3RpbmcgZnJvbSBSQU0KICAtIG1pbm9yIHBhdGNoZXMgZm9yIHV0eDgyNDUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAyOCBNYXkgMjAwMzoKICB4ODYgdXBkYXRlCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDkgTWF5IDIwMDMgKyAyNyBNYXkgMjAwMzoKICBhZGQgbmFuZCBmbGFzaCBzdXBwb3J0IHRvIFNYTkk4NTVUIGNvbmZpZ3VyYXRpb24KICBmaXgvZXh0ZW5kIG5hbmQgZmxhc2ggc3VwcG9ydDoKICAtIGZpeCAnbmFuZCBlcmFzZScgY29tbWFuZCBzbyBkb2VzIG5vdCBlcmFzZSBiYWQgYmxvY2tzCiAgLSBmaXggJ25hbmQgd3JpdGUnIGNvbW1hbmQgc28gZG9lcyBub3Qgd3JpdGUgdG8gYmFkIGJsb2NrcwogIC0gZml4IG5hbmRfcHJvYmUoKSBzbyBoYW5kbGVzIG5vIGZsYXNoIGRldGVjdGVkIHByb3Blcmx5CiAgLSBhZGQgZG9jL1JFQURNRS5uYW5kCiAgLSBhZGQgLmpmZnMyIGFuZCAub29iIG9wdGlvbnMgdG8gbmFuZCByZWFkL3dyaXRlCiAgLSBhZGQgJ25hbmQgYmFkJyBjb21tYW5kIHRvIGxpc3QgYmFkIGJsb2NrcwogIC0gYWRkICdjbGVhbicgb3B0aW9uIHRvICduYW5kIGVyYXNlJyB0byB3cml0ZSBKRkZTMiBjbGVhbiBtYXJrZXJzCiAgLSBtYWtlIE5BTkQgcmVhZC93cml0ZSBmYXN0ZXIKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDIzIE1heSAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBHZXQgKG1vc3RseSkgcmlkIG9mIENGR19NT05JVE9SX0xFTiBkZWZpbml0aW9uOyBjb21wdXRlIHJlYWwgbGVuZ3RoCiAgaW5zdGVhZCBDRkdfTU9OSVRPUl9MRU4gaXMgbm93IG9ubHkgdXNlZCB0byBkZXRlcm1pbmUgIF9hdF9jb21waWxlXwogIF90aW1lXyAgKCEpIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwKICBvciBpbiBhIHNlcGFyYXRlIGZsYXNoIHNlY3Rvci4KCiogQ2xlYW51cCBDRkdfREVSICNkZWZpbmVzIGluIGNvbmZpZyBmaWxlcyAod2QgbWFpbnRhaW5lZCBvbmx5KQoKKiBGaXggZGF0YSBhYm9ydCBleGNlcHRpb24gaGFuZGxpbmcgZm9yIGFybTkyMHQgQ1BVCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbXMgd2l0aCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRG9uYWxkIFdoaXRlLCAyMSBNYXkgMjAwMzoKICBmaXggY2FsY3VsYXRpb24gb2YgYmFzZSBhZGRyZXNzIGluIHBjaV9ob3NlX2NvbmZpZ19kZXZpY2UoKQoKKiBGaXggYnVnIGluIGNvbW1hbmQgbGluZSBwYXJzaW5nOiAiY21kMTtjbWQyIiBpcyBzdXBwb3NlZCB0byBhbHdheXMKICBleGVjdXRlICJjbWQyIiwgZXZlbiBpZiAiY21kMSIgZmFpbHMuIE5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudAogIHRvICJydW4gdmFyMSB2YXIyIiB3aGVyZSB0aGUgY29udGVudHMgb2YgInZhcjIiIHdpbGwgTk9UIGJlCiAgZXhlY3V0ZWQgd2hlbiBhIGNvbW1hbmQgaW4gInZhcjEiIGZhaWxzLgoKKiBBZGQgemVyby1jb3B5IHJhbWRpc2sgc3VwcG9ydCAocmVxdWlyZXMgY29ycmVzcG9uZGluZyBrZXJuZWwgc3VwcG9ydCEpCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAyMCBNYXkgMjAwMzoKICBJbiBwcmVwYXJhdGlvbiBmb3IgYW4gaXhwIHBvcnQsIHJlbmFtZSBjcHUveHNjYWxlIGFuZCBhcmNoLXhzY2FsZQogIGludG8gY3B1L3B4YSBhbmQgYXJjaC1weGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgTWF5IDIwMDM6CiAgLSBJQk0gUFBDNDA1RVAgcG9ydCBhZGRlZC4KICAtIENPTkZJR19VQVJUMV9DT05TT0xFIGFkZGVkLiBJZiBkZWZpbmVkIGludGVybmFsIFVBUlQxIChhbmQgbm90CiAgICBVQVJUMCkgaXMgdXNlZCBhcyBkZWZhdWx0IFUtQm9vdCBjb25zb2xlLiBQUEM0eHggb25seSEKICAtIGVzZCBBU0g0MDUgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkKS4KICAtIEJVQklOR0E0MDVFUCBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQgLSBJQk0gRXZhbCBCb2FyZCkuCiAgLSBlc2QgQ1BDSTQwNUFCIGJvYXJkIGFkZGVkLgogIC0gZXNkIFBNQzQwNSBib2FyZCBhZGRlZC4KICAtIFVwZGF0ZSBvZiBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxOSBNYWkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNS0zIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDIyIE1heSAyMDAzOgogIEZpeCBwcm9ibGVtIHdpdGggb25seSBwYXJ0aWFsbHkgY2xlYXJlZCAuYnNzIHNlZ21lbnQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEyIE1heSAyMDAzOgogIGdldCBQQ0kgdG8gd29yayBvbiBhIE1QQzgyNjZBRFMgYm9hcmQ7IGluY29ycG9yYXRlIGNoYW5nZSB0bwogIGNwdS9tcGM4MjYwL3BjaS5jIHRvIGVuYWJsZSBvdmVycmlkZXMgb2YgUENJIG1lbW9yeSBwYXJhbWV0ZXJzCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDEgTWF5IDIwMDM6CiAgbWlub3IgcGF0Y2hlcyBmb3IgdGhlIEZBRFM4eHgKCiogUGF0Y2ggYnkgVGhvbWFzIFNjaORmZXIsIDI4IEFwciAyMDAzOgogIEZpeCBTUEQgaGFuZGxpbmcgZm9yIDI1NiBFQ0MgRElNTSBvbiBXYWxudXQKCiogQWRkIHN1cHBvcnQgZm9yIGFyYml0cmFyeSBiaXRtYXBzIGZvciBUUkFCJ3MgIFZGRCBjb21tYW5kOwogIGFsbG93IHRvIHBhc3MgYm9vdCBiaXRtYXAgYWRkcmVzc2VzIGluIGVudmlyb25tZW50IHZhcmlhYmxlczsKICBhbGxvdyBmb3IgemVybyBib290IGRlbGF5CgoqIFBhdGNoIGJ5IENocmlzdGlhbiBHZWnfaW5nZXIsIDE5IE1heSAyMDAyOgogIE9uIFRSQUI6IHdhaXQgdW50aWwgdGhlIGR1bW15IGJ5dGUgaGFzIGJlZW4gY29tcGxldGVseSBzZW50CgoqIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMjIgQXByIDIwMDM6CiAgdXBkYXRlIGZvciBDcmF5TDEgYm9hcmQKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDIxIEFwciAyMDAzOgogIGFkZCBib290IHN1cHBvcnQgZm9yIEFSVE9TIChhIHByb3ByaWV0YXJ5IE9TKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMSBBcHIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMzOAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDI0IEphbiAyMDAzOgogIEZpeCBjb3VudGluZyBvZiBleHRlbmRlZCBwYXJ0aXRpb25zIGluIGRpc2tib290IGNvbW1hbmQKCiogUGF0Y2ggYnkgQ2hyaXN0b3BoZSBMaW5kaGVpbWVyLCAyMCBNYXkgMjAwMzoKICBhbGxvdyB0aGUgdXNlIG9mIENGR19MT0FEUyB3aGVuIENGR19OT19GTEFTSCBpcyBzZXQKCiogRml4IFNEUkFNIHRpbWluZyBvbiBQdXJwbGUgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBvbiBBVEMgYm9hcmQKICAoaW5jbHVkZXMgc3VwcG9ydCBmb3IgSW50ZWwgODIzNjUgYW5kIGNvbXBhdGlibGUgUEMgQ2FyZCBjb250cm9sbGVycywKICBhbmQgWWVudGEtY29tcGF0aWJsZSBQQ0ktdG8tQ2FyZEJ1cyBjb250cm9sbGVycykKCiogUGF0Y2ggYnkgTWF0aGlqcyBIYWFybWFuLCAwOCBNYXkgMjAwMzoKICBBZGQgbGFuOTFjOTYgZHJpdmVyICh0ZXN0ZWQgb24gTHViYm9jayBhbmQgY3VzdG9tIFBYQTI1MCBib2FyZCBvbmx5KQoKKiBGaXggcHJvYmxlbSB3aXRoIHVzYWdlIG9mICJ0cnVlIiAodW5kZWZpbmVkIGluIGN1cnJlbnQgdmVyc2lvbnMgb2YgYmZkLmgpCgoqIEFkZCBzdXBwb3J0IGZvciBQcm9tZXNzIEFUQyBib2FyZAoKKiBQYXRjaCBieSBLZWl0aCBPdXR3YXRlciwgMjggQXByIDIwMDM6CiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGFuZCBhZGRpdGlvbnMgdG8gR0VOODYwVCBib2FyZCBzcGVjaWZpYyBjb2RlLgogIC0gQWRkZWQgR0VOODYwX1NDIHZhcmlhbnQgdG8gR0VOODYwVC4KICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgdG8gR0VOODYwVCBkb2N1bWVudGF0aW9uLgogIC0gQ29ycmVjdCBkdXBsaWNhdGUgZW50cnkgaW4gVS1Cb290IENSRURJVFMgZmlsZS4KICAtIEFkZCBHRU44NjBUX1NDIGVudHJ5IGluIE1BSU5UQUlORVJTIGZpbGUuCiAgLSBVcGRhdGUgQ1JFRElUUyBmaWxlIHdpdGggR0VOODYwVF9TQyBpbmZvLgoKKiBVcGRhdGUgU21pdGhzIEFlcm9zcGFjZSBhZGRyZXNzZXMgaW4gTUFJTlRBSU5FUlMgZmlsZQoKKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gaHVzaCdzIHZlcnNpb24gb2YgInJ1biIgY29tbWFuZAoKKiBMV01PTiBleHRlbnNpb25zOgogIC0gU3BsYXNoc2NyZWVuIHN1cHBvcnQKICAtIG1vZGVtIHN1cHBvcnQKICAtIHN5c21vbiBzdXBwb3J0CiAgLSB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgZW5hYmxpbmcgb2YgTENECgoqIEFsbG93IGJvb3RpbmcgZnJvbSBvbGQgIlBQQ0Jvb3QiIGRpc2sgcGFydGl0aW9ucwoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI1NSBCb2FyZCAvIE1QQzgyNTUgQ1BVCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNYWtlIHN1cmUgQmxvY2sgTG9jayBCaXRzIGdldCBjbGVhcmVkIGluIFIzNjBNUEkgZmxhc2ggZHJpdmVyCgoqIE1QQzgyMyBMQ0QgZHJpdmVyOiBGaWxsIGNvbG9yIG1hcCBiYWNrd2FyZHMsIHRvIGFsbG93IGZvciBzdGVhZHkKICBkaXNwbGF5IHdoZW4gTGludXggdGFrZXMgb3ZlcgoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUyAodGhpcyB0aW1lIGZvciByZWFsKS4KCiogQWRkIHN1cHBvcnQgZm9yICJibXAgaW5mbyIgYW5kICJibXAgZGlzcGxheSIgY29tbWFuZHMgdG8gbG9hZAogIGJpdG1hcCBpbWFnZXM7IHRoaXMgY2FuIGJlIHVzZWQgKGZvciBleGFtcGxlIGluIGEgInByZWJvb3QiCiAgY29tbWFuZCkgdG8gZGlzcGxheSBhIHNwbGFzaCBzY3JlZW4gdmVyeSBxdWlja2x5IGFmdGVyIHBvd2Vyb24uCgoqIEFkZCBzdXBwb3J0IGZvciAxMzMgTUh6IGNsb2NrIG9uIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgTHV0eiBEZW5uaWcsIDEwIEFwciAyMDAzOgogIFVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAoKKiBBZGQgbmV3IG1lYW5pbmcgdG8gImF1dG9zdGFydCIgZW52aXJvbm1lbnQgdmFyaWFibGU6CiAgSWYgc2V0IHRvICJubyIsIGEgc3RhbmRhbG9uZSBpbWFnZSBwYXNzZWQgdG8gdGhlCiAgImJvb3RtIiBjb21tYW5kIHdpbGwgYmUgY29waWVkIHRvIHRoZSBsb2FkIGFkZHJlc3MKICAoYW5kIGV2ZW50dWFsbHkgdW5jb21wcmVzc2VkKSwgYnV0IE5PVCBiZSBzdGFydGVkLgogIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9hZCBhbmQgdW5jb21wcmVzcyBhcmJpdHJhcnkKICBkYXRhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEFwciAyMDAzOgogIENoYW5nZWQgREhDUCBjbGllbnQgdG8gdXNlIElQIGFkZHJlc3MgZnJvbSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NAogIGZyb20gdGhlIE9GRkVSIHBhY2tldCBpbiB0aGUgc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQgaW4gdGhlIFJFUVVFU1QKICBwYWNrZXQuIFRoaXMgZml4ZXMgYSBwcm9ibGVtIHVzaW5nIGEgV2luZG93cyAyMDAwIERIQ1Agc2VydmVyLAogIHdoZXJlIHRoZSBESENQLXNlcnZlciBpcyBub3QgdGhlIFRGVFAtc2VydmVyLgoKKiBTZXQgbWF4IGJyaWdodG5lc3MgZm9yIE1OMTEyMzYgZGlzcGxheXMgb24gVFJBQiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBtb2R1bGVzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgNCBBcHIgMjAwMzoKICBBZGQgSURNQSBleGFtcGxlIGNvZGUgKHRlc3RlZCBvbiA4MjYwIG9ubHkpCgoqIEFkZCBzdXBwb3J0IGZvciBQdXJwbGUgQm9hcmQgKE1JUFM2NCA1S2MpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTNjQgNUtjIENQVXMKCiogRml4IG1pc3Npbmcgc2V0dGluZyBvZiAibG9hZGFkZHIiIGFuZCAiYm9vdGZpbGUiIG9uIEFSTSBhbmQgTUlQUwoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgQXByIDIwMDM6CiAgLSB1cGRhdGUgTUlQNDA1LTQgYm9hcmQKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IEFwciAyMDAzOgogIC0gVS1Cb290IHZlcnNpb24gZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgYWRkZWQKICAgIChDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSkuCiAgLSBDaGFuZ2VkIFBQQzQwNUdQciB2ZXJzaW9uIGZyb20gQSB0byBCLgogIC0gQ2hhbmdlZCBDUENJNDA1IHRvIHVzZSBDVFMgaW5zdGVhZCBvZiBEU1Igb24gUFBDNDA1IFVBUlQxLgoKKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCAwMyBBcHJpbCAyMDAzOgogIC0gZml4IFBDSSBJUlFzIG9uIE1QTCBib2FyZHMKICAtIGZpeCB0d28gbW9yZSB1bi1yZWxvY2F0ZWQgcG9pbnRlciBwcm9ibGVtcwoKKiBGaXggYmVoYXZpb3VyIG9mICJydW4iIGNvbW1hbmQ6CiAgLSBwcmludCBlcnJvciBtZXNzYWdlIGl2IHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0CiAgLSB0ZXJtaW5hdGUgcHJvY2Vzc2luZyBvZiBhcmd1bWVudHMgaW4gY2FzZSBvZiBlcnJvcgoKKiBQYXRjaGVzIGJ5IFBldGVyIEZpZ3VsaSwgMTAgTWFyIDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBCVFVBUlQgb24gUFhBIHBsYXRmb3JtCiAgLSBBZGQgc3VwcG9ydCBmb3IgV0VQIEVQMjUwIChQWEEpIGJvYXJkCgoqIEZpeCBmbGFzaCBwcm9ibGVtcyBvbiBJTkNBLUlQOyBhZGQgdG9vbCB0byBhbGxvdyBicnVuaW5nIGltYWdlcyAgdG8KICBmbGFzaCB1c2luZyBhIEJESTIwMDAKCiogSW1wbGVtZW50IGZpeCBmb3IgSTJDIEVkZ2UgQ29uZGl0aW9ucyBwcm9ibGVtIGZvciBhbGwgYm9hcmRzIHRoYXQKICB1c2UgdGhlIGJpdC1iYW5naW5nIGRyaXZlciAoY29tbW9uL3NvZnRfaTJjLmMpCgoqIFBhdGNoIGJ5IE1hcnRpbiBXaW5pc3RvZXJmZXIsIDIzIE1hciAyMDAzCiAgLSBBZGQgcG9ydCB0byBNUEM1NTUvNTU2IG1pY3JvY29udHJvbGxlcnMKICAtIEFkZCBzdXBwb3J0IGZvciBjbWkgY3VzdG9tZXIgYm9hcmQgd2l0aAogICAgSW50ZWwgMjhGMTI4SjNBLCAyOEYzMjBKM0Egb3IgMjhGNjQwSjNBIGZsYXNoLgoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDI4IE1hciAyMDAzOgogIC0gZml4IGNvbW1vbi9jbWRfbmFuZC5jCgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCAyNCBNYXIgMjAwMzoKICAtIGFkZCB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQoKKiBBZGQgcGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDMxIE1hciAyMDAzOgogIC0gYWRkIGN0cmwtYyBzdXBwb3J0IGZvciBrZXJtaXQgZG93bmxvYWQKICAtIGFsaWduIGJkaW5mbyBvdXRwdXQgb24gQVJNCiAgLSBjc2IyMjYgYm9hcmQ6IGJyaW5nIGluIHN5bmMgd2l0aCBpbm5va29tL21lbXNldHVwLlMKICAtIGNzYjIyNiBib2FyZDogZml4IE1EUkVGUiBoYW5kbGluZwogIC0gbWlzYyBkb2MgZml4ZXMgLyBleHRlbnNpb25zCiAgLSBpbm5va29tIGJvYXJkOiBjbGVhbnVwLCBNRFJFRlIgZml4IGluIG1lbXNldHVwLlMsIGNvbmZpZyB1cGRhdGUKICAtIGFkZCBCT09UX1BST0dSRVNTIHRvIGFybWxpbnV4LmMKCiogQWRkIENQVSBJRCwgdmVyc2lvbiwgYW5kIGNsb2NrIHNwZWVkIGZvciBJTkNBLUlQCgoqIFBhdGNoZXMgYnkgRGF2ZSBFbGxpcywgMTggTWFyIDIwMDMgZm9yIFNYTkk4NTVUIGJvYXJkOgogIC0gZml4IFNSQU0gYW5kIFNEUkFNIG1lbW9yeSBzaXppbmcKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQKICAtIGFkZCBNQUMgYWRkcmVzcyBmb3Igc2Vjb25kIChTQ0MxKSBldGhlcm5ldCBwb3J0CgoqIFVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGZvciBUUU04MjYwIGJvYXJkCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTYgTWFyIDIwMDM6CiAgLSBBZGQgTkFORCBmbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgZXJhc2luZyBOQU5ECiAgICBmbGFzaCAoY2VydGFpbiBmb3JtcyBvZiB3aGljaCBhcmUgY2FsbGVkIFNtYXJ0TWVkaWEpLgogIC0gQWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdC4KCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE5IE1hciAyMDAzOgogIC0gdXNlIGFybS1saW51eC1nY2MgYXMgZGVmYXVsdCBjb21waWxlciBmb3IgQVJNCiAgLSBmaXggaTJjIGZpeHVwIGNvZGUKICAtIGZpeCBtaXNzaW5nIGJhdWRyYXRlIHNldHRpbmcKICAtIGFkZGVkICRsb2FkYWRkciAvIENGR19MT0FEX0FERFIgc3VwcG9ydCB0byBsb2FkYgogIC0gbW92ZWQgImlnbm9yaW5nIHRyYWlsaW5nIGNoYXJhY3RlcnMiIF9iZWZvcmVfIHUtYm9vdCB3YW50cyB0bwogICAgcHJpbnQgb3V0IGRpYWdub3N0aWNzIG1lc3NhZ2VzOyByZW1vdmVzIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhlCiAgICBlbmQgb2YgdHJhbnNtaXNzaW9uCgoqIFBhdGNoIGJ5IEpvaG4gWmhhbiwgMTggTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNpbm9WZWUgTWljcm9zeXN0ZW1zIFNDOHh4IGJvYXJkcwoKKiBQYXRjaCBieSBSb2xmIE9mZmVybWFubnMsIDIxIE1hciAyMDAzOgogIHBvcnRlZCB0aGUgZG5wMTExMCByZWxhdGVkIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCBhcm1ib290IGN2cyB0bwogIGN1cnJlbnQgdS1ib290IGN2cy4gc21jOTExMTEgZG9lcyBub3Qgd29yay4gcHJvYmxlbSBtYXJrZWQgaW4KICBzbWM5MTExMS5jLCBncmVwIGZvciAiRklYTUUiLgoKKiBQYXRjaCBieSBCcmlhbiBBdWxkLCAyNSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU1RNIGZsYXNoIGNoaXBzIG9uIGVib255IGJvYXJkCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODI1MCBCb2FyZHMgKFBNODI1IG1vZHVsZSkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNSBNYXIgMjAwMzoKICAtIFBDSTQwNSB1cGRhdGUuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgTWFyIDIwMDM6CiAgLSBDUENJNDA1MiB1cGRhdGUgKHN1cHBvcnQgZm9yIHJldmlzaW9uIDMpLgogIC0gU2V0IGVkZ2UgY29uZGl0aW9uaW5nIGNpcmN1aXRyeSBvbiBQUEM0MDVHUHIgZm9yIGNvbXBhdGliaWxpdHkKICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCiAgLSBDbGlwIHVkaXYgdG8gNSBiaXRzIG9uIFBQQzQwNSAoc2VyaWFsLmMpLgoKKiBFeHRlbmQgSU5DQUlQIGJvYXJkIHN1cHBvcnQ6CiAgLSBhZGQgYXV0b21hdGljIFJBTSBzaXplIGRldGVjdGlvbgogIC0gYWRkICJiZGluZm8iIGNvbW1hbmQKICAtIHBhc3MgZmxhc2ggYWRkcmVzcyBhbmQgc2l6ZSB0byBMaW51eCBrZXJuZWwKICAtIHN3aXRjaCB0byAxNTAgTUh6IGNsb2NrCgoqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKICB0aGUgSFNZTkMvVlNZTkMuIFJlcXVpcmVzIG5ldyBDUExEIGNvZGUgKFZlcnNpb24gMTAxIGZvciBSZXYuIDEwMAogIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAxMiBNYXIgMjAwMzoKICBGaXggcmVsb2NhdGlvbiBwcm9ibGVtIG9mIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc3RyaW5nIHBvaW50ZXJzCiAgaW4gY29tbW9uL2NtZF9wY2kuYwoKKiBQYXRjaCBieSBLYWktVXdlIEJs9m0sIDEyIE1hciAyMDAzOgogIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CiAgLSB0aGUgbWVtb3J5IG1hbmdlbWVudCB3YXMgYnJva2VuLiBJdCBjYXVzZWQgaGF2b2Mgb24gbWFsbG9jIGJ5CiAgICB3cml0aW5nIGJleW9uZCB0aGUgYmxvY2sgYm91bmRhcmllcy4KICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZwogICAgaW4gc2hvcnQgZmlsZSByZWFkcy4KICAtIGRhdGEgY29weWluZyBub3cgb3B0aW9uYWxseSB0YWtlcyBmcmFnbWVudCB2ZXJzaW9uIG51bWJlcnMgaW50bwogICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCiAgU2VlIGRvYy9SRUFETUUuSkZGUzIgZm9yIGRldGFpbHMuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTIgTWFyIDIwMDM6CiAgLSAxNi8zMiBNQiBhbmQgNTAvODAgTUh6IHN1cHBvcnQgd2l0aCBhdXRvLWRldGVjdGlvbiBmb3IgSVA4NjAKICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQQzQ1CiAgLSBuZXcgQk9PVFJPTS9GTEFTSDAgYW5kIERPQyBiYXNlIGZvciBQTTgyNgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEyIE1hciAyMDAzOgogIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAoKKiBOYW1lIGNsZWFudXA6CiAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCiAgcy9wSW1hZ2UvdUltYWdlLyAgaW4gc29tZSBmaWxlcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKCiogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBEYWxsYXMgZHMxNjR4IFJUQwoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMzEgSmFuIDIwMDM6CiAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gSTJDIGNvbnRyb2xsZXIgaW4gdGhlIFNhbXN1bmcgczNjMjR4MCBjaGlwcwogIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEZlYiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCA1IEZlYiAyMDAzOgogIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKICBjaGFuZ2VzIG9mIEVCREYgYnkgc29mdHdhcmUKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA3IEZlYiAyMDAzOgogICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCgoqIFRSQUIgZml4ZXMgLyBleHRlbnNpb25zOgogIC0gUmVzdG9yZSBWRkQgYnJpZ2h0bmVzcyBhcyBzYXZlZCBpbiBlbnZpcm9ubWVudAogIC0gYWRkIHN1cHBvcnQgZm9yIEZ1aml0c3UgZmxhc2hlcwogIC0gbWFrZSBzdXJlIGJvdGggYnV6emVycyBhcmUgdHVybmVkIG9mZiAoZHJpdmUgbG93IGxldmVsKQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDYgTWFyIDIwMDM6CiAgLSBmaXggYnVnIGluIEJPT1RQIGNvZGUgKG11c3QgdXNlIE5ldENvcHlJUCkKICAtIHVwZGF0ZSBvZiBDU0IyMjYgcG9ydAogIC0gY2xlYXIgQlNTIHNlZ21lbnQgb24gWFNjYWxlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBpMmNfaW5pdF9ib2FyZCgpIGZ1bmN0aW9uCiAgLSB1cGRhdGUgdG8gdGhlIElubm9rb20gcGxhdHRmb3JtCgoqIEV4dGVuZCBzdXBwb3J0IGZvciByZWR1bmRhbmQgZW52aXJvbm1lbnRzIGZvciBjb25maWd1cmF0aW9ucyB3aGVyZQogIGVudmlyb25tZW50IHNpemUgPCBzZWN0b3Igc2l6ZQoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTMgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE5IEZlYiAyMDAzOgogIHBhdGNoZXMgZm9yIHRoZSBJbnRlbCBsdWJib2NrIGJvYXJkOgogIG1lbXNldHVwLlMgLSBnZW5lcmFsIGNsZWFudXAgKGJhc2VkIG9uIFJvYmVydCdzIGNzYjIyNiBjb2RlKQogIGZsYXNoLmMgLSBvdmVyaGF1bCwgYWN0dWFsbHkgd29ya3Mgbm93CiAgbHViYm9jay5jIC0gZml4IGluaXQgZnVuY3MgdG8gcmV0dXJuIHByb3BlciB2YWx1ZQoKKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjYgRmViIDIwMDM6CiAgLSBGaXhlZCBvZmYgYnkgb25lIGluIFJGVEEgY2FsY3VsYXRpb24uCiAgLSBObyBuZWVkIHRvIGFib3J0IHdoZW4gTERGIGlzIGxvd2VyIHRoYW4gd2UgY2FuIHByb2dyYW0gaXQncyBvbmx5CiAgICBtaW5pbXVtIHRpbWluZyBzbyBjbGFtcCBpdCB0byB3aGF0IHdlIGNhbiBkby4KICAtIFRha2VzIGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnVuY3Rpb24gZm9yIHJlYWRpbmcgdGhlIHNwZF9udnJhbS4gVXNlZnVsbAogICAgZm9yIGZha2luZyBkYXRhIG9yIGhhcmRjb2RlIGEgbW9kdWxlIHdpdGhvdXQgdGhlIG52cmFtLgogIC0gZml4IG90aGVyIHVzZXIgZm9yIGFib3ZlIGNoYW5nZQogIC0gZml4IHNvbWUgY29tbWVudHMuCgoqIFBhdGNoZXMgYnkgQnJpYW4gV2FpdGUsIDI2IEZlYiAyMDAzOgogIC0gZml4IHBvcnQgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBzY2FuCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxIE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBFTUsgVE9QODYwIE1vZHVsZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwMiBNYXIgMjAwMzoKICBBZGQgU1BEIEVFUFJPTSBzdXBwb3J0IGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjEgSmFuIDIwMDM6CiAgLSBBZGQgc3VwcG9ydCBmb3IgSW5ub2tvbSBib2FyZAogIC0gRG9uJ3QgY29tcGxhaW4gaWYgImluc3RhbGwiIGZhaWxzCiAgLSBSRUFETUUgY2xlYW51cCAocmVtb3ZlIGR1cGxpY2F0ZWQgbGluZXMpCiAgLSBVcGRhdGUgUFhBIGhlYWRlciBmaWxlcwoKKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZXhpc3RpbmcgUE9TVCBjb2RlIChkb2MvUkVBRE1FLlBPU1QpCgoqIFBhdGNoIGJ5IExhdWRuZXkgUmVuLCAxNSBKYW4gMjAwMzoKICBGaXggaGFuZGxpbmcgb2YgcmVkdW5kYW5kIGVudmlyb25tZW50IGluICJ0b29scy9lbnZjcmMuYyIKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjggRmViIDIwMDM6CiAgQWRkIGJlZGJ1ZyBzdXBwb3J0IGZvciA4MjR4IHN5c3RlbXMKCiogQWRkIHN1cHBvcnQgZm9yIDE2IE1CIGZsYXNoIGNvbmZpZ3VyYXRpb24gb2YgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBFcndpbiBSb2wsIDI3IEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEVNUwoKKiBBZGQgaW1hZ2UgaW5mb3JtYXRpb24gdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTggRmViIDIwMDM6CiAgQ1BDSUlTRVI0IGNvbmZpZ3VyYXRpb24gdXBkYXRlZC4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBGZWIgMjAwMzoKICBGaXhlZCBidWcgaW4gZXh0LiBzZXJpYWwgY2xvY2sgc2V0dXAgb24gUFBDNDA1IChzaW5jZSBQUEM0NDAgcG9ydCkuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgRmViIDIwMDM6CiAgQWRkICJwY2lkZWxheSIgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIG1zLCBlbmFibGVkIHZpYQogIENPTkZJR19QQ0lfQk9PVERFTEFZKS4KICBQQ0kgc3BlYyAyLjIgZGVmaW5lcywgdGhhdCBhIHBjaSB0YXJnZXQgaGFzIDJeMjUgcGNpIGNsb2NrcyBhZnRlcgogIFJTVCMgdG8gcmVzcG9uZCB0byBjb25maWd1cmF0aW9uIGN5Y2xlcyAoMzNNSHogLT4gMXMpLgoKKiBGaXggZHVhbCBQQ01DSUEgc2xvdCBzdXBwb3J0ICh3aGVuIHJ1bm5pbmcgd2l0aCBqdXN0IG9uZQogIHNsb3QgcG9wdWxhdGVkKQoKKiBBZGQgVkZEIHR5cGUgZGV0ZWN0aW9uIHRvIHRyYWIgYm9hcmQKCiogZXh0ZW5kIGRyaXZlcnMvY3M4OTAwLmMgZHJpdmVyIHRvIHN5bmNocm9uaXplICBldGhhZGRyICBlbnZpcm9ubWVudAogIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciA0TUIgYW5kIDEyOE1CIG9uYm9hcmQgU0RSQU0gKGNwdS9wcGM0eHgvc2RyYW0uYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFMzMiA0S2MgQ1BVcwoKKiBBZGQgc3VwcG9ydCBmb3IgSU5DQS1JUCBCb2FyZAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIGR1YWwgZXRoZXJuZXQgc3VwcG9ydCBvbiBQTTgyNgoKKiBBZGQgc3VwcG9ydCBmb3IgTFhUOTcxIFBIWSBvbiBQTTgyNgoKKiBQYXRjaCBieSBUb3JkIEFuZGVyc3NvbiwgMTYgSmFuIDIwMDM6CiAgRml4IGZsYXNoIHNlY3RvciBjb3VudCBmb3IgVFFNOHh4TAoKKiBGaXggSTJDIEVFUFJPTSBwcm9ibGVtIG9uIElDVTg2MiBib2FyZCAod291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QKICAxNiBieXRlcyBvdXQgb2YgZWFjaCAzMiBieXRlIGJsb2NrKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIFYzNyBib2FyZAogIChwYXRjaCBieSBK824gQmVuZWRpa3Rzc29uLCAxMSBEZWMgMjAwMikKCiogVXBkYXRlIGJhdWRyYXRlIGluIGJkX2luZm8gd2hlbiBpdCBnZXRzIGNoYW5nZWQKCiogQWRkIHdhdGNoZG9nIHRyaWdnZXIgcG9pbnRzIHdoaWxlIHdhaXRpbmcgZm9yIHNlcmlhbCBwb3J0CiAgKHNvIGZhciBvbmx5IDh4eCAtLSBuZWVkZWQgb24gTFdNT04gd2l0aCAxMDBtcyB3YXRjaGRvZykKCiogSW1wcm92ZSBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGZpZ3VyYXRpb24gb2YgdGhlIHV0aWxpdHksIHVzaW5nIGEgY29uZmlnIGZpbGUpCgoqIEFkZCBzaW5nbGUgcXVvdGUgc3VwcG9ydCBmb3IgKG9sZCkgY29tbWFuZCBsaW5lIHBhcnNlcgoKKiBTd2l0Y2ggTFdNT04gYm9hcmQgZGVmYXVsdCBjb25maWcgZnJvbSBGUkFNIHRvIEVFUFJPTTsKICBpbiBQT1NULCBFRVBST00gc2hvd3MgdXAgb24gOCBhZGRyZXNzZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVzZSAxLWJ5dGUtcmVhZCBpbnN0ZWFkIG9mIC13cml0ZSBmb3IgaXByb2JlKCkgZnVuY3Rpb24KICBBZGQgaTJjIGNvbW1hbmRzIHRvIFBNODI2IGNvbmZpZwoKKiBleHRlbmQgSTJDIFBPU1QgY29kZTogY2hlY2sgZm9yIGxpc3Qgb24ga25vd24gYWRkcmVzc2VzCgoqIEltcHJvdmUgbG9nIGJ1ZmZlciBjb2RlOyB1c2UgImxvZ2xldmVsIiB0byBkZWNpZGUgd2hpY2ggbWVzc2FnZXMKICB0byBsb2cgb24gdGhlIGNvbnNvbGUsIHRvbyAobGlrZSBpbiBMaW51eCk7IGdldCByaWQgb2YgImxvZ3N0YXJ0IgoKKiBBZGQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChib2FyZC1zcGVjaWZpYyBmb3IgVFJBQiBub3csIHRvIGJlIGZpeGVkIGxhdGVyKQoKKiBQYXRjaCBieSBIYW5zLUpvZXJnIEZyaWVkZW4sIDA2IERlYyAyMDAyCiAgRml4IG1pc2MgcHJvYmxlbXMgd2l0aCBBbWlnYU9uZSBzdXBwb3J0CgoqIFBhdGNoIGJ5IENocmlzIEhhbGxpbmFuLCAzIERlYyAyMDAyOgogIG1pbm9yIGNsZWFudXAgdG8gdGhlIE1QQzgyNDUgRVBJQyBkcml2ZXIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIGV4dGVybmFsIChTSVUpIGludGVycnVwdHMgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEZpeCBuZXN0ZWQgc3lzY2FsbHMgYnVnIGluIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjcgTm92IDIwMDI6CiAgZml4IG91dHB1dCBvZiAicGNpaW5mbyIgY29tbWFuZCBmb3IgQ2FyZEJ1cyBicmlkZ2UgZGV2aWNlcy4KCiogRml4IGJ1ZyBpbiBUUU04MjYwIGJvYXJkIGRldGVjdGlvbiAtIGJvYXJkcyBnb3Qgc3R1Y2sgd2hlbiBib2FyZCBJRAogIHdhcyBub3QgcmVhZGFibGUKCiogQWRkIExFRCBpbmRpY2F0aW9uIGZvciBJREUgYWN0aXZpdHkgb24gS1VQNEsgYm9hcmQKCiogRml4IHN0YXJ0dXAgcHJvYmxlbXMgd2l0aCBWRkQgZGlzcGxheSBvbiBUUkFCCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDIwIE5vdiAyMDAyCiAgQWRkIGRyaXZlciBmb3IgRXBzb24gU0VEMTM4MDYgZ3JhcGhpYyBjb250cm9sbGVyLgogIEFkZCBzdXBwb3J0IGZvciBCTVAgbG9nb3MgaW4gY2ZiX2NvbnNvbGUgZHJpdmVyLgoKKiBBZGRlZCBzdXBwb3J0IGZvciBib3RoIFBDTUNJQSBzbG90cyAoYXQgdGhlIHNhbWUgdGltZSEpIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBSb2QgQm95Y2UsIDIxIE5vdiAyMDAyOgogIGZpeCBQQ01DSUEgb24gTUJYOHh4IGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyMSBOb3YgMjAwMgogIEFkZCBDRkdfQ1BNX1BPU1RfV09SRF9BRERSIHRvIG1ha2UgdGhlIG9mZnNldCBvZiB0aGUKICBib290bW9kZSB3b3JkIGluIERQUkFNIGNvbmZpZ3VyYWJsZQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDE4IE5vdiAyMDAyOgogIEZpeGVzIGZvciB4ODYgcG9ydCAobW9zdGx5IHN0cmluZ3MgaXNzdWVzKQoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMTggTm92IDIwMDI6CiAgRml4IGZvciBuYXRzZW1pIE5JQyBjYXJkcyAoRFA4MzgxNSkKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTkgTm92IDIwMDI6CiAgZml4IGEgYnVnIGZvciB0aGUgTUlJIGNvbmZpZ3VyYXRpb24sIGFuZCBzb21lIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFRob21hcyBGcmllZGVuLCAxMyBOb3YgMjAwMjoKICBBZGQgY29kZSBmb3IgQW1pZ2FPbmUgYm9hcmQKICAocHJlbGltaW5hcnkgbWVyZ2UgdG8gVS1Cb290LCBzdGlsbCBXSVApCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMiBOb3YgMjAwMjoKICAtIEFkZGluZyBVUkwgZm9yIElFRUUgT1VJIGxvb2t1cAogIC0gTWFraW5nIHRoZSBhdXRvYm9vdCAjZGVmaW5lcyBkZXBlbmRlbnQgb24gQ09ORklHX0FVVE9CT09UX0tFWUVECiAgICBiZWluZyBkZWZpbmVkLgogIC0gSW4gdGhlIENPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MgI2RlZmluZSwgdGhlIHJvb3Qtb24taW5pdHJkIGFuZAogICAgcm9vdC1vbi1uZnMgbWFjcm9zIGFyZSBkZXNpZ25lZCB0byBzd2l0Y2ggaG93IHRoZSBkZWZhdWx0IGJvb3QKICAgIG1ldGhvZCBnZXRzIGRlZmluZWQuCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTMgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIGkzODYgYXJjaGl0ZWN0dXJlIGFuZCBBTUQgU0M1MjAgYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTIgTm92IDIwMDI6CiAgQWRkIHN1cHBvcnQgZm9yIERPUyBmaWxlc3lzdGVtIGFuZCBib290aW5nIGZyb20gRE9TIGZsb3BweSBkaXNrCgoqIFBhdGNoIGJ5IEppbSBTYW5kb3osIDA3IE5vdiAyMDAyOgogIEluY3JlYXNlIG51bWJlciBvZiBuZXR3b3JrIFJYIGJ1ZmZlcnMgKFBLVEJVRlNSWCBpbgogICJpbmNsdWRlL25ldC5oIikgZm9yIEVFUFJPMTAwIGJhc2VkIGJvYXJkcyAoZXNwZWNpYWxseSBTUDgyNDApCiAgd2hpY2ggc2hvd2VkICJSZWNlaXZlciBpcyBub3QgcmVhZHkiIGVycm9ycyB3aGVuIFUtQm9vdCB3YXMKICBwcm9jZXNzaW5nIHRoZSByZWNlaXZlIGJ1ZmZlcnMgc2xvd2VyIHRoYW4gdGhlIG5ldHdvcmsgY29udHJvbGxlcgogIHdhcyBmaWxsaW5nIHRoZW0uCgoqIFBhdGNoIGJ5IEFuZHJlYXMgT2JlcnJpdHRlciwgMDkgTm92IDIwMDI6CiAgQ2hhbmdlIGJlaGF2aW91ciBvZiBOZXRMb29wKCk6IHJldHVybiAtMSBmb3IgZXJyb3JzLCBmaWxlc2l6ZQogIG90aGVyd2lzZTsgcmV0dXJuIGNvZGUgMCBpcyB2YWxpZCBhbiBtZWFucyBubyBmaWxlIGxvYWRlZCAtIGluIHRoaXMKICBjYXNlIHRoZSBlbnZpcm9ubWVudCBzdGlsbCBnZXRzIHVwZGF0ZWQhCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDkgTm92IDIwMDI6CiAgLSBpbXByb3ZlIEFEQy9EQUMgY2xvY2tpbmcgb24gdGhlIFNBQ1NuZyBib2FyZCB0byBhbGlnbgogICAgdGhlIGZhaWxpbmcgZWRnZXMgb2YgTFJDTEsgYW5kIFNDTEsKICAtIHNiYzgyNjAgY29uZmlndXJhdGlvbiB0d2Vha3MKICAtIGFkZCBzdGF0dXMgTEVEIHN1cHBvcnQgZm9yIDgyeHggc3lzdGVtcwogIC0gd2lyZSBzc3BpL3NzcG8gY29tbWFuZHMgaW50byBjb21tYW5kIGhhbmRsZXI7IGltcHJvdmVkIGVycm9yCiAgICBoYW5kbGVyaW5nCiAgLSBhZGQgdGltZXN0YW1wIHN1cHBvcnQgYW5kIGFsdGVybmF0ZSBtZW1vcnkgdGVzdCB0byB0aGUKICAgIFNBQ1NuZyBjb25maWd1cmF0aW9uCgoqIFBhdGNoIGJ5IFZpbmNlIEh1c292c2t5LCA3IE5vdiAyMDAyOgogIEFkZCAiLW4iIHRvIGxpbmtlciBvcHRpb25zIHRvIGdldCByaWQgb2YgIk5vdCBlbm91Z2ggcm9vbSBmb3IKICBwcm9ncmFtIGhlYWRlcnMiIHByb2JsZW0KCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAwNSBOb3YgMjAwMgogIFJlbmFtZSBDT05GSUdfUExMX0lOUFVUX0ZSRVEgdG8gQ09ORklHX1NZU19DTEtfRlJFUQogIHNvIHdlIGNhbiB1c2UgYW4gYWxyZWFkeSBleGlzdGluZyBuYW1lCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgSGFyZHdhcmUgcmVsYXRpZWQgaW1wcm92bWVudHMgaW4gRkRDIGJvb3QgY29kZQoKKiBQYXRjaCBieSBIb2xnZXIgU2NodXJpZywgNSBOb3YgMjAwMjoKICBNYWtlIHRoZSBQWEEgcmVhbGx5IGNoYW5nZSBpdCdzIGZyZXF1ZW5jeQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBzbGF2ZSBzZXJpYWwgU3BhcnRhbiAyIEZQR0FzCgoqIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeSAoTUFDICBhZGRyZXNzKSAgaW4gIDh4eCAgU0NDL0ZFQyAgZXRoZXJuZXQKICBkcml2ZXJzCgoqIEFkZCBzdXBwb3J0IGZvciBsb2cgYnVmZmVyIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gTGludXgga2VybmVsJ3MKICBzeXNsb2cgbWVjaGFuaXNtOyB1c2VkIGVzcGVjaWFsbHkgZm9yIFBPU1QgcmVzdWx0cy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMzEgT2N0IDIwMDI6CiAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3Iga3VwNGsgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNCBOb3YgMjAwMjoKICAtIHVzZSB3YXRjaGRvZyB0byByZXNldCBQWEEyNTAgc3lzdGVtcwogIC0gYWRkZWQgcHJvZ3Jlc3MgY2FsbGJhY2tzIHRvIChzb21lIG9mIHRoZSkgQVJNIGNvZGUKICAtIHVwZGF0ZSBmb3IgQ29nZW50IENTQjIyNiBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgRlBTODYwIGJvYXJkCgoqIFBhdGNoIGJ5IEd1aWxsYXVtZSBBbGV4YW5kcmUsLCAwNCBOb3YgMjAwMjoKICBJbXByb3ZlIFBDSSBhY2Nlc3Mgb24gMzItYml0cyBDb21wYWN0IFBDSSBidXMKCiogRml4IG1kZWxheSgpIG9uIFRSQUIgLSB0aGlzIHdhcyBzdGlsbCB0aGUgZGVidWdnaW5nIHZlcnNpb24gd2l0aAogIHNlY29uZHMgaW5zdGVhZCBvZiBtcy4KCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxIE5vdiAyMDAyOgogIFhTY2FsZSByZWxhdGVkIGNsZWFudXAgKGFmZmVjdHMgYWxsIEFSTSBib2FyZHMpCgoqIENsZWFudXAgb2YgbmFtZXMgYW5kIFJFQURNRS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KTm90ZXMgZm9yIFUtQm9vdCAwLjEuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mICJEYXMgVS1Cb290IiwgdGhlIFVuaXZlcnNhbCBCb290IExvYWRlci4KCkl0IGlzIGJhc2VkIG9uIHZlcnNpb24gMi4wLjAgKHRoZSAiSGFsbG93ZWVuIFJlbGVhc2UiKSBvZiBQUENCb290LgpGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QgcGxlYXNlIHNlZSB0aGUKUFBDQm9vdCBwcm9qZWN0IHBhZ2UgYXQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wcGNib290Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg==