IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ29weXJpZ2h0IChjKSAyMDE5IENFQSBMSVNULgojIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAojIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiMgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8gCiMgCiMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCiMKIyBDb250cmlidXRvcnM6CiMgICAgIE5pY29sYXMgRkFVVkVSR1VFIChDRUEgTElTVCkgbmljb2xhcy5mYXV2ZXJndWVAY2VhLmZyIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQnVuZGxlLU5hbWU9UGFweXJ1cyBTeXNNTCAxLjYgVmFsaWRhdGlvbgpCdW5kbGUtRGVzY3JpcHRpb249VGhpcyBwbHVnLWluIGNvbnRhaW5zIHRoZSBydWxlcyBmb3IgU3lNTCAxLjYgbW9kZWwgdmFsaWRhdGlvbgpCdW5kbGUtVmVuZG9yPUVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdAoKIyMjIyMgTm9uIG5vcm1hdGl2ZSAjIyMjIwppbnZfUmVxdWlyZW1lbnRJZD1SZXF1aXJlbWVudCBpcyBtaXNzaW5nIGFuIGlkCm9jbF9SZXF1aXJlbWVudElkPWlkIDw+ICcnCmludl9SZXF1aXJlbWVudFRleHQ9UmVxdWlyZW1lbnQgaXMgbWlzc2luZyBhIHRleHQKb2NsX1JlcXVpcmVtZW50VGV4dD10ZXh0IDw+ICcnCiMgRklYTUUgOiB0aGVyZSBzZWVtcyB0byBiZSBubyBjb25zdHJhaW50IGluIHRoZSBub3JtIGZvciBSZXF1aXJlbWVudCBpZCBhbmQgdGV4dAoKaW52X05lc3RlZENvbm5lY3RvckVuZE1pc3Npbmc9TmVzdGVkQ29ubmVjdG9yRW5kIHN0ZXJlb3R5cGUgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIDxDb25uZWN0b3IgZW5kPiB7MH0uCgoKIyMjIyMgRW5kIE5vbiBub3JtYXRpdmUgIyMjIyMKCiNDb25mb3JtCmludl9Db25mb3JtR2VuZXJhbENsYXNzaWZpZXJWaWV3cG9pbnQ9Q29uZm9ybSBbMV0gVGhlIGdlbmVyYWwgY2xhc3NpZmllciBtdXN0IGJlIGFuIGVsZW1lbnQgc3RlcmVvdHlwZWQgYnkgVmlld3BvaW50LgpvY2xfQ29uZm9ybUdlbmVyYWxDbGFzc2lmaWVyVmlld3BvaW50PVZpZXdwb2ludC5hbGxJbnN0YW5jZXMoKS0+ZXhpc3RzKHYgfCB2LmJhc2VfQ2xhc3MgPSBzZWxmLmJhc2VfR2VuZXJhbGl6YXRpb24uZ2VuZXJhbCkKaW52X0NvbmZvcm1TcGVjaWZpY0NsYXNzaWZpZXJWaWV3PUNvbmZvcm0gWzJdIFRoZSBzcGVjaWZpYyBjbGFzc2lmaWVyIG11c3QgYmUgYW4gZWxlbWVudCB0aGF0IGlzIHN0ZXJlb3R5cGVkIGJ5IFZpZXcuCm9jbF9Db25mb3JtU3BlY2lmaWNDbGFzc2lmaWVyVmlldz1WaWV3LmFsbEluc3RhbmNlcygpLT5leGlzdHModiB8IHYuYmFzZV9DbGFzcyA9IHNlbGYuYmFzZV9HZW5lcmFsaXphdGlvbi5zcGVjaWZpYykKCiNSYXRpb25hbAppbnZfU3Rha2Vob2xkZXJOb3RBc3NvY2lhdGlvbj1TdGFrZWhvbGRlciBbMV0gQSBTdGFrZWhvbGRlciBzdGVyZW90eXBlIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gVU1MOjpBY3RvciBvciBVTUw6OkNsYXNzIHdoaWNoIGFyZSBub3QgYSBVTUw6OkFzc29jaWF0aW9uLgoKIyBFeHBvc2UKaW52X0V4cG9zZUNsaWVudFN0ZXJlb3R5cGVkQnlWaWV3PUV4cG9zZSBbMV0gVGhlIGNsaWVudCBtdXN0IGJlIGFuIGVsZW1lbnQgc3RlcmVvdHlwZWQgYnkgVmlldy4KCiNWaWV3CiMgRklYTUU6IHRoZSBjb25zdHJhaW50IHNob3VsZCBvbmx5IGVuc3VyZSBvbmUgY29uZm9ybSBnZW5lcmFsaXphdGlvbgppbnZfVmlld1NpbmdsZVZpZXdwb2ludD1WaWV3IFsxXSBBIHZpZXcgbXVzdCBvbmx5IGNvbmZvcm0gdG8gYSBzaW5nbGUgdmlld3BvaW50LgojRklYTUU6IG5vdCBhIGNvbnN0cmFpbnQgKHF1ZXJ5Pyk6IFZpZXcgWzJdIFRoZSBkZXJpdmVkIHZhbHVlIG9mIHRoZSB2aWV3cG9pbnQgaXMgdGhlIGNsYXNzaWZpZXIgc3RlcmVvdHlwZWQgYnkgVmlld3BvaW50IHRoYXQgaXMgdGhlIGdlbmVyYWwgY2xhc3NpZmllciBvZiB0aGUgZ2VuZXJhbGl6YXRpb24gcmVsYXRpb25zaGlwIHN0ZXJlb3R5cGVkIGJ5IENvbmZvcm0gZm9yIHdoaWNoIHRoZSBWaWV3IGlzIHRoZSBzcGVjaWZpYyBjbGFzc2lmaWVyLgojRklYTUU6IG5vdCBhIGNvbnN0cmFpbnQgKHF1ZXJ5Pyk6IFZpZXcgWzNdIFRoZSBkZXJpdmVkIHZhbHVlcyBvZiB0aGUgc3Rha2Vob2xkZXIgYXR0cmlidXRlIGFyZSB0aGUgbmFtZXMgb2YgdGhlIGNsYXNzaWZpZXJzIHN0ZXJlb3R5cGVkIGJ5IFN0YWtlaG9sZGVyIHRoYXQgYXJlIHRoZSB2YWx1ZXMgb2YgdGhlIHN0YWtlaG9sZGVyIGF0dHJpYnV0ZSBvZiB0aGUgZ2VuZXJhbCBjbGFzc2lmaWVyIG9mIHRoZSBnZW5lcmFsaXphdGlvbiByZWxhdGlvbnNoaXAgc3RlcmVvdHlwZWQgYnkgQ29uZm9ybSBmb3Igd2hpY2ggdGhlIFZpZXcgaXMgdGhlIHNwZWNpZmljIGNsYXNzaWZpZXIuCgojVmlld3BvaW50CiNGSVhNRTogbm90IGEgY29uc3RyYWludCAocXVlcnk/KTpWaWV3cG9pbnQgWzFdIFRoZSBkZXJpdmVkIHZhbHVlcyBvZiB0aGUgbWV0aG9kIGF0dHJpYnV0ZSBhcmUgdGhlIG5hbWVzIG9mIHRoZSBtZXRob2RzIG9mIHRoZSBvcGVyYXRpb25zIHN0ZXJlb3R5cGVkIGJ5IHRoZSBVTUwgQ3JlYXRlIHN0ZXJlb3R5cGUgb24gdGhlIGNsYXNzaWZpZXIgc3RlcmVvdHlwZWQgYnkgVmlld3BvaW50LgppbnZfVmlld3BvaW50T3duZWRWaWV3PVZpZXdwb2ludCBbMl0gVGhlIHByb3BlcnR5IG93bmVkT3BlcmF0aW9uIG11c3QgaW5jbHVkZSBhdCBsZWFzdCBvbmUgb3BlcmF0aW9uIG5hbWVkIKtWaWV3uyB3aXRoIHRoZSBVTUwgQ3JlYXRlIHN0ZXJlb3R5cGUgYXBwbGllZC4KCiNCaW5kaW5nIENvbm5lY3RvcgppbnZfQmluZGluZ0Nvbm5lY3RvclNhbWVFbmRzVHlwZT1CaW5kaW5nIENvbm5lY3RvciBbMV0gVGhlIHR3byBlbmRzIG9mIGEgYmluZGluZyBjb25uZWN0b3IgbXVzdCBoYXZlIGVpdGhlciB0aGUgc2FtZSB0eXBlIG9yIHR5cGVzIHRoYXQgYXJlIGNvbXBhdGlibGUgc28gdGhhdCBlcXVhbGl0eSBvZiB0aGVpciB2YWx1ZXMgY2FuIGJlIGRlZmluZWQuCiNGSVhNRSBjYW4gaGF2ZSBtb3JlIHRoYXQgMiBlbmRzCgojQmxvY2sKaW52X0Fzc29jaWF0aW9uQmxvY2s9QmxvY2sgWzFdIEZvciBhbiBhc3NvY2lhdGlvbiBpbiB3aGljaCBib3RoIGVuZHMgYXJlIHR5cGVkIGJ5IGJsb2NrcywgdGhlIG51bWJlciBvZiBlbmRzIG11c3QgYmUgZXhhY3RseSB0d28uCmludl9CbG9ja0Nvbm5lY3RvclR3b0VuZHM9QmxvY2sgWzJdIFRoZSBudW1iZXIgb2YgZW5kcyBvZiBhIGNvbm5lY3RvciBvd25lZCBieSBhIGJsb2NrIG11c3QgYmUgZXhhY3RseSB0d28uIAojKEluIFN5c01MLCBhIGJpbmRpbmcgY29ubmVjdG9yIGlzIG5vdCB0eXBlZCBieSBhbiBhc3NvY2lhdGlvbiwgc28gdGhpcyBjb25zdHJhaW50IGlzIG5vdCBpbXBsaWVkIGVudGlyZWx5IGJ5IHRoZSBwcmVjZWRpbmcgY29uc3RyYWludC4pCmludl9CbG9ja1Byb3BlcnR5Tm9OYW1lPUJsb2NrIFszXSBJbiB0aGUgVU1MIG1ldGFtb2RlbCBvbiB3aGljaCBTeXNNTCBpcyBidWlsdCwgYW55IGluc3RhbmNlIG9mIHRoZSBQcm9wZXJ0eSBtZXRhY2xhc3MgdGhhdCBpcyB0eXBlZCBieSBhIGJsb2NrIChhIENsYXNzIHdpdGggdGhlIKtibG9ja7sgc3RlcmVvdHlwZSBhcHBsaWVkKSBhbmQgd2hpY2ggaXMgb3duZWQgYnkgYW4gQXNzb2NpYXRpb24gbWF5IG5vdCBoYXZlIGEgbmFtZSBhbmQgbWF5IG5vdCBiZSBkZWZpbmVkIGFzIGEgbmF2aWdhYmxlIG93bmVkIGVuZCBvZiB0aGUgYXNzb2NpYXRpb24uIChXaGlsZSB0aGUgUHJvcGVydHkgaGFzIGEgq25hbWW7IHByb3BlcnR5IGFzIGRlZmluZWQgYnkgaXRzIE5hbWVkRWxlbWVudCAKaW52X0Jsb2NrUHJvcGVydHlBc3NvY2lhdGlvbkVuZD1CbG9jayBbNF0gSW4gdGhlIFVNTCBtZXRhbW9kZWwgb24gd2hpY2ggU3lzTUwgaXMgYnVpbHQsIGEgUHJvcGVydHkgdGhhdCBpcyB0eXBlZCBieSBhIGJsb2NrIG11c3QgYmUgZGVmaW5lZCBhcyBhbiBlbmQgb2YgYW4gYXNzb2NpYXRpb24uIChBbiBpbnZlcnNlIGVuZCBvZiB0aGlzIGFzc29jaWF0aW9uLCB3aGV0aGVyIG93bmVkIGJ5IGFub3RoZXIgYmxvY2sgb3IgdGhlIGFzc29jaWF0aW9uIGl0c2VsZiwgbXVzdCBhbHdheXMgYmUgcHJlc2VudCBzbyB0aGVyZSBpcyBhbHdheXMgYSBtZXRhbW9kZWwgZWxlbWVudCB0byByZWNvcmQgdGhlIGludmVyc2UgbXVsdGlwbGljaXR5IG9mIHRoZSByZWZlcmVuY2UuKQojTm8gSW1wbGVtZW50YXRpb24gWzVdIFRoZSBmb2xsb3dpbmcgY29uc3RyYWludCB1bmRlciBzdWIgY2xhdXNlIDkuMy42LCCrQ29ubmVjdG9yuyBpbiB0aGUgVU1MIDIgU3VwZXJzdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbiBpcyByZW1vdmVkIGJ5IFN5c01MOiCrWzNdIFRoZSBDb25uZWN0YWJsZUVsZW1lbnRzIGF0dGFjaGVkIGFzIHJvbGVzIHRvIGVhY2ggQ29ubmVjdG9yRW5kIG93bmVkIGJ5IGEgQ29ubmVjdG9yIG11c3QgYmUgcm9sZXMgb2YgdGhlIENsYXNzaWZpZXIgdGhhdCBvd25lZCB0aGUgQ29ubmVjdG9yLCBvciB0aGV5IG11c3QgYmUgcG9ydHMgb2Ygc3VjaCByb2xlcy67Cmludl9CbG9ja1Byb3BlcnR5Q29tcG9zaXRlPUJsb2NrIFs2XSBJZiBhIHByb3BlcnR5IG93bmVkIGJ5IGEgU3lzTUwgQmxvY2sgb3IgU3lzTUwgVmFsdWVUeXBlIGlzIHR5cGVkIGJ5IGEgU3lzTUwgVmFsdWVUeXBlLCB0aGVuIHRoZSBhZ2dyZWdhdGlvbiBhdHRyaWJ1dGUgb2YgdGhlIHByb3BlcnR5IG11c3QgYmUgq2NvbXBvc2l0ZS67CiNGSVhNRTogdGhlIG9jbCBjb25zdHJhaW50IGFuZCB0aGUgdGV4dCBhcmUgbm90IGNvbnNpc3RlbnQgaW52X0Jsb2NrY29tcG9zaXRpb25fYWN5Y2xpYz1CbG9jayBbN10gV2l0aGluIGFuIGluc3RhbmNlIG9mIGEgU3lzTUwgQmxvY2ssIHRoZSB2YWx1ZXMgb2YgYW55IHByb3BlcnR5IHdpdGggY29tcG9zaXRlIGFnZ3JlZ2F0aW9uIChhZ2dyZWdhdGlvbiA9IGNvbXBvc2l0ZSkgbXVzdCBub3QgY29udGFpbiB0aGUgYmxvY2sgaW4gYW55IG9mIGl0cyBvd24gcHJvcGVydGllcyB0aGF0IGFsc28gaGF2ZSBjb21wb3NpdGUgYWdncmVnYXRpb24sIG9yIHdpdGhpbiBhbnkgdW5icm9rZW4gY2hhaW4gb2YgcHJvcGVydGllcyB0aGF0IGFsbCBoYXZlIGNvbXBvc2l0ZSBhZ2dyZWdhdGlvbi4gIChXaXRoaW4gYW4gaW5zdGFuY2Ugb2YgYSBTeXNNTCBCbG9jaywgdGhlIGluc3RhbmNlcyBvZiBwcm9wZXJ0aWVzIHdpdGggY29tcG9zaXRlIGFnZ3JlZ2F0aW9uIG11c3QgZm9ybSBhbiBhY3ljbGljIGdyYXBoLikKI0ZJWE1FOiBvY2xfQmxvY2tjb21wb3NpdGlvbl9hY3ljbGljPXNlbGYuYmFzZV9DbGFzcy0+Y2xvc3VyZShwYXJ0LT5zZWxlY3QocCB8IHAudHlwZS5vY2xJc0tpbmRPZihVTUw6OkNsYXNzKSkudHlwZS5vY2xBc1R5cGUoVU1MOjpDbGFzcykpLT5leGNsdWRlcyhzZWxmLmJhc2VfQ2xhc3MpCmludl9CbG9ja1NwZWNpYWxpemF0aW9uPUJsb2NrIFs4XSBBbnkgY2xhc3NpZmllciB0aGF0IHNwZWNpYWxpemVzIGEgQmxvY2sgbXVzdCBhbHNvIGhhdmUgdGhlIEJsb2NrIHN0ZXJlb3R5cGUgb3Igb25lIG9mIGl0cyBzcGVjaWFsaXphdGlvbnMgYXBwbGllZC4KI05vIEltcGxlbWVudGF0aW9uIFs5XSBUaGUgZm9sbG93aW5nIGNvbnN0cmFpbnQgdW5kZXIgc3ViIGNsYXVzZSA5LjMuNywgq0Nvbm5lY3RvckVuZLsgaW4gdGhlIFVNTCAyIFN1cGVyc3RydWN0dXJlIFNwZWNpZmljYXRpb24gaXMgcmVtb3ZlZCBieSBTeXNNTDogq1szXSBUaGUgcHJvcGVydHkgaGVsZCBpbiBzZWxmLnBhcnRXaXRoUG9ydCBtdXN0IG5vdCBiZSBhIFBvcnQuuwoKI0JvdW5kUmVmZXJlbmNlCmludl9Cb3VuZFJlZmVyZW5jZTE9Qm91bmRSZWZlcmVuY2UgWzFdIFByb3BlcnRpZXMgdG8gd2hpY2ggQm91bmRSZWZlcmVuY2UgaXMgYXBwbGllZCBtdXN0IGJlIHRoZSByb2xlIG9mIGEgY29ubmVjdG9yIGVuZCBvZiBhdCBsZWFzdCBvbmUgYmluZGluZyBjb25uZWN0b3IsIG9yIGdlbmVyYWxpemVkIGJ5IHN1Y2ggYSBwcm9wZXJ0eSB0aHJvdWdoIHJlZGVmaW5pdGlvbi4Kb2NsX0JvdW5kUmVmZXJlbmNlMT1CaW5kaW5nQ29ubmVjdG9yLmFsbEluc3RhbmNlcygpLmJhc2VfQ29ubmVjdG9yLmVuZC5yb2xlLT5leGlzdHMociB8IHI9c2VsZi5iYXNlX1Byb3BlcnR5IG9yIHNlbGYuYmFzZV9Qcm9wZXJ0eS0+Y2xvc3VyZShyZWRlZmluZWRFbGVtZW50KS0+aW5jbHVkZXMocikpCmludl9Cb3VuZFJlZmVyZW5jZTI9Qm91bmRSZWZlcmVuY2UgWzJdIFRoZSB2YWx1ZSBvZiBib3VuZEVuZCBtdXN0IGJlIGEgY29ubmVjdG9yIGVuZCBvZiBhIGJpbmRpbmcgY29ubmVjdG9yLCBhcyBpZGVudGlmaWVkIGluIGNvbnN0cmFpbnQgQm91bmRSZWZlcmVuY2UgWzFdLCBvcHBvc2l0ZSB0aGUgcHJvcGVydHksIGFzIGlkZW50aWZpZWQgaW4gY29uc3RyYWludCBCb3VuZFJlZmVyZW5jZSBbMV0uCm9jbF9Cb3VuZFJlZmVyZW5jZTI9bGV0IG9wcG9zaXRlOiBVTUw6OkNvbm5lY3RvckVuZCA9IEJpbmRpbmdDb25uZWN0b3IuYWxsSW5zdGFuY2VzKCkuYmFzZV9Db25uZWN0b3IuZW5kLT5hbnkoZSB8IGUucm9sZT1zZWxmLmJhc2VfUHJvcGVydHkgb3Igc2VsZi5iYXNlX1Byb3BlcnR5LT5jbG9zdXJlKHJlZGVmaW5lZEVsZW1lbnQpLT5pbmNsdWRlcyhlLnJvbGUpKSBpbiAgc2VsZi5ib3VuZEVuZCA9IG9wcG9zaXRlLm93bmVyLm9jbEFzVHlwZShVTUw6OkNvbm5lY3RvcikuZW5kLT5hbnkoZSB8IGU8Pm9wcG9zaXRlKQojdW5jbGVhci0tIFszXSBUaGUgcm9sZSBvZiBib3VuZEVuZCBtdXN0IGJlIGEgcHJvcGVydHkgYWNjZXNzaWJsZSBieSBuYXZpZ2F0aW9uIGZyb20gaW5zdGFuY2VzIG9mIHRoZSBibG9jayBvd25pbmcgdGhlIHByb3BlcnR5IHRvIHdoaWNoIEJvdW5kUmVmZXJlbmNlIGlzIGFwcGxpZWQsIGJ1dCBtdXN0IG5vdCBiZSB0aGUgcHJvcGVydHkgdG8gd2hpY2ggQm91bmRSZWZlcmVuY2UgaXMgYXBwbGllZCwgb3Igb25lIHRoYXQgaXQgaXMgcmVsYXRlZCB0byBieSByZWRlZmluaXRpb24uCmludl9Cb3VuZFJlZmVyZW5jZTQ9Qm91bmRSZWZlcmVuY2UgWzRdIFRoZSBsYXN0IHZhbHVlIG9mIGJpbmRpbmdQYXRoIGlzIHRoZSByb2xlIG9mIGJvdW5kRW5kLCBhbmQgdGhlIG90aGVyIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5UGF0aCBvZiB0aGUgTmVzdGVkQ29ubmVjdG9yRW5kIGFwcGxpZWQgdG8gYm91bmRFbmQsIGlmIGFueS4Kb2NsX0JvdW5kUmVmZXJlbmNlND1zZWxmLmJvdW5kRW5kID0gc2VsZi5iaW5kaW5nUGF0aC0+bGFzdCgpIGFuZCAgIChsZXQgbmNlOiBOZXN0ZWRDb25uZWN0b3JFbmQgPSBOZXN0ZWRDb25uZWN0b3JFbmQuYWxsSW5zdGFuY2VzKCktPmFueShufCBuLmJhc2VfQ29ubmVjdG9yRW5kPXNlbGYuYm91bmRFbmQpIGluIG5jZS0+b2NsSXNVbmRlZmluZWQoKSBvciBzZWxmLmJpbmRpbmdQYXRoLT5zdWJTZXF1ZW5jZSgxLCBzZWxmLmJpbmRpbmdQYXRoLT5zaXplKCktMSkgPSBuY2UucHJvcGVydHlQYXRoKQppbnZfQm91bmRSZWZlcmVuY2U1PUJvdW5kUmVmZXJlbmNlIFs1XSBQcm9wZXJ0aWVzIHRvIHdoaWNoIEJvdW5kUmVmZXJlbmNlIGlzIGFwcGxpZWQgbXVzdCBlaXRoZXIgYmUgYSByZWZlcmVuY2UgcHJvcGVydGllcyBvciB2YWx1ZSBwcm9wZXJ0aWVzLgpvY2xfQm91bmRSZWZlcmVuY2U1PVZhbHVlVHlwZS5hbGxJbnN0YW5jZXMoKS5iYXNlX0RhdGFUeXBlLT5pbmNsdWRlcyhzZWxmLmJhc2VfUHJvcGVydHkudHlwZSkgb3Igbm90IHNlbGYuYmFzZV9Qcm9wZXJ0eS5pc0NvbXBvc2l0ZSgpCmludl9Cb3VuZFJlZmVyZW5jZTY9Qm91bmRSZWZlcmVuY2UgWzZdIFByb3BlcnRpZXMgd2l0aCBCb3VuZFJlZmVyZW5jZSBhcHBsaWVkIHRoYXQgaGF2ZSBhbiB1cHBlciBtdWx0aXBsaWNpdHkgZ3JlYXRlciB0aGFuIG9uZSBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi11bmlxdWUuCm9jbF9Cb3VuZFJlZmVyZW5jZTY9c2VsZi5iYXNlX1Byb3BlcnR5LnVwcGVyID4gMSBpbXBsaWVzIHNlbGYuYmFzZV9Qcm9wZXJ0eS5pc09yZGVyZWQgYW5kIG5vdCBzZWxmLmJhc2VfUHJvcGVydHkuaXNVbmlxdWUKaW52X0JvdW5kUmVmZXJlbmNlNz1Cb3VuZFJlZmVyZW5jZSBbN10gQm91bmRSZWZlcmVuY2VzIG11c3Qgbm90IGJlIGFwcGxpZWQgdG8gcHJvcGVydGllcyB0aGF0IGFyZSByZWxhdGVkIGJ5IHJlZGVmaW5pdGlvbiB0byBvdGhlciBwcm9wZXJ0aWVzIHdpdGggQm91bmRSZWZlcmVuY2UgYXBwbGllZC4Kb2NsX0JvdW5kUmVmZXJlbmNlNz1zZWxmLmJhc2VfUHJvcGVydHkucmVkZWZpbmVkRWxlbWVudC0+bm90RW1wdHkoKSBpbXBsaWVzIEJvdW5kUmVmZXJlbmNlLmFsbEluc3RhbmNlcygpLmJhc2VfUHJvcGVydHktPmV4Y2x1ZGVzQWxsKHNlbGYuYmFzZV9Qcm9wZXJ0eS5yZWRlZmluZWRFbGVtZW50KQppbnZfQm91bmRSZWZlcmVuY2U4PUJvdW5kUmVmZXJlbmNlIFs4XSBUaGUgYmluZGluZyBjb25uZWN0b3IgaWRlbnRpZmllZCBpbiBjb25zdHJhaW50IEJvdW5kUmVmZXJlbmNlIFsxXSBtdXN0IG5vdCBoYXZlIHRoZSBzYW1lIHByb3BlcnR5IG9uIGJvdGggZW5kcywgb3IgcHJvcGVydGllcyByZWxhdGVkIGJ5IHJlZGVmaW5pdGlvbi4Kb2NsX0JvdW5kUmVmZXJlbmNlOD1sZXQgZTE6IFVNTDo6Q29ubmVjdG9yRW5kID0gc2VsZi5ib3VuZEVuZC5vd25lci5vY2xBc1R5cGUoVU1MOjpDb25uZWN0b3IpLmVuZC0+YXQoMSkgaW4gIGxldCBlMjogVU1MOjpDb25uZWN0b3JFbmQgPSBzZWxmLmJvdW5kRW5kLm93bmVyLm9jbEFzVHlwZShVTUw6OkNvbm5lY3RvcikuZW5kLT5hdCgyKSBpbiAgZTEucm9sZSA8PiBlMi5yb2xlIGFuZCAgIChlMS5yb2xlLm9jbElzS2luZE9mKFVNTDo6UHJvcGVydHkpIGFuZCBlMi5yb2xlLm9jbElzS2luZE9mKFVNTDo6UHJvcGVydHkpIGltcGxpZXMgZTEucm9sZS5vY2xBc1R5cGUoVU1MOjpQcm9wZXJ0eSkucmVkZWZpbmVkRWxlbWVudC0+ZXhjbHVkZXMoZTIucm9sZSkgYW5kIGUyLnJvbGUub2NsQXNUeXBlKFVNTDo6UHJvcGVydHkpLnJlZGVmaW5lZEVsZW1lbnQtPmV4Y2x1ZGVzKGUxLnJvbGUpKQoKI0NsYXNzaWZpZXJCZWhhdmlvclByb3BlcnR5Cmludl9DbGFzc2lmaWVyQmVoYXZpb3JQcm9wZXJ0eU9uQmxvY2s9Q2xhc3NpZmllckJlaGF2aW9yUHJvcGVydHkgWzFdIENsYXNzaWZpZXJCZWhhdmlvclByb3BlcnR5IG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gcHJvcGVydGllcyBvd25lZCAobm90IGluaGVyaXRlZCkgYnkgYmxvY2tzIHRoYXQgaGF2ZSBjbGFzc2lmaWVyIGJlaGF2aW9ycy4KaW52X0NsYXNzaWZpZXJCZWhhdmlvclByb3BlcnR5SXNDb21wb3NpdGU9Q2xhc3NpZmllckJlaGF2aW9yUHJvcGVydHkgWzJdIFByb3BlcnRpZXMgdG8gd2hpY2ggQ2xhc3NpZmllckJlaGF2aW9yUHJvcGVydHkgYXBwbGllZCBtdXN0IGJlIGNvbXBvc2l0ZS4Kb2NsX0NsYXNzaWZpZXJCZWhhdmlvclByb3BlcnR5SXNDb21wb3NpdGU9YmFzZV9Qcm9wZXJ0eS5pc0NvbXBvc2l0ZSgpCmludl9DbGFzc2lmaWVyQmVoYXZpb3JQcm9wZXJ0eVR5cGVkQnk9Q2xhc3NpZmllckJlaGF2aW9yUHJvcGVydHkgWzNdIFByb3BlcnRpZXMgdG8gd2hpY2ggQ2xhc3NpZmllckJlaGF2aW9yUHJvcGVydHkgYXBwbGllZCBtdXN0IGJlIHR5cGVkIGJ5IHRoZSBjbGFzc2lmaWVyIGJlaGF2aW9yIG9mIHRoZWlyIG93bmluZyBibG9jayBvciBhIGdlbmVyYWxpemF0aW9uIG9mIHRoZSBjbGFzc2lmaWVyIGJlaGF2aW9yLgoKI0Nvbm5lY3RvclByb3BlcnR5Cmludl9Db25uZWN0b3JQcm9wZXJ0eU9ubHlPbkJsb2NrPUNvbm5lY3RvclByb3BlcnR5IFsxXSBDb25uZWN0b3JQcm9wZXJ0eSBtYXkgb25seSBiZSBhcHBsaWVkIHRvIHByb3BlcnRpZXMgb2YgY2xhc3NlcyBzdGVyZW90eXBlZCBieSBCbG9jay4KI2ludiBpbnZfQ29ubmVjdG9yUHJvcGVydHlPbmx5T25CbG9jazogc2VsZi5iYXNlX1Byb3BlcnR5Lm93bmVyLmdldEFwcGxpZWRTdGVyZW90eXBlKCdCbG9ja3M6OkJsb2NrJyktPm5vdEVtcHR5KCkKaW52X0Nvbm5lY3RvclByb3BlcnR5UmVmZXJPd25lZENvbm5lY3Rvcj1Db25uZWN0b3JQcm9wZXJ0eSBbMl0gVGhlIGNvbm5lY3RvciBhdHRyaWJ1dGUgb2YgdGhlIGFwcGxpZWQgc3RlcmVvdHlwZSBtdXN0IHJlZmVyIHRvIGEgY29ubmVjdG9yIG93bmVkIG9yIGluaGVyaXRlZCBieSBhIGJsb2NrIG93bmluZyB0aGUgcHJvcGVydHkgb24gd2hpY2ggdGhlIHN0ZXJlb3R5cGUgaXMgYXBwbGllZC4KaW52X0Nvbm5lY3RvclByb3BlcnR5T25seUNvbXBvc2l0ZT1Db25uZWN0b3JQcm9wZXJ0eSBbM10gVGhlIGFnZ3JlZ2F0aW9uIG9mIGEgcHJvcGVydHkgc3RlcmVvdHlwZWQgYnkgQ29ubmVjdG9yUHJvcGVydHkgbXVzdCBiZSBjb21wb3NpdGUuCm9jbF9Db25uZWN0b3JQcm9wZXJ0eU9ubHlDb21wb3NpdGU9YmFzZV9Qcm9wZXJ0eS5pc0NvbXBvc2l0ZSgpCmludl9Db25uZWN0b3JQcm9wZXJ0eVR5cGVkQnlBc3NvY2lhdGlvbkJsb2NrPUNvbm5lY3RvclByb3BlcnR5IFs0XSBUaGUgdHlwZSBvZiB0aGUgY29ubmVjdG9yIHJlZmVycmVkIHRvIGJ5IGEgY29ubmVjdG9yIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGFzc29jaWF0aW9uIGNsYXNzIHN0ZXJlb3R5cGVkIGJ5IEJsb2NrLgppbnZfQ29ubmVjdG9yUHJvcGVydHlTYW1lTmFtZT1Db25uZWN0b3JQcm9wZXJ0eSBbNV0gQSBwcm9wZXJ0eSBzdGVyZW90eXBlZCBieSBDb25uZWN0b3JQcm9wZXJ0eSBtdXN0IGhhdmUgdGhlIHNhbWUgbmFtZSBhbmQgdHlwZSBhcyB0aGUgY29ubmVjdG9yIHJlZmVycmVkIHRvIGJ5IHRoZSBjb25uZWN0b3IgYXR0cmlidXRlLgoKI0RpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoCmludl9EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aFJlcXVpcmVTb3VyY2VDb250ZXh0PURpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoIFtfMV0gc291cmNlI2NvbnRleHQgbXVzdCBoYXZlIGEgdmFsdWUgd2hlbiBzb3VyY2VQcm9wZXJ0eVBhdGggaGFzIGEgdmFsdWUuCmludl9EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aFJlcXVpcmVUYXJnZXRDb250ZXh0PURpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoIFtfMl0gdGFyZ2V0I2NvbnRleHQgbXVzdCBoYXZlIGEgdmFsdWUgd2hlbiB0YXJnZXRQcm9wZXJ0eVBhdGggaGFzIGEgdmFsdWUuCmludl9EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aFNvdXJjZUNvbnRleHRJZlByb3BlcnR5PURpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoIFsxXSBzb3VyY2VDb250ZXh0IHNoYWxsIGhhdmUgYSB2YWx1ZSB3aGVuIHNvdXJjZSBpcyBhIHByb3BlcnR5LCBvdGhlcndpc2UgaXQgc2hhbGwgbm90IGhhdmUgYSB2YWx1ZS4Kb2NsX0RpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoU291cmNlQ29udGV4dElmUHJvcGVydHk9YmFzZV9EaXJlY3RlZFJlbGF0aW9uc2hpcC5zb3VyY2UtPmV4aXN0cyhzIHwgcy5vY2xJc0tpbmRPZihVTUw6OlByb3BlcnR5KSkgeG9yIHNvdXJjZUNvbnRleHQtPmlzRW1wdHkoKQppbnZfRGlyZWN0ZWRSZWxhdGlvbnNoaXBQcm9wZXJ0eVBhdGhUYXJnZXRDb250ZXh0SWZQcm9wZXJ0eT1EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aCBbMl0gdGFyZ2V0Q29udGV4dCBtYXN0IGhhdmUgYSB2YWx1ZSB3aGVuIHRhcmdldCBpcyBhIHByb3BlcnR5LCBvdGhlcndpc2UgaXQgbXVzdCBub3QgaGF2ZSBhIHZhbHVlLgpvY2xfRGlyZWN0ZWRSZWxhdGlvbnNoaXBQcm9wZXJ0eVBhdGhUYXJnZXRDb250ZXh0SWZQcm9wZXJ0eT1iYXNlX0RpcmVjdGVkUmVsYXRpb25zaGlwLnRhcmdldC0+ZXhpc3RzKHMgfCBzLm9jbElzS2luZE9mKFVNTDo6UHJvcGVydHkpKSB4b3IgdGFyZ2V0Q29udGV4dC0+aXNFbXB0eSgpCmludl9EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aFNvdXJjZVByb3BlcnR5UGF0aEltcGxpZXNQcm9wZXJ0eT1EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aCBbM10gc291cmNlIG11c3QgYmUgYSBwcm9wZXJ0eSB3aGVuIHNvdXJjZVByb3BlcnR5UGF0aCBoYXMgYSB2YWx1ZS4Kb2NsX0RpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoU291cmNlUHJvcGVydHlQYXRoSW1wbGllc1Byb3BlcnR5PXNvdXJjZVByb3BlcnR5UGF0aC0+bm90RW1wdHkoKSBpbXBsaWVzIGJhc2VfRGlyZWN0ZWRSZWxhdGlvbnNoaXAuc291cmNlLT5mb3JBbGwocyB8IHMub2NsSXNLaW5kT2YoVU1MOjpQcm9wZXJ0eSkpCmludl9EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aFRhcmdldFByb3BlcnR5UGF0aEltcGxpZXNQcm9wZXJ0eT1EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aCBbNF0gdGFyZ2V0IG11c3QgYmUgYSBwcm9wZXJ0eSB3aGVuIHRhcmdldFByb3BlcnR5UGF0aCBoYXMgYSB2YWx1ZS4Kb2NsX0RpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoVGFyZ2V0UHJvcGVydHlQYXRoSW1wbGllc1Byb3BlcnR5PXRhcmdldFByb3BlcnR5UGF0aC0+bm90RW1wdHkoKSBpbXBsaWVzIGJhc2VfRGlyZWN0ZWRSZWxhdGlvbnNoaXAudGFyZ2V0LT5mb3JBbGwocyB8IHMub2NsSXNLaW5kT2YoVU1MOjpQcm9wZXJ0eSkpCmludl9EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aFNvdXJjZUZpcnN0PURpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoIFs1XSBUaGUgcHJvcGVydHkgaW4gdGhlIGZpcnN0IHBvc2l0aW9uIG9mIHRoZSBzb3VyY2VQcm9wZXJ0eVBhdGggbGlzdCwgaWYgYW55LCBtdXN0IGJlIG93bmVkIGJ5IHRoZSBzb3VyY2VDb250ZXh0IG9yIG9uZSBvZiBpdHMgZ2VuZXJhbGl6YXRpb25zLgppbnZfRGlyZWN0ZWRSZWxhdGlvbnNoaXBQcm9wZXJ0eVBhdGhUYXJnZXRGaXJzdD1EaXJlY3RlZFJlbGF0aW9uc2hpcFByb3BlcnR5UGF0aCBbNl0gVGhlIHByb3BlcnR5IGluIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgdGFyZ2V0UHJvcGVydHlQYXRoIGxpc3QsIGlmIGFueSwgbXVzdCBiZSBvd25lZCBieSB0aGUgdGFyZ2V0Q29udGV4dCBvciBvbmUgb2YgaXRzIGdlbmVyYWxpemF0aW9ucy4KI1RPRE8gWzddIFRoZSBwcm9wZXJ0eSBhdCBlYWNoIHN1Y2Nlc3NpdmUgcG9zaXRpb24gb2YgdGhlIHNvdXJjZVByb3BlcnR5UGF0aCBhbmQgdGFyZ2V0UHJvcGVydHlQYXRoLCBmb2xsb3dpbmcgdGhlIGZpcnN0IHBvc2l0aW9uLCBtdXN0IGJlIG93bmVkIGJ5IHRoZSBCbG9jayBvciBWYWx1ZVR5cGUgdGhhdCB0eXBlcyB0aGUgcHJvcGVydHkgYXQgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyBwb3NpdGlvbiwgb3IgYSBnZW5lcmFsaXphdGlvbiBvZiB0aGUgQmxvY2sgb3IgVmFsdWVUeXBlLgppbnZfRGlyZWN0ZWRSZWxhdGlvbnNoaXBQcm9wZXJ0eVBhdGhTb3VyY2VMYXN0PURpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoIFs4XSBUaGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgYXQgdGhlIGxhc3QgcG9zaXRpb24gb2YgdGhlIHNvdXJjZVByb3BlcnR5UGF0aCBsaXN0IG11c3Qgb3duIG9yIGluaGVyaXQgdGhlIHNvdXJjZSBvZiB0aGUgc3RlcmVvdHlwZWQgZGlyZWN0ZWQgcmVsYXRpb25zaGlwLgppbnZfRGlyZWN0ZWRSZWxhdGlvbnNoaXBQcm9wZXJ0eVBhdGhUYXJnZXRMYXN0PURpcmVjdGVkUmVsYXRpb25zaGlwUHJvcGVydHlQYXRoIFs5XSBUaGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgYXQgdGhlIGxhc3QgcG9zaXRpb24gb2YgdGhlIHRhcmdldFByb3BlcnR5UGF0aCBsaXN0IG11c3Qgb3duIG9yIGluaGVyaXQgdGhlIHRhcmdldCBvZiB0aGUgc3RlcmVvdHlwZWQgZGlyZWN0ZWQgcmVsYXRpb25zaGlwLgoKI0Rpc3RyaWJ1dGVkUHJvcGVydHkKaW52X0Rpc3RyaWJ1dGVkUHJvcGVydHlUeXBlZEJ5PURpc3RyaWJ1dGVkUHJvcGVydHkgWzFdIFRoZSBEaXN0cmlidXRlZFByb3BlcnR5IHN0ZXJlb3R5cGUgbWF5IGJlIGFwcGxpZWQgb25seSB0byBwcm9wZXJ0aWVzIG9mIGNsYXNzaWZpZXJzIHN0ZXJlb3R5cGVkIGJ5IEJsb2NrIG9yIFZhbHVlVHlwZS4KI2ludiBpbnZfRGlzdHJpYnV0ZWRQcm9wZXJ0eU9ubHlPbkJsb2NrOiBzZWxmLmJhc2VfUHJvcGVydHkub3duZXIuZ2V0QXBwbGllZFN0ZXJlb3R5cGUoJ0Jsb2Nrczo6QmxvY2snKS0+bm90RW1wdHkoKSBvciBzZWxmLmJhc2VfUHJvcGVydHkub3duZXIuZ2V0QXBwbGllZFN0ZXJlb3R5cGUoJ0Jsb2Nrczo6VmFsdWVUeXBlJyktPm5vdEVtcHR5KCkKCiNFbGVtZW50UHJvcGVydHlQYXRoCmludl9FbGVtZW50UHJvcGVydHlQYXRoUHJvcGVydGllc093bmVyPUVsZW1lbnRQcm9wZXJ0eVBhdGggWzFdIFRoZSBwcm9wZXJ0eSBhdCBlYWNoIHN1Y2Nlc3NpdmUgcG9zaXRpb24gb2YgdGhlIHByb3BlcnR5UGF0aCBhdHRyaWJ1dGUsIGZvbGxvd2luZyB0aGUgZmlyc3QgcG9zaXRpb24sIG11c3QgYmUgb3duZWQgYnkgdGhlIEJsb2NrIG9yIFZhbHVlVHlwZSB0aGF0IHR5cGVzIHRoZSBwcm9wZXJ0eSBhdCB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHBvc2l0aW9uLCBvciBhIGdlbmVyYWxpemF0aW9uIG9mIHRoZSBCbG9jayBvciBWYWx1ZVR5cGUuCgojRW5kUGF0aE11bHRpcGxpY2l0eQppbnZfRW5kUGF0aE11bHRpcGxpY2l0eUJvdW5kUmVmZXJlbmNlUHJvcGVydHk9RW5kUGF0aE11bHRpcGxpY2l0eSBbMV0gUHJvcGVydGllcyB0byB3aGljaCBFbmRQYXRoTXVsdGlwbGljaXR5IGlzIGFwcGxpZWQgbXVzdCBiZSByZWxhdGVkIGJ5IHJlZGVmaW5pdGlvbiB0byBhIHByb3BlcnR5IHRvIHdoaWNoIEJvdW5kUmVmZXJlbmNlIGlzIGFwcGxpZWQuCmludl9FbmRQYXRoTXVsdGlwbGljaXR5Tm90TmVnYXRpdmU9RW5kUGF0aE11bHRpcGxpY2l0eSBbMl0gZW5kUGF0aExvd2VyIG11c3QgYmUgbm9uLW5lZ2F0aXZlLgpvY2xfRW5kUGF0aE11bHRpcGxpY2l0eU5vdE5lZ2F0aXZlPWxvd2VyID49IDAKCiNOZXN0ZWRDb25uZWN0b3JFbmQKaW52X05lc3RlZENvbm5lY3RvckVuZEZpcnN0UHJvcGVydHk9TmVzdGVkQ29ubmVjdG9yRW5kIFsxXSBUaGUgZmlyc3QgcHJvcGVydHkgaW4gcHJvcGVydHlQYXRoIG11c3QgYmUgb3duZWQgYnkgdGhlIGJsb2NrIHRoYXQgb3ducyB0aGUgY29ubmVjdG9yLCBvciBvbmUgb2YgdGhlIGJsb2NrJ3MgZ2VuZXJhbGl6YXRpb25zLgppbnZfTmVzdGVkQ29ubmVjdG9yRW5kTGFzdFByb3BlcnR5PU5lc3RlZENvbm5lY3RvckVuZCBbMl0gVGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5IGF0IHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBwcm9wZXJ0eVBhdGggbGlzdCBtdXN0IG93biBvciBpbmhlcml0IHRoZSByb2xlIHByb3BlcnR5IG9mIHRoZSBzdGVyZW90eXBlZCBjb25uZWN0b3IgZW5kLgppbnZfTmVzdGVkQ29ubmVjdG9yRW5kT25seUNvbm5lY3RvckVuZHM9TmVzdGVkQ29ubmVjdG9yRW5kIFtfM10gTmVzdGVkQ29ubmVjdG9yRW5kIG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gY29ubmVjdG9yIGVuZHMKCiNQYXJ0aWNpcGFudFByb3BlcnR5Cmludl9QYXJ0aWNpcGFudFByb3BlcnR5T25seUFzc29jaWF0aW9uQmxvY2s9UGFydGljaXBhbnRQcm9wZXJ0eSBbMV0gUGFydGljaXBhbnRQcm9wZXJ0eSBtYXkgb25seSBiZSBhcHBsaWVkIHRvIHByb3BlcnRpZXMgb2YgYXNzb2NpYXRpb24gY2xhc3NlcyBzdGVyZW90eXBlZCBieSBCbG9jay4KaW52X1BhcnRpY2lwYW50UHJvcGVydHlOb0Fzc29jaWF0aW9uTWVtYmVyRW5kcz1QYXJ0aWNpcGFudFByb3BlcnR5IFsyXSBQYXJ0aWNpcGFudFByb3BlcnR5IG1heSBub3QgYmUgYXBwbGllZCB0byBwcm9wZXJ0aWVzIHRoYXQgYXJlIG1lbWJlciBlbmRzIG9mIGFuIGFzc29jaWF0aW9uLgppbnZfUGFydGljaXBhbnRQcm9wZXJ0eU9ubHlOb25lQWdncmVnYXRpb249UGFydGljaXBhbnRQcm9wZXJ0eSBbM10gVGhlIGFnZ3JlZ2F0aW9uIG9mIGEgcHJvcGVydHkgc3RlcmVvdHlwZWQgYnkgUGFydGljaXBhbnRQcm9wZXJ0eSBtdXN0IGJlIG5vbmUuCmludl9QYXJ0aWNpcGFudFByb3BlcnR5U2FtZUVuZD1QYXJ0aWNpcGFudFByb3BlcnR5IFs0XSBUaGUgZW5kIGF0dHJpYnV0ZSBvZiB0aGUgYXBwbGllZCBzdGVyZW90eXBlIG11c3QgcmVmZXIgdG8gYSBtZW1iZXIgZW5kIG9mIHRoZSBhc3NvY2lhdGlvbiBibG9jayBvd25pbmcgdGhlIHByb3BlcnR5IG9uIHdoaWNoIHRoZSBzdGVyZW90eXBlIGlzIGFwcGxpZWQuCmludl9QYXJ0aWNpcGFudFByb3BlcnR5U2FtZVR5cGU9UGFydGljaXBhbnRQcm9wZXJ0eSBbNV0gQSBwcm9wZXJ0eSBzdGVyZW90eXBlZCBieSBQYXJ0aWNpcGFudFByb3BlcnR5IG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBwcm9wZXJ0eSByZWZlcnJlZCB0byBieSB0aGUgZW5kIGF0dHJpYnV0ZS4KaW52X1BhcnRpY2lwYW50UHJvcGVydHlFbmRNdWx0aXBsaWNpdHk9UGFydGljaXBhbnRQcm9wZXJ0eSBbNl0gVGhlIHByb3BlcnR5IHJlZmVycmVkIHRvIGJ5IGVuZCBtdXN0IGhhdmUgYSBtdWx0aXBsaWNpdHkgb2YgMS4KCiNQcm9wZXJ0eVNwZWNpZmljVHlwZQppbnZfUHJvcGVydHlTcGVjaWZpY1R5cGVVbmlxdWVQcm9wZXJ0eT1Qcm9wZXJ0eVNwZWNpZmljVHlwZSBbMV0gQSBjbGFzc2lmaWVyIHRvIHdoaWNoIHRoZSBQcm9wZXJ0eVNwZWNpZmljVHlwZSBzdGVyZW90eXBlIGlzIGFwcGxpZWQgbXVzdCBiZSByZWZlcmVuY2VkIGFzIHRoZSB0eXBlIG9mIG9uZSBhbmQgb25seSBvbmUgcHJvcGVydHkuCmludl9Qcm9wZXJ0eVNwZWNpZmljVHlwZU1pc3NpbmdOYW1lPVByb3BlcnR5U3BlY2lmaWNUeXBlIFtfMl0gVGhlIG5hbWUgb2YgYSBjbGFzc2lmaWVyIHRvIHdoaWNoIGEgUHJvcGVydHlTcGVjaWZpY1R5cGUgaXMgYXBwbGllZCBtdXN0IGJlIG1pc3NpbmcuICAoVGhlIKtuYW1luyBhdHRyaWJ1dGUgb2YgdGhlIE5hbWVkRWxlbWVudCBtZXRhY2xhc3MgbXVzdCBiZSBlbXB0eS4pCgojVmFsdWVUeXBlCmludl9WYWx1ZVR5cGVTcGVjaWFsaXphdGlvbnNBcmVWYWx1ZXR5cGVzPVZhbHVlVHlwZSBbMV0gQW55IGNsYXNzaWZpZXIgdGhhdCBzcGVjaWFsaXplcyBhIFZhbHVlVHlwZSBtdXN0IGFsc28gaGF2ZSB0aGUgVmFsdWVUeXBlIHN0ZXJlb3R5cGUgYXBwbGllZC4KaW52X1ZhbHVlVHlwZVVuaXQ9VmFsdWVUeXBlIFsyXSBUaGUgdW5pdCBvZiBhIFZhbHVlVHlwZSwgaWYgYW55LCBtdXN0IGJlIGFuIEluc3RhbmNlU3BlY2lmaWNhdGlvbiBjbGFzc2lmaWVkIGJ5IFN5c01MJ3MgVW5pdCBibG9jayBpbiB0aGUgVW5pdEFuZFF1YW50aXR5S2luZCBtb2RlbCBsaWJyYXJ5IG9yIGEgc3BlY2lhbGl6YXRpb24gb2YgaXQuCmludl9WYWx1ZVR5cGVRdWFudGl0eUtpbmQ9VmFsdWVUeXBlIFszXSBUaGUgcXVhbnRpdHlLaW5kIG9mIGEgVmFsdWVUeXBlLCBpZiBhbnksIG11c3QgYmUgYW4gSW5zdGFuY2VTcGVjaWZpY2F0aW9uIGNsYXNzaWZpZWQgYnkgU3lzTUwncyBRdWFudGl0eUtpbmQgYmxvY2sgaW4gdGhlIFVuaXRBbmRRdWFudGl0eUtpbmQgbW9kZWwgbGlicmFyeSBvciBhIHNwZWNpYWxpemF0aW9uIG9mIGl0LgoKI0FjY2VwdENoYW5nZVN0cnVjdHVyYWxGZWF0dXJlRXZlbnRBY3Rpb24KaW52X0FjY2VwdENoYW5nZVN0cnVjdHVyYWxGZWF0dXJlRXZlbnRBY3Rpb25PbmVUcmlnZ2VyPUFjY2VwdENoYW5nZVN0cnVjdHVyYWxGZWF0dXJlRXZlbnRBY3Rpb24gWzFdIFRoZSBhY3Rpb24gaGFzIGV4YWN0bHkgb25lIHRyaWdnZXIsIHRoZSBldmVudCBvZiB3aGljaCBtdXN0IGJlIGEgY2hhbmdlIHN0cnVjdHVyYWwgZmVhdHVyZSBldmVudC4Kb2NsX0FjY2VwdENoYW5nZVN0cnVjdHVyYWxGZWF0dXJlRXZlbnRBY3Rpb25PbmVUcmlnZ2VyPXNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi50cmlnZ2VyLT5zaXplKCk9MSBhbmQgbGV0IHRyaWdnZXI6IFVNTDo6VHJpZ2dlciA9IHNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi50cmlnZ2VyLT5hbnkodHJ1ZSkgaW4gQ2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudC5hbGxJbnN0YW5jZXMoKS5iYXNlX0NoYW5nZUV2ZW50LT5pbmNsdWRlcyh0cmlnZ2VyLmV2ZW50KQppbnZfQWNjZXB0Q2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudEFjdGlvbnR3b1Jlc3VsdFBpbj1BY2NlcHRDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50QWN0aW9uIFsyXSBUaGUgYWN0aW9uIGhhcyB0d28gcmVzdWx0IHBpbnMgd2l0aCB0eXBlIGFuZCBvcmRlcmluZyB0aGUgc2FtZSBhcyB0aGUgdHlwZSBhbmQgb3JkZXJpbmcgb2YgdGhlIHN0cnVjdHVyYWwgZmVhdHVyZSBvZiB0aGUgdHJpZ2dlciBldmVudCwgYW5kIG11bHRpcGxpY2l0eSBjb21wYXRpYmxlIHdpdGggdGhlIG11bHRpcGxpY2l0eSBvZiB0aGUgc3RydWN0dXJhbCBmZWF0dXJlLgpvY2xfQWNjZXB0Q2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudEFjdGlvbnR3b1Jlc3VsdFBpbj1sZXQgZXZlbnQ6IENoYW5nZVN0cnVjdHVyYWxGZWF0dXJlRXZlbnQgPSBDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50LmFsbEluc3RhbmNlcygpLT5hbnkoZSB8IGUuYmFzZV9DaGFuZ2VFdmVudCA9IHNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi50cmlnZ2VyLT5hbnkodHJ1ZSkuZXZlbnQpIGluIHNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi5yZXN1bHQtPnNpemUoKSA9IDIgYW5kIHNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi5yZXN1bHQtPmZvckFsbChyIHwgci50eXBlID0gZXZlbnQuc3RydWN0dXJhbEZlYXR1cmUudHlwZSBhbmQgci5pc09yZGVyZWQgPSBldmVudC5zdHJ1Y3R1cmFsRmVhdHVyZS5pc09yZGVyZWQgYW5kIHIubG93ZXIgPD0gZXZlbnQuc3RydWN0dXJhbEZlYXR1cmUubG93ZXIgYW5kIHIudXBwZXIgPj0gZXZlbnQuc3RydWN0dXJhbEZlYXR1cmUudXBwZXIpCmludl9BY2NlcHRDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50QWN0aW9uQ29udGV4dE93bnNTdHJ1Y3R1cmFsRmVhdHVyZT1BY2NlcHRDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50QWN0aW9uIFszXSBUaGUgc3RydWN0dXJhbCBmZWF0dXJlIG9mIHRoZSB0cmlnZ2VyIGV2ZW50IG11c3QgYmUgb3duZWQgYnkgb3IgaW5oZXJpdGVkIGJ5IHRoZSAjY29udGV4dCBvZiB0aGUgYmVoYXZpb3IgY29udGFpbmluZyB0aGUgYWN0aW9uLiAoVGhlICNjb250ZXh0IG9mIGEgYmVoYXZpb3IgaXMgZWl0aGVyIGl0cyBvd25pbmcgYmxvY2sgb3IgaXRzZWxmIGlmIGl0IGlzIG5vdCBvd25lZCBieSBhIGJsb2NrLiBTZWUgZGVmaW5pdGlvbiBpbiB0aGUgVU1MIDIgU3VwZXJzdHJ1Y3R1cmUgU3BlY2lmaWNhdGlvbi4pCm9jbF9BY2NlcHRDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50QWN0aW9uQ29udGV4dE93bnNTdHJ1Y3R1cmFsRmVhdHVyZT1sZXQgZXZlbnQ6IENoYW5nZVN0cnVjdHVyYWxGZWF0dXJlRXZlbnQgPSBDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50LmFsbEluc3RhbmNlcygpLT5hbnkoZSB8IGUuYmFzZV9DaGFuZ2VFdmVudCA9IHNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi50cmlnZ2VyLT5hbnkodHJ1ZSkuZXZlbnQpIGluIHNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi5fJ2NvbnRleHQnLT5ub3RFbXB0eSgpIGFuZCBzZWxmLmJhc2VfQWNjZXB0RXZlbnRBY3Rpb24uXydjb250ZXh0Jy5hbGxGZWF0dXJlcygpLT5pbmNsdWRlcyhldmVudC5zdHJ1Y3R1cmFsRmVhdHVyZSkKaW52X0FjY2VwdENoYW5nZVN0cnVjdHVyYWxGZWF0dXJlRXZlbnRBY3Rpb25DYW5BY2Nlc3NTdHJ1Y3R1cmFsRmVhdHVyZT1BY2NlcHRDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50QWN0aW9uIFs0XSBWaXNpYmlsaXR5IG9mIHRoZSBzdHJ1Y3R1cmFsIGZlYXR1cmUgb2YgdGhlIHRyaWdnZXIgZXZlbnQgbXVzdCBhbGxvdyBhY2Nlc3MgdG8gdGhlIG9iamVjdCBwZXJmb3JtaW5nIHRoZSBhY3Rpb24uCm9jbF9BY2NlcHRDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50QWN0aW9uQ2FuQWNjZXNzU3RydWN0dXJhbEZlYXR1cmU9bGV0IGV2ZW50OiBDaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50ID0gQ2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudC5hbGxJbnN0YW5jZXMoKS0+YW55KGUgfCBlLmJhc2VfQ2hhbmdlRXZlbnQgPSBzZWxmLmJhc2VfQWNjZXB0RXZlbnRBY3Rpb24udHJpZ2dlci0+YW55KHRydWUpLmV2ZW50KSBpbiBpZiBldmVudC5zdHJ1Y3R1cmFsRmVhdHVyZS52aXNpYmlsaXR5ID0gVU1MOjpWaXNpYmlsaXR5S2luZDo6cHJpdmF0ZSB0aGVuIHNlbGYuYmFzZV9BY2NlcHRFdmVudEFjdGlvbi5fJ2NvbnRleHQnLmZlYXR1cmUtPmluY2x1ZGVzKGV2ZW50LnN0cnVjdHVyYWxGZWF0dXJlKSBlbHNlIGlmIGV2ZW50LnN0cnVjdHVyYWxGZWF0dXJlLnZpc2liaWxpdHkgPSBVTUw6OlZpc2liaWxpdHlLaW5kOjpwcm90ZWN0ZWQgdGhlbiBzZWxmLmJhc2VfQWNjZXB0RXZlbnRBY3Rpb24uXydjb250ZXh0Jy5hbGxGZWF0dXJlcygpLT5pbmNsdWRlcyhldmVudC5zdHJ1Y3R1cmFsRmVhdHVyZSkgZWxzZSBpZiBldmVudC5zdHJ1Y3R1cmFsRmVhdHVyZS52aXNpYmlsaXR5ID0gVU1MOjpWaXNpYmlsaXR5S2luZDo6XydwYWNrYWdlJyB0aGVuIGxldCB0aGVQYWNrYWdlOiBVTUw6OlBhY2thZ2UgPSBldmVudC5zdHJ1Y3R1cmFsRmVhdHVyZS5hbGxOYW1lc3BhY2VzKCktPnNlbGVjdChuIHwgbi5vY2xJc0tpbmRPZihVTUw6OlBhY2thZ2UpKS0+Zmlyc3QoKS5vY2xBc1R5cGUoVU1MOjpQYWNrYWdlKSBpbiAobm90IHRoZVBhY2thZ2Uub2NsSXNVbmRlZmluZWQoKSkgYW5kICggbGV0IGluZGV4OiBJbnRlZ2VyID0gZXZlbnQuc3RydWN0dXJhbEZlYXR1cmUuYWxsTmFtZXNwYWNlcygpLT5pbmRleE9mKHRoZVBhY2thZ2UpIGluIGV2ZW50LnN0cnVjdHVyYWxGZWF0dXJlLmFsbE5hbWVzcGFjZXMoKS0+c3ViT3JkZXJlZFNldCgxLCBpbmRleCkgLT5pdGVyYXRlKG47IGFjYzogQm9vbGVhbj10cnVlIHwgYWNjIGFuZCBub3QgKG4udmlzaWJpbGl0eT1VTUw6OlZpc2liaWxpdHlLaW5kOjpwcml2YXRlIG9yIG4udmlzaWJpbGl0eT1VTUw6OlZpc2liaWxpdHlLaW5kOjpwcm90ZWN0ZWQpKSApIGVsc2UgdHJ1ZSBlbmRpZiBlbmRpZiBlbmRpZgojTm8gaW1wbGVtZW50YXRpb25bNV0gVGhlIGNvbnN0cmFpbnQgdW5kZXIgc3ViIGNsYXVzZSAxMS4zLjIsIKtBY2NlcHRFdmVudEFjdGlvbrsgaW4gdGhlIFVNTCAyIFN1cGVyc3RydWN0dXJlIFNwZWNpZmljYXRpb24sIKtbMl0gVGhlcmUgYXJlIG5vIG91dHB1dCBwaW5zIGlmIHRoZSB0cmlnZ2VyIGV2ZW50cyBhcmUgb25seSBDaGFuZ2VFdmVudHMsuyBpcyByZW1vdmVkIGZvciBhY2NlcHQgZXZlbnQgYWN0aW9ucyB0aGF0IGhhdmUgQWNjZXB0Q2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudEFjdGlvbiBhcHBsaWVkLgoKI0FkZEZsb3dQcm9wZXJ0eVZhbHVlT25OZXN0ZWRQb3J0QWN0aW9uCmludl9BZGRGbG93UHJvcGVydHlWYWx1ZU9uTmVzdGVkUG9ydEFjdGlvbkZlYXR1cmVGbG93UHJvcGVydHk9QWRkRmxvd1Byb3BlcnR5VmFsdWVPbk5lc3RlZFBvcnRBY3Rpb24gWzFdIFRoZSBzdHJ1Y3R1cmFsIGZlYXR1cmUgcmVmZXJyZWQgYnkgYWN0aW9ucyB3aXRoIHRoaXMgc3RlcmVvdHlwZSBhcHBsaWVkIG11c3QgaGF2ZSBGbG93UHJvcGVydHkgYXBwbGllZC4Kb2NsX0FkZEZsb3dQcm9wZXJ0eVZhbHVlT25OZXN0ZWRQb3J0QWN0aW9uRmVhdHVyZUZsb3dQcm9wZXJ0eT1GbG93UHJvcGVydHkuYWxsSW5zdGFuY2VzKCkuYmFzZV9Qcm9wZXJ0eS0+aW5jbHVkZXMoc2VsZi5iYXNlX0FkZFN0cnVjdHVyYWxGZWF0dXJlVmFsdWVBY3Rpb24uc3RydWN0dXJhbEZlYXR1cmUpCmludl9BZGRGbG93UHJvcGVydHlWYWx1ZU9uTmVzdGVkUG9ydEFjdGlvbk9uTmVzdGVkUG9ydEZpcnN0T3duZWRCeVRhcmdldFR5cGU9QWRkRmxvd1Byb3BlcnR5VmFsdWVPbk5lc3RlZFBvcnRBY3Rpb24gWzJdIFRoZSBwb3J0IGF0IHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgb25OZXN0ZWRQb3J0IGxpc3Qgc2hhbGwgYmUgb3duZWQgYnkgdGhlIGJsb2NrIHRoYXQgdHlwZXMgdGhlIG9iamVjdHBpbiBvZiB0aGUgc3RlcmVvdHlwZWQgYWN0aW9uLCBvciBvbmUgb2YgdGhhdCBibG9jaydzIGdlbmVyYWxpemF0aW9ucy4Kb2NsX0FkZEZsb3dQcm9wZXJ0eVZhbHVlT25OZXN0ZWRQb3J0QWN0aW9uT25OZXN0ZWRQb3J0Rmlyc3RPd25lZEJ5VGFyZ2V0VHlwZT1zZWxmLmJhc2VfQWRkU3RydWN0dXJhbEZlYXR1cmVWYWx1ZUFjdGlvbi5vYmplY3QudHlwZS5vY2xBc1R5cGUoVU1MOjpDbGFzc2lmaWVyKS5mZWF0dXJlLT5pbmNsdWRlcyhzZWxmLm9uTmVzdGVkUG9ydC0+Zmlyc3QoKSkKaW52X0FkZEZsb3dQcm9wZXJ0eVZhbHVlT25OZXN0ZWRQb3J0QWN0aW9uUGF0aENvbnNpc3RlbmN5PUFkZEZsb3dQcm9wZXJ0eVZhbHVlT25OZXN0ZWRQb3J0QWN0aW9uIFszXSBUaGUgcG9ydCBhdCBlYWNoIHN1Y2Nlc3NpdmUgcG9zaXRpb24gb2YgdGhlIG9uTmVzdGVkUG9ydCBhdHRyaWJ1dGUsIGZvbGxvd2luZyB0aGUgZmlyc3QgcG9zaXRpb24sIHNoYWxsIGJlIG93bmVkIGJ5IHRoZSBCbG9jayB0aGF0IHR5cGVzIHRoZSBwb3J0IGF0IHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgcG9zaXRpb24sIG9yIGEgZ2VuZXJhbGl6YXRpb24gb2YgdGhhdCBCbG9jawppbnZfQWRkRmxvd1Byb3BlcnR5VmFsdWVPbk5lc3RlZFBvcnRBY3Rpb25Pbk5lc3RlZFBvcnRMYXN0VHlwZU93bnNJbnZvY2F0aW9uT25Qb3J0PUFkZEZsb3dQcm9wZXJ0eVZhbHVlT25OZXN0ZWRQb3J0QWN0aW9uIFs0XSBUaGUgdHlwZSBvZiB0aGUgcG9ydCBhdCB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgb25OZXN0ZWRQb3J0IGxpc3Qgc2hhbGwgb3duIG9yIGluaGVyaXQgdGhlIGZsb3cgcHJvcGVydHkgdGhhdCBpcyB0aGUgc3RydWN0dXJhbCBmZWF0dXJlIG9mIHRoZSBzdGVyZW90eXBlZCBhY3Rpb24Kb2NsX0FkZEZsb3dQcm9wZXJ0eVZhbHVlT25OZXN0ZWRQb3J0QWN0aW9uT25OZXN0ZWRQb3J0TGFzdFR5cGVPd25zSW52b2NhdGlvbk9uUG9ydD1zZWxmLm9uTmVzdGVkUG9ydC0+bGFzdCgpLnR5cGUub2NsQXNUeXBlKFVNTDo6Q2xhc3NpZmllcikuYWxsRmVhdHVyZXMoKS0+aW5jbHVkZXMoc2VsZi5iYXNlX0FkZFN0cnVjdHVyYWxGZWF0dXJlVmFsdWVBY3Rpb24uc3RydWN0dXJhbEZlYXR1cmUpCgojQ2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudAppbnZfQ2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudE5vdFN0YXRpYz1DaGFuZ2VTdHJ1Y3R1cmFsRmVhdHVyZUV2ZW50IFsxXSBUaGUgc3RydWN0dXJhbCBmZWF0dXJlIG11c3Qgbm90IGJlIHN0YXRpYy4KI2ludiBpbnZfU3RydWN0dXJhbEZlYXR1cmVOb3RTdGF0aWM6IHNlbGYuYmFzZV9DbGFzcy4gRklYTUUgOiBzdHJ1Y3R1cmFsIGZlYXR1cmUgPC0gUHJvcGVydHkgd2hhdCBpcyB0aGUgbGluayB3aXRoIHRoZSBiYXNlX0NsYXNzPwppbnZfQ2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudE9uZUZlYXR1cmluZ0NsYXNzaWZpZXI9Q2hhbmdlU3RydWN0dXJhbEZlYXR1cmVFdmVudCBbMl0gVGhlIHN0cnVjdHVyYWwgZmVhdHVyZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZmVhdHVyaW5nQ2xhc3NpZmllci4KCiNEaXJlY3RlZEZlYXR1cmUKaW52X0RpcmVjdGVkRmVhdHVyZU9ubHlCZWhhdmlvcmFsPURpcmVjdGVkRmVhdHVyZSBbMV0gRGlyZWN0ZWRGZWF0dXJlIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gYmVoYXZpb3JhbCBmZWF0dXJlcywgb3IgdG8gcHJvcGVydGllcyB0aGF0IGRvIG5vdCBoYXZlIEZsb3dQcm9wZXJ0eSBhcHBsaWVkLCBpbmNsdWRpbmcgb24gc3Vic2V0dGVkIG9yIHJlZGVmaW5lZCBmZWF0dXJlcy4KI0ZJWE1FOiB3aGF0IGlzIHRoZSBsaW5rPyBub24tcHJvdmlkZWQgZGlyZWN0aW9uIGVudW0sIGJ1dCBubyBpZGVhIGZvciB0aGUgcmVzdCAKI1RPRE8gWzJdIEEgbm9uLXByb3ZpZGVkIG9wZXJhdGlvbiBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYmVoYXZpb3IgYXMgaXRzIG1ldGhvZC4KCiNGbG93UHJvcGVydHkKaW52X0Zsb3dQcm9wZXJ0eVR5cGVkQnk9Rmxvd1Byb3BlcnR5IFsxXSBBIEZsb3dQcm9wZXJ0eSBpcyB0eXBlZCBieSBhIFZhbHVlVHlwZSwgQmxvY2ssIG9yIFNpZ25hbC4KCiNGdWxsUG9ydAppbnZfRnVsbFBvcnROb3RQcm94eVBvcnQ9RnVsbFBvcnQgWzFdOiBGdWxsIHBvcnRzIGNhbm5vdCBhbHNvIGJlIHByb3h5IHBvcnRzLiBUaGlzIGFwcGxpZXMgZXZlbiBpZiBzb21lIG9mIHRoZSBzdGVyZW90eXBlcyBhcmUgb24gc3Vic2V0dGVkIG9yIHJlZGVmaW5lZCBwb3J0cy4KaW52X0Z1bGxQb3J0Tm90Qm91bmRUb0Z1bGxQb3J0PUZ1bGxQb3J0IFsyXSBCaW5kaW5nIGNvbm5lY3RvcnMgY2Fubm90IGxpbmsgZnVsbCBwb3J0cyAoZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCBvdGhlciBiaW5kaW5nIGNvbm5lY3RvcnMpIHRvIG90aGVyIGNvbXBvc2l0ZSBwcm9wZXJ0aWVzIG9mIHRoZSBibG9jayBvd25pbmcgdGhlIGZ1bGwgcG9ydCAob3IgdGhhdCBibG9jaydzIGdlbmVyYWxpemF0aW9ucyBvciBzcGVjaWFsaXphdGlvbnMpLCB1bmxlc3MgdGhlIGNvbXBvc2l0ZSBwcm9wZXJ0aWVzIGFyZSBub24tZnVsbCBwb3J0cy4Kb2NsX0Z1bGxQb3J0Tm90Qm91bmRUb0Z1bGxQb3J0PWxldCBmdWxsUG9ydHM6IFNldChVTUw6OlBvcnQpID0gRnVsbFBvcnQuYWxsSW5zdGFuY2VzKCkuYmFzZV9Qb3J0LT5hc1NldCgpIGluIEJpbmRpbmdDb25uZWN0b3IuYWxsSW5zdGFuY2VzKCkuYmFzZV9Db25uZWN0b3ItPnNlbGVjdChjIHwgYy5lbmQucm9sZS0+aW5jbHVkZXMoc2VsZi5iYXNlX1BvcnQpKS0+Zm9yQWxsKGMgfCBmdWxsUG9ydHMtPmV4Y2x1ZGVzQWxsKGMuZW5kLnJvbGUtPnJlamVjdChyIHwgcj1zZWxmLmJhc2VfUG9ydCkpKQppbnZfRnVsbFBvcnROb3RCZWhhdmlvcmFsPUZ1bGxQb3J0IFszXTogRnVsbCBwb3J0cyBjYW5ub3QgYmUgYmVoYXZpb3JhbCAoaXNCZWhhdmlvcj1mYWxzZSkuCm9jbF9GdWxsUG9ydE5vdEJlaGF2aW9yYWw9YmFzZV9Qb3J0LmlzQmVoYXZpb3IgPSBmYWxzZQoKI0ludGVyZmFjZUJsb2NrCmludl9JbnRlcmZhY2VCbG9ja05vQmVoYXZpb3I9SW50ZXJmYWNlQmxvY2sgWzFdIEludGVyZmFjZSBibG9ja3MgY2Fubm90IG93biBvciBpbmhlcml0IGJlaGF2aW9ycywgaGF2ZSBjbGFzc2lmaWVyIGJlaGF2aW9ycywgb3IgbWV0aG9kcyBmb3IgdGhlaXIgYmVoYXZpb3JhbCBmZWF0dXJlcy4KaW52X0ludGVyZmFjZUJsb2NrTm9Db21wb3NpdGVQcm9wZXJ0eT1JbnRlcmZhY2VCbG9jayBbMl0gSW50ZXJmYWNlIGJsb2NrcyBjYW5ub3QgaGF2ZSBjb21wb3NpdGUgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgcG9ydHMuCmludl9JbnRlcmZhY2VCbG9ja1BvcnRUeXBlPUludGVyZmFjZUJsb2NrIFszXSBQb3J0cyBvd25lZCBieSBpbnRlcmZhY2UgYmxvY2tzIGNhbiBvbmx5IGJlIHR5cGVkIGJ5IGludGVyZmFjZSBibG9ja3MuCmludl9JbnRlcmZhY2VCbG9ja0lzQ29uanVnYXRlZE5vdFVzZWQ9SW50ZXJmYWNlQmxvY2sgWzRdIEFueSBwb3J0IHR5cGVkIGJ5IGFuIEludGVyZmFjZUJsb2NrIHNoYWxsIGhhdmUgaXRzIGlzQ29uanVnYXRlZCBwcm9wZXJ0eSBzZXQgdG8gZmFsc2UuCm9jbF9JbnRlcmZhY2VCbG9ja0lzQ29uanVnYXRlZE5vdFVzZWQ9VU1MOjpQb3J0LmFsbEluc3RhbmNlcygpLT5mb3JBbGwocCB8IHAudHlwZSA9IHNlbGYuYmFzZV9DbGFzcyBpbXBsaWVzIHAuaXNDb25qdWdhdGVkPWZhbHNlKQoKI0ludm9jYXRpb25Pbk5lc3RlZFBvcnRBY3Rpb24KaW52X0ludm9jYXRpb25Pbk5lc3RlZFBvcnRBY3Rpb25SZXF1aXJlZE9uUG9ydD1JbnZvY2F0aW9uT25OZXN0ZWRQb3J0QWN0aW9uIFsxXSBUaGUgb25Qb3J0IHByb3BlcnR5IG9mIGFuIGludm9jYXRpb24gYWN0aW9uIG11c3QgaGF2ZSBhIHZhbHVlIHdoZW4gdGhpcyBzdGVyZW90eXBlIGlzIGFwcGxpZWQuCmludl9JbnZvY2F0aW9uT25OZXN0ZWRQb3J0QWN0aW9uT25OZXN0ZWRQb3J0Rmlyc3RPd25lZEJ5VGFyZ2V0VHlwZT1JbnZvY2F0aW9uT25OZXN0ZWRQb3J0QWN0aW9uIFsyXSBUaGUgcG9ydCBhdCB0aGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIG9uTmVzdGVkUG9ydCBsaXN0IG11c3QgYmUgb3duZWQgKGRpcmVjdGx5IG9yIHZpYSBpbmhlcml0YW5jZSkgYnkgYSBibG9jayB0aGF0IHR5cGVzIHRoZSB0YXJnZXQgcGluIG9mIHRoZSBpbnZvY2F0aW9uIGFjdGlvbiwgb3Igb25lIG9mIHRoZSBibG9jaydzIGdlbmVyYWxpemF0aW9ucy4Kb2NsX0ludm9jYXRpb25Pbk5lc3RlZFBvcnRBY3Rpb25Pbk5lc3RlZFBvcnRGaXJzdE93bmVkQnlUYXJnZXRUeXBlPWxldCB0YXJnZXQ6IFVNTDo6SW5wdXRQaW4gPSBpZiBzZWxmLmJhc2VfSW52b2NhdGlvbkFjdGlvbi5vY2xJc0tpbmRPZihVTUw6OkNhbGxPcGVyYXRpb25BY3Rpb24pIHRoZW4gc2VsZi5iYXNlX0ludm9jYXRpb25BY3Rpb24ub2NsQXNUeXBlKFVNTDo6Q2FsbE9wZXJhdGlvbkFjdGlvbikudGFyZ2V0IGVsc2UgaWYgc2VsZi5iYXNlX0ludm9jYXRpb25BY3Rpb24ub2NsSXNLaW5kT2YoVU1MOjpTZW5kU2lnbmFsQWN0aW9uKSB0aGVuIHNlbGYuYmFzZV9JbnZvY2F0aW9uQWN0aW9uLm9jbEFzVHlwZShVTUw6OlNlbmRTaWduYWxBY3Rpb24pLnRhcmdldCBlbHNlIGlmIHNlbGYuYmFzZV9JbnZvY2F0aW9uQWN0aW9uLm9jbElzS2luZE9mKFVNTDo6U2VuZE9iamVjdEFjdGlvbikgdGhlbiBzZWxmLmJhc2VfSW52b2NhdGlvbkFjdGlvbi5vY2xBc1R5cGUoVU1MOjpTZW5kT2JqZWN0QWN0aW9uKS50YXJnZXQgZWxzZSBpbnZhbGlkIGVuZGlmIGVuZGlmIGVuZGlmIGluIG5vdCB0YXJnZXQub2NsSXNVbmRlZmluZWQoKSBhbmQgKGxldCB0YXJnZXRfdHlwZTogVU1MOjpDbGFzcyA9IEJsb2NrLmFsbEluc3RhbmNlcygpLT5hbnkoYiB8IGIuYmFzZV9DbGFzcyA9IHRhcmdldC50eXBlKS5iYXNlX0NsYXNzIGluIG5vdCB0YXJnZXRfdHlwZS5vY2xJc1VuZGVmaW5lZCgpIGFuZCB0YXJnZXRfdHlwZS5hbGxGZWF0dXJlcygpLT5pbmNsdWRlcyhzZWxmLm9uTmVzdGVkUG9ydC0+Zmlyc3QoKSkpCmludl9JbnZvY2F0aW9uT25OZXN0ZWRQb3J0QWN0aW9uUGF0aENvbnNpc3RlbmN5PUludm9jYXRpb25Pbk5lc3RlZFBvcnRBY3Rpb24gWzNdIFRoZSBwb3J0IGF0IGVhY2ggc3VjY2Vzc2l2ZSBwb3NpdGlvbiBvZiB0aGUgb25OZXN0ZWRQb3J0IGF0dHJpYnV0ZSwgZm9sbG93aW5nIHRoZSBmaXJzdCBwb3NpdGlvbiwgc2hhbGwgYmUgb3duZWQgYnkgdGhlIEJsb2NrIHRoYXQgdHlwZXMgdGhlIHBvcnQgYXQgdGhlIGltbWVkaWF0ZWx5IHByZWNlZGluZyBwb3NpdGlvbiwgb3IgYSBnZW5lcmFsaXphdGlvbiBvZiB0aGF0IEJsb2NrLgppbnZfSW52b2NhdGlvbk9uTmVzdGVkUG9ydEFjdGlvbk9uTmVzdGVkUG9ydExhc3RUeXBlT3duc0ludm9jYXRpb25PblBvcnQ9SW52b2NhdGlvbk9uTmVzdGVkUG9ydEFjdGlvbiBbNF0gVGhlIHR5cGUgb2YgdGhlIHBvcnQgYXQgdGhlIGxhc3QgcG9zaXRpb24gb2YgdGhlIG9uTmVzdGVkUG9ydCBsaXN0IG11c3Qgb3duIG9yIGluaGVyaXQgdGhlIG9uUG9ydCBwb3J0IG9mIHRoZSBzdGVyZW90eXBlZCBpbnZvY2F0aW9uIGFjdGlvbi4Kb2NsX0ludm9jYXRpb25Pbk5lc3RlZFBvcnRBY3Rpb25Pbk5lc3RlZFBvcnRMYXN0VHlwZU93bnNJbnZvY2F0aW9uT25Qb3J0PXNlbGYub25OZXN0ZWRQb3J0LT5sYXN0KCkudHlwZS5vY2xBc1R5cGUoVU1MOjpDbGFzc2lmaWVyKS5hbGxGZWF0dXJlcygpLT5pbmNsdWRlcyhzZWxmLmJhc2VfSW52b2NhdGlvbkFjdGlvbi5vblBvcnQpCgojSXRlbUZsb3cKI1RPRE8gaW52X0l0ZW1GbG93U291cmNlQW5kVGFyZ2V0TGlua2VkPUl0ZW1GbG93IFsxXSBBIENvbm5lY3RvciBvciBhbiBBc3NvY2lhdGlvbiwgb3IgYW4gaW5oZXJpdGVkIEFzc29jaWF0aW9uIG11c3QgZXhpc3QgYmV0d2VlbiB0aGUgc291cmNlIGFuZCB0aGUgdGFyZ2V0IG9mIHRoZSBJbmZvcm1hdGlvbkZsb3cuCiNvY2xfSXRlbUZsb3dTb3VyY2VBbmRUYXJnZXRMaW5rZWQ9bGV0IHRhcmdldDogVU1MOjpOYW1lZEVsZW1lbnQgPSBzZWxmLmJhc2VfSW5mb3JtYXRpb25GbG93LmluZm9ybWF0aW9uVGFyZ2V0LT5hbnkodHJ1ZSkgaW4gbGV0IHRhcmdldHM6IFNldChVTUw6Ok5hbWVkRWxlbWVudCkgPSBpZiB0YXJnZXQub2NsSXNLaW5kT2YoVU1MOjpDbGFzc2lmaWVyKSB0aGVuIHRhcmdldC5vY2xBc1R5cGUoVU1MOjpDbGFzc2lmaWVyKS0+Y2xvc3VyZShnZW5lcmFsKS0+aW5jbHVkaW5nKHRhcmdldCkgZWxzZSB0YXJnZXQtPmFzU2V0KCkgZW5kaWYgaW4gbGV0IHNvdXJjZTpVTUw6Ok5hbWVkRWxlbWVudCA9IHNlbGYuYmFzZV9JbmZvcm1hdGlvbkZsb3cuaW5mb3JtYXRpb25Tb3VyY2UtPmFueSh0cnVlKSBpbiBsZXQgc291cmNlczogU2V0KFVNTDo6TmFtZWRFbGVtZW50KSA9IGlmIHNvdXJjZS5vY2xJc0tpbmRPZihVTUw6OkNsYXNzaWZpZXIpIHRoZW4gc291cmNlLm9jbEFzVHlwZShVTUw6OkNsYXNzaWZpZXIpLT5jbG9zdXJlKGdlbmVyYWwpLT5pbmNsdWRpbmcoc291cmNlKSBlbHNlIHNvdXJjZS0+YXNTZXQoKSBlbmRpZiBpbiBVTUw6OkFzc29jaWF0aW9uLmFsbEluc3RhbmNlcygpLT5leGlzdHMoYSB8IGEubWVtYmVyRW5kLT5pbnRlcnNlY3Rpb24odGFyZ2V0cyktPm5vdEVtcHR5KCkgYW5kIGEubWVtYmVyRW5kLT5pbnRlcnNlY3Rpb24oc291cmNlcyktPm5vdEVtcHR5KCkpIG9yIFVNTDo6Q29ubmVjdG9yLmFsbEluc3RhbmNlcygpLT5leGlzdHMoYyB8IGMuZW5kLT5pbnRlcnNlY3Rpb24odGFyZ2V0cyktPm5vdEVtcHR5KCkgYW5kIGMuZW5kLT5pbnRlcnNlY3Rpb24oc291cmNlcyktPm5vdEVtcHR5KCkpCmludl9JdGVtRmxvd1NhbWVQcm9wZXJ0eVR5cGVkQnk9SXRlbUZsb3cgWzJdIEFuIEl0ZW1GbG93IGl0ZW1Qcm9wZXJ0eSBpcyB0eXBlZCBieSBhIFZhbHVlVHlwZSwgQmxvY2ssIG9yIFNpZ25hbC4KI1RPRE8gaW52X0l0ZW1GbG93SXRlbVByb3BlcnR5Q29tbW9uT3duZXI9SXRlbUZsb3cgWzNdIGl0ZW1Qcm9wZXJ0eSBpcyBhIHByb3BlcnR5IG9mIHRoZSBjb21tb24gKHBvc3NpYmx5IGluZGlyZWN0KSBvd25lciBvZiB0aGUgc291cmNlIGFuZCB0aGUgdGFyZ2V0Lgojb2NsX0l0ZW1GbG93SXRlbVByb3BlcnR5Q29tbW9uT3duZXI9c2VsZi5pdGVtUHJvcGVydHktPm5vdEVtcHR5KCkgaW1wbGllcyAobGV0IHRhcmdldDogVU1MOjpFbGVtZW50ID0gc2VsZi5iYXNlX0luZm9ybWF0aW9uRmxvdy5pbmZvcm1hdGlvblRhcmdldC0+YW55KHRydWUpIGluIGxldCBzb3VyY2U6IFVNTDo6RWxlbWVudCA9IHNlbGYuYmFzZV9JbmZvcm1hdGlvbkZsb3cuaW5mb3JtYXRpb25Tb3VyY2UtPmFueSh0cnVlKSBpbiB0YXJnZXQub2NsSXNLaW5kT2YoVU1MOjpQcm9wZXJ0eSkgYW5kIHNvdXJjZS5vY2xJc0tpbmRPZihVTUw6OlByb3BlcnR5KSBhbmQgbGV0IG93bmVyczogU2V0KFVNTDo6Q2xhc3NpZmllcikgPSB0YXJnZXQtPmNsb3N1cmUob3duZXIpLT5zZWxlY3QobzEgfCBvMS5vY2xJc0tpbmRPZihVTUw6OkNsYXNzaWZpZXIpKS0+YXNTZXQoKSAtPmludGVyc2VjdGlvbihzb3VyY2UtPmNsb3N1cmUob3duZXIpLT5zZWxlY3QobzIgfCBvMi5vY2xJc0tpbmRPZihVTUw6OkNsYXNzaWZpZXIpKSkub2NsQXNUeXBlKFVNTDo6Q2xhc3NpZmllciktPmFzU2V0KCkgaW4gb3duZXJzLmF0dHJpYnV0ZS0+ZmxhdHRlbigpLT5pbmNsdWRlcyhzZWxmLml0ZW1Qcm9wZXJ0eSkpCmludl9JdGVtRmxvd0Fzc29jaWF0aW9uWG9ySXRlbVByb3BlcnR5PUl0ZW1GbG93IFs0XSBpdGVtUHJvcGVydHkgY2Fubm90IGhhdmUgYSB2YWx1ZSBpZiB0aGUgaXRlbSBmbG93IGlzIHJlYWxpemVkIGJ5IGFuIEFzc29jaWF0aW9uLgpvY2xfSXRlbUZsb3dBc3NvY2lhdGlvblhvckl0ZW1Qcm9wZXJ0eT1zZWxmLmJhc2VfSW5mb3JtYXRpb25GbG93LnJlYWxpemF0aW9uLT5leGlzdHMociB8IHIub2NsSXNLaW5kT2YoVU1MOjpBc3NvY2lhdGlvbikpIGltcGxpZXMgc2VsZi5pdGVtUHJvcGVydHktPmlzRW1wdHkoKQppbnZfSXRlbUZsb3dTYW1lVHlwZT1JdGVtRmxvdyBbNV0gSWYgYW4gSXRlbUZsb3cgaGFzIGFuIGl0ZW1Qcm9wZXJ0eSwgb25lIG9mIHRoZSBjbGFzc2lmaWVycyBvZiBjb252ZXllZCBpdGVtcyBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSB0eXBlIG9mIHRoZSBpdGVtIHByb3BlcnR5LgpvY2xfSXRlbUZsb3dTYW1lVHlwZT1zZWxmLml0ZW1Qcm9wZXJ0eS0+bm90RW1wdHkoKSBpbXBsaWVzIHNlbGYuYmFzZV9JbmZvcm1hdGlvbkZsb3cuY29udmV5ZWQtPmluY2x1ZGVzKHNlbGYuaXRlbVByb3BlcnR5LnR5cGUpCiMgRklYTUUgdGhlIGl0ZW0gZmxvdyBkb2Vzbid0IGhhdmUgYSBuYW1lIChzaG91bGQgYmUgaW5mb3JtYXRpb24gZmxvdykKaW52X0l0ZW1GbG93U2FtZVByb3BlcnR5TmFtZT1JdGVtRmxvdyBbNl0gSWYgYW4gSXRlbUZsb3cgaGFzIGFuIGl0ZW1Qcm9wZXJ0eSwgaXRzIG5hbWUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSAgaXRlbSBmbG93LgoKI1Byb3h5UG9ydAppbnZfUHJveHlQb3J0Tm90RnVsbFBvcnQ9UHJveHlQb3J0IFsxXSBQcm94eSBwb3J0cyBjYW5ub3QgYWxzbyBiZSBmdWxsIHBvcnRzLiBUaGlzIGFwcGxpZXMgZXZlbiBpZiBzb21lIG9mIHRoZSBzdGVyZW90eXBlcyBhcmUgb24gc3Vic2V0dGVkIG9yIHJlZGVmaW5lZCBwb3J0cy4KaW52X1Byb3h5UG9ydFR5cGVkQnlJbnRlcmZhY2VCbG9jaz1Qcm94eVBvcnQgWzJdIFByb3h5IHBvcnRzIGNhbiBvbmx5IGJlIHR5cGVkIGJ5IGludGVyZmFjZSBibG9ja3MuCmludl9Qcm94eVBvcnRGb3JjZUlubmVyUHJveHlQb3J0PVByb3h5UG9ydCBbM10gUG9ydHMgb3duZWQgYnkgdGhlIHR5cGUgb2YgYSBwcm94eSBwb3J0IG11c3QgYmUgcHJveHkgcG9ydHMuCgojVHJpZ2dlck9uTmVzdGVkUG9ydAppbnZfVHJpZ2dlck9uTmVzdGVkUG9ydFNpbmdsZVByb3h5UG9ydD1UcmlnZ2VyT25OZXN0ZWRQb3J0IFsxXSBUaGUgcG9ydCBwcm9wZXJ0eSBvZiB0aGUgc3RlcmVvdHlwZWQgdHJpZ2dlciBtdXN0IGhhdmUgZXhhY3RseSBvbmUgdmFsdWUsIGFuZCB0aGUgdmFsdWUgY2Fubm90IGJlIGEgZnVsbCBwb3J0LgpvY2xfVHJpZ2dlck9uTmVzdGVkUG9ydFNpbmdsZVByb3h5UG9ydD1zZWxmLmJhc2VfVHJpZ2dlci5wb3J0LT5zaXplKCk9MSBhbmQgRnVsbFBvcnQuYWxsSW5zdGFuY2VzKCkuYmFzZV9Qb3J0LT5leGNsdWRlcyhzZWxmLmJhc2VfVHJpZ2dlci5wb3J0KQppbnZfVHJpZ2dlck9uTmVzdGVkUG9ydE5vRnVsbFBvcnQ9VHJpZ2dlck9uTmVzdGVkUG9ydCBbMl0gVGhlIHZhbHVlcyBvZiB0aGUgb25OZXN0ZWRQb3J0IHByb3BlcnR5IG11c3Qgbm90IGJlIGZ1bGwgcG9ydHMuCm9jbF9UcmlnZ2VyT25OZXN0ZWRQb3J0Tm9GdWxsUG9ydD1GdWxsUG9ydC5hbGxJbnN0YW5jZXMoKS5iYXNlX1BvcnQtPmV4Y2x1ZGVzQWxsKHNlbGYub25OZXN0ZWRQb3J0KQppbnZfVHJpZ2dlck9uTmVzdGVkUG9ydE9uTmV4dGVkUG9ydEZpcnN0T3duZWRCeUNvbnRleHQ9VHJpZ2dlck9uTmVzdGVkUG9ydCBbM10gVGhlIHBvcnQgYXQgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBvbk5lc3RlZFBvcnQgbGlzdCBtdXN0IGJlIG93bmVkIGJ5IGEgYmxvY2sgaW4gd2hpY2ggdGhlIHRyaWdnZXIgaXMgdXNlZCwgb3Igb25lIG9mIHRoZSBibG9jaydzIGdlbmVyYWxpemF0aW9ucy4Kb2NsX1RyaWdnZXJPbk5lc3RlZFBvcnRPbk5leHRlZFBvcnRGaXJzdE93bmVkQnlDb250ZXh0PWxldCB0aGVDb250ZXh0OiBVTUw6OkNsYXNzaWZpZXIgPSBpZiBzZWxmLmJhc2VfVHJpZ2dlci5vd25lci5vY2xJc0tpbmRPZihVTUw6OkFjdGlvbikgdGhlbiBzZWxmLmJhc2VfVHJpZ2dlci5vd25lci5vY2xBc1R5cGUoVU1MOjpBY3Rpb24pLl8nY29udGV4dCcub2NsQXNUeXBlKFVNTDo6Q2xhc3MpIGVsc2Ugc2VsZi5iYXNlX1RyaWdnZXIub3duZXIub2NsQXNUeXBlKFVNTDo6VHJhbnNpdGlvbikuY29udGFpbmluZ1N0YXRlTWFjaGluZSgpLl8nY29udGV4dCcub2NsQXNUeXBlKFVNTDo6Q2xhc3MpIGVuZGlmIGluIGxldCBvd25lcnM6IFNldChVTUw6OkNsYXNzaWZpZXIpID0gdGhlQ29udGV4dC0+Y2xvc3VyZShnZW5lcmFsKS0+aW5jbHVkaW5nKHRoZUNvbnRleHQpIGluIG93bmVycy0+aW5jbHVkZXMoc2VsZi5vbk5lc3RlZFBvcnQtPmZpcnN0KCkub3duZXIpCmludl9UcmlnZ2VyT25OZXN0ZWRQb3J0UGF0aENvbnNpc3RlbmN5PVRyaWdnZXJPbk5lc3RlZFBvcnQgWzRdIFRoZSBmaXJzdCBjb25zdHJhaW50IG9mIEVsZW1lbnRQcm9wZXJ0eVBhdGggYXBwbGllcyB0byBvbk5lc3RlZFBvcnQuCiNpbnZfVHJpZ2dlck9uTmVzdGVkUG9ydE9uTmVzdGVkUG9ydExhc3RUeXBlT3duc1RyaWdnZXJQb3J0PVRyaWdnZXJPbk5lc3RlZFBvcnQgWzVdIFRoZSB0eXBlIG9mIHRoZSBwb3J0IGF0IHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBvbk5lc3RlZFBvcnQgbGlzdCBtdXN0IG93biBvciBpbmhlcml0IHRoZSBwb3J0IHBvcnQgb2YgbXVzdCBvd24gb3IgaW5oZXJpdCB0aGUgcG9ydCBwb3J0IG9mCiNvY2xfVHJpZ2dlck9uTmVzdGVkUG9ydE9uTmVzdGVkUG9ydExhc3RUeXBlT3duc1RyaWdnZXJQb3J0PXNlbGYub25OZXN0ZWRQb3J0LT5sYXN0KCkudHlwZS5vY2xBc1R5cGUoVU1MOjpDbGFzc2lmaWVyKS5hbGxGZWF0dXJlcygpLT5pbmNsdWRlcyhzZWxmLmJhc2VfVHJpZ2dlci5wb3J0KQojIHNlZW1zIHN0cmFuZ2Ugc2luY2Ugc2VsZi5iYXNlX3RyaWdnZXIucG9ydCBoYXMgWzAuKl0gYXMgbXVsdGlwbGljaXR5CgojQ29uanVnYXRlZEludGVyZmFjZUJsb2NrCmludl9Db25qdWdhdGVkSW50ZXJmYWNlQmxvY2tFbmZvcmNlZE5hbWU9Q29uanVnYXRlZEludGVyZmFjZUJsb2NrIFsxXSBUaGUgbmFtZSBvZiBhbiB+SW50ZXJmYWNlQmxvY2sgc2hhbGwgYmUgdGhlIG5hbWUgb2YgaXRzIG9yaWdpbmFsIEludGVyZmFjZUJsb2NrIHdpdGggYSB0aWxkZSAoIn4iKSBjaGFyYWN0ZXIgcHJlcGVuZGVkCm9jbF9Db25qdWdhdGVkSW50ZXJmYWNlQmxvY2tFbmZvcmNlZE5hbWU9c2VsZi5iYXNlX0NsYXNzLm5hbWUgPSAnficrc2VsZi5vcmlnaW5hbC5iYXNlX0NsYXNzLm5hbWUKCiNDb25zdHJhaW50QmxvY2sKaW52X0NvbnN0cmFpbnRCbG9ja0NvbXBvc2l0ZT1Db25zdHJhaW50QmxvY2sgWzNdIEFueSBwcm9wZXJ0eSBvZiBhIGJsb2NrIHRoYXQgaXMgdHlwZWQgYnkgYSBDb25zdHJhaW50QmxvY2sgc2hhbGwgaGF2ZSBjb21wb3NpdGUgYWdncmVnYXRpb24uCgojQ29udHJvbE9wZXJhdG9yCmludl9Db250cm9sT3BlcmF0b3JPbmVQYXJhbWV0ZXJDb250cm9sVmFsdWU9Q29udHJvbE9wZXJhdG9yIFsxXSBXaGVuIHRoZSCrQ29udHJvbE9wZXJhdG9yuyBzdGVyZW90eXBlIGlzIGFwcGxpZWQsIHRoZSBiZWhhdmlvciBvciBvcGVyYXRpb24gc2hhbGwgaGF2ZSBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIHR5cGVkIGJ5IENvbnRyb2xWYWx1ZS4gSWYgdGhlIHN0ZXJlb3R5cGUgaXMgbm90IGFwcGxpZWQsIHRoZSBiZWhhdmlvciBvciBvcGVyYXRpb24gbWF5IG5vdCBoYXZlIGFueSBwYXJhbWV0ZXIgdHlwZWQgYnkgQ29udHJvbFZhbHVlLgppbnZfQ29udHJvbE9wZXJhdG9yT3BlcmF0aW9uTWV0aG9kPUNvbnRyb2xPcGVyYXRvciBbMl0gQSBiZWhhdmlvciBzaGFsbCBoYXZlIHRoZSCrQ29udHJvbE9wZXJhdG9yuyBzdGVyZW90eXBlIGFwcGxpZWQgaWYgaXQgaXMgYSBtZXRob2Qgb2YgYW4gb3BlcmF0aW9uIHRoYXQgaGFzIHRoZSCrQ29udHJvbE9wZXJhdG9yuyBzdGVyZW90eXBlIGFwcGxpZWQuCgojRGlzY3JldGUKaW52X0Rpc2NyZXRlTm9Db250aW51b3VzPURpc2NyZXRlIFsxXSBUaGUgq2Rpc2NyZXRluyBhbmQgq2NvbnRpbnVvdXO7IHN0ZXJlb3R5cGVzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIGVsZW1lbnQgYXQgdGhlIHNhbWUgdGltZS4KCiNOb0J1ZmZlcgppbnZfTm9CdWZmZXJOb092ZXJ3cml0ZT1Ob0J1ZmZlciBbMV0gVGhlIKtub2J1ZmZlcrsgYW5kIKtvdmVyd3JpdGW7IHN0ZXJlb3R5cGVzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIGVsZW1lbnQgYXQgdGhlIHNhbWUgdGltZS4Kb2NsX05vQnVmZmVyTm9PdmVyd3JpdGU9YmFzZV9PYmplY3ROb2RlLmdldEFwcGxpZWRTdGVyZW90eXBlKCdTeXNNTDo6QWN0aXZpdGllczo6T3ZlcndyaXRlJyktPmlzRW1wdHkoKQoKI092ZXJ3cml0ZQppbnZfT3ZlcndyaXRlTm9Ob0J1ZmZlcj1PdmVyd3JpdGUgWzFdIFRoZSCrb3ZlcndyaXRluyBhbmQgq25vYnVmZmVyuyBzdGVyZW90eXBlcyBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgc2FtZSBlbGVtZW50IGF0IHRoZSBzYW1lIHRpbWUuCm9jbF9PdmVyd3JpdGVOb05vQnVmZmVyPWJhc2VfT2JqZWN0Tm9kZS5nZXRBcHBsaWVkU3RlcmVvdHlwZSgnU3lzTUw6OkFjdGl2aXRpZXM6Ok5vQnVmZmVyJyktPmlzRW1wdHkoKQoKI09wdGlvbmFsCmludl9PcHRpb25hbFBhcmFtZXRlck11bHRpcGxpY2l0eT1PcHRpb25hbCBbMV0gT3B0aW9uYWwgcGFyYW1ldGVyIGxvd2VyIHZhbHVlIGhhcyB0byBiZSAwCm9jbF9PcHRpb25hbFBhcmFtZXRlck11bHRpcGxpY2l0eT1iYXNlX1BhcmFtZXRlci5sb3dlciA9IDAKCiNQcm9iYWJpbGl0eQppbnZfUHJvYmFiaWxpdHlCYXNlRWxlbWVudD1Qcm9iYWJpbGl0eSBbMV0gVGhlIKtwcm9iYWJpbGl0ebsgc3RlcmVvdHlwZSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGFjdGl2aXR5IGVkZ2VzIHRoYXQgaGF2ZSBkZWNpc2lvbiBub2RlcyBvciBvYmplY3Qgbm9kZXMgYXMgc291cmNlcywgb3IgdG8gb3V0cHV0IHBhcmFtZXRlciBzZXRzLgppbnZfUHJvYmFiaWxpdHlBbGxFZGdlcz1Qcm9iYWJpbGl0eSBbMl0gV2hlbiB0aGUgq3Byb2JhYmlsaXR5uyBzdGVyZW90eXBlIGlzIGFwcGxpZWQgdG8gYW4gYWN0aXZpdHkgZWRnZSwgdGhlbiBpdCBtdXN0IGJlIGFwcGxpZWQgdG8gYWxsIGVkZ2VzIGNvbWluZyBvdXQgb2YgdGhlIHNhbWUgc291cmNlLgppbnZfUHJvYmFiaWxpdHlUb0FsbFBhcmFtZXRlclNldD1Qcm9iYWJpbGl0eSBbM10gV2hlbiB0aGUgq3Byb2JhYmlsaXR5uyBzdGVyZW90eXBlIGlzIGFwcGxpZWQgdG8gYW4gb3V0cHV0IHBhcmFtZXRlciBzZXQsIGl0IG11c3QgYWxzbyBiZSBhcHBsaWVkIHRvIGFsbCB0aGUgcGFyYW1ldGVyIHNldHMgb2YgdGhlIGJlaGF2aW9yIG9yIG9wZXJhdGlvbiBvd25pbmcgdGhlIG9yaWdpbmFsIHBhcmFtZXRlciBzZXQuIC4KaW52X1Byb2JhYmlsaXR5T3V0cHV0UGFyYW1ldGVycz1Qcm9iYWJpbGl0eSBbNF0gV2hlbiB0aGUgq3Byb2JhYmlsaXR5uyBzdGVyZW90eXBlIGlzIGFwcGxpZWQgdG8gYW4gb3V0cHV0IHBhcmFtZXRlciBzZXQsIGFsbCB0aGUgb3V0cHV0IHBhcmFtZXRlcnMgbXVzdCBiZSBpbiBzb21lIHBhcmFtZXRlciBzZXQuCgojUmF0ZQppbnZfUmF0ZVBhcmFtZXRlcklzU3RyZWFtPVJhdGUgWzFdIFdoZW4gdGhlIKtyYXRluyBzdGVyZW90eXBlIGlzIGFwcGxpZWQgdG8gYSBwYXJhbWV0ZXIsIHRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBzdHJlYW1pbmcuCmludl9SYXRlUGFyYW1ldGVyTGVzc0lub3V0PVJhdGUgWzJdIFRoZSByYXRlIG9mIGEgcGFyYW1ldGVyIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJhdGVzIG9uIGVkZ2VzIHRoYXQgY29tZSBpbnRvIG9yIGdvIG91dCBmcm9tIHBpbnMgYW5kIHBhcmFtZXRlcnMgbm9kZXMgY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1ldGVyLgoKI0FsbG9jYXRlKGZyb20gQWxsb2NhdGlvbnMpCmludl9BbGxvY2F0ZU9uZUNsaWVudFN1cHBsaWVyPUFsbG9jYXRlIFsyXSBBIHNpbmdsZSCrYWxsb2NhdGW7IGRlcGVuZGVuY3kgc2hhbGwgaGF2ZSBvbmx5IG9uZSBjbGllbnQgKGZyb20pIGFuZCBvbmUgc3VwcGxpZXIgKHRvKS4KCiNBbGxvY2F0ZUFjdGl2aXR5UGFydGl0aW9uKGZyb20gQWxsb2NhdGlvbnMpCiVpbnZfQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbkFjdGlvbnNPbkNsaWVudEVuZHM9QWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiBbMV0gQW4gQWN0aW9uIGFwcGVhcmluZyBpbiBhbiAiQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbiIgc2hhbGwgYmUgdGhlIC9jbGllbnQgKGZyb20pIGVuZCBvZiBhbiAiYWxsb2NhdGUiIGRlcGVuZGVuY3kuIFRoZSBlbGVtZW50IHRoYXQgcmVwcmVzZW50cyB0aGUgIkFsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb24iIHNoYWxsIGJlIHRoZSAvc3VwcGxpZXIgKHRvKSBlbmQgb2YgdGhlIHNhbWUgImFsbG9jYXRlIiBkZXBlbmRlbmN5LiBJbiB0aGUgq0FsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb267IG5hbWUgZmllbGQsIFByb3BlcnRpZXMgYXJlIGRlc2lnbmF0ZWQgYnkgdGhlIHVzZSBvZiBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIChpbmNsdWRpbmcgY29sb24sIGUuZy4sICJwYXJ0X25hbWU6QmxvY2tfTmFtZSIpLCBhbmQgQ2xhc3NpZmllcnMgYXJlIGRlc2lnbmF0ZWQgYnkgYSBzaW1wbGUgbmFtZSAobm8gY29sb25zLCBlLmcuLCAiQmxvY2tfTmFtZSIpLgojTm8gaW1wbGVtZW50YXRpb24gWzJdIFRoZSCrQWxsb2NhdGVBY3Rpdml0eVBhcnRpdGlvbrsgbWFpbnRhaW5zIHRoZSBjb25zdHJhaW50cywgYnV0IG5vdCB0aGUgc2VtYW50aWNzLCBvZiB0aGUgVU1MMjo6QWN0aXZpdHlQYXJ0aXRpb24uIENsYXNzaWZpZXJzIG9yIFByb3BlcnRpZXMgcmVwcmVzZW50ZWQgYnkgYW4gq0FsbG9jYXRlQWN0aXZpdHlQYXJ0aXRpb267IGRvIG5vdCBoYXZlIGFueSBkaXJlY3QgcmVzcG9uc2liaWxpdHkgZm9yIGludm9raW5nIGJlaGF2aW9yIGRlcGljdGVkIHdpdGhpbiB0aGUgcGFydGl0aW9uIGJvdW5kYXJpZXMuIFRvIGRlcGljdCB0aGlzIGtpbmQgb2YgZGlyZWN0IHJlc3BvbnNpYmlsaXR5LCB0aGUgbW9kZWxlciBpcyBkaXJlY3RlZCB0byB0aGUgVU1MIDIgU3VwZXJzdHJ1Y3R1cmUgc3BlY2lmaWNhdGlvbiwgc3ViIGNsYXVzZSAxMi4zLjEwLCCrQWN0aXZpdHlQYXJ0aXRpb24suyBTZW1hbnRpY3MgdG9waWMuCgojQ29weQppbnZfQ29weUJldHdlZW5SZXF1aXJlbWVudHNNb2RlbENvbnN0cmFpbnQ9Q29weSBbMV0gQSBDb3B5IGRlcGVuZGVuY3kgbWF5IG9ubHkgYmUgY3JlYXRlZCBiZXR3ZWVuIHR3byBOYW1lZEVsZW1lbnRzIHRoYXQgaGF2ZSBhIHN1YnR5cGUgb2YgdGhlIGFic3RyYWN0UmVxdWlyZW1lbnQgc3RlcmVvdHlwZSBhcHBsaWVkLgppbnZfQ29weVJlYWRPbmx5TW9kZWxDb25zdHJhaW50PUNvcHkgWzJdIFRoZSB0ZXh0IHByb3BlcnR5IG9mIHRoZSBjbGllbnQgcmVxdWlyZW1lbnQgaXMgY29uc3RyYWluZWQgdG8gYmUgYSByZWFkLW9ubHkgY29weSBvZiB0aGUgdGV4dCBwcm9wZXJ0eSBvZiB0aGUgc3VwcGxpZXIgcmVxdWlyZW1lbnQgYW5kIHRoaXMgYXBwbGllcyByZWN1cnNpdmVseSB0byBhbGwgc3VicmVxdWlyZW1lbnRzLgoKI0Rlcml2ZVJlcXQKaW52X0Rlcml2ZVJlcXRTdXBwbGllck1vZGVsQ29uc3RyYWludD1EZXJpdmVSZXF0IFsxXSBUaGUgc3VwcGxpZXIgc2hhbGwgYmUgYW4gZWxlbWVudCBzdGVyZW90eXBlZCBieSBhIHN1YnR5cGUgb2YgQWJzdHJhY3RSZXF1aXJlbWVudC4KaW52X0Rlcml2ZVJlcXRDbGllbnRNb2RlbENvbnN0cmFpbnQ9RGVyaXZlUmVxdCBbMl0gVGhlIGNsaWVudCBzaGFsbCBiZSBhbiBlbGVtZW50IHN0ZXJlb3R5cGVkIGJ5IGEgc3VidHlwZSBvZiBBYnN0cmFjdFJlcXVpcmVtZW50LgoKI1JlZmluZQppbnZfUmVmaW5lT25lQ2xpZW50U3VwcGxpZXJNb2RlbENvbnN0cmFpbnQ9UmVmaW5lIFsyXSBBYnN0cmFjdGlvbnMgd2l0aCBhIFJlZmluZSBzdGVyZW90eXBlIG9yIG9uZSBvZiBpdHMgc3BlY2lhbGl6YXRpb25zIGFwcGxpZWQgc2hhbGwgaGF2ZSBleGFjdGx5IG9uZSBjbGllbnQgYW5kIG9uZSBzdXBwbGllci4KCiNSZXF1aXJlbWVudAppbnZfUmVxdWlyZW1lbnRFbXB0eU93bmVkT3BlcmF0aW9uPVJlcXVpcmVtZW50IFsxXSBUaGUgcHJvcGVydHkgIm93bmVkT3BlcmF0aW9uIiBzaGFsbCBiZSBlbXB0eS4Kb2NsX1JlcXVpcmVtZW50RW1wdHlPd25lZE9wZXJhdGlvbj1iYXNlX0NsYXNzLm93bmVkT3BlcmF0aW9uLT5pc0VtcHR5KCkKaW52X1JlcXVpcmVtZW50RW1wdHlPd25lZEF0dHJpYnV0ZT1SZXF1aXJlbWVudCBbMl0gVGhlIHByb3BlcnR5ICJvd25lZEF0dHJpYnV0ZSIgc2hhbGwgYmUgZW1wdHkuCm9jbF9SZXF1aXJlbWVudEVtcHR5T3duZWRBdHRyaWJ1dGU9YmFzZV9DbGFzcy5vd25lZEF0dHJpYnV0ZS0+aXNFbXB0eSgpCmludl9SZXF1aXJlbWVudE5vQXNzb2NpYXRpb25Nb2RlbENvbnN0cmFpbnQ9UmVxdWlyZW1lbnQgWzNdIENsYXNzZXMgc3RlcmVvdHlwZWQgYnkgq3JlcXVpcmVtZW50uyBzaGFsbCBub3QgcGFydGljaXBhdGUgaW4gYXNzb2NpYXRpb25zLgppbnZfUmVxdWlyZW1lbnROb0dlbmVyYWxpemF0aW9uTW9kZWxDb25zdHJhaW50PVJlcXVpcmVtZW50IFs0XSBDbGFzc2VzIHN0ZXJlb3R5cGVkIGJ5IKtyZXF1aXJlbWVudLsgc2hhbGwgbm90IHBhcnRpY2lwYXRlIGluIGdlbmVyYWxpemF0aW9ucy4KaW52X1JlcXVpcmVtZW50TmVzdGVkUmVxdWlyZW1lbnRNb2RlbENvbnN0cmFpbnQ9UmVxdWlyZW1lbnQgWzVdIEEgbmVzdGVkIGNsYXNzaWZpZXIgb2YgYSBjbGFzcyBzdGVyZW90eXBlZCBieSBSZXF1aXJlbWVudCBvciBvbmUgb2YgaXRzIHNwZWNpYWxpemF0aW9ucyBzaGFsbCBhbHNvIGJlIHN0ZXJlb3R5cGVkIGJ5IFJlcXVpcmVtZW50IG9yIG9uZSBvZiBpdHMgc3BlY2lhbGl6YXRpb25zLgppbnZfUmVxdWlyZW1lbnROb3RUeXBlPVJlcXVpcmVtZW50IFs2XSBDbGFzc2VzIHN0ZXJlb3R5cGVkIGJ5IKtyZXF1aXJlbWVudLsgc2hhbGwgbm90IGJlIHVzZWQgdG8gdHlwZSBhbnkgb3RoZXIgbW9kZWwgZWxlbWVudC4KCiNUZXN0Q2FzZQppbnZfVGVzdENhc2VQYXJhbWV0ZXJWZXJkaWN0S2luZE1vZGVsQ29uc3RyYWludD1UZXN0Q2FzZSBbMV0gVGhlIHR5cGUgb2YgcmV0dXJuIHBhcmFtZXRlciBvZiB0aGUgc3RlcmVvdHlwZWQgbW9kZWwgZWxlbWVudCBzaGFsbCBiZSBWZXJkaWN0S2luZC4KCiNTYXRpc2Z5Cmludl9TYXRpc2Z5U3VwcGxpZXJNb2RlbENvbnN0cmFpbnQ9U2F0aXNmeSBbMV0gVGhlIHN1cHBsaWVyIHNoYWxsIGJlIGFuIGVsZW1lbnQgc3RlcmVvdHlwZWQgYnkgYW55IHN1YnR5cGUgb2Ygq0Fic3RyYWN0UmVxdWlyZW1lbnS7LgoKI1RyYWNlCmludl9UcmFjZU9uZUNsaWVudFN1cHBsaWVyTW9kZWxDb25zdHJhaW50PVRyYWNlIFsyXSBBYnN0cmFjdGlvbnMgd2l0aCBhIFRyYWNlIHN0ZXJlb3R5cGUgb3Igb25lIG9mIGl0cyBzcGVjaWFsaXphdGlvbnMgYXBwbGllZCBzaGFsbCBoYXZlIGV4YWN0bHkgb25lIGNsaWVudCBhbmQgb25lIHN1cHBsaWVyLgoKI1ZlcmlmeQppbnZfVmVyaWZ5U3VwcGxpZXJNb2RlbENvbnN0cmFpbnQ9VmVyaWZ5IFsxXSBUaGUgc3VwcGxpZXIgc2hhbGwgYmUgYW4gZWxlbWVudCBzdGVyZW90eXBlZCBieSBhbnkgc3VidHlwZSBvZiCrQWJzdHJhY3RSZXF1aXJlbWVudLsuCg==