[ruby-core:123710] [Ruby Feature#21665] Revisit Object#deep_freeze to support non-Ractor use cases
From:
retro via ruby-core <ruby-core@...>
Date:
2025-11-06 18:01:49 UTC
List:
ruby-core #123710
SXNzdWUgIzIxNjY1IGhhcyBiZWVuIHVwZGF0ZWQgYnkgcmV0cm8gKEpvc2VmIMWgaW3DoW5layku DQoNCg0KV2FzIGl0IGNvbnNpZGVyZWQga2VlcCBgbWFrZV9zaGFyZWFibGVgIG5hbWUsIGJ1dCBw b3J0IGl0IG91dHNpZGUgb2YgYFJhY3RvcmAgY2xhc3MgdG8gbWFrZSBpdCBpbmRlcGVuZGVudCBv ZiB0aGUgInNoYXJpbmciIGltcGxlbWVudGF0aW9uIGFuZCB1c2VmdWwgZm9yIEpSdWJ5IGFuZCBv dGhlcnM/DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1 cmUgIzIxNjY1OiBSZXZpc2l0IE9iamVjdCNkZWVwX2ZyZWV6ZSB0byBzdXBwb3J0IG5vbi1SYWN0 b3IgdXNlIGNhc2VzDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjE2NjUjY2hh bmdlLTExNTA5OA0KDQoqIEF1dGhvcjogaGVhZGl1cyAoQ2hhcmxlcyBOdXR0ZXIpDQoqIFN0YXR1 czogT3Blbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyMgUHJv cG9zYWw6IEludHJvZHVjZSBgT2JqZWN0I2RlZXBfZnJlZXplYCAob3Igc2ltaWxhciBuYW1lKSB0 byBmcmVlemUgYW4gZW50aXJlIG9iamVjdCBncmFwaA0KDQpJIHdvdWxkIGxpa2UgdG8gcmUtcHJv cG9zZSB0aGUgYWRkaXRpb24gb2YgT2JqZWN0I2RlZXBfZnJlZXplIGFzIGEgd2F5IHRvIGV4cGxp Y2l0bHkgZnJlZXplIGFuIGVudGlyZSBvYmplY3QgZ3JhcGguIFRoaXMgcHJvcG9zYWwgd2FzIHJl amVjdGVkIHNvbWUgeWVhcnMgYWdvIGFmdGVyIGJlaW5nIGJyb3VnaHQgdXAgaW4gaHR0cHM6Ly9i dWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE3MTQ1LiBUaGUgcHJvcG9zYWwgd2FzIHJlamVjdGVk IGluIGZhdm9yIG9mIG1ha2luZyBSYWN0b3Itc3BlY2lmaWMgbWV0aG9kcyBsaWtlIFJhY3Rvci5t YWtlX3NoYXJlYWJsZS4NCg0KVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlYXNvbnMgd2h5IEkgYmVs aWV2ZSBgZGVlcF9mcmVlemVgIGlzIHN0aWxsIGFuIGltcG9ydGFudCBhZGRpdGlvbjoNCg0KKiBS dWJ5aXN0cyBoYXZlIGJlZW4gcmVxdWVzdGluZyBhIHdheSB0byBkZWVwIGZyZWV6ZSBhbiBvYmpl Y3QgZ3JhcGggZm9yIG1hbnkgeWVhcnMgKGRlY2FkZXM/KSwgZmFyIGxvbmdlciB0aGFuIFJhY3Rv ciBoYXMgZXhpc3RlZC4NCiogSW1tdXRhYmxlIG9iamVjdHMgYXJlIHRoZSBzYWZlc3Qgd2F5IHRv IHNhZmUgY29uY3VycmVuY3ksIHdpdGggb3Igd2l0aG91dCBwYXJhbGxlbCB0aHJlYWRpbmcgb3Ig UmFjdG9yLg0KKiBJbiBmYWN0LCBkZWVwIGZyZWV6aW5nIGhhcyB1dGlsaXR5ICpjb21wbGV0ZWx5 IHVucmVsYXRlZCB0byBjb25jdXJyZW5jeSosIHN1Y2ggYXMgdG8gZ3VhcmFudGVlIHRoYXQgYSBs YXJnZSBncmFwaCBvZiBvYmplY3RzIHdpbGwgbm90IGJlIG1vZGlmaWVkIGluIHRoZSBmdXR1cmUu DQoqIEluIHRoZSBhYnNlbmNlIG9mIGBkZWVwX2ZyZWV6ZWAsIHVzZXJzIGhhdmUgYmVlbiBmb3Jj ZWQgdG8gaW1wbGVtZW50IHRoZSBiZWhhdmlvciB0aGVtc2VsdmVzLCByZWx5IG9uIHRoaXJkLXBh cnR5IGxpYnJhcmllcywgb3IgY2FsbCBgUmFjdG9yLm1ha2Vfc2hhcmVhYmxlYCBldmVuIGlmIHRo ZXkgbmV2ZXIgaW50ZW5kIHRvIHVzZSBSYWN0b3IuDQoqIFRoZSBleGlzdGluZyBgUmFjdG9yLm1h a2Vfc2hhcmVhYmxlYCBwcmltYXJpbHkgZG9lcyBhIGRlZXAgZnJlZXplIGludGVybmFsbHkuDQoN CkdpdmVuIHRoZSBzdGVhZHkgbW92ZSB0b3dhcmQgbWFraW5nIGltbXV0YWJpbGl0eSB0aGUgbm9y bSBpbiBSdWJ5LCBpdCBzZWVtcyBjbGVhciB0byBtZSB0aGF0IGRlZXAgZnJlZXppbmcgaXMgYSBm ZWF0dXJlIHRoYXQgaXMgbG9uZyBvdmVyZHVlLg0KDQojIyBSZXZpc2l0aW5nIGFyZ3VtZW50cyBm b3IgcmVqZWN0aW5nIGBkZWVwX2ZyZWV6ZWA6DQoNCkEgbnVtYmVyIG9mIHJlYXNvbnMgd2VyZSBn aXZlbiBpbiAjMTcxNDUgZm9yIHByZWZlcnJpbmcgdGhlIGBSYWN0b3IubWFrZV9zaGFyZWFibGVg IG1ldGhvZCBhbmQgcmVqZWN0aW5nIGBkZWVwX2ZyZWV6ZWAuIEkgYWRkcmVzcyB0aG9zZSBoZXJl Og0KDQpAa28xOg0KPiBPbmUgY29uY2VybiBhYm91dCB0aGUgbmFtZSAiZnJlZXplIiBpcywgd2hh dCBoYXBwZW5zIG9uIHNoYXJlYWJsZSBvYmplY3RzIG9uIFJhY3RvcnMuDQo+IEZvciBleGFtcGxl LCBSYWN0b3Igb2JqZWN0cyBhcmUgc2hhcmVhYmxlIGFuZCB0aGV5IGRvbid0IG5lZWQgdG8gZnJl ZXplIHRvIHNlbmQgYmV5b25kIFJhY3RvciBib3VuZGFyeS4NCg0KQXMgbWVudGlvbmVkIGFib3Zl LCBkZWVwIGZyZWV6aW5nIGhhcyB1dGlsaXR5IGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbSBSYWN0 b3JzIGFuZCBjb25jdXJyZW5jeS4gSXQgaXMgYSBmcmVxdWVudGx5LXJlcXVlc3RlZCBhbmQgdmVy eSB1c2VmdWwgZmVhdHVyZSB0byBhZGQuIEkgdGhpbmsgd2Ugc2hvdWxkIHRyZWF0IHRoaXMgYXMg YSBzdGFuZGFsb25lIGZlYXR1cmUsIGFuZCB0cmVhdCBlbmhhbmNlbWVudHMgZm9yIFJhY3RvcnMg YXMgYSBzZXBhcmF0ZSBjb25jZXJuLg0KDQpAa28xOg0KPiBJIGFsc28gd2FudCB0byBpbnRyb2R1 Y2UgTXV0YWJsZSBidXQgc2hhcmVhYmxlIG9iamVjdHMgdXNpbmcgU1RNIChvciBzb21ldGhpbmcg c2ltaWxhcikgd3JpdGluZyBwcm90b2NvbCAoc2hhcmVhYmxlIEhhc2gpLiBXaGF0IGhhcHBlbnMg b24gZGVlcF9mcmVlemU/DQoNCkZpdmUgeWVhcnMgbGF0ZXIsIEkgYmVsaWV2ZSB0aGlzIGhhcyBu b3QgeWV0IGhhcHBlbmVkLiBBIHBvdGVudGlhbCBmdXR1cmUgb3B0aW1pemF0aW9uIGZvciBSYWN0 b3Igc2hvdWxkIG5vdCBiZSBqdXN0aWZpY2F0aW9uIHRvIHJlamVjdCBhIHVzZWZ1bCBmZWF0dXJl IHRvZGF5Lg0KDQpJZiB1c2VycyBpbXBsZW1lbnQgdGhlaXIgY29kZSB1c2luZyBwcmltYXJpbHkg aW1tdXRhYmxlIG9iamVjdHMgbm93LCBpdCdzIHVubGlrZWx5IHRoYXQgdGhleSB3aWxsIHdhbnQg dGhvc2Ugc2FtZSBvYmplY3RzIHRvIGJlIG11dGFibGUgaW4gdGhlIGZ1dHVyZSAodGhpcyBhcHBs aWVzIHRvIGRlZXAgZnJlZXppbmcgYXMgd2VsbCBhcyBgbWFrZV9zaGFyZWFibGVgKS4NCg0KQGVy ZWdvbjoNCj4gQSBkeW5hbWljIGNhbGwgdG8gZnJlZXplIGNhdXNlcyBleHRyYSBjYWxscywgYW5k IG5lZWRzIGNoZWNrcyB0aGF0IGl0IHdhcyBpbmRlZWQgZnJvemVuLg0KPiBTbyBmb3IgZWZmaWNp ZW5jeSBJIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBtYXJrIGFzIGZyb3plbiBpbnRlcm5h bGx5IHdpdGhvdXQgYSBjYWxsIHRvIGZyZWV6ZSBvbiBldmVyeSB2YWx1ZS4NCg0KSSBhZ3JlZSB3 aXRoIHRoZSBjb25jZXJucyBhYm91dCBkeW5hbWljIGNhbGxzIHRvIGZyZWV6ZSBhbmQgb3ZlcnJp ZGRlbiB2ZXJzaW9ucyBvZiB0aGUgbWV0aG9kLiBJdCBtYXkgbWFrZSBtb3JlIHNlbnNlIHRvIGlt cGxlbWVudCB0aGlzIGFzIGEgdXRpbGl0eSBtZXRob2QsIGxpa2UgYE9iamVjdC5kZWVwX2ZyZWV6 ZShvYmopYCAoYSBub24tb3ZlcnJpZGFibGUgY2xhc3MgdXRpbGl0eSBtZXRob2QpLg0KDQpUaGlz IGlzIGVzc2VudGlhbGx5IHdoYXQgaGFzIGJlZW4gaW1wbGVtZW50ZWQgd2l0aGluIGBSYWN0b3Iu bWFrZV9zaGFyZWFibGVgIHRvZGF5Lg0KDQpAa28xOg0KPiBNYXliZSB0aGUgYXV0aG9yIGRvbid0 IHdhbnQgdG8gY2FyZSBhYm91dCBSYWN0b3IuDQo+IFRoZSBhdXRob3Igd2FudCB0byBkZWNsYXJl ICJJIGRvbid0IHRvdWNoIGl0Ii4gU28gImRlZXBfZnJlZXplIiBpcyBiZXR0ZXIuDQoNClRoaXMg d2FzIGFjdHVhbGx5IGdpdmVuIGFzIGEganVzdGlmaWNhdGlvbiBmb3IgYSBgZGVlcF9mcmVlemVg IG1ldGhvZCB2ZXJzdXMgc29tZXRoaW5nIGxpa2UgYE9iamVjdCN0b19zaGFyZWFibGVgLCBhbmQg eWV0IHdoYXQgd2UgZW5kZWQgdXAgd2l0aCB3YXMgYSBtZXRob2QgdGhhdCByZXF1aXJlcyB1c2Vy cyBrbm93IGFib3V0IFJhY3Rvci4gSSBiZWxpZXZlIHRoZXJlIHNob3VsZCBiZSBhIGBkZWVwX2Zy ZWV6ZWAgbWV0aG9kIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBSYWN0b3IuDQoNCkFuZCB1 c2VycyBvbiBKUnVieSBhbmQgVHJ1ZmZsZVJ1YnkgYWxyZWFkeSBjYW4gZ2V0IGZ1bGwgcGFyYWxs ZWxpc20gdG9kYXkgd2l0aG91dCBSYWN0b3IuIFRoZXkgZG8gbm90IGNhcmUgYWJvdXQgUmFjdG9y LCBidXQgdGhleSBkZWZpbml0ZWx5IGNhcmUgYWJvdXQgZGVlcCBmcmVlemluZy4NCg0KQGVyZWdv bjoNCj4gSSBkb24ndCBsaWtlIGFueXRoaW5nIHdpdGggInJhY3RvciIgaW4gdGhlIG5hbWUsIHRo YXQgYmVjb21lcyBub3QgZGVzY3JpcHRpdmUgb2Ygd2hhdCBpdCBkb2VzIGFuZCBJTUhPIGxvb2tz IHdlaXJkIGZvciBlLmcuIGdlbXMgbm90IHNwZWNpZmljYWxseSBjYXJpbmcgYWJvdXQgUmFjdG9y Lg0KDQpUaGlzIGlzIGEgbGFyZ2UgcGFydCBvZiBteSBqdXN0aWZpY2F0aW9uIGZvciByZXZpc2l0 aW5nIHRoaXMgcHJvcG9zYWwuIFVzZXJzIHNob3VsZCBub3QgaGF2ZSB0byBjYXJlIGFib3V0IG9y IHdhbnQgdG8gdXNlIFJhY3RvciBqdXN0IHNvIHRoZXkgY2FuIGRlZXAgZnJlZXplIGFuIG9iamVj dCBncmFwaCwgYmVjYXVzZSBpdCBoYXMgdXRpbGl0eSBmYXIgYmV5b25kIFJhY3Rvci4NCg0KQGtv MToNCj4gSSBpbXBsZW1lbnRlZCBPYmplY3QjZGVlcF9mcmVlemUoc2tpcF9zaGFyZWFibGU6IGZh bHNlKSBmb3IgdHJpYWwuDQo+IGh0dHBzOi8vZ2l0aHViLmNvbS9rbzEvcnVieS9wdWxsL25ldy9k ZWVwX2ZyZWV6ZQ0KDQpUaGVyZSdzIGFscmVhZHkgYSBwcm90b3R5cGUgb2YgdGhpcywgdGhvdWdo IEkgc3VzcGVjdCB0aGlzIGxvZ2ljIGVzc2VudGlhbGx5IGJlY2FtZSBgUmFjdG9yLm1ha2Vfc2hh cmVhYmxlYCBpbiB0aGUgZW5kLg0KDQpJIGJlbGlldmUgaXQgd291bGQgYmUgYWNjZXB0YWJsZSB0 byBpbXBsZW1lbnQgYFJhY3Rvci5tYWtlX3NoYXJlYWJsZWAgYnkgY2FsbGluZyBgZGVlcF9mcmVl emVgIHNpbmNlIHRoZXJlJ3MgbGFyZ2VseSBubyBkaWZmZXJlbmNlIGluIHZpc2libGUgYmVoYXZp b3IgKG90aGVyIHRoYW4gUmFjdG9yLXNwZWNpZmljIG9wdGltaXphdGlvbnMgbGlrZSBtYXJraW5n IGEgd2hvbGUgZ3JhcGggYXMgc2hhcmVhYmxlKS4NCg0KQGVyZWdvbjoNCj4gSG93IGFib3V0IGZp cnN0IGhhdmluZyBkZWVwX2ZyZWV6ZSB0aGF0IGp1c3QgZnJlZXplcyBldmVyeXRoaW5nIChleGNl cHQgYW4gb2JqZWN0J3MgY2xhc3MpPw0KDQpUaGlzIGlzIGEgZ29vZCBwcm9wb3NhbC4gSSBiZWxp ZXZlIGl0IGlzIHdoYXQgOTklIG9mIHVzZXJzIGN1cnJlbnRseSBjYWxsaW5nIGBtYWtlX3NoYXJl YWJsZWAgYWN0dWFsbHkgd2FudCwgYW5kIGFnYWluIHRoZXJlJ3MgdXRpbGl0eSB3ZWxsIGJleW9u ZCBSYWN0b3IgYW5kIGNvbmN1cnJlbmN5IHNjZW5hcmlvcy4NCg0KQGVyZWdvbjoNCj4gU28gd2Ug Y291bGQgbWFyayBhcyBkZWVwbHkgZnJvemVuIGZpcnN0LCBhbmQgcmVtZW1iZXIgdG8gdW5kbyB0 aGF0IGlmIHdlIGNhbm5vdCBmcmVlemUgc29tZSBvYmplY3QuDQo+IEhvd2V2ZXIsIGlzIHRoZXJl IGFueSBvYmplY3QgdGhhdCBjYW5ub3QgYmUgZnJvemVuPyBJIHdvdWxkIHRoaW5rIG5vdC4NCg0K VGhlIG1ham9yaXR5IG9mIHVzZXMgb2YgYG1ha2Vfc2hhcmVhYmxlYCBJIGhhdmUgc2VlbiBhcmUg Y2FsbGVkIGV4YWN0bHkgb25jZSBvbiBhIGdyYXBoIG9mIG9iamVjdHMuIEl0IGRvZXMgbm90IHNl ZW0gdG8gYmUgdHlwaWNhbCB0byByZXBlYXRlZGx5IGNhbGwgYG1ha2Vfc2hhcmVhYmxlYC4NCg0K SSB1bmRlcnN0YW5kIHRoZSBkZXNpcmUgdG8gaGF2ZSBhIGBzaGFyZWFibGVgIGJpdCBmb3IgUmFj dG9yIG9wdGltaXphdGlvbiwgYnV0IHRoYXQgaXMgYSAqc2VwYXJhdGUgZmVhdHVyZSogZnJvbSBk ZWVwIGZyZWV6aW5nIGFuIG9iamVjdCBncmFwaC4gVGhlcmUgYXJlIG1hbnkgY2FzZXMgd2hlcmUg d2Ugd2lsbCBvbmx5IGNhbGwgYGRlZXBfZnJlZXplYCBvbmNlIHRvIGVuc3VyZSBhIGdyYXBoIGlz IGZ1bGx5IGZyb3plbiBiZWZvcmUgcHVibGlzaGluZyBpdCBmb3Igb3RoZXIgY29kZSB0byBzZWUs IGFuZCBtb3N0IG9mIHRoZXNlIGNhc2VzIHdpbGwgbm90IHRyeSB0byByZS1kZWVwLWZyZWV6ZSB0 aGF0IGdyYXBoLg0KDQpSYWN0b3IncyBuZWVkIHRvICJkb3VibGUtY2hlY2siIHNoYXJlYWJpbGl0 eSBpcyBvcnRob2dvbmFsIHRvIHRoZSBkaXNjdXNzaW9uIGFib3V0IGRlZXAgZnJlZXppbmcgYW5k IHNob3VsZCBub3QgYmUganVzdGlmaWNhdGlvbiBmb3IgcmVqZWN0aW5nIGBkZWVwX2ZyZWV6ZWAu DQoNCkBlcmVnb24gYnJvdWdodCB1cCBjb25jZXJucyBhYm91dCBub3QgY2FsbGluZyB0aGUgY3Vz dG9tIGBmcmVlemVgIG1ldGhvZCBvbiB1c2VyIHR5cGVzLCBzaW5jZSB0aGV5IG1heSB3YW50IHRv IGVhZ2VybHkgY2FjaGUgc29tZSBkYXRhLg0KDQpJIGJlbGlldmUgdGhhdCBkaXNjdXNzaW9uIGlz IG91dCBvZiBzY29wZS4gYGRlZXBfZnJlZXplYCB3b3VsZCBiZSBkZWZpbmVkIHRvIG9ubHkgZnJl ZSB0aGUgb2JqZWN0cyB0aGF0IGFyZSBkaXJlY3RseSB3YWxrYWJsZSBmcm9tIGEgcm9vdCBvYmpl Y3QsIGFuZCBvbmx5IHNldHRpbmcgZnJvemVuIGJpdHMuIEEgbmV3IG92ZXJyaWRhYmxlIG1ldGhv ZCBjb3VsZCBiZSBpbnRyb2R1Y2VkIHRoYXQgYGRlZXBfZnJlZXplYCB3b3VsZCBjYWxsIGlmIHBy ZXNlbnQsIGJ1dCBvdGhlcndpc2UgaXQgc2hvdWxkIGp1c3QgZG8gZmFzdC1wYXRoIG9iamVjdCBm cmVlemUgZmxhZyBzZXR0aW5nLg0KDQpAbWFyY2FuZHJlOg0KPiBMb29raW5nIGF0IGRlZiBmcmVl emUgaW4gdGhlIHRvcCB+NDAwIGdlbXMsIEkgZm91bmQgNjQgaW4gc2VxdWVsIGdlbSBhbG9uZSwg YW5kIDI4IGRlZmluaXRpb25zIGluIHRoZSByZXN0IPCfmIUuDQoNClRoaXMgY29tbWVudCBwcm92 aWRlcyBhIGJyZWFrZG93biBvZiBjdXN0b20gYGZyZWV6ZWAgbWV0aG9kcyBhbmQgdGhlIHJlYXNv bnMgdGhleSBhcmUgaW1wbGVtZW50ZWQuIEFnYWluLCBJIGJlbGlldmUgdGhpcyBpcyBvdXQgb2Yg c2NvcGUgZm9yIHRoZSBkaXNjdXNzaW9uIGF0IGhhbmQuIEZvcmNpbmcgb2JqZWN0cyB0byAicHJl cGFyZSBmb3IgZGVlcCBmcmVlemluZyIgaXMgYSBzZXBhcmF0ZSBjb25zaWRlcmF0aW9uIHRoYXQg d2lsbCBiZSB2ZXJ5IGxpYnJhcnktc3BlY2lmaWMsIHNpbmNlIGV2ZXJ5IGxpYnJhcnkgbWF5IHdh bnQgdG8gcHJlcGFyZSBpbiBhIGRpZmZlcmVudCB3YXkuIEJ1dCB0aGV5ICphbGwqIHdhbnQgdGhl IGFiaWxpdHkgdG8gcmVjdXJzaXZlbHkgbWFyayBvYmplY3RzIGFzIGZyb3plbiwgd2hpY2ggaXMg YSBydW50aW1lLWxldmVsIGZlYXR1cmUuDQoNCkBrbzE6DQo+IFdlIGRpc2N1c3NlZCBhYm91dCB0 aGUgbmFtZSAiZGVlcF9mcmVlemUiLCBhbmQgTWF0eiBzYWlkIGRlZXBfZnJlZXplIHNob3VsZCBi ZSBvbmx5IGZvciBmcmVlemluZywgbm90IHJlbGF0ZWQgdG8gUmFjdG9yLiBTbyBjbGFzc2VzL21v ZHVsZSBzaG91bGQgYmUgZnJvemVuIGlmIFtDXS5kZWVwX2ZyZWV6ZS4gVGhpcyBpcyB3aHkgSSBw cm9wb3NlZCBhIE9iamVjdCNkZWVwX2ZyZWV6ZShza2lwX3NoYXJlYWJsZTogdHJ1ZSkgYW5kIFJh Y3Rvci5tYWtlX3NoYXJlYWJsZShvYmopLg0KDQpBdm9pZGluZyBjbGFzc2VzIGFuZCBtb2R1bGVz IHdoZW4gZGVlcCBmcmVlemluZyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBvcHRpb24gdG8gbWUu IE5hbWluZyBjb3VsZCBtYWtlIHRoaXMgYmVoYXZpb3IgY2xlYXIsIGJ1dCBhZ2FpbiBJIGJlbGll dmUgOTklIG9mIHVzZXJzIGp1c3Qgd2FudCBhIHBsYWluIG9sZCBvYmplY3QgYGRlZXBfZnJlZXpl YC4NCg0KQW5kIHRoaXMgaXMgYWdhaW4gY29uZmxhdGluZyB0d28gc2VwYXJhdGUgY29uY2VybnM6 DQoNCiogZGVlcCBmcmVlemluZw0KKiBtYXJraW5nIGFuIGVudGlyZSBncmFwaCBhcyBzaGFyZWFi bGUNCg0KVGhlc2UgYXJlIOKAkyBhbmQgc2hvdWxkIGJlIOKAkyB0d28gc2VwYXJhdGUgZmVhdHVy ZXMuIFRoZSBkZWVwIGZyZWV6aW5nIGZlYXR1cmUgc2hvdWxkIG5vdCBkZXBlbmQgb24gc2V0dGlu ZyBzaGFyZWFiaWxpdHkgYml0cywgc2luY2Ugc2hhcmVhYmlsaXR5IGlzIG9ubHkgbWVhbmluZ2Z1 bCBpbiB0aGUgY29udGV4dCBvZiBSYWN0b3JzLg0KDQpAa28xOg0KPiBTbyBuYW1pbmcgaXNzdWUg aXMgcmVhbWFpbmVkPw0KPiANCj4gT2JqZWN0I2RlZXBfZnJlZXplIChtYXR6IGRvZXNuJ3QgbGlr ZSBpdCkNCj4gT2JqZWN0I2RlZXBfZnJlZXplKHNraXBfc2hhcmFibGU6IHRydWUpIChJIGRvbid0 IGtub3cgaG93IE1hdHogZmVlbC4gQW5kIGl0IGlzIGRpZmZpY3VsdCB0byBkZWZpbmUgQ2xhc3Mv TW9kdWxlLy4uLiBvbiBza2lwX3NoYXJhYmxlOiBmYWxzZSkNCj4gUmFjdG9yLm1ha2Vfc2hhcmVh YmxlKG9iaikgKGNsZWFyIGZvciBtZSwgYnV0IGl0IGlzIGEgYml0IGxvbmcpDQo+IFJhY3Rvci5z aGFyZWFibGUhKG9iaikgKHNob3J0ZXIuIGlzIGl0IGNsZWFyPykNCj4gT2JqZWN0I3NoYXJlYWJs ZSEgKGlzIGl0IGFjY2VwdGFibGU/KQ0KPiAuLi4gb3RoZXIgaWRlYXM/DQoNCkkgb3V0bGluZSBz b21lIGFsdGVybmF0aXZlcyBiZWxvdy4NCg0KIyMgQWx0ZXJuYXRpdmUgZm9ybXM6DQoNCkBtYXR6 IGRpZG4ndCBsaWtlIGBkZWVwX2ZyZWV6ZWAgZml2ZSB5ZWFycyBhZ28uIEhvdyBkbyB5b3UgZmVl bCBhYm91dCBpdCBub3csIEBtYXR6Pw0KDQpTb21lIGFsdGVybmF0aXZlcyB3aXRoIGp1c3RpZmlj YXRpb246DQoNCiogT2JqZWN0LmRlZXBfZnJlZXplKG9iaikNCg0KVGhpcyB3b3VsZCBtYWtlIHNl bnNlIHRvIGF2b2lkIHVzZXJzIGJlaW5nIGFibGUgdG8gb3ZlcnJpZGUgdGhlIGBkZWVwX2ZyZWV6 ZWAgYmVoYXZpb3IsIGFuZCB3b3VsZCBtYWtlIGl0IGZlZWwgbW9yZSBsaWtlIGEgZ2xvYmFsIHV0 aWxpdHkgbWV0aG9kIHdpdGggc3BlY2lhbCBiZWhhdmlvci4NCg0KKiBPYmplY3QjZnJlZXplKG9i aiwgZGVlcDogdHJ1ZSkNCiogT2JqZWN0I2ZyZWV6ZShvYmosIHJlY3Vyc2l2ZTogdHJ1ZSkNCg0K VGhlc2Ugd29yayB3aXRoaW4gdGhlIGV4aXN0aW5nIGBmcmVlemVgIG1ldGhvZCBhbmQgc3RpbGwg Y29udmV5IGludGVudCwgYnV0IG1heSBicmVhayBBUElzIHRoYXQgZG9uJ3QgZXhwZWN0IHRvIHJl Y2VpdmUga2V5d29yZCBhcmd1bWVudHMuDQoNCkFuZCB0aGVyZSBhcmUgc29tZSBhbHRlcm5hdGl2 ZSBuYW1lcywgd2hpY2ggbWF5IHdvcmsgYXMgZWl0aGVyIGluc3RhbmNlIG1ldGhvZHMgb3IgY2xh c3MgbWV0aG9kczoNCg0KKiBgZnJlZXplX3JlY3Vyc2l2ZWANCiogYGZyZWV6ZV9hbGxgDQoqIGBm cmVlemUhYA0KKiBgZnJlZXplX3JlYWNoYWJsZV9vYmplY3RzYCAobG9uZyBidXQgYSB2YXJpYXRp b24gb2YgdGhpcyBtaWdodCBhZGRyZXNzIGNvbmNlcm5zIGFib3V0IG5vdCBmcmVlemluZyBjbGFz c2VzIGFuZCBtb2R1bGVzKQ0KDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8N Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29y ZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2Ny aWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1 YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9y dWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8K