PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggTGl0ZTUyMDBCIHN1cHBvcnQ6IGluaXRpYWxpemUgU0RlbGF5IHJlZ2lzdGVyCiAgU2VlIEZyZWVzY2FsZSdzIEFOMzIyMSAiTVBDNTIwMEIgU0RSQU0gSW5pdGlhbGl6YXRpb24gYW5kCiAgQ29uZmlndXJhdGlvbiIsIDMuMy4xIFNEZWxheS0tTUJBUiArIDB4MDE5MAoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgoKICAtIEFkZCBJbnRlbCBsZWdhY3kgbG9jay91bmxvY2sgc3VwcG9ydCB0byBjb21tb24gQ0ZJIGRyaXZlcgoKICAgIE9uIHNvbWUgSW50ZWwgZmxhc2gncyAoZS5nLiBJbnRlbCBKMykgbGVnYWN5IHVubG9ja2luZyBpcwogICAgc3VwcG9ydGVkLCBtZWFuaW5nIHRoYXQgdW5sb2NraW5nIG9mIG9uZSBzZWN0b3Igd2lsbCB1bmxvY2sKICAgIGFsbCBzZWN0b3JzIG9mIHRoaXMgYmFuay4gVXNpbmcgdGhpcyBmZWF0dXJlLCB1bmxvY2tpbmcKICAgIG9mIGFsbCBzZWN0b3JzIHVwb24gc3RhcnR1cCAodmlhIGVudiB2YXIgInVubG9jaz15ZXMiKSB3aWxsCiAgICBnZXQgbXVjaCBmYXN0ZXIuCgogIC0gRml4ZWQgcHJvYmxlbSB3aXRoIG11bHRpcGxlIHJlYWRzIG9mIGVudnJvbm1lbnQgdmFyaWFibGUKICAgICJ1bmxvY2siIGFzIHBvaW50ZWQgb3V0IGJ5IFJlaW5oYXJkIEFybHQgJiBBbmRlcnMgTGFyc2VuLgoKICAtIFJlbW92ZWQgdW53YW50ZWQgbGluZWZlZWRzIGZyb20gInByb3RlY3QiIGNvbW1hbmQgd2hlbgogICAgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04gaXMgZW5hYmxlZC4KCiAgLSBDaGFuZ2VkIHAzcDQwMCBib2FyZCB0byB1c2UgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBBcHIgMjAwNgoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gQ29ycmVjdGx5IGhhbmRsZSB0aGUgY2FzZXMgd2hlcmUgQ0ZHX0haICE9IDEwMDAgKHNldmVyYWwKICAgIFhTY2FsZS1iYXNlZCBib2FyZHMpCiAgLSBGaXggdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gb2YgYnVmZmVyZWQgd3JpdGVzIChvZmYgYnkgYQogICAgZmFjdG9yIG9mIDEwMDApCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMzEgTWFyIDIwMDYKCiogVXBkYXRlcyB0byBjb21tb24gUFBDNHh4IG9uYm9hcmQgKEREUilTRFJBTSBpbml0IGNvZGUgKDQwNSBhbmQgNDQwKQoKICA0MDUgU0RSQU06IC0gVGhlIFNEUkFNIHBhcmFtZXRlcnMgY2FuIG5vdyBiZSBkZWZpbmVkIGluIHRoZSBib2FyZAogICAgICAgICAgICAgICBjb25maWcgZmlsZSBhbmQgdGhlIDQwNSBTRFJBTSBjb250cm9sbGVyIHZhbHVlcyB3aWxsCiAgICAgICAgICAgICAgIGJlIGNhbGN1bGF0ZWQgdXBvbiBib290dXAgKHNlZSBQUENoYW1lbGVvbkVWQikuCiAgICAgICAgICAgICAgIFdoZW4gdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBib2FyZAogICAgICAgICAgICAgICBjb25maWcgZmlsZSwgdGhlIHJlZ2lzdGVyIHNldHVwIHdpbGwgYmUgYXMgaXQgaXMgbm93LAogICAgICAgICAgICAgICBzbyB0aGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgYnJlYWsgYW55IGN1cnJlbnQKICAgICAgICAgICAgICAgZGVzaWduIHVzaW5nIHRoaXMgY29kZS4KCiAgICAgICAgICAgICAgIFRoYW5rcyB0byBBbmRyZWEgTWFyc29uIGZyb20gREFWRSBmb3IgdGhpcyBwYXRjaC4KCiAgNDQwIEREUjogICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlCiAgICAgICAgICAgICAgIFRSMSB2YWx1ZSBmb3IgdGhlIEREUi4KICAgICAgICAgICAgIC0gQWRkZWQgRUNDIHN1cHBvcnQgKHNlZSBwM3A0NDApLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IE1hciAyMDA2CgoqIEZpeCBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUIGRlcGVuZGVuY3kgaW4gY3B1L2FybTkyMHQvc3RhcnQuUwogIFBhdGNoIGJ5IFBldGVyIE1lbnplYmFjaCwgMTMgT2N0IDIwMDUgW0ROWCMyMDA2MDQwMTQyMDAwNDczXQoKKiBBZGQgc3VwcG9ydCBmb3IgeW1vZGVtIHByb3RvY29sIGRvd25sb2FkCiAgUGF0Y2ggYnkgU3RlZmFubyBCYWJpYywgMjkgTWFyIDIwMDYKCiogTWVtb3J5IE1hcCBVcGRhdGUgZm9yIERlbHRhIGJvYXJkOiBVLUJvb3QgaXMgYXQgMHg4MDAwMDAwMC0weDg0MDAwMDAwCiAgTWVyZ2UgZnJvbSBNYXJrdXMgS2xvdHpi/GNoZXIncyByZXBvLCAwMSBBcHIgMjAwNgoKKiBHQ0MtNC54IGZpeGVzOiBjbGVhbiB1cCBnbG9iYWwgZGF0YSBwb2ludGVyIGluaXRpYWxpemF0aW9uIGZvciBhbGwKICBib2FyZHMKCiogVXBkYXRlIGZvciBEZWx0YSBib2FyZDoKICAtIHJlZHVuZGFudCBOQU5EIGVudmlyb25tZW50CiAgLSBtaXNjIE1vbmFoYW5zIGNsZWFudXBzIChyZW1vdmUgZGVhZCBjb2RlIGV0Yy4pCiAgLSBEQTkwMzAgSW5pdGlhbGl6YXRpb247IHNvbWUgbWluaW1hbCBjaGFuZ2VzIHRvIFBYQSBJMkMgZHJpdmVyIHRvCiAgICBtYWtlIGl0IHdvcmsgd2l0aCB0aGUgTW9uYWhhbnMuCiAgLSBNYWtlIE1vbmFoYW5zIGNsb2NrIGZyZXF1ZW5jeSBjb25maWd1cmFibGUgdXNpbmcKICAgIENGR19NT05BSEFOU19SVU5fTU9ERV9PU0NfUkFUSU8gYW5kCiAgICBDRkdfTU9OQUhBTlNfVFVSQk9fUlVOX01PREVfUkFUSU8uCiAgTWVyZ2UgZnJvbSBNYXJrdXMgS2xvdHpi/GNoZXIncyByZXBvLCAyNSBNYXIgMjAwNgoKKiBFbmFibGUgUXVhZCBVQVJUIG9tIE1DQzIwMCBib2FyZC4KCiogQ2xlYW51cCBNQ0MyMDAgYm9hcmQgY29uZmlndXJhdGlvbjsgb21pdCBub24tZXhpc3RlbnQgc3R1ZmYuCgoqIEFkZCBzdXBwb3J0IGZvciBNUEM4NTkvODY2IFJldi4gQS4wCgoqIEFkZCBjb21tYW5kIGZvciBoYW5kbGluZyBERFIgRUNDIHJlZ2lzdGVycyBvbiBNUEM4MzQ5RUUgTURTIGJvYXJkLgoKKiBGaXggRERSIEVDQyBiaXQgZGVmaW5pdGlvbnMgZm9yIE1QQzgzeHguCgoqIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIE1QQzgzNDlFIE1EUyBib2FyZC4KCiogQWRkIHN1cHBvcnQgZm9yIEVDQyBERFIgaW5pdGlhbGl6YXRpb24gb24gTVBDODN4eC4KCiogQWRkIERNQSBzdXBwb3J0IGZvciBNUEM4M3h4LgoKKiBBZGQgc3luYyBpbiBkb19yZXNldCgpIHJvdXRpbmUgZm9yIE1QQzgzeHggYWZ0ZXIgUlBSIHJlZ2lzdGVyCiAgd2FzIHdyaXR0ZW4gdG8uIEl0IGlzIG5lZWQgb24gc29tZSB0YXJnZXRzIHdoZW4gQkFUIHRyYW5zbGF0aW9uCiAgaXMgZW5hYmxlZC4KCiogQWRkIGJpdCBkZWZpbml0aW9ucyBmb3IgTVBDODN4eCBERFIgY29udHJvbGxlciByZWdpc3RlcnMuCgoqIEFkZCBEY2J6KCksIERjYmkoKSBhbmQgRGNiZigpIHJvdXRpbmVzIGZvciBNUEM4M3h4LgoKKiBDb3JyZWN0IHNoaWZ0IG9mZnNldHMgaW4gaWNhY2hlX3N0YXR1cyBhbmQgZGNhY2hlX3N0YXR1cyBmb3IgTVBDODN4eC4KCiogQWRkIHN1cHBvcnQgZm9yIERTMTM3NCBSVEMgY2hpcC4KCiogQWRkIHN1cHBvcnQgZm9yIExpdGU1MjAwQiBib2FyZC4KICBQYXRjaCBieSAgUGF0Y2ggYnkgSm9zZSBNYXJpYSAoVHhlbWEpIExvcGV6LCAxNiBKYW4gMjAwNgoKKiBBcHBseSBTb0MgY29uY2VwdCB0byBhcm05MjZlanMgQ1BVcywgaS5lLiBtb3ZlIHRoZSBTb0Mgc3BlY2lmaWMKICB0aW1lciBhbmQgY3B1X3Jlc2V0IGNvZGUgZnJvbSBjcHUvJChDUFUpIGludG8gdGhlIG5ldwogIGNwdS8kKENQVSkvJChTT0MpIGRpcmVjdG9yaWVzCiAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTMgTWFyIDIwMDYKCiogQ2hhbmdlIG1heCBzaXplIG9mIHVuY29tcHJlc3NlZCB1SW1hZ2UncyB0byA4TUJ5dGUgYW5kIGFkZAogIENGR19CT09UTV9MRU4gdG8gYWRqdXN0IHRoaXMgc2V0dGluZy4KCiAgQXMgbWVudGlvbmVkIGJ5IFJvYmluIEdldHogb24gMjAwNS0wNS0yNCB0aGUgc2l6ZSBvZiB1bmNvbXByZXNzZWQKICB1SW1hZ2VzIHdhcyByZXN0cmljdGVkIHRvIDRNQnl0ZXMuIFRoaXMgZGVmYXVsdCBzaXplIGlzIG5vdwogIGluY3JlYXNlZCB0byA4TWJ5dGVzIGFuZCBjYW4gYmUgb3ZlcnJpZGVkIGJ5IHNldHRpbmcgQ0ZHX0JPT1RNX0xFTgogIGluIHRoZSBib2FyZCBjb25maWcgZmlsZS4KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBNYXIgMjAwNgoKKiBGaXggcHJvYmxlbSB3aXRoIHVwZGF0ZWQgUENJIGNvZGUgaW4gY3B1L3BwYzR4eC80MDVncF9wY2kuYwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgTWFyIDIwMDYKCiogY3B1L3BwYzR4eC9zdGFydC5TIDogZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBhZnRlciByZWxvY2F0aW9uCiAgUGF0Y2ggYnkgQ2VkcmljIFZpbmNlbnQsIDA2IEp1bCAyMDA1CgoqIGF1MXgwMF9ldGguYzogY2hlY2sgbWFsbG9jIHJldHVybiB2YWx1ZSBhbmQgYWJvcnQgaWYgaXQgZmFpbGVkCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CgoqIENoYW5nZSB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIHNvZnRfaTJjLmM6c2VuZF9hY2soKSB0byBrZWVwIGZyb20KICBpbmNvcnJlY3RseSBnZW5lcmF0aW5nIHN0YXJ0L3N0b3AgY29uZGl0aW9ucyBvbiB0aGUgYnVzLgogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyNiBKdWwgMjAwNQoKKiBGaXggYnVnIGluIFtpZF1jYWNoZV9zdGF0dXMgY29tbWFuZHMgZm9yIE1QQzg1eHggcHJvY2Vzc29yczsKICBzaG91bGQgbG9vayBhdCBMU0Igb2YgTDFDU1JuIHJlZ2lzdGVycyB0byBkZXRlcm1pbmUgaWYgTDEgY2FjaGUgaXMKICBlbmFibGVkLCBub3QgdGhlIE1TQi4KICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOSBKdWwgMjAwNQoKKiBGaXggYXJyYXkgb3ZlcmZsb3cgd2l0aCBmd19zZXRlbnYgb24gdW5pbml0aWFsaXNlZCBlbnZpcm9ubWVudAogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE1IEp1bCAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBFbWJlZGRlZFBsYW5ldCBFUDg4eCBib2FyZHMKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwNQoKKiBSZW1vdmUgYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBmcm9tIHRoZSBjb21tb24geGlsaW54CiAgZXRoZXJuZXQgYW5kIGlpYyBhZGFwdGVyIGNvZGUuCiAgUGF0Y2ggYnkgTWljaGFlbCBMaWJlc2tpbmQsIDEyIEp1bCAyMDA1CgoqIEFkZCBOYXQgU2VtaSBEUDgzODY1IFBIWSBzdXBwb3J0IHRvIE1QQzg1eHggVFNFQyBkcml2ZXIKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQoKKiBBZGQgKHNvbWUpIGRlZmluaXRpb25zIGZvciB0aGUgTVBDODV4eCBsb2NhbCBidXMgY29udHJvbGxlcgogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CgoqIEFkZCBDUE0yIEkvTyBwaW4gZnVuY3Rpb25zIGZvciBNUEM4NXh4IHByb2Nlc3NvcnMKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwOCBKdWwgMjAwNQoKKiBGaXggY29tcGlsZSBwcm9ibGVtCgoqIEFkZGVkIFBDSSBzdXBwb3J0IGZvciBNUEM4MzQ5QURTIGJvYXJkCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSAxMSBKYW4gMjAwNgoKKiBFbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBvbiBNUEM4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTAgRmViIDIwMDYKCiogRGVjb3B1bGVkIHNldHRpbmcgb2YgT1IvQlIgYW5kIExCTEFXQkFSL0xCTEFXQVIgb24gTVBDODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDI1IEphbiAyMDA2CgoqIEZpeGVkIGRlZmluZXMgZm9yIE1QQzgzeHggU0lDUkwgcmVnaXN0ZXIgdG8gbWF0Y2ggY3VycmVudCBzcGVjcwogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDIzIEphbiAyMDA2CgoqIE9ubHkgZGlzYWJsZSB0aGUgTVBDODN4eCB3YXRjaGRvZyBpZiBpdHMgZW5hYmxlZCBvdXQgb2YgcmVzZXQuCiAgSWYgaXRzIGRpc2FibGVkIG91dCBvZiByZXNldCBTVyBjYW4gbGF0ZXIgZW5hYmxlIGl0IGlmIHNvIGRlc2lyZWQKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBbGxvdyBjb25maWcgb2YgR1BJTyBkaXJlY3Rpb24gJiBkYXRhIHJlZ2lzdGVycyBhdCBib290IG9uIDgzeHgKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBFbmFibGUgdGltZSBoYW5kbGluZyBvbiA4M3h4CiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogTWFrZSBTeXN0ZW0gSU8gQ29uZmlnIFJlZ2lzdGVycyBib2FyZCBjb25maWd1cmFibGUgb24gTVBDODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEZpeGVkIFBDSSBpbmRpcmVjdCBjb25maWcgb3BzIHRvIGhhbmRsZSBtdWx0aXBsZSBQQ0kgY29udHJvbGxlcnMKICBXZSBuZWVkIHRvIGFkanVzdCB0aGUgYnVzIG51bWJlciB3ZSBhcmUgdHJ5aW5nIHRvIGFjY2VzcyBiYXNlZAogIG9uIHdoaWNoIFBDSSBjb250cm9sbGVyIGl0cyBvbgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDEyIEphbiAyMDA2CgoqIFJlcG9ydCBiYWNrIFBDSSBidXMgd2hlbiBkb2luZyB0YWJsZSBiYXNlZCBkZXZpY2UgY29uZmlnCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkZWQgc3VwcG9ydCBmb3IgUENJIHByZWZldGNoYWJsZSByZWdpb24gYW5kIEJBUnMKICBJZiBhIGhvc3QgY29udHJvbGxlciBzZXRzIHVwIGEgcmVnaW9uIGFzIHByZWZldGNoYWJsZSBhbmQKICBhIGRldmljZSdzIEJBUiBkZW5vdGVzIGl0IGFzIHByZWZldGNoYWJsZSwgYWxsb2NhdGUgdGhlCiAgQkFSIGludG8gdGhlIHByZWZldGNoIHJlZ2lvbi4KCiAgSWYgYSBCQVIgaXMgcHJlZmV0Y2hhYmxlIGFuZCBubyBwcmVmZXRjaGFibGUgcmVnaW9uIGhhcwogIGJlZW4gc2V0dXAgYnkgdGhlIGNvbnRyb2xsZXIgd2UgZmFsbCBiYWNrIHRvIGFsbG9jYXRpbmcKICB0aGUgQkFSIGludG8gdGhlIG5vcm1hbGx5IG1lbW9yeSByZWdpb24uCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBmbGF0IGRldmljZSB0cmVlIGZpeHVwcyBmb3IgbXBjODN4eAogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZCBzdXBwb3J0IGZvciBwYXNzaW5nIGluaXRyZCBpbmZvcm1hdGlvbiB2aWEgZmxhdCBkZXZpY2UgdHJlZQogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFkZGVkIE9GX1NURE9VVF9QQVRIIGFuZCBPRl9TT0MKCiAgT0ZfU1RET1VUX1BBVEggc3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBkZXZpY2UgdGhlIGtlcm5lbCBjYW4gdXNlCiAgZm9yIGNvbnNvbGUgb3V0cHV0CgogIE9GX1NPQyBzcGVjaWZpZXMgdGhlIHByb3BlciBuYW1lIG9mIHRoZSBTT0Mgbm9kZSBpZiBvbmUgZXhpc3RzLgogIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CgoqIEFsbG93IGJvYXJkIGNvZGUgdG8gZml4dXAgdGhlIGZsYXQgZGV2aWNlIHRyZWUgYmVmb3JlIGJvb3RpbmcgYSBrZXJuZWwKICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgoKKiBBZGRlZCBDT05GSUdfIG9wdGlvbnMgZm9yIGJkX3QgYW5kIGVudiBpbiBmbGF0IGRldiB0cmVlCgoJQ09ORklHX09GX0hBU19CRF9UIHdpbGwgcHV0IGEgY29weSBvZiB0aGUgYmRfdAoJaW50byB0aGUgcmVzdWx0aW5nIGZsYXQgZGV2aWNlIHRyZWUuCgoJQ09ORklHX09GX0hBU19VQk9PVF9FTlYgd2lsbCBjb3B5IHRoZSBlbnZpcm9ubWVudAoJdmFyaWFibGVzIGZyb20gdS1ib290IGludG8gdGhlIGZsYXQgZGV2aWNlIHRyZWUKCiAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBESENQIHZlbmRvciBvcHRpb25hbCBib290ZmlsZSAoIzY3KS4KICBJZ25vcmVzIHRoZSB2ZW5kb3IgVEZUUCBzZXJ2ZXIgbmFtZSBvcHRpb24gKCM2NikuCiAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKCiogRml4IGEgSFcgdGltaW5nIGlzc3VlIG9uIDg1NDggQ0RTIGZvciBlVFNFQyAzIGluIFJHTUlJIG1vZGUKICBQYXRjaCBieSBBbmR5IEZsZW1pbmcsIDE0IEp1biAyMDA1CgoqIEZpeCBiYWQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIExUWDk3MSBQSFkgb24gTVBDODV4eCBib2FyZHMuCiAgUGF0Y2ggYnkgR2VyaGFyZCBKYWVnZXIsIDIxIEp1biAyMDA1CgoqIEFkZCBuZXRjb25zb2xlIGFuZCBzb21lIG1vcmUgY29tbWFuZHMgdG8gUlBYbGl0ZV9EVyBib2FyZAogIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQoKKiBGaXggYmFkIGRlY2xhcmF0aW9uIG9uIHBjaV9jZmdmdW5jX25vdGhpbmcKICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKCiogQWRqdXN0ICJlY2hvIiBhcyBhIGRlZmF1bHQgY29tbWFuZAogIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQoKKiBGaXggUENJREYgY2FsY3VsYXRpb24gaW4gY3B1L21wYzgyNjAvc3BlZWQuYyBmb3IgTVBDODI4MEVDCiAgUGF0Y2ggYnkgS29rSG93IFRlaCwgMTYgSnVuIDIwMDUKCiogQWRkIGNyYyBvZiBkYXRhIHRvIGpmZnMyIChpbiBqZmZzMl8xcGFzc19idWlsZF9saXN0cygpKS4KICBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE1IEp1biAyMDA1CgoqIENvZGluZyBTdHlsZSBjbGVhbnVwCgoqIEF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBpbiBmaW5kX2NtZCgpIGlmIG5vIHZhbGlkIGNvbW1hbmRzIHdlcmUgZm91bmQKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTMgSnVuIDIwMDUKCiogQWRkIEFESSBCbGFja2ZpbiBzdXBwb3J0CiAgLSBhZGQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQmxhY2tmaW4gQkY1MzMgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEFESSBCRjUzMyBTdGFtcCB1Q2xpbnV4IGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEFESSBCRjUzMyBFWktpdCBib2FyZAogIFBhdGNoZXMgYnkgUmljaGFyZCBLbGluZ2xlciwgMTEgSnVuIDIwMDUKCiogQWRkIGxvYWRzIG9mIG50b2hsKCkgaW4gaW1hZ2UgaGVhZGVyIGhhbmRsaW5nCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDUKCiogU3dpdGNoIE1QQzg2eEFEUyBhbmQgTVBDODg1QURTIGJvYXJkcyB0byB1c2UgY3B1Y2xrIGVudmlyb25tZW50CiAgdmFyaWFibGUgdG8gc2V0IGNsb2NrCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogUlBYbGl0ZSBjb25maWd1cmF0aW9uIGZpeGVzCiAgLSBVc2UgY29ycmVjdCBmbGFzaCBzZWN0b3Igc2l6ZQogIC0gVXNlIGNvcnJlY3QgbWVtb3J5IHRlc3QgZW5kIGFkZHJlc3MKICAtIEFkZCBzdXBwb3J0IGZvciBiemlwMiBjb21wcmVzc2lvbgogIC0gVmFyaW91cyBzbWFsbCBmaXhlcwogIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CgoqIE1lbW9yeSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIFpQQy4xOTAwIGJvYXJkCiAgLSBGaXggU0RSQU0gdGltaW5nIG9uIGJvdGggbG9jYWwgYnVzIGFuZCA2MHggYnVzCiAgLSBBZGQgc3VwcG9ydCBmb3Igc2Vjb25kIGZsYXNoIGJhbmsgKFNJTU0pCiAgLSBDaGFuZ2UgYm9vdCBmbGFzaCBiYXNlCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEFkZGVyIGJvYXJkcyB3aXRoIDE2TUIgU0RSQU07CiAgYWRkIHN1cHBvcnQgZm9yIHNlY29uZCBGRUMgb24gQWRkZXI4N3ggYm9hcmQuCiAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKCiogRml4IGNvbmRpdGlvbmFsIGZvciBpbmNsdWRpbmcga3M4Njk1ZXRoIGRyaXZlcgogIFBhdGNoIGJ5IEdyZWcgVW5nZXJlciwgMDQgSnVuIDIwMDUKCiogRml4IE1ha2VmaWxlOiBpbmNsdWRlIGNvbmZpZy5tayBvbmx5IGFmdGVyIENST1NTX0NPTVBJTEUgaXMgZGVmaW5lZAogIFBhdGNoIGJ5IEZyaWVkcmljaCBMb2JlbnN0b2NrLCAwMiBKdW4gMjAwNQoKKiBGaXggY29tbWVudCBpbiBjb21tb24vc29mdF9pMmMuYwogIFBhdGNoZXMgYnkgUGV0ZXIgS29yc2dhYXJkL1RvbHVuYXkgT3JrdW4sIDI2IE1heSAyMDA1CgoqIENsZWFudXAgY29tcGlsZXIgd2FybmluZ3MuCiAgUGF0Y2ggYnkgR3JlZyBVbmdlcmVyLCAyMSBNYXkgMjAwNQoKKiBXb3JkIGFsaWdubWVudCBmaXhlcyBmb3Igd29yZCBhbGlnbmVkIE5TMTY1NTAgVUFSVAogIFBhdGNoIGJ5IEplYW4tUGF1bCBTYW1hbiwgMDEgTWFyIDIwMDUKCiAgRml4ZXMgYnVnIHdpdGggVUFSVCB0aGF0IG9ubHkgc3VwcG9ydHMgd29yZCBhbGlnbmVkIGFjY2VzczogcmVtb3ZlZAogICJfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7IiBmb3IgIihDRkdfTlMxNjU1MF9SRUdfU0laRSA9PSA0KSIgc29tZQogIChicm9rZW4hKSB2ZXJzaW9ucyBvZiBHQ0MgZ2VuZXJhdGUgYnl0ZSBhY2Nlc3NlcyB3aGVuIGVuY291bnRlcmluZwogIHRoZSBwYWNrZWQgYXR0cmlidXRlIHJlZ2FyZGxlc3MgaWYgdGhlIHN0cnVjdCBpcyBhbHJlYWR5IGNvcnJlY3RseQogIGFsaWduZWQgZm9yIGEgcGxhdGZvcm0uIFBlcmlwaGVyYWxzIHRoYXQgY2FuIG9ubHkgaGFuZGxlIHdvcmQKICBhbGlnbmVkIGFjY2VzcyB3b24ndCB3b3JrIHByb3Blcmx5IHdoZW4gYWNjZXNzZWQgd2l0aCBieXRlIGFjY2Vzcy4KICBUaGUgc3RydWN0IE5TMTY1NTAgaXMgYWxyZWFkeSB3b3JkIGFsaWduZWQgZm9yIFJFR19TSVpFID0gNCwgc28KICB0aGVyZSBpcyBubyBuZWVkIHRvIHBhY2tlZCB0aGUgc3RydWN0IGluIHRoYXQgY2FzZS4KCiogRml4IGJlaGF2aW91ciBpZiBnYXRld2F5aXAgaXMgbm90IHNldAogIFBhdGNoIGJ5IFJvYmluIEdpbGtzLCAyMyBEZWMgMjAwNAoKKiBGaXggY2xlYW51cCBmb3IgbmV0c3RhcnQgYm9hcmQuCiAgUmVtb3ZlIGJ1aWxkIHJlc3VsdHMgZnJvbSByZXBvc2l0b3J5CgoqIFNvbWUgY29kZSBjbGVhbnVwIGZvciBHQ0MgNC54CgoqIEZpeGVzIHRvIHN1cHBvcnQgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaDsKICBlbmFibGUgTkFORCBmbGFzaCBiYXNlZCBlbnZpcm9ubWVudCBmb3IgZGVsdGEgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBNb25haGFucyBDUFUgb24gWnlsb25pdGUgYW5kIERlbHRhIGJvYXJkcwogIChUaGlzIGlzIFdvcmsgaW4gUHJvZ3Jlc3MhKQoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI2MC1BSSBib2FyZHMuCgoqIE1pbm9yIGNvZGUgY2xlYW51cAoKKiBNZXJnZSB0aGUgbmV3IE5BTkQgY29kZSAodGVzdGluZy1OQU5EIGJyYWNoKTsgc2VlIGRvYy9SRUFETUUubmFuZAogIFJld3JpdGUgb2YgTkFORCBjb2RlIGJhc2VkIG9uIHdoYXQgaXMgaW4gMi42LjEyIExpbnV4IGtlcm5lbAogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyOSBKdW4gMjAwNQoKKiBBZGQgbG93Ym9vdCB0YXJnZXQgdG8gbWNjMjAwIGJvYXJkCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IE1hciAyMDA2CgoqIEZpeCBwcm9ibGVtIHdpdGggZmxhc2hfZ2V0X3NpemUoKSBmcm9tIENGSSBkcml2ZXIgdXBkYXRlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIE1hciAyMDA2CgoqIE1ha2UgQ0ZHX05PX0ZMQVNIIHdvcmsgb24gQVJNIHN5c3RlbXMKICBQYXRjaCBieSBNYXJrdXMgS2xvdHpidWVjaGVyLCAyNyBGZWIgMjAwNgoKKiBVcGRhdGUgbWNjMjAwIGNvbmZpZzogRGlzYWJsZSBQQ0kgYW5kIERvQywgdXNlIDEzMyBNSHogSVBCIGNsb2NrLAogIHVzZSBodXNoIHNoZWxsLgoKKiBDb252ZXJ0IG1jYzIwMCB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2CgoqIEFkZCBlbnYtdmFyaWFibGUgInVubG9jayIgdG8gaGFuZGxlIGluaXRpYWwgc3RhdGUgb2Ygc2VjdG9ycwogIChsb2NrZWQvdW5sb2NrZWQpLgoKICBPbmx5IHRoZSBVLUJvb3QgaW1hZ2UgYW5kIGl0J3MgZW52aXJvbm1lbnQgaXMgcHJvdGVjdGVkLAogIGFsbCBvdGhlciBzZWN0b3JzIGFyZSB1bnByb3RlY3RlZCAodW5sb2NrZWQpIGlmIGZsYXNoCiAgaGFyZHdhcmUgcHJvdGVjdGlvbiBpcyB1c2VkIChDRkdfRkxBU0hfUFJPVEVDVElPTikgYW5kCiAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICJ1bmxvY2siIGlzIHNldCB0byAieWVzIi4KCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBGZWIgMjAwNgoKKiBVcGRhdGUgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIGZpbmRfc2VjdG9yKCkgY2FsbGVkIGluIGJvdGggdmVyc2lvbnMgb2YgZmxhc2hfd3JpdGVfY2Zpd29yZCgpCiAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAyN3RoIEZlYiAyMDA2CgoqIENGSSBzdXBwb3J0IGZvciBhIHg4L3gxNiBBTUQvU3BhbnNpb24gZmxhc2ggY29uZmlndXJlZCBpbiB4OCBtb2RlCiAgUGF0Y2ggYnkgSm9zZSBNYXJpYSBMb3BleiwgMTYgSmFuIDIwMDYKCiogQWRkIHN1cHBvcnQgZm9yIEFNRC9TcGFuc2lvbiBGbGFzaGVzIGluIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcgogIFBhdGNoIGJ5IEFsZXggQmFzdG9zIGFuZCBUaG9tYXMgU2NoYWVmZXIsIDIwMDUtMDgtMjkKCiogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICBXZSAqc2hvdWxkKiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVycm9yIGJpdHMgaWYgdGhlIHByZXZpb3VzIGNhbGwKICByZXR1cm5lZCBFUlJfT0sgKE90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4KICBmbGFzaF9zdGF0dXNfY2hlY2soKSBhbHJlYWR5LikgIFRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIG9ubHkgY2hlY2sgZm9yCiAgZXJyb3IgYml0cyBpZiBmbGFzaF9zdGF0dXNfY2hlY2soKSByZXR1cm5zIEVSUl9USU1FT1VULgogIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyMyBBdWcgMjAwNQoKKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgogIC0gQWRkIENGR19GTEFTSF9QUk9URUNUX0NMRUFSIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKICAtIFByb2hpYml0IGJ1ZmZlciB3cml0ZSB3aGVuIGJ1ZmZlcl9zaXplIGlzIDEgb24gZHJpdmVycy9jZmlfZmxhc2guYwogIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMTkgQXVnIDIwMDUKCiogRml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CiAgLSBGaXggd3JvbmcgdGltZW91dCB2YWx1ZSB1c2FnZSBpbiBmbGFzaF9zdGF0dXNfY2hlY2soKQogIC0gUm91bmQgd3JpdGVfdG91dCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXNlYyBpbiBmbGFzaF9nZXRfc2l6ZSgpCiAgLSBSZW1vdmUgY2xlYXJpbmcgZmxhc2ggc3RhdHVzIGF0IHRoZSBlbmQgb2YgZmxhc2hfd3JpdGVfY2ZpYnVmZmVyKCkKICAgIHdoaWNoIHNldHMgSW50ZWwgMjhGNjQwSjMgZmxhc2ggYmFjayB0byBjb21tYW5kIG1vZGUgb24gQ1NCNDcyCiAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDIgSnVseSAyMDA1CgoqIEFkZCBiYXNpYyBzdXBwb3J0IGZvciB0aGUgU01NQUNPNCBCb2FyZCBmcm9tIFBhbkRhQ29tLgogIFBhdGNoIGJ5IEhlaWtvIFNjaG9jaGVyLCAyMCBGZWIgMjAwNgoKKiBBZGQgR0lUIHZlcnNpb24gaW5mb3JtYXRpb24gKGNvbW1pZCBJRCkgdG8gdW50YWdnZWQgVS1Cb290IHZlcnNpb25zCgogIEFzIGRvbmUgaW4gdGhlIGxpbnV4IGtlcm5lbCwgdGhlIFUtQm9vdCB2ZXJzaW9uIChVX0JPT1RfVkVSU0lPTikKICBvZiBhbGwgdW5yZWxlYXNlZCAodW50YWdnZWQpIFUtQm9vdCBpbWFnZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CiAgZXh0ZW5kZWQgdXBvbiBjb21waWxldGltZSB3aXRoIGEgcGFydCBvZiB0aGUgR0lUIGNvbW1pdCBJRCBhbmQKICBwb3NzaWJseSB3aXRoICJkaXJ0eSIgaWYgdW5jb21taXRlZCBjaGFuZ2VzIGFyZSBkZXRlY3RlZC4KCiAgSGVyZSBhbiBleGFtcGxlIGZvciB0aGUgcmVzdWx0aW5nIHZlcnNpb246CiAgIlUtQm9vdCAxLjEuNC1nMzQ1N2FjMTgtZGlydHkiCgogIFRoZSB2ZXJzaW9uIGlzIG5vdyBtYWludGFpbmVkIGluIHRoZSB0b3BsZXZlbCBNYWtlZmlsZSBhbmQgdGhlCiAgdmVyc2lvbiBoZWFkZXJzIGFyZSBhdXRvZ2VuZXJhdGVkLgoKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDkgRmViIDIwMDYKCiogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIElOS0E0eDAwIGJvYXJkLgoKKiBDb252ZXJ0IENQQ0k3NTAgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgOCBGZWIgMjAwNgoKKiBWYXJpb3VzIGNoYW5nZXMgdG8gZXNkIEhINDA1IGJvYXJkIHNwZWNpZmljIGZpbGVzCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IEZlYiAyMDA2CgoqIENsZWFudXAgVS1Cb290IGJvb3QgbWVzc2FnZXMgb24gQVJNLgoKICBUbyBtYXRjaCB0aGUgVS1Cb290IHVzZXIgaW50ZXJmYWNlIG9uIEFSTSBwbGF0Zm9ybXMgdG8gdGhlIFUtQm9vdAogIHN0YW5kYXJkIChhcyBvbiBQUEMgcGxhdGZvcm1zKSwgc29tZSBtZXNzYWdlcyB3aXRoIGRlYnVnIGNoYXJhY3RlcgogIGFyZSByZW1vdmVkIGZyb20gdGhlIGRlZmF1bHQgVS1Cb290IGJ1aWxkLgogIEVuYWJsZSBERUJVRyBmb3IgbGliX2FybS9ib2FyZC5jIHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcy4KICBOZXcgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTyBhbmQgQ09ORklHX0RJU1BMQVlfQk9BUkRJTkZPIG9wdGlvbnMuCiAgUGF0Y2ggIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSmFuIDIwMDYKCiogRml4IHZhcmlvdXMgY29tcGlsZXIgd2FybmluZ3Mgb24gcHBjNHh4IGJ1aWxkcyAoRUxESyA0LjApCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBKYW4gMjAwNgoKKiBBZGQgVkdBIHN1cHBvcnQgKENUNjkwMDApIHRvIENQQ0k3NTAgYm9hcmQuCiAgSW5zZXJ0IG1pc3NpbmcgX19sZTMyX3RvX2NwdSgpIGZvciBmaWxlc2l6ZSBpbiBleHQyZnNfcmVhZF9maWxlKCkuCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMzAgRGVjIDIwMDUKCiogUE1DNDA1IGFuZCBDUENJNDA1OiBNb3ZlZCBjb25maWd1cmF0aW9uIG9mIHBjaSByZXNvdXJjZXMKICBpbnRvIGNvbmZpZyBmaWxlLgogIFBNQzQwNSBhbmQgQ1BDSTJEUDogQWRkZWQgZmlybXdhcmUgZG93bmxvYWQgYW5kIGJvb3RpbmcgdmlhIHBjaS4KICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjAgRGVjIDIwMDUKCiogRml4IDI4RjI1NkozQSBzdXBwb3J0IG9uIFBNNTIwIGJvYXJkCiAgKHdpdGhvdXQgYmFuay1zd2l0Y2hpbmcgb25seSAzMiBNQiBjYW4gYmUgYWNjZXNzZWQpCgoqIEZpeCBta2ltYWdlIGJ1ZyB3aXRoIG11bHRpZmlsZSBpbWFnZXMgY3JlYXRlZCBvbiA2NCBiaXQgc3lzdGVtcy4KCiogQWRkIHN1cHBvcnQgZm9yIDI4RjI1NkozQSBmbGFzaCAoPT4gNjQgTUIpIG9uIFBNNTIwIGJvYXJkCgoqIEZpeCBjb21waWxlciBwcm9ibGVtIHdpdGggYXQ5MXJtOTIwMGRrIGJvYXJkLgogIFBhdGNoIGJ5IEV1Z2VuIEJpZ3osIDE5IERlYyAyMDA1Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuNDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBDaGFuZ2VzIHRvIFllbGxvd3N0b25lICYgWW9zZW1pdGUgNDQwRVAvR1IgZXZhbCBib2FyZHM6CiAgLSBDaGFuZ2VkIEdQSU8gc2V0dXAgdG8gZW5hYmxlIGFub3RoZXIgYWRkcmVzcyBsaW5lIGluIG9yZGVyIHRvCiAgICBhZGRyZXNzIDY0TSBvZiBGTEFTSC4KICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlIHRyMSB2YWx1ZSBmb3IKICAgIHRoZSBERFIuCiAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMTIgRGVjIDIwMDUKCiogTVBDNTIwMDogIFNldCBQQ0kgcmV0cnkgY291bnRlciB0byAwID0gaW5maW5pdGUgcmV0cnk7CiAgVGhlIGRlZmF1bHQgb2YgMjU1IGlzIHRvbyBzaG9ydCBmb3Igc2xvdyBkZXZpY2VzLgogIFBhdGNoIGJ5IE1hcnRpbiBOeWtvZHltLCAxMiBEZWMgMjAwNQoKKiBDaGFuZ2UgcG9ydCBjb25maWd1cmF0aW9uIGZvciBPMkROVCAoQ09ERUMxIG9uIFBTQzEpLgoKKiBGaXggcmVnaXN0ZXIgZm9yIFBDSSBhc3luYyBtb2RlIG9uIFBQQzQ0MEVQCiAgUGF0Y2ggYnkgWW91bmdjaHVsIEJhbmcsIDA4IERlYyAyMDA1CgoqIEZpeCBVLUJvb3QgbGlua2luZyBwcm9ibGVtcyAoYWRkIC5laF9mcmFtZSBzZWdtZW50IHRvIGxpbmtlciBzY3JpcHQpCiAgVGhpcyBzZWdtZW50IG1heSBiZSByZXF1aXJlZCBieSBzb21lIGxpYmdjYy5hIGZ1bmN0aW9ucwogIChsaWtlIF91ZGl2ZGkzKS4KCiogRml4IERQUkFNIG9mZnNldC9zaXplIGZvciBNUEM4NTQxLzg1NTUuCiAgU2ltcGxpZnkgVFFNODV4eCBNYWtlZmlsZSBoYW5kbGluZy4KCiogRml4IGRhdGEgb3ZlcmZsb3cgKHR5cG8/KSBpbiBydGMvZHMxMzAyLmMKCiogRml4IFUtQm9vdCBjb21waWxhdGlvbiBmb3IgTUlQUyBib2FyZHMgdXNpbmcgRUxESyA0LjAKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NDEvODU1NSBib2FyZHMsIFRRTTg1eHggc3VwcG9ydCByZXdvcmtlZDoKICAtIFN1cHBvcnQgZm9yIFRRTTg1NDEvODU1NSBib2FyZHMgYWRkZWQuCiAgLSBDb21wbGV0ZSByZXdvcmsgb2YgVFFNODU0MC84NTYwIHN1cHBvcnQuCiAgLSBDb21tb24gVFFNODV4eCBjb2RlIG5vdyBzdXBwb3J0cyBhbGwgY3VycmVudCBUUU04NXh4IHBsYXRmb3JtcwogICAgKFRRTTg1NDAvODU0MS84NTU1Lzg1NjApLgogIC0gRERSIFNEUkFNIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgogIC0gQ0FTIGxhdGVuY3kgZGVmYXVsdCB2YWx1ZXMgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHNldHRpbmcgInNlcmlhbCMiCiAgICB0byBlLmcuICJBQkMwMDAxIGNhc2w9MjUiIC0+IENBUyBsYXRlbmN5IDIuNSB3aWxsIGJlIHVzZWQuCiAgICBJZiBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgd2l0aCB0aGlzIG5vbiBkZWZhdWx0IENBUyBsYXRlbmN5LAogICAgdGhlIGRlZmF1bHQgdmFsdWVzIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgogIC0gRmxhc2ggc2l6ZSBkZXRlY3Rpb24gYWRkZWQuCiAgLSBNb3ZlZCBGQ0MgZXRoZXJuZXQgZHJpdmVyIGluaXRpYWxpemF0aW9uIGJlaGluZCBUU0VDIGRyaXZlciBpbml0CiAgICAtPiBUU0VDIGlzIGZpcnN0IGRldmljZS4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDMwIE5vdiAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBBTUNDIDQ0MFNQLCBhZGQgc3VwcG9ydCBmb3IgQU1DQyBMdWFuIDQ0MFNQIGV2YWwgYm9hcmQuCiAgUGF0Y2ggYnkgSm9obiBPdGtlbiwgMjMgTm92IDIwMDUKCiogQ2hhbmdlZCBQUEM0NHggc3RhcnR1cCBtZXNzYWdlIChjcHUgaW5mbywgc3BlZWQuLi4pIHRvIGNvbW1vbiBzdHlsZToKICBPbiBQUEM0NHggcGxhdGZvcm1zLCB0aGUgc3RhcnR1cCBtZXNzYWdlIGdlbmVyYXRlZCBpbiAiY3B1LmMiIG9ubHkKICBjb21wcmlzZWQgdGhlIHBwYyB0eXBlIGFuZCByZXZpc2lvbiBidXQgbm90IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KICBsaWtlIHNwZWVkIGV0Yy4gVGhvc2Ugc3BlZWQgaW5mb3Mgd2hlcmUgcHJpbnRlZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMKICBjb2RlLiBUaGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBub3cgcHJpbnRzIGFsbCBDUFUgaW5mb3MgaW4gdGhlIGNvbW1vbgogIGNwdSBzcGVjaWZpYyBjb2RlLiBObyBib2FyZCBzcGVjaWZpYyBjb2RlIGlzIG5lZWRlZCBhbnltb3JlIGFuZAogIHRoZXJlZm9yZSByZW1vdmVkIGZyb20gYWxsIGN1cnJlbnQgNDR4IGltcGxlbWVudGF0aW9ucy4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IE5vdiAyMDA1CgoqIEFkanVzdCBUUU04MzR4IFBIWSBhZGRyZXNzZXMgZm9yIGxhdGVzdCBoYXJkd2FyZSByZXZpc2lvbi4KCiogSW5jcmVhc2UgbWFsbG9jIGFyZW5hIG9uIFRRTTUyMDAgYm9hcmQgdG8gMjU2IGtCLgogIFdpdGggNjQga2IgdW5pZm9ybSBmbGFzaCBzZWN0b3Igc2l6ZSB0aGUgb2xkIHZhbHVlIG9mIDEyOCBrQiB3YXMKICB0b28gc21hbGwuCgoqIEZpeCBtaWlwaHkgZ2xvYmFsIGRhdGEgaW5pdGlhbGl6YXRpb24gKHByb2JsZW0gb24gNHh4IGJvYXJkcyB3aGVuCiAgbm8gZXRoYWRkciBpcyBhc3NpZ25lZCkuIEluaXRpYWxpemF0aW9uIG1vdmVkIGZyb20KICBtaWlwaHlfcmVnaXN0ZXIoKSB0byBldGhfaW5pdGlhbGl6ZSgpLgoKICBCYXNlZCBvbiBpbml0aWFsIHBhdGNoIGZvciA0eHggcGxhdGZvcm0gYnkgTWF0dGhpYXMgRnVjaHMuCgoqIFJlbW92ZSB1bm5uZWNlc3NhcnkgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+IGZyb20gaW5jbHVkZS9hc20tKi91LWJvb3QuaAoKKiBBbGxvdyB1c2Ugb2YgaW5jbHVkZS9pbWFnZS5oIGFuZCBpbmNsdWRlL2FzbS0qL3UtYm9vdC5oIGluIHByb3ByaWV0YXJ5IGNvZGUuCiAgVGhlIENPUFlJTkcgZmlsZSB3YXMgZXh0ZW5kZWQgdG8gbWFrZSBjbGVhciB0aGF0IHRoZXNlIGZpbGVzIGNhbiBiZQogIHVzZWQgaW4gbm9uLUdQTCBjb2RlLCB0b28uCiAgQWxzbywgYSBjb3JyZXNwb25kaW5nIG5vdGUgd2FzIHBsYWNlZCBpbiB0aGUgaGVhZGVycyBvZiB0aGUgYWZmZWN0ZWQgZmlsZXMuCgoqIEFkZCBzdXBwb3J0IGZvciBQcm9kcml2ZSBQM1A0NDAgYm9hcmQ6CiAgLSBBZGRlZCBvbmJvYXJkIFBQQzQ0MCBERFIgYXV0b2RldGVjdGlvbiBpbiBjcHUvcHBjL3NkcmFtLmMKICAtIENGR19GTEFTSF9RVUlFVF9URVNUIGFkZGVkIHRvIHVzZSB0aGUgY29tbW9uIENGSSBkcml2ZXIKICAgIGZvciBiYW5rIGF1dG9kZXRlY3Rpb24KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIyIE5vdiAyMDA1CgoqIENoYW5nZSBhbGwgJyQoLi4uKScgdmFyaWFibGUgcmVmZXJlbmNlcyBpbnRvICckey4uLn0nCiAgd2hpY2ggbWFrZXMgdGhlIGVudmlyb25tZW50IGNvbXBhdGlibGUgd2l0aCB0aGUgaHVzaCBzaGVsbC4KICBXQVJOSU5HOiBTdXBwb3J0IGZvciB0aGUgb2xkICckKC4uLiknIHN5bnRheCB3aWxsIGJlCiAgZGlzY29udGludWVkIGluIGEgbGF0ZXIgdmVyc2lvbi4KCiogTWlub3IgY2hhbmdlcyB0byBpbml0IGZsYWdzIGluIFRRTTgzNHggUENJLgoKKiBGaXggQmFtYm9vIEREUiBTRFJBTSBpbml0aWFsaXphdGlvbiAocHJvYmxlbSB3aXRoIG9uYm9hcmQgU0RSQU0pCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBOb3YgMjAwNQoKKiBOZXcgUFBDIDQwNUVQIGJvYXJkIGFkZGVkOiBDTVM3MDAKICBBZGRlZCBDT05GSUdfTkVUX01VTFRJIGZvciBWT000MDUgYm9hcmQuCiAgQWRkZWQgcmVzZXRfcGh5KCkgZm9yIFZPTTQwNSBib2FyZC4KICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDkgTm92IDIwMDUKCiogVXBkYXRlZCBQQ0kgbWFwcGluZyBmb3IgZXNkIENQQ0kyRFAgYm9hcmQuCiAgQWRkIHN1cHBvcnQgZm9yIGVycm9yIExFRC4KICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDcgTm92IDIwMDUKCiogRml4IE1QQzg1eHggUENJIHN1cHBvcnQgKHBjaV9yZWdpc3Rlcl9ob3NlKCkgYmVmb3JlIHBjaSBjb25maWcgYWNjZXNzKQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgTm92IDIwMDUKCiogQ29ycmVjdCBQUEMgVGltZWJhc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKFNQUk5fVEJSTC4uLikKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1CgoqIEFkanVzdCBiZC0+YmlfZmxhc2hzdGFydCBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIHRvIGNvcnJlY3Qgc2l6ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgTm92IDIwMDUKCiogQWRkaXRpb25hbCBmaXggZm9yIGV4dGVybmFsIElSUSBjb25maWcgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDMgTm92IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIE9jb3RlYSBwYXNzIDMgd2l0aCA0NDBHWCBSZXYuIEYKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAxIE5vdiAyMDA1CgoqIEZpeCBleHRlcm5hbCBJUlEgY29uZmlndXJhdGlvbiBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyOCBPY3QgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgUEhZcy4KICBUZXN0ZWQgb24gdGhlIGZvbGxvd2luZyBib2FyZHM6CgljbWNwdTIgICAgICAoYXQ5MXJtOTIwMC9ldGhlci5jKQoJUFBDaGFtZWxlb24gKHBwYzR4eC80eHhfZW5ldC5jKQoJeXVrb24gICAgICAgKG1wYzgyMjAvZmVjLmMpCgl1YzEwMCAgICAgICAobXBjOHh4L2ZlYy5jKQoJdHFtODM0eCAgICAgKG1wYzgzNHgvdHNlYy5jKSB3aXRoIEVFUFJPMTAwCglsaXRlNTIwMCAgICAobXBjNXh4eC9mZWMuYykgd2l0aCBFRVBSTzEwMCBjYXJkIChkcml2ZXJzL2VlcHJvMTAwLmMpCiAgTWFpbiBjaGFuZ2VzIGluY2x1ZGU6CiAgY29tbW9uL21paXBoeXV0aWwuYwogIC0gbWlpcGh5X3JlZ2lzdGVyIHJvdXRpbmUgd2FzIGFkZGVkIHRvIGFsbG93IG11bHRpcGxlIFBIWXMgdG8gYmUgcmVnaXN0ZXJlZAogIC0gbWlpcGh5X3JlYWQgYW5kIG1paXBoeV93cml0ZSBhcmUgbm93IGRlZmluZWQgaW4gdGhpcyBmaWxlLCBhbmQKICAgIHJlcXVpcmUgYWRkaXRpb25hbCBhcmd1bWVudCAoY2hhciAqZGV2bmFtZSkKICAtIG90aGVyIG1paXBoeV8qIHJvdXRpbmVzIGFsc28gcmVxdWlyZSBhZGRpdGlvbmFsIGRldmljZSBuYW1lIGFyZ3VtZW50CiAgLi4vbGliX2kzODYvYm9hcmQuYwogIC4uL2xpYl9wcGMvYm9hcmQuYwogIENhbGxpbmcgcmVzZXRfcGh5KCkgd2FzIG1vdmVkIHRvIGJlIGV4ZWN1dGVkICphZnRlciogZXRoX2luaXRpYWxpemUoKS4KICBUaGlzIGlzIG5lY2Vzc2FyeSBhcyBub3cgc29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHJlc2V0X3BoeSgpCiAgbWF5IG5lZWQgdG8gdXNlIG1paXBoeV9yZXNldCgpIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGJlZm9yZSBldGhfaW5pdGlhbGl6ZSgpCiAgYXMgZXRoX2luaXRpYWxpemUgcmVnaXN0ZXJzIGFsbCByZXF1aXJlZCBtaWlwaHlfKiByb3V0aW5lcy4KICBUZXN0ZWQgb24gSVA4NjAgYW5kIFBIWSBpbml0aWFsaXplcyBwcm9wZXJseSBhZnRlciB0aGlzIGNoYW5nZS4KCiogQ29ycmVjdCBpbmNsdWRlcyBmb3IgZmxhdCB0cmVlIGJ1aWxkZXIuCgoqIEZpeCBjb25mbGljdGluZyB0eXBlcyAoZmxhc2hfd3JpdGUoKSkgaW4gdHJhYiBhdXRvX3VwZGF0ZS5jLgoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIHRoZSBUUU04MzR4IGJvYXJkLgoKKiBBZGQgbWlzc2luZyA0eHggYm9hcmQgdG8gTUFLRUFMTAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogRml4IGNvbmZsaWN0aW5nIHR5cGVzIChmbGFzaF93cml0ZSgpKSBpbiBlc2QgYXV0b191cGRhdGUuYwogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKCiogRml4IHByb2JsZW0gd2l0aCBzbGVlcCBpbiBOZXRDb25zb2xlICh1c2UgZ2V0X3RpbWVyKCkpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBBZGQgTmV0Q29uc29sZSBTdXBwb3J0IGZvciBBTUNDIGV2YWwgYm9hcmRzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQoKKiBGaXggTmV0Q29uc29sZSBzdXBwb3J0IG9uIDR4eCAob25seSBwcmludCBldGggbGluayBvbiAxc3QgdHJhbnNmZXIpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBPY3QgMjAwNQoKKiBBZGQgZmF0ICYgZXh0MiBzdXBwb3J0IHRvIEFNQ0MgNDQwRVAgYm9hcmRzIFlvc2VtaXRlICYgQmFtYm9vLgogIEZpeCBpZGVudGF0aW9uIG9uIGV4dDJscyBoZWxwIGVudHJ5LgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgT2N0IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgzNHggYm9hcmRzLgogIENsZWFudXAuCgoqIENsZWFudXAgZm9yIEdDQy00LngKCiogQWRkIGRvY3VtZW50YXRpb24gZm9yIE9wZW4gRmlybXdhcmUgRmxhdCBUcmVlIGFuZCB1c2FnZS4KICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTMgT2N0IDIwMDUKCiogQWRkIG1pc3NpbmcgZmlsZXMgZm9yIFBhbnRlbGlzIEFudG9uaW91J3MgcGF0Y2gKICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKCiogRml4IHByb2JsZW0gaW4gcHBjNHh4IGV0aC1kcml2ZXIgd2l0aG91dCBldGhhZGRyIChvbmx5IHdpdGhvdXQKICBDT05GSUdfTkVUX01VTFRJIHNldCkKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE9jdCAyMDA1CgoqIEZpeCBnemlwIGJtcCBzdXBwb3J0ICh0ZXN0IGlmIG1hbGxvYyBmYWlscywgd2FybmluZyB3aGVuIHRydW5jYXRlZCkuCiAgSW5jcmVhc2UgQ0ZHX1ZJREVPX0xPR09fTUFYX1NJWkUgb24gSEg0MDUgYm9hcmQuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBPY3QgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgT0YgZmxhdCB0cmVlIGZvciB0aGUgU1RYdGMgYm9hcmQuCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1CgoqIFN1cHBvcnQgcGFzc2luZyBvZiBPRiBmbGF0IHRyZWVzIHRvIHRoZSBrZXJuZWwuCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA0IFNlcCAyMDA1CgoqIENsZWFudXAKCiogQWRkIHN1cHBvcnQgZm9yIE5ldFNpbGljb24gTlM3NTIwIHByb2Nlc3Nvci4KICBQYXRjaCBieSBBcnQgU2hpcGtvd3NraSwgMTIgTWF5IDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEFQMTAwMCBib2FyZC4KICBQYXRjaCBieSBKYW1lcyBNYWNBdWxheSwgMDcgT2N0IDIwMDUKCiogRWxpbWluYXRlIGhhcmQtY29kZWQgYWRkcmVzcyBvZiBFdGhlcm5ldCB0cmFuc2ZlciBidWZmZXIgb24gYXQ5MXJtOTIwMAogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA3IE9jdCAyMDA1CgogIFRoZSBBdG1lbCBlcnJhdGEgIzExIHN0YXRlcyB0aGF0IHRoZSB0cmFuc2ZlciBidWZmZXIgZGVzY3JpcHRvcgogIHRhYmxlIG11c3QgYmUgYWxpZ25lZCBvbiBhIDE2LXdvcmQgYm91bmRhcnkuIEFzIGl0IHR1cm5lZCBvdXQsIHRoaXMKICBpcyBpbnN1ZmZpY2llbnQgLSBpdCBzZWVtcyB0aGUgdGFibGUgbXVzdCBiZSBhbGlnbmVkIG9uIGEgYm91bmRhcnkKICBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgdGFibGUgaXRzZWxmIChpbiBMaW51eCB0aGlzIGlzIG5vdCBhbgogIGlzc3VlIC0gdGhlIHRhYmxlIGlzIGFsaWduZWQgb24gYSBQQUdFX1NJWkUgKDQwOTYpIGJvdW5kYXJ5KS4KCiogRml4ZWQgY29tcGlsYXRpb24gZm9yIEFSTSB3aGVuIHVzaW5nIGEgKHN0YW5kYXJkKSBoYXJkLUZQIHRvb2xjaGFpbgogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA3IE9jdCAyMDA1CgoqIENsZWFudXAgd2FybmluZ3MgZm9yIGNwdS9hcm03MjB0ICYgY3B1L2FybTExMzYgZmlsZXMuCiAgc2VkIHRoZSBsaW5rZXIgc2NyaXB0cywgcmF0aGVyIHRoYW4gcHJlLXByb2Nlc3MgdGhlbS4KICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA3IE9jdCAyMDA1CgoqIFVwZGF0ZSBtYWtlIHRhcmdldCBmb3IgQVJNIHN1cHBvcnRlZCBib2FyZHMuCiAgVXNlIGxvd2xldmVsX2luaXQoKSBpbnN0ZWFkIG9mIHBsYXRmb3Jtc2V0dXAoKSBbcmVuYW1lXS4KICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA2IE9jdCAyMDA1CgoqIEZpeCBib290aW5nIGZyb20gc2VyaWFsIGRhdGFmbGFzaCBvbiBBVDkxUk05MjAwCiAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAyOSBBdWcgMjAwNQoKKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgVFJBQiBib2FyZAogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI1IEF1ZyAyMDA1CgoqIFJlbW92ZSB1bm5lY2Vzc2FyeSBkZXBlbmRlbmN5IG9mIG5ldGNvbnNvbGUgb24gQ09ORklHX05FVF9NVUxUSQogIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyNCBBdWcgMjAwNQoKKiBGaXggdGhlIG1hY2hpbmUtaWQgb2YgdGhlIENvZ2VudCBjc2I2MzcgYm9hcmQKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNSBPY3QgMjAwNQoKKiBDb21wbGV0ZSBzdXBwb3J0IGZvciB0aGUgS3dpa0J5dGUgS0I5MjB4IGJvYXJkcwogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA1IE9jdCAyMDA1CgoqIFNldCB0aGUgQVQ5MVJNOTIwMCBjbG9jayB0byBhc3luY2hyb25vdXMgbW9kZQogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDAzIE1heSAyMDA1CgoqIFNldCB0aGUgQVQ5MVJNOTIwMCBjbG9jayB0byBzeW5jaHJvbm91cyBtb2RlCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBjc2I2MzcKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBGaXggZG05MTYxLmMgaW5pdGlhbGl6YXRpb24KICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBGaXggcHJvYmxlbXMgaW50cm9kdWNlZCBieSBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMiBNYXIgMjAwNQogICg4ZTJiZTUxZGU4ZGQwM2MxY2U0ZDA2Y2JiMThhZDA2MTMzZDQ3Y2Q1KQoKKiBNb3ZlIGRtOTE2MS5jIGFuZCBseHQ5NzIuYyBpbnRvIGNwdS9hcm05MjB0L2F0OTFybTkyMDAKICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQoKKiBGaXggZGV2aWNlIHBhcnRpdGlvbiBpbnRpYWxpemF0aW9uIGZvciBTeXN0ZW1BQ0UgZGlza3MuCiAgUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMjggQXByIDIwMDUKCiogQWRkZWQgc3VwcG9ydCBmb3IgS3dpa0J5dGUgS0I5MjB4IGJvYXJkcyAoYmFzZWQgb24gQVQ5MVJNOTIwMCkKICBQYXRjaCBieSBNYXR0ID8/IDxrYjkyMDBfZGV2QGt3aWtieXRlLmNvbT4sIDI3IEFwciAyMDA1CgoqIEFkZCBzdXBwb3J0IGZvciBTMjlHTDA2NE0tUjMgZmxhc2ggY2hpcCBvbiB4c2VuZ2luZSBib2FyZAogIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAxOCBBcHIgMjAwNQoKKiBFNTAwIHVwZGF0ZTogcmVwb2ludCBJVlBSIHRvIFJBTSB3aGVuIGNvZGUgaXMgcmVsb2NhdGVkCiAgUGF0Y2ggYnkgS3lsbyBHaW5zYmVyZywgMTMgQXByIDIwMDUKCiogRml4IGxvb3AgZW5kIHRlc3QgaW4gbGliX2dlbmVyaWMvc3RyaW5nLmM6c3Ryc3dhYigpCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIE9jdG9iZXIgMTAsIDIwMDUKICBTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgRHllciA8YW1keWVyQGdtYWlsLmNvbT4KCiogQ2xlYW51cAoKKiBVcGRhdGUgQVJNIEludGVncmF0b3IgYm9hcmRzOgogIENvcnJlY3QgYWRkZXNzaW5nIGVycm9ycyBpbiBwbGF0Zm9ybSBmaWxlcy4KICBTcGxpdCBvZmYgY29tbW9uIGNvcmUgbW9kdWxlIGRhdGEgZnJvbSBJbnRlZ3JhdG9yIGhlYWRlciBmaWxlcyB0bwogIGluY2x1ZGUvYXJtY29yZW1vZHVsZS5oLgogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDQgT2N0IDIwMDUKCiogTWFrZSBzdXJlIG9ubHkgc3VwcG9ydGVkIGNvbXBpbGVyIG9wdGlvbnMgYXJlIHVzZWQKICBJbXBvcnQgImNjLW9wdGlvbiIgc2hlbGwgZnVuY3Rpb24gZnJvbSBrZXJuZWwgYW5kCiAgdXNlIGl0IHRvIGdldCB0aGUgY29ycmVjdCBBUk0gR0NDIG9wdGlvbnMgZm9yIGluZGl2aWR1YWwgQ1BVcwogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMzAgSnVuIDIwMDUKCiogRml4IDQ0MEdSIHRvIHByaW50IGNvcnJlY3QgY3B1IHJldmlzaW9uCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNCBPY3QgMjAwNQoKKiBDaGFuZ2UgYm9hcmQgbWVzc2FnZSBvbiBBTUNDIFlvc2VtaXRlICYgWWVsbG93c3RvbmUgdG8gY29tbW9uIHN0eWxlCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMyBPY3QgMjAwNQoKKiBGaXggY29tcGlsZXIgd2FybmluZwoKKiBGaXggRkVDIFBIWSBhZGRyZXNzZXMgZm9yIFRRTTg1eHggYm9hcmRzCgoqIEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHByb2JsZW0gaW4gaHVzaCBzaGVsbAogIFBhdGNoIGJ5IExhcnMgUm9zdG9jaywgMjYgU2VwIDIwMDUKCiogVW5kbyBjaGFuZ2Ugb2YgZjZlMjBmYzZjYS4uLiB0byBpbmNsdWRlL2NvbmZpZ3MvdHJhYi5oCiAgKE11c3QgaGF2ZSBiZWVuIGFuIGFjY2lkZW50PykKCiogQWRkIHN1cHBvcnQgZm9yIEFUOTFSTTkyMDAgT0hDSSBDb250cm9sbGVyLgogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQoKKiBVcGRhdGUgQVJNIG1hY2gtdHlwZXMuaAogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgTVAyVVNCIGJvYXJkLgogIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQoKKiBBZGQgYm9hcmQgc3VwcG9ydCBmb3IgYXJtYWRpbGxvIEhUMTA3MAogIFBhdGNoIGJ5IFJvd2VsIEF0aWVuemEsIDA2IEFwciAyMDA1CgoqIFNlY29uZCBFdGhlcm5ldCBhZGRyZXNzIGVuYWJsZWQgZm9yIE1QQzg4NUFEUyBhbmQgTVBDODI3MkFEUy4KICBQYXRjaCBieSBWaXRhbHkgQm9yZHVnLCAzMCBNYXIgMjAwNQoKKiBBZGQgaW9wc2V0IGNvbW1hbmQgb24gbXBjOHh4CiAgUGF0Y2ggYnkgRGFuaWVsIEVpc2VuaHV0LCAyNSBNYXIgMjAwNQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlJIGluIGVlcHJvMTAwIGRyaXZlci4KICBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDIxIE1hciAyMDA1CgoqIEZpeGVzIHRvIHRoZSBMdWJib2NrIChQWEEgMjV4KSBzdXBwb3J0OgogIC0gUmVzb2x2ZSB0aGUgRklYTUUgd2l0aCByZXNwZWN0IHRvIHNhdmluZyB0aGUgdS1ib290IGVudmlyb25tZW50LgogIC0gTWFrZSB0aGUgZGVmYXVsdCBsb2FkIGFkZHJlc3MgbGFuZCBpbiByZWFsIG1lbW9yeS4KICAtIEZpeCBsYW45MWM5NiBTTUNfe2luLG91dH17Yix3LGx9KCkgbWFjcm9zCiAgUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1CgoqIEFkZCBCYXJjbyBTdHJlYW1pbmcgVmlkZW8gQ2FyZCAoU1ZDKSBhbmQgU2FtcGxlIENvbXByZXNzIE5ldHdvcmsgKFNDTikgYm9hcmQKICBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDQgTWFyIDIwMDUKCiogT01BUDI0MnggSDQgYm9hcmQgdXBkYXRlCiAgLSBmaXggZm9yIEVTMiBkaWZmZXJlbmNlcy4KICAtIHN3aXRjaCB0byB1c2luZyB0aGUgY2ZpX2ZsYXNoIGRyaXZlci4KICAtIGZpeCBTUkFNIGJ1aWxkIGFkZHJlc3MuCiAgLSBmaXggZm9yIEdQIGRldmljZSBvcGVyYXRpb24uCiAgLSB1bmxvY2sgU1JBTSBmb3IgR1AgZGV2aWNlcy4KICAtIGRpc3BsYXkgbW9yZSBkZXZpY2UgaW5mb3JtYXRpb24uCiAgLSBmaXggcG90ZW50aWFsIGRlYWRsb2NrIGluIG9tYXAyNHh4X2kyYyBkcml2ZXIuCiAgLSBmaXggRExMIGxvYWQgdmFsdWVzIHRvIG1hdGNoIGRwbGxvdXQqMSBvcGVyYXRpb24uCiAgLSBmaXggMm5kIGNoaXAgc2VsZWN0IGluaXQgZm9yIGNvbWJvIEREUiBkZXZpY2UuCiAgLSBhZGQgc3VwcG9ydCBmb3IgQ0ZJIEludGVsIDI4RjI1NkwxOCBvbiBINCBib2FyZC4KICBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMyBNYXIgMjAwNQoKKiBGaXggZm9ybWF0aW5nIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvQVQ5MVJNOTIwMC5oCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDIgTWFyIDIwMDUKCiogRml4IHR5cG8gaW4gZXRoLmMKICBQYXRjaCBieSBBcmEgQXZhbmVzeWFuLCAyNCBGZWIgMjAwNQoKKiBSZW1vdmUgdW5uZWVkZWQgI2luY2x1ZGUgPG1hbGxvYy5oPgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyMiBGZWIgMjAwNQoKKiBBZGQgY3JhbWZzIHN1cHBvcnQgZm9yIG02OGsKICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjEgRmViIDIwMDUKCiogVXBkYXRlIGVwODI2MDogRml4IGZsYXNoIHRpbWVvdXRzOyBpbXByb3ZlIGNsb2NrIHJlc29sdXRpb24gZm9yIGZhc3RlciBVQVJUcwogIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAyMSBGZWIgMjAwNQoKKiBGaXggYXUxeDAwX3NlcmlhbCBiYXVkIHJhdGUgY2FsY3VsYXRpb246CiAgcmVtb3ZlIGhhcmRjb2RlZCBjcHUgY2xvY2sgZGl2aXNvciBhbmQgdXNlIHJlZ2lzdGVyIGluc3RlYWQ7CiAgcm91bmQgdXAgaW5zdGVhZCBvZiB0cnVuY2F0ZQogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxNSBGZWIgMjAwNQoKKiBBZGQgWGlsaW54IFNwYXJ0YW4zIGZhbWlseSBGUEdBIHN1cHBvcnQKICBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMTQgRmViIDIwMDUKCiogRml4IGRyaXZlcnMvY2ZpX2ZsYXNoLmM6IHVzZSBpbmZvLT5yZXNldF9jbWQgaW5zdGVhZCBvZiBGTEFTSF9DTURfUkVTRVQKICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMTEgRmViIDIwMDUKCiogRml4IFZPSDQwNSBTdXBwb3J0CiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI1IFNlcCAyMDA1CgoqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSSBicmlkZ2Ugb24gTVBDODI3MkFEUwogIFBhdGNoIGJ5IFZpdGFseSBCb3JkdWcsIEZlYiAwOSAyMDA1CgoqIFVwZGF0ZSBtdWx0aWNvcmUgQ005WFggc3VwcG9ydCBmb3IgSW50ZWdyYXRvciBBUCB0byBhbGxvdyBib290aW5nIGZyb20gZmxhc2gKICBQYXRjaCBieSBKZWFuLVBhdWwgU2FtYW4sIDggRmViIDIwMDUKCiogRml4IHN0cnN3YWIoKSB0byByZWxpYWJseSBmaW5kIGVuZCBvZiBzdHJpbmcKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggRmViIDIwMDUKCiogRml4IHR5cG9zIGluIGluY2x1ZGUvcHBjNDQwLmgKICBQYXRjaCBieSBBbmRyZXcgRSBNaWxlc2tpLCAwNCBGZWIgMjAwNQoKKiBBZGQgVmlicmVuICh3YXMgQWNjZWxlbnQpIFBYQTI1NSBJRFAgU3VwcG9ydAogIFBhdGNoIGJ5IENsaWZmIEJyYWtlLCAwNCBGZWIgMjAwNQoKKiBGaXggdG9vbHMvYm1wX2xvZ28uYyB1c2luZyBpbmNvcnJlY3Qgb2Zmc2V0IHRvIHBpeGVsIGRhdGEKICBQYXRjaCBieSBBbmRyZXcgRHllciwgMzEgSmFuIDIwMDUKCiogQWRkIEFSTTk0NkUgY3B1IGFuZCBjb3JlIG1vZHVsZSB0YXJnZXRzOyByZW1hcCBtZW1vcnkgdG8gMHgwMDAwMDAwMAogIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMiBGZWIgMjAwNQoKKiBGaXggZXJyb3IgaGFuZGxpbmcgaW4gdG9vbHMvZW52L2Z3X2Vudi5jCiAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMDEgRmViIDIwMDUKCiogRml4IE1HVDUxMDAgUFNDIGJhdWRyYXRlIGNhbGN1bGF0aW9uCiAgUGF0Y2ggYnkgU2ViYXN0aWFuIFNjaGF1LCAyNyBKYW4gMjAwNQoKKiBPTUFQMjQyeCBmaXggZm9yIEdQIGRldmljZSBib290aW5nCiAgLSBBZGQgU1JBTSB1bmxvY2sgZm9yIEdQIGRldmljZXMuCiAgLSBDaGFuZ2UgRERSIERMTCB1bmxvY2sgdmFsdWUgdG8gYWxsb3cgRFBMTG91dCoxIG9wZXJhdGlvbi4KICBQYXRjaGVzIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDIxIEphbiAyMDA1OgoKKiBBZGQgc3VwcG9ydCBmb3IgQU1EJ3MgUGIxeDAwIGV2YWwgYm9hcmQ7CiAgYWRkIE1JSSByb3V0aW5lcyB0byB0aGUgYXUxeDAwIGV0aGVybmV0IGRyaXZlcjsKICBhZGQgVVNCIG9oY2kgZHJpdmVyICh3b3JrIGluIHByb2dyZXNzKQogIFBhdGNoIGJ5IFRob21hcyBTYWlsZXIsIDIwIEphbiAyMDA1CgoqIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZAogIFVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jIGluc3RlYWQgb2YgcHJpdmF0ZSBmbGFzaCBkcml2ZXI7CiAgUmVtb3ZlIGhhcmRjb2RlZCBwZXJzb25hbGl6ZWQgc2V0dGluZ3MgZnJvbSBvbWFwNTkxMm9zay5oOwogIEZpeCBzcGFjaW5nIHdpdGggKFJPKSBtYXJrcyBpbiAnZmxpbmZvJyBvdXRwdXQuCiAgUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTQgSmFuIDIwMDUKCiogRml4IHdhcm5pbmdzIGZvciBQQ0kgY29kZSBvbiBpeHAKICBQYXRjaCBieSBKb2UgPGxneHVlQHlhaG9vLmNvbT4sIDEzIEphbiAyMDA1CgoqIHZpcnRleDIgZml4IGZvciBib2d1cyBkb3dubG9hZCBlcnJvciBtZXNzYWdlcwogIFRoZSB2aXJ0ZXgyIEZQR0EgZG93bmxvYWQgY29kZSB3YXRjaGVzIGZvciBpbml0IGdvaW5nIGFjdGl2ZSBkdXJpbmcKICBhIGRvd25sb2FkIG9mIGNvbmZpZyBkYXRhIGFzIGFuIGVycm9yIGNvbmRpdGlvbi4gaW5pdCBhbHNvIGdvZXMKICBhY3RpdmUgYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGlzIGZpbmlzaGVkIGluIGNvbmNlcnQgd2l0aCB0aGUgZG9uZQogIHNpZ25hbC4gU28gZmFyLCB0aGUgY29kZSBkb2VzIG5vdCBjaGVjayBmb3IgZG9uZSBhY3RpdmUgdW50aWwgYWxsCiAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBzZW50LiBJZiBjb25maWd1cmF0aW9uIGRhdGEgaGFzIGEgZmV3CiAgZXh0cmEgcGFkIGJ5dGVzIGF0IHRoZSBlbmQsIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSBldmVuCiAgdGhvdWdoIHRoZSBkb3dubG9hZCBoYWQgc3VjZWVkZWQuCiAgTk9URTogdmlydGV4MiBzbGF2ZSBzZXJpYWwgYW5kIHNwYXJ0YW4yIHZlcnNpb25zIG1heSBzdGlsbCBoYXZlIHRoZQogIHNhbWUgcHJvYmxlbS4KICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTIgSmFuIDIwMDUKCiogT3B0aW1pemUgZmxhc2hfbWFrZV9jbWQgaW4gZHJpdmVycy9jZmlfZmxhc2guYyBmb3IgbGl0dGxlIGVuZGlhbgogIEZpeCAiV0FSTklORzogZmxhc2hfbWFrZV9jbWQ6IHVuc3VwcHBvcnRlZCBMaXR0bGVFbmRpYW4gbW9kZSIKICBtZXNzYWdlIHdoZW4gcHJvYmluZyBmb3Igbm9uZXhpc3RlbnQgZmxhc2ggaW4gbGl0dGxlIGVuZGlhbiBtb2RlLgogIEFzIGEgc2lkZSBlZmZlY3QgbW9yZSBlZmZpY2llbnQgYW5kIHNtYWxsZXIgY29kZSBpcyBnZW5lcmF0ZWQsCiAgd2hpY2ggaXMgYWx3YXlzIGEgR29vZCBUaGluZyAoVE0pLgogIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyNCBTZXAgMjAwNQoKKiBVcGRhdGUgZm9yIFRGVFAgdXNpbmcgYSBmaXhlZCBVRFAgcG9ydAogIFVzZSB0aGUgYXBwcm92ZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZXMuIEFkZGVkICJ0ZnRwZHN0cCIgdG8KICBhbGxvdyBwb3J0cyBvdGhlciB0aGFuIDY5IHBlciBUb2x1bmF5IE9ya3VuJ3MgcmVjb21tZW5kYXRpb24uCiAgUGF0Y2ggYnkgSmVycnkgVmFuIEJhcmVuLCAxMiBKYW4gMjAwNQoKKiBBbGxvdyB0byBmb3JjZSBURlRQIHRvIHVzZSBhIGZpeGVkIFVEUCBwb3J0CiAgKEFkZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIENPTkZJR19URlRQX1BPUlQgYW5kIG9wdGlvbmFsIGVudgogIHZhcmlhYmxlIHRmdHBwb3J0KQogIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTAgSmFuIDIwMDUKCiogRml4IGV0aGVybmV0IHRpbWVvdXRzIG9uIGRiYXUxNTUwIGFuZCBvdGhlciBhdTF4MDAgc3lzdGVtcwogIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI5IERlYyAyMDA0CgoqIENsZWFudXA6IGZpeCBicm9rZW4gYnVpbGRzCgoqIEZpeCBQSFkgYWRkcmVzcyBhcmd1bWVudCBwYXNzaW5nIHdpdGggbWlpIGluZm8gY29tbWFuZAogIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyOCBEZWMgMjAwNAoKKiBDbGVhbnVwIChQUEM0eHggaXMgQU1DQyBub3cpCgoqIGVzZCBDUENJMkRQIGJvYXJkIGFkZGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDIyIFNlcCAyMDA1CgoqIGVzZCBQTUM0MDUgYm9hcmQgdXBkYXRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMiBTZXAgMjAwNQoKKiBBZGQgU001MDEgc3VwcG9ydCB0byBISDQwNSBib2FyZC4KICBBZGQgc3VwcG9ydCBmb3IgZ3ppcCBjb21wcmVzc2VkIGJtcCdzIChDT05GSUdfVklERU9fQk1QX0daSVApLgogIEFkZCBzdXBwb3J0IGZvciBlZXByb20gd3JpdGUtZW5hYmxlIChDRkdfRUVQUk9NX1dSRU4pLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjIgU2VwIDIwMDUKCiogRml4IGF1dG9uZWdvdGlhdGlvbiBpbiB0c2VjIGV0aGVybmV0IGRyaXZlcgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjEgU2VwIDIwMDUKCiogRml4IGJ1ZyBpbiBhdXRvX3VwZGF0ZSAodHJhYiBib2FyZCkKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNiBTZXAgMjAwNQoKKiBGaXggY29tcHV0YXRpb24gb2YgZnJhbWVidWZmZXIgcGFsZXR0ZSBmb3IgOGJwcCBMQ0QgYml0bWFwcwogIFBhdGNoIGJ5IEZyYW5jZXNjbyBNYW5kcmFjY2ksIDE2IFNlcCAyMDA1CgoqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBJTktBNHgwIGJvYXJkCgoqIFVwZGF0ZSBjb25maWd1cmF0aW9uIGZvciBQTTg1NCBib2FyZAogIEJhc2VkIG9uIHBhdGNoIGJ5IFIuIExvZWZmbCwgMjAgSnVsIDIwMDUKCiogQWRkIFBDSSBzdXBwb3J0IHRvIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBTZXAgMjAwNQoKKiBVcGRhdGUgQU1DQyBZb3NlbWl0ZSB0byBnZXQgYSBjb25zaXN0ZW50IHNldHVwIGZvciBhbGwgQU1DQyBldmFsCiAgYm9hcmRzIChiYXVkcmF0ZSwgZW52aXJvbm1lbnQuLi4pLiBGbGFzaCBkcml2ZXIgZml4ZWQuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBTZXAgMjAwNQoKKiBGaXggcHJvYmxlbSBpbiA0NDBHUCBldGhlcm5ldCBkcml2ZXIgKGVib255KS4gQWRkIHN1cHBvcnQgZm9yIDJuZAogIGV0aGVybmV0IHBvcnQgb24gZWJvbnkuCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA3IFNlcCAyMDA1CgoqIEFkZGVkIHN1cHBvcnQgZm9yIG10ZGRldm51bSBhbmQgbXRkZGV2bmFtZSB2YXJpYWJsZXMgKG10ZHBhcnRzIGNvbW1hbmQpCgoqIENoYW5nZSBkZWZhdWx0IGNvbnNvbGUgYmF1ZCByYXRlIGZvciBzdHh4dGMgYm9hcmQKCiogQWRkIEkyQyBzdXBwb3J0IHRvIFRRTTg1NDAgYW5kIFRRTTg1NjAgYm9hcmRzIChFRVBST00sIFJUQywgTE03NS1EVFQpLgogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzEgQXVnIDIwMDUKCiogRml4IGRlZmF1bHQgY29tbWFuZCBzZXQgKGRvbid0IGluY2x1ZGUgQ0ZHX0NNRF9ESVNQTEFZIGNvbW1hbmQpCiAgUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIFNlcCAyMDA1CgoqIENsZWFudXAKCiogRW5hYmxlIFNNNzEyIGRyaXZlciBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgoKKiBGaXggcHJvYmxlbXMgd2l0aCBsZCB2ZXJzaW9uIDIuMTYgKGRvdCBvdXRzaWRlIHNlY3Rpb25zIHByb2JsZW0pCiAgUG9pbnRlZCBvdXQgYnkgR2VyaGFyZCBKYWVnZXIsIDMxIEF1ZyAyMDA1OwogIGNmLiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvYmludXRpbHMvMjAwNS0wOC9tc2cwMDQxMi5odG1sCgoqIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54OiBmaXggZ2xvYmFsIGRhdGEgcG9pbnRlciBpbml0aWFsaXphdGlvbgoKKiBBZGp1c3QgQ1MzIHRpbWluZ3Mgb24gSE1JMTAwMSBib2FyZCBmb3IgZG90IG1hdHJpeCBkaXNwbGF5IHVuZGVyIExpbnV4CgoqIEFkZCBrZXlib2FyZCBhbmQgZG90IG1hdHJpeCBkaXNwbGF5IHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQuCgoqIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54CgoqIEZpeGVkIEJhbWJvbyBwb3J0IHRvIGVuYWJsZSBydW5uaW5nIHdpdGhvdXQgRERSLURJTU0KICAoQmFtYm9vIGhhcyBhbHNvIDY0TUIgb25ib2FyZCBERFIpCiAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNCBBdWcgMjAwNQoKKiBNZXJnZWQgNDA1Z3BfZW5ldC5jIGFuZCA0NDBneF9lbmV0LmMgdG8gZ2VuZXJpYyA0eHhfZW5ldC5jCiAgbm93IGhhbmRsaW5nIGFsbCA0eHggY3B1J3MKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IEF1ZyAyMDA1CgoqIEZpeCBtYWtlIGRlcGVuZGVuY2llcyBmb3IgYXQ5MXJtOTIwMCBhbmQga3M4Njk1IGNwdXMKICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMyBBdWcgMjAwNQoKKiBBZGQgSkZGUzIgc3VwcG9ydCBmb3IgVFFNNTIwMCBib2FyZAoKKiBBZGQgZXNkIGNwY2k1MjAwIGFuZCBwZjUyMDAgYm9hcmRzCiAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMjIgQXVnIDIwMDUKCiogRml4IHN5c2Nsb2NrIGZvciBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcwogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI1IEp1bCAyMDA1CgoqIEluaXRpYWxpemUgc2VyaWFsIyBhbmQgZXRoYWRkciBmcm9tIG1hbnVmYWN0dXJlciBkYXRhIGluIEVFUFJPTSBvbiBDTUMtUFUyCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggSnVuIDIwMDUKCiogQWRkIG5ldyBib2FyZCBzcGVjaWZpYyBjb21tYW5kcyBmb3IgVFFNNTIwMC9TVEs1MlhYCiAgLSBTb3VuZCBjb21tYW5kcyAoYmVlcCwgd2F2LCBzb3VuZCkKICAtIFRlc3QgY29tbWFuZHMgKGxlZCwgY2FuLCBiYWNrbGlnaHQsIHJzMjMyKQogIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDAyIE1heSAyMDA1CgoqIENoYW5nZSBtYWluIGNsb2NrIG9uIENNQy1QVTIgYm9hcmQgZnJvbSAyMDcgTUh6IHRvIDE3OSBNSHoKICBiZWNhdXNlIG9mIGEgYnVnIGluIHRoZSBBVDkxUk05MjAwIENQVSBQTEwKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMiBBcHIgMjAwNQoKKiBBZGQgYXV0b21hdGljIEhXIGRldGVjdGlvbiBmb3IgYW5vdGhlciBDTUNfUFUyIHZhcmlhbnQKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMCBBcHIgMjAwNQoKKiBSZW1vdmUgQ09ORklHX0FUOTFSTTkyMDBESyBpbiBDTUMtUFUyIGNvbmZpZ3VyYXRpb24KICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxOSBBcHIgMjAwNQoKKiBGaXggaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBvbiBUUU01MjAwIHdpdGhvdXQgU001MDEKICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBBcHIgMjAwNQoKKiBBZGQgUlRDIHN1cHBvcnQgZm9yIFNUSzUyWFguMjAwCiAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgQXByIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIElGTSBvMmRudCBib2FyZAoKKiBFbmFibGUgUENJIG9uIGhtaTEwMDEgYm9hcmQKCiogRml4IHJldHVybiB2YWx1ZXMgb2YgdGhlIGpmZnMyIGNvbW1hbmRzIGxzL2ZzbG9hZC9mc2luZm8sCiAgc28gd2UgY2FuIHVzZSB0aGVtIHRvLCBlLmcuLCBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgZmlsZSB3aXRoCiAgImlmIGxzIGZvbzsgdGhlbiB0aGlzOyBlbHNlIHRoYXQ7IGZpIiBpbiB0aGUgaHVzaCBzaGVsbAogIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE2IEF1Z3VzdCAyMDA1CgoqIENvZGluZyBzdHlsZSBjbGVhbnVwCgoqIEFkZCBzdXBwb3J0IGZvciBTaWxpY29uIFR1cm5rZXkgZVhwcmVzcyBYVGMgKG1wYzg3eC84OHgpIGJvYXJkLgogIFBhdGNoIGJ5IERhbiBNYWxlayBhbmQgUGFudGVsaXMgQW50b25pb3UsIDE1IEF1ZyAyMDA1CgoqIENoZWNrIHJldHVybiB2YWx1ZSBvZiBtYWxsb2MgaW4gNDQwZ3hfZW5ldC5jCiAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTggSnVsIDIwMDUKCiogQWRkIFNhbmRidXJzdCBNZXRyb2JveCBhbmQgU2FuZGJ1cnN0IEthcmVmIGJvYXJkIHN1cHBvcnQgcGFja2FnZXMuCiAgU2Vjb25kIHNlcmlhbCBwb3J0IG9uIDQ0MEdYIG5vdyBkZWZpbmVkIGFzIGEgc3lzdGVtIGRldmljZS4KICBBZGQgJ1Nob3J0IEV0Y2gnIGNvZGUgZm9yIENpY2FkYSBQSFkgd2l0aGluIDQ0MGd4X2VuZXQuYwogIFBhdGNoIGJ5IFRyYXZpcyBCLiBTYXd5ZXIsIDEyIEp1bCAyMDA1Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBNaW5vciBjb2RlIGNsZWFudXAKCiogQWRkIGZvcmdvdHRlbiBuZXcgZmlscyBmcm9tIGxhdGVzdCBWb2ljZUJsdWUgdXBkYXRlCgoqIE1ha2UgYm9vdHJldHJ5IGZlYXR1cmUgd29yayB3aXRoIGh1c2ggc2hlbGwuCiAgQ2F2ZWF0OiB0aGlzIGN1cnJlbnRseSAqcmVxdWlyZXMqIENPTkZJR19SRVNFVF9UT19SRVRSWSB0byBiZSBzZXQsIHRvby4KICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxOSBKdWwgMjAwNQoKKiBVcGRhdGUgSHltb2QgQm9hcmQgRGF0YWJhc2UgUEhQIGNvZGUgaW4gInRvb2xzIiBkaXJlY3RvcnkKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAwMSBKdWwgMjAwNQoKKiBNYWtlICJ0ciIgY29tbWFuZCB1c2UgUE9TSVggY29tcGxpYW50OyBleHBvcnQgSE9TVE9TIG1ha2UgdmFyaWFibGUKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQoKKiBGaXggTXVycmF5IEplbnNlbidzIG1haWwgYWRkcmVzcy4KICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAzMCBKdW4gMjAwNQoKKiBQcmVzZXJ2ZSBQSFlfQk1DUiBkdXJpbmcgYSBzb2Z0IHJlc2V0LgogIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDI0IEp1biAyMDA1CgoqIFZvaWNlQmx1ZSB1cGRhdGU6IGVlcHJvbSB0b29sIGNhbiBhbHNvIHN0b3JlIGZpcm13YXJlIHZlcnNpb24gbm93LgogIGVlcHJvbS5iaW4gaXMgcnVuYWJsZSBieSBqdW1waW5nIGF0IGxvYWQgYWRkcmVzcy4KICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjMgTWF5IDIwMDUKCiogTW92ZSB0aGUgQVQ5MVJNOTIwMERLIHRvIHRoZSBBUk0gU3lzdGVtcyBsaXN0LgogIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI2IEFwciAyMDA1CgoqIEVsaW1pbmF0ZSBjYWxscyBvZiBBUk0gbGliZ2NjLmEgaGVscGVyIGZ1bmN0aW9ucyBfZGl2c2kzIGFuZCBfbW9kc2kzCiAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKCiogbWVhc3VyZV9nY2xrKCkgaXMgbmVlZGVkIHdoZW4gREVCVUcgaXMgZW5hYmxlZAogIFBhdGNoIGJ5IEJyeWFuIE8nRG9ub2dodWUsIDI1IEFwciAyMDA1CgoqIEFkZCBVUEQtQ2hlY2tzdW0gY29kZSwgZml4IHByb2JsZW0gaW4gbmV0LmMgKHJldHVybiBpbnN0ZWFkIG9mIGJyZWFrKQogIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDEyIEF1ZyAyMDA1CgoqIGVzZCBQQ0k0MDUgYm9hcmQgdXBkYXRlZAogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBKdWwgMjAwNQoKKiBlc2QgV1VINDA1IGFuZCBEVTQwNSBib2FyZCB1cGRhdGVkCiAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI3IEp1bCAyMDA1CgoqIEZpeCBwcm9ibGVtIGluIGNtZF9uYW5kLmMgKG9ubHkgd2hlbiBkZWZpbmVkIENGR19OQU5EX1NLSVBfQkFEX0RPVF9JKQogIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCA0IE1heSAyMDA1CgoqIFVwZGF0ZSBBTUNDIFlvc2VtaXRlIHRvIGdldCBhIGNvbnNpc3RlbnQgc2V0dXAgZm9yIGFsbCBBTUNDIGV2YWwKICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CgoqIENoYW5nZWQgQU1DQyBCdWJpbmdhICg0MDVFUCkgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IDJuZCBldGggcG9ydAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKCiogQWRkIE5BTkQgRkxBU0ggc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gNDQwRVAgZXZhbCBib2FyZAogIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTEgQXVnIDIwMDUKCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBBRVYgRklGTyBib2FyZC4KICBNaW5vciBjb2Rpbmcgc3R5bGUgY2xlYW51cC4KCiogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBTUEkgZXZhbCBib2FyZAoKKiBGaXggQ29tcGFjdEZsYXNoIHByb2JsZW0gb24gSE1JMTAwMSBib2FyZAoKKiBNYWtlIG5ldyAibXRkcGFydHMiIGNvZGUgYnVpbGQgd2l0aCBvbGRlciBjb21waWxlcnMKICBQYXRjaCBieSBBbmRyZWEgU2NpYW4sIDA5IEF1ZyAyMDA1CgoqIENoYW5nZWQgQ09ORklHXzQ0MF9HWCwgQ09ORklHXzQ0MF9FUCBhbmQgQ09ORklHXzQ0MF9HUiBvcHRpb25zIHRvCiAgQ09ORklHXzQ0R1gsIENPTkZJR180NDBFUCBhbmQgQ09ORklHXzQ0MEdSIGZvciBhIGNvbnNpc3RlbnQgZGVzaWduCiAgd2l0aCB0aGUgNDA1IGRlZmluZXMgYW5kIHRoZSBsaW51eCBrZXJuZWwgZGVmaW5lcy4KICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA4IEF1ZyAyMDA1CgoqIEZpeCBjb21waWxlciB3YXJuaW5ncyB3aXRoIG9sZGVyIEdDQyB2ZXJzaW9ucwoKKiBBZGQgY29tbW9uICh3aXRoIExpbnV4KSBNVEQgcGFydGl0aW9uIHNjaGVtZSBhbmQgIm10ZHBhcnRzIiBjb21tYW5kCgogIE9sZCwgb2Jzb2xldGUgYW5kIGR1cGxpY2F0ZWQgY29kZSB3YXMgY2xlYW5lZCB1cCBhbmQgcmVwbGFjZSBieSB0aGUKICBuZXcgcGFydGl0aW9uaW5nIG1ldGhvZC4gVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBhcHByb2FjaGVzIG5vdzoKCiAgVGhlIGZpcnN0IG9uZSBpcyB0byBkZWZpbmUgYSBzaW5nbGUsIHN0YXRpYyBwYXJ0aXRpb246CgogICN1bmRlZiBDT05GSUdfSkZGUzJfQ01ETElORQogICNkZWZpbmUgQ09ORklHX0pGRlMyX0RFViAgICAgICAgICAgICAgICJub3IwIgogICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRSAgICAgICAgIDB4RkZGRkZGRkYJLyogdXNlIHdob2xlIGRldmljZSAqLwogICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfU0laRSAgICAgICAgIDB4MDAxMDAwMDAJLyogdXNlIDFNQiAqLwogICNkZWZpbmUgQ09ORklHX0pGRlMyX1BBUlRfT0ZGU0VUICAgICAgIDB4MDAwMDAwMDAKCiAgVGhlIHNlY29uZCBtZXRob2QgdXNlcyB0aGUgbXRkcGFydHMgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgZHluYW1pYwogIHBhcnRpdGlvbmluZzoKCiAgLyogbXRkcGFydHMgY29tbWFuZCBsaW5lIHN1cHBvcnQgKi8KICAjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCiAgI2RlZmluZSBNVERJRFNfREVGQVVMVCAgICAgICAgICJub3IxPXp1bWEtMSxub3IyPXp1bWEtMiIKICAjZGVmaW5lIE1URFBBUlRTX0RFRkFVTFQgICAgICAgIm10ZHBhcnRzPXp1bWEtMTotKGpmZnMyKSx6dW1hLTI6LSh1c2VyKSIKCiAgQ29tbWFuZCBsaW5lIG9mIGNvdXJzZSBwcm9kdWNlcyBiaWdnZXIgaW1hZ2VzLCBhbmQgbWF5IGJlIGluYXBwcm9wcmlhdGUKICBmb3Igc29tZSB0YXJnZXRzLCBzbyBieSBkZWZhdWx0IGl0J3Mgb2ZmLgoKKiBGaXggYnVpbGQgcHJvYmxlbXMgZm9yIFBNODU2IEJvYXJkCgoqIEZpeCBzaWduIGV4dGVuc2lvbiBidWcgaW4gJ2ZwZ2EgbG9hZGInIGNvbW1hbmQ7CiAgbWFrZSAnZnBnYSBsb2FkYicgYWx3YXlzIHByaW50IHRoZSBmaWxlIGhlYWRlciBpbmZvCiAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDExIEphbiAyMDA1CgoqIEZpeCBlcnJvcnMgdGhhdCBvY2N1ciB3aGVuIGFjY2Vzc2luZyBTeXN0ZW1BQ0UgQ0YKICBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMDkgSmFuIDIwMDUKCiogRG9jdW1lbnQgc3dpdGNoaW5nIGJldHdlZW4gVS1Cb290IGFuZCBQbGFuZXRDb3JlIG9uIFJQWGxpdGUKICBieSBTYW0gU29uZywgMjQgRGVjIDIwMDQKCiogRml4IFBvd2VyUVVJQ0MgSUkgbWFzayBkZXRlY3Rpb24uCiAgUGF0Y2ggYnkgRXVnZW5lIFN1cm92ZWdpbiwgMjAgRGVjIDIwMDQKCiogQWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOSU9TIERLMUMyMCBib2FyZAogIFBhdGNoIGJ5IFNobG9tbyBLdXQsIDEzIERlYyAyMDA0CgoqIEFkZCBzdXBwb3J0IGZvciBlcDgyNDggYm9hcmQKICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMiBEZWMgMjAwNAoKICBNaW5vciBjb2RlIGNsZWFudXAuCgoqIEZpeCBiYXVkcmF0ZSBzZXR0aW5nIGZvciBLR0RCIG9uIE1QQzgyNjAKICBQYXRjaCBieSBIb0ppbiwgMTEgRGVjIDIwMDQKCiogRml4ICdtaWkgaGVscCcgdGV4dCBmb3JtYXR0aW5nCiAgUGF0Y2ggYnkgQ29yeSBUdXNhciwgMTAgRGVjIDIwMDQKCiogRml4IHJldHVybiBjb2RlIG9mIE5GUyBjb21tYW5kCiAgUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDExIERlYyAyMDA0CgoqIEZpeCB0eXBvCgoqIEZpeCBjb21waWxlciB3YXJuaW5ncyBpbiBjcHUvcHBjNHh4L3VzYmRldi5jCiAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMDQgQXVnIDIwMDUKCiogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgQmFtYm9vIFBQQzQ0MEVQIGV2YWwgYm9hcmQKICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IEF1ZyAyMDA1CgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlcgogIEZpeCBzdHlsZSBpc3N1ZXMgcHJpbWFyaWx5IGluIDg1eHggYW5kIDgzeHggYm9hcmRzLgogICAgLSBDKysgY29tbWVudHMKICAgIC0gVHJhaWxpbmcgd2hpdGUgc3BhY2UKICAgIC0gSW5kZW50YXRpb24gbm90IGJ5IFRBQgogICAgLSBFeGNlc3NpdmUgYW1vdW50IG9mIGVtcHR5IGxpbmVzCiAgICAtIFRyYWlsaW5nIGVtcHR5IGxpbmVzCgoqIFBhdGNoIGJ5IFJvbiBBbGRlciwgMTEgSnVsIDIwMDUKICAgIEFkZCBYaWFuZ2h1YSBYaWFvIGFuZCBMdW5zaGVuZyBXYW5nJ3Mgc3VwcG9ydCBmb3IgdGhlCiAgICBHREEgTVBDODU0MCBFVkFMIGJvYXJkLgoKKiBQYXRjaCBieSBFcmFuIExpYmVydHkKICBBZGQgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4MzQ5QURTIGJvYXJkLgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDI1IEp1bCAyMDA1CiAgTW92ZSB0aGUgVFNFQyBkcml2ZXIgb3V0IG9mIGNwdS9tcGM4NXh4IGFzIGl0IHdpbGwgYmUgc2hhcmVkCiAgYnkgdGhlIHVwY29taW5nIG1wYzgzeHggZmFtaWx5IGFzIHdlbGwuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDUgTWF5IDIwMDUKICBJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBNUEM4NTQ4Q0RTIGJvYXJkLgogIEFkZGVkIEREUiBJSSBzdXBwb3J0IGJhc2VkIG9uIFNQRCB2YWx1ZXMgZm9yIE1QQzg1eHggYm9hcmRzLgogIFRoaXMgcm9sbC11cCBwYXRjaCBhbHNvIGluY2x1ZGVzIGJ1Z2ZpZXMgZm9yIHRoZSBwcmV2aW91c2x5CiAgcHVibGlzaGVkIHBhdGNoZXM6CiAgICBERFJJSSBDUE8sIHByZSBlVFNFQywgODU0OCBMQklVLCBBbmR5J3MgVFNFQywgZVRTRUMgMyY0IEkvTwoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDEwIEZlYiAyMDA1CiAgQWRkIGNvbmZpZyBvcHRpb24gQ09ORklHX0hBU19GRUMgY2FsbGluZyBvdXQgODU0MCBGRUMgZmVhdHVyZXMuCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSwgMDggRmViIDIwMDUKICBGb3IgTVBDODV4eENEUzoKICAgIEFkZHMgUmVsYXhlZCBUaW1pbmcgVFJMWCBiaXQgdG8gRkxBU0ggT1J4IHJlZ3MgdG8gYWxsb3cKICAgIGZvciBmYXN0ZXIgZmxhc2ggcGFydHMuCiAgICBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgQlIvT1IgZm9yIEZMQVNILgoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIgMDggRmViIDIwMDUKICBEZXRlcm1pbmUgTDIgQ2FjaGUgc2l6ZSBkeW5hbWljYWxseSBvbiA4NVhYIGJvYXJkcy4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCBLdW1hciBHYWxhIDA4IEZlYiAyMDA1CiAgLSBDb252ZXJ0IHRoZSBDUE0yIGJhc2VkIGZ1bmN0aW9uYWxpdHkgdG8gdXNlIG5ldyBDT05GSUdfQ1BNMgogICAgb3B0aW9uIHJhdGhlciB0aGFuIGEgbXlyaWFkIG9mIENPTkZJR19NUEM4NTYwLWxpa2UgdmFyaWFudHMuCiAgICBBcHBsaWVzIHRvIE1QQzg1eHggYW5kIE1QQzgyNjAgYm9hcmRzLCBpbmNsdWRlcyBzdHhncDMgYW5kIHNiYzg1NjAuCiAgICBFbGltaW5hdGVzIHRoZSBDT05GSUdfTVBDODU2MCBvcHRpb24gZW50aXJlbHkuICBEaXN0cmlidXRlcyB0aGUKICAgIG5ldyBDT05GSUdfQ1BNMiBvcHRpb24gdG8gZWFjaCA4MjYwIGJvYXJkLgoKKiBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04NTYgYm9hcmQKICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDAzIEF1ZyAyMDA1CgoqIE1pbm9yIGZpeGVzIHRvIFBNODU0IGJvYXJkCiAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQoKKiBBZGp1c3QgY29uZmlndXJhdGlvbiBvZiBYRU5JQVggYm9hcmQKICAoY2hpcCBzZWxlY3QgYW5kIEdQSU8gcmVxdWlyZWQgZm9yIFVTQiBvcGVyYXRpb24pCgoqIEZpeCB0eXBvcyBpbiBjcHUvODV4eC9zdGFydC5TIHdoaWNoIGNhdXNlZCBEYXRhVExCIGV4Y2VwdGlvbiB0byBiZQogIHJvdXRlZCB0byB0aGUgV2F0Y2hkb2cgaGFuZGxlcgogIFBhdGNoIGJ5IEV1Z2VuZSBTdXJvdmVnaW4sIDE4IEp1biAyMDA1CgoqIChyZSllbmFibGVkIHNjc2kgY29tbWFuZHMgZG9fc2NzaSgpIGFuZCBkb19zY3NpYm9vdCgpCiAgUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA2IERlYyAyMDA0CgoqIEZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBURlRQIC8gTkZTIGRlZmF1bHQgZmlsZW5hbWVzCiAgUGF0Y2ggYnkgSGlyb3NoaSBJdG8sIDA2IERlYyAyMDA0CgoqIElnbm9yZSBicm9hZGNhc3Qgc3RhdHVzIGJpdCBpbiByZWNlaXZlZCBmcmFtZXMgaW4gODI2MCBGQ0MgZXRoZXJuZXQKICBsb29wYmFjayB0ZXN0IGNvZGUKICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxOCBKdWwgMjAwNQoKKiBGaXggdHlwbyBpbiBta2NvbmZpZyBzY3JpcHQgKHVzZWQgPT0gaW5zdGVhZCBvZiA9KQogIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE4IEp1bCAyMDA1CgoqIENsZWFudXAgYnVpbGQgcHJvYmxlbXMgb24gNjQgYml0IGJ1aWxkIGhvc3RzCgoqIFVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgQXVnIDIwMDU6CiAgLSBNYWpvciBjbGVhbnVwIGZvciBBTUNDIGV2YWwgYm9hcmRzIFdhbG51dCwgQnViaW5nYSwgRWJvbnksIE9jb3RlYQogICAgKGZvcm1lciBJQk0gZXZhbCBib2FyZCkuIFBsZWFzZSBzZWUgImRvYy9SRUFETUUuQU1DQy1ldmFsLWJvYXJkcy1jbGVhbnVwIgogICAgZm9yIGRldGFpbHMuCiAgLSBTeWNhbW9yZSAoUFBDNDA1R1ByKSBldmFsIGJvYXJkIGFkZGVkIChXYWxudXQgcG9ydCBpcyBleHRlbmRlZAogICAgdG8gcnVuIG9uIGJvdGggNDA1R1AgYW5kIDQwNUdQciBldmFsIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDI3IEp1bCAyMDA1OgogIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgUFBDNDQwRVAvR1IuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQU1DQyBZb3NlbWl0ZSBQUEM0NDBFUCBldmFsIGJvYXJkLgogIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWWVsbG93c3RvbmUgUFBDNDQwR1IgZXZhbCBib2FyZC4KCiogTWlub3IgZml4ZXMgZm9yIFBQQ2hhbWVsZW9uIEJvYXJkOgogIC0gZml4IGFsaWdubWVudCBvZiBOQU5EIHNpemUKICAtIG1ha2UgY29kZSBkbyB3aGF0IHRoZSBjb21tZW50IHNheXMKCiogSW1wbGVtZW50IGgvdyBzZWN0b3IgcHJvdGVjdGlvbiBzdGF0dXMgc3luY2hyb25pemF0aW9uIGF0IGJvb3QuCiAgVGhlIGNvZGUgaXMgcHJvdmlkZWQgZm9yLCBhbmQgd2FzIHRlc3RlZCBvbiwgdGhlIFl1a29uL0FsYXNrYQogIGFuZCBQTTUyMCBib2FyZHMgb25seS4KCiAgQSBidWcgaW4gZmxhc2hfcmVhbF9wcm90ZWN0KCkgZm9yIHRoZSBZdWtvbiBib2FyZCB3YXMgZml4ZWQgYnkKICBhZGRpbmcgYSBmdW5jdGlvbiB0aGF0IHRlbGxzIGlmIHR3byBiYW5rcyBhcmUgb24gb25lIGZsYXNoIGNoaXAuCgoqIEZpeCBzeXNtb24gUE9TVCBwcm9ibGVtOiBjaGVjayBJMkMgZXJyb3IgY29kZXMKICBUaGlzIGZpeGVzIGEgcHJvYmxlbSBvZiBkaXNwbGF5aW5nIGJvZ3VzIHZvbHRhZ2VzIHdoZW4gdGhlIHZvbHRhZ2VzCiAgYXJlIHNvIGxvdyB0aGF0IHRoZSBJMkMgZGV2aWNlcyBzdGFydCBmYWlsaW5nIHdoaWxlIHRoZSByZXN0IG9mIHRoZQogIHN5c3RlbSBrZWVwcyBydW5uaW5nLgoKKiBQYXRjaCBieSBDZWRyaWMgVmluY2VudCwgNiBKdWwgMjAwNToKICBGaXggQ0ZHX0NNRF9TRVRHRVREQ1IgaGFuZGxpbmcgaW4gImNvbW1vbi9jbWRfZGNyLmMiCgoqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjAgSnVsIDIwMDU6CiAgQWRkIG1pc3NpbmcgUENJIElPIHBvcnQgZGVmaW5pdGlvbnMuCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KCiogQWRqdXN0IHByaW50ZWQgYm9hcmQgSUQgZm9yIExXTU9OIGJvYXJkLgoKKiBGaXggbG93LWxldmVsIE9IQ0kgdHJhbnNmZXJzIGZvciBBUk05MjB0IGFuZCBNUEM1eHh4CgoqIEFkZCBuZXcgYXJndW1lbnQgZm9ybWF0IGZvciBmbGFzaCBjb21tYW5kcyB0byBhbGxvdyBmb3IgdXNhZ2UgbGlrZQogICJlcmFzZSAkKGFkZHIpICskKGZpbGVzaXplKSIsIGkuIGUuIGEgc2l6ZSBhcmd1bWVudCBjYW4gYmUgdXNlZCBhbmQKICBVLUJvb3Qgd2lsbCBhdXRvbWF0aWNpYWxseSBmaW5kIHRoZSBlbmQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2VjdG9yLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDUgSnVsIDIwMDU6CiAgVXBkYXRlIHVjMTAwIGJvYXJkIFBIWSBzZXR1cAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEgSnVsIDIwMDU6CiAgRml4IFBIWSBhZGRyZXNzIGZvciBDQVRjZW50ZXIgYm9hcmQgKG5vdyBjb3JyZWN0ISkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMCBKdW4gMjAwNToKICBGaXggUEhZIGFkZHJlc3NlcyBmb3IgUFBDaGFtZWxlb24gYW5kIENBVGNlbnRlciBib2FyZHMKICBDaGFuZ2UgTUFJTlRBSU5FUiBmb3IgbW9zdCBlc2QgYm9hcmRzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDMwIEp1biAyMDA1OgogIEZpeCBMQ0QgbG9nbyBmb3IgbHdtb24gYm9hcmQgd2hpY2ggZ290IGxvc3QgaW4gdGhlIG1lcmdlIG9mIDh4eCBhbmQgUFhBIExDRCBjb2RlCgoqIEZpeCBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBwcm9ibGVtIG9uIE1QQzUyMDAgc3lzdGVtcwoKKiBBZGQgRUVQUk9NIGFuZCBSVEMgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMCBKdW4gMjAwNToKICBGaXggaW5pdGlhbGl6YXRpb24gb2YgbG93IGFjdGl2ZSBHUElPIHBpbnMgb24gaW5rYTR4MCBib2FyZAoKKiBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50LCBkaXNhYmxlIEhXIGZsYXNoIHByb3RlY3Rpb24gb2YKICBITUkxMDAxIGJvYXJkCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDEwIEp1biAyMDA1OgogIEluaXRpYWxpemUgYWxsb2NhdGVkIGRldiBhbmQgcHJpdmF0ZSBodyBzdHJ1Y3R1cmVzCiAgYWZ0ZXIgdGhlaXIgcmVzcGVjdGl2ZSBhbGxvY2F0aW9uIGluIDQ0MGd4X2VuZXQuYwoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBKdW4gMjAwNToKICBGaXggYnl0ZW9yZGVyIHByb2JsZW1zIHdpdGggc2Vjb25kIGFyZ3VtZW50IG9mICJib290bSIgd2l0aAogIHN0YW5kYWxvbmUgaW1hZ2VzOwoKKiBBZGQgc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZAoKKiBEaXNhYmxlICJkYXRlIiBhbmQgInNudHAiIGNvbW1hbmRzIG9uIFRRTTg2Nk0KCiogRml4IHdhdGNoZG9nIHJlc2V0IHByb2JsZW1zIG9uIExXTU9OIGJvYXJkCgoqIFBhdGNoIGJ5IEp1ZXJnZW4gU2VsZW50LCAxNyBNYXkgMjAwNToKICBBZGQgc3VwcG9ydCBmb3IgRnVua3dlcmsgVm9WUE4gZ2F0ZXdheSBtb2R1bGUuCgoqIENsZWFudXAgZGVidWcgY29kZSBmb3IgTVBDODIyMCBGRUMgZHJpdmVyCgoqIEV4dGVuZCBidXJzdCBtb2RlIFJBTSB0ZXN0IHByb2dyYW0gdG8gdGFrZSBhIGxvb3AgY291bnQKICAoMCA9IGluZmluaXRlKQoKKiBVc2UgQ09ORklHX0RSSVZFUl9LUzg2OTVFVEggdG8gZW5hYmxlIEtTODY5NSBldGhlcm5ldCBkcml2ZXIgb24KICB0aG9zZSBib2FyZHMgdGhhdCB1c2UgaXQuCgoqIFBhdGNoZXMgYnkgR3JlZyBVbmdlcmVyLCAxOSBNYXkgMjAwNToKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgS1M4Njk1UCAoQVJNIDkyMiBiYXNlZCkgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIE9wZW5HZWFyIENNNDAwOCwgQ000MTE2IGFuZCBDTTQxNDggYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE5IE1heSAyMDA1OgogIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX1RBRyBvbiBBUk0gYm9hcmRzCgoqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU29yY2VyeSBib2FyZC4KICBDb2RlIGNsZWFudXAgKGVzcGVjaWFsbHkgU29yY2VyeSAvIEFsYXNrYSAvIFl1a29uIHNlcmlhbCBkcml2ZXIpLgoKKiBGaXggY29tcGlsZSBwcm9ibGVtcyBjYXVzZWQgYnkgbmV3IGJ1cnN0IG1vZGUgU0RSQU0gdGVzdDsKICBtYWtlIHBvcnQgcGlucyB0byB0cmlnZ2VyIGxvZ2ljIGFuYWx5emVyIGNvbmZpZ3VyYWJsZQoKKiBGaXggdGltZXIgaGFuZGxpbmcgb24gTVBDODV4eCBzeXN0ZW1zCgoqIEZpeCBkZWJ1ZyBjb2RlIGluIG9tYXA1OTEyb3NrIGZsYXNoIGRyaXZlcgoKKiBBZGQgc3VwcG9ydCBmb3IgTVBDODI0NyBiYXNlZCAiSURTODI0NyIgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciAyIHggVFNFQyBpbnRlcmZhY2VzIG9uIHRoZSBUUU04NTQwIGJvYXJkLgoKKiBPbiBMV01PTiB3ZSBtdXN0IHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIGJvYXJkIGFzIHRoZSBDUFUKICBnZW5lcmVhdGVkIEhSRVNFVCBwdWxzZSBpcyB0b28gc2hvcnQgdG8gcmVzZXQgdGhlIGV4dGVybmFsCiAgY2lyY3VpdHJ5LgoKKiBBZGQgdGVzdCB0b29sIHRvIGV4ZXJjaXNlIFNEUkFNIGFjY2Vzc2VzIGluIGJ1cnN0IG1vZGUKICAoYXMgc3RhbmRhbG9uZSBwcm9ncmFtLCBNUEM4eHgvUG93ZXJQQyBvbmx5KQoKKiBJbmNyZWFzZSBDRkdfTU9OSVRPUl9MRU4gZm9yIFJhdHRsZXIgYm9hcmQgdG8gbWF0Y2ggYWN0dWFsIGNvZGUKICBzaXplLgoKKiBNYWpvciB1cGF0ZSBvZiBKRkZTMiBjb2RlOyBub3cgaW4gc3luYyB3aXRoIHNuYXBzaG90IG9mIE1URCBDVlMgb2YKICBNYXJjaCAxMywgMjAwNSk7IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfSkZGUzJfTFpPX0xaQVJJCiAgYWRkZWQgdG8gc3VwcG9ydCBMWk8gYW5kIExaQVJJIGNvbXByZXNzaW9uIG1vZGVzICh1bmRlZmluZWQgYnkKICBkZWZhdWx0KS4KCiogRml4IHByb2JsZW0gd2l0aCBzeW1ib2xpYyBsaW5rcyBpbiBKRkZTMiBjb2RlLgoKKiBVc2UgbGlua2VyIEFTU0VSVCBzdGF0ZW1lbnQgdG8gcHJldmVudCB1bmRldGVjdGVkIG92ZXJsYXBwaW5nIG9mCiAgc2VjdGlvbnMgb24gUFBDaGFtZWxlb24gYm9hcmQ7IG90aGVyIGJvYXJkcyBtaWdodCB1c2UgdGhpcywgdG9vLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE1heSAyMDA1OgogIFVwZGF0ZSBmb3IgUDNHNAogIEZpeCBwcm9ibGVtcyBpbiBjbWRfdW5pdmVyc2UuYwoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDMgTWF5IDIwMDU6CiAgQWRkZWQgbWlzc2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiBjbWRfbmFuZC5jCiAgTW9kaWZpZWQgQ0ZHX1BDSV9QVE0xTVMgaW4gY29uZmlncy9QTFU0MDUuaCB0byBtYXAgMTI4TUIgcmFtCgoqIEZpeCBJTktBNHgwOiB1c2UgQ1MxIGFzIGdwaW9fd2t1cF82IG91dHB1dAoKKiBGaXggYnVnIGluIHRoZSBTRFJBTSBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBjYW5tYiwgSWNlQ3ViZSBhbmQKICBQTTUyMCBib2FyZHMuCiAgRml4IFBIWSBhZGRyZXNzIGZvciBjYW5tYiBib2FyZC4KCiogQ2xlYW51cCBzZXJpYWwgY29uc29sZSBiYXVkcmF0ZSBjYWxjdWxhdGlvbiBvbiBBVDkxUk05MjAwOwogIGdldCByaWQgb2Ygb2Jzb2xldGUgQ0ZHX0FUOTFDX0JSR1JfRElWSVNPUiBkZWZpbml0aW9uCgoqIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAxOCBBcHIgMjAwNToKICBNYWtlIFBDSSB0YXJnZXQgYWRkcmVzcyBzcGFjZXMgb24gUE1DNDA1IGFuZCBDUENJNDA1IGJvYXJkcwogIGNvbmZpZ3VyYWJsZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzCgoqIEF1dG8tc2l6ZSBSQU0gb24gY2FubWIgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBjYW5tYiBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEFwciAyMDA1OgogIFVwZGF0ZSBmb3IgZXNkIGFwYzQwNQoKKiBGaXhlcyBmb3IgVFFNODU2MCBib2FyZDoKICAtIGZpeCBjbG9jayByYXRlcwogIC0gcmVtb3ZlIGRlYnVnIG1lc3NhZ2VzCiAgLSBmaXggZmxhc2ggc2VjdG9yIHByb3RlY3Rpb24KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDcgQXByIDIwMDU6CiAgQWRkIGkyY19yZWdfd3JpdGUoKSBhbmQgaTJjX3JlZ193cml0ZSgpIGZvciBhdDkxcm05MjAwIEkyQwoKKiBQYXRjaGVzIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgogIEZpeCBjb21waWxlciB3YXJuaW5nIGluIGFsdGVyYS5jCiAgRml4IHdhcm5pbmcgaW4gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC9pMmMuYwoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDYgQXByIDIwMDU6CiAgRml4IHZvaWNlYmx1ZSBjb25maWd1cmF0aW9uLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA2IEFwciAyMDA1OgogIFVwZGF0ZXMgZm9yIE9DT1RFQSBib2FyZDoKICAtIENoYW5nZWQgVS1Cb290IHNpemUgZnJvbSA1MTJrQnl0ZSB0byAyNTZrQnl0ZQogIC0gRml4ZWQgZmxhc2ggZHJpdmVyIHRvIHN1cHBvcnQgYm9vdCBmcm9tIHNvbGRlcmVkIHVzZXIgZmxhc2gKICAtIEFkZGVkIFJFQURNRSBmb3Igc3dpdGNoIGZyb20gUElCUyBmaXJtd2FyZSB0byBVLUJvb3QKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDUgQXByIDIwMDU6CiAgLSBDaGFuZ2UgdGltZXIgZnJlcXVlbmN5IGZvciBwcGMgNDQwIGZyb20gMTAgbXMgdG8gMSBtcy4KICAgIFByb2JsZW0gZm91bmQgYnkgQW5kcmV3IFdvem5pYWsuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA2IEFwciAyMDA1OgogIC0gY3JlYXRpbmcgU29DIHN1YmRpciBmb3IgQXRtZWwgQVQ5MVJNOTIwMCBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCiAgLSBtb3ZpbmcgY29kZSBvdXQgb2YgY3B1L2F0OTFybTkyMDAgaW50byBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFdoYWxleSwgMjkgTm92IDIwMDQ6CiAgLSB1cGRhdGUgdGhlIHB4YS1yZWdzLmggZmlsZSBmb3IgUFhBMjd4IGNoaXBzCiAgLSBhZGQgUFhBMjd4IGJhc2VkIEFEU1ZJWCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIE1NQyBvbiBQWEEyN3ggcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBBbmRyZXcgRS4gTWlsZXNraSwgMjggTm92IDIwMDQ6CiAgRml4IFBQQzR4eCBTUEQgU0RSQU0gZGV0ZWN0aW9uIGJ1ZwoKKiBQYXRjaCBieSBIaXJvc2hpIEl0bywgMjYgTm92IDIwMDQ6CiAgRml4IGxvZ2ljIG9mICJ0ZXN0IC16IiBhbmQgInRlc3QgLW4iIGNvbW1hbmRzCgoqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNSBBcHIgMjAwNToKICBBZGQgc3VwcG9ydCBmb3IgVm9pY2VCbHVlIGJvYXJkLgoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMDUgQXByIDIwMDU6CiAgRml4IG5ldGJvb3RfY29tbW9uKCkgcHJvdG90eXBlcy4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDUgQXByIDIwMDU6CiAgVXNlIGkuTVggd2F0Y2hkb2cgdGltZXIgZm9yIHJlc2V0X2NwdSgpCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA1IEFwciAyMDA1OgogIE1vdmUgcmVzZXRfY3B1KCkgb3V0IG9mIGNwdS9hcm05MjB0L3N0YXJ0LlMgaW50byB0aGUgU29DIHNwZWNpZmljCiAgc3ViZGlyZWN0b3JpZXMgY3B1L2FybTkyMHQvaW14LyBhbmQgY3B1L2FybTkyMHQvczNjMjR4MC8KICAobm93IGluIGludGVydXB0cy5jKQoKKiBBZGQgc3VwcG9ydCBmb3IgTVBDODIyMCBiYXNlZCAic29yY2VyeSIgYm9hcmQuCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NTYwIGJvYXJkLgoKKiBBZGQgRkVDIHN1cHBvcnQgZm9yIFRRTTg1NDAgYm9hcmQuCiAgSW50ZXJmYWNlcyBhcmUgbmFtZWQgYXMgZm9sbG93czogIkVORVQxIiAtIFRTRUMyLCAiRU5FVDIiIC0gRkVDCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA0IEFwciAyMDA1OgogIFVwZGF0ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIENNQ19QVTIgYm9hcmQuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEFwciAyMDA1OgogIC0gcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIENPTkZJR19JTklUX0NSSVRJQ0FMIGZvciBBUk0gYmFzZWQgYm9hcmRzCiAgLSBpbnRyb2R1Y2UgdHdvIG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW5zdGVhZDoKICAgIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQgYW5kIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEFwciAyMDA1OgogIE1ha2Ugc3VyZSB0aGF0IE1ESU8gY2xvY2sgZG9lcyBub3QgZXhjZWVkIDIuNSBNSHogb24gQVQ5MQoKKiBGaXggdGltZXIgY29kZSBmb3IgQVJNIHN5c3RlbXM6IG1ha2Ugc3VyZSB0aGF0IHVkZWxheSgpIGRvZXMgbm90CiAgcmVzZXQgdGltZXJzIHNvIGl0J3Mgc2F2ZSB0byB1c2UgdWRlbGF5KCkgaW4gdGltZW91dCBjb2RlLgoKKiBQYXRjaCBieSBNYXRoaWFzIEv8c3RlciwgMjMgTm92IDIwMDQ6CiAgYWRkIHVkZWxheSBzdXBwb3J0IGZvciB0aGUgbWNmNTI4MiBjcHUKCiogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTYgTm92ZW1iZXIgMjAwNDoKICBmaXggaW5jb3JyZWN0IG9uYm9hcmQgWGlsaW54IENQTEQgYmFzZSBhZGRyZXNzCgoqIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMDggTm92IDIwMDQ6CiAgLSBBZGQgbG93LWJvb3Qgb3B0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkIChpZiBsb3dib290IGlzIHNlbGVjdGVkLAogICAgdGhlIGp1bXBlciBmb3IgdGhlIEhSQ1cgc291cmNlIHNob3VsZCBzZWxlY3QgZmxhc2guIElmIGxvd2Jvb3QgaXMKICAgIG5vdCBzZWxlY3RlZCwgdGhlIGp1bXBlciBmb3IgdGhlIEhSQ1cgc291cmNlIHNob3VsZCBzZWxlY3QgdGhlCiAgICBCQ1NSLgogIC0gY2hhbmdlIGRlZmF1bHQgbG9hZCBiYXNlIGFkZHJlc3MgdG8gMHgwMDQwMDAwMAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOCBOb3YgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUgJiBNaWNybyBSYXR0bGVyIGJvYXJkcy4KICBUZXN0ZWQgb24gUmF0dGxlcjgyNDguCgoqIFBhdGNoIGJ5IEFuZHJlIFJlbmF1ZCwgMDggTm92IDIwMDQ6CiAgRml4IHdhdGNoZG9nIHN1cHBvcnQgaW4gY29tbW9uL2xjZC5jCgoqIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAwNSBOb3YgMjAwMzoKICBFbmFibGUgYWxsIDQgUENNQlJXIGJ1ZmZlcnMgZm9yIHRoZSBNUEM4MjQ1IHByb2Nlc3NvciBzaW5jZSB0aGUgQ1BVCiAgYnVnIG9ubHkgYWZmZWN0cyB0aGUgWFBDODI0NSBwcm9jZXNzb3JzCgoqIFBhdGNoZXMgYnkgSm9zZWYgV2FnbmVyLCAyOSBPY3QgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUFU4NyBib2FyZAogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU0IGJvYXJkCgoqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDAyIE5vdiAyMDA0OgogIEFkZCAxNi1iaXQgTkFORCBzdXBwb3J0CgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDEgTm92IDIwMDQ6CiAgQWRkIG1pc3NpbmcgTklPUy9OSU9TMiBzdXBwb3J0IGZvciAiaW1pbmZvIiBjb21tYW5kCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI5IE9jdCAyMDA0OgogIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgIm1raW1hZ2UiIHRvb2wuCgoqIFBhdGNoIGJ5IERhdmlkIEFkYWlyLCAyNyBPY3QgMjAwNDoKICBBZGQgbWlzc2luZyA0NDBHWCBTRFJBTSBDb250cm9sbGVyIHJlc2V0CgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IE9jdCAyMDA0OgogIERlY2xhcmUgcmVzZXRfY3B1KCkgaW4gaW5jbHVkZS9jb21tb24uaCBpbnN0ZWFkIGxvY2FsbHkKCiogUGF0Y2ggYnkgWXVzZGkgU2FudG9zbywgMjIgT2N0IDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgSElEREVOX0RSQUdPTiBib2FyZAogIC0gZml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGRyaXZlci9ydGwxODM5LmMKCiogUGF0Y2ggYnkgQWxsZW4gQ3VydGlzLCAyMSBPY3QgMjAwNDoKICBzdXBwb3J0IG11bHRpcGxlIHNlcmlhbCBwb3J0cwoKKiBQYXRjaCBieSBSaWNoYXJkIEtsaW5nbGVyLCAwMyBBcHIgMjAwNToKICBBZGQgY2FsbCB0byBldGhfaGFsdCgpIGluIG5ldC9uZXQuYyB3aGVuIGNhbGxlZCBmdW5jdGlvbnMgZmFpbAogIGFmdGVyIGV0aF9pbml0KCkgaGFzIGJlZW4gY2FsbGVkLgoKKiBQYXRjaCBieSBTYW0gU29uZywgMyBBcHJpbCAyMDA1OgogIC0gVXBkYXRlIFJFQURNRS5OZXRjb25zb2xlCiAgLSBVcGRhdGUgUkVBRE1FCgoqIFByZXBhcmUgZm9yIFNvQyByZXdvcmsgb2YgQVJNIGNvZGU6CiAgLSByZW5hbWUgQ09ORklHX0JPT1RCSU5GVU5DIGludG8gIENPTkZJR19JTklUX0NSSVRJQ0FMCiAgLSByZW5hbWUgbWVtc2V0dXAgaW50byBsb3dsZXZlbF9pbml0IChmdW5jdGlvbiBuYW1lIGFuZCBzb3VyY2UgZmlsZXMpCiAgUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDMgQXByIDIwMDU6CiAgLSBjcmVhdGUgU29DIHNwZWNpZmljIGRpcmVjdG9yaWVzIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlteCBhbmQKICAgIGluY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0eDAKCiogRml4IHByb2JsZW1zIHdpdGggU05UUCBzdXBwb3J0OwogIGVuYWJsZSBTTlRQIHN1cHBvcnQgaW4gc29tZSBib2FyZHMuCgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMDEgQXByIDIwMDU6CiAgLSBGaXggZmxhc2ggZXJhc2UgdGltZW91dCBvbiBDTUNfUFUyCiAgLSBBZGQgYXV0b21hdGljIEhXIGRldGVjdGlvbiBmb3IgQ01DX1BVMiBhbmQgQ01DX0JBU0lDCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIE1hcmNoIDIwMDU6CiAgZml4IGNhY2hlIGVuYWJsaW5nIGZvciBBVDkxUk05MjAwCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDMwIE1hciAyMDA1OgogIGFkZCBTTlRQIHN1cHBvcnQgYW5kIGV4cGFuZCB0aW1lIHNlcnZlciBhbmQgdGltZSBvZmZzZXQgZmllbGRzIG9mCiAgREhDUCBzdXBwb3J0LiBTZWUgZG9jL1JFQURNRS5TTlRQCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIERlYyAyMDA0OgogIEZpeCBidWcgaW4gYXQ5MXJtOTIwIGV0aGVybmV0IGRyaXZlcgoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBEZWMgMjAwNDoKICBSZW1vdmUgZHVwbGljYXRlZCBjb2RlIGJ5IG1lcmdpbmcgbWVtc2V0dXAuUyBmaWxlcyBmb3IKICBhdDkxcm05MjAwIGJvYXJkcyBpbnRvIG9uZSBjcHUvYXQ5MXJtOTIwMC9sb3dsZXZlbC5TCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDMxIE1hciAyMDA1OgogIENsZWFudXAgZHVwbGljYXRlIGRlZmluaXRpb24gb2Ygb3ZlcndyaXRlX2NvbnNvbGUoKQoKKiBVcGRhdGUgVFFNNTIwMCBjb25maWd1cmF0aW9uOwogIHByZXBhcmUgZm9yIFJldi4gMjAwIHN0YXJ0ZXIga2l0IGJvYXJkcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIE9jdCAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBOaW9zLUlJIEVQQ1MgQ29udHJvbGxlciBjb3JlLgoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIwIE9jdCAyMDA0OgogIE5pb3MtSUkgY2xlYW51cHM6CiAgLSBBZGQgc3lzaWQgY29tbWFuZCAoTmlvcy1JSSBvbmx5KS4KICAtIExvY2F0ZSBkZWZhdWx0IGV4Y2VwdGlvbiB0cmFtcG9saW5lIGF0IHByb3BlciBvZmZzZXQuCiAgLSBJbXBsZW1lbnQgSS9PIHJvdXRpbmVzIChyZWFkYiwgd3JpdGViLCBldGMpCiAgLSBJbXBsZW1lbnQgZG9fYm9vdG1fbGludXgKCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAyMiBNYXIgMjAwNToKICAtIHVzZSBUUU01MjAwX2F1dG8gYXMgTUFLRUFMTCB0YXJnZXQgZm9yIFRRTTUyMDAgc3lzdGVtcwogIC0gYWRkIHN1cHBvcnQgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIKICAtIGFkZCBzdXBwb3J0IGZvciBncmFwaGljIGNvbnNvbGUgb24gVFFNNTIwMAogIC0gYWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgUmV2IDIwMAogIC0gY2xlYW51cCwgZml4IHR5cG8gaW4gaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAoKKiBQYXRjaCBieSBNYW5mcmVkIEJhcmFsLCAxNyBNYXIgMjAwNToKICBGaXggdHlwbwoKKiBGaXggUlRDIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uIGJvYXJkCgoqIENsZWFudXAsIGZpeCB0eXBvIGluIGluY2x1ZGUvY29uZmlncy9UUU01MjAwLmgKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBNYXIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCBhdXRvX3VwZGF0ZSBhbmQgaGg0MDUgYm9hcmQKCiogQWRhcHQgZm9yIFUtQm9vdCBpbWFnZSBzaXplIChuZXcgZmVhdHVyZXMgZW5hYmxlZCkgb24gVFFNNTIwMAoKKiBVcGRhdGUgY29kZSBmb3IgVFFNODU0MCBib2FyZCAoYW5kIDg1eHggaW4gZ2VuZXJhbCk6CiAgLSBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIEV0aGVybmV0IGRyaXZlcjogTU9UTyBFTkVUIC0+IEVORVQKICAtIFJlZm9ybWF0IGJvb3QgbWVzc2FnZXMKICAtIEVuYWJsZSByZWR1bmRhbnQgZW52aXJvbm1lbnQKICAtIFJlcGxhY2UgdGhlIC1PMiBvcHRpbWl6YXRpb24gZmxhZyB3aXRoIC1tbm8tc3RyaW5nCgoqIFBhdGNoIGJ5IERhdmlkIEJyb3duZWxsLCAxMCBNYXIgMjAwNToKICBSZXN0b3JlIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGluIE9IQ0kgZHJpdmVycy4KCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg1NDAgYm9hcmQKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTQgTWFyIDIwMDU6CiAgTkM2NTA6IGNoYW5nZWQgTkFORCBmbGFzaCBhZGRyZXNzaW5nIHRvIHVzaW5nIFVQTUIKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNCBNYXIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCB2b2g0MDUgZnBnYSBpbWFnZQoKKiBJTktBNHgwOiBBbGxvdyBpbml0aWFsaXphdGlvbiBvZiBMQ0QgYmFja2xpZ2h0IGRpbW1pbmcgZnJvbQogICJicmlnaHRuZXNzIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCiogQWRkIHBvcnQgaW5pdGlhbGl6YXRpb24gZm9yIGRpZ2l0YWwgSS9PIG9uIElOS0E0eDAKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBNYXIgMjAwNToKICBVcGRhdGUgZm9yIGVzZCBib2FyZHMgZHA0MDUgYW5kIGh1YjQwNQoKKiBGaXggZ2V0X3BhcnRpdGlvbl9pbmZvKCkgcGFyYW1ldGVyIGVycm9yIGluIGFsbCBvdGhlciBjYWxscwogIChjb21tb24vY21kX2lkZS5jLCBjb21tb24vY21kX3JlaXNlci5jLCBjb21tb24vY21kX3Njc2kuYykuCgoqIEVuYWJsZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBJTktBNHgwIGJvYXJkCgoqIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyOCBGZWIgMjAwNToKICBmaXggZXh0MmxvYWQgcGFzc2luZyBhbiBpbmNvcnJlY3QgcG9pbnRlciB0byBnZXRfcGFydGl0aW9uX2luZm8oKQogIHJlc3VsdGluZyBpbiBsb2FkIGZhaWx1cmUgZm9yIGRldmljZXMgb3RoZXIgdGhhbiAwCgoqIEFkZCBzdXBwb3J0IGZvciBTUkFNIGFuZCAyIHggUXVhZCBVQVJUcyBvbiBJTktBNHgwIGJvYXJkCgoqIENsZWFudXAgVVNCIGFuZCBwYXJ0aXRpb24gZGVmaW5lcwoKKiBBZGQgc3VwcG9ydCBmb3IgZXh0MiBmaWxlc3lzdGVtcyBhbmQgaW1hZ2UgdGltZXN0YW1wcyB0byBUUU01MjAwIGJvYXJkCgoqIEFkZCByZXNldCBjb2RlIGZvciBDb3JhbC1QIG9uIElOS0E0eDAgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjggSnVuIDIwMDQ6CiAgVXBkYXRlIGZvciBUUkFCIGJvYXJkLgoKKiBGaXggc29tZSBtaXNzaW5nICJ2b2xhdGlsZSJzIGluIE1QQzV4eHggRkVDIGRyaXZlcgoKKiBGaXggY2lycnVzIHZvbHRhZ2UgZGV0ZWN0aW9uIChmb3IgQ1BDNDUpCgoqIEZpeCBieXRlb3JkZXIgcHJvYmxlbSBpbiB1c2Jib290IGFuZCBzY3NpYm9vdCBjb21tYW5kcy4KCiogUGF0Y2ggYnkgQ2FqdXMgSGFobiwgMDQgRmViIDIwMDU6CiAgLSBkb24ndCBpbnNpc3Qgb24gbGVhZGluZyAnLycgZm9yIGZpbGVuYW1lIGluIGV4dDJsb2FkCiAgLSBzZXQgZGVmYXVsdCBwYXJ0aXRpb24gdG8gdXNlZnVsIHZhbHVlICgxKSBpbiBleHQybG9hZAoKKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggSmFuIDIwMDU6CiAgZml4IHdyb25nIHJldHVybiBjb2RlcyBpbiBleHQyIGNvZGUKCiogUmVtb3ZlZCAnLS1uby13YXJuLW1pc21hdGNoJyBvcHRpb24gZnJvbSBNYWtlZmlsZS4gVGhpcyBvcHRpb24KICBtYWtlcyAnbGQnIHRvIG92ZXJsb29rIGJpbmFyeSBvYmplY3RzIGNvbXBhdGliaWxpdHkuCgoqIE1vdmVkICQoUExBVEZPUk1fTElCUykgZnJvbSB0aGUgbGlicmFyeSBncm91cCAoLS1zdGFydC1ncm91cCAuLi4KICAtLWVuZC1ncm91cCkgb3V0c2lkZSBvZiB0aGUgZ3JvdXAuIFRoaXMgd2lsbCBtYWtlICdsZCcgdG8gZG8KICBfbXVsdGlwbGVfIHNlYXJjaCBpbiB0aGUgbGlicmFyeSBncm91cCB3aGVuIHJlc29sdmluZyBzeW1ib2wKICByZWZlcmVuY2VzIGFuZCBkbyBvbmx5IGEgX3NpbmdsZV8gc2VhY2ggaW4gbGliZ2NjLmEgYWZ0ZXIgdGhlIGdyb3VwCiAgc2VhcmNoLgoKKiBGaXggc3RhYmlsaXR5IHByb2JsZW1zIG9uIENQQzQ1IGJvYXJkIGFnYWluLgoKKiBNYWtlIGltYWdlIGRldGVjdGlvbiBmb3IgZGlza2Jvb3QgLyB1c2Jib290IC8gc2NzaWJvb3QgbW9yZSByb2J1c3QKICAoYWxzbyBjaGVjayBoZWFkZXIgY2hlY2tzdW0pCgoqIFVwZGF0ZSBDUEM0NSBib2FyZCBjb25maWd1cmF0aW9uLgoKKiBBZGQgVVNCIGFuZCBQQ0kgc3VwcG9ydCBmb3IgSU5LQTR4MCBib2FyZAoKKiBGaXggSURFIHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCAobmVlZHMgMiB4IEVJRUlPKS4KCiogQ29kZSBjbGVhbnVwCgoqIFBhdGNoIGJ5IFJvYmluIEdldHosIDEzIE9jdCAyMDA0OgogIEFkZCBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIHRvIGNoYW5nZSBTTUM5MUMxMTEgTUFDIGFkZHJlc3NlcywKICBzZWUgZXhhbXBsZXMvUkVBRE1FLnNtYzkxMTExX2VlcHJvbQoKKiBQYXRjaCBieSBYaWFvZ2VuZyAoU2hhd24pIEppbiwgMTIgT2N0IDIwMDQ6CiAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIEFSTSBJbnRlZ3JhdG9yIENQLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxMCBKYW4gMjAwNToKICBVcGRhdGUgc3VwcG9ydCBmb3IgT01BUDI0MjAgKEFSTTExKSBhbmQgSDQgYm9hcmQ6CiAgbyBjbGVhbiB1cCBhbmQgYWRkIG5ldyB0eXBlcyB0byBINCBtZW1vcnkgcHJvYmUgY29kZS4KICBvIGZpeCB0byB3b3JrIHdpdGggaW50ZXJuYWwgYm9vdC4KICBvIGFkZGVkIFBSQ00gY29uZmlnIElJSSBvcGVyYXRpb24uCiAgbyBmaXggbWFyZ2luYWwgZmxhc2ggdGltaW5ncy4KICBvIGFkZCByZXZpc29uIEFUQUcgdXNhZ2UuCiAgbyBlbmFibGUgdm9sdGFnZSBzY2FsaW5nIGF0IHBvd2VyIGNoaXAuCiAgbyBmaXggY29tcGlsZSBlcnJvciBmb3IgaTJjLgoKKiBGaXggbmV0d29yayBwcm9ibGVtIChlcnJvciB3aGVuIHJlY2VpdmluZyBtdWx0aXBsZSBBUlAgcGFja2V0cykKCiogUGF0Y2ggYnkgRGFuaWVsIFBvaXJvdCwgMTIgT2N0IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFdpbmQgUml2ZXIgc2JjNDA1IGJvYXJkCgoqIFBhdGNoIGJ5IFJhaW5lciBCcmVzdGFuLCAxMiBPY3QgMjAwNDoKICBNYWtlIGV4YW1wbGVzL01ha2VmaWxlIG1vcmUgcm9idXN0CgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAxMSBPY3RvYmVyIDIwMDQ6CiAgLSBBZGQgUkVTRVQvUFJFQk9PVC9BVVRPQk9PVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCiAgLSBBZGp1c3QgQ1BVOkJVUyBmcmVxdWVuY3kgcmF0aW8gMToxIHdoZW4gY29yZSBmcmVxdWVuY3kKICAgIGxlc3MgdGhhbiA1ME1IegoKKiBQYXRjaCBieSBTYW0gU29uZywgMTAgT2N0IDIwMDQ6CiAgRml4IGEgcGFyYW1ldGVyIGVycm9yIGluIHJ1bl9jb21tYW5kKCkgaW4gbWFpbi5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDAxIE9jdCAyMDA0OgogIGFkZCBzdXBwb3J0IGZvciB0aGUgVEkgT01BUDI0MjAgcHJvY2Vzc29yIGFuZCBpdHMgSDQgcmVmZXJlbmNlCiAgYm9hcmQKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIFBlbGxlZ3JpbiwgMjQgU2VwIDIwMDQ6CiAgQWRkZWQgc3VwcG9ydCBmb3IgTkUyMDAwIGNvbXBhdGlibGUgKERQODM5MCwgRFA4MzkwMikgTklDcy4KCiogUGF0Y2ggYnkgTGVpZiBMaW5kaG9sbSwgMjMgU2VwIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBBTUQgZGIxNTUwIGJvYXJkCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDE1IFNlcCAyMDA0OgogIEFkZCBDT05GSUdfU0VSSUFMX01VTFRJIHN1cHBvcnQgZm9yIHBwYzR4eCwKICB1cGRhdGUgUkVBRE1FLnNlcmlhbF9tdWx0aQoKKiBQYXRjaGVzIGJ5IERhdmlkIFNub3dkb24sIDA3IFNlcCAyMDA0OgogIC0gYWRkIHUtYm9vdC5oZXggdGFyZ2V0IGluIHRoZSB0b3AgbGV2ZWwgTWFrZWZpbGUKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgVU5TVy9OSUNUQSBQTEVCIDIgYm9hcmQgKHBsZWIyKQogIC0gdXNlIC1tdHVuZT14c2NhbGUgYW5kIC1tYXJjaD1hcm12NSBvcHRpb25zIGZvciBQWEEKCiogUGF0Y2ggYnkgRmxvcmlhbiBTY2hsb3RlLCAwOCBTZXAgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgU2VuVGVjLUNPQlJBNTI3Mi1ib2FyZCAoQ29sZGZpcmUpLgoKKiBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDA3IFNlcCAyMDA0OgogIG1wYzgyNHg6IHNldCBQQ0kgbGF0ZW5jeSB0aW1lciB0byBhIHNhbmUgdmFsdWUKICAoaXMgMCBhZnRlciByZXNldCkuCgoqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKICBBZGQgYml0c3RyZWFtIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBmcGdhIGNvbW1hbmQgKFhpbGlueCBvbmx5KS4KCiogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDAzIFNlcCAyMDA0OgogIEFkZCBYaWxpbnggU3BhcnRhbjJFIGZhbWlseSBGUEdBIHN1cHBvcnQKCiogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAyIFNlcCAyMDA0OgogIEFkZCBBZGRlZCBzdXBwb3J0IGZvciBIMiByZXZpc2lvbiBvZiB0aGUgRVA4MjYwIGJvYXJkLgogIEZpeGVkIGZvcm1hdHRpbmcgZm9yIHNvbWUgb2YgdGhlIEVQODI2MCByZWxhdGVkIHNvdXJjZSBmaWxlcy4KCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAwMiBTZXAgMjAwNDoKICBSZXNldCBtb25pdG9yIHNpemUgYmFjayB0byAyNTYgc28gZW52aXJvbm1lbnQgY2FuIGJlIHdyaXR0ZW4KICB0byBmbGFzaCBvbiBNUEM4NXh4IEFEUyBhbmQgQ0RTIHJlbGVhc2VzLgoKKiBQYXRjaCBieSBQYW9sbyBCcm9nZ2luaSwgMDIgU2VwIDIwMDQ6CiAgTWFrZSBCU1MgY2xlYXJpbmcgb24gQVJNIHN5c3RlbXMgbW9yZSByb2J1c3QKCiogUGF0Y2ggYnkgWXVlIEh1IGFuZCBKb2UsIDAxIFNlcCAyMDA0OgogIC0gYWRkIFBDSSBzdXBwb3J0IGZvciBpeHA0MjU7CiAgLSBhZGQgRUVQUk8xMDAgc3VwcG9yIHRmb3IgaXhkcDQyNSBib2FyZC4KCiogRml4IHByb2JsZW0gd2l0aCBwcm90ZWN0ZWQgc2VjdG9yIGRldGVjdGlvbiBpbiBkcml2ZXIvY2ZpX2ZsYXNoLmMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIENvZGUgY2xlYW51cCwgbW9zdGx5IGZvciBHQ0MtMy4zLngKCiogQ2xlYW51cCBjb25mdXNpbmcgdXNlIG9mIENPTkZJR19FVEgqQUREUiAtIHVzdCBoaXMgb25seSB0bwogIHByZS1kZWZpbmUgYSBNQUMgYWRkcmVzczsgdXNlIENPTkZJR19IQVNfRVRIKiB0byBlbmFibGUgc3VwcG9ydCBmb3IKICBhZGRpdGlvbmFsIGV0aGVybmV0IGFkZHJlc3Nlcy4KCiogQ2xlYW51cCBkcml2ZXJzL2k4MjM2NS5jIC0gYXZvaWQgZHVwbGljYXRpb24gb2YgY29kZQoKKiBGaXggYm9ndXMgImNhbm5vdCBzcGFuIGFjcm9zcyBiYW5rcyIgZmxhc2ggZXJyb3IgbWVzc2FnZQoKKiBDb2RlIGNsZWFudXAKCiogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBmb3IgdGhlIENQQzQ1IEJvYXJkLgoKKiBGaXggcHJvYmxlbXMgd2l0aCBDTUNfUFUyIGZsYXNoIGRyaXZlci4KCiogQ2xlYW51cDoKICAtIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmcgaW4gZnMvZXh0Mi9leHQyZnMuYwogIC0gcmVuYW1lIFVDMTAwIC0+IHVjMTAwCgoqIEFkZCBzdXBwb3J0IGZvciBVQzEwMCBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE2IERleiAyMDA0OgogIC0gZXh0MmZzIHN1cHBvcnQgYWRkZWQKICAtIFR1bmRyYSB1bml2ZXJzZSBzdXBwb3J0IGFkZGVkCiAgLSBDb2xkZmlyZSBNQ0Y1MjQ5IHN1cHBvcnQgYWRkZWQgKG5vIHByZWxvYWRlciBuZWVkZWQhKQogIC0gTUNGNTI0OSBib2FyZCBUQVNSRUcgYWRkZWQKICAtIFBQQyBib2FyZHMgYWRkZWQ6IEFQQzQwNSwgQ1BDSTQwNURULCBDUENJNzUwLCBHMjAwMCwgSEg0MDUsCiAgICBWT000MDUsIFdVSDQwNQogIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKICAtIG1lbW9yeSBjb21tYW5kcyAibWRjIiBhbmQgIm13YyIgYWRkZWQgZm9yIGN5Y2xpYyByZWFkL3dyaXRlCiAgICAoQ09ORklHX01YX0NZQ0xJQywgc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikKCiogQWRkIHN1cHBvcnQgZm9yIElOS0E0WDAgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTIgRGVjIDIwMDQ6CiAgRml4IHR5cG8gaW4gQVQ5MSBtZW1vcnkgc2V0dXAuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yICJTVEs1Mnh4IiBib2FyZCAoaW5jbHVkaW5nIFBTLzIgbXVsdGlwbGV4ZXIpCiAgLSBhZGQgaGFyZHdhcmUgZGV0ZWN0aW9uIGZvciBUUU01MjAwCgoqIENsZWFuIHVwIENNQyBQVTIgZmxhc2ggZHJpdmVyCgoqIFVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlCgoqIEZpeCBidWcgaW4gTVBDODIzIExDRCBkcml2ZXIKCiogRml4IHVkZWxheSgpIG9uIEFUOTFSTTkyMDAgZm9yIGRlbGF5cyA8IDEgbXMuCgoqIEVuYWJsZSBsb25nIGhlbHAgb24gQ01DIFBVMiBib2FyZDsKICBmaXggcmVzZXQgaXNzdWU7CiAgaW5jcmVhc2UgQ1BVIHNwZWVkIGZyb20gMTc5IHRvIDIwNyBNSHouCgoqIEZpeCBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgZm9yIFhhZW5pYXggYm9hcmQgKG5lZWQgdG8gaGFuZGxlCiAgdW5hbGlnbmVkIHRhaWwgcGFydCBzcGVjaWFsbHkpLgoKKiBVcGRhdGUgZm9yIEFUOTFSTTkyMDBESyBhbmQgQ01DX1BVMiBib2FyZHM6CiAgLSBFbmFibGUgYm9vdGluZyBkaXJlY3RseSBmcm9tIGZsYXNoCiAgLSBmaXggQ01DX1BVMiBmbGFzaCBkcml2ZXIKCiogRml4IG1raW1hZ2UgdXNhZ2UgbWVzc2FnZQoKKiBNYXAgU1JBTSBvbiBOQzY1MCBib2FyZAoKKiBXb3JrIGFyb3VuZCBmb3IgRXRoZXJuZXQgcHJvYmxlbXMgb24gWGFlbmlheCBib2FyZAoKKiBQYXRjaCBieSBUc2lDaHVuZyBMaWV3LCAyMyBTZXAgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBNUEM4MjIwIENQVQogIC0gQWRkIHN1cHBvcnQgZm9yIEFsYXNrYSBhbmQgWXVrb24gYm9hcmRzCgoqIEZpeCBjb25maWd1cmF0aW9uIGZvciBFUklDIGJvYXJkIChuZWVkcyBtb3JlIHJvb20pCgoqIEFkanVzdCBNSVBTIGNvbXBpbGVyIG9wdGlvbnMgYXQgcnVuLXRpbWUgZGVwZW5kaW5nIG9uIHRvb2xzIHZlcnNpb24KICAoIi1tYXJjaD00a2MgLW10dW5lPTRrYyAtV2EsLW1pcHNfYWxsb3dfYnJhbmNoX3RvX3VuZGVmaW5lZCIgZm9yIG5ldywKICAiLW1jcHU9NGtjIiBmb3Igb2xkIHRvb2xzKQoKKiBBZGQgcGFzc2luZyBvZiB0aGUgY29tbWFuZCBsaW5lIGFuZCBtZW1vcnkgc2l6ZSBpbmZvcm1hdGlvbiB0byAgdGhlCiAga2VybmVsIG9uIHhhZW5pYXggYm9hcmQuCgoqIEVuYWJsZSBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIE5DNjUwIGJvYXJkLgoKKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UgMDcgT2N0IDIwMDQ6CiAgVXBkYXRlZCBSRUFETUUgZm9yIERCQXUxeDAwIGJvYXJkcyB0byBtYXRjaCBjdXJyZW50IHN0YXR1cwoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMjggU2VwdCAyMDA0OgogIEZpeCBGbGFzaCBzdXBwb3J0IGZvciBWZXJzYXRpbGUuCgoqIFBhdGNoIGJ5IFJvZ2VyIEJsb2ZlbGQsIDE2IFNlcCAyMDA0OgogIEZpeCB0aW1lb3V0IGZvciBESENQIGNvbW1hbmQgcmV0cnkKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE0IFNlcCAyMDA0OgogIEZpeCBlYXJseSBzZXJpYWwgaGFuZyB3aGVuIENPTkZJR19TRVJJQUxfTVVMVEkgaXMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDE0IFNlcCAyMDA0OgogIEtpY2sgd2F0Y2hkb2cgd2hlbiBiei1kZWNvbXByZXNzaW5nCgoqIEZpeCBDRkdfSFogcHJvYmxlbXMgb24gQVQ5MVJNOTIwMCBzeXN0ZW1zCiAgW1JlbWVtYmVyOiBDRkdfSFogc2hvdWxkIGJlIDEwMDAgb24gQUxMIHN5c3RlbXMhXQoKKiBQYXRjaCBieSBHcmlkaXNoIFNobG9taSwgMzAgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCB0byByZXZBIHZlcnNpb24gb2YgUFEyNyBhbmQgUFEyN0UuCiAgLSBSZXZlcnRlZCBNUEM4MjYwQURTIGJhdWRyYXRlIGJhY2sgdG8gb3JpZ2luYWwgMTE1MjAwCgoqIFBhdGNoIGJ5IEhvamluLCAxNyBTZXAgMjAwNDoKICBGaXggdHlwbyBpbiBjZmlfZmxhc2guYwoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwOSBTZXB0ZW1iZXIgMjAwNDoKICBtdGVzdCdzIGRhdGEgbGluZSB0ZXN0ICh3aXRoIENGR19BTFRfTUVNVEVTVCBzZXQpIHJldHVybmVkIGEgd3JvbmcKICBlcnJvciBtZXNzYWdlCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDMxIEF1Z3VzdCAyMDA0OgogIEFkZGVkIG9wdGlvbiBDRkdfWExCX1BJUEVMSU5JTkcgdG8gZW5hYmxlIFhMQiBwaXBlbGluaW5nLiBUaGlzCiAgaW1wcm92ZXMgRlRQIHBlcmZvcm1hbmNlIGZvciBNUEM1MjAwIHN5c3RlbXMuIEVuYWJsZWQgZm9yIEljZUN1YmUKICBieSBkZWZhdWx0LgoKKiBQYXRjaCBieSBNaWNoYWVsIEJlbmR6aWNrLCAzMCBBdWcgMjAwNDoKICAtIEltcHJvdmUgcGxhdGZvcm0uUyBjb2RlIGZvciBvbWFwMTUxMGlubiB0aGF0IGRldGVjdHMgd2hldGhlciBjb2RlCiAgICBpcyBydW5uaW5nIGZyb20gU0RSQU0gb3Igbm90LiBQYXRjaCBhbGxvd3MgU0RSQU0gdG8gYmUgY29uZmlndXJlZAogICAgaWYgY29kZSBpcyBydW5uaW5nIG91dCBvZiBTUkFNIGF0IDB4MjAwMDAwMDAuCgoqIFBhdGNoIGJ5IEZyZWRlcmljayBLbGF0dCwgMzAgQXVnIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBXaW5kIFJpdmVyIFNCQzg1NDAvU0JDODU2MCBib2FyZHMKCiogQ29uZmlndXJlIFNYMSBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYwoKKiBQYXRjaGVzIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgogIC0gQ29uZmlndXJlIG9tYXAxNTEwaW5uIGJvYXJkIHRvIHVzZSBkcml2ZXJzL2NmaV9mbGFzaC5jCiAgLSBNYWtlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgcHJvdGVjdCBlbnZpcm9ubWVudCBhbmQgcmVkdW5kYW50CiAgICBlbnZpcm9ubWVudC4KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjMgSnVuIDIwMDQ6CiAgLSBBZGQgc2NyaXB0ICh0b29scy9pbWcyYnJlYy5zaCkgdG8gcHJvZ3JhbW0gVS1Cb290IGludG8KICAgIChTeW5jaClGbGFzaCB1c2luZyB0aGUgQm9vdHN0cmFwIE1vZGUgb2YgdGhlIE1DOTMyOE1YMS9MCgoqIFBhdGNoZXMgYnkgU2NvdHQgTWNOdXR0LCAyNCBBdWcgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy1JSSBwcm9jZXNzb3JzLgogIC0gQWRkIHN1cHBvcnQgZm9yIFBzeWVudCBQQ0ktNTQ0MSBib2FyZC4KICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUEsxQzIwIGJvYXJkLgoKKiBQYXRjaGVzIGJ5IEpvbiBMb2VsaWdlciwgMjQgQXVnIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1QQzg1NDEgYW5kIE1QQzg1NTUgQ0RTIGJvYXJkcwogIC0gQ2xlYW51cCBldGg/YWRkciBoYW5kbGluZzogbWFrZSBkZXBlbmRlbnQgb24gQ09ORklHX0VUSD9BRERSCiAgLSBDb252ZXJ0IE1QQzg1eHhBRFMgdG8gdXNlIGNvbW1vbiBDRkkgZmxhc2ggZHJpdmVyCiAgLSBGaXggUENJIHdpbmRvdyBvbiBNUEM4NXh4OyByZW1vdmUgdW5uZWVkZWQgUENJIGluaXRpYWxpemF0aW9uCiAgICBmcm9tIGJvYXJkX2Vhcmx5X2luaXRfZigpCiAgLSBQcm92aWRlIFNXIHdvcmthcm91bmQgZm9yIFBDSSBpbml0aWFsaXphdGlvbiBvbiA4NXh4IENEUwoKKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMjQgQXVnIDIwMDQ6CiAgLSBFbmFibGUgcmFtZGlzay9pbml0cmQgdGFnZ2VkIHBhcmFtIHN1cHBvcnQgZm9yIG9tYXAxNjEwaDJfY29uZmlnCiAgLSBSZW1vdmUgc3RhdGljIG5ldHdvcmsgc2V0dXAgZGVmYXVsdHMgZnJvbSBteDFhZHNfY29uZmlnCiAgLSB1cGRhdGUgQVJNIGJvYXJkcyB0byB1c2UgY29uc3RhbnRzIGZyb20gbWFjaC10eXBlcy5oCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwNCBPY3QgMjAwNDoKICAtIGZpeCBJMkMgb24gYXQ5MXJtOTIwMAogIC0gYWRkIHN1cHBvcnQgZm9yIFJpY29oIFJTNUMzNzJBIFJUQwoKKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMDEgT2N0IDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgQ01DIFBVMiBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIEkyQyBvbiBhdDkxcm05MjAwCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBTZXAgMjAwNDoKICBmaXggYmF1ZHJhdGUgaGFuZGxpbmcgb24gYXQ5MXJtOTIwMAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMiBBdWcgMjAwNDoKICAtIHJlbW92ZSBaUEMuMTkwMCBib2FyZC1zcGVjaWZpYyBmbGFzaCBkcml2ZXI7CiAgICBzd2l0Y2ggdGhlIHBvcnQgdG8gZ2VuZXJpYyBDRkkgZHJpdmVyOwogIC0gcG9ydCBjbGVhbi11cAoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICBBZGQgY2FsY19mYnNpemUoKSBmdW5jdGlvbiB1c2VkIHdpdGggVklERU9MRkJfVEFHIG9uIFRSQUIKCiogQ2xlYW4gdXAgdG9vbHMvYm1wX2xvZ28uYyB0byBub3QgYWRkIHRyYWlsaW5nIHdoaXRlIHNwYWNlCgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgogIC0gR3JvdXAgY29tbW9uIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucyBpbiBjb21tb24vbGNkLmMKICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBtYWNyb3MgYW5kICNkZWZpbmVzIGluIGluY2x1ZGUvbGNkLmgKICAtIFByb3ZpZGUgY2FsY19mYnNpemUoKSBmb3IgdmlkZW8gQVRBRwoKKiBQYXRjaCBieSBTYW0gU29uZywgMjEgQXVndXN0IDIwMDQ6CiAgLSBGaXggYSB0eXBvIGluIFJFQURNRQogIC0gQWxpZ24gIihSTykiIG91dHB1dCBmb3IgImZsaW5mbyIgYWZ0ZXIgInByb3RlY3Qgb24iCiAgLSBBZGQgUkVTRVQgc3VwcG9ydCBmb3IgUlBYbGl0ZV9EVyBib2FyZDsgYWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5CiAgICByYXRpbyAxOjEgd2hlbiBjb3JlIGZyZXF1ZW5jeSBsZXNzIHRoYW4gNTBNSHoKCiogUGF0Y2hlcyBieSBIaW5rbyBLb2NldmFyLCAyMSBBdWcgMjAwNDoKICAtIGZpeCBzb21lICJ1c2Ugb2YgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIgd2FybmluZ3MKICAtIERlZmluZSB0eXBlIG9mIExDRCBwYW5lbCBvbiBsdWJib2NrIGJvYXJkIGlmIENPTkZJR19MQ0QgaXMgdXNlZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxNiBBdWcgMjAwNDoKICAtIEludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIFNvQ3MgIi4vY3B1LyQoQ1BVKS8kKFNPQykiCiAgLSBjcmVhdGluZyBzdWJkaXJzIGZvciBTb0NzIC4vY3B1L2FybTkyMHQvaW14IGFuZCAuL2NwdS9hcm05MjB0L3MzYzI0eDAKICAtIG1vdmluZyBTb0Mgc3BlY2lmaWMgY29kZSBvdXQgb2YgY3B1L2FybTkyMHQvIGludG8gY3B1L2FybTkyMHQvJChTT0MpLwogIC0gbW92aW5nIGRyaXZlcnMvczNjMjR4MF9pMmMuYyBhbmQgZHJpdmVycy9zZXJpYWxfaW14LmMgb3V0IG9mIGRyaXZlcnMvCiAgICBpbnRvIGNwdS9hcm05MjB0LyQoU09DKS8KCiogUGF0Y2hlcyBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKICAtIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggOCBhbmQgMTYgYml0IG1vZGUgYWNjZXNzIHRvIFN5c3RlbSBBQ0UgQ0YKICAgIHRocm91Z2ggTVBVLgogIC0gRml4ZWQgbWlzc2luZyBTeXN0ZW0gQUNFIENGIGRldmljZSBkdXJpbmcgZ2V0IEZBVCBwYXJ0aXRpb24gaW5mbwogICAgaW4gZmF0X3JlZ2lzdGVyX2RldmljZSBmdW5jdGlvbi4KICAtIEVuYWJsZWQgU3lzdGVtIEFDRSBDRiBzdXBwb3J0IG9uIE1MMzAwLgoKKiBQYXRjaCBieSBTZWFuIENoYW5nLCAwOSBBdWcgMjAwNDoKICBTeW5jaCBkZWZpbmVzIGZvciBzYXZlZW52IGFuZCBkb19zYXZlZW52IGZ1bmN0aW9ucyBzbyB0aGV5IGdldAogIGNvbXBpbGVkIHVuZGVyIHRoZSBzYW1lIHN0YXRlbWVudC4KCiogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CiAgLSBBZGRlZCBJMkMgc3VwcG9ydCBmb3IgTUwzMDAuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciBNTDMwMCB0byByZWFkIG91dCBpdHMgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24KICAgIHN0b3JlZCBvbiB0aGUgRUVQUk9NLgogIC0gQWRkZWQgc3VwcG9ydCB0byB1c2UgYm9hcmQgc3BlY2lmaWMgcGFyYW1ldGVycyBhcyBwYXJ0IG9mCiAgICBVLUJvb3QncyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi4KICAtIFVwZGF0ZWQgTUxEIGZpbGVzIHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiBmb3IgbmV3IGZlYXR1cmVzCiAgICBhYm92ZS4KCiogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAwNSBBdWcgMjAwNDoKICAtIFJlbW92ZSBpbmNvcnJlY3QgYnJpZGdlIHNldHRpbmdzIGZvciBldGggZ3JvdXAgNgogIC0gQWRkIGNhbGwgdG8gc2V0dXAgYnJpZGdlIGluIHBwY180NDB4X2V0aF9pbml0aWFsaXplCiAgLSBGaXggcHBjXzQ0MHhfZXRoX2luaXQgdG8gcmVzZXQgdGhlIHBoeSBvbmx5IGlmIGl0cyB0aGUKICAgIGZpcnN0IHRpbWUgdGhyb3VnaCwgb3RoZXJ3aXNlLCBqdXN0IGNoZWNrIHRoZSBwaHkgZm9yIHRoZQogICAgYXV0b25lZ290aWF0ZWQgc3BlZWQvZHVwbGV4LiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiBuZXRjb25zb2xlCiAgLSBvbmx5IHByaW50IHRoZSBzcGVlZC9kdXBsZXggdGhlIGZpcnN0IHRpbWUgdGhlIHBoeSBpcyByZXNldC4KCiogUGF0Y2ggYnkgU2hsb21vIEt1dCwgMjkgTWFyIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE1LUyBJbnN0cnVtZW50cyAiUXVhbnR1bSIgYm9hcmQKCiogRml4IGJ1aWxkIHByb2JsZW0gd2l0aCBDb2dlbnQgYm9hcmRzOwogIGF2b2lkIHVzaW5nIDxhc20vYnl0ZW9yZGVyLmg+IHdoZW4gdXNpbmcgdGhlIGhvc3QgY29tcGlsZXIKCiogUGF0Y2ggYnkgR2FuYXBhdGhpIEMsIDA0IEF1ZyAyMDA0OgogIEZpeCBORlMgdGltZW91dCBpc3N1ZQoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxOSBKdWwgMjAwNDoKICAtIEZpeCBob3N0IHRvb2xzIGJ1aWxkaW5nIGluIEN5Z3dpbiBlbnZpcm9ubWVudAogIC0gRml4IGhlYWRlciBmaWxlcyBzZWFyY2ggb3JkZXIgZm9yIGhvc3QgdG9vbHMKCiogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMTkgSnVsIDIwMDQ6CiAgRml4IGtnZGIuUyBzdXBwb3J0IGZvciA3NHh4Xzc1eCBjcHUKCiogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNSBKdWwgMjAwNDoKICBGaXggTVBDODV4eCBJMkMgZHJpdmVyCgoqIEZpeCBwcm9ibGVtcyB3aXRoIENEUk9NIGRyaXZlIGFzIHNsYXZlIGRldmljZSBvbiBMaXRlNTIwMCBJREUgYnVzLgoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxNSBKdWx5IDIwMDQKICBTZXQgdGhlIFBDSSBjbGFzcyBjb2RlIGZvciBKU0UgYm9hcmQgYXMgcGFydCBvZiBQQ0kgaW50ZXJmYWNlIHNldHVwCgoqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDE1IEp1bCAyMDA0OgogIEZpeCBwcm9ibGVtIHdpdGggd3JpdGVzIHdpdGggb2RkIHNpemVzIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgd2hlbgogIENGR19GTEFTSF9VU0VfQlVGRkVSX1dSSVRFIGlzIHNldAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwNDoKICBBbGxvdyBjbG9jayBzZXR0aW5nIG9uIE1QQzg2Ni9NUEM4ODUgc2VyaWVzIGNoaXBzIGFjY29yZGluZyB0bwogIGVudmlyb25tZW50IHZhcmlhYmxlIGBjcHVjbGsnCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIEFwciAyMDA0OgogIFJlbW92ZSB1bm5lY2Vzc2FyeSByZWRlZmluZSBvZiBDUE1fREFUQU9OTFlfU0laRSBmb3IgTVBDODI2eAoKKiBQYXRjaCBieSBWaW5jZW50IER1YmV5LCAyNCBTZXAgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgeGFlbmlheCBib2FyZAoKKiBBZGQgY29tbWVudCBhYm91dCBub24tR1BMIGNoYXJhY3RlciBvZiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0bwogIENPUFlJTkcgZmlsZQoKKiBGaXggRkVDIGV0aGVybmV0IHByb2JsZW0gb24gTlNDVSBib2FyZC4KCiogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDA5IFNlcCAyMDA0OgogIGFsbG93IHRvIHVzZSBVU0FSVDEgYXMgY29uc29sZSBwb3J0IG9uIGF0OTFybTkyMDBkayBib2FyZHMKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBTZXAgMjAwNDoKICBVcGRhdGUgQVI0MDUgYm9hcmQuCgoqIEZpeCBTeXNDbGsgaGFuZGxpbmcgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDA4IFNlcCAyMDA0OgogIFVwZGF0ZSBldGFncyBidWlsZCB0YXJnZXQKCiogSW1wcm92ZSBOZXRDb25zb2xlIHN1cHBvcnQ6IGFkZCBzdXBwb3J0IGZvciBicm9hZGNhc3QgZGVzdGluYXRpb24KICBhZGRyZXNzIGFuZCBidWZmZXJlZCBpbnB1dC4KCiogQ2xlYW51cCBjb21waWxlciB3YXJuaW5ncyBmb3IgR0NDIDMuMy54IGFuZCBsYXRlcgoKKiBGaXggcHJvYmxlbSBpbiBjbWRfamZmczIuYyBpbnRyb2R1Y2VkIGJ5IENGR19KRkZTX1NJTkdMRV9QQVJUIHBhdGNoCgoqIEFkZCBzdXBwb3J0IGZvciBJRFMgIk5DNjUwIiBib2FyZAoKKiBBZGQgYXV0b21hdGljIHVwZGF0ZSBzdXBwb3J0IGZvciBMV01PTiBib2FyZAoKKiBDbGVhciBCbG9jayBMb2NrLUJpdHMgd2hlbiBlcmFzaW5nIGZsYXNoIG9uIExXTU9OIGJvYXJkLgoKKiBGaXggcmV0dXJuIGNvZGUgb2YgImZhdGxvYWQiIGNvbW1hbmQKCiogRW5hYmxlIE1TRE9TL1ZGQVQgZmlsZXN5c3RlbSBzdXBwb3J0IGZvciBMV01PTiBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwMyBBdWcgMjAwNDoKICBjaGFuZ2UgdGltaW5nIGZvciBTTTUwMSBncmFwaGljcyBjb250cm9sbGVyIG9uIFRRTTUyMDAgbW9kdWxlCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDEzIEp1bHkgMjAwNDoKICAtIFRvdGFsNTIwMCBMQ0Qgbm93IHJ1biBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuIEVuZGlhbmVzcyBjb252ZXJzaW9uCiAgICBpcyBkb25lIGluIGhhcmR3YXJlLgogIC0gUmVtb3ZlZCBsYXN0IHJlZmVyZW5jZSB0byAiY29uc29sZSIgZW52aXJvbm1lbnQgdmFyaWFibGUuCgoqIFBhdGNoZXMgYnkgTGFycyBNdW5jaCwgMTIgSnVsIDIwMDQ6CiAgLSBtb3ZlIGF0NDUuYyB0byBib2FyZC9hdDkxcm05MjAwZGsvIHNpbmNlIHRoaXMgaXMgYXQ5MXJtOTIwMGRrCiAgICBib2FyZCBzcGVjaWZpYwogIC0gc3BsaXQgb3V0IHRoZSBMWFQ5NzFBIFBIWSBmcm9tIG5zXzk3NTBfZXRoLmgKICAtIHNwbGl0IHRoZSBkbTkxNjEgcGh5IHBhcnQgb3V0IG9mIGF0OTFybTkyMDBfZXRoZXIuYwoKKiBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxMiBKdWwgMjAwNDoKICBSZXBsYWNlZCBoYXJkY29kZWQgUEwwMTEgY2xvY2sgZnJlcXVlbmN5IHdpdGggY29uZmlnIHZhcmlhYmxlLgogIEZpeGVkIHdyb25nIENPTkZJR19DTURfREZMIGRvYy4KCiogUGF0Y2ggYnkgVGhvbWFzIFZpZWh3ZWdlciwgMDkgSnVuIDIwMDQ6CiAgbWFrZSBpdCBwb3NzaWJsZSB0byByZW1vdmUgY2hwYXJ0IHdoZW4gdGhlcmUgaXMgb25seSBvbmUgcGFydGl0aW9uCgoqIEFkZCBzdXBwb3J0IGZvciBjb25zb2xlIG92ZXIgVURQIChjb21wYXRpYmxlIHRvIEluZ28gTW9sbmFyJ3MKICBuZXRjb25zb2xlIHBhdGNoIHVuZGVyIExpbnV4KQoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE2IEp1bCAyMDA0OgogIC0gc3VwcG9ydCBsYXJnZXIgRERSIG1lbW9yaWVzIHVwIHRvIDJHIG9uIHRoZSBQQzg1NDAvODU2MEFEUyBhbmQKICAgIFNUWEdQMyBib2FyZHMKICAtIE1hZGUgTVBDODU0MC84NTYwQURTIGJlIDMzTWh6IFBDSSBieSBkZWZhdWx0LgogIC0gUmVtb3ZlZCBtb2xkeSBDT05GSUdfUkFNX0FTX0ZMQVNILCBDRkdfRkxBU0hfUE9SVF9XSURUSF8xNgogICAgYW5kIENPTkZJR19MMl9JTklUX1JBTSBvcHRpb25zLgogIC0gUmVmYWN0b3IgTG9jYWwgQnVzIGluaXRpYWxpemF0aW9uIG91dCBvZiBTRFJBTSBzZXR1cC4KICAtIFJlLWltcGxlbWVudCBuZXcgdmVyc2lvbiBvZiBMQkMxMS9ERFIxMSBlcnJhdGEgd29ya2Fyb3VuZHMuCiAgLSBNb3ZlZCBib2FyZCBzcGVjaWZpYyBQQ0kgaW5pdCBwYXJ0cyBvdXQgb2YgQ1BVIGRpcmVjdG9yeS4KICAtIEFkZGVkIFRMQiBlbnRyeSBmb3IgUENJLTEgSU8gTWVtb3J5CiAgLSBVcGRhdGVkIFJFQURNRS5tcGM4NXh4YWRzCgoqIFBhdGNoIGJ5IFNhc2NoYSBIYXVlciwgMjggSnVuOgogIC0gYWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgTW90b3JvbGEgaS5NWCBhcmNoaXRlY3R1cmUKICAtIGFkZCBzdXBwb3J0IGZvciBteDFhZHMsIG14MWZzMiBhbmQgc2NiOTMyOCBib2FyZHMKCiogUGF0Y2hlcyBieSBNYXJjIExlZW1hbiwgMjMgSnVsIDIwMDQ6CiAgLSBBZGQgZGVmaW5lIGZvciB0aGUgUENJL01lbW9yeSBCdWZmZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgogIC0gY29ycmVjdGVkIGNvbW1lbnRzIGluIGNwdS9tcGM4MjR4L2NwdV9pbml0LmMKCiogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNlcmlhbCBpbnRlcmZhY2VzCiAgKGZvciBleGFtcGxlIHRvIGFsbG93IG1vZGVtIGRpYWwtaW4gLyBkaWFsLW91dCkKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBKdWwgMjAwNDoKICBjcHUvcHBjNHh4L3NkcmFtLmMgcmV3cml0dGVuIG5vdyB1c2luZyBnZXRfcmFtX3NpemUoKQoKKiBGaXggTlNDVSBjb25maWc7IGFkZCBldGhlcm5ldCB3YWtldXAgY29kZS4KCiogQWRkIGxpbmsgZm9yIHByZWxvYWRlciBmb3IgTW90b3JvbGEgQ29sZGZpcmUgdG8gUkVBRE1FLm02OGsKCiogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTIgSnVsIDIwMDQ6CiAgZml4IG91dHB1dCBmb3JtYXR0aW5nIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTWFyayBKb25hcywgMDIgSnVsIDIwMDQ6CiAgRml4IGxvd2Jvb3QgKGFnYWluKSBvbiBNUEM1eHh4CgoqIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDA3IEp1bCAyMDA0OgogIHJlbG9jYXRlIGV4Y2VwdGlvbiB2ZWN0b3JzIG9uIGFybTcyMHQgaWYgbmVlZGVkCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDYgSnVsIDIwMDQ6CiAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0CiAgLSBTZXQgY29ycmVjdCBPTUFQMTYxMCBiaV9hcmNoX251bWJlciBmb3IgYnVpbGQgdGFyZ2V0CgoqIFBhdGNoIGJ5IEN1cnQgQnJ1bmUsIDA2IEp1bCAyMDA0OgogIGV2YjQ1MTA6IGFkZCBzdXBwb3J0IGZvciB0aW1lciBpbnRlcnJ1cHQ7IGNsZWFudXAKCiogUGF0Y2ggYnkgRGFuIFBvaXJvdCwgMDYgSnVsIDIwMDQ6CiAgRml4IHNiYzgyNjAgZW52aXJvbm1lbnQgdmFyaWFibGVzCgoqIENsZWFudXAgcmVkdW5kYW5kICJjb25zb2xlIiBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAwNSBKdWwgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIFRvdGFsNTEwMCdzIGFuZCBUb3RhbDUyMDAncyBMQ0Qgc2NyZWVuCgoqIFBhdGNoZXMgYnkgRGFuIEVpc2VuaHV0LCAwMSBKdWwgMjAwNDoKICAtIFJFQURNRSBmaXhlcy4KICAtIE1vdmUgZG9jMjAwMC5oIGluY2x1ZGUgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5nIG9uIHNvbWUgYm9hcmRzCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAxIEp1bCAyMDA0OgogIEFkZGVkIHN1cHBvcnQgZm9yIFRvdGFsNTEwMCBhbmQgVG90YWw1MjAwIChSZXYuMSBhbmQgUmV2LjIpCiAgTUdUNTEwMCBhbmQgTVBDNTIwMCBiYXNlZCBGcmVlc2NhbGUgcGxhdGZvcm1zLgoKKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDEgSnVsIDIwMDQ6CiAgQWRkIGluaXRpYWxpemF0aW9uIGZvciBJbnRlZ3JhdG9yIGFuZCB2ZXJzYXRpbGUgYm9hcmQgZmlsZXMuCgoqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDAxIEp1biAyMDA0OgogIEZpeCBWRkQgRkIgYWxsb2NhdGlvbiwgYWRkIExDRCBGQiBhbGxvY2F0aW9uIG9uIEFSTQoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAzMCBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVFFNNTIwMCBib2FyZAoKKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOSBKdW4gMjAwNDoKICBBZGQgbG9vcHcgY29tbWFuZDogaW5maW5pdGUgd3JpdGUgbG9vcCBvbiBhZGRyZXNzIHJhbmdlCgoqIFBhdGNoZXMgYnkgWWFzdXNoaSBTaG9qaSwgMjkgSnVuIDIwMDQ6CiAgLSBhZGQgZW1wdHkgaW5jbHVkZS9hc20tbWljcm9ibGF6ZS9wcm9jZXNzb3IuaAogIC0gYWRkIHRvIENSRURJVFMgYW5kIE1BSU5UQUlORVJTCiAgLSBhZGQgZ2QgaW5pdGlhbGl6YXRpb24KICAtIGFkZCBNaWNyb0JsYXplIGFuZCBTVVpBS1UgYm9hcmQgdG8gTUFLRUFMTCBzY3JpcHQKICAtIGFkZCByZXNldCBzdXBwb3J0IGZvciBTVVpBS1UKICAtIGFkZCBmbHVzaF9jYWNoZSgpIGZvciBNaWNyb0JsYXplCiAgLSBhZGQgQ0ZHX0ZMQVNIX1NJWkUgdG8gaW5jbHVkZS9jb25maWdzL3N1emFrdS5oIHNpbmNlIHdlIGhhdmUgZml4ZWQKICAgIHNpemUgZmxhc2ggbWVtb3J5IG9uIFNVWkFLVQoKKiBQYXRjaCBieSBQcmFrYXNoIEt1bWFyLCAyNyBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFBYQTI1MCBiYXNlZCBJbnRyaW5zeWMgQ2VyZiBib2FyZC4KCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMjcgSnVuIDIwMDQ6CiAgZml4IGNvbW1lbnQgaW4gaW5jbHVkZS9jb21tb24uaAoKKiBSZW5hbWUgU0JDODU2MCBpbnRvIHNiYzg1NjAgZm9yIGNvbnNpc3RlbmN5CgoqIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDI0IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBXaW5kIFJpdmVyJ3Mgc2JjODI0MCBib2FyZAoKKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI2IEp1biAyMDA0OgogIC0gZHJpdmVycy9zZXJpYWxfeHVhcnRsaXRlLmM6IGZpeCAicmV0dXJuIDAiIGluIHZvaWQgZnVuY3Rpb24KICAtIGFkZCBtaWNyb2JsYXplIHN1cHBvcnQgdG8gbWtpbWFnZSB0b29sCgoqIFBhdGNoIGJ5IEZyZWQgS2xhdHQsIDI1IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBXaW5kUml2ZXIncyBzYmM4NTYwIGJvYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDI0IEp1biAyMDA0CiAgU21hbGwgQnVncyBmaXhlcyBmb3IgImF0OTFybTkyMDBkayIgYm9hcmQ6CiAgLSBUaW1pbmcgbW9kaWZpY2F0aW9ucyBmb3IgU1BJIERhdGFGbGFzaCBhY2Nlc3MKICAtIEZpeCBOQU5EIGZsYXNoIGRldGVjdGlvbiBidWcKCiogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMjQgSnVuIDIwMDQ6CiAgQWRkIFN1cHBvcnQgZm9yIEZsYXNoIEFUNDlCVjY0MTYgZm9yIEFUOTFSTTkyMDBESyBib2FyZAoKKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE3IEp1bmUgMjAwNDoKICBDb21wbGV0aW9uIG9mIHRoZSA4NTQwQURTLzg1NjBBRFMgdXBkYXRlczoKICBGaXggc29tZSBQQ0kgYW5kIFJhcGlkIEkvTyBtZW1vcnkgbWFwcywKICBJbml0aWFsaXplIGJvdGggVFNFQyAxIGFuZCAyLAogIEluaXRpYWxpemUgU0RSQU0KICBVcGRhdGUgTUFJTlRBSU5FUiBmb3IgODV4eCBib2FyZHMgYW5kIFJFQURNRS5tcGM4NXh4YWRzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1biAyMDA0OgogIFJlbW92ZSBvYnNvbGV0ZSBBZGRlcklJIHBvcnQgd2hpY2ggd2FzIHN1cGVyc2VkZWQgYnkgdW5pZmllZAogIEFkZGVySUkvQWRkZXI4N3ggcG9ydAoKKiBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMTYgSnVuIDIwMDQ6CiAgRml4IGdjYy0zLjMuMyB3YXJuaW5ncyBmb3Igc21jOTExMTEuYwoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAyIEp1bCAyMDA0OgogIC0gRml4IGJ1ZyBpbiA0MDUgZXRoZXJuZXQgZHJpdmVyOyBhbGxvY2F0ZWQgZGF0YSBub3QgY2xlYXJlZCEKICAtIEZpeCBwcm9ibGVtIGluIDQwNSBpMmMgZHJpdmVyOyBkb24ndCB0cnkgdG8gcHJpbnQgd2l0aG91dCBjb25zb2xlIQoKKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDExIEp1biAyMDA0OgogIFJlbW92ZSBkZWJ1ZyBjb2RlIGZyb20gJ2JvYXJkL2xwZDdhNDB4L2ZsYXNoLmMnCgoqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDExIEp1biAyMDA0OgogIFVwZGF0ZSBmb3IgUFBDaGFtZWxlb24gYm9hcmQ6CiAgLSBzdXBwb3J0IGZvciBTeXNDbGsgQCAyNU1IegogIC0gc3VwcG9ydCBmb3IgU2lsaWNvbiBNb3Rpb24gU003MTIgVkdBIGNvbnRyb2xsZXIKICAtIHNvbWUgY2xlYW4gdXBzCgoqIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSnVuIDIwMDQ6CiAgLSBmaXggcHJvYmxlbXMgd2l0aCBleGFtcGxlcy9zdHVicy5jIGZvciBHQ0MgPj0gMy40CiAgLSBmaXggcHJvYmxlbXMgd2l0aCBnZCBpbml0aWFsaXphdGlvbgoKKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAxNyBNYXkgMjAwNDoKICAtIEFkZCBzdXBwb3J0IGZvciBTYW1zdW5nIFMzQzQ1MTBCIENQVSAoQVJNN3RkbWkgYmFzZWQgU29DKQogIC0gQWRkIHN1cHBvcnQgZm9yIEVTUEQtSW5jLiBFVkI0NTEwIEJvYXJkCgoqIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAxMSBNYXkgMjAwNDoKICBGaXggZm9yIE1QQzgyNDUgLSByZWFkaW5nIFBQQyBNZW1vcnkgZnJvbSBhbm90aGVyIGRldmljZSB3aXRoIHRoZQogIFBQQyBhcyBQQ0kgdGFyZ2V0IGRldmljZSBjb3JydXB0cyBkYXRhIGR1ZSB0byBpbnRlcmVuYWwgaGFyZHdhcmUKICBidWZmZXJpbmcuCgoqIEZpeCAiY2xzIiBjb21tYW5kIHdoZW4gdXNlZCB3aXRoIHNwbGFzaCBzY3JlZW4KCiogSW5jcmVhc2UgTkZTIGRvd25sb2FkIHRpbWVvdXQgKG5vdyAxIG1pbiAtIDEwIHNlYyBpcyB0byBzaG9ydCBmb3IgYQogIHNsb3cgZG93bmxvYWQgb2YgYSBiaWcgaW1hZ2UpCgoqIEFkZCAiY2xzIiBmdW5jdGlvbiB0byBNUEM4MjMgTENEIGRyaXZlciBzbyB3ZSBjYW4gcmVpbml0aWFsaXplIHRoZQogIGRpc3BsYXkgZXZlbiBhZnRlciBzaG93aW5nIGEgYml0bWFwCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDQgSnVuIDIwMDQ6CiAgLSBERFIgUmFtIHN1cHBvcnQgZm9yIFBNNTIwIChNUEM1MjAwKQogIC0gc3VwcG9ydCBmb3IgZGlmZmVyZW50IGZsYXNoIHR5cGVzIChQTTUyMCkKICAtIFVTQiAvIElERSAvIENGLUNhcmQgLyBEaXNrT25DaGlwIHN1cHBvcnQgZm9yIFBNNTIwCiAgLSA4IGJpdCBib290IHJvbSBzdXBwb3J0IGZvciBQTTUyMC9DRTUyMAogIC0gQWRkIGF1dG8gU0RSQU0gbW9kdWxlIGRldGVjdGlvbiBmb3IgTWljcm9TeXMgQ1BDNDUgYm9hcmQgKE1QQzgyNDUpCiAgLSBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBDUEM0NQogIC0gc3VwcG9ydCBvZiBuZXcgZmxhc2ggdHlwZSAoMjhGMTYwQzNUKSBmb3IgQ1BDNDUKCiogRml4IGZsYXNoIHBhcmFtZXRlcnMgcGFzc2VkIHRvIExpbnV4IGZvciBQUENoYW1lbGVvbiBib2FyZAoKKiBSZW1vdmUgZXRoX2luaXQoKSBmcm9tIGxpYl9hcm0vYm9hcmQuYzsgaXQncyBkb25lIGluIG5ldC5uZXQuYy4KCiogUGF0Y2ggYnkgUGF1bCBSdWhsYW5kLCAxMCBKdW4gMjAwNDoKICBmaXggc3VwcG9ydCBmb3IgTG9naWMgU0RLLUxIN0E0MDQgYm9hcmQgYW5kIGNsZWFuIHVwIHRoZQogIExIN0E0MDQgcmVnaXN0ZXIgbWFjcm9zLgoKKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDEwIEp1biAyMDA0OgogIE1vZGlmeSBjb2RlIHRvIHNlbGVjdCBjb3JyZWN0IHNlcmlhbCBjbG9jayBvbiBTYW5kcG9pbnQ4MjQ1CgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTAgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEludGVsIEszIHN0cmF0YSBmbGFzaC4KCiogUGF0Y2ggYnkgVGhvbWFzIEJyYW5kLCAxMCBKdW4gMjAwNDoKICBGaXggImxvYWRzIiBjb21tYW5kIG9uIERLMVMxMCBib2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgOE1CIGZsYXNoIFNJTU0gYW5kIEpGRlMyIGZpbGUgc3lzdGVtIG9uCiAgTW90b3JvbGEgRkFEUyBib2FyZCBhbmQgaXRzIGRlcml2YXRpdmVzIChNUEM4NnhBRFMsIE1QQzg4NUFEUykuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBBbmFsb2d1ZSZNaWNybyBBZGRlcjg3eCBhbmQgdGhlIG9sZGVyIEFkZGVySUkgYm9hcmQuCgoqIFBhdGNoIGJ5IE1pbmctTGVuIFd1LCAwOSBKdW4gMjAwNDoKICBBZGQgc3VwcHBvcnQgZm9yIE1DOTMyOCAoRGFyZ29uYmFsbCkgQ1BVIGFuZCBNb3Rvcm9sYSBNWDFBRFMgYm9hcmQKCiogUGF0Y2ggYnkgU2FtIFNvbmcsIDA5IEp1biAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIFJQWGxpdGVfRFcgYm9hcmQKICAtIFVwZGF0ZSBGTEFTSCBkcml2ZXIgZm9yIDQqQU0yOURMMzIzREI5MFZJCiAgLSBBZGQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gb2YgQ0ZHX0VOVl9JU19JTl9OVlJBTSBvbiBSUFhsaXRlX0RXIGJvYXJkCgoqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA4IEp1bmUgMjAwNDoKICAtIE1ha2UgTVBDNTIwMCBib2FyZHMgZXZhbHVhdGUgdGhlIFNWUiB0byBwcmludCBwcm9jZXNzb3IgbmFtZSBhbmQKICAgIHZlcnNpb24gaW4gY2hlY2tjcHUoKSAoY3B1L21wYzV4eHgvY3B1LmMpLgoKKiBQYXRjaCBieSBLYWktVXdlIEJsb2VtLCAwNiBNYXkgMjAwNDoKICBGaXggZW5kaWFuZXNzIHByb2JsZW0gaW4gY3JhbWZzIGNvZGUKCiogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMDQgSnVuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE1BWDY5MDAgUlRDCgoqIFBhdGNoZXMgYnkgTGFkaXNsYXYgTWljaGwsIDAzIEp1biAyMDA0OgogIC0gZml4IGNmaV9mbGFzaC5jIG9uIExFIHN5c3RlbXMKICAtIGxldCAnbWFrZSBtcnByb3BlcicgZGVsZXRlIHUtYm9vdC5pbWcgYXMgd2VsbAogIC0gdHVybiBwcmludGYgaW50byBkZWJ1ZyBpbiBjZmlfZmxhc2guYwoKKiBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMjggTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEV4eXMgWFNFbmdpbmUgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgTWF5IDIwMDQ6CiAgRml4IGEgTVBDNXh4eCBJMkMgdGltaW5nIGlzc3VlIGluIGkyY19wcm9iZSgpLgoKKiBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyNyBNYXkgMjAwNDoKICBGaXggYm9hcmRfaW5pdF9mKCkgZm9yIGRiYXUxeDAwIGJvYXJkLgoKKiBQYXRjaCBieSBJbXJlIERlYWssIDI2IE1heSAyMDA0OgogIE9uIE9NQVAxNjEwIHBsYXRmb3JtcyBjaGVjayBpZiBib290aW5nIGZyb20gUkFNKENTMCkgb3IgZmxhc2goQ1MzKS4KICBTZXQgZmxhc2ggYmFzZSBhY2NvcmRpbmdseSwgYW5kIGRlY2lkZSB3aGV0aGVyIHRvIGRvIG9yIHNraXAgYm9hcmQKICBzcGVjaWZpYyBzZXR1cCBzdGVwcy4KCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDI2IE1heSAyMDA0OgogIEFkZCBtaXNzaW5nIGRlZmluZSBpbiBpbmNsdWRlL2FzbS1tNjhrL2dsb2JhbF9kYXRhLmgKCiogUGF0Y2ggYnkgSm9zZWYgQmF1bWdhcnRuZXIsIDI1IE1heSAyMDA0OgogIEFkZCBtaXNzaW5nIGZ1bmN0aW9ucyBnZXRfdGlja3MoKSBhbmQgZ2V0X3RiY2xrKCkgaW4gbGliX202OGsvdGltZS5jCgoqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMjQgTWF5IDIwMDQ6CiAgZml4IFNEUkFNIGluaXRpYWxpemF0aW9uIGZvciBMUEQ3QTQwMCBib2FyZC4KCiogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMjAgTWF5IDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IGluIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjAgTWF5IDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIEludGVycGhhc2UgaVNQQU4gYm9hcmRzLgoKKiBQYXRjaGVzIGJ5IFBhdWwgUnVobGFuZCwgMTcgTWF5IDIwMDQ6CiAgLSBBZGQgSS9PIGZ1bmN0aW9ucyB0byB0aGUgc21jOTExMTEgZXRoZXJuZXQgZHJpdmVyIHRvIHN1cHBvcnQgdGhlCiAgICBMb2dpYyBMUEQ3QTQweCBib2FyZHMuCiAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIExvZ2ljIFpvb20gTEg3QTQweCBiYXNlZCBTREsgYm9hcmQocyksCiAgICBzcGVjaWZpY2FsbHkgdGhlIExQRDdBNDAwLgoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTUgTWF5IDIwMDQ6CiAgLSBjYWxsIE1BQyBhZGRyZXNzIHJlYWRpbmcgY29kZSBhbHNvIGZvciBTTVNDOTFDMTExOwogIC0gbWFrZSBTTVNDOTFDMTExIHRpbWVvdXQgY29uZmlndXJhYmxlLCByZW1vdmUgZHVwbGljYXRlIGNvZGUKICAtIGZpeCBnZXRfdGltZXIoKSBmb3IgUFhBCiAgLSB1cGRhdGUgZG9jL1JFQURNRS5KRkZTMgogIC0gdXNlICJib290ZmlsZSIgZW52IHZhcmlhYmxlIGFsc28gZm9yIGpmZnMyCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE0IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgQ1NCNDcyIGJvYXJkICg4TUIgRmxhc2ggUmV2KQoKKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxNCBNYXkgMjAwNDoKICAtIGZsYXNoLmg6IG1vcmUgZmxhc2ggdHlwZXMgYWRkZWQKICAtIGltbWFwXzgyNjAuaDogc29tZSBiaXRzIGFkZGVkICh1c2VmdWwgZm9yIFJNSUkpCiAgLSBjbWRfY29uaW5mby5jOiB0eXBvIGNvcnJlY3RlZCwgcHJpbnRmIC0+IHB1dHMKICAtIHJlZHVjZWQgc2l6ZSBieSByZXBsYWNpbmcgc3BhY2VzIHdpdGggdGFiCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTMgTWF5IDIwMDQ6CiAgQWRkICdpbWdleHRyYWN0JyBjb21tYW5kOiBleHRyYWN0IG9uZSBwYXJ0IG9mIGEgbXVsdGkgZmlsZSBpbWFnZS4KCiogUGF0Y2hlcyBieSBKb24gTG9lbGlnZXIsIDExIE1heSAyMDA0OgogIER5bmFtaWNhbGx5IGhhbmRsZSBSRVYxIGFuZCBSRVYyIE1QQzg1eHggcGFydHMuCiAgICAoSm9uIExvZWxpZ2VyLCAxMC1NYXktMjAwNCkuCiAgTmV3IGNvbnNpc3RlbnQgbWVtb3J5IG1hcCBhbmQgTG9jYWwgQWNjZXNzIFdpbmRvdyBhY3Jvc3MgTVBDODV4eCBsaW5lLgogIE5ldyBDQ1NSQkFSIGF0IDB4RTAwMF8wMDAwIG5vdy4KICBBZGQgUkFQSUQgSS9PIG1lbW9yeSBtYXAuCiAgTmV3IG1lbW9yeSBtYXAgaW4gUkVBRE1FLk1QQzg1eHhhZHMKICAgIChLdW1hciBHYWxhLCAxMC1NYXktMjAwNCkKICBCZXR0ZXIgYm9hcmQgYW5kIENQVSBpZGVudGlmaWNhdGlvbiBvbiBNUEM4NXh4IGJvYXJkcyBhdCBib290LgogICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpCiAgU0RSQU0gY2xvY2sgY29udHJvbCBmaXhlcyBvbiBNUEM4NTQwQURTICYgTVBDODU2MCBib2FyZHMuCiAgU29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE1QQzg1NDBBRFMgJiBNUEM4NTYwQURTIGNsZWFuZWQgdXAuCiAgICAoSmltIFJvYmVydHNvbiwgMTAtTWF5LTIwMDQpCiAgUmV3cml0ZSBvZiB0aGUgTVBDODV4eCBUaHJlZSBTcGVlZCBFdGhlcm5ldCBDb250cm9sbGVyIChUU0VDKSBkcml2ZXIuCiAgU3VwcG9ydHMgbXVsdGlwbGUgUEhZcy4KICAgIChBbmR5IEZsZW1pbmcsIDEwLU1heS0yMDA0KQogIFNvbWUgUkVBRE1FLk1QQzg1eHhhZHMgdXBkYXRlcy4KICAgIChLdW1hciBHYWxhLCAxMC1NYXktMjAwNCkKICBDb3B5cmlnaHQgdXBkYXRlcyBmb3IgIkZyZWVzY2FsZSIKICAgIChBbmR5IEZsZW1pbmcsIDEwLU1heS0yMDA0KQoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxMSBNYXkgMjAwNDoKICBBZGQgZmxhc2ggc3VwcG9ydCBmb3IgU1QgTTI5VzA0MEIKICBSZWR1Y2UgSlNFIHNwZWNpZmljIGZsYXNoLmMgdG8gcmVtb3ZlIGRlYWQgY29kZS4KCiogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDA0IE1heSAyMDA0OgogIEZpeCBjbGVhcl9ic3MgY29kZSBmb3IgQVJNIHN5c3RlbXMgKGFsbCBleGNlcHQgczNjNDRiMCB3aGljaAogIGRvZXNuJ3QgY2xlYXIgQlNTIGF0IGFsbD8pCgoqIEZpeCAicGluZyIgcHJvYmxlbSBvbiBJTkMtSVAgYm9hcmQuIFN0cmFuZ2UgcHJvYmxlbToKICBTb21ldGltZXMgdGhlIHN0b3JlIHdvcmQgaW5zdHJ1Y3Rpb24gaGFuZ3Mgd2hpbGUgd3JpdGluZyB0byBvbmUgb2YKICB0aGUgU3dpdGNoIHJlZ2lzdGVycywgYnV0IG9ubHkgaWYgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgMTYtYnl0ZQogIGFsaWduZWQuIE1vdmluZyB0aGUgaW5zdHJ1Y3Rpb24gaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvbWVob3cKICBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5LgoKKiBQYXRjaCBieSBSaXNoaSBCaGF0dGFjaGFyeWEsIDA4IE1heSAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBUSSBPTUFQNTkxMiBPU0sgQm9hcmQKCiogUGF0Y2ggYnkgU2FtIFNvbmcgTWF5LCAwNyBNYXkgMjAwNDoKICBGaXggdHlwbyBvZiBVUE0gdGFibGUgZm9yIHJtdSBib2FyZAoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDUgTWF5IDIwMDQ6CiAgLSBJbnRyYWNvbSBib2FyZCB1cGRhdGUuCiAgLSBBZGQgQ29kZWMgUE9TVC4KCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBzZWNvbmQgRXRoZXJuZXQgaW50ZXJmYWNlIGZvciB0aGUgJ1BQQ2hhbWVsZW9uJwogIGJvYXJkLgoKKiBQYXRjaCBieSBEYXZlIFBldmVybGV5LCAzMCBBcHIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgT01BUDczMCBQZXJzZXVzMiBEZXZlbG9wbWVudCBib2FyZAoKKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgogIEZpeCBmbGFzaCBjaGlwLXNlbGVjdCAoT1IwKSBvcHRpb24gcmVnaXN0ZXIgc2V0dGluZyBvbiBGQURTIGJvYXJkcy4KCiogUGF0Y2ggYnkgQWxhbiBKLiBMdXNlLCAyOSBBcHIgMjAwNDoKICBSZXBvcnQgTUlJIG5ldHdvcmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5nIHByb3Blcmx5IHdoZW4KICBhdXRvLW5lZ290aWF0ZSBpcyBub3QgZW5hYmxlZC4KCiogUGF0Y2ggYnkgSmFycmV0dCBSZWRkLCAyOSBBcHIgMjAwNDoKICBGaXggaGFuZyBvbiByZXNldCBvbiBPY290ZWEgYm9hcmQgZHVlIHRvIGZsYXNoIGluIHdyb25nIG1vZGUuCgoqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDI5IEFwciAyMDA0OgogIGFkZCBNQUMgYWRkcmVzcyBkZXRlY3Rpb24gdG8gc21jOTExMTEgZHJpdmVyCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjggQXByIDIwMDQ6CiAgZml4IHR5cG8gaW4gbGliX2FybS9ib2FyZC5jCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDIwIEFwciAyMDA0OgogIC0gUkVBRE1FIHVwZGF0ZTogYWRkIENPTkZJR19DU0IyNzIgYW5kIGNzYjI3Ml9jb25maWcKICAtIGFkZCBkZXNjcmlwdGlvbnMgZm9yIHNvbWUgTUlJL1BIWSBvcHRpb25zLCBDT05GSUdfSTJDRkFTVCwgYW5kCiAgICBpMmNmYXN0IGVudmlyb25tZW50IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE5IEFwciAyMDA0OgogIC0gUmVuYW1lIERVRVRfQURTIHRvIE1QQzg4NUFEUwogIC0gUmVuYW1lIENPTkZJR19EVUVUIHRvIENPTkZJR19NUEM4ODVfRkFNSUxZCiAgLSBSZW5hbWUgQ09ORklHXzg2Nl9ldF9hbCB0byBDT05GSUdfTVBDODY2X0ZBTUlMWQogIC0gQ2xlYW4gdXAgRkFEUyBmYW1pbHkgcG9ydCB0byB1c2UgdGhlIG5ldyBkZWZpbmVzCgoqIEZpeCBQQ0kgc3VwcG9ydCBvbiBDUEM0NSBib2FyZAoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDI1IEFwciAyMDA0OgogIEFkZCBOaW9zIEdEQi9KVEFHIENvbnNvbGUgc3VwcG9ydDoKICAtIEFkZCBzdHVicyB0byBzdXBwb3J0IGdkYiB2aWEgSlRBRy4KICAtIEFkZCBzdXBwb3J0IGZvciBjb25zb2xlIG92ZXIgSlRBRy4KICAtIE1pbm9yIGNsZWFudXAuCgoqIEFkZCBzdXBwb3J0IGZvciBDQVRjZW50ZXIgYm9hcmQgKGJhc2VkIG9uIFBQQ2hhbWVsZW9uIE1FIG1vZHVsZSkKCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTIgTWF5IDIwMDQ6CiAgVXNpbmcgZXh0ZXJuYWwgd2F0Y2hkb2cgZm9yIEtVUDQgYm9hcmRzIGluIG1wYzh4eC9jcHUuYzsKICBsb2FkX3Nlcm51bV9ldGhhZGRyKCkgZm9yIEtVUDQgYm9hcmRzIGluIGxpYl9wcGMvYm9hcmQuYzsKICB2YXJpb3VzIGNoYW5nZXMgdG8gS1VQNCBib2FyZCBzcGVjaWZpYyBmaWxlcwoKKiBGaXggbWlub3IgbmV0d29yayBwcm9ibGVtIG9uIE1QQzUyMDA6IG5lZWQgc29tZSBkZWxheSBiZXR3ZWVuCiAgcmVzZXR0aW5nIHRoZSBQSFkgYW5kIHNlbmRpbmcgdGhlIGZpcnN0IHBhY2tldC4gSW1wbGVtZW50ZWQgaW4gYQogICJuYXR1cmFsIiB3YXkgYnkgaW52b2tpbmcgdGhlIFBIWSByZXNldCBhbmQgaW5pdGlhbGl6YXRpb24gY29kZQogIG9ubHkgb25jZSBhZnRlciBwb3dlciBvbiB2cy4gZWFjaCB0aW1lIHRoZSBpbnRlcmZhY2UgaXMgYnJvdWdodCB1cC4KCiogQWRkIHNvbWUgbGltaXRlZCBzdXBwb3J0IGZvciBsb3ctc3BlZWQgZGV2aWNlcyB0byBTTDgxMSBVU0IgY29udHJvbGxlcgogIChhdCBsZWFzdCAidXNiIHJlc2V0IiBub3cgcGFzc2VzIHN1Y2Nlc3NmdWxseSBhbmQgInVzYiBpbmZvIiBkaXNwbGF5cwogIGNvcnJlY3QgaW5mb3JtYXRpb24pCgoqIENoYW5nZSBpbml0IHNlcXVlbmNlIGZvciBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXM6IGluaXRpYWxpemUKICBvbi1jaGlwIGludGVyZmFjZXMgYmVmb3JlIGV4dGVybmFsIGNhcmRzLgoKKiBGaXggbWVtb3J5IGxlYWsgaW4gdGhlIE5BTkQtc3BlY2lmaWMgSkZGUzIgY29kZQoKKiBGaXggU0w4MTEgVVNCIGNvbnRyb2xsZXIgd2hlbiBhdHRhY2hlZCB0byBhIFVTQiBodWIKCiogRml4IGNvbmZpZyBvcHRpb24gc3BlbGxpbmcgaW4gUE01MjAgY29uZmlnIGZpbGUKCiogRml4IFBIWSBkaXNjb3ZlcnkgcHJvYmxlbSBpbiBjcHUvbXBjOHh4L2ZlYy5jIChpbnRyb2R1Y2VkIGJ5CiAgcGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQpCgoqIEZpeCBtaW5vciBOQU5EIEpGRlMyIHJlbGF0ZWQgaXNzdWUKCiogRml4ZXMgZm9yIFNMODExIFVTQiBjb250cm9sbGVyOgogIC0gaW1wbGVtZW50IHdvcmthcm91bmQgZm9yIGJyb2tlbiBtZW1vcnkgc3RpY2sKICAtIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcKCiogSW5jcmVhc2UgcGFja2V0IHNlbmQgdGltZW91dCB0byAxIG1zIGluIGNwdS9tcGM4eHgvc2NjLmMgdG8gYmV0dGVyCiAgY29wZSB3aXRoIGNvbmdlc3RlZCBuZXR3b3Jrcy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIzIEFwciAyMDA0OgogIEZpeCBWU0MvQ0lTIDgyMDEgcGh5IGRlc2NyYW1ibGVyIGludGVyb3BlcmFiaWxpdHkgdGltaW5nIGR1ZSB0bwogIGVycmF0YSBmcm9tIFZpdGVzc2UgU2VtaWNvbmR1Y3Rvci4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDIyIEFwciAyMDA0OgogIEZpeCBldGhlcm5ldCBjb25maWd1cmF0aW9uIGZvciAidmVyc2F0aWxlIiBib2FyZAoKKiBQYXRjaCBieSBLc2hpdGlqIEd1cHRhLCAyMSBBcHIgMjAwNDoKICBSZW1vdmUgYnVzeSBsb29wIGFuZCB1c2UgTVBVIHRpbWVyIGZyIHVzbGVlcCgpIG9uIE9NQVAxNTEwLzE2MTAgYm9hcmRzCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI0IEZlYiAyMDA0OgogIEZpeCBhIGJ1ZyBpbiBBVDkxUk05MjAwIGV0aGVybmV0IGRyaXZlcjoKICBUaGUgTUlJIGludGVyZmFjZSBpcyBub3cgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgUEhZLgoKKiBQYXRjaCBieSBKb2huIEtlcmwsIDE5IEFwciAyMDA0OgogIFVzZSBVLWJvb3QncyBtaWlwaHkuaCBmb3IgUEhZIHJlZ2lzdGVyIG5hbWVzLCByYXRoZXIgdGhhbgogIGludHJvZHVjaW5nIGEgbmV3IGhlYWRlciBmaWxlLgoKKiBVcGRhdGUgcGNpX2lkcy5oIGZyb20gbGludXgtMi40LjI2CgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDE5IEFwciAyMDA0OgogIEZpeCBwcm9ibGVtIGNhdXNlIGJ5IFZMQU4gZnVuY3Rpb24gb24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmUKICB3aXRob3V0IFZMQU4gZW52aXJvbm1lbnQKCiogQ2xlYW4gdXAgdGhlIFRRTTh4eF9ZWU1IeiBjb25maWd1cmF0aW9uczsgYWxsb3cgdG8gdXNlIHRoZSBzYW1lCiAgYmluYXJ5IGltYWdlIGZvciBhbGwgY2xvY2sgZnJlcXVlbmNpZXMuIEltcGxlbWVudCBydW4tdGltZQogIG9wdGltaXphdGlvbiBvZiBmbGFzaCBhY2Nlc3MgdGltaW5nIGJhc2VkIG9uIHRoZSBhY3R1YWwgYnVzCiAgZnJlcXVlbmN5LgoKKiBNb2RpZnkgS1VQNFggYm9hcmQgY29uZmlndXJhdGlvbiB0byB1c2UgU0w4MTEgZHJpdmVyIGZvciBVU0IgbWVtb3J5CiAgc3RpY2tzIChpbmNsdWRpbmcgRkFUIC8gVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQpCgoqIEFkZCBTTDgxMSBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciBmb3IgVVNCCgoqIEFkZCBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XIGRlc3JpcHRpb24gdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxOSBBcHIgMjAwNDoKICBBbGxvdyB0byB1c2Ugc2hlbGwgc3R5bGUgc3ludGF4IChpLiBlLiAke3Zhcn0gKSB3aXRoIHN0YW5kYXJkIHBhcnNlci4KICBNaW5vciBwYXRjaGVzIGZvciBJbnRyYWNvbSBib2FyZHMuCgoqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsLCAxOSBBcHIgMjAwNDoKICBjbGVhbnVwIHN1cHBvcnQgZm9yIENGL0lERSBvbiBQQ01DSUEgZm9yIFBYQTI1WAoKKiBUZW1wb3JhcmlseSBkaXNhYmxlZCBKb2huIEtlcmwncyBleHRlbmRlZCBNSUkgY29tbWFuZCBjb2RlIGJlY2F1c2UKICAibWlpdmFscy5oIiBpcyBtaXNzaW5nCgoqIFBhdGNoZXMgYnkgTWFyayBKb25hcywgMTMgQXByIDIwMDQ6CiAgLSBSZW1vdmUgQ1MwIGNoaXAgc2VsZWN0IHRpbWluZyBzZXR0aW5nIGZyb20gY3B1L21wYzV4eHgvc3RhcnQuUwogIC0gQWRkIHN5bmMgaW5zdHJ1Y3Rpb25zIHRvIEljZUN1YmUgU0RSQU0gaW5pdCBjb2RlCiAgLSBNb3ZlIFNEUkFNIGNoaXAgY29uc3RhbnRzIGludG8gc2VwZXJhdGUgaW5jbHVkZSBmaWxlcwogIC0gVW5pZnkgRERSIGFuZCBTRFIgaW5pdGlhbGl6YXRpb24gY29kZQogIC0gVW5pZnkgYWxsIEljZUN1YmUgKExpdGU1eHh4KSB0YXJnZXQgbmFtZXMKCiogUGF0Y2ggYnkgSm9obiBLZXJsLCAxNiBBcHIgMjAwNDoKICBFbmFibGUgcmFuZ2VzIGluIG1paSBjb21tYW5kLCBlLmcuIG1paSByZWFkIDAtMWYgMCBvcgogIG1paSByZWFkIDQtNyAxOC0xYS4gIEFsc28gYWRkIG1paSBkdW1wIHN1YmNvbW1hbmQgZm9yCiAgcHJldHR5LXByaW50aW5nIHN0YW5kYXJkIHJlZ3MgMC01LgoKKiBQYXRjaCBieSAgU3RlcGhlbiBXaWxsaWFtcywgMTYgQXByaWwgMjAwNDoKICBmaXggdHlwbyBpbiBKU0UuaDsgdXBkYXRlIE1BSU5UQUlORVJTCgoqIFBhdGNoIGJ5IE1hdHRoZXcgUy4gTWNDbGludG9jaywgMTQgQXByIDIwMDQ6CiAgZml4IGluaXRkcmFtIGZ1bmN0aW9uIGZvciB1dHg4MjQ1IGJvYXJkCgoqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAxNCBBcHIgMjAwNDoKICB1c2UgQVRBR19JTklUUkQyIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBBVEFHX0lOSVRSRCB0YWcKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDE4IEFwciAyMDA0OgogIHByb3ZpZGUgdGhlIElERSBSZXNldCBGdW5jdGlvbiBmb3IgRU1LIDUyMDAgYm9hcmRzCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDEyIEFwciAyMDA0OgogIGZpeCBwY2lfaG9zZV93cml0ZV9jb25maWdfe2J5dGUsd29yZH1fdmlhX2R3b3JkIHByb2JsZW1zCgoqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMTIgQXByIDIwMDQ6CiAgVXBkYXRlIG1heCBSQU0gc2l6ZSBmb3IgZGVicmlzIGJvYXJkCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA4IEFwciAyMDA0OgogIEFkZCBUTEIgZW50cnkgZm9yIHNlY29uZCBESU1NIHNsb3Qgb24gb2NvdGVhCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDA4IEFwciAyMDA0OgogIGFkZCBSVEw4MTY5IG5ldHdvcmsgZHJpdmVyCgoqIFBhdGNoIGJ5IERhbiBNYWxlaywgMDcgQXByIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgUlBDL1NUeCBHUDMsIE1vdG9yb2xhIDg1NjAgYm9hcmQKICAtIFVwZGF0ZSA4NXh4IFRTRUMgZHJpdmVyIHNvIGl0IHNlYXJjaGVzIE1JSSBmb3IgZmlyc3QgYXZhaWxhYmxlIFBIWQogICAgYW5kIHVzZXMgdGhhdCBvbmUuCiAgLSBBZGQgZnVuY3Rpb25zIHRvIHN1cHBvcnQgY29uc29sZSBNSUkgY29tbWFuZHMuCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDA3IEFwciAyMDA0OgogIE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgYmlfaWljX2Zhc3RbXQogIGZyb20gYm9hcmRfaW5pdF9mKCkgdG8gYm9hcmRfaW5pdF9yKCkKCiogUGF0Y2ggYnkgWWFzdXNoaSBTaG9qaSwgMDcgQXByIDIwMDQ6CiAgQ2xlYW51cCBtaWNyb2JsYXplIHBvcnQKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAwNyBBcHIgMjAwNDoKICBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBEZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDA2IEFwciAyMDA0OgogIC0gRml4IHNvbWUgUENJIHByb2JsZW1zIG9uIHRoZSBNUEM4MjY2QURTIGJvYXJkCiAgLSBGaXggdGhlIGxvY2F0aW9uIG9mIHNvbWUgUENJIGVudHJpZXMgaW4gdGhlIGltbWFwIHN0cnVjdHVyZQoKKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKICAtIGFkZCBzdXBwb3J0IGZvciBtaWNyb2JsYXplIHByb2Nlc3NvcnMKICAtIGFkZCBzdXBwb3J0IGZvciBBdG1hcmtUZWNobm8gInN1emFrdSIgYm9hcmQKCiogQ29uZmlndXJlIFBQQ2hhbWVsZW9uIGJvYXJkIHRvIHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gZmxhc2gKCiogQ29uZmlndXJlIFBQQ2hhbWVsZW9uIGJvYXJkIHRvIHVzZSBKRkZTMiBOQU5EIHN1cHBvcnQuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIEpGRlMyIGZpbGVzeXN0ZW0gKHJlYWQtb25seSkgb24gdG9wIG9mIE5BTkQgZmxhc2gKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE2IEFwciAyMDA0OgogIExCQTQ4IGZpeGVzCgoqIFBhdGNoZXMgYnkgUGFudGVsaXMgQW50b25pb3UsIDE2IEFwciAyMDA0OgogIC0gYWRkIHN1cHBvcnQgZm9yIGEgbmV3IHZlcnNpb24gb2YgYW4gSW50cmFjb20gYm9hcmQgYW5kIGZpeAogICAgdmFyaW91cyBvdGhlciB0aGluZ3Mgb24gb3RoZXJzLgogIC0gYWRkIHZlcmlmeSBzdXBwb3J0IHRvIHRoZSBjcmMzMiBjb21tYW5kIChkZWZpbmUKICAgIENPTkZJR19DUkMzMl9WRVJJRlkgdG8gZW5hYmxlIGl0KQogIC0gZml4IEZFQyBkcml2ZXIgZm9yIE1QQzh4eCBzeXN0ZW1zOgogICAgMS4gZml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIGZvciBib2FyZHMgdGhhdCB1c2UgZHluYW1pYwogICAgICAgYWxsb2NhdGlvbiBvZiBEUFJBTQogICAgMi4gc2h1dCBkb3duIEZFQyBhZnRlciBuZXR3b3JrIHRyYW5zZmVycwogIC0gSFVTSCBwYXJzZXIgZml4ZXM6CiAgICAxLiBBIG5ldyB0ZXN0IGNvbW1hbmQgd2FzIGFkZGVkLiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mCiAgICAgICB0aGUgb25lIGluIHRoZSBib3VybmUgc2hlbGwuCiAgICAyLiBBIG5ldyBleGl0IGNvbW1hbmQgd2FzIGFkZGVkIHdoaWNoIHRlcm1pbmF0ZXMgdGhlIGN1cnJlbnQKICAgICAgIGV4ZWN1dGluZyBzY3JpcHQuCiAgICAzLiBGaXhlZCBoYW5kaW5nIG9mICQ/IChleGl0IGNvZGUgb2YgbGFzdCBleGVjdXRlZCBjb21tYW5kKQogIC0gRml4IHNvbWUgY29tcGlsZSBwcm9ibGVtczsKICAgIGFkZCAib25jZSIgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG5ldHJldHJ5IHZhcmlhYmxlCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDIgQXByIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIEludGVsIEFzc2FiZXQgYm9hcmQKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMDEgQXByIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFBpY3R1cmUgRWxlbWVudHMgSlNFIGJvYXJkCgoqIFBhdGNoIGJ5IENocmlzdGlhbiBQZWxsLCAwMSBBcHIgMjAwNDoKICBBZGQgQ29tcGFjdEZsYXNoIHN1cHBvcnQgZm9yIFBYQSBzeXN0ZW1zLgoKKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAzMCBNYXIgMjAwNDoKICAtIGFkZCBhdXRvLWNvbXBsZXRlIHN1cHBvcnQgdG8gdGhlIFUtQm9vdCBDTEkKICAtIGFkZCBzdXBwb3J0IGZvciBORVRUQSBhbmQgTkVUUEhPTkUgYm9hcmRzOyBmaXggTkVUVklBIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVwc29uIDE1Nnggc2VyaWVzIG9mIGdyYXBoaWNhbCBkaXNwbGF5cwogICAgKFRoZXNlIGRpc3BsYXlzIGFyZSBzZXJpYWwgYW5kIG5vdCBzdWl0YWJsZSBmb3IgdXNpbmcgYSBub3JtYWwKICAgIGZyYW1lYnVmZmVyIGNvbnNvbGUgb24gdGhlbSkKICAtIGFkZCBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgaW4gb3JkZXIgdG8gUE9TVCBhbnkgRFNQcyBpbiBhIGJvYXJkCiAgLSBpbXByb3ZlIGFuZCBmaXggdmFyaW91cyB0aGluZ3MgaW4gdGhlIE1QQzh4eCBGRUMgZHJpdmVyOgogICAgMS4gVGhlIG5ldyA4N3ggYW5kIDg4eCBzZXJpZXMgb2YgcHJvY2Vzc29ycyBoYXZlIHR3byBGRUNzLAogICAgICAgYW5kIHRoZSBuZXcgZHJpdmVyIHN1cHBvcnRzIHRoZW0gYm90aC4KICAgIDIuIEFub3RoZXIgY2hhbmdlIGluIHRoZSA4N3gvODh4IHNlcmllcyBpcyBzdXBwb3J0IGZvcgogICAgICAgdGhlIFJNSUkgKFJlZHVjZWQgTUlJKSBpbnRlcmZhY2UuIEhvd2V2ZXIgbnVtZXJvdXMKICAgICAgIGNoYW5nZXMgYXJlIG5lZWRlZCB0byBtYWtlIGl0IHdvcmsgc2luY2UgdGhlIFBIWXMKICAgICAgIGFyZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgbGluZXMuIFRoYXQgbWVhbnMgdGhhdAogICAgICAgeW91IGhhdmUgdG8gYWRkcmVzcyB0aGVtIGNvcnJlY3RseSBvdmVyIHRoZSBNSUkKICAgICAgIGludGVyZmFjZS4KICAgIDMuIFdlIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIE1JSS9STUlJIGludGVyZmFjZQogICAgICAgY29uZmlndXJhdGlvbiB0byB3aGF0IHRoZSBQSFkgcmVwb3J0cy4KICAtIEZpeCBwcm9ibGVtIHdoZW4gcmVhZGluZ3RoZSBNSUkgc3RhdHVzIHJlZ2lzdGVyLiBEdWUgdG8gdGhlCiAgICBpbnRlcm5hbCBkZXNpZ24gb2YgbWFueSBQSFlzIHlvdSBoYXZlIHRvIHJlYWQgdGhlIHJlZ2lzdGVyCiAgICB0d2ljZS4gVGhlIHByb2JsZW0gaXMgbW9yZSBhcHBhcmVudCBpbiAxME1iaXQgbW9kZS4KICAtIGFkZCBuZXcgbW9kZSAiLmpmZnMycyIgZm9yIHJlYWRpbmcgZnJvbSBhIE5BTkQgZGV2aWNlOiBpdCBqdXN0CiAgICBza2lwcyBvdmVyIGJhZCBibG9ja3MuCiAgLSBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciBWTEFOcyAoODAyLjFxKSwgYW5kIENEUCAoQ2lzY28KICAgIERpc2NvdmVyeSBQcm90b2NvbCkKICAtIHNvbWUgbWlub3IgcGF0Y2hlcyAvIGNsZWFudXAKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjggTWFyIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTVBDODI3MiBmYW1pbHkgaW5jbHVkaW5nIE1QQzgyNDcvODI0OC84MjcxLzgyNzIKICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyQURTIGV2YWx1YXRpb24gYm9hcmQgKGFub3RoZXIgZmxhdm91ciBvZiBNUEM4MjYwQURTKQogIC0gQ2hhbmdlIGNvbmZpZ3VyYXRpb24gbWV0aG9kIGZvciBNUEM4MjYwQURTIGZhbWlseQoKKiBhZGQgc3RhcnR1cCBjb2RlIHRvIGNsZWFyIHRoZSBCU1Mgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogRml4IGlmIC8gZWxpZiBoYW5kbGluZyBidWcgaW4gSFVTSCBzaGVsbAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgTWFyayBKb25hczogUmVtb3ZlIGNvbmZpZy50bXAgZmlsZXMgb25seSB3aGVuCiAgdW5jb25maWd1cmluZyB0aGUgYm9hcmQKCiogQWRhcHQgUk1VIGJvYXJkIGZvciBiaWdnZXIgZmxhc2ggbWVtb3J5CgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDEzIE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBLVVA0WCBCb2FyZAoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjEgTWFyIDIwMDQKICBBZGQgUmVpc2VyZnMgc3VwcG9ydAoKKiBQYXRjaCBieSBIaW5rbyBLb2NldmFyLCAyMCBNYXIgMjAwNAogIC0gQWRkIGF1dG8tcmVsZWFzZSBmb3IgU01TQyBMQU45MWMxMTEgZHJpdmVyCiAgLSBBZGQgc2F2ZS9yZXN0b3JlIG9mIFBUUiBhbmQgUE5SIHJlZ3MgYXMgc3VnZ2VzdGVkIGluIGRhdGFzaGVldAoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAxOSBNYXJjaCAyMDA0CiAgSW5jcmVhc2Ugc3BlZWQgb2Ygc2VjdG9yIHJlYWRzIGZyb20gU3lzdGVtQUNFLAogIHNob3J0ZW4gcG9sbCB0aW1lb3V0IGFuZCByZW1vdmUgYSB1c2VsZXNzIHJlc2V0CgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE5IE1hciAyMDA0OgogIE1ha2UgR2lnRSBQSFkgMTAwME1icHMgU3BlZWQvRHVwbGV4IGRldGVjdGlvbiBjb25kaXRpb25hbAogIChDT05GSUdfUEhZX0dJR0UpCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMTggTWFyIDIwMDQ6CiAgcHJldmVudCBtYWNoaW5lIGNoZWNrcyBkdXJpbmcgYSBQQ0kgc2NhbgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKICBGaXggc3RyaW5nIGNsZWFuaW5nIGluIElERSBpZGVudGlmaWNhdGlvbgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKICAtIFVuaWZ5IHZpZGVvIG1vZGUgaGFuZGxpbmcgZm9yIENoaXBzICYgVGVjaG5vbG9naWVzIDY5MDAwIFZpZGVvCiAgICBjaGlwIGFuZCBTaWxpY29uIE1vdGlvbiBTTUkgNzEyLzcxMC84MTAgVmlkZW8gY2hpcAogIC0gQWRkIHNlbGVjdGlvbiBvZiB0aGUgdmlkZW8gb3V0cHV0IChDUlQgb3IgTENEKSB2aWEgJ3ZpZGVvb3V0JwogICAgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHRoZSBTaWxpY29uIE1vdGlvbgogIC0gUkVBRE1FIHVwZGF0ZQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOCBNYXIgMjAwNDoKICBpbmNsdWRlL2NvbW1vbi5oIHR5cG8gZml4CgoqIFBhdGNoZXMgYnkgVG9sdW5heSBPcmt1biwgMTcgTWFyIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgYmQtPmJpX2lpY19mYXN0W10gaW5pdGlhbGl6YXRpb24gdmlhIGVudmlyb25tZW50CiAgICB2YXJpYWJsZSAiaTJjZmFzdCIgKENPTkZJR19JMkNGQVNUKQogIC0gQWRkICJpMmNmYXN0IiB1LWJvb3QgZW52aXJvbm1lbnQgdmFyaWFibGUgc3VwcG9ydCBmb3IgY3NiMjcyCgoqIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDE3IE1hciAyMDA0OgogIElnbm9yZSAnXDAnIGNoYXJhY3RlcnMgaW4gY29uc29sZSBpbnB1dCBmb3IgdXNlIHdpdGggdGVsbmV0IGFuZAogIHRlbGNvIHBhZHMuCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTcgTWFyIDIwMDQ6CiAgdHlwbyBmaXggZm9yIHN0cnN3YWIgcHJvdG90eXBlICNpZmRlZgoKKiBQYXRjaGVzIGJ5IFRob21hcyBWaWVod2VnZXIsIDE2IE1hciAyMDA0OgogIC0gc2hvdyBQQ0kgY2xvY2sgZnJlcXVlbmN5IG9uIE1QQzgyNjAgc3lzdGVtcwogIC0gYWRkIEZDQ19QU01SX1JNSUkgZmxhZyBmb3IgSGlQNyBwcm9jZXNzb3JzCiAgLSBpbiBkb19qZmZzMl9mc2xvYWQoKSwgdGFrZSBsb2FkIGFkZHJlc3MgZnJvbSBsb2FkX2FkZHIgaWYgbm90IHNldAogICAgZXhwbGljaXQsIHVwZGF0ZSBsb2FkX2FkZHIgb3RoZXJ3aXNlCiAgLSByZXBsYWNlZCBwcmludGYgYnkgcHV0Yy9wdXRzIHdoZW4gbm8gZm9ybWF0dGluZyBpcyBuZWVkZWQKICAgIChzbWFsbGVyIGNvZGUgc2l6ZSwgZmFzdGVyIGV4ZWN1dGlvbikKCiogUGF0Y2ggYnkgUGhpbGxpcHBlIFJvYmluLCAxNiBNYXIgMjAwNDoKICBhdm9pZCBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlciBpbiBsaWJfYXJtL2FybWxpbnV4LmMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMTUgTWFyIDIwMDQ6CiAgRml4IENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyBkb2N1bWVudGF0aW9uCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE1IE1hciAyMDA0OgogIEluaXRpYWxpemUgYmlfb3BiZnJlcSB0byByZWFsIE9QQiBmcmVxdWVuY3kgdmlhIGdldF9PUEJfZnJlcSgpCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDE1IE1hciAyMDA0OgogIFVwZGF0ZSBDUkVESVRTICYgTUFJTlRBSU5FUlMgZmlsZXMgZm9yIFBQQzQ0MEdYICYgT2NvdGVhIHBvcnQKCiogQWRkIHN0YXJ0LXVwIGRlbGF5IHRvIG1ha2Ugc3VyZSBwb3dlciBoYXMgc3RhYmlsaXplZCBiZWZvcmUKICBhdHRlbXB0aW5nIHRvIHN3aXRjaCBvbiBVU0Igb24gU1gxIGJvYXJkLgoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDE4IE1hciAyMDA0OgogIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFhNMjUwIGJvYXJkIChQWEEyNTUpCiAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04MjggYm9hcmQgKE1QQzgyODApCiAgLSBBZGQgc3VwcG9ydCBmb3IgMzIgTUIgRmxhc2ggb24gUE04MjUvODI2CiAgLSBuZXcgU0RSQU0gcmVmcmVzaCByYXRlIGZvciBQTTgyNS9QTTgyNgogIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE01MjAgKE1QQzUyMDApCiAgLSByZXBsYWNlZCBRdWVyeSBieSBJZGVudGlmeSBjb21tYW5kIGluIENQVTg2L2ZsYXNoLmMKICAgIHRvIHN1cHBvcnQgMjhGMTYwRjNCCgoqIEZpeCB3cmFwIGFyb3VuZCBwcm9ibGVtIHdpdGggdWRlbGF5KCkgb24gQVJNOTIwVAoKKiBBZGQgc3VwcG9ydCBmb3IgTWFjcm9uaXggZmxhc2ggb24gVFJBQiBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxNSBNYXIgMjAwNDoKICBGaXggYnVmZmVyIG92ZXJmbG93IGluIElERSBpZGVudGlmaWNhdGlvbgoKKiBGaXggcG93ZXItb2ZmIG9mIExDRCBmb3Igb3V0LW9mLWJhbmQgdGVtcGVyYXR1cmVzIG9uIExXTU9OIGJvYXJkCgoqIFJlbW92ZSByZWR1bmRhbmQgI2RlZmluZSBpbiBJY2VDdWJlLmgKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjcgRmViIDIwMDQ6CiAgLSBBZGRpbmcgZ2V0X3RpY2tzKCkgYW5kIGdldF90YmNsaygpIGZvciBBVDkxUk05MjAwCiAgLSBNYW55IHdoaXRlIHNwYWNlIGZpeGVzIGluIGNwdS9hdDkxcm05MjAwL2ludGVycnVwdHMuYwoKKiBQYXRjaGVzIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgogIHNvbWUgY2xlYW51cCBpbiBBVDkxUk05MjAwIHJlbGF0ZWQgY29kZQoKKiBQYXRjaGVzIGJ5IFRyYXZpcyBTYXd5ZXIsIDEyIE1hciAyMDA0OgogIC0gRml4IEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCBmb3IgNDQwR1gKICAtIEFkZCBHaWdhYml0IEV0aGVybmV0IFN1cHBvcnQgdG8gTUlJIFBIWSB1dGlsaXRpZXMKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxMiBNYXIgMjAwNDoKICBGaXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKICAtIEJldHRlciBzdXBwb3J0IGZvciB4OC94MTYgaW1wbGVtZW50YXRpb25zCiAgLSBBZGRlZCBmYWlsdXJlIGZvciBBTUQgY2hpcHMgYXR0ZW1wdGluZyB0byB1c2UgQ0ZHX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUKICAtIEFkZGVkIGRlZmluZXMgZm9yIEFNRCBjb21tYW5kIGFuZCBhZGRyZXNzIGNvbnN0YW50cwoKKiBQYXRjaCBieSBMZW9uIEt1a292ZWMsIDEyIE1hciAyMDA0OgogIEZpeCBnZXRfZGVudGZyb21kaXIoKSB0byBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0ZWQgZGVudHJpZXMKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMSBNYXIgMjAwNDoKICBSZW1vdmUgaGFyZCBjb2RlZCBuZXR3b3JrIHNldHRpbmdzIGluIFRJIE9NQVAxNjEwIEgyCiAgZGVmYXVsdCBib2FyZCBjb25maWcKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMSBNYXIgMjAwNDoKICBhZGQgc3VwcG9ydCBmb3IgQURTIEdyYXBoaWNzQ2xpZW50KyBib2FyZC4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTEgTWFyIDIwMDQ6CiAgLSBhZGQgYml0bWFwIGNvbW1hbmQgYW5kIHNwbGFzaCBzY3JlZW4gc3VwcG9ydCBpbiBjZmIgY29uc29sZQogIC0gYWRkIFtvcHRpb25hbF0gb3JpZ2luIGluIHRoZSBiaXRtYXAgZGlzcGxheSBjb21tYW5kCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDExIE1hciAyMDA0OgogIEZpeCBvY290ZWEgYm9hcmQgZWFybHkgaW5pdCBpbnRlcnJ1cHQgc2V0dXAuCgoqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDExIE1hciAyMDA0OgogIFJlbW92ZSByZWR1bmRhbmQgY29kZTsgYWRkICBQQ0ktc3BlY2lmaWMgYml0cyB0byBpbmNsdWRlL21wYzgyNjAuaAoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDA5IE1hciAyMDA0CiAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFNTViBBRE5QL0VTQzEgKE5pb3MgU29mdGNvcmUpCgoqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgOSBNYXIgMjAwNDoKICBmaXggcmVjZW50IGJ1aWxkIGZhaWx1cmUgZm9yIFNBMTEwMCB0YXJnZXQKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDkgTWFyIDIwMDQ6CiAgU3VwcG9ydCBuYXRpdmUgaW50ZXJydXB0IG1vZGUgZm9yIHRoZSBJQk00NDBHWC4KICBQcmV2aW91c2x5IGl0IHdhcyBydW5uaW5nIGluIDQ0MEdQIGNvbXBhdGliaWxpdHkgbW9kZS4KCiogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDA5IE1hciAyMDA0OgogIEFkZGVkIEFSTSBJbnRlZ3JhdG9yIEFQLCBDUCBhbmQgVmVyc2F0aWxlIFBCOTI2RUotUyBSZWZlcmVuY2UKICBQbGF0Zm9ybSBzdXBwb3J0LgoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBNYXIgMjAwNDoKICBEb24ndCBvdmVyd3JpdGUgc2VydmVyIElQIGFkZHJlc3Mgb3IgYm9vdCBmaWxlIG5hbWUKICB3aGVuIHRoZSBib290IHNlcnZlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDUgTWFyIDIwMDQ6CiAgUmVtb3ZlZCBjb21waWxlIHRpbWUgcmVzdHJpY3Rpb24gb24gQ0ZHX0kyQ19TUEVFRCBmb3IgRFMxMzM4IFJUQwoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgogIEZpeCBlYXJseSBib2FyZCBpbml0aWFsaXphdGlvbiBmb3IgQ29nZW50IENTQjI3MiBib2FyZAoKKiBQYXRjaCBieSBFZCBPa2Vyc29uLCAzIE1hciAyMDA0OgogIGZpeCBDRkkgZmxhc2ggd3JpdGVzIGZvciBsaXR0bGUgZW5kaWFuIHN5c3RlbXMKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDAxIE1hciAyMDA0OgogIGdlbmVyYWxpemUgVVNCIGFuZCBJREUgc3VwcG9ydCBmb3IgTVBDNTIwMCB3aXRoIGFjY29yZGluZwogIGNoYW5nZXMgdG8gSWNlQ3ViZS5oIGFuZCBUT1A1MjAwLmgKICBhZGQgQW0yOUxWMjU2IDI1NiBNQml0IEZMQVNIIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmRzCiAgYWRkIGluZm8gYWJvdXQgVVNCIGFuZCBJREUgdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDQgTWFyIDIwMDQ6CiAgRml4IHByb2JsZW1zIHdpdGggR0NDIDMuMy54IHdoaWNoIGNoYW5nZWQgaGFuZGxpbmcgb2YgZ2xvYmFsCiAgdmFyaWFibGVzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyAobm93IGluIC5ic3MgaW5zdGVhZCBvZgogIC5kYXRhIGFzIGJlZm9yZSkuCgoqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMDIgTWFyIDIwMDQ6CiAgYWRkIHN0cnN3YWIoKSB0byBmaXggSURFIExCQSBjYXBhY2l0eSwgZmlybXdhcmUgYW5kIG1vZGVsIG51bWJlcnMKICBvbiBsaXR0bGUgZW5kaWFuIG1hY2hpbmVzCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDAyIE1hciAyMDA0OgogIC0gUmVtb3ZlIGdldF90aWNrcygpIGZyb20gTkZTIGNvZGUKICAtIEFkZCB2ZXJpZmljYXRpb24gb2YgUlBDIHRyYW5zYWN0aW9uIElECgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDAyIE1hciAyMDA0OgogIGNsZWFudXAgZm9yIElERSBhbmQgVVNCIGRyaXZlcnMgZm9yIE1QQzUyMDAKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMDEgTWFyIDIwMDQ6CiAgT2NvdGVhOgogIC0gQWRkIElCTSBQUEM0NDBHWCBSZWYgUGxhdGZvcm0gc3VwcG9ydCAoT2NvdGVhKQogICAgT3JpZ2luYWwgY29kZSBieSBQYXVsIFJleW5vbGRzIDxQYXVsUmV5bm9sZHNAbGhzb2x1dGlvbnMuY29tPgogICAgQWRhcHRlZCB0byBVLUJvb3QgYW5kIDQ0MEdYIHBvcnQKICA0NDBneF9lbmV0LmM6CiAgLSBBZGQgZ3JhY2lvdXMgaGFuZGxpbmcgb2YgYWxsIEV0aGVybmV0IFBpbiBTZWxlY3Rpb25zIGZvciA0NDBHWAogIC0gQWRkIFJHTUlJIHNlbGVjdGlvbiBmb3IgQ2ljYWRhIENJUzgyMDEgR2lnYWJpdCBQSFkKICBwcGM0NDAuaDoKICAtIEFkZCBuZWVkZWQgYml0IGRlZmluaXRpb25zCiAgLSBGaXggZm9ybWF0dGluZwoKKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxIE1hciAyMDA0OgogIEFkZCBQUEM0NDBHWCBwcmJkdjAgZGl2aWRlciB0byBmaXggbWVtb3J5IGNsb2NrIGNhbGN1bGF0aW9uLgoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI3IEZlYiAyMDA0CiAgLSBhdm9pZCBwcm9ibGVtcyBmb3IgdGFyZ2V0cyB3aXRob3V0IE5GUyBkb3dubG9hZCBzdXBwb3J0CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyNyBGZWIgMjAwNDoKICAtIEFkZGVkIExCQTQ4IHN1cHBvcnQgKENPTkZJR19MQkE0OCAmIENGR182NEJJVF9MQkEpCiAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBwcmludGluZyBpbiB2c3ByaW50ZiAoQ0ZHXzY0QklUX1ZTUFJJTlRGKQogIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgc3RydG91bCAoQ0ZHXzY0QklUX1NUUlRPVUwpCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI3IEZlYiAyMDA0OgogIEZpeCByYXJwYm9vdDogYWRkIGF1dG9sb2FkIGJ5IE5GUwoKKiBQYXRjaCBieSBEYW4gRWlzZW5odXQsIDI2IEZlYiAyMDA0OgogIGZpeCBmbGFzaF93cml0ZSByZXR1cm4gdmFsdWUgaW4gc2F2ZWVudgoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDExIERlYyAyMDAzCiAgZXhwYW5kIGNvbmZpZy5tayB0byBhdm9pZCB0cmlncmFwaCB3YXJuaW5ncyBvbiBOSU9TCgoqIFJlbmFtZSAiQk1TMjAwMyIgYm9hcmQgaW50byAiSE1JMTAiCgoqIFNYMSBwYXRjaGVzOiB1c2UgInNlcmlhbCMiIGZvciBVU0Igc2VyaWFsICM7IHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQKICBzdG9yYWdlOyBhdXRvLXNldCBjb25zb2xlIG9uIFVTQiBwb3J0ICh1c2luZyBwcmVib290IGNvbW1hbmQpCgoqIEFkZCBzdXBwb3J0IGZvciBTWDEgbW9iaWxlIHBob25lOyBhZGQgc3VwcG9ydCBmb3IgVVNCLWJhc2VkIGNvbnNvbGUKICAoZW5hYmxlIHdpdGggInNldGVudiBzdGRvdXQgdXNidHR5OyBzZXRlbnYgc3RkaW4gdXNidHR5IikKCiogRml4IExPV0JPT1QgY29uZmlndXJhdGlvbiBmb3IgTVBDNTIwMCB3aXRoIEREUiBtZW1vcnkKCiogRml4IFNEUkFNIHRpbWluZ3MgZm9yIExJVEU1MjAwIC8gSWNlQ3ViZSBib2FyZAoKKiBIYW5kbGUgQXV0aS1NRElYIC8gY29ubmVjdGlvbiBzdGF0dXMgZm9yIElOQ0EtSVAKCiogRml4IFVTQiBwcm9ibGVtcyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVhZCAwIGJ5dGVzCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDI2IEZlYiAyMDA0OgogIEZpeCBicm9rZW4gY29tcGlsZSBmb3IgWFBFRElURTFLIHRhcmdldC4KCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyNiBGZWIgMjAwNDoKICBCdWcgZml4IGZvciBORlMgY29kZSBvbiBOSU9TIHRhcmdldHMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMjYgRmViIDIwMDQ6CiAgQnJlYWsgdXAgU3lzdGVtQUNFIHJlYWRzIG9mIGxhcmdlIGJsb2NrIGNvdW50cwoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNiBGZWIgMjAwNAogIGFkZCBJREUgc3VwcG9ydCBmb3IgTVBDNTIwMAoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNiBGZWIgMjAwNDoKICBhZGQgYXV0b2xvYWQgdmlhIE5GUwoKKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zCiAgVXNlIG9mIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyBpbiBib2FyZC5jIGNvbnNpc3RlbnQgd2l0aCB1c2VzCiAgZWxzZXdoZXJlIGluIHRoZSBzb3VyY2UuCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IEZlYiAyMDA0OgogIC0gVGltZW91dHMgaW4gRlBHQSBjb2RlIHNob3VsZCBiZSBiYXNlZCBvbiBDRkdfSFoKICAtIE1pbm9yIGNsZWFudXAgaW4gY29kZSBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IEZlYiAyMDA0OgogIENoYW5nZWQgIkRpcmVjdG9yeSBIaWVyYXJjaHkiIHNlY3Rpb24gaW4gUkVBRE1FCgoqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI1IEZlYiAyMDA0OgogIFJlZHVjZSBjb3B5IGNvdW50IGluIG5mc19yZWFkX3JlcGx5KCkgb2YgTkZTIGNvZGUKCiogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDI0IEZlYiAyMDA0OgogIE5TOTc1MCBEZXZCb2FyZCBhZGRlZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyNCBGZWIgMjAwNAogIGFkZCBVU0Igc3VwcG9ydCBmb3IgTVBDNTIwMAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKICAtIGZpeCBNSUkgY29tbWFuZHMgdG8gdXNlIHZhbHVlcyBmcm9tIGxhc3QgY29tbWFuZAoKKiBQYXRjaCBieSBUb3JzdGVuIERlbWtlLCAyNCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIGVYYWxpb24gcGxhdGZvcm0gKFNQU1ctODI0MCwgRi0zMCwgRi0zMDApCgoqIFBhdGNoIGJ5IFJhaHVsIFNoYW5iaGFnLCAxOSBGZWIgMjAwNDoKICBGaXhlcyBmb3IgZm9yIE9NQVAxNjEwIGJvYXJkOgogIC0gc2hpZnQgc29tZSBJUlEgc3BlY2lmaWMgY29kZSB0byBwbGF0Zm9ybS5TIGZpbGUKICAtIHJlbW92ZSBkdXBsaWNhdGV3YXRjaGRvZyByZXNldCBjb2RlIGZyb20gc3RhcnQuUwoKKiBNYWtlIEF1dG8tTURJWCBTdXBwb3J0IGNvbmZpZ3VyYWJsZSBvbiBJTkNBLUlQIGJvYXJkCgoqIEZpeCBsaWNlbnNlIGZvciBta2ltYWdlIHRvb2wKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMjQgRmViIDIwMDQ6CiAgVXBkYXRlIE5ldEJvb3RGaWxlWGZlclNpemUgaW4gTkZTIGNvZGUKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNCBGZWIgMjAwNDoKICBmaXggcGFja2V0IGxlbmd0aCBpbiBORlMgY29kZQoKKiBQYXRjaCBieSBNYXNhbWkgS29taXksIDIyIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBORlMgZm9yIGZpbGUgZG93bmxvYWQKCiogUGF0Y2ggYnkgQW5kcmVhIFNjaWFuLCAxNyBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgUzNDNDRCMCBwcm9jZXNzb3IgYW5kIERBVkUgQjIgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjAgRmViIDIwMDQ6CiAgLSBBZGQgc3VwcG9ydCBmb3IgTUlJIGNvbW1hbmRzIG9uIEFUOTFSTTkyMDAgYm9hcmRzCiAgLSBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBjb2RlCgoqIFBhdGNoIGJ5IFBldGVyIFJ5c2VyLCAyMCBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBNTDMwMCBwbGF0Zm9ybQoKKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDE3IEZlYiAyMDA0OgogIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGZvciBOSU9TCgoqIFBhdGNoIGJ5IEpvc2ggRnJ5bWFuLCAxNiBGZWIgMjAwNDoKICBGaXggYnl0ZS1zd2FwcGluZyBmb3IgY2ZpX2ZsYXNoLmMgZm9yIGRpZmZlcmVudCBidXMgd2lkdGhzCgoqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxNCBKZWIgMjAwNDoKICBSZW1vdmUgZHVwbGljYXRlICJGUEdBIFN1cHBvcnQiIG5vdGVzIGZyb20gdGhlIFJFQURNRSBmaWxlCgoqIFBhdGNoZXMgYnkgUmVpbmhhcmQgTWV5ZXIsIDE0IEZlYiAyMDA0OgogIC0gdXBkYXRlIGJvYXJkL2VtayB0cmVlOyB1c2UgY29tbW9uIGZsYXNoIGRyaXZlcgogIC0gQ29ycmVjdGVkIHRlc3RlZCBiaXRzIGluIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9uIGluIGNwdS9tcGM1eHh4L3RyYXBzLmMKICAgIFthZGFwdGVkIGZvciBvdGhlciBQUEMgQ1BVcyAtLSB3ZF0KICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBNNDhUMDggb24gdGhlIEVWQUw1MjAwIGJvYXJkIGluIHJ0Yy9tazQ4dDU5LmMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEzIEZlYiAyMDA0OgogIENhbGwgc2hvd19ib290X3Byb2dyZXNzKCkgd2hlbmV2ZXIgUE9TVCAiRkFJTEVEIiBpcyBwcmludGVkLgoKKiBQYXRjaCBieSBOaXNoYW50IEthbWF0LCAxMyBGZWIgMjAwNDoKICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDE2MTAgSDIgQm9hcmQKICBGaXhlcyBmb3IgY3B1L2FybTkyNmVqcy9pbnRlcnJ1cHQuYwoJKGJhc2VkIG9uIFJpY2hhcmQgV29vZHJ1ZmYncyBwYXRjaCBmb3IgYXJtOTI1LCAxNiBPY3QgMDMpCiAgRml4IGZvciBhIHRpbWVyIGJ1ZyBpbiBPTUFQMTYxMCBJbm5vdmF0b3IKICBBZGQgc3VwcG9ydCBmb3IgQ1MwIChST00pL0NTMyAoRmxhc2gpIGJvb3QgaW4gT01BUDE2MTAgSW5ub3ZhdG9yIGFuZCBIMgoKKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTIgRmViIDIwMDQ6CiAgLSBhZGQgc3VwcG9ydCBmb3IgTklPUyB0aW1lciB3aXRoIHZhcmlhYmxlIHBlcmlvZCBwcmVsb2FkIGNvdW50ZXIgdmFsdWUKICAtIHByZXBhcmUgUE9TVCBmcmFtZXdvcmsgc3VwcG9ydCBmb3IgTklPUyB0YXJnZXRzCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBGZWIgMjAwNDoKICBhZGQgUE9TVCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IGJvYXJkCgoqIFBhdGNoIGJ5IExhdXJlbnQgTW9oaW4sIDEwIEZlYiAyMDA0OgogIEZpeCBidWZmZXIgb3ZlcmZsb3cgaW4gY29tbW9uL3VzYi5jCgoqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDEwIEZlYiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCgoqIFBhdGNoIGJ5IFRob21hcyBFbHN0ZSwgMTAgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIE5FVCs1MCBDUFUgYW5kIE1vZE5FVDUwIGJvYXJkCgoqIFBhdGNoIGJ5IFNhbSBTb25nLCAxMCBGZWIgMjAwNDoKICBGaXggdHlwb3MgaW4gY2ZpX2ZsYXNoLmMKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMCBGZWIgMjAwNAogIEZpeGVkIGxvbmcgZGlyIGVudHJ5IHNsb3QgaWQgY2FsY3VsYXRpb24gaW4gZ2V0X3ZmYXRuYW1lCgoqIFBhdGNoIGJ5IFJvYmluIEdpbGtzLCAxMCBGZWIgMjAwNDoKICBhZGQgIml0ZXN0IiBjb21tYW5kIChvcGVyYXRvcnM6IC1lcSwgLW5lLCAtbHQsIC1ndCwgLWxlLCAtZ2UsID09LAogICE9LCA8PiwgPCwgPiwgPD0sID49KQoKKiBGaXggcHJvYmxlbSB3aXRoIHNpZGUgZWZmZWN0cyBpbiBtYWNyb3MgaW4gaW5jbHVkZS91c2IuaAoKKiBQYXRjaCBieSBEYXZpZCBCZW5zb24sIDEzIE5vdiAyMDAzOgogIGJ1ZyA4NDEzNTggLSBmaXggVEZUUCBkb3dubG9hZCBzaXplIGxpbWl0CgoqIEZpeGluZyBidWcgODUwNzY4OgogIGltcHJvcGVyIGZsdXNoX2NhY2hlKCkgaW4gbG9hZF9zZXJpYWwoKQoKKiBGaXhpbmcgYnVnIDgzNDk0MzoKICBNUEM4NTQwIC0gbWlzc2luZyB2b2xhdGlsZSBkZWNsYXJhdGlvbnMKCiogUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMDkgRmViIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIFhpbGlueCBTeXN0ZW1BQ0UgY2hpcDoKICAtIE5ldyBmaWxlcyBjb21tb24vY21kX2FjZS5jIGFuZCBpbmNsdWRlL3N5c3RlbWFjZS5oCiAgLSBIb29rIHN5c3RlbWFjZSBzdXBwb3J0IGludG8gY21kX2ZhdCBhbmQgdGhlIHBhcnRpdGlvbiBtYW5hZ2VyCgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgogIEFkZCBiaV9vcGJmcmVxICYgYmlfaWljX2Zhc3QgdG8gNDQwR1ggYmRfaW5mbyBhcyBuZWVkZWQgZm9yIExpbnV4CgoqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgogIG8gNDQwR1g6CiAgICAtIEZpeCBQQ0kgSW5kaXJlY3QgYWNjZXNzIGZvciB0eXBlIDEgY29uZmlnIGN5Y2xlcyB3aXRoIHBwYzQ0MC4KICAgIC0gQWRkIHBoeW1vZGUgZm9yIDQ0MCBlbmV0CiAgICAtIGZpeCBwY2kgcHJlIGluaXQKICBvIFhQZWRpdGUxSzoKICAgIC0gQ2hhbmdlIGJvYXJkX3ByZV9pbml0IHRvIGJvYXJkX2Vhcmx5X2luaXRfZgogICAgLSBBZGQgdXNlciBmbGFzaCB0byBidXMgY29udHJvbGxlciBzZXR1cAogICAgLSBGaXggcGNpIHByZSBpbml0CiAgICAtIEZpeCBpc19wY2lfaG9zdCB0byBjaGVjayBHUElPIGZvciBtb25hcmNoIGJpdAogICAgLSBGb3JjZSB4cGVkaXRlMWsgdG8gcGNpIGNvbnZlbnRpb25hbCBtb2RlICh2aWEgI2RlZmluZSBvcHRpb24pCgoqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgNCBGZWIgMjAwNDoKICAtIGhhbmRsZSB0aGUgbWFjaGluZSBjaGVjayB0aGF0IGlzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIFBDSSBzY2FucwogICAgb24gODJ4eCBwcm9jZXNzb3JzLgogIC0gZGVmaW5lIHRoZSByZWdpc3RlcnMgdXNlZCBpbiB0aGUgSU1NUiBieSB0aGUgUENJIHN1YnN5c3RlbS4KCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDMgRmViIDIwMDQ6CiAgY3B1L21wYzV4eHgvc3RhcnQuUzogY29weSBNQkFSIGludG8gU1BSMzExCgoqIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwMyBGZWIgMjAwNDoKICBGaXggY29weSAmIHBhc3RlIGVycm9yIGluIGNwdS9tcGM4MjYwL3BjaS5jCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAyNCBKYW4gMjAwNDoKICBGaXggdHlwbyBpbiBjcHUvbXBjNXh4eC9wY2lfbXBjNTIwMC5jCgoqIEFkZCBBdXRvLU1ESVggc3VwcG9ydCBmb3IgSU5DQS1JUAoKKiBTb21lIGNvZGUgY2xlYW51cAoKKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMTAgRmViIDIwMDQ6CiAgRml4ZXMgZm9yIENvbGRmaXJlIHBvcnQKCiogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxMSBGZWIgMjAwNDoKICBGaXggQ0ZJIGZsYXNoIGRyaXZlciBwcm9ibGVtcwoKKiBNYWtlIHN1cmUgdG8gdXNlIGEgYnVzIGNsb2NrIGRpdmlkZXIgb2YgMiBvbmx5IHdoZW4gcnVubmluZyBUUU04eHhNCiAgbW9kdWxlcyBhdCBDUFUgY2xvY2sgZnJlcXVlbmNpZXMgYWJvdmUgNjYgTUh6LgoKKiBPcHRpbWl6ZSBmbGFzaCBwcm9ncmFtbWluZyBzcGVlZCBmb3IgTFdNT04gKGJ5IGFub3RoZXIgMTAwJSA6LSkKCiogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMyBGZWIgMjAwNDoKICAtIENoYW5nZWQgdGhlIGluY29ycmVjdCBGQVQxMkJVRlNJWkUKICAtIGRhdGFfYmVnaW4gaW4gZnNkYXRhIGNhbiBiZSBuZWdhdGl2ZS4gQ2hhbmdlZCBpdCB0byBiZSBzaG9ydC4KCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMwIEphbiAyMDA0OgogIDE6IC0gYm9hcmQvYWx0ZXJhL2NvbW1vbi9mbGFzaC5jOmZsYXNoX2VyYXNlKCk6CiAgICAgICBvIGFsbG93IGludGVycnVwdHMgYmVmb3IgZ2V0X3RpbWVyKCkgY2FsbAogICAgICAgbyBjaGVjay11cCBlYWNoIGVyYXNlZCBzZWN0b3IgYW5kIGF2b2lkIHVuZXhwZWN0ZWQgdGltZW91dHMKICAgICAtIGJvYXJkL2FsdGVyYS9kazFjMjAvZGsxczEwLmM6Ym9hcmRfZWFybHlfaW5pdF9mKCk6CiAgICAgICBvIGVuY2xvc2Ugc2V2ZW5zZWdfc2V0KCkgaW4gY3BwIGNvbmRpdGlvbgogICAgIC0gcmVtb3ZlIHRoZSBBU01JIGNvbmZpZ3VyYXRpb24gZm9yIERLMVMxMF9zdGFuZGFyZF8zMiAobmV2ZXIgcHJlc2VudCkKICAgICAtIGZpeCBzb21lIHR5cGVkIGluIG1pc3Rha2VzIGluIHRoZSBOSU9TIGRvY3VtZW50YXRpb24KICAyOiAtIHNwbGl0IERLMUMyMCBjb25maWd1cmF0aW9uIGludG8gc2V2ZXJhbCBoZWFkZXIgZmlsZXM6CiAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KICAgICAgIG8gVS1Cb290IHJlbGF0ZWQgcGFydCBpcyByZW1haW5pbmcgaW4gREsxQzIwLmgKICAzOiAtIHNwbGl0IERLMVMxMCBjb25maWd1cmF0aW9uIGludG8gc2V2ZXJhbCBoZWFkZXIgZmlsZXM6CiAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KICAgICAgIG8gVS1Cb290IHJlbGF0ZWQgcGFydCBpcyByZW1haW5pbmcgaW4gREsxUzEwLmgKICA0OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTWljcm90cm9uaXggTGludXggRGV2ZWxvcG1lbnQgS2l0CiAgICAgICBOSU9TIENQVSBjb25maWd1cmF0aW9uIGF0IHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCiAgICAgICBTdHJhdGl4IEVkaXRpb24gKERLLTFTMTApCiAgNTogLSBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIEFsdGVyYSBOaW9zIERldmVsb3BtZW50IEtpdCwKICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKICA2OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgTmlvcyBTZXJpYWwgUGVyaXBoYXJlbCBJbnRlcmZhY2UgKFNQSSkKICAgICAgIChtYXN0ZXIgb25seSkKICA3OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgY29tbW9uIFUtQm9vdCBTUEkgZnJhbWV3b3JrIGF0CiAgICAgICBSVEMgZHJpdmVyIERTMTMwNgoKKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMjggSmFuIDIwMDQ6CiAgRml4IGZsYXNoIHByb3RlY3Rpb24vbG9ja2luZyBoYW5kbGluZyBmb3IgT01BUDE2MTAgaW5ub3ZhdG9yIGJvYXJkLgoKKiBQYXRjaCBieSBSb2xmIFBldWtlcnQsIDI4IEphbiAyMDA0OgogIGZpeCBmbGFzaCB3cml0ZSBwcm9ibGVtcyBvbiBDU0IyMjYgYm9hcmQgKHdyaXRlIHdpdGggMzIgYml0IGJ1cyB3aWR0aCkKCiogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxNiBKYW4gMjAwNDoKICAtIGZpeCByb3VuZGluZyBlcnJvciB3aGVuIGNhbGN1bGF0aW5nIGJhdWRyYXRlcyBmb3IgTVBDNTIwMCBQU0NzCiAgLSBtYWtlIHN1cmUgQ0ZHX1JBTUJPT1QgYW5kIENGR19MT1dCT09UIGFyZSBub3QgZW5hYmxlZCBhdCB0aGUgc2FtZQogICAgdGltZSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI2IEphbiAyMDA0OgogIEFsbG93IGJ6aXAyIGNvbXByZXNzaW9uIGZvciBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGJvYXJkcwoKKiBQYXRjaCBieSBCcmFkIEtlbXAsIDIxIEphbiAyMDA0OgogIEFkZCBzdXBwb3J0IGZvciBDRkkgZmxhc2ggZHJpdmVyIGZvciBib3RoIHRoZSBJbnRlbCBhbmQgdGhlIEFNRAogIGNvbW1hbmQgc2V0cy4KCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjAgSmFuIDIwMDQ6CiAgRml4IHBjaSBicmlkZ2UgYXV0byBlbnVtZXJhdGlvbiBvZiBzaWJsaW5nIHAycCBicmlkZ2VzLgoKKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMiBKYW4gMjAwNDoKICBBZGQgc29tZSBkZWxheXMgYXMgbmVlZGVkIGZvciBJbnRlbCBMWFQ5NzFBIFBIWSBzdXBwb3J0CgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAwOSBKYW4gMjAwNDoKICAtIGF2b2lkIHdhcm5pbmc6IHVudXNlZCB2YXJpYWJsZSBgcGlvcCcgaW4gYm9hcmQvYWx0ZXJhL2NvbW1vbi9zZXZlbnNlZy5jCiAgLSBtYWtlIERLMUMyMCBib2FyZCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gQVNNSSBjb25mb3JtIHRvCiAgICBkb2N1bWVudGF0aW9uCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA5IEphbiAyMDA0OgoKICBBUk0gbWVtb3J5IGxheW91dCBmaXhlczogdGhlIGFib3J0LXN0YWNrIGlzIG5vdyBzZXQgdXAgaW4gdGhlCiAgY29ycmVjdCBSQU0gYXJlYSwgYW5kIHRoZSBCU1MgaXMgemVyb2VkIG91dCBhcyBpdCBzaG91bGQgYmUuCgogIEZ1cnRoZXJtb3JlLCB0aGUgbWFnaWMgdmFyaWFibGVzICdhcm1ib290X2VuZCcgYW5kICdhcm1ib290X2VuZF9kYXRhJwogIG9mIHRoZSBsaW5rZXIgc2NyaXB0cyBhcmUgcmVwbGFjZWQgYnkgJ19fYnNzX3N0YXJ0JyBhbmQgJ19lbmQnLAogIHJlc3AuLCB3aGljaCBpcyBhIGZ1cnRoZXIgc3RlcCB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgZGlmZmVyZW5jZXMKICBiZXR3ZWVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ1BVIGFyY2hpdGVjdHVyZXMuCgoqIFBhdGNoIGJ5IGxpYW5nIGEgbGVpLCA5IEphbiAyMDA0OgogIEZpeCBJbnRlbCAyOEYxMjhKMyBJRCBpbiBpbmNsdWRlL2ZsYXNoLmgKCiogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDkgSmFuIDIwMDQ6CiAgYWRkIHN1cHBvcnQgZm9yIFRCMDIyOSBib2FyZCAoTkVDIFZSNDEzMSBNSVBTIHByb2Nlc3NvcikKCiogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBEZWMgMjAwMzoKICBjaGFuZ2VkIGV4dGVybiBfX2lubGluZV9fIGludG8gc3RhdGljIF9faW5saW5lX18gaW4KICBpbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgKCiogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMzAgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIElCTSBQUEM0NDBHWC4gTXVsdGlwbGUgRU1BQyBFdGhlcm5ldCBkZXZpY2VzLAogIHNlbGVjdCBNREkgcG9ydCBiYXNlZCBvbiBlbmFibGVkIEVNQUMgZGV2aWNlLgogIEFkZCBzdXBwb3J0IGZvciBYRVMgSW5jIDxodHRwOi8vd3d3Lnhlcy1pbmMuY29tPiBYUGVkaXRlMTAwMCA0NDBHWAogIGJhc2UgUHJQTUMgYm9hcmQuCgoqIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMTUgRGVjIDIwMDM6CiAgbWFkZSBDT05GSUdfU0lMRU5UX0NPTlNPTEUgdXNhYmxlIG9uIGFsbCBhcmNoaXRlY3R1cmVzCgoqIERpc2FibGUgZGF0ZSBjb21tYW5kIG9uIFRRTTg2Nk0gLSB0aGVyZSBpcyBubyBSVEMgb24gTVBDODY2CgoqIEZpeCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyBmb3IgbG93IENQVSBjbG9ja3MKCiogSW1wbGVtZW50IGFkYXB0aXZlIFNEUkFNIHRpbWluZyBjb25maWd1cmF0aW9uIGJhc2VkIG9uIGFjdHVhbCBDUFUKICBjbG9jayBmcmVxdWVuY3kgZm9yIElOQ0EtSVA7IGZpeCBwcm9ibGVtIHdpdGggYm9hcmQgaGFuZ2luZyB3aGVuCiAgc3dpdGNoaW5nIGZyb20gMTUwTUh6IHRvIDEwME1IegoKKiBBZGQgUENNQ0lBIENTIHN1cHBvcnQgZm9yIEJNUzIwMDMgYm9hcmQKCiogQWRkIHZhcmlhYmxlIENQVSBjbG9jayBmb3IgTVBDODU5Lzg2NiBzeXN0ZW1zIChzbyBmYXIgb25seSBUUU04NjZNKToKICBzZWUgZG9jL1JFQURNRS5NUEM4NjYgZm9yIGRldGFpbHM7CiAgaW1wbGVtZW50IHdvcmthcm91bmQgZm9yICJTSVU0IiBhbmQgIlNJVTkiIHNpbGljb24gYnVncyBvbiBNUEM4NjY7CiAgY2FsY3VsYXRlIENQVSBjbG9jayBmcmVxdWVuY3kgZnJvbSBQTEwgcmVnaXN0ZXIgdmFsdWVzLgoKKiBBZGQgc3VwcG9ydCBmb3IgMTI4IE1CIFJBTSBvbiBUUU04eHhML00gbW9kdWxlcwoKKiBGaXggUFMvMiBrZXlib2FyZCBwcm9ibGVtIGNhdXNlZCBieSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHZhcmlhYmxlCiAgcG9pbnRpbmcgdG8gYSBsb2NhdGlvbiBpbiBmbGFzaAoKKiBGaXggSU5DQS1JUCBjbG9jayBjYWxjdWxhdGlvbjogNDAwLzMgPSAxMzMuMyBNSHosIG5vdCAxMzAuCgoqIFRoZSBQUy8yIG11eCBvbiB0aGUgQk1TMjAwMyBib2FyZCBuZWVkcyA0NTAgbXMgYWZ0ZXIgcG93ZXIgb24KICBiZWZvcmUgd2UgY2FuIGFjY2VzcyBpdDsgYWRkIGRlbGF5IGluIGNhc2Ugd2UgYXJlIGZhc3RlciAod2l0aCBubwogIENGIGNhcmQgaW5zZXJ0ZWQpCgoqIENsZWFudXAgb2Ygc29tZSBpbml0IGZ1bmN0aW9ucwoKKiBNYWtlIHN1cmUgU0NDIEV0aGVybmV0IGlzIGFsd2F5cyBzdG9wcGVkIGJ5IHRoZSB0aW1lIHdlIGJvb3QgTGludXgKICB0byBhdm9pZCBMaW51eCBjcmFzaGVzIGJ5IGVhcmx5IHBhY2tldHMgY29taW5nIGluLgoKKiBBY2NlbGVyYXRlIGZsYXNoIGFjY2Vzc2VzIG9uIExXTU9OIGJvYXJkIGJ5IHVzaW5nIGJ1ZmZlcmVkIHdyaXRlcwoKKiBGaXggdHlwbyBpbiBNYWtlZmlsZTsKICBmaXggcHJvYmxlbSB3aXRoIFBBUlROVU0gZGV0ZWN0aW9uCgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwOSBKYW4gMjAwNDoKICAtIGFkZCBSVEMgc3VwcG9ydCBmb3IgTVBDNTIwMCBiYXNlZCBib2FyZHMgKHJlcXVpcmVzIFJUQ19YVEFMKQoKKiBBZGQgc3VwcG9ydCBmb3IgSURFIExFRCBvbiBCTVMyMDAzIGJvYXJkCiAgKGV4Y2x1c2l2ZSB3aXRoIHN0YXR1cyBMRUQhKQoKKiBBZGQgc3VwcG9ydCBmb3IgUFMvMiBrZXlib2FyZCAodXNlZCB3aXRoIFBTLzIgbXVsdGlwbGV4b3Igb24KICBCTVMyMDAzIGJvYXJkKQoKKiBQYXRjaGVzIGJ5IFJlaW5oYXJkIE1leWVyLCA0IEphbiAyMDA0ICsgNyBKYW4gMjAwNDoKICBBZGQgY29tbW9uIGZpbGVzIGZvciAiZW1rIiBib2FyZHMKCiogQWRkIGEgY29tbW9uIGdldF9yYW1fc2l6ZSgpIGZ1bmN0aW9uIGFuZCBtb2RpZnkgdGhlIHRoZQogIGJvYXJkLXNwZWNpZmljIGZpbGVzIHRvIGludm9rZSB0aGF0IGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDEuMC4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFNldCBkZWZhdWx0IGNsb2NrIGZvciBJTkNBLUlQIHRvIDE1MCBNSHoKCiogTWFrZSBCTVMyMDAzIHVzZSBhIHNlcGFyYXRlIGNvbmZpZyBmaWxlIHRvIGF2b2lkICNpZmRlZiBtZXNzOwogIGFkZCBJMkMgc3VwcG9ydDsgYWRkIHN1cHBvcnQgZm9yIERTMTMzNyBSVEMKCiogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0ICBmb3IgQk1TMjAwMyBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3Igc3RhdHVzIExFRCBvbiBCTVMyMDAzIGJvYXJkCgoqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDIgSmFuIDIwMDQ6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIEFjdGl2ZSBTZXJpYWwgTWVtb3J5IEludGVyZmFjZSAoQVNNSSkKICBvbiBDeWNsb25lIGRldmljZXMKCiogUGF0Y2ggYnkgQW5kcmVhIE1hcnNvbiwgMTYgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBQUENoYW1lbGVvbiBNRSBhbmQgSEkgbW9kdWxlcwoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMiBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgRFVFVCBBRFMgYm9hcmQgKE1QQzg3eC84OHgpCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTUgRGVjIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGNyYW1mcyAodXNlcyBKRkZTMiBjb21tYW5kIGludGVyZmFjZSkKCiogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDExIERlYyAyMDAzOgogIC0gbW9yZSBkb2N1bWVudGF0aW9uIGZvciBOSU9TIHBvcnQKICAtIG5ldyBzdHJ1Y3Qgbmlvc19waW9fdCwgc3RydWN0IG5pb3Nfc3BpX3QKICAtIFJlY29uZmlndXJhdGlvbiBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxQzIwOgogICAgbyBtb3ZlIGJvYXJkIHJlbGF0ZWQgY29kZSBmcm9tIGJvYXJkL2RrMWMyMAogICAgICB0byBib2FyZC9hbHRlcmEvZGsxYzIwCiAgICBvIGNyZWF0ZSBhIG5ldyBjb21tb24gc291cmNlIHBhdGggYm9hcmQvYWx0ZXJhL2NvbW1vbgogICAgICBhbmQgbW92ZSBnZW5lcmljIGZsYXNoIGFjY2VzcyBzdHVmZiBpbnRvIGl0CiAgICBvIGNoYW5nZS9leHBhbmQgY29uZmlndXJhdGlvbiBmaWxlIERLMUMyMC5oCiAgLSBBZGQgc3VwcG9ydCBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxUzEwCiAgLSBBZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciBOSU9TIHN5c3RlbXMKICAtIEFkZCBkdWFsIDctc2VnbWVudCBMRUQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5JT1MgRGV2S2l0cwoKKiBQYXRjaCBieSBSb25lbiBTaGl0cml0LCAxMCBEZWMgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgREI2NDM2MCAvIERCNjQ0NjAgZGV2ZWxvcG1lbnQgYm9hcmRzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDEwIERlYyAyMDAzOgogIGZpeCBkZXBlbmRlbmN5IHByb2JsZW0gaW4gZXhhbXBsZXMvTWFrZWZpbGUKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDggRGVjIDIwMDMKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgUEFUSSBib2FyZCAoTVBDNTU1KQogIC0gYWRkIFNQSSBzdXBwb3J0IGZvciB0aGUgTVBDNXh4CgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA4IERlYyAyMDAzOgogIGFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgQ09ORklHX1NFUklBTF9UQUcgYW5kIENPTkZJR19SRVZJU0lPTl9UQUcKICB0byBwYXNzIEFUQUdfU0VSSUFMIGFuZCBBVEFHX1JFVklTSU9OLCByZXNwLiwgdG8gdGhlIEFSTSB0YXJnZXQ7CiAgY2xlYW51cCBzb21lIHJlZHVuZGFuZCAjZGVmaW5lcwoKKiBQYXRjaCBieSBBbmRy6SBTY2h3YXJ6LCA4IERlYyAyMDAzOgogIGZpeGVzIGZvciBEYXZpY29tIERNOTEwMkEgRXRoZXJuZXQgQ2hpcCAoI2RlZmluZSBDT05GSUdfVFVMSVBfRklYX0RBVklDT00pOgogIC0gVFggYW5kIFJYIGRlc2tyaXB0b3JzIG11c3QgYmUgcXVhZC13b3JkIGFsaWduZWQKICAtIGRvZXMgbm90IHdvcmsgd2l0aCBvbmx5IG9uZSBUWCBkZXNrcmlwdG9yCiAgLSBzdGFuZGFyZCByZXNldCBtZXRob2QgZG9lcyBub3Qgd29yawoKKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBEZWMgMjAwMzoKICBhZGQgUlRMODEzOSBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2hlcyBieSBFZCBPa2Vyc29uLCAwNyBEZWMgMjAwMzoKICAtIGZpeCBldGhlcm5ldCBmb3IgdGhlIEFVMXgwMCBwcm9jZXNzb3JzIGluIGxpdHRsZS1lbmRpYW4gbW9kZS4KICAtIGV4dGVuZCBtZW1zZXR1cC5TIGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gQkUgYW5kIExFIG1vZGVzCgoqIE1pbm9yIGNvZGUgY2xlYW51cCAoY29kaW5nIHN0eWxlKQoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMzAgRGVjIDIwMDM6CiAgLSBjcHUvbXBjNXh4eC9mZWMuYzogYWRkZWQgQ09ORklHX1BIWV9BRERSLCBhZGRlZCBDT05GSUdfUEhZX1RZUEUsCiAgLSBhZGRlZCBDT05GSUdfUEhZX0FERFIgdG8gaW5jbHVkZS9jb25maWdzL0ljZUN1YmUuaCwKICAtIHR1cm5lZCBkZWJ1ZyBwcmludCBvZiBQSFkgcmVnaXN0ZXJzIGludG8gYSBmdW5jdGlvbiAoY2FsbGVkIGluIHR3byBwbGFjZXMpCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBFTUsgTVBDNTIwMCBiYXNlZCBtb2R1bGVzCgoqIEZpeCBNUEM4eHggUExQUkNSX01GRF9TSElGVCB0eXBvCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjZNIG1vZHVsZXMKCiogRml4ZXMgZm9yIFRRTTg1NU0gd2l0aCA0IE1CIGZsYXNoIChBbTI5REwxNjMgPSBfbm9fIG1pcnJvciBiaXQgZmxhc2gpCgoqIEZpeCBhIGZldyBjb21waWxlciB3YXJuaW5ncwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjggRGVjIDIwMDM6CiAgQWRkIGluaXRpYWwgc3VwcG9ydCBmb3IgVE9QNTIwMCBib2FyZAoKKiBNYWtlIENQVSBjbG9jayBvbiBJQ0EtSVAgYm9hcmQgY29udHJvbGxhYmxlIGJ5IGEgImNwdWNsayIKICBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGljaCBjYW4gc2V0IHRvICIxMDAiLCAiMTMzIiwgb3IgIjE1MCIuIFRoZQogIENQVSBjbG9jayB3aWxsIGJlIGNvbmZpZ3VyZWQgYWNjb3JkaW5nbHkgdXBvbiBuZXh0IHJlYm9vdC4gT3RoZXIKICB2YWx1ZXMgYXJlIGlnbm9yZWQuIEluIGNhc2Ugb2YgYW4gaW52YWxpZCBvciB1bmRlZmluZWQgImNwdWNsayIKICB2YWx1ZSwgdGhlIGNvbXBpbGUtdGltZSBkZWZhdWx0IENQVSBjbG9jayBzcGVlZCB3aWxsIGJlIHVzZWQuCgoqIEVuYWJsZSBRdWFkLVVBUlQgb24gQk1TMjAwMyBib2FyZCAoaW5pdGlhbGl6ZSB0aGUgUENNQ0lBIG1lbW9yeQogIHdpbmRvdyB0aGF0IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBVQVJUIHJlZ2lzdGVycyBieSB0aGUgTGludXggZHJpdmVyKQoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjAgRGVjIDIwMDM6CiAgRml4IGNsb2NrIGNhbGN1bGF0aW9uIGZvciB0aGUgTVBDNTIwMCBmb3IgaGlnaGVyIGNsb2NrIGZyZXF1ZW5jaWVzCiAgKGFib3ZlIDIqKjMyIC8gMTAgPSA0MjkuNSBNSHopLgoKKiBGaXggQ09ORklHX1BMTF9QQ0lfVE9fTUVNX01VTFRJUExJRVIgZGl2aWRlciBlcnJvciBpbiBTUDgyNDAgY29uZmlndXJhdGlvbgoKKiBGaXggSWNlQ3ViZSBDTEtJTiBjb25maWd1cmF0aW9uIChpdCdzIDMzLjAwMDAwME1IeikKCiogQWRkIG5ldyBjb25maWd1cmF0aW9uIGZvciBJY2VDdWJlIGJvYXJkIHdpdGggRERSIG1lbW9yeQoKKiBVcGRhdGUgVFJBQiBtZW1vcnkgY29uZmlndXJhdGlvbnMKCiogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIElOQ0EtSVAgYm9hcmQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDA5IERlYyAyMDAzOgogIC0gQlVCSU5HQTQwNUVQOiBjaGFuZ2VkIGZsYXNoIGRyaXZlciB0byBwcm90ZWN0IHRvcCBzZWN0b3IgY29udGFpbmluZwogICAgZmlyc3QgaW5zdHJ1Y3Rpb24uCiAgLSBCVUJJTkdBNDA1RVA6IGNvbmZpZ3VyZWQgImVlcHJvbSIgY29tbWFuZCB0byBhY2Nlc3MgYm9vdCBjb25maWcgRUVQUk9NLgogIC0gQlVCSU5HQTQwNUVQOiBmaXhlZCBQTEwgaW5pdCAoaW5pdCBjaGlwIHNlbGVjdHMgYmVmb3JlIEZQR0EvTlZSQU0gYWNjZXNzKS4KICAtIDQwNUVQOiBmaXhlZCBTUEQtYmFzZWQgU0RSQU0gaW5pdCAob25seSB1c2UgYmFua3MgMCBhbmQgMSkuCiAgLSA0MDVFUDogYWRkZWQvZml4ZWQgc3VwcG9ydCBmb3IgInJlZ2luZm8iIGNvbW1hbmQuCiAgLSA0eHg6IHJlbW92ZWQgc3B1cmlvdXMgTUlJIGVycm9yIG1lc3NhZ2VzIG9uICJtaWkgaW5mbyIgY29tbWFuZC4KCiogUGF0Y2ggYnkgQmVybmhhcmQgS3VobiwgMjggTm92IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIENvbGRmaXJlIENQVQogIGFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNNTI3MkMzIGFuZCBNNTI4MkVWQiBib2FyZHMKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgTm92IDIwMDM6CiAgLSBhZGQgYSByZXR1cm4gdmFsdWUgZm9yIHRoZSBmcGdhIGNvbW1hbmQKICAtIGFkZCBpZGVfcHJlaW5pdCgpIGZ1bmN0aW9uIGNhbGxlZCBpbiBpZGVfaW5pdCBpZiBDT05GSUdfSURFX1BSRUlOSVQKICAgIGlzIGRlZmluZWQuIElmIGlkZV9wcmVpbml0IGZhaWxzLCBpZGVfaW5pdCBpcyBhYm9ydGVkLgogIC0gZml4IGFuIGVuZGlhbmVzcyBwcm9ibGVtIGluIGZhdC5oCgoqIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMDUgRGVjIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNOTUMncyBRUzg1MC9RUzgyMy9RUzg2MFQgYm9hcmRzCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDMgRGVjIDIwMDM6CiAgInJldml2ZSIgVS1Cb290IHN1cHBvcnQgZm9yIG9sZCBNb3Rvcm9sYSBNUEM4NjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgQ2FtKGlsbz8pLCAwMyBEZWMgMjAwMzoKICBtYWtlIGV4YW1wbGVzIGJ1aWxkIGV2ZW4gd2l0aCBicm9rZW4gTW9udGF2aXN0YSBvYmpjb3B5CgoqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyNyBOb3YgMjAwMzoKICBmaXggY29udmVyc2lvbiBwcm9ibGVtIHdpdGggImJvb3RyZXRyeSIgZXZpcm9ubWVudCB2YXJpYWJsZQoKKiBQYXRjaCBieSBBbmRyZSBTY2h3YXJ6LCAyNCBOb3YgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgbXZibHVlIChtdkJsdWVMWU5YIGFuZCBtdkJsdWVCT1gpIGJvYXJkcwoKKiBQYXRjaCBieSBQYXZlbCBCYXJ0dXNlaywgMjEgTm92IDIwMDM6CiAgc2V0IFpNSUkgYnJpZGdlIHNwZWVkIG9uIDQ0MAoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAxNyBOb3YgMjAwMzoKICBGaXggbWlzbWF0Y2hlZCAjaWZkZWYgLyAjZW5kaWYgaW4gaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmgKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDE0IE5vdiAyMDAzOgogIC0gYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jCiAgICAqIGltcGxlbWVudCBzdXBwb3J0IGZvciBCWklQMiBjb21wcmVzc2VkIGltYWdlcwogICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQogIC0gYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jCiAgICAqIHJlcG9ydCBjb3JyZWN0IGVycm9ycyB0byB1cHBlciBsYXllcnMKICAgICogY2hlY2sgdGhlIGVyYXNlIGZhaWwgYW5kIFZQUCBsb3cgYml0cyBpbiBzdGF0dXMgcmVnCiAgLSBib2FyZC9tcGwvdmNtYTkvY21kX3ZjbWE5LmMKICAtIGJvYXJkL21wbC92Y21hOS9mbGFzaC5jCiAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCiAgLSBjb21tb24vY21kX3VzYi5jCiAgICAqIGZpeCB0eXBvIGluIGNvbW1lbnQKICAtIGNwdS9hcm05MjB0L3VzYl9vaGNpLmMKICAgICogc3VwcG9ydCBmb3IgUzNDMjQxMCBpcyBtaXNzaW5nIGluICNpZiBsaW5lCiAgLSBkcml2ZXJzL2NzODkwMC5jCiAgICAqIHJlaW5pdCBzb21lIHJlZ2lzdGVycyBpbiBjYXNlIG9mIGVycm9yIChjYWJsZSBtaXNzaW5nLCAuLi4pCiAgLSBmcy9mYXQvZmF0LmMKICAgICogc3VwcG9ydCBmb3IgVVNCL01NQyBkZXZpY2VzIGlzIG1pc3NpbmcgaW4gI2lmIGxpbmUKICAtIGluY2x1ZGUvY29uZmlncy9NSVA0MDUuaAogIC0gaW5jbHVkZS9jb25maWdzL1BJUDQwNS5oCiAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0CiAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CiAgLSBpbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaAogICAgKiBlbmFibGUgQlpJUDIgc3VwcG9ydAogICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAogICAgKiBlbmFibGUgVVNCIHN1cHBvcnQKICAtIGxpYl9hcm0vYXJtbGludXguYwogICAgKiBjaGFuZ2UgY2FsbGluZyBjb252ZW50aW9uIG9mIEFSTSBMaW51eCBrZXJuZWwgYXMKICAgICAgZGVzY3JpYmVkIG9uIGh0dHA6Ly93d3cuYXJtLmxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvYm9vdGluZy5waHAKCiogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKICBTcGxpdCBkYmF1MXgwMCBpbnRvIGRiYXUxMDAwLCBkYmF1MTEwMCBhbmQgZGJhdTE1MDAgY29uZmlncyB0bwogIHN1cHBvcnQgYWxsIHRoZXNlIEFNRCBib2FyZHMuCgoqIFBhdGNoIGJ5IFRob21hcyBMYW5nZSwgMTQgTm92IDIwMDM6CiAgV29ya2Fyb3VuZCBmb3IgbWlwcyBhdTF4MDAgcGh5c2ljYWwgbWVtb3J5IGFjY2Vzc2VzICh0aGUgYXUxeDAwCiAgdXNlcyBhIDM2IGJpdCBidXMgaW50ZXJuYWxseSBhbmQgY2Fubm90IGFjY2VzcyBwaHlzaWNhbCBtZW1vcnkKICBkaXJlY3RseS4gVXNlIHRoZSB1bmNhY2hlZCBTRFJBTSBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIHBoeXNpY2FsCiAgb25lLikKCiogUGF0Y2ggYnkgWHVlIExpZ29uZyAoSm9lKSwgMTMgTm92IDIwMDM6CiAgYWRkIFJlYWx0ZWsgODAxOSBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgTm92IDIwMDM6CiAgTVBDODI2eEFEUy9QUTJGQURTICBjbGVhbnVwCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDEyIE5vdiAyMDAzOgogIFVwZGF0ZSBSRUFETUUgdG8gbWFyayB0aGUgUE9SVElPIGNvbW1hbmRzIG5vbi1zdGFuZGFyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAxMiBOb3YgMjAwMzoKICB1cGRhdGUgZm9yIGZvciBBdG1lbCBBVDkxUk05MjAwREsgZGV2ZWxvcG1lbnQga2l0OgogIC0gc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIERhdGFGbGFzaAogIC0gQXRtZWwgRGF0YUZsYXNoIEFUNDVEQjEyODIgc3VwcG9ydAoKKiBQYXRjaCBieSBKZWZmIENhcnIsIDExIE5vdiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBuZXcgdmVyc2lvbiBvZiA4MjcwIHByb2Nlc3NvcnMKCiogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDA1IE5vdiAyMDAzOgogIC0gb25seSBwYXNzIHRoZSBBUk0gbGludXggaW5pdHJkIHRhZyB0byB0aGUga2VybmVsIHdoZW4gYW4gaW5pdHJkCiAgICBpcyBhY3R1YWxseSBwcmVzZW50CiAgLSB1cGRhdGUgb21hcDE1MTBpbm4gY29uZmlndXJhdGlvbiBmaWxlCgoqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAzIE5vdiAyMDAzOgogIC0gbW9yZSBlbmRpYW5lc3MgZml4ZXMgZm9yIExBTjkxQzExMSBkcml2ZXIKICAtIENGR19IWiBjb25maWd1cmF0aW9uIHBhdGNoIGZvciBOSU9TIEN5Y2xvbmUgYm9hcmQKCiogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAyOCBPY3QgMjAwMzoKICBmaXggUEhZX0lOVF9SRUcgdnMuIFBIWV9NQVNLX1JFRyBidWcgaW4gZHJpdmVycy9zbWM5MTExMS5jCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIE9jdCAyMDAzOgogIC0gbWFrZSAibWlpIGluZm8gPGFkZHI+IiBzaG93IGluZm9yIGZvciBQSFkgYXQgImFkZHIiIG9ubHkKICAtIEVuZGlhbiBmaXggZm9yIG1paXBoeV9pbmZvKCkKCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxOSBTZXAgMjAwMzoKICBNb3ZlIG1vc3Qgb2YgdGhlIHRpbWVyIGludGVycnVwdCByZWxhdGVkIFBQQyBjb2RlIHRvIHBwY19saWIvaW50ZXJydXB0cy5jCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgogIEJyaW5nIEFSTSBtZW1vcnkgbGF5b3V0IGluIHN5bmMgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbjoKICBzdGFjayBhbmQgbWFsbG9jLWhlYXAgYXJlIG5vdyBsb2NhdGVkIF9iZWxvd18gdGhlIFUtQm9vdCBjb2RlCgoqIEFjY2VsZXJhdGUgYm9vdGluZyBvbiBUUkFCIGJvYXJkOiByZWFkIGFuZCBjaGVjayAgYXV0b3VwZGF0ZSAgaW1hZ2UKICBoZWFkZXJzIGZpcnN0IGluc3RlYWQgb2YgYWx3YXlzIHJlYWRpbmcgdGhlIHdob2xlIGltYWdlcy4KCiogRml4IHR5cGUgaW4gTVBDNVhYWCBjb2RlIChwb2ludGVkIG91dCBieSBWaWN0b3IgV3JlbikKCiogRW5hYmxlZCBwYXNzd29yZCBjaGVjayBvbiBSTVUgYm9hcmQKCiogRml4IGNvbmZpZ3VyYXRpb24gcHJvYmxlbSB3aXRoIEljZUN1YmUgaW4gTE9XQk9PVCBjb25maWd1cmF0aW9uOgogIGVudnJpb25tZW50IGdvdCBlbWJlZGRlZCwgY29ycnVwdGluZyB0aGUgaW1hZ2UgbGF5b3V0LgoKKiBGaXggTkVDIGRpc3BsYXkgbmFtZXMgKGl0J3MgNjQ0MCBbZm9yIDY0MHg0ODBdLCBub3QgNjY0MCkuCgoqIEFkZGVkIEJNUzIwMDMgYm9hcmQKICBhZGQgc3VwcG9ydCBmb3IgTkVDIE5MNjQ0OEJDMzMtNTQuIDEwLjQiLCA2NDB4NDgwIFRGVCBkaXNwbGF5CgoqIEZpeCBmbGFzaCBkcml2ZXIgZm9yIFRSQUIgYm9hcmQgKG11c3QgdXNlIFVubG9jayBCeXBhc3MgUmVzZXQKICBjb21tYW5kIHRvIGV4aXQgVW5sb2NrIEJ5cGFzcyBNb2RlKTsgYWRqdXN0IHRpbWluZ3MgZm9yIGZsYXNoLCBTUkFNCiAgYW5kIENQTEQKCiogVXNlICItZlBJQyIgaW5zdGVhZCBvZiAiLW1yZWxvY2F0YWJsZSIgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoCiAgcmVjZW50IHRvb2xzCgoqIEFkZCBjaGVja3N1bSB2ZXJpZmljYXRpb24gdG8gJ2ltbHMnIGNvbW1hbmQKCiogQWRkIGJkX2luZm8gZmllbGRzIG5lZWRlZCBmb3IgNHh4IExpbnV4IEkyQyBkcml2ZXIKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgNCBOb3YuIDIwMDM6CiAgRml4IGVycm9yIGluIGNtZF92ZmQuYyAoVFJBQiBib2FyZDogInZmZCAvMSIgc2hvd3Mgbm93IG9ubHkgb25lIEJpdG1hcCkKCiogUHJpbnQgdXNlZCBuZXR3b3JrIGludGVyZmFjZSB3aGVuIENPTkZJR19ORVRfTVVMVEkgaXMgc2V0CgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDI4IE9jdCAyMDAzOgogIEFkZCBsb3cgYm9vdCBzdXBwb3J0IGZvciBNUEM1MjAwCgoqIEZpeCBwcm9ibGVtIHdpdGggZHVhbCBQQ01DSUEgc3VwcG9ydCAoTlNDVSkKCiogRml4IE1QQzUyMDAgSTJDIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAxLjAuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBGaXggcGFyYW1ldGVyIHBhc3NpbmcgdG8gc3RhbmRhbG9uZSBpbWFnZXMgd2l0aCBib290bSBjb21tYW5kCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAzMCBPY3QgMjAwMzoKICBGaXggYnVpbGQgZXJyb3JzIGZvciBpeGRwNDI1IGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE0uIEhvcm4sIDI5IE9jdCAyMDAzOgogIEZpeGVzIHRvIGJ1aWxkIHVuZGVyIENZR1dJTgoKKiBHZXQgSWNlQ3ViZSBNR1Q1MTAwIHdvcmtpbmcgKGFnYWluKQoKKiBGaXggcHJvYmxlbXMgaW4gbWVtb3J5IHRlc3Qgb24gc29tZSBib2FyZHMgKHdoaWNoIHdhcyBub3QKICBub24tZGVzdHJ1Y3RpdmUgYXMgaW50ZW5kZWQpCgoqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAyOCBPY3QgMjAwMzoKICBDaGFuZ2UgZnMvZmF0L2ZhdC5jIHRvIHB1dCBJL08gYnVmZmVycyBpbiBCU1MgaW5zdGVhZCBvbiB0aGUgc3RhY2sKICB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IG9uIEFSTSBzeXN0ZW1zCgoqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CiAgZml4IGluaXQgc2VxdWVuY2UgZXJyb3IgZm9yIE5JT1MgcG9ydAoKKiBBbGxvdyBsb3dlcmNhc2Ugc3BlbGxpbmcgZm9yIEljZUN1YmVfNTIwMDsgc3VwcG9ydCBNUEM1MjAwTElURSBuYW1lCgoqIEFkZCBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRSB0byBUUkFCIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgWGlhbyBYaWFuZ2h1YSwgMjMgT2N0IDIwMDM6CiAgc21hbGwgcGF0Y2ggZm9yIG1wYzg1eHgKCiogRml4IHNtYWxsIHByb2JsZW0gaW4gTVBDNTIwMCBJMkMgZHJpdmVyCgoqIEZpeCBGQ0MzIHN1cHBvcnQgb24gQVRDIGJvYXJkCgoqIENvcnJlY3QgaGVhZGVyIHByaW50aW5nIGZvciBtdWx0aS1pbWFnZSBmaWxlcyBpbiBkb19ib290bSgpCgoqIE1ha2UgQ09ORklHX1NJTEVOVF9DT05TT0xFIHdvcmsgd2l0aCBDT05GSUdfQVVUT0JPT1RfS0VZRUQKCiogRml4IFBDSSBwcm9ibGVtcyBvbiBQUENoYW1lbGVvbiBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxOCBPY3QgMjAwMzoKICBGaXggQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXIKCiogUGF0Y2ggYnkgTnllIExpdSwgMTcgT2N0IDIwMDM6CiAgRml4IHR5cG8gaW4gaW5jbHVkZS9tcGM4eHguaAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNiBPY3QgMDM6CiAgRml4ZXMgZm9yIGNwdS9hcm05MjUvaW50ZXJydXB0LmMKICAtIEluaXRpYWxpemUgdGltZXN0YW1wICYgbGFzdGRlYyB2YXJzLgogIC0gZml4IHRpbWVzdGFtcCBvdmVyZmxvd3MuCiAgLSBmaXggbGFzdGRlYyBvdmVyZmxvdy4KICAtIHNtYXJ0ZXIgbm9ybWFsaXphdGlvbiB0byBhbGxvdyB1ZGVsYXkoKSBiZWxvdyAxbXMgdG8gd29yay4KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAxNiBPY3QKICBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAogIEN5Y2xvbmUgRWRpdGlvbiAoREstMUMyMCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IE9jdCAyMDAzOgogIGFkZCBoaW50IGFib3V0IGRvYy9SRUFETUUuc2lsZW50IHRvIFJFQURNRSBmaWxlCgoqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgTlNDVQoKKiBGaXggUENJIHByb2JsZW1zIG9uIFBQQ2hhbWVsZW9uRVZCCgoqIFRSQUIgYXV0by11cGRhdGU6IEJhc2UgZGVjaXNpb24gaWYgd2UgaGF2ZSB0byBzdHJpcCB0aGUgaW1hZ2UKICBoZWFkZXIgb24gaW1hZ2UgdHlwZSBhcyBlbmNvZGVkIGluIHRoZSBoZWFkZXIKICAoaW5jbHVkZSBpbWFnZSB0eXBlIHBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IE9jdCAyMDAzKQoKKiBQYXRjaGVzIGJ5IFhpYW5naHVhIFhpYW8sIDE1IE9jdCAyMDAzOgoKICAtIEFkZGVkIE1vdG9yb2xhIENQVSA4NTQwLzg1NjAgc3VwcG9ydCAoY3B1Lzg1eHgpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTQwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NDBhZHMpCiAgLSBBZGRlZCBNb3Rvcm9sYSBNUEM4NTYwQURTIGJvYXJkIHN1cHBvcnQgKGJvYXJkL21wYzg1NjBhZHMpCgoqIEZpeCBmbGFzaCB0aW1pbmdzIG9uIFRSQUIgYm9hcmQKCiogTWFrZSBzdXJlIEhVU0ggaXMgaW5pdGlhbGl6ZWQgZm9yIHJ1bm5pbmcgYXV0by11cGRhdGUgc2NyaXB0cwoKKiBNYWtlIDUyMDAgcmVzZXQgY29tbWFuZCBfcmVhbGx5XyByZXNldCB0aGUgYm9hcmQsIHdpdGhvdXQgcnVubmluZwogIGFueSBvdGhlciBjb2RlIGFmdGVyIGl0CgoqIEZpeCBlcnJvcnMgd2l0aCBmbGFzaCBlcmFzZSB3aGVuIHJhbmdlIHNwYW5zICBhY3Jvc3MgYmFua3MKICB0aGF0IGFyZSBtYXBwZWQgaW4gcmV2ZXJzZSBvcmRlcgoKKiBGaXggZmxhc2ggbWFwcGluZyBhbmQgZGlzcGxheSBvbiBQM0c0IGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxNSBKdWwgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBJWFA0MjUgQ1BVCiAgLSBhZGQgc3VwcG9ydCBmb3IgSVhEUDQyNSBldmFsIGJvYXJkCgoqIEFkZGVkIGNvbmZpZyBvcHRpb24gQ09ORklHX1NJTEVOVF9DT05TT0xFLiAgU2VlIGRvYy9SRUFETUUuc2lsZW50CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24KCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgT2N0IDIwMDMKICAtIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKCiogUGF0Y2hlcyBieSBUaG9tYXMgTGFuZ2UsIDA5IE9jdCAyMDAzOgogIC0gZml4IGNtZF9pZGUuYyBmb3Igbm9uIHBwYyBib2FyZHMgKHJlYWQvd3JpdGUgZnVuY3Rpb25zIGRpZCBub3QKICAgIGFkZCBBVEEgYmFzZSBhZGRyZXNzKQogIC0gZml4IGZvciBzaGFubm9uIGJvYXJkCiAgLSAjaWZkZWYgQ09ORklHX0lERV84eHhfRElSRUNUIHNvbWUgb3RoZXJ3aXNlIHVudXNlZCBjb2RlCiAgLSBFbmRpYW4gc3dhcCBBVEEgaWRlbnRpdHkgZm9yIGFsbCBiaWcgZW5kaWFuIENQVXMsIG5vdCBqdXN0IFBQQwogIC0gTUlQUyBvbmx5OiBOZXcgb3B0aW9uIENPTkZJR19NRU1TSVpFX0lOX0JZVEVTIGZvciBwYXNzaW5nIG1lbXNpemUKICAgIGFyZ3MgdG8gbGludXgKICAtIGFkZCBzdXBwb3J0IGZvciBkYmF1MXgwMCBib2FyZCAoTUlQUzMyKQoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IE9jdCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBkZWJyaXMgYm9hcmQKCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDkgT2N0IDIwMDM6CiAgRml4ZXMgZm9yIFRSQUIgYm9hcmQKICAtIC9ib2FyZC90cmFiL3JzNDg1LmM6IGNvcnJlY3QgYmF1ZHJhdGUKICAtIC9ib2FyZC90cmFiL2NtZF90cmFiLmM6IGJ1ZyBmaXggZm9yIHByb2JsZW0gd2l0aCB0aW1lciBvdmVyZmxvdyBpbgogICAgdWRlbGF5KCk7IGZpeCBzb21lIHRpbWluZyBwcm9ibGVtcyB3aXRoIGFkYyBjb250cm9sbGVyCiAgLSAvYm9hcmQvdHJhYi90cmFiX2ZrdC5jOiBhZGQgbmV3IGNvbW1hbmRzOiBnYWluLCBlZXByb20gYW5kIHBvd2VyOwogICAgbW9kaWZ5IGNvbW1hbmRzOiB0b3VjaCBhbmQgYnV6emVyCgoqIERpc2FibGUgQ09ORklHX1NVUFBPUlRfVkZBVCB3aGVuIHVzZWQgd2l0aCBDT05GSUdfQVVUT19VUERBVEUKICAocXVpY2sgJiBkaXJ0eSB3b3JrYXJvdW5kIGZvciByb2d1ZSBwb2ludGVyIHByb2JsZW0gaW4gZ2V0X3ZmYXRuYW1lKCkpOwogIFVzZSBkaXJlY3QgZnVuY3Rpb24gY2FsbHMgZm9yIGF1dG9fdXBkYXRlIGluc3RlYWQgb2YgaHVzaCBjb21tYW5kcwoKKiBQYXRjaCBieSBTY290dCBNY051dHQsIDA0IE9jdCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zLTMyIENQVQogIC0gYWRkIHN1cHBvcnQgZm9yIE5pb3MgQ3ljbG9uZSBEZXZlbG9wbWVudCBLaXQgKERLLTFDMjApCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI5IFNlcCAyMDAzOgogIC0gQSBzZWNvbmQgcGFyYW1ldGVyIGZvciBib290bSBvdmVyd3JpdGVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yCiAgICAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzLgogIC0gYm9vdG0gc2V0cyBlbnZpcm9ubWVudCB2YXJpYWJsZSAiZmlsZXNpemUiIHRvIHRoZSByZXN1bHRpbmcKICAgICh1bmNvbXByZXNzZWQpIGRhdGEgbGVuZ3RoIGZvciAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzCiAgICB3aGVuIGF1dG9zdGFydCBpcyBzZXQgdG8gIm5vIi4gTm93IHlvdSBjYW4gZG8gc29tZXRoaW5nIGxpa2UKCWlmIGJvb3RtICRmcGdhZGF0YSAkc29tZV9mcmVlX3JhbSA7IHRoZW4KCQlmcGdhIGxvYWQgMCAkc29tZV9mcmVlX3JhbSAkZmlsZXNpemUKCWZpCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAyNSBTZXB0IDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgUmV2LiBDIGJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI1IFNlcCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBaZXBoeXIgRW5naW5lZXJpbmcgWlBDLjE5MDAgYm9hcmQKCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjMgU2VwIDIwMDM6CiAgYWRkIENNRF9QT1JUSU8gdG8gQ0ZHX0NNRF9OT05TVEQgKGNvbW1hbmRzIGluIHF1ZXN0aW9uIGFyZSBvbmx5CiAgaW1wbGVtZW50ZWQgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlKQoKKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDIzIFNlcCAyMDAzOgogIGZpeCBwbGxfcGNpX3RvX21lbV9tdWx0aXBsaWVyIHRhYmxlIGZvciBNUEM4MjQ1CgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIyIFNlcCAyMDAzOgogIGVuYWJsZSB0aW1lZCBhdXRvYm9vdCBvbiBQWEEKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyMiBTZXAgMjAwMzoKICAtIGFkZCAkKENGTEFHUykgdG8gIi1wcmludC1saWJnY2MtZmlsZW5hbWUiIHNvIGNvbXBpbGVyIGRyaXZlcgogICAgcmV0dXJucyBjb3JyZWN0IGxpYmdjYyBmaWxlIHBhdGgKICAtICJsYXRlbmN5IiByZWR1Y3Rpb24gb2YgYnVzeS1sb29wIHdhaXRpbmcgdG8gaW1wcm92ZSAiVS1Cb290IiBib290CiAgICB0aW1lIG9uIHMzYzI0eDAgc3lzdGVtcwoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTkgU2VwIDIwMDM6CiAgLSBBZGQgQ0ZHX0ZBVUxUX0VDSE9fTElOS19ET1dOIG9wdGlvbiB0byBlY2hvIHRoZSBpbnZlcnRlZCBFdGhlcm5ldAogICAgbGluayBzdGF0ZSB0byB0aGUgZmF1bHQgTEVELgogIC0gSW4gTmV0TG9vcCwgbWFrZSB0aGUgRmF1bHQgTEVEIHJlZmxlY3QgdGhlIGxpbmsgc3RhdHVzLiAgVGhlIGxpbmsKICAgIHN0YXR1cyBnZXRzIHVwZGF0ZWQgb24gZW50cnksIGFuZCBvbiB0aW1lb3V0cy4KCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTggU2VwIDIwMDM6CiAgYWxsb3cgbWtpbWFnZSB0byBidWlsZCBhbmQgcnVuIG9uIEN5Z3dpbi1ob3N0ZWQgc3lzdGVtcwoKKiBQYXRjaCBieSBGcmFuayBN/GxsZXIsIDE4IFNlcCAyMDAzOgogIHVzZSBiaV9pbnRmcmVxIGluc3RlYWQgb2YgYmlfYnVzZnJlcSB0byBjb21wdXRlIGZlY19taWlfc3BlZWQgaW4KICBjcHUvbXBjOHh4L2ZlYy5jCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBTZXAgMjAwMzoKICBhZGQgdG9vbCB0byBjb21wdXRlIGZpbGVkcyBpbiB0aGUgUExQUkNSIHJlZ2lzdGVyIGZvciBNUEM4NngKCiogVXNlIElIX1RZUEVfRklMRVNZU1RFTSBmb3IgVFJBQiAiZGlzayIgaW1hZ2VzLgoKKiBGaXggYnVpbGQgcHJvYmxlbXMgdW5kZXIgRnJlZUJTRAoKKiBBZGQgZ2VuZXJpYyBmaWxlc3lzdGVtIGltYWdlIHR5cGUKCiogTWFrZSBmYXRsb2FkIHNldCBmaWxlc2l6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBlbmFibGUgYmFzaWMgLyBtZWRpdW0gLyBoaWdoLWVuZCBjb25maWd1cmF0aW9ucyBmb3IgUFBDaGFtZWxlb25FVkIKICBib2FyZDsgZml4IE5BTkQgY29kZQoKKiBlbmFibGUgVEZUUCBjbGllbnQgY29kZSB0byBzcGVjaWZ5IHRvIHRoZSBzZXJ2ZXIgdGhlIGRlc2lyZWQKICB0aW1lb3V0IHZhbHVlIChzZWUgUkZDLTIzNDkpCgoqIEltcHJvdmUgU0RSQU0gc2V0dXAgZm9yIFRSQUIgYm9hcmQKCiogU3VwcHJlc3MgYWxsIG91dHB1dCB3aXRoIHNwbGFzaHNjcmVlbiBjb25maWd1cmVkIG9ubHkgaWYgInNwbGFzaGltYWdlIgogIGlzIHNldAoKKiBGaXggcHJvYmxlbXMgd2l0aCBJMkMgc3VwcG9ydCBmb3IgbXBjNTIwMAoKKiBBZGFwdCBUUkFCIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG9fdXBkYXRlIHRvIG5ldyBtZW1vcnkgbGF5b3V0CgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciB3dGsgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBTaGFycCBMUTA2NVQ5RFI1MVUgTENEIGRpc3BsYXkKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gRml4ZXMgZm9yIE1QQzgyNjYgZGVmYXVsdCBjb25maWcKICAtIEFsbG93IGV0aF9sb29wYmFja190ZXN0KCkgb24gODI2MCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlIEZDQydzCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE3IFNlcCAyMDAzOgogIC0gdXBkYXRlIFJFQURNRSAoU0hPV19CT09UX1BST0dSRVNTIHZhbHVlcyBmb3IgY21kX25hbmQuYyBhbmQKICAgIGVudl9jb21tb24uYykKICAtIHNiYzgyNjAgdHdlYWtzCiAgLSBhZGp1c3QgImhlbHAiIG91dHB1dAoKKiBQYXRjaGVzIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gZml4IHNwZWxsaW5nIGVycm9ycwogIC0gc2V0IEdEX0ZMR19ERVZJTklUIGZsYWcgb25seSBhZnRlciBkZXZpY2UgZnVuY3Rpb24gcG9pbnRlcnMKICAgIGFyZSB2YWxpZAogIC0gQWxsb3cgQ0ZHX0FMVF9NRU1URVNUIG9uIHN5c3RlbXMgd2hlcmUgYWRkcmVzcyB6ZXJvIGlzbid0CiAgICB3cml0ZWFibGUKICAtIGVuYWJsZSAzLnJkIFVBUlQgKFNULVVBUlQpIG9uIFBYQShYU2NhbGUpIENQVXMKICAtIHRyaWdnZXIgd2F0Y2hkb2cgd2hpbGUgd2FpdGluZyBpbiBzZXJpYWwgZHJpdmVyCgoqIEFkZCBhdXRvLXVwZGF0ZSBjb2RlIGZvciBUUkFCIGJvYXJkIHVzaW5nIFVTQiBtZW1vcnkgc3RpY2tzLAogIHN1cHBvcnQgbmV3IGNvbmZpZ3VyYXRpb24gd2l0aCBtb3JlIG1lbW9yeQoKKiBkaXNhYmxlIE1QQzUyMDAgYnVzIHBpcGVsaW5pbmcgYXMgd29ya2Fyb3VuZCBmb3IgYnVzIGNvbnRlbnRpb24KCiogTW9kaWZ5IFhMQiBhcmJpdGVyIHByaW9yaXRpZXMgb24gTVBDNTIwMCBzbyBhbGwgZGV2aWNlcyB1c2Ugc2FtZQogIHByaW9yaXR5OyBjb25maWd1cmUgY3JpdGljYWwgaW50ZXJydXB0cyB0byBiZSBoYW5kbGVkIGxpa2UgZXh0ZXJuYWwKICBpbnRlcnJ1cHRzCgoqIE1ha2UgSVBCIGNsb2NrIG9uIE1HVDUxMDAvTVBDNTIwMCBjb25maWd1cmFibGUgaW4gYm9hcmQgY29uZmlnIGZpbGU7CiAgZ28gYmFjayB0byA2NiBNSHogZm9yIHN0YWJpbGl0eQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNSBTZXAgMjAwMzoKICAtIGFkZCBkZXNjcmlwdGlvbiBmb3IgbWlzc2luZyBDRkdfQ01EXyogZW50cmllcyBpbiB0aGUgUkVBRE1FIGZpbGUKICAtIHNhY3NuZyB0d2Vha3MKCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxNCBTZXAgMjAwMzoKICBlbmFibGUgd2F0Y2hkb2cgc3VwcG9ydCBmb3IgYWxsIE1QQzgyNHggYm9hcmRzIHRoYXQgaGF2ZSBhIHdhdGNoZG9nCgoqIE9uIE1QQzUyMDAsIHJlc3RyaWN0IEZFQyB0byBhIG1heGltdW0gb2YgMTAgTWJwcyB0byB3b3JrIGFyb3VuZCB0aGUKICAiTm9uLW9jdGV0IEFsaWduZWQgRnJhbWUiIGVycm9ycyB3ZSBzZWUgYXQgMTAwIE1icHMKCiogUGF0Y2ggYnkgU2hhcmFkIEd1cHRhLCAxNCBTZXAgMjAwMzoKICBmaXggU1BSIG51bWJlcnMgZm9yIHVwcGVyIEJBVCByZWdpc3RlciAoW0lEXUJBVFs0LTddW1VMXSkKCiogUGF0Y2ggYnkgbGxhbmRyZSwgMTEgU2VwIDIwMDM6CiAgdXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uRVZCIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMTMgU2VwIDIwMDM6CiAgdmFyaW91cyBjaGFuZ2VzIHRvIFZDTUE5IGJvYXJkIHNwZWNpZmljIGZpbGVzCgoqIEFkZCBJMkMgc3VwcG9ydCBmb3IgTUdUNTEwMCAvIE1QQzUyMDAKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDExIFNlcCAyMDAzOgogIENoYW5nZWQgZGVmYXVsdCBtZW1vcnkgb3B0aW9uIG9uIE1QQzgyNjZBRFMgdG8gTk9UIGJlIFBhZ2UgQmFzZWQKICBJbnRlcmxlYXZlLCBzaW5jZSB0aGlzIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgd2l0aCB0aGUgc3RhbmRhcmQKICAxNk1CIERJTU0KCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMiBTZXAgMjAwMzoKICBmaXggTWFrZWZpbGUgc2V0dGluZ3MgZm9yIHNrOTggZHJpdmVyCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgU2VwIDIwMDM6CiAgLSBuZXcgYm9hcmRzIGFkZGVkOiBEUDQwNSwgSFVCNDA1LCBQTFU0MDUsIFZPSDQwNQogIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKICAtIGNwdS9wcGM0eHgvc2RyYW0uYzogZGlzYWJsZSBtZW1vcnkgY29udHJvbGxlciBiZWZvcmUgc2V0dGluZwogICAgZmlyc3QgdmFsdWVzCiAgLSBjcHUvcHBjNHh4LzQwNV9wY2kuYzogc2V0IHZlbmRvciBpZCBvbiBQUEM0MDVFUCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIFNlcCAyMDAzOgogIGFkZCBidXJuLWluIHRlc3RzIGZvciBUUkFCIGJvYXJkCgoqIEVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSBvbiBNUEM1MjAwIGJvYXJkCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBTZXAgMjAwMzoKICAtIGZpeCBVU0IgZGF0YSBwb2ludGVyIGFzc2lnbm1lbnQgZm9yIGJ1bGsgb25seSB0cmFuc2Zlci4KICAtIHByZXZlbnQgdG8gZGlzcGxheSBlcmFzZWQgZGlyZWN0b3JpZXMgaW4gRkFUIGZpbGVzeXN0ZW0uCgoqIENoYW5nZSBvdXRwdXQgZm9ybWF0IGZvciBOQU5EIGZsYXNoIC0gbWFrZSBpdCBsb29rIGxpa2UgZm9yIG90aGVyCiAgbWVtb3J5LCB0b28KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC44Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgOSBTZXAgMjAwMzoKICBhZGQgRkFUIHN1cHBvcnQgZm9yIElERSwgU0NTSSBhbmQgVVNCCgoqIFBhdGNoZXMgYnkgR2xlYiBOYXRhcG92LCAyIFNlcCAyMDAzOgogIC0gY2xlYW51cCBvZiBQT1NUIGNvZGUgZm9yIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKICAtIE1QQzgyNHggbG9ja3Mgd2F5MCBvZiBkYXRhIGNhY2hlIGZvciB1c2UgYXMgaW5pdGlhbCBSQU07CiAgICB0aGlzIHBhdGNoIHVubG9ja3MgaXQgYWZ0ZXIgcmVsb2NhdGlvbiB0byBSQU0gYW5kIGludmFsaWRhdGVzCiAgICB0aGUgbG9ja2VkIGVudHJpZXMuCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMzAgQXVnIDIwMDM6CiAgbmV3IEkyQyBkcml2ZXIgZm9yIG1wYzEwNyBicmlkZ2UuIE5vdyB3b3JrcyBmcm9tIGZsYXNoLgoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAxMSBBdWcgMjAwMzoKICAtIEpGRlMyOiBmaXggdHlwbyBpbiBjb21tb24vY21kX2pmZnMyLmMKICAtIEpGRlMyOiBmaXggQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTIG9wdGlvbgogIC0gSkZGUzI6IHJlbW92ZSBub2RlIHZlcnNpb24gMCB3YXJuaW5nCiAgLSBKRkZTMjogYWNjZXB0IEpGRlMyIFBBRERJTkcgbm9kZXMKICAtIFNYTkk4NTVUOiBhZGQgQU0yOUxWODAwIHN1cHBvcnQKICAtIFNYTkk4NTVUOiBtb3ZlIGVudmlyb25tZW50IGZyb20gRUVQUk9NIHRvIGZsYXNoCiAgLSBTWE5JODU1VDogYm9vdCBmcm9tIEpGRlMyIGluIE5PUiBvciBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxMSBBdWcgMjAwMzoKICBmaXhlcyBmb3IgSTJDIG9uIE1QQzgyNDAKICAtIGZpeCBpMmNfd3JpdGUgcm91dGluZQogIC0gZml4IGlwcm9iZSBjb21tYW5kCiAgLSBlbGltaW5hdGVzIHVzZSBvZiBnbG9iYWwgdmFyaWFibGVzLCBwbHVzIGRlYWQgY29kZSwgY2xlYW51cC4KCiogQWRkIHN1cHBvcnQgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgRGV2aWNlcyAoQkJCKQogICh0ZXN0ZWQgd2l0aCBVU0IgbWVtb3J5IHN0aWNrcyBvbmx5KQoKKiBBdm9pZCBmbGlja2VyIG9uIFRSQUIncyBWRkQKCiogQWRkIHN1cHBvcnQgZm9yIFNLOTh4eCBkcml2ZXIKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBTTDgyNDUgYm9hcmQKCiogU3VwcG9ydCBJY2VDdWJlIGJvYXJkIGNvbmZpZ3VyYXRpb25zIHdpdGggMSB4IEFNRCBBTTI5TFYwNjUgKDggTUIpCiAgb3IgMSB4IEFNMjlMVjY1MiAodHdvIExWMDY1IGluIG9uZSBjaGlwID0gMTYgTUIpOwogIFJ1biBJUEIgYXQgMTMzIE1oejsgYWRqdXN0IHRoZSBNSUkgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZ2x5CgoqIFNldCBCUkdfQ0xLIG9uIFBNODI1LzgyNiB0byA2NE1IeiAoVkNPX09VVCAvIDQsIGluc3RlYWQgb2YgMTYgIE1IeikKICB0byBhbGxvdyBmb3IgbW9yZSBhY2N1cmF0ZSBiYXVkcmF0ZSBzZXR0aW5ncwogIChlcnJvciBub3cgMC43JSBhdCAxMTUga2JwcywgaW5zdGVhZCBvZiAzLjUlIGJlZm9yZSkKCiogUGF0Y2ggYnkgQW5kcmVhcyBNb2hyLCA0IFNlcCAyMDAzOgogIEZpeCBhIGxvdCBvZiBzcGVsbGluZyBlcnJvcnMKCiogQWRkIHN1cHBvcnQgZm9yIFBQQ2hhbWVsZW9uIEV2YWwgQm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFAzRzQgYm9hcmQKCiogRml4IHByb2JsZW0gd2l0aCBNR1Q1MTAwIEZFQyBkcml2ZXI6IGFkZCAiZWFybHkiIE1BQyBhZGRyZXNzCiAgaW5pdGlhbGl6YXRpb24KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgNyBBdWcgMjAwMzoKICBjaGVjayBCQ1NSIHRvIGRldGVjdCBpZiB0aGUgYm9hcmQgaXMgY29uZmlndXJlZCBpbiBQQ0kgbW9kZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40Ljc6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgUmFnaHUgS3Jpc2huYXByYXNhZCwgNyBBdWcgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgQWRkZXIgSUkgTVBDODUyVCBtb2R1bGUKCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxOSBBdWcgMjAwMzoKICBmaXggVEkgSW5ub3ZhdG9yL09NQVAxNTEwIHBpbiBjb25maWdzCgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMTggQXVnIDIwMDMKICAtIGFkZCBzdXBwb3J0IGZvciBhcm05MjZlanMgY3B1IGNvcmUKICAtIGFkZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE2MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE0IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBiemlwMiB1bmNvbXByZXNzaW9uCgoqIEFkZCBHQ0MgbGlicmFyeSB0byBleGFtcGxlcy9NYWtlZmlsZSBzbyBHQ0MgdXRpbGl0eSBmdW5jdGlvbnMgd2lsbAogIGJlIHJlc29sdmVkLCB0b28KCiogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZCB1c2luZyBzb2Z0d2FyZSBJMkMgZHJpdmVyCiAgKGJlY2F1c2Ugb2YgYmV0dGVyIHJlc3BvbnNlIHRvIGlwcm9iZSBjb21tYW5kKTsgZml4IHByb2JsZW0gd2l0aAogICJyZXNldCIgY29tbWFuZAoKKiBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjggQXVnIDIwMDM6CiAgQWRkZWQgQ09ORklHX0JPT1RQX0ROUzIgYW5kIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FIHRvCiAgQ09ORklHX0JPT1RQX01BS1MgKHNlZSBSRUFETUUpLgoKKiBGaXggSUNVODYyIGVudmlyb25tZW50IHByb2JsZW0KCiogRml4IFJBTSBzaXplIGRldGVjdGlvbiBmb3IgUk1VIGJvYXJkCgoqIEltcGxlbWVudCAicmVzZXQiIGZvciBNR1Q1MTAwL01QQzUyMDAgc3lzdGVtcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjY6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBFdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gb24gSU5DQS1JUCB3b3JrIGZvciBhbGwgY2xvY2sgcmF0ZXM7CiAgYWxsb3cgc2VsZWN0aW9uIG9mIGNsb2NrIGZyZXF1ZW5jeSBhcyAibWFrZSIgdGFyZ2V0CgoqIEltcGxlbWVudCBtZW1vcnkgYXV0b3NpemluZyBjb2RlIGZvciBJY2VDdWJlIGJvYXJkcwoKKiBDb25maWd1cmUgbmV0d29yayBwb3J0IG9uIElOQ0EtSVAgZm9yIGF1dG9uZWdvdGlhdGlvbgoKKiBGaXggb3ZlcmZsb3cgcHJvYmxlbSBpbiBuZXR3b3JrIHRpbWVvdXQgY29kZQoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCA4IEF1ZyAyMDAzOgogIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMCAoY3JjMzJfbm9fY29tcCwgdG9vKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC41Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVwZGF0ZSBmb3IgVFFNIGJvYXJkIGRlZmF1bHRzOgogIGRpc2FibGUgY2xvY2tzX2luX21oeiwgZW5hYmxlIGJvb3QgY291bnQgbGltaXQKCiogUmVtb3ZlZCB0b29scy9nZGIgZnJvbSAibWFrZSBhbGwiIHRhcmdldC4gIEFkZGVkIG1ha2UgdGFyZ2V0ICJnZGJ0b29scyIKICBpbiB0b3BsZXZlbCBkaXJlY3RvcnkgaW5zdGVhZC4gIFJlbW92ZWQgYXN0ZXN0LmMgZnJvbSB0b29scy9nZGIgYmVjYXVzZQogIGl0IGlzIG5vIGxvbmdlciByZWxldmFudC4KCiogRml4IFBDSSBzdXBwb3J0IGZvciBNUEM1MjAwIC8gSWNlQ3ViZSBCb2FyZAoKKiBNYXAgSVNQMTM2MiBVU0IgT1RHIGNvbnRyb2xsZXIgZm9yIE5TQ1UgYm9hcmQKCiogUGF0Y2ggYnkgQnJhZCBQYXJrZXIsIDAyIEF1ZyAyMDAzOgogIGZpeCBzYzUyMF9jZHAgcHJvYmxlbXMKCiogSW1wbGVtZW50IEJvb3QgQ3ljbGUgRGV0ZWN0aW9uIChSZXEuIDIuMyBvZiBPU0RMIENHTCBSZXFpcmVtZW50cykKCiogQWxsb3cgZXJhc2UgY29tbWFuZCB0byBjcm9zcyBmbGFzaCBiYW5rIGJvdW5kYXJpZXMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBKdWwgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTHludXhXb3JrcyBLZXJuZWwgRG93bmxvYWRhYmxlIEltYWdlcyAoS0RJcykuCiAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNSBKdWwgMjAwMzoKICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgogIGZpeCB0eXBvIGluIG1wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI0IEp1bCAyMDAzOgogIEZpeGVzIGZvciBjbWRfbmFuZC5jOgogIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIGRldmljZXMgd2l0aCBubyBSZWFkeS9CdXN5IHNpZ25hbCBob29rZWQgdXAuCiAgLSBBZGRlZCBPTUFQMTUxMCByZWFkL3dyaXRlIHByb3RlY3QgaGFuZGxpbmcuCiAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCiAgICBmb3Igbm9uLUpGRlMyLgogIC0gU3dpdGNoZWQgZGVmYXVsdCBFQ0MgdG8gYmUgSkZGUzIuCgoqIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMAoKKiBQcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvIGFjY2VzcwogIHRoZSAnZ2xvYmFsX2RhdGEnIHN0cnVjdHVyZQogIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KCiogTWFrZSBJY2VDdWJlIE1HVDUxMDAgRkVDIGRyaXZlciB3b3JrCgoqIEltcGxlbWVudCBuZXcgbWVjaGFuaXNtIHRvIGV4cG9ydCBVLUJvb3QncyBmdW5jdGlvbnMgdG8gc3RhbmRhbG9uZQogIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CiAgdXNlIGEganVtcCB0YWJsZTsgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgZm9yIGRldGFpbHMKCiogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CiAgYWRkZWQgc3VwcG9ydCBmb3IgVW5pdHkgT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIzIEp1bCAyMDAzOgogIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwoKKiBGaXggY29sZCBib290IGRldGVjdGlvbiBmb3IgbG9nIGJ1ZmZlciByZXNldAoKKiBSZXR1cm4gZXJyb3IgZm9yIGludmFsaWQgbGVuZ3RoIHNwZWNpZmllcnMgd2l0aCAiY3AuWCIgZXRjLgoKKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKCiogQWxsb3cgZm9yIENPTkZJR19TUExBU0hfU0NSRUVOIGV2ZW4gd2hlbiBubyBleHBsaWNpdAogIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDE4IEp1bCAyMDAzOgogIC0gZml4IGVuZGluYW5lc3MgcHJvYmxlbSBpbiBjcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMxLmMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE4IEp1bCAyMDAzOgogIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCiAgLSBmaXggcHJpbnRvdXQgb2YgYmF1ZHJhdGUgZm9yICJsb2FkYiA8bG9hZGFkZHI+IDxiYXVkcmF0ZT4iCgoqIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKICB0byBtYWtlIHNlbGVjdGlvbiBlYXNpZXIuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IEp1bCAyMDAzOgogIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE3IEp1bHkgMDM6CiAgLSBGaXhlZCBidWcgaW4gT01BUDE1MTAgYmF1ZCByYXRlIGRpdmlzb3Igc2V0dGluZ3MuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE2IEp1bHkgMjAwMzoKICBNUEM4NjBGQURTIGZpeGVzOgogIC0gYWRkIE1QQzg2eEFEUyBzdXBwb3J0ICh1c2VzIE1QQzg2eEFEUy5oKQogIC0gYWRkIDg2NlAvVCBjb3JlIHN1cHBvcnQgKGFsc28gTVBDODU5VC9NUEM4NTlEU0wvTVBDODUyVCkKICAgIG8gUExQUkNSIGNoYW5nZXMKICAgIG8gQlJHIGNoYW5nZXMgKEVYVEFML1hUQUwgcmVzdHJpY3RlZCB0byAxME1IeikKICAgIG8gZG9uJ3QgdHJ1c3QgZ2NsaygpIHNvZnR3YXJlIG1lYXN1cmVtZW50IGJ5IGRlZmF1bHQsIGRlcGVuZCBvbgogICAgICBDT05GSUdfOHh4X0dDTEtfRlJFUQogIC0gYWRkIERSQU0gU0lNTSBub3QgaW5zdGFsbGVkIGRldGVjdGlvbgogIC0gdXNlIG1vcmUgImNvcnJlY3QiIFNEUkFNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCiAgLSBhbGxvdyBkaWZmZXJlbnQgU0RSQU0gc2l6ZXMgKDh4eEFEUyBoYXMgOE0pCiAgLSBkZWZhdWx0IERFUiBpcyAwCiAgLSByZW1vdmUgdW51c2VkIE1BTVIgZGVmaW5lcyBmcm9tIEZBRFM4NjBULmggKGFsbCBkb25lIGluIGZhZHMuYykKICAtIHJlbmFtZSBNQU1SL01CTVIgZGVmaW5lcyB0byBiZSBtb3JlIGNvbnNpc3RlbnQuIFNob3VsZCBldmVudHVhbGx5CiAgICBiZSBtZXJnZWQgaW50byBNeE1SIHRvIGJldHRlciByZWZsZWN0IHRoZSBQb3dlclFVSUNDIGRhdGFzaGVldC4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVsIDIwMDM6CiAgc3VwcG9ydCBuZXcgTW90b3JvbGEgUFEyRkFEUy1aVSBldmFsdWF0aW9uIGJvYXJkIHdoaWNoIHJlcGxhY2VkCiAgTVBDODI2MEFEUyBhbmQgTVBDODI2NkFEUwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIEljZUN1YmUgYm9hcmQgKHdpdGggTUdUNTEwMCBhbmQgTVBDNTIwMCBDUFVzKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUdUNTEwMCBhbmQgTVBDNTIwMCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxNSBKdWwgMjAwMzoKICB1cGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMDQgSnVsIDIwMDMKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGFybTkyNXQgY3B1IGNvcmUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTUxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAxNCBKdWwgMjAwMzoKICAtIGFkZCBJMkMgc3VwcG9ydCBmb3IgczNjMjQwMCBzeXN0ZW1zICh0cmFiIGJvYXJkKQogIC0gKHJlLSkgYWRkICJwaW5nIiB0byBjb21tYW5kIHRhYmxlCgoqIEZpeCBoYW5kbGluZyBvZiAic2xvdyIgUE9TVCByb3V0aW5lcwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDAzOgogIC0gQ29ycmVjdCBmbGFzaCBhbmQgSkZGUzIgc3VwcG9ydCBmb3IgTVBDODI2MEFEUwogIC0gZml4IFBWUiB2YWx1ZXMgYW5kIGNsb2NrIGdlbmVyYXRpb24gZm9yIFBvd2VyUVVJQ0MgSUkgZmFtaWx5CiAgICAoODI3MC84Mjc1LzgyODApCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDA4IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIE02OEsgdGFyZ2V0cwoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMyBKdWw6CiAgLSBGaXggUENJIGNvbmZpZyB0YWJsZSBmb3IgQTMwMDAKICAtIEZpeCBpb2Jhc2UgZm9yIG5hdHNlbWkuYwogICAgKFBDSV9CQVNFX0FERFJFU1NfMCBpcyB0aGUgSU8gYmFzZSByZWdpc3RlciBmb3IgRFA4MzgxNSkKCiogQWxsb3cgdG8gZW5hYmxlICJzbG93IiBQT1NUIHJvdXRpbmVzIGJ5IGtleSBwcmVzcyBvbiBwb3dlci1vbgoqIEZpeCB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgc3dpdGNoaW5nIG9mIExDRCBiYWNrbGlnaHQgb24gTFdNT04KKiBUd2VhayBvdXRwdXQgZm9ybWF0IGZvciBMV01PTgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEp1bCAyMDAzOgogIC0gRml4IGJ1ZyBpbiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRS4KICAtIEFSNDA1IGNvbmZpZyB1cGRhdGVkLgogIC0gT0NSVEMvT1JTRzogYnNwIGNvbW1hbmQgYWRkZWQuCiAgLSBBU0g0MDUgYnNwIHVwZGF0ZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBOU0NVIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjNNLCBUUU04NTBNLCBUUU04NTVNIGFuZCBUUU04NjBNIG1vZHVsZXMKCiogQWRkIHN1cHBvcnQgZm9yIEFtMjlMVjE2ME1MLCBBbTI5TFYzMjBNTCwgYW5kIEFtMjlMVjY0ME1MCiAgbWlycm9yIGJpdCBmbGFzaCBvbiBUUU04eHhNIG1vZHVsZXMKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDMwIEp1biAyMDAzOgogIGdldCByaWQgb2YgTUtfQ01EX0VOVFJZIG1hY3JvOyB1cGRhdGUgZG9jL1JFQURNRS5jb21tYW5kCgoqIFBhdGNoIGJ5IFNlYiBKYW1lcywgMzAgSnVuIDIwMDM6CiAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIEkyQyBjb25maWd1cmF0aW9uIGluIFJFQURNRQoKKiBGaXggcHJvYmxlbXMgd2l0aCBwcmV2aW91cyBsb2cgYnVmZmVyICJmaXhlcyIKCiogRml4IG1pbm9yIGhlbHAgdGV4dCBpc3N1ZXMKCiogImxvZyBhcHBlbmQiIGRpZCBub3QgYXBwZW5kIGEgbmV3bGluZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHNvbWUgbWlzc2luZyBjb21tYW5kcywgY2xlYW51cCBoZWFkZXIgZmlsZXMKICAoYXV0b3NjcmlwdCwgYm1wLCBic3AsIGZhdCwgbW1jLCBuYW5kLCBwb3J0aW8sIC4uLikKCiogUmV3cml0ZSBjb21tYW5kIGxvb2t1cCBhbmQgaGVscCBjb21tYW5kIChmaXggcHJvYmxlbXMgd2l0aCBidWJibGUKICBzb3J0IHdoZW4gc29ydGluZyBjb21tYW5kIG5hbWUgbGlzdCkuIE1pbm9yIGNsZWFudXAgaGVyZSBhbmQgdGhlcmUuCgoqIE1lcmdlIGZyb20gInN0YWJsZSBicmFuY2giLCB0YWcgTEFCRUxfMjAwM18wNl8yOF8xODAwLXN0YWJsZToKICAtIEFsbG93IHRvIGNhbGwgc3lzbW9uIGZ1bmN0aW9uIGludGVyYWN0aXZlbHkKICAtIFBJQyBvbiBMV01PTiBib2FyZCBuZWVkcyBkZWxheSBhZnRlciBwb3dlci1vbgogIC0gQWRkIG1pc3NpbmcgUlNSIGRlZmluaXRpb25zIGZvciBNUEM4eHgKICAtIEltcHJvdmUgbG9nIGJ1ZmZlciBoYW5kbGluZzogZ3VhcmFudGVlIGNsZWFuIHJlc2V0IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgc3VwcG9ydCBmb3IgRVhCSVRHRU4gYm9hcmQgKGFrYSAiZ2VuaWUiKQogIC0gQWRkIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBDb2RlIGNsZWFudXA6CiAgLSByZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCBDKysgY29tbWVudHMsIGV0Yy4KICAtIHNwbGl0IGNtZF9ib290LmMgKHNlcGFyYXRlIGNtZF9iZGluZm8uYyBhbmQgY21kX2xvYWQuYykKCiogUGF0Y2hlcyBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjUgSnVuIDIwMDM6CiAgLSBtYWpvciByZXdvcmsgb2YgY29tbWFuZCBzdHJ1Y3R1cmUKICAgICh3b3JrIGRvbmUgbW9zdGx5IGJ5IE1pY2hhbCBDZW5kcm93c2tpIGFuZCBKb2FraW0gS3Jpc3RpYW5zZW4pCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjYgSnVuIDIwMDM6CiAgLSBjc2IyMjYgY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBjcmVkaXRzIGZvciBsb2dvZGwgcG9ydCB1cGRhdGVkCiAgLSBpbm5va29tIGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gbG9nb2RsIHRyZWUgdXBkYXRlLCBzdGlsbCB3aXRoIGNvZGluZyBzdHlsZSBpbmNvbnNpc3RlbmNpZXMKICAtIGFkZGVkIE9DTSBmb3IgcHBjNDA1IHdhcm5pbmcgdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyNSBKdW4gMjAwMzoKICB1cGRhdGUgTmV0VmlhIHdpdGggVjIgYm9hcmQgc3VwcG9ydAoKKiBIZWFkZXIgZmlsZSBjbGVhbnVwIGZvciBBUk0KCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjQgSnVuIDIwMDM6CiAgLSBtYWtlIHN1cmUgdG8gdXNlIG9ubHkgVS1ib290IHByb3ZpZGVkIGhlYWRlciBmaWxlcwogIC0gZml4IHByb2JsZW1zIHdpdGggIi5yb2RhdGEuc3RyMS40IiBzZWN0aW9uIGFzIHVzZWQgYnkgR0NDLTMueAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEp1biAyMDAzOgogIC0gVXBkYXRlIGVzZCBBU0g0MDUgYm9hcmQgZmlsZXMuCiAgLSBVcGRhdGUgZXNkIERBU0FfU0lNIGNvbmZpZyBmaWxlLgogIC0gQWRkIHBpbmcgY29tbWFuZCB0byBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIzIEp1biAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMyBKdW4gMjAwMzoKICAtIGNsZWFudXAgb2YgR0NDIDMueCBjb21waWxlciB3YXJuaW5ncwoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgNCBKdW4gMjAwMzoKICBhZGQgbGFyZ2UgbWVtb3J5IHN1cHBvcnQgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEVuYWJsZWQgc3RhbmRhcmQgdS1ib290IGRldmljZSBhYnN0cmFjdGlvbiBmb3IgQVJNCiAgLSBFbmFibGVkIGNvbnNvbGUgZGV2aWNlIGZvciBBUk0KICAtIEluaXRpbGl6ZWQgYmlfYmF1ZHJhdGUgZm9yIEFSTQoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMjMgQXByIDIwMDM6CiAgZml4IGJ5dGUgb3JkZXIgZm9yIDgyNHggSTJDIGFkZHJlc3NlcyAod3JpdGUgb3ApCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIwIEp1biAyMDAzOgogIC0gaHltb2QgdXBkYXRlCiAgLSBjbGVhbnVwIChlc3BlY2lhbGx5IGZvciBnY2MtMy54IGNvbXBpbGVycykKCiogUGF0Y2ggYnkgVG9tIEd1aWxsaWFtcywgMjAgSnVuIDIwMDM6CiAgYWRkZWQgQ09ORklHXzc1MEZYIHN1cHBvcnQgZm9yIElCTSA3NTBGWCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IERldmluIENydW1iLCAwMiBBcHIgMjAwMzoKICBGaXggY2xvY2sgZGl2aWRlciByb3VuZGluZyBwcm9ibGVtIGluIGRyaXZlcnMvc2VyaWFsLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEZpeGVkIHNtYzkxYzExMSBkcml2ZXIgdG8gc3luYyB3aXRoIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQKICAgIChkcml2ZXIvc21jOTFjMTExLmMpLgogIC0gQWRkZWQgZXRoX2luaXQgZXJyb3IgcmV0dXJuIGNoZWNrIGluIE5ldExvb3AgKG5ldC9uZXQuYykuCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOSBKdW5lIDIwMDM6CiAgQWRkZWQgc3VwcG9ydCBmb3IgQTMwMDAgU0JDIGJvYXJkIChBcnRpcyBNaWNyb3N5c3RlbXMgSW5jLikKCiogUGF0Y2hlcyBieSBNdXJyYXkgSmVuc2VuLCAxNyBKdW4gMjAwMzoKICAtIEh5bW9kIGJvYXJkIGRhdGFiYXNlIG1vZHM6IGFkZCAid2hvIiBmaWVsZCBhbmQgbmV3IHhpbGlueCBjaGlwIHR5cGVzCiAgLSBwcm92aWRlIG5ldyAiaW5pdF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBzbyBjb2RlIGV4dGVybmFsIHRvCiAgICAiY29tbW9uL21haW4uYyIgY2FuIHVzZSB0aGUgInJlc2V0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIGJlZm9yZQogICAgZW50ZXJpbmcgdGhlIG1haW4gbG9vcAogIC0gYWRkIERUVCBzdXBwb3J0IGZvciBhZG0xMDIxIChuZXcgZmlsZSBkdHQvYWRtMTAyMS5jOyBjb25maWcKICAgIHNsaWdodGx5IGRpZmZlcmVudC4gc2VlIGluY2x1ZGUvY29uZmlncy9oeW1vZC5oIGZvciBhbiBleGFtcGxlCiAgICAocmVxdWlyZXMgQ09ORklHX0RUVF9BRE0xMDIxLCBDT05GSUdfRFRUX1NFTlNPUlMsIGFuZAogICAgQ0ZHX0RUVF9BRE0xMDIxIGRlZmluZWQpCiAgLSBhZGQgbmV3ICJlZXByb21fcHJvYmUoKSIgZnVuY3Rpb24gd2hpY2ggaGFzIHNpbWlsYXIgYXJncyBhbmQKICAgIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAiZWVwcm9tX3JlYWQoKSIgZXRjLgogIC0gYWRkIDgyNjAgRkNDIGV0aGVybmV0IGxvb3BiYWNrIGNvZGUgKG5ldyAiZXRoX2xvb3BiYWNrX3Rlc3QoKSIKICAgIGZ1bmN0aW9uIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmaW5pbmcgQ09ORklHX0VUSEVSX0xPT1BCQUNLX1RFU1QpCiAgLSBnZGJ0b29scyBjb3B5cmlnaHQgdXBkYXRlCiAgLSBlbnN1cmUgdGhhdCBzZXRfbXNyKCkgZXhlY3V0ZXMgdGhlICJzeW5jIiBhbmQgImlzeW5jIiBpbnN0cnVjdGlvbnMKICAgIGFmdGVyIHRoZSAibXRtc3IiIGluc3RydWN0aW9uIGluIGNwdS9tcGM4MjYwL2ludGVycnVwdHMuYwogIC0gODI2MCBJL08gcG9ydHMgZml4OiBPcGVuIERyYWluIHNob3VsZCBiZSBzZXQgbGFzdCB3aGVuIGNvbmZpZ3VyaW5nCiAgLSBhZGQgU0lVIElSUSBkZWZpbmVzIGZvciA4MjYwCiAgLSBhbGxvdyBMRFNDUklQVCBvdmVycmlkZSBhbmQgT0JKQ0ZMQUdTIGluaXRpYWxpemF0aW9uOiBjaGFuZ2UgdG8KICAgIGNvbmZpZy5tayB0byBhbGxvdyBib2FyZCBjb25maWd1cmF0aW9ucyB0byBvdmVycmlkZSB0aGUgR05VCiAgICBsaW5rZXIgc2NyaXB0LCBzZWxlY3RlZCB2aWEgdGhlIExEU0NSSVBULCBtYWtlIHZhcmlhYmxlLCBhbmQgdG8KICAgIGdpdmUgYW4gaW5pdGlhbCB2YWx1ZSB0byB0aGUgT0JKQ0ZMQUdTIG1ha2UgdmFyaWFibGUKICAtIDgyNjAgaTJjIGVuaGFuY2VtZW50OgogICAgbyBjb3JyZWN0bHkgZXh0ZW5kcyB0aGUgdGltZW91dCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgYWxsCiAgICAgIHF1ZXVlZCBtZXNzYWdlcyBmb3IgYm90aCB0cmFuc21pdCBhbmQgcmVjZWl2ZQogICAgbyB3aWxsIG5vdCBjb250aW51ZSB3aXRoIHJlY2VpdmUgaWYgdHJhbnNtaXQgdGltZXMgb3V0CiAgICBvIGVuc3VyZXMgdGhhdCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgZG9uZSBmb3IgYWxsIHF1ZXVlZCB0eAogICAgICBhbmQgcnggbWVzc2FnZXMKICAgIG8gY29ycmVjdGx5IGRldGVjdHMgYm90aCB0eCBhbmQgcnggdGltZW91dHMsIG9ubHkgZGVsaXZlcnMgb25lIHRvCiAgICAgIHRoZSBjYWxsYmFjaywgYW5kIGRvZXMgbm90IG92ZXJ3cml0ZSBhbiBlYXJsaWVyIGVycm9yCiAgICBvIGxvZ2ljIGluIGkyY19wcm9iZSBub3cgY29ycmVjdAogIC0gYWRkICJ2cHJpbnRmKCkiIGZ1bmN0aW9uIHNvIHRoYXQgInBhbmljKCkiIGZ1bmN0aW9uIGNhbiBiZQogICAgdGVjaG5pY2FsbHkgY29ycmVjdAogIC0gbWFueSBIeW1vZCBib2FyZCBjaGFuZ2VzCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNCBKdW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBMb2dvdHJvbmljIERMIGRhdGFsb2dnZXIgYm9hcmQKICAtIGNsZWFudXAgc2VyaWFsIGxpbmUgYWZ0ZXIga2VybWl0IGJpbmFyeSBkb3dubG9hZAogIC0gYWRkIGRlYnVnWCBtYWNybyAoZGVidWcgbGV2ZWwgc3VwcG9ydCkKICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QuCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxMiBKdW4gMjAwMzoKICAtIHJld3JpdGUgb2YgdGhlIFMzQzI0WDAgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgc3R1ZmYKICAtICJkcml2ZXIiIGZvciB0aGUgYnVpbHQtaW4gUzNDMjRYMCBSVEMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMiBKdW4gMjAwMzoKICAtIEFkZCBNSUkgc3VwcG9ydCBhbmQgRXRoZXJuZXQgUEhZIGluaXRpYWxpemF0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkCiAgLSBGaXggaW5jb3JyZWN0IFNJVU1DUiBpbml0aWFsaXNhdGlvbiBjYXVzZWQgYnkgd3JvbmcgSGFyZCBSZXNldAogICAgY29uZmlndXJhdGlvbiB3b3JkIHN1cHBsaWVkIGJ5IEZQR0Egb24gc29tZSBNUEM4MjYwQURTIGJvYXJkcwoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTAgSnVuIDIwMDM6CiAgVW5pZnkgc3RhdHVzIExFRCBpbnRlcmZhY2UKCiogQWRkIHN1cHBvcnQgZm9yIERTMTI4ODcgUlRDOyBhZGQgUlRDIHN1cHBvcnQgZm9yIEFUQyBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAxMSBKdW4gMjAwMzoKICBNb2RpZmljYXRpb25zIGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQKICAtIEFkZCBBdG1lbCBEYXRhRmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KICAtIEFkZCBwb3NzaWJpbGl0eSB0byBib290IGEgTGludXggZnJvbSBEYXRhRmxhc2ggd2l0aCBCT09UTSBjb21tYW5kLgogIC0gQWRkIEZsYXNoIGRldGVjdGlvbiBvbiBBdG1lbCBBVDkxUk05MjAwREsKICAgIChiZXR3ZWVuIEF0bWVsIEFUNDlCVjE2MTQgYW5kIEFUNDlCVjE2MTRBIGZsYXNoZXMpCiAgLSBSZXBsYWNlIG9sZCBFdGhlcm5ldCBQSFkgbGF5ZXIgZnVuY3Rpb25zCiAgLSBDaGFuZ2UgbGluayBhZGRyZXNzCgoqIFBhdGNoIGJ5IEZyYW5rIFNtaXRoLCA5IEp1biAyMDAzOgogIHVzZSBDUklUX0VYQ0VQVElPTiBmb3IgbWFjaGluZSBjaGVjayBvbiA0eHgKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTMgSnVuIDIwMDM6CiAgYWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlICJjYXJpbmZvIiBjb21tYW5kIGluIGNtZF9pbW1hcC5jCgoqIEZpeCBDT05GSUdfTkVUX01VTFRJIHN1cHBvcnQgaW4gaW5jbHVkZS9uZXQuaAoKKiBQYXRjaGVzIGJ5IEt5bGUgSGFycmlzLCAxMyBNYXIgMjAwMzoKICAtIEFkZCBGQVQgcGFydGl0aW9uIHN1cHBvcnQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIEZBVAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciB2aWRlbwogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBFbmFibGUgTU1DIGFuZCBGQVQgZm9yIGx1YmJvY2sgYm9hcmQKICAtIE90aGVyIG1pc2MgY2hhbmdlcyBmb3IgbHViYm9jayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIEFwcmlsIDAyLCAyMDAzOgogIGZpeCBmb3IgU01TQzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDQgSnVuIDIwMDM6CiAgbWFrZSBwcGM0MDUgZXRoZXJuZXQgZHJpdmVyIGNvbXBhdGlibGUgd2l0aCBDT05GSUdfTkVUX01VTFRJIG9wdGlvbgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IEp1biAyMDAzOgogIC0gUFBDNHh4OiBGaXggYnVnIGZvciBpbml0aWFsIHN0YWNrIGluIGRhdGEgY2FjaGUgYXMgcG9pbnRlZCBvdXQgYnkKICAgIFRob21hcyBTY2hhZWZlciAodHNjaGFlZmVyQGdpZ2Etc3RyZWFtLmRlKS4gTm93IGluaXRhbCBzdGFjayBpbgogICAgZGF0YSBjYWNoZSBjYW4gYmUgdXNlZCBldmVuIGlmIHRoZSBjaGlwIHNlbGVjdCBpcyBpbiB1c2UuCiAgLSBDRkdfUlhfRVRIX0JVRkZFUiBhZGRlZCB0byBzZXQgdGhlIGV0aGVybmV0IHJlY2VpdmUgYnVmZmVyIGNvdW50CiAgICAoc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikuCiAgLSBDaGFuZ2VkIGNvbmZpZyBmaWxlcyBvZiBDT05GSUdfRUVQUk8xMDAgYm9hcmRzIHRvIHVzZSB0aGUKICAgIENGR19SWF9FVEhfQlVGRkVSIGRlZmluZS4KCiogQWRkIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBhdCAxMDAvNTAgTUh6CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBKdW4gMjAwMzoKICBtYWpvciByZWNvbnN0cnVjdGlvbiBvZiBuZXR3b3JraW5nIGNvZGU7CiAgYWRkICJwaW5nIiBzdXBwb3J0IChvdXRnb2luZyBvbmx5ISkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEp1bmUgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNVQgYm9hcmQKCiogUGF0Y2hlcyBieSBVZGkgRmlua2Vsc3RlaW4sIDIgSnVuZSAyMDAzOgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIGtleWJvYXJkcywgaW5pdGlhbGl6ZWQgYnkgZGVmaW5pbmcgYQogICAgYm9hcmQtc3BlY2lmaWMgZHJ2X2tleWJvYXJkX2luaXQgYXMgd2VsbCBhcyBkZWZpbmluZyBDT05GSUdfS0VZQk9BUkQgLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFJCQzgyMyBib2FyZC4KICAtIGNwdS9tcGM4eHgvbGNkLmMgbm93IGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlcyB0aGUKICAgIEhvcml6b250YWwgUGl4ZWwgQ291bnQgZmllbGQuCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiBCT09UUCAoZGhjcF9sZWFzZXRpbWUgb3B0aW9uKQogIFtwb2ludGVkIG91dCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAyIEp1biAyMDAzXQoKKiBQYXRjaCBieSBNYXJrIFJha2VzLCAxNCBNYXkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgZTEwMDAgZ2lnIGNhcmRzLgoKKiBQYXRjaCBieSBOeWUgTGl1LCAzIEp1biAyMDAzOgogIGZpeCBjcml0aWNhbCB0eXBvIGluIE1BTVIgZGVmaW5pdGlvbiAoaW5jbHVkZS9tcGM4eHguaCkKCiogRml4IHJlcXVpcmVtZW50IHRvIGFsaWduIFUtQm9vdCBpbWFnZSBvbiAxNiBrQiBib3VuZGFyaWVzIG9uIFBQQy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMiBKdW4gMjAwMwogIE1pbm9yIGNoYW5nZXMgZm9yIEtVUDRLIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI5IE1heSAyMDAzOgogIEZpeGVkIHJhcnAgYm9vdCBtZXRob2QgZm9yIElBMzIgYW5kIG90aGVyIGxpdHRsZS1lbmRpYW4gQ1BVcy4KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI4IE1heSAyMDAzOgogIEFkZGVkIHBvcnQgSS9PIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDI4IE1heSAyMDAzCiAgLSBjcHUvbXBjODI0eC9zdGFydC5TOiBmaXggcmVsb2NhdGlvbiBjb2RlIHdoZW4gYm9vdGluZyBmcm9tIFJBTQogIC0gbWlub3IgcGF0Y2hlcyBmb3IgdXR4ODI0NQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDI4IE1heSAyMDAzOgogIHg4NiB1cGRhdGUKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgOSBNYXkgMjAwMyArIDI3IE1heSAyMDAzOgogIGFkZCBuYW5kIGZsYXNoIHN1cHBvcnQgdG8gU1hOSTg1NVQgY29uZmlndXJhdGlvbgogIGZpeC9leHRlbmQgbmFuZCBmbGFzaCBzdXBwb3J0OgogIC0gZml4ICduYW5kIGVyYXNlJyBjb21tYW5kIHNvIGRvZXMgbm90IGVyYXNlIGJhZCBibG9ja3MKICAtIGZpeCAnbmFuZCB3cml0ZScgY29tbWFuZCBzbyBkb2VzIG5vdCB3cml0ZSB0byBiYWQgYmxvY2tzCiAgLSBmaXggbmFuZF9wcm9iZSgpIHNvIGhhbmRsZXMgbm8gZmxhc2ggZGV0ZWN0ZWQgcHJvcGVybHkKICAtIGFkZCBkb2MvUkVBRE1FLm5hbmQKICAtIGFkZCAuamZmczIgYW5kIC5vb2Igb3B0aW9ucyB0byBuYW5kIHJlYWQvd3JpdGUKICAtIGFkZCAnbmFuZCBiYWQnIGNvbW1hbmQgdG8gbGlzdCBiYWQgYmxvY2tzCiAgLSBhZGQgJ2NsZWFuJyBvcHRpb24gdG8gJ25hbmQgZXJhc2UnIHRvIHdyaXRlIEpGRlMyIGNsZWFuIG1hcmtlcnMKICAtIG1ha2UgTkFORCByZWFkL3dyaXRlIGZhc3RlcgoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjMgTWF5IDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIEdldCAobW9zdGx5KSByaWQgb2YgQ0ZHX01PTklUT1JfTEVOIGRlZmluaXRpb247IGNvbXB1dGUgcmVhbCBsZW5ndGgKICBpbnN0ZWFkIENGR19NT05JVE9SX0xFTiBpcyBub3cgb25seSB1c2VkIHRvIGRldGVybWluZSAgX2F0X2NvbXBpbGVfCiAgX3RpbWVfICAoISkgaWYgdGhlIGVudmlyb25tZW50IGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgVS1Cb290IGltYWdlLAogIG9yIGluIGEgc2VwYXJhdGUgZmxhc2ggc2VjdG9yLgoKKiBDbGVhbnVwIENGR19ERVIgI2RlZmluZXMgaW4gY29uZmlnIGZpbGVzICh3ZCBtYWludGFpbmVkIG9ubHkpCgoqIEZpeCBkYXRhIGFib3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgYXJtOTIwdCBDUFUKCiogRml4IGFsaWdubWVudCBwcm9ibGVtcyB3aXRoIGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBEb25hbGQgV2hpdGUsIDIxIE1heSAyMDAzOgogIGZpeCBjYWxjdWxhdGlvbiBvZiBiYXNlIGFkZHJlc3MgaW4gcGNpX2hvc2VfY29uZmlnX2RldmljZSgpCgoqIEZpeCBidWcgaW4gY29tbWFuZCBsaW5lIHBhcnNpbmc6ICJjbWQxO2NtZDIiIGlzIHN1cHBvc2VkIHRvIGFsd2F5cwogIGV4ZWN1dGUgImNtZDIiLCBldmVuIGlmICJjbWQxIiBmYWlscy4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CiAgdG8gInJ1biB2YXIxIHZhcjIiIHdoZXJlIHRoZSBjb250ZW50cyBvZiAidmFyMiIgd2lsbCBOT1QgYmUKICBleGVjdXRlZCB3aGVuIGEgY29tbWFuZCBpbiAidmFyMSIgZmFpbHMuCgoqIEFkZCB6ZXJvLWNvcHkgcmFtZGlzayBzdXBwb3J0IChyZXF1aXJlcyBjb3JyZXNwb25kaW5nIGtlcm5lbCBzdXBwb3J0ISkKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDIwIE1heSAyMDAzOgogIEluIHByZXBhcmF0aW9uIGZvciBhbiBpeHAgcG9ydCwgcmVuYW1lIGNwdS94c2NhbGUgYW5kIGFyY2gteHNjYWxlCiAgaW50byBjcHUvcHhhIGFuZCBhcmNoLXB4YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwMzoKICAtIElCTSBQUEM0MDVFUCBwb3J0IGFkZGVkLgogIC0gQ09ORklHX1VBUlQxX0NPTlNPTEUgYWRkZWQuIElmIGRlZmluZWQgaW50ZXJuYWwgVUFSVDEgKGFuZCBub3QKICAgIFVBUlQwKSBpcyB1c2VkIGFzIGRlZmF1bHQgVS1Cb290IGNvbnNvbGUuIFBQQzR4eCBvbmx5IQogIC0gZXNkIEFTSDQwNSBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQpLgogIC0gQlVCSU5HQTQwNUVQIGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCAtIElCTSBFdmFsIEJvYXJkKS4KICAtIGVzZCBDUENJNDA1QUIgYm9hcmQgYWRkZWQuCiAgLSBlc2QgUE1DNDA1IGJvYXJkIGFkZGVkLgogIC0gVXBkYXRlIG9mIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE5IE1haSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1LTMgYm9hcmQKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMjIgTWF5IDIwMDM6CiAgRml4IHByb2JsZW0gd2l0aCBvbmx5IHBhcnRpYWxseSBjbGVhcmVkIC5ic3Mgc2VnbWVudAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTIgTWF5IDIwMDM6CiAgZ2V0IFBDSSB0byB3b3JrIG9uIGEgTVBDODI2NkFEUyBib2FyZDsgaW5jb3Jwb3JhdGUgY2hhbmdlIHRvCiAgY3B1L21wYzgyNjAvcGNpLmMgdG8gZW5hYmxlIG92ZXJyaWRlcyBvZiBQQ0kgbWVtb3J5IHBhcmFtZXRlcnMKCiogUGF0Y2ggYnkgTnllIExpdSwgMSBNYXkgMjAwMzoKICBtaW5vciBwYXRjaGVzIGZvciB0aGUgRkFEUzh4eAoKKiBQYXRjaCBieSBUaG9tYXMgU2No5GZlciwgMjggQXByIDIwMDM6CiAgRml4IFNQRCBoYW5kbGluZyBmb3IgMjU2IEVDQyBESU1NIG9uIFdhbG51dAoKKiBBZGQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IGJpdG1hcHMgZm9yIFRSQUIncyAgVkZEIGNvbW1hbmQ7CiAgYWxsb3cgdG8gcGFzcyBib290IGJpdG1hcCBhZGRyZXNzZXMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzOwogIGFsbG93IGZvciB6ZXJvIGJvb3QgZGVsYXkKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIEdlad9pbmdlciwgMTkgTWF5IDIwMDI6CiAgT24gVFJBQjogd2FpdCB1bnRpbCB0aGUgZHVtbXkgYnl0ZSBoYXMgYmVlbiBjb21wbGV0ZWx5IHNlbnQKCiogUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAyMiBBcHIgMjAwMzoKICB1cGRhdGUgZm9yIENyYXlMMSBib2FyZAoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjEgQXByIDIwMDM6CiAgYWRkIGJvb3Qgc3VwcG9ydCBmb3IgQVJUT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDExIEFwciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzM4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjQgSmFuIDIwMDM6CiAgRml4IGNvdW50aW5nIG9mIGV4dGVuZGVkIHBhcnRpdGlvbnMgaW4gZGlza2Jvb3QgY29tbWFuZAoKKiBQYXRjaCBieSBDaHJpc3RvcGhlIExpbmRoZWltZXIsIDIwIE1heSAyMDAzOgogIGFsbG93IHRoZSB1c2Ugb2YgQ0ZHX0xPQURTIHdoZW4gQ0ZHX05PX0ZMQVNIIGlzIHNldAoKKiBGaXggU0RSQU0gdGltaW5nIG9uIFB1cnBsZSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIG9uIEFUQyBib2FyZAogIChpbmNsdWRlcyBzdXBwb3J0IGZvciBJbnRlbCA4MjM2NSBhbmQgY29tcGF0aWJsZSBQQyBDYXJkIGNvbnRyb2xsZXJzLAogIGFuZCBZZW50YS1jb21wYXRpYmxlIFBDSS10by1DYXJkQnVzIGNvbnRyb2xsZXJzKQoKKiBQYXRjaCBieSBNYXRoaWpzIEhhYXJtYW4sIDA4IE1heSAyMDAzOgogIEFkZCBsYW45MWM5NiBkcml2ZXIgKHRlc3RlZCBvbiBMdWJib2NrIGFuZCBjdXN0b20gUFhBMjUwIGJvYXJkIG9ubHkpCgoqIEZpeCBwcm9ibGVtIHdpdGggdXNhZ2Ugb2YgInRydWUiICh1bmRlZmluZWQgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBiZmQuaCkKCiogQWRkIHN1cHBvcnQgZm9yIFByb21lc3MgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IEtlaXRoIE91dHdhdGVyLCAyOCBBcHIgMjAwMzoKICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgYW5kIGFkZGl0aW9ucyB0byBHRU44NjBUIGJvYXJkIHNwZWNpZmljIGNvZGUuCiAgLSBBZGRlZCBHRU44NjBfU0MgdmFyaWFudCB0byBHRU44NjBULgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyB0byBHRU44NjBUIGRvY3VtZW50YXRpb24uCiAgLSBDb3JyZWN0IGR1cGxpY2F0ZSBlbnRyeSBpbiBVLUJvb3QgQ1JFRElUUyBmaWxlLgogIC0gQWRkIEdFTjg2MFRfU0MgZW50cnkgaW4gTUFJTlRBSU5FUlMgZmlsZS4KICAtIFVwZGF0ZSBDUkVESVRTIGZpbGUgd2l0aCBHRU44NjBUX1NDIGluZm8uCgoqIFVwZGF0ZSBTbWl0aHMgQWVyb3NwYWNlIGFkZHJlc3NlcyBpbiBNQUlOVEFJTkVSUyBmaWxlCgoqIEZpeCBlcnJvciBoYW5kbGluZyBpbiBodXNoJ3MgdmVyc2lvbiBvZiAicnVuIiBjb21tYW5kCgoqIExXTU9OIGV4dGVuc2lvbnM6CiAgLSBTcGxhc2hzY3JlZW4gc3VwcG9ydAogIC0gbW9kZW0gc3VwcG9ydAogIC0gc3lzbW9uIHN1cHBvcnQKICAtIHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBlbmFibGluZyBvZiBMQ0QKCiogQWxsb3cgYm9vdGluZyBmcm9tIG9sZCAiUFBDQm9vdCIgZGlzayBwYXJ0aXRpb25zCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjU1IEJvYXJkIC8gTVBDODI1NSBDUFUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1ha2Ugc3VyZSBCbG9jayBMb2NrIEJpdHMgZ2V0IGNsZWFyZWQgaW4gUjM2ME1QSSBmbGFzaCBkcml2ZXIKCiogTVBDODIzIExDRCBkcml2ZXI6IEZpbGwgY29sb3IgbWFwIGJhY2t3YXJkcywgdG8gYWxsb3cgZm9yIHN0ZWFkeQogIGRpc3BsYXkgd2hlbiBMaW51eCB0YWtlcyBvdmVyCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TICh0aGlzIHRpbWUgZm9yIHJlYWwpLgoKKiBBZGQgc3VwcG9ydCBmb3IgImJtcCBpbmZvIiBhbmQgImJtcCBkaXNwbGF5IiBjb21tYW5kcyB0byBsb2FkCiAgYml0bWFwIGltYWdlczsgdGhpcyBjYW4gYmUgdXNlZCAoZm9yIGV4YW1wbGUgaW4gYSAicHJlYm9vdCIKICBjb21tYW5kKSB0byBkaXNwbGF5IGEgc3BsYXNoIHNjcmVlbiB2ZXJ5IHF1aWNrbHkgYWZ0ZXIgcG93ZXJvbi4KCiogQWRkIHN1cHBvcnQgZm9yIDEzMyBNSHogY2xvY2sgb24gSU5DQS1JUCBib2FyZAoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTAgQXByIDIwMDM6CiAgVXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgoqIEFkZCBuZXcgbWVhbmluZyB0byAiYXV0b3N0YXJ0IiBlbnZpcm9ubWVudCB2YXJpYWJsZToKICBJZiBzZXQgdG8gIm5vIiwgYSBzdGFuZGFsb25lIGltYWdlIHBhc3NlZCB0byB0aGUKICAiYm9vdG0iIGNvbW1hbmQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGxvYWQgYWRkcmVzcwogIChhbmQgZXZlbnR1YWxseSB1bmNvbXByZXNzZWQpLCBidXQgTk9UIGJlIHN0YXJ0ZWQuCiAgVGhpcyBjYW4gYmUgdXNlZCB0byBsb2FkIGFuZCB1bmNvbXByZXNzIGFyYml0cmFyeQogIGRhdGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgQXByIDIwMDM6CiAgQ2hhbmdlZCBESENQIGNsaWVudCB0byB1c2UgSVAgYWRkcmVzcyBmcm9tIHNlcnZlciBvcHRpb24gZmllbGQgIzU0CiAgZnJvbSB0aGUgT0ZGRVIgcGFja2V0IGluIHRoZSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NCBpbiB0aGUgUkVRVUVTVAogIHBhY2tldC4gVGhpcyBmaXhlcyBhIHByb2JsZW0gdXNpbmcgYSBXaW5kb3dzIDIwMDAgREhDUCBzZXJ2ZXIsCiAgd2hlcmUgdGhlIERIQ1Atc2VydmVyIGlzIG5vdCB0aGUgVEZUUC1zZXJ2ZXIuCgoqIFNldCBtYXggYnJpZ2h0bmVzcyBmb3IgTU4xMTIzNiBkaXNwbGF5cyBvbiBUUkFCIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIG1vZHVsZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCA0IEFwciAyMDAzOgogIEFkZCBJRE1BIGV4YW1wbGUgY29kZSAodGVzdGVkIG9uIDgyNjAgb25seSkKCiogQWRkIHN1cHBvcnQgZm9yIFB1cnBsZSBCb2FyZCAoTUlQUzY0IDVLYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFM2NCA1S2MgQ1BVcwoKKiBGaXggbWlzc2luZyBzZXR0aW5nIG9mICJsb2FkYWRkciIgYW5kICJib290ZmlsZSIgb24gQVJNIGFuZCBNSVBTCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBBcHIgMjAwMzoKICAtIHVwZGF0ZSBNSVA0MDUtNCBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgQXByIDIwMDM6CiAgLSBVLUJvb3QgdmVyc2lvbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBhZGRlZAogICAgKENPTkZJR19WRVJTSU9OX1ZBUklBQkxFKS4KICAtIENoYW5nZWQgUFBDNDA1R1ByIHZlcnNpb24gZnJvbSBBIHRvIEIuCiAgLSBDaGFuZ2VkIENQQ0k0MDUgdG8gdXNlIENUUyBpbnN0ZWFkIG9mIERTUiBvbiBQUEM0MDUgVUFSVDEuCgoqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDAzIEFwcmlsIDIwMDM6CiAgLSBmaXggUENJIElSUXMgb24gTVBMIGJvYXJkcwogIC0gZml4IHR3byBtb3JlIHVuLXJlbG9jYXRlZCBwb2ludGVyIHByb2JsZW1zCgoqIEZpeCBiZWhhdmlvdXIgb2YgInJ1biIgY29tbWFuZDoKICAtIHByaW50IGVycm9yIG1lc3NhZ2UgaXYgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QKICAtIHRlcm1pbmF0ZSBwcm9jZXNzaW5nIG9mIGFyZ3VtZW50cyBpbiBjYXNlIG9mIGVycm9yCgoqIFBhdGNoZXMgYnkgUGV0ZXIgRmlndWxpLCAxMCBNYXIgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEJUVUFSVCBvbiBQWEEgcGxhdGZvcm0KICAtIEFkZCBzdXBwb3J0IGZvciBXRVAgRVAyNTAgKFBYQSkgYm9hcmQKCiogRml4IGZsYXNoIHByb2JsZW1zIG9uIElOQ0EtSVA7IGFkZCB0b29sIHRvIGFsbG93IGJydW5pbmcgaW1hZ2VzICB0bwogIGZsYXNoIHVzaW5nIGEgQkRJMjAwMAoKKiBJbXBsZW1lbnQgZml4IGZvciBJMkMgRWRnZSBDb25kaXRpb25zIHByb2JsZW0gZm9yIGFsbCBib2FyZHMgdGhhdAogIHVzZSB0aGUgYml0LWJhbmdpbmcgZHJpdmVyIChjb21tb24vc29mdF9pMmMuYykKCiogUGF0Y2ggYnkgTWFydGluIFdpbmlzdG9lcmZlciwgMjMgTWFyIDIwMDMKICAtIEFkZCBwb3J0IHRvIE1QQzU1NS81NTYgbWljcm9jb250cm9sbGVycwogIC0gQWRkIHN1cHBvcnQgZm9yIGNtaSBjdXN0b21lciBib2FyZCB3aXRoCiAgICBJbnRlbCAyOEYxMjhKM0EsIDI4RjMyMEozQSBvciAyOEY2NDBKM0EgZmxhc2guCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMjggTWFyIDIwMDM6CiAgLSBmaXggY29tbW9uL2NtZF9uYW5kLmMKCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDI0IE1hciAyMDAzOgogIC0gYWRkIHRocmVhZHMgLyBzY2hlZHVsZXIgZXhhbXBsZSBjb2RlCgoqIEFkZCBwYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMzEgTWFyIDIwMDM6CiAgLSBhZGQgY3RybC1jIHN1cHBvcnQgZm9yIGtlcm1pdCBkb3dubG9hZAogIC0gYWxpZ24gYmRpbmZvIG91dHB1dCBvbiBBUk0KICAtIGNzYjIyNiBib2FyZDogYnJpbmcgaW4gc3luYyB3aXRoIGlubm9rb20vbWVtc2V0dXAuUwogIC0gY3NiMjI2IGJvYXJkOiBmaXggTURSRUZSIGhhbmRsaW5nCiAgLSBtaXNjIGRvYyBmaXhlcyAvIGV4dGVuc2lvbnMKICAtIGlubm9rb20gYm9hcmQ6IGNsZWFudXAsIE1EUkVGUiBmaXggaW4gbWVtc2V0dXAuUywgY29uZmlnIHVwZGF0ZQogIC0gYWRkIEJPT1RfUFJPR1JFU1MgdG8gYXJtbGludXguYwoKKiBBZGQgQ1BVIElELCB2ZXJzaW9uLCBhbmQgY2xvY2sgc3BlZWQgZm9yIElOQ0EtSVAKCiogUGF0Y2hlcyBieSBEYXZlIEVsbGlzLCAxOCBNYXIgMjAwMyBmb3IgU1hOSTg1NVQgYm9hcmQ6CiAgLSBmaXggU1JBTSBhbmQgU0RSQU0gbWVtb3J5IHNpemluZwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydAogIC0gYWRkIE1BQyBhZGRyZXNzIGZvciBzZWNvbmQgKFNDQzEpIGV0aGVybmV0IHBvcnQKCiogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIFRRTTgyNjAgYm9hcmQKCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNiBNYXIgMjAwMzoKICAtIEFkZCBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBlcmFzaW5nIE5BTkQKICAgIGZsYXNoIChjZXJ0YWluIGZvcm1zIG9mIHdoaWNoIGFyZSBjYWxsZWQgU21hcnRNZWRpYSkuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0LgoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTkgTWFyIDIwMDM6CiAgLSB1c2UgYXJtLWxpbnV4LWdjYyBhcyBkZWZhdWx0IGNvbXBpbGVyIGZvciBBUk0KICAtIGZpeCBpMmMgZml4dXAgY29kZQogIC0gZml4IG1pc3NpbmcgYmF1ZHJhdGUgc2V0dGluZwogIC0gYWRkZWQgJGxvYWRhZGRyIC8gQ0ZHX0xPQURfQUREUiBzdXBwb3J0IHRvIGxvYWRiCiAgLSBtb3ZlZCAiaWdub3JpbmcgdHJhaWxpbmcgY2hhcmFjdGVycyIgX2JlZm9yZV8gdS1ib290IHdhbnRzIHRvCiAgICBwcmludCBvdXQgZGlhZ25vc3RpY3MgbWVzc2FnZXM7IHJlbW92ZXMgYm9ndXMgY2hhcmFjdGVycyBhdCB0aGUKICAgIGVuZCBvZiB0cmFuc21pc3Npb24KCiogUGF0Y2ggYnkgSm9obiBaaGFuLCAxOCBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU2lub1ZlZSBNaWNyb3N5c3RlbXMgU0M4eHggYm9hcmRzCgoqIFBhdGNoIGJ5IFJvbGYgT2ZmZXJtYW5ucywgMjEgTWFyIDIwMDM6CiAgcG9ydGVkIHRoZSBkbnAxMTEwIHJlbGF0ZWQgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IGFybWJvb3QgY3ZzIHRvCiAgY3VycmVudCB1LWJvb3QgY3ZzLiBzbWM5MTExMSBkb2VzIG5vdCB3b3JrLiBwcm9ibGVtIG1hcmtlZCBpbgogIHNtYzkxMTExLmMsIGdyZXAgZm9yICJGSVhNRSIuCgoqIFBhdGNoIGJ5IEJyaWFuIEF1bGQsIDI1IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTVE0gZmxhc2ggY2hpcHMgb24gZWJvbnkgYm9hcmQKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBNUEM4MjUwIEJvYXJkcyAoUE04MjUgbW9kdWxlKQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI1IE1hciAyMDAzOgogIC0gUENJNDA1IHVwZGF0ZS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBNYXIgMjAwMzoKICAtIENQQ0k0MDUyIHVwZGF0ZSAoc3VwcG9ydCBmb3IgcmV2aXNpb24gMykuCiAgLSBTZXQgZWRnZSBjb25kaXRpb25pbmcgY2lyY3VpdHJ5IG9uIFBQQzQwNUdQciBmb3IgY29tcGF0aWJpbGl0eQogICAgdG8gZXhpc3RpbmcgUFBDNDA1R1AgZGVzaWducy4KICAtIENsaXAgdWRpdiB0byA1IGJpdHMgb24gUFBDNDA1IChzZXJpYWwuYykuCgoqIEV4dGVuZCBJTkNBSVAgYm9hcmQgc3VwcG9ydDoKICAtIGFkZCBhdXRvbWF0aWMgUkFNIHNpemUgZGV0ZWN0aW9uCiAgLSBhZGQgImJkaW5mbyIgY29tbWFuZAogIC0gcGFzcyBmbGFzaCBhZGRyZXNzIGFuZCBzaXplIHRvIExpbnV4IGtlcm5lbAogIC0gc3dpdGNoIHRvIDE1MCBNSHogY2xvY2sKCiogQXZvaWQgZmxpY2tlciBvbiB0aGUgVFJBQidzIFZGRCBieSBzeW5jaHJvbml6aW5nIHRoZSBlbmFibGUgd2l0aAogIHRoZSBIU1lOQy9WU1lOQy4gUmVxdWlyZXMgbmV3IENQTEQgY29kZSAoVmVyc2lvbiAxMDEgZm9yIFJldi4gMTAwCiAgYm9hcmRzLCB2ZXJzaW9uIDE1MyBmb3IgUmV2LiAyMDAgYm9hcmRzKS4KCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDEyIE1hciAyMDAzOgogIEZpeCByZWxvY2F0aW9uIHByb2JsZW0gb2Ygc3RhdGljYWxseSBpbml0aWFsaXplZCBzdHJpbmcgcG9pbnRlcnMKICBpbiBjb21tb24vY21kX3BjaS5jCgoqIFBhdGNoIGJ5IEthaS1Vd2UgQmz2bSwgMTIgTWFyIDIwMDM6CiAgQ2xlYW51cCAmIGJ1ZyBmaXhlcyBmb3IgSkZGUzIgY29kZToKICAtIHRoZSBtZW1vcnkgbWFuZ2VtZW50IHdhcyBicm9rZW4uIEl0IGNhdXNlZCBoYXZvYyBvbiBtYWxsb2MgYnkKICAgIHdyaXRpbmcgYmV5b25kIHRoZSBibG9jayBib3VuZGFyaWVzLgogIC0gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgZmlsZXMgd2FzIHdyb25nLCBzb21ldGltZXMgcmVzdWx0aW5nCiAgICBpbiBzaG9ydCBmaWxlIHJlYWRzLgogIC0gZGF0YSBjb3B5aW5nIG5vdyBvcHRpb25hbGx5IHRha2VzIGZyYWdtZW50IHZlcnNpb24gbnVtYmVycyBpbnRvCiAgICBhY2NvdW50LCB0byBhdm9pZCBjb3B5aW5nIGZyb20gb2xkZXIgZGF0YS4KICBTZWUgZG9jL1JFQURNRS5KRkZTMiBmb3IgZGV0YWlscy4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxMiBNYXIgMjAwMzoKICAtIDE2LzMyIE1CIGFuZCA1MC84MCBNSHogc3VwcG9ydCB3aXRoIGF1dG8tZGV0ZWN0aW9uIGZvciBJUDg2MAogIC0gRVRIMDUgYW5kIEJFREJVRyBzdXBwb3J0IGZvciBDVTgyNAogIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BDNDUKICAtIG5ldyBCT09UUk9NL0ZMQVNIMCBhbmQgRE9DIGJhc2UgZm9yIFBNODI2CgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTIgTWFyIDIwMDM6CiAgRml4IHRoZSBjaHBhcnQgY29tbWFuZCBvbiBpbm5va29tIGJvYXJkCgoqIE5hbWUgY2xlYW51cDoKICBtdiBpbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oIGluY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAogIHMvUFBDQm9vdC9VLUJvb3QvIGluIHNvbWUgZmlsZXMKICBzL3BJbWFnZS91SW1hZ2UvICBpbiBzb21lIGZpbGVzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE1IEphbiAyMDAzOgogIEZpeCAnJyBjb21tYW5kIGxpbmUgcXVvdGluZwoKKiBQYXRjaCBieSBUaGUgTEVPWCB0ZWFtLCAxOSBKYW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRUxQVDg2MCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIERhbGxhcyBkczE2NHggUlRDCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAzMSBKYW4gMjAwMzoKICAtIG1pbmltYWwgc2V0dXAgZm9yIENhcmRCdXMgYnJpZGdlcwogIC0gYWRkIEVFUFJPTSByZWFkL3dyaXRlIHN1cHBvcnQgaW4gdGhlIENTODkwMCBkcml2ZXIKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgYnVpbHRpbiBJMkMgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZyBzM2MyNHgwIGNoaXBzCiAgLSBhZGQgc3VwcG9ydCBmb3IgTVBMJ3MgVkNNQTkgKFNhbXN1bmcgczNjMjQxMCBiYXNlZCkgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgRmViIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMDcKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDUgRmViIDIwMDM6CiAgZml4IFBMUFJDUi9TQ0NSIGluaXQgc2VxdWVuY2Ugb24gOHh4IHRvIGFsbG93IGZvcgogIGNoYW5nZXMgb2YgRUJERiBieSBzb2Z0d2FyZQoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDcgRmViIDIwMDM6CiAgIkFQSS1jb21wYXRpYmlsaXR5IHBhdGNoIiBmb3IgNHh4IEkyQyBkcml2ZXIKCiogVFJBQiBmaXhlcyAvIGV4dGVuc2lvbnM6CiAgLSBSZXN0b3JlIFZGRCBicmlnaHRuZXNzIGFzIHNhdmVkIGluIGVudmlyb25tZW50CiAgLSBhZGQgc3VwcG9ydCBmb3IgRnVqaXRzdSBmbGFzaGVzCiAgLSBtYWtlIHN1cmUgYm90aCBidXp6ZXJzIGFyZSB0dXJuZWQgb2ZmIChkcml2ZSBsb3cgbGV2ZWwpCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNiBNYXIgMjAwMzoKICAtIGZpeCBidWcgaW4gQk9PVFAgY29kZSAobXVzdCB1c2UgTmV0Q29weUlQKQogIC0gdXBkYXRlIG9mIENTQjIyNiBwb3J0CiAgLSBjbGVhciBCU1Mgc2VnbWVudCBvbiBYU2NhbGUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGkyY19pbml0X2JvYXJkKCkgZnVuY3Rpb24KICAtIHVwZGF0ZSB0byB0aGUgSW5ub2tvbSBwbGF0dGZvcm0KCiogRXh0ZW5kIHN1cHBvcnQgZm9yIHJlZHVuZGFuZCBlbnZpcm9ubWVudHMgZm9yIGNvbmZpZ3VyYXRpb25zIHdoZXJlCiAgZW52aXJvbm1lbnQgc2l6ZSA8IHNlY3RvciBzaXplCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTkgRmViIDIwMDM6CiAgcGF0Y2hlcyBmb3IgdGhlIEludGVsIGx1YmJvY2sgYm9hcmQ6CiAgbWVtc2V0dXAuUyAtIGdlbmVyYWwgY2xlYW51cCAoYmFzZWQgb24gUm9iZXJ0J3MgY3NiMjI2IGNvZGUpCiAgZmxhc2guYyAtIG92ZXJoYXVsLCBhY3R1YWxseSB3b3JrcyBub3cKICBsdWJib2NrLmMgLSBmaXggaW5pdCBmdW5jcyB0byByZXR1cm4gcHJvcGVyIHZhbHVlCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNiBGZWIgMjAwMzoKICAtIEZpeGVkIG9mZiBieSBvbmUgaW4gUkZUQSBjYWxjdWxhdGlvbi4KICAtIE5vIG5lZWQgdG8gYWJvcnQgd2hlbiBMREYgaXMgbG93ZXIgdGhhbiB3ZSBjYW4gcHJvZ3JhbSBpdCdzIG9ubHkKICAgIG1pbmltdW0gdGltaW5nIHNvIGNsYW1wIGl0IHRvIHdoYXQgd2UgY2FuIGRvLgogIC0gVGFrZXMgZnVuY3Rpb24gcG9pbnRlciB0byBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgc3BkX252cmFtLiBVc2VmdWxsCiAgICBmb3IgZmFraW5nIGRhdGEgb3IgaGFyZGNvZGUgYSBtb2R1bGUgd2l0aG91dCB0aGUgbnZyYW0uCiAgLSBmaXggb3RoZXIgdXNlciBmb3IgYWJvdmUgY2hhbmdlCiAgLSBmaXggc29tZSBjb21tZW50cy4KCiogUGF0Y2hlcyBieSBCcmlhbiBXYWl0ZSwgMjYgRmViIDIwMDM6CiAgLSBmaXggcG9ydCBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIHNjYW4KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDEgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEVNSyBUT1A4NjAgTW9kdWxlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDAyIE1hciAyMDAzOgogIEFkZCBTUEQgRUVQUk9NIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAyMSBKYW4gMjAwMzoKICAtIEFkZCBzdXBwb3J0IGZvciBJbm5va29tIGJvYXJkCiAgLSBEb24ndCBjb21wbGFpbiBpZiAiaW5zdGFsbCIgZmFpbHMKICAtIFJFQURNRSBjbGVhbnVwIChyZW1vdmUgZHVwbGljYXRlZCBsaW5lcykKICAtIFVwZGF0ZSBQWEEgaGVhZGVyIGZpbGVzCgoqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBleGlzdGluZyBQT1NUIGNvZGUgKGRvYy9SRUFETUUuUE9TVCkKCiogUGF0Y2ggYnkgTGF1ZG5leSBSZW4sIDE1IEphbiAyMDAzOgogIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOCBGZWIgMjAwMzoKICBBZGQgYmVkYnVnIHN1cHBvcnQgZm9yIDgyNHggc3lzdGVtcwoKKiBBZGQgc3VwcG9ydCBmb3IgMTYgTUIgZmxhc2ggY29uZmlndXJhdGlvbiBvZiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TCgoqIEFkZCBpbWFnZSBpbmZvcm1hdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBGZWIgMjAwMzoKICBDUENJSVNFUjQgY29uZmlndXJhdGlvbiB1cGRhdGVkLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IEZlYiAyMDAzOgogIEZpeGVkIGJ1ZyBpbiBleHQuIHNlcmlhbCBjbG9jayBzZXR1cCBvbiBQUEM0MDUgKHNpbmNlIFBQQzQ0MCBwb3J0KS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBGZWIgMjAwMzoKICBBZGQgInBjaWRlbGF5IiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gbXMsIGVuYWJsZWQgdmlhCiAgQ09ORklHX1BDSV9CT09UREVMQVkpLgogIFBDSSBzcGVjIDIuMiBkZWZpbmVzLCB0aGF0IGEgcGNpIHRhcmdldCBoYXMgMl4yNSBwY2kgY2xvY2tzIGFmdGVyCiAgUlNUIyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gY3ljbGVzICgzM01IeiAtPiAxcykuCgoqIEZpeCBkdWFsIFBDTUNJQSBzbG90IHN1cHBvcnQgKHdoZW4gcnVubmluZyB3aXRoIGp1c3Qgb25lCiAgc2xvdCBwb3B1bGF0ZWQpCgoqIEFkZCBWRkQgdHlwZSBkZXRlY3Rpb24gdG8gdHJhYiBib2FyZAoKKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUgIGV0aGFkZHIgIGVudmlyb25tZW50CiAgdmFyaWFibGUgd2l0aCB2YWx1ZSBpbiB0aGUgRUVQUk9NCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzMyIDRLYyBDUFVzCgoqIEFkZCBzdXBwb3J0IGZvciBJTkNBLUlQIEJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2CgoqIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2CgoqIFBhdGNoIGJ5IFRvcmQgQW5kZXJzc29uLCAxNiBKYW4gMjAwMzoKICBGaXggZmxhc2ggc2VjdG9yIGNvdW50IGZvciBUUU04eHhMCgoqIEZpeCBJMkMgRUVQUk9NIHByb2JsZW0gb24gSUNVODYyIGJvYXJkICh3b3VsZCBvbmx5IHdyaXRlIHRoZSBmaXJzdAogIDE2IGJ5dGVzIG91dCBvZiBlYWNoIDMyIGJ5dGUgYmxvY2spCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCiAgKHBhdGNoIGJ5IErzbiBCZW5lZGlrdHNzb24sIDExIERlYyAyMDAyKQoKKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAoKKiBBZGQgd2F0Y2hkb2cgdHJpZ2dlciBwb2ludHMgd2hpbGUgd2FpdGluZyBmb3Igc2VyaWFsIHBvcnQKICAoc28gZmFyIG9ubHkgOHh4IC0tIG5lZWRlZCBvbiBMV01PTiB3aXRoIDEwMG1zIHdhdGNoZG9nKQoKKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoZmlndXJhdGlvbiBvZiB0aGUgdXRpbGl0eSwgdXNpbmcgYSBjb25maWcgZmlsZSkKCiogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCgoqIFN3aXRjaCBMV01PTiBib2FyZCBkZWZhdWx0IGNvbmZpZyBmcm9tIEZSQU0gdG8gRUVQUk9NOwogIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXNlIDEtYnl0ZS1yZWFkIGluc3RlYWQgb2YgLXdyaXRlIGZvciBpcHJvYmUoKSBmdW5jdGlvbgogIEFkZCBpMmMgY29tbWFuZHMgdG8gUE04MjYgY29uZmlnCgoqIGV4dGVuZCBJMkMgUE9TVCBjb2RlOiBjaGVjayBmb3IgbGlzdCBvbiBrbm93biBhZGRyZXNzZXMKCiogSW1wcm92ZSBsb2cgYnVmZmVyIGNvZGU7IHVzZSAibG9nbGV2ZWwiIHRvIGRlY2lkZSB3aGljaCBtZXNzYWdlcwogIHRvIGxvZyBvbiB0aGUgY29uc29sZSwgdG9vIChsaWtlIGluIExpbnV4KTsgZ2V0IHJpZCBvZiAibG9nc3RhcnQiCgoqIEFkZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGJvYXJkLXNwZWNpZmljIGZvciBUUkFCIG5vdywgdG8gYmUgZml4ZWQgbGF0ZXIpCgoqIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKICBGaXggbWlzYyBwcm9ibGVtcyB3aXRoIEFtaWdhT25lIHN1cHBvcnQKCiogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6CiAgbWlub3IgY2xlYW51cCB0byB0aGUgTVBDODI0NSBFUElDIGRyaXZlcgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgKFNJVSkgaW50ZXJydXB0cyBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyNyBOb3YgMjAwMjoKICBmaXggb3V0cHV0IG9mICJwY2lpbmZvIiBjb21tYW5kIGZvciBDYXJkQnVzIGJyaWRnZSBkZXZpY2VzLgoKKiBGaXggYnVnIGluIFRRTTgyNjAgYm9hcmQgZGV0ZWN0aW9uIC0gYm9hcmRzIGdvdCBzdHVjayB3aGVuIGJvYXJkIElECiAgd2FzIG5vdCByZWFkYWJsZQoKKiBBZGQgTEVEIGluZGljYXRpb24gZm9yIElERSBhY3Rpdml0eSBvbiBLVVA0SyBib2FyZAoKKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjAgTm92IDIwMDIKICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCiAgQWRkIHN1cHBvcnQgZm9yIEJNUCBsb2dvcyBpbiBjZmJfY29uc29sZSBkcml2ZXIuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggUENNQ0lBIHNsb3RzIChhdCB0aGUgc2FtZSB0aW1lISkgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjEgTm92IDIwMDI6CiAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDIxIE5vdiAyMDAyCiAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQogIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gY29uZmlndXJhYmxlCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTggTm92IDIwMDI6CiAgRml4ZXMgZm9yIHg4NiBwb3J0IChtb3N0bHkgc3RyaW5ncyBpc3N1ZXMpCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKICBGaXggZm9yIG5hdHNlbWkgTklDIGNhcmRzIChEUDgzODE1KQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKICBmaXggYSBidWcgZm9yIHRoZSBNSUkgY29uZmlndXJhdGlvbiwgYW5kIHNvbWUgd2FybmluZ3MKCiogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgogIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAogIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgogIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCiAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKICAgIGJlaW5nIGRlZmluZWQuCiAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCiAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAogICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKCiogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CiAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCiAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwogIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCiAgd2FzIGZpbGxpbmcgdGhlbS4KCiogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCiAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwogIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCiAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSwogIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCiAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKICAgIGhhbmRsZXJpbmcKICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQogICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CiAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgogIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCiAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCiAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCgoqIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgogIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKCiogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMgIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogIGRyaXZlcnMKCiogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwogIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgogIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCiAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQogIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKCiogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgogIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwoKKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCiAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6CiAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKCiogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgoKSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQpQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K