[ruby-core:97032] [Ruby master Feature#16511] Staged warnings and better compatibility for keyword arguments in 2.7.1
From:
daniel@...42.com
Date:
2020-01-31 15:30:51 UTC
List:
ruby-core #97032
SXNzdWUgIzE2NTExIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQpTdWJqZWN0IGNoYW5nZWQgZnJvbSBTdGFnZWQgd2FybmluZ3MgZm9yIGtleXdvcmQgYXJn dW1lbnRzIHRvIFN0YWdlZCB3YXJuaW5ncyBhbmQgYmV0dGVyIGNvbXBhdGliaWxpdHkgZm9yIGtl eXdvcmQgYXJndW1lbnRzIGluIDIuNy4xDQoNCkBtYXR6LA0KSSByZW1vdmVkIHRoZSBzdWJjbGFz c2luZyBwYXJ0IHRoYXQgeW91IHdlcmUgbmVnYXRpdmUgYWJvdXQsIGFuZCBJIGJlbGlldmUgSSd2 ZSBzdWZmaWNpZW50bHkgcHJvdmVuIG1hbnkgY2xlYXIgX3JlYWwtd29ybGRfIGJlbmVmaXRzLg0K VGhlIG9ubHkgImRvd25zaWRlIiBpcyB0aGF0IHNvbWUgdGhpbmdzIHRoYXQgY291bGQgYmUgZml4 ZWQgbm93IHdpbGwgYmUgZml4ZWQgbGF0ZXIgaW5zdGVhZDsgcGVyc29uYWxseSBJIGRvbid0IGV2 ZW4gY29uc2lkZXIgdGhhdCBhIGRvd25zaWRlLg0KSSBob3BlIHlvdSdsbCBnaXZlIHRoaXMgcHJv cG9zYWwgc2VyaW91cyBjb25zaWRlcmF0aW9uLCBiYXNlZCBvbiB0aGUgZGVtb25zdHJhdGVkIGJl bmVmaXRzLCBkZXNwaXRlIG1lIGJlaW5nIGEgcmVsYXRpdmUgb3V0c2lkZXIgaGVyZS4NCuOCiOOC jeOBl+OBj+OBiumhmOOBhOOBl+OBvuOBmeOAgg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzE2NTExOiBTdGFnZWQgd2FybmluZ3MgYW5kIGJl dHRlciBjb21wYXRpYmlsaXR5IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBpbiAyLjcuMQ0KaHR0cHM6 Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2NTExI2NoYW5nZS04NDEyNg0KDQoqIEF1dGhv cjogRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTog Tm9ybWFsDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpBcyBhbiBh bHRlcm5hdGl2ZSB0byAjMTY0NjMgYW5kICMxNjQ5NCBJJ2QgbGlrZSB0byBwcm9wb3NlIHRoaXMg YXBwcm9hY2gsIHdoaWNoIEkgYmVsaWV2ZSBhbGxvd3MgYSAqKm11Y2gqKiBtb3JlIGZsZXhpYmxl IHBhdGggZm9yIG1pZ3JhdGlvbiBvZiBrZXl3b3JkIGFyZ3VtZW50cy4NCg0KVGhlIGlkZWEgaXMg dG8gaW5kaWNhdGUgZm9yIGV2ZXJ5IEhhc2ggb2JqZWN0IGlmIGl0J3MgaW50ZW5kZWQgdG8gcmVw cmVzZW50IGEgX2tleXdvcmRfIGhhc2ggb3IgYSBfZGF0YV8gaGFzaC4gVGhpcyBleHRyYSBpbmZv cm1hdGlvbiBpcyB0aGVuIHVzZWQgdG8gZ2VuZXJhdGUgbW9yZSBncmFudWxhciB3YXJuaW5ncyBk ZXBlbmRpbmcgb24gYSB1c2VyJ3MgY29tcGF0aWJpbGl0eSBuZWVkcy4NCg0KVGhlICJrZXl3b3Jk bmVzcyIgb2YgYSBoYXNoIHdvdWxkIGJlIGluZGljYXRlZCBieSBhICoqZmxhZyoqIG9uIHRoZSBI YXNoIG9iamVjdDsgdGhpcyBpcyBhbHJlYWR5IGltcGxlbWVudGVkIGluIDIuNyBhbmQgaXMgdGhl IGFwcHJvYWNoIGZhdm9yZWQgYnkgTWF0ei4gTGV0J3MgY2FsbCB0aGlzIGZsYWdnZWQgaGFzaCBh ICJLd0hhc2giLCBhbmQgYSBub24tZmxhZ2dlZCBoYXNoIGlzIGp1c3QgYSAiSGFzaCIuIE5vdGU6 IHRoaXMgY291bGQgYWxzbyBiZSBpbXBsZW1lbnRlZCB2aWEgYSAqKnN1YmNsYXNzKiogb2YgSGFz aCAoSSBwZXJzb25hbGx5IGZhdm9yIHRoaXMgb2JqZWN0LW9yaWVudGVkIGFwcHJvYWNoKSB3aGlj aCB3YXMgdGhlIG9yaWdpbmFsIGlkZWEgaW4gdGhpcyBwcm9wb3NhbC4NCg0KSSdsbCB0cnkgdG8g ZGVzY3JpYmUgdGhlIGlkZWEgaW4gZGV0YWlsIGJ5IGJyZWFraW5nIGl0IGRvd24gaW50byBmaWd1 cmF0aXZlIHN0ZXBzLiAoU2tpcCB0byAiUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIiIGZvciB0aGUg VEw7RFIgdmVyc2lvbi4pIEltYWdpbmUgc3RhcnRpbmcgd2l0aCBydWJ5IDIuNiBhbmQgdGhlbjoN Cg0KIyMjIFN0ZXAgMQ0KDQpXaGVuIGEgZG91YmxlLXNwbGF0IG9yIGEgYnJhY2UtbGVzcyBoYXNo IGlzIHVzZWQsIGluc3RlYWQgb2YgYSBIYXNoIGl0IGNyZWF0ZXMgYSBLd0hhc2guDQoNCmBgYHJ1 YnkNCmRlZiBmb28oeCkgeCBlbmQNCmZvbyhrOjEpLmNsYXNzICAgICAgIz0+IEt3SGFzaA0KZm9v KCoqaGFzaCkuY2xhc3MgICAjPT4gS3dIYXNoDQpbazoxXS5sYXN0LmNsYXNzICAgICM9PiBLd0hh c2gNClsqKmhhc2hdLmxhc3QuY2xhc3MgIz0+IEt3SGFzaA0KeyoqaGFzaH0uY2xhc3MgICAgICAj PT4gSGFzaA0KYGBgDQoNCkF0IHRoaXMgcG9pbnQgd2UgaGF2ZW4ndCBpbnRyb2R1Y2VkIGFueSBy ZWFsIGNoYW5nZS4gRXZlcnl0aGluZyB0aGF0IHdvcmtlZCBiZWZvcmUgaXMgc3RpbGwgd29ya2lu ZyB0aGUgc2FtZSB3YXkuDQooV2l0aCBhIG1pbm9yIGV4Y2VwdGlvbiBpZiB1c2luZyB0aGUgc3Vi Y2xhc3MgYXBwcm9hY2g6IHVudXN1YWwgY29kZSBsaWtlIGBrdy5jbGFzcyA9PSBIYXNoYCB3b3Vs ZCBub3cgcmV0dXJuIGZhbHNlLikNCg0KIyMjIFN0ZXAgMg0KDQpXaGVuIHRoZXJlIGlzIGFtYmln dWl0eSBkdWUgdG8gb3B0aW9uYWwgdnMga2V5d29yZCBhcmd1bWVudCwgd2UgcmVseSBvbiB0aGUg bGFzdCBhcmd1bWVudCBiZWluZyBIYXNoIG9yIEt3SGFzaCB0byBkaXNhbWJpZ3VhdGUuDQoNCmBg YHJ1YnkNCmRlZiBmb28oeD1uaWwsICoqa3cpDQogIFt4LGt3XQ0KZW5kDQpmb28oe2s6MX0pICM9 PiBbe2s6MX0se31dDQpmb28oazoxKSAgICM9PiBbbmlsLHtrOjF9XQ0KYGBgDQoNClRoaXMgaXMg dGhlIF9taW5pbXVtXyBhbW91bnQgb2YgaW5jb21wYXRpYmlsaXR5IHJlcXVpcmVkIHRvIHNvbHZl IEFMTCBidWdzIHByZXZpb3VzbHkgcmVwb3J0ZWQgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cy4gKCM4 MDQwLCAjODMxNiwgIzk4OTgsICMxMDg1NiwgIzExMjM2LCAjMTE5NjcsICMxMjEwNCwgIzEyNzE3 LCAjMTI4MjEsICMxMzMzNiwgIzEzNjQ3LCAjMTQxMzAsIGV0Yy4pIA0KDQpUaGUgd2FybmluZ3Mg Zm9yIHRoaXMgd291bGQgYmUgYWJvdXQgYW4gaW1wZW5kaW5nIF9jaGFuZ2Ugb2YgYmVoYXZpb3Jf IGluIHRoZSBfbmV4dCBydWJ5IHZlcnNpb25fLCB3aGVyZSBgZm9vKHtrOjF9KWAgaXMgbm8gbG9u Z2VyIGludGVycHJldGVkIGFzIGtleXdvcmQgYXJndW1lbnQuDQoNCiMjIyBTdGVwIDMNCg0KSW50 cm9kdWNlIGFkZGl0aW9uYWwgaW5jb21wYXRpYmlsaXR5IHRvIGltcHJvdmUgY2xhcml0eSBvZiBk ZXNpZ24uIEhlcmUgd2UgZGVwcmVjYXRlIHRoZSBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiBIYXNo IHRvIGtleXdvcmQgYXJndW1lbnQ7IG9ubHkgS3dIYXNoIGlzIGFjY2VwdGVkLiBXaXRoIGEgZGVw cmVjYXRpb24vd2FybmluZyBwaGFzZSwgb2YgY291cnNlLiBUaGUgImF1dG9tYXRpYyIgcHJvbW90 aW9uIG9mIGEgS3dIYXNoIHRvIGEga2V5d29yZCBhcmd1bWVudCBmb2xsb3dzIHRoZSBzYW1lIHJ1 bGVzIGFzIGEgSGFzaCBpbiAyLjY7IHNpbmNlIHRoZSBLd0hhc2ggaXMgY29uY2VwdHVhbGx5IGlu dGVuZGVkIHRvIHJlcHJlc2VudCBrZXl3b3JkIGFyZ3VtZW50cywgdGhpcyBjb252ZXJzaW9uIG1h a2VzIHNlbnNlIGluIGEgd2F5IHRoYXQgYSBub3JtYWwgZGF0YSBIYXNoIGRvZXNuJ3QuIFdlJ3Zl IHRha2VuIHRoZSAibGFzdCBwb3NpdGlvbmFsIGhhc2giIGNvbmNlcHQgYW5kIHNwbGl0IGl0IGlu dG8gImNvbmNlcHR1YWxseSBhIGhhc2giIGFuZCAiY29uY2VwdHVhbGx5IGtleXdvcmQgYXJndW1l bnRzIi4gX01vc3QgaW1wb3J0YW50bHlfLCBhbGwgdGhlIGNoYW5nZXMgcmVxdWlyZWQgdG8gc2ls ZW5jZSB0aGVzZSB3YXJuaW5ncyBhcmUgX2NvbXBhdGlibGUgd2l0aCAyLjZfLg0KDQpgYGBydWJ5 DQpkZWYgZm9vKHgsICoqa3cpOyBlbmQNCmZvbyhrOjEpICAgICAgIyBBcmd1bWVudEVycm9yIGJl Y2F1c2UgeCBub3Qgc3BlY2lmaWVkDQpmb28oMSwge2s6MX0pICMgQXJndW1lbnRFcnJvciBiZWNh dXNlIHRvbyBtYW55IGFyZ3VtZW50czsgSGFzaCBjYW5ub3QgYmUgY29udmVydGVkIHRvIEt3SGFz aHMNCm9wdHMgPSBbazoxXS5maXJzdA0KZm9vKG9wdHMpICAgICAjIG9wdHMgaXMgYSBLd0hhc2gg dGhlcmVmb3JlIHVzZWQgYXMga2V5d29yZCBhcmd1bWVudDsgQXJndW1lbnRFcnJvciBiZWNhdXNl IHggbm90IHNwZWNpZmllZA0KZm9vKDEsIG9wdHMpICAjIG9wdHMgaXMgYSBLd0hhc2ggdGhlcmVm b3JlIHVzZWQgYXMga2V5d29yZCBhcmd1bWVudA0KYGBgDQoNClRoZSB3YXJuaW5ncyBmb3IgdGhp cyB3b3VsZCBiZSBhYm91dCB1cGNvbWluZyBfZXJyb3JzXyBmb3IgcG9zaXRpb25hbCBhcmd1bWVu dHM6IGBmb28oeDoxKWAgd2lsbCBiZSAiZ2l2ZW4gMCwgZXhwZWN0ZWQgMSIgYW5kIGBmb28oMSx7 eDoyfSlgIHdpbGwgYmUgImdpdmVuIDIsIGV4cGVjdGVkIDEiLiBTdWNoIGVycm9ycyBhcmUgdXNl ZnVsIHdoZW4gZGV2ZWxvcGluZywgYnV0IHRoZXJlIGlzIG5vIG5ldyBmdW5jdGlvbmFsaXR5IHBl ciBzZSwganVzdCBhIHN0cmljdGVyIHN5bnRheC4gU28gaXQncyBsZXNzIGltcG9ydGFudCB0byBl c2NhbGF0ZSB0byBhbiBlcnJvciBhbmQgd2UgY2FuIGtlZXAgdGhlIHdhcm5pbmdzIGZvciBsb25n ZXIgdGhhbiBTdGVwIDIuDQoNCkF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhY2hpZXZlZCBfYWxtb3N0 LWZ1bGxfICoqZHluYW1pYyoqIGtleXdvcmQgc2VwYXJhdGlvbiwgYXMgb3Bwb3NlZCB0byB0aGUg Y3VycmVudCBfYWxtb3N0LWZ1bGxfICoqc3RhdGljKiogYXBwcm9hY2guIEkgd2FudCB0byBtYWtl IHRoZSBwb2ludCBoZXJlIHRoYXQsIHllcywga2V5d29yZCBhcmd1bWVudHMgKiphcmUqKiBzZXBh cmF0ZWQsIGl0J3MganVzdCBhIGRpZmZlcmVudCBwYXJhZGlnbS4gV2l0aCBzdGF0aWMgc2VwYXJh dGlvbiwgYSBrZXl3b3JkIGFyZ3VtZW50IGlzIGRlZmluZWQgbGV4aWNhbGx5IGJ5IGEgZG91Ymxl LXNwbGF0LiBXaXRoIGR5bmFtaWMgc2VwYXJhdGlvbiwgYSBrZXl3b3JkIGFyZ3VtZW50IGlzIHdo ZW4gdGhlIGxhc3QgYXJndW1lbnQgaXMgYSBLd0hhc2guIHt7Tm90ZTogSSdtIHNheWluZyAiYWxt b3N0LWZ1bGwiIGJlY2F1c2UgS3dIYXNoIGlzIG5vdCBwcm9tb3RlZCB0byBrZXl3b3JkcyBpbiBg ZGVmIGZvbyhhLCoqa3cpO2VuZDtmb28oeDoxKWAgYW5kIGJlY2F1c2Ugc3RhdGljIGtleXdvcmRz IGFyZSBhdXRvLWRlbW90ZWQgdG8gcG9zaXRpb25hbCBpbiBgZGVmIGZvbyhhKTtlbmQ7Zm9vKHg6 MSlgfX0NCg0KQW55IGZvcm0gb2YgZGVsZWdhdGlvbiB3b3JrcyB3aXRoIG5vIGNoYW5nZSByZXF1 aXJlZC4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGJlaGF2aW9yIG9mIDIuNiBidXQgb25seSBmb3IgS3dI YXNoIG9iamVjdHMuIFRoaXMgaXMgc2ltaWxhciB0byBoYXZpbmcgMi43IHdpdGggYHJ1YnkyX2tl eXdvcmRzYCBlbmFibGVkIGJ5IGRlZmF1bHQuIEJ1dCBhbHNvIGRpZmZlcmVudCBpbiBzb21lIHdh eXM7IG1vc3Qgbm90YWJseSBpdCBhbGxvd3MgdGhlIGNhc2Ugc2hvd24gaW4gIzE2NDk0IHRvIHdv cmsgYnkgZGVmYXVsdDoNCg0KYGBgcnVieQ0KYXJyYXkgPSBbeDoxXQ0KYXJyYXkucHVzaCh4OjIp DQphcnJheS5tYXB7IHx4OnwgeCB9ICM9PiBbMSwyXQ0KW3t4OjN9XS5tYXB7IHx4OnwgeCB9ICM9 PiBidXQgdGhpcyB3YXJucywgYXMgaXQgc2hvdWxkDQpgYGANCg0KVGhlIGN1cnJlbnQgYXBwcm9h Y2ggZG9lcyBub3QgYWxsb3cgdGhpcyB0byB3b3JrIGF0IGFsbC4gVGhlIHNvbHV0aW9uIHByb3Bv c2VkIGluICMxNjQ5NCBoYXMgYWxsIHRoZSBzYW1lIGZsYXdzIGFzIEhhc2gtYmFzZWQga2V5d29y ZCBhcmd1bWVudHM7IHdoYXQgaGFwcGVucyB0byBgZWFjaHsgfHg9bmlsLCoqa3d8IH1gID8gVGhp cyBzb2x1dGlvbiBhbGxvd3MgYSBLd0hhc2ggdG8gYmUgY29udmVydGVkIHRvLi4uIGtleXdvcmRz LiBWZXJ5IHVuc3VycHJpc2luZy4NCg0KR2l2ZW4gdGhhdCBydWJ5IGlzIGEgZHluYW1pY2FsbHkt dHlwZWQgbGFuZ3VhZ2UgSSBmZWVsIHRoYXQgZHluYW1pYyB0eXBpbmcgb2Yga2V5d29yZHMgaWYg YSBtb3JlIG5hdHVyYWwgZml0IHRoYW4gc3RhdGljIHR5cGluZy4gQnV0IEkgcmVhbGl6ZSB0aGF0 IG1hbnkgZGlzYWdyZWUgd2l0aCB0aGF0LCB3aGljaCBpcyB3aHkgd2UgY29udGludWUgdG8uLi4N Cg0KIyMjIFN0ZXAgNA0KDQpJbnRyb2R1Y2UgYWRkaXRpb25hbCBpbmNvbXBhdGliaWxpdHkgdG8g cmVhY2ggc3RhdGljL2xleGljYWwgc2VwYXJhdGlvbiBvZiBrZXl3b3JkIGFyZ3VtZW50cy4gSGVy ZSB3ZSByZXF1aXJlIHRoYXQgZXZlbiBhIEt3SGFzaCBzaG91bGQgYmUgcGFzc2VkIHdpdGggYSBk b3VibGUtc3BsYXQgaW4gb3JkZXIgdG8gcXVhbGlmeSBhcyBhIGtleXdvcmQgYXJndW1lbnQuDQoN CmBgYHJ1YnkNCmRlZiBiYXIoKiprdykNCmVuZA0KZGVmIGZvbygqKmt3KQ0KICBiYXIoa3cpICAg Iz0+IGVycm9yOyBLd0hhc2ggcGFzc2VkIHdpdGhvdXQgKioNCiAgYmFyKCoqa3cpICM9PiBvaw0K ZW5kDQpgYGANCg0KQXQgdGhpcyBwb2ludCB3ZSd2ZSByZWFjaGVkIHRoZSBzYW1lIGJlaGF2aW9y IGFzIDIuNy4gRGVsZWdhdGlvbiBuZWVkcyB0byBiZSBmaXhlZCwgYnV0IGFzIHdlIGtub3cgdGhl IGNoYW5nZXMgcmVxdWlyZWQgdG8gc2lsZW5jZSB0aGVzZSB3YXJuaW5ncyBhcmUgKipub3QqKiBj b21wYXRpYmxlIHdpdGggMi42IG9yIDIuNy4gVGhlIHdhcm5pbmdzIGZvciB0aGlzIGFyZSBfZnVu ZGFtZW50YWxseSBub3QgZml4YWJsZV8gYXMgbG9uZyBhcyBTdGVwIDIgaGFzIG5vdCBiZWVuIGZp eGVkLiBUaGlzIGlzIHRoZSBjb3JlIHJlYXNvbiB3aHkgYHJ1YnkyX2tleXdvcmRzYCBpcyBjdXJy ZW50bHkgbmVjZXNzYXJ5IGluIDIuNy4gU28gaW4gdGhlIHZlcnNpb24gYWZ0ZXIgMi43IHdlIGNh biBlbmFibGUgdGhlc2Ugd2FybmluZ3MgYnkgZGVmYXVsdCBzaW5jZSBpdCdzIG5vdyBwb3NzaWJs ZSB0byBmaXggZGVsZWdhdGlvbiB0byB1c2Ugc3RhdGljIGtleXdvcmRzLiBFeGNlcHQgdGhhdCBn ZW0gYXV0aG9ycyB3aG8gbmVlZCB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCDiiaQyLjcgY2Fubm90 IHlldCBtYWtlIHRoZXNlIGNoYW5nZXMsIHNvIHdlIGludHJvZHVjZSBhIHdheSB0byBfc2lsZW5j ZSAqKm9ubHkqKiB0aGVzZSAiU3RlcCA0IiB3YXJuaW5nc18sIGZvciBwZW9wbGUgd2hvIG5lZWQg dG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCDiiaQyLjcuIEFuZCB3ZSBrZWVwIHRoZW0gYXMgd2Fy bmluZ3MgaW5zdGVhZCBvZiBlcnJvcnMgdW50aWwgcnVieSAyLjcgaXMgRU9MLg0KDQpTbyBpbnN0 ZWFkIG9mIGhhdmluZyB0byB1cGRhdGUgYSBidW5jaCBvZiBwbGFjZXMgd2l0aCBgcnVieTJfa2V5 d29yZHNgIGp1c3QgdG8gdGVtcG9yYXJpbHkgc2lsZW5jZSB3YXJuaW5ncywgaXQncyBhIHNpbmds ZSBmbGFnIGxpa2UgYFdhcm5pbmdbOnJ1YnkzX2tleXdvcmRzXWAuIE9uY2UgcnVieSAyLjcgaXMg RU9MIHRoZXNlIGJlY29tZSBjb250cm9sbGVkIGJ5IGBXYXJuaW5nWzpkZXByZWNhdGVkXWAgd2hp Y2ggdGVsbHMgcGVvcGxlIHRoZXkgKipoYXZlKiogdG8gZml4IHRoZWlyIGNvZGUuIFdoaWNoIGlz IGp1c3QgbGlrZSB0aGUgZXZlbnR1YWwgZGVwcmVjYXRpb24gb2YgYHJ1YnkyX2tleXdvcmRzYCwg anVzdCB3aXRob3V0IHRoZSBidXN5IHdvcmsgb2YgYWRkaW5nIGBydWJ5Ml9rZXl3b3Jkc2Agc3Rh dGVtZW50cyBpbiB0aGUgZmlyc3QgcGxhY2UuIEJ1dCBhZ2FpbiwgdGhpcyBpbnRyb2R1Y2VzIG5v IG5ldyBmdW5jdGlvbmFsaXR5LCBqdXN0IGEgc3RyaWN0ZXIgc3ludGF4LiBTbyB3ZSBjYW4gcGxh eSBuaWNlIGFuZCBsZWF2ZSB0aGUgd2FybmluZ3MgZm9yIGEgZmV3IHllYXJzIGJlZm9yZSBjaGFu Z2luZyB0byBlcnJvcnMuDQoNClRoZSBxdWVzdGlvbiByZW1haW5zIG9mIGhvdyB0byBoYW5kbGUg IzE2NDk0IGhlcmUuIEVpdGhlciBkaXNhbGxvdyBpdCBlbnRpcmVseSwgYnV0IEkgdGhpbmsgdGhh dCB3b3VsZCBiZSBhIHNoYW1lLiBPciBqdXN0IGxpa2UgIzE2NDk0IHN1Z2dlc3RzLCBhbGxvdyBo YXNoIHVucGFja2luZyBpbiBub24tbGFtYmRhIFByb2MuIEV4Y2VwdCB0aGF0IG5vdyBpdCBjYW4g YmUgYSBLd0hhc2ggaW5zdGVhZCBvZiBhIEhhc2gsIHdoaWNoIGF0IGxlYXN0IHByZXNlcnZlcyBk eW5hbWljIGtleXdvcmQgc2VwYXJhdGlvbi4NCg0KIyMgUHV0dGluZyBpdCBhbGwgdG9nZXRoZXIg KFRMO0RSKQ0KDQpUaGUgaWRlYSBpcyBfbm90XyB0byByZWltcGxlbWVudCBrZXl3b3JkIGFyZ3Vt ZW50IHNlcGFyYXRpb247IGFsbCB0aGF0IGlzIG5lZWRlZCBpcyB0byBpbXBsZW1lbnQgdGhlIHRo aW5ncyBhYm92ZSB0aGF0IGFyZSBub3QgaW4gMi43Og0KKiBDcmVhdGUgYSBLd0hhc2ggb2JqZWN0 IGZvciBicmFjZS1sZXNzIGFuZCBkb3VibGUtc3BsYXR0ZWQgaGFzaGVzLg0KKiBEaWZmZXJlbnRp YXRlIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHdhcm5pbmdzIGFuZCBhbGxvdyB0byB0b2dnbGUgb24v b2ZmIHNlcGFyYXRlbHkNCiAgKiBTdGVwIDIgd2FybmluZ3MgX211c3RfIGJlIGZpeGVkIG5vdzsg Y2Fubm90IHRvZ2dsZSBvZmYNCiAgKiBTdGVwIDMgd2FybmluZ3MgX3Nob3VsZF8gYmUgZml4ZWQg bm93IGJ1dCB5b3UgZG9uJ3QgYWJzb2x1dGVseSBuZWVkIHRvIHVwZ3JhZGUgeW91ciBnZW1zIGp1 c3QgZm9yIHRoYXQNCiAgKiBTdGVwIDQgd2FybmluZ3MgX3Nob3VsZF8gYmUgZml4ZWQgaW4gbmV4 dCB2ZXJzaW9uIHVubGVzcyB5b3UgbmVlZCB0byBzdXBwb3J0IOKJpDIuNw0KDQpJIHRoaW5rIHRo YXQncyBhbGwsIHJlYWxseS4uLg0KDQojIyMgUHJvcw0KKiBDbGVhbmVyIHdheSB0byBzb2x2ZSAj MTY0OTQNCiogQmV0dGVyIGNvbXBhdGliaWxpdHkgKGF0IGxlYXN0IHVudGlsIDIuNiBpcyBFT0wp DQogICAqIGRlbGVnYXRpb24NCiAgICogc3RvcmluZyBhbiBhcmd1bWVudCBsaXN0IHRoYXQgZW5k cyB3aXRoIGEgS3dIYXNoDQogICAqIGRlc3RydWN0dXJpbmcgaXRlcmF0aW9uICgjMTY0OTQpDQoq IFdlIGNhbiBhdm9pZCB0aGUgInVuZm9ydHVuYXRlIGNvcm5lciBjYXNlIiBhcyBkZXNjcmliZWQg aW4gdGhlIFtyZWxlYXNlIG5vdGVzXShodHRwczovL3d3dy5ydWJ5LWxhbmcub3JnL2VuL25ld3Mv MjAxOS8xMi8xMi9zZXBhcmF0aW9uLW9mLXBvc2l0aW9uYWwtYW5kLWtleXdvcmQtYXJndW1lbnRz LWluLXJ1YnktMy0wLykNCiAgICogaW4gMi43IG9ubHkgZG8gbm90IG91dHB1dCAiU3RlcCA0IiB3 YXJuaW5ncywgbGVhdmUgZGVsZWdhdGlvbiBsaWtlIGl0IHdhcw0KICAgKiBpbiAyLjggdGhlICJT dGVwIDMiIHdhcm5pbmdzIGhhdmUgYmVlbiBmaXhlZCBhbmQgYSBIYXNoIHdpbGwgbm90IGJlIGNv bnZlcnRlZCB0byBrZXl3b3JkIGFyZ3VtZW50cw0KICAgKiBkZWxlZ2F0aW9uIGNhbiBub3cgc2Fm ZWx5IGJlIGZpeGVkIHRvIHVzZSB0aGUgYCoqYCBzeW50YXgNCiogcnVieTJfa2V5d29yZHMgaXMg bm90IHJlcXVpcmVkLCB3aGljaCBpcyBkZXNpcmFibGUgYmVjYXVzZQ0KICAgKiBpdCdzIGEgaGlk ZGVuIGZsYWcgX2hhY2tfDQogICAqIGl0IHJlcXVpcmVzIHRvIGNoYW5nZSB0aGUgY29kZSBub3cs IGFuZCBjaGFuZ2UgaXQgX2FnYWluXyB3aGVuIHJ1YnkyX2tleXdvcmRzIGlzIGRlcHJlY2F0ZWQ7 IHR3aWNlIHRoZSB3b3JrOyB0d2ljZSB0aGUgZ2VtIHVwZ3JhZGVzDQogICAqIGl0IHdhcyBzdXBw b3NlZCB0byBiZSB1c2VkIG9ubHkgZm9yIHBlb3BsZSB3aG8gbmVlZCB0byBzdXBwb3J0IDIuNiBv ciBiZWxvdywgYnV0IGl0J3MgYmVpbmcgbWlzdW5kZXJzdG9vZCBhcyBhbiBhY2NlcHRhYmxlIHdh eSB0byBmaXggZGVsZWdhdGlvbiBpbiBnZW5lcmFsDQogICAqIHRoZXJlJ3MgdGhlIG5vbi16ZXJv IHJpc2sgdGhhdCBydWJ5Ml9rZXl3b3JkcyB3aWxsIG5ldmVyIGJlIHJlbW92ZWQsIGxlYXZpbmcg dXMgd2l0aCBhIHBlcm1hbmVudCAiaGFjayBtb2RlIg0KICAgICAgKiBkeW5hbWljIGtleXdvcmRz IGFyZSBieSBmYXIgcHJlZmVyYWJsZSB0byBzdXBwb3J0aW5nIHJ1YnkyX2tleXdvcmRzIGZvcmV2 ZXINCiogTGlrZWx5IF9iZXR0ZXIgcGVyZm9ybWFuY2VfLCBhcyB0aGUgS3dIYXNoIGNsYXNzIGNh biBiZSBvcHRpbWl6ZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGtl eXdvcmQgYXJndW1lbnRzLg0KKiBNb3JlIGZsZXhpYmxlIG1pZ3JhdGlvbg0KICAgKiBBbGxvdyBt b3JlIHRpbWUgdG8gdXBncmFkZSB0aGUgaGFyZCBzdHVmZiBpbiBTdGVwIDQNCiAgICogQ2FuIHJl YWNoIHRoZSBfc2FtZV8gZ29hbCBhcyB0aGUgY3VycmVudCBzdGF0aWMgYXBwcm9hY2gNCiAgICog TGFyZ2VyICJzdXBwb3J0IHpvbmUiIGh0dHBzOi8veGtjZC5jb20vMjIyNC8NCiAgICogSW5zdGVh ZCBvZiB3aWRlLXJhbmdpbmcgaW5jb21wYXRpYmlsaXRpZXMgYWxsIGF0IG9uY2UsIHRoZXJlJ3Mg dGhlIF9wb3NzaWJpbGl0eV8gb2YgbWFraW5nIGl0IGZpbmVyLWdyYWluZWQgYW5kIG1vcmUgZ3Jh ZHVhbA0KICAgICAgKiBydWJ5aXN0cyBjYW4gX2Nob29zZV8gdG8gbWlncmF0ZSBhbGwgYXQgb25j ZSBvciBpbiBzbWFsbGVyIGNodW5rcw0KICAgKiBJdCBoZWRnZXMgdGhlIHJpc2tzIGJ5IGtlZXBp bmcgbW9yZSBwb3NzaWJpbGl0aWVzIG9wZW4gZm9yIG5vdy4NCiAgICogSXQgYWxsb3dzIHRvIGNv cC1vdXQgYXQgU3RlcCAzIGlmIFN0ZXAgNCB0dXJucyBvdXQgdG9vIGhhcmQgYmVjYXVzZSBpdCBi cmVha3MgdG9vIG11Y2ggc3R1ZmYNCg0KIyMjIENvbnMNCiogSXQgYWxsb3dzIHRvIGNvcC1vdXQg YXQgU3RlcCAzIGlmIFN0ZXAgNCB0dXJucyBvdXQgdG9vIGhhcmQgYmVjYXVzZSBpdCBicmVha3Mg dG9vIG11Y2ggc3R1ZmYNCg0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8N CgpVbnN1YnNjcmliZTogPG1haWx0bzpydWJ5LWNvcmUtcmVxdWVzdEBydWJ5LWxhbmcub3JnP3N1 YmplY3Q9dW5zdWJzY3JpYmU+CjxodHRwOi8vbGlzdHMucnVieS1sYW5nLm9yZy9jZ2ktYmluL21h aWxtYW4vb3B0aW9ucy9ydWJ5LWNvcmU+Cg==