[ruby-core:112976] [Ruby master Feature#19541] Proposal: Generate frame unwinding info for YJIT code
From:
"kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
Date:
2023-03-22 10:26:58 UTC
List:
ruby-core #112976
SXNzdWUgIzE5NTQxIGhhcyBiZWVuIHVwZGF0ZWQgYnkga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5h a3RzaWRpcykuDQ0KDQ0KDQ0KQSB0aG91Z2h0IGNyb3NzZWQgbXkgbWluZCAtIEkgd29uZGVyIGlm IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGJlIGltcGxlbWVudGVkIGluIHRoZSBDIHBhcnRzIG9mIHJ1 YnksIHJhdGhlciB0aGFuIGluIHJ1c3QuIHNvIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCBSSklUPyBP ciBpcyBkZWJ1ZyBvYmplY3QgZ2VuZXJhdGlvbiBzb21ldGhpbmcgZWFjaCBqaXQgc2hvdWxkIGRv IGZvciBpdHNlbGY/DQ0KDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0NCkZlYXR1cmUgIzE5NTQxOiBQcm9wb3NhbDogR2VuZXJhdGUgZnJhbWUgdW53aW5kaW5nIGlu Zm8gZm9yIFlKSVQgY29kZQ0NCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xOTU0 MSNjaGFuZ2UtMTAyNTA0DQ0KDQ0KKiBBdXRob3I6IGtqdHNhbmFrdHNpZGlzIChLSiBUc2FuYWt0 c2lkaXMpDQ0KKiBTdGF0dXM6IE9wZW4NDQoqIFByaW9yaXR5OiBOb3JtYWwNDQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQ0KIyMgV2hhdCBpcyBiZWluZyBwcm9wc2Vk Pw0NCg0NCkN1cnJlbnRseSwgd2hlbiBSdWJ5IGNyYXNoZXMgd2l0aCB5aml0IGdlbmVyYXRlZCBj b2RlIG9uIHRoZSBzdGFjaywgYHJiX3ByaW50X2JhY2t0cmFjZSgpYCBpcyB1bmFibGUgdG8gYWN0 dWFsbHkgc2hvdyBhbnkgZnJhbWVzIHVuZGVybmVhdGggdGhlIHlqaXQgY29kZS4gRm9yIGV4YW1w bGUsIGlmIHlvdSBzZW5kIFNJR1NFR1YgdG8gYSBSdWJ5IHByb2Nlc3MgcnVubmluZyB5aml0LCB0 aGlzIGlzIHdoYXQgeW91IHNlZToNDQoNDQpgYGANDQovcnVieS9taW5pcnVieShyYl9wcmludF9i YWNrdHJhY2UrMHhjKSBbMHhhYWFhZDAyNzY4ODRdIC9ydWJ5L3ZtX2R1bXAuYzo3ODUNDQovcnVi eS9taW5pcnVieShyYl92bV9idWdyZXBvcnQpIC9ydWJ5L3ZtX2R1bXAuYzoxMDkzDQ0KL3J1Ynkv bWluaXJ1YnkocmJfYnVnX2Zvcl9mYXRhbF9zaWduYWwrMHhkMCkgWzB4YWFhYWQwMDc1NTgwXSAv cnVieS9lcnJvci5jOjgxMw0NCi9ydWJ5L21pbmlydWJ5KHNpZ3NlZ3YrMHg1YykgWzB4YWFhYWQw MWJlZGFjXSAvcnVieS9zaWduYWwuYzo5MTkNDQpsaW51eC12ZHNvLnNvLjEoX19rZXJuZWxfcnRf c2lncmV0dXJuKzB4MCkgWzB4ZmZmZjkxYTNlOGJjXQ0NCi9ydWJ5L21pbmlydWJ5KG1hcDwodXNp emUsIHlqaXQ6OmJhY2tlbmQ6OmlyOjpJbnNuKSwgKHVzaXplLCB5aml0OjpiYWNrZW5kOjppcjo6 SW5zbiksIHlqaXQ6OmJhY2tlbmQ6OmlyOjp7aW1wbCMxN306Om5leHRfbWFwcGVkOjp7Y2xvc3Vy ZV9lbnYjMH0+KzB4OGMpIFsweGFhYWFkMDNiOGIwMF0gL3J1c3RjLzg5N2UzNzU1M2JiYThiNDI3 NTFjNjc2NTg5Njc4ODlkMTFlY2QxMjAvbGlicmFyeS9jb3JlL3NyYy9vcHRpb24ucnM6OTI5DQ0K L3J1YnkvbWluaXJ1YnkobmV4dF9tYXBwZWQrMHgzYykgWzB4YWFhYWQwMjkxZGMwXSBzcmMvYmFj a2VuZC9pci5yczoxMjI1DQ0KL3J1YnkvbWluaXJ1YnkoYXJtNjRfc3BsaXQrMHgxMTQpIFsweGFh YWFkMDI4Nzc0NF0gc3JjL2JhY2tlbmQvYXJtNjQvbW9kLnJzOjM1OQ0NCi9ydWJ5L21pbmlydWJ5 KGNvbXBpbGVfd2l0aF9yZWdzKzB4ODApIFsweGFhYWFkMDI4YmY4NF0gc3JjL2JhY2tlbmQvYXJt NjQvbW9kLnJzOjExMDYNDQovcnVieS9taW5pcnVieShjb21waWxlKzB4YzQpIFsweGFhYWFkMDI5 MWFlMF0gc3JjL2JhY2tlbmQvaXIucnM6MTE1OA0NCi9ydWJ5L21pbmlydWJ5KGdlbl9zaW5nbGVf YmxvY2srMHhlNDQpIFsweGFhYWFkMDJiMWY4OF0gc3JjL2NvZGVnZW4ucnM6ODU0DQ0KL3J1Ynkv bWluaXJ1YnkoZ2VuX2Jsb2NrX3Nlcmllc19ib2R5KzB4OWMpIFsweGFhYWFkMDNiMDI1MF0gc3Jj L2NvcmUucnM6MTY5OA0NCi9ydWJ5L21pbmlydWJ5KGdlbl9ibG9ja19zZXJpZXMrMHg1MCkgWzB4 YWFhYWQwM2IwMTAwXSBzcmMvY29yZS5yczoxNjc2DQ0KL3J1YnkvbWluaXJ1YnkoYnJhbmNoX3N0 dWJfaGl0X2JvZHkrMHg4MGMpIFsweGFhYWFkMDNiMWY2OF0gc3JjL2NvcmUucnM6MjAyMQ0NCi9y dWJ5L21pbmlydWJ5KHtjbG9zdXJlIzB9KzB4MjgpIFsweGFhYWFkMDJlYjg2Y10gc3JjL2NvcmUu cnM6MTkyNA0NCi9ydWJ5L21pbmlydWJ5KGRvX2NhbGw8eWppdDo6Y29yZTo6YnJhbmNoX3N0dWJf aGl0Ojp7Y2xvc3VyZV9lbnYjMH0sICpjb25zdCB1OD4rMHg5OCkgWzB4YWFhYWQwMzViYTNjXSAv cnVzdGMvODk3ZTM3NTUzYmJhOGI0Mjc1MWM2NzY1ODk2Nzg4OWQxMWVjZDEyMC9saWJyYXJ5L3N0 ZC9zcmMvcGFuaWNraW5nLnJzOjQ5Mg0NClsweGFhYWFkMDM1YzliNF0NDQpgYGANDQoNDQoobi5i LiAtIEkgY29tcGlsZWQgUnVieSB3aXRoIGAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzIOKA k3JkeW5hbWljIOKAk2dgIGluIGNmbGFncyB0byBtYWtlIHN1cmUgZ2NjIGdlbmVyYXRlcyBhcHBy b3ByaWF0ZSB1bndpbmQgaW5mbyAmIGtlZXBzIHRoZSBzeW1ib2wgdGFibGVzKS4NDQoNDQpMaWtl d2lzZSwgaWYgeW91IGF0dGFjaCBnZGIgdG8gYSBSdWJ5IHByb2Nlc3Mgd2l0aCB5aml0IGVuYWJs ZWQsIGdkYiBjYW4ndCBzaG93IHRocmVhZCBiYWNrdHJhY2VzIHRocm91Z2ggeWppdC1nZW5lcmF0 ZWQgY29kZSBlaXRoZXIuDQ0KDQ0KTXkgcHJvcG9zYWwgaXMgdGhhdCBZSklUIGdlbmVyYXRlIHN1 ZmZpY2llbnQgdW53aW5kaW5nIGFuZCBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBhbGwgcGxhdGZvcm1z IHRvIGFsbG93IGJvdGggYHJiX3ByaW50X2JhY2t0cmFjZSgpYCBhbmQgdGhlIHBsYXRmb3JtJ3Mg ZGVidWdnZXIgKGdkYi9sbGRiL1dpbkRiZykgdG8gc2hvdzoNDQoNDQoqIEZ1bGwgc3RhY2sgdHJh Y2VzIGFsbCB0aGUgd2F5IGJhY2sgdG8gYG1haW5gLiBUaGF0IGlzLCBpdCBzaG91bGQgYmUgcG9z c2libGUgdG8gc2VlIGZyYW1lcyBfdW5kZXJuZWF0aF8gYFsweGFhYWFkMDM1YzliNF1gIGZyb20g dGhlIGJhY2t0cmFjZSBhYm92ZS4NDQoqIE5hbWVzIGZvciB0aGUgZHluYW1pY2FsbHkgZ2VuZXJh dGVkIHlqaXQgYmxvY2tzIChlLmcuIGluc3RlYWQgb2YgYFsweGFhYWFkMDM1YzliNF1gLCB3ZSBz aG91bGQgc2VlIHNvbWV0aGluZyBsaWtlIGB5aml0JCRuYW1lX29mX3J1YnlfbWV0aG9kYCwgd2hl cmUgYG5hbWVfb2ZfcnVieV9tZXRob2RgIGlzIHRoZSBgbGFiZWxgIGZvciB0aGUgaXNlcSB0aGlz IGlzIEpJVCdkIGNvZGUgZm9yKS4NDQoNDQojIyBNb3RpdmF0aW9uDQ0KDQ0KSSBoYXZlIGEgZmV3 IG1vdGl2YXRpb25zIGZvciB3YW50aW5nIHRoaXMuIEZpcnN0bHksIEkgZmVlbCB0aGlzIGZ1bmN0 aW9uYWxpdHkgaXMgaW5kZXBlbmRlbnRseSB1c2VmdWwuIFdoZW4gUnVieSBjcmFzaGVzLCB0aGUg bW9yZSBpbmZvcm1hdGlvbiB3ZSBjYW4gZ2V0LCB0aGUgbW9yZSBsaWtlbHkgd2UgYXJlIHRvIGZp bmQgdGhlIHJvb3QgY2F1c2UuIExpa2V3aXNlLCB0aGUgc2FtZSBwcmluY2lwbGUgYXBwbGllcyB0 byBkZWJ1Z2dpbmcgd2l0aCBnZGIgLSB5b3UgY2FuIGdldCBhIGZ1bGxlciB1bmRlcnN0YW5kaW5n IG9mIHdoYXQgdGhlIHByb2Nlc3MgaXMgZG9pbmcgaWYgeW91IHNlZSB0aGUgd2hvbGUgc3RhY2su DQ0KDQ0KSSBoYXZlIG9mdGVuIGZvdW5kIGF0dGFjaGluZyBnZGIgdG8gdGhlIFJ1YnkgaW50ZXJw cmV0ZXIgaGVscHMgaW4gdW5kZXJzdGFuZGluZyBwcm9ibGVtcyBpbiBSdWJ5IGNvZGUgb3IgQyBl eHRlbnNpb25zIGFuZCBpcyBzb21ldGhpbmcgSSBkbyByZWxhdGl2ZWx5IGZyZXF1ZW50bHk7IHlq aXQgYnJlYWtpbmcgdGhhdCB3aWxsIGRlZmluaXRlbHkgYmUgaW5jb252ZW5pZW50IGZvciBtZSEN DQoNDQojIyBJbXBsZW1lbnRhdGlvbg0NCg0NCkkgaGF2ZSBhIGRyYWZ0IGltcGxlbWVudGF0aW9u IGhlcmUgb24gaG93IEknZCBpbXBsZW1lbnQgdGhpczogaHR0cHM6Ly9naXRodWIuY29tL3J1Ynkv cnVieS9wdWxsLzc1NjcuIEl0J3MgY3VycmVudGx5IG1pc3NpbmcgdGVzdHMgJiBwbGF0Zm9ybSBz dXBwb3J0IChpdCBvbmx5IHdvcmtzIG9uIExpbnV4IGFhcmNoNjQpLiBBbHNvLCBpdCBpbXBsZW1l bnRzIHVud2luZCBpbmZvIGdlbmVyYXRpb24sIHNvIHVud2luZGluZyBjYW4gd29yayBfdGhyb3Vn aF8geWppdCBjb2RlLCBidXQgaXQgZG9lcyBub3QgY3VycmVudGx5IGVtaXQgc3ltYm9scyB0byBn aXZlIF9uYW1lc18gdG8gdGhvc2UgeWppdCBmcmFtZXMuDQ0KDQ0KTXkgUFIgY29udGFpbnMgYSBk b2N1bWVudCB3aGljaCBleHBsYWlucyBob3cgdGhlIExpbnV4IGludGVyZmFjZXMgZm9yIHJlZ2lz dGVyaW5nIHVud2luZCBpbmZvIGZvciBKSVQnZCBjb2RlIHdvcmssIHNvIEkgd29uJ3QgZHVwbGlj YXRlIHRoYXQgaW5mb3JtYXRpb24gaGVyZS4NDQoNDQpUaGUgYmlnZ2VzdCBpbXBsZW1lbnRhdGlv biBxdWVzdGlvbiBJIGhhZCBpcyBhcm91bmQgdGhlIHVzZSBvZiBSdXN0IGNyYXRlcy4gQ3VycmVu dGx5LCBJIHByb3RvdHlwZWQgbXkgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIGdpbWxpICYgb2Jq ZWN0IGNyYXRlcywgZm9yIGdlbmVyYXRpbmcgRFdBUkYgaW5mbyBhbmQgRUxGIGJpbmFyaWVzLiBI b3dldmVyLCB0aGUgeWppdCBidWlsZCBkb2VzIHB1cnBvc2VmdWxseSBkb2VzIG5vdCB1c2UgY2Fy Z28gJiBleHRlcm5hbCBjcmF0ZXMgZm9yIHJlbGVhc2UgYnVpbGRzLiBUaGVyZSBhcmUgYSBmZXcg ZGlmZmVyZW50IHdheXMgd2UgY291bGQgZ28gaGVyZToNDQoNDQoqIERvbid0IHVzZSB0aGUgZ2lt bGkgJiBvYmplY3QgY3JhdGVzOyBpbnN0ZWFkLCByZS1pbXBsZW1lbnQgYWxsIGRlYnVnIGluZm8g JiBvYmplY3QgZmlsZSBnZW5lcmF0aW9uIGNvZGUgaW4geWppdC4NDQoqIERvbid0IHVzZSB0aGUg Y3JhdGVzOyBpbnN0ZWFkLCBsaW5rIGFnYWludCBDIGxpYnJhcmllcyB0byBwcm92aWRlIHRoaXMg ZnVuY3Rpb25hbGl0eSAmIGNhbGwgdGhlbSBmcm9tIFJ1c3QgKHBlcmhhcHMgc29tZSBjb21iaW5h dGlvbiBvZiBsaWJlbGYsIGxpYmR3LCBsaWJiZmQsIG9yIGxsdm0gbWlnaHQgZG8gd2hhdCB3ZSBu ZWVkKQ0NCiogVXNlIGNhcmdvIGFmdGVyIGFsbCBmb3IgdGhlIHJlbGVhc2UgYnVpbGQgJiBkb3du bG9hZCB0aGUgY3JhdGVzIGF0IGJ1aWxkLXRpbWUNDQoqIFVzZSBjYXJnbyBmb3IgdGhlIHJlbGVh c2UgYnVpbGQsIGJ1dCB2ZW5kb3IgZXZlcnl0aGluZywgc28gdGhlIGJ1aWxkIGRvZXNuJ3QgbmVl ZCB0byBkb3dubG9hZCBhbnl0aGluZw0NCiogT25seSBtYWtlIHVud2luZCBpbmZvIGdlbmVyYXRp b24gYXZhaWxhYmxlIGluIGRldiBtb2RlIHdoZXJlIGNhcmdvIGlzIHVzZWQsIGFuZCBzbyBtYXJr IHRoZSBnaW1saS9vYmplY3QgZGVwZW5kZW5jaWVzIGFzIG9wdGlvbmFsIGluIENhcmdvLnRvbWwu DQ0KDQ0KV2UnZCBuZWVkIHRvIGRlY2lkZSBvbiBvbmUgb2YgdGhlc2UgYXBwcm9hY2hlcyBmb3Ig dGhpcyBwcm9wb3NhbCB0byB3b3JrLiBJIGRvbid0IHJlYWxseSBoYXZlIGEgc3Ryb25nIHNlbnNl IG9mIHRoZSBwcm9zL2NvbnMgb2YgZWFjaC4NDQoNDQooU2lkZSBub3RlIC0gbXkgUFIgYWN0dWFs bHkgZGVwZW5kcyBvbiBhIF9mb3JrXyBvZiBnaW1saSAtIEkndmUgYmVlbiBkaXNjdXNzaW5nIGFk ZGluZyB0aGUgbmVlZGVkIGludGVyZmFjZXMgdXBzdHJlYW0gaGVyZTogaHR0cHM6Ly9naXRodWIu Y29tL2dpbWxpLXJzL2dpbWxpL2lzc3Vlcy82NDgpLg0NCg0NCiMjIEJlbmNobWFya3MNDQoNDQpJ IHJhbiB0aGUgeWl0LWJlbmNoIHN1aXRlIG9uIG15IGJyYW5jaCBhbmQgY29tcGFyZWQgaXQgdG8g UnVieSBtYXN0ZXI6DQ0KDQ0KKiBNeSBicmFuY2g6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0tK VHNhbmFrdHNpZGlzLzU3NDFhOWY2NGU1Y2Q3NWNkZjVmZWRkODQ2MDkxYTRmDQ0KKiBSdWJ5IG1h c3RlcjogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vS0pUc2FuYWt0c2lkaXMvNTkyZDNlYmNmOThm Njc0NWRmYTNlZmJkMzBhMjVhY2YNDQoNDQpUaGlzIGlzIGEgKHZlcnkgc2ltcGxlKSBjb21wYXJp c29uOg0NCg0NCmBgYA0NCi0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0g LS0tLS0tLS0tLS0tLS0tDQ0KYmVuY2ggICAgICAgICAgeWppdCAobXMpICAgIGJyYW5jaCAobXMp ICBicmFuY2gveWppdCAoJSkNDQphY3RpdmVyZWNvcmQgICA5Ny41ICAgICAgICAgOTguNSAgICAg ICAgIDEwMS4wMyUNDQpoZXhhcGRmICAgICAgICAyNDE1LjMgICAgICAgMjQ1OC4yICAgICAgIDEw MS43OCUNDQpsaXF1aWQtYyAgICAgICA2MS45ICAgICAgICAgNjMuMSAgICAgICAgIDEwMS45NCUN DQpsaXF1aWQtcmVuZGVyICAxMzUuMyAgICAgICAgMTM1LjAgICAgICAgIDk5Ljc4JQ0NCm1haWwg ICAgICAgICAgIDEwNC42ICAgICAgICAxMDUuNSAgICAgICAgMTAwLjg2JQ0NCnBzeWNoLWxvYWQg ICAgIDE4ODcuMSAgICAgICAxOTIyLjAgICAgICAgMTAxLjg1JQ0NCnJhaWxzYmVuY2ggICAgIDE1 NDQuNCAgICAgICAxNTU2LjAgICAgICAgMTAwLjc1JQ0NCnJ1YnktbHNwICAgICAgIDg4LjQgICAg ICAgICA4OS41ICAgICAgICAgMTAxLjI0JQ0NCnNlcXVlbCAgICAgICAgIDE0Ny41ICAgICAgICAx NTEuMSAgICAgICAgMTAyLjQ0JQ0NCmJpbmFyeXRyZWVzICAgIDMwMyAgICAgICAgICAzMDUuNiAg ICAgICAgMTAwLjg2JQ0NCmNodW5reV9wbmcgICAgIDEwNzUuOCAgICAgICAxMDc5LjQgICAgICAg MTAwLjMzJQ0NCmVydWJpICAgICAgICAgIDM5Mi45ICAgICAgICAzOTIuMyAgICAgICAgOTkuODUl DQ0KZXJ1YmlfcmFpbHMgICAgMTQuNyAgICAgICAgIDE0LjcgICAgICAgICAxMDAuMDAlDQ0KZXRh bm5pICAgICAgICAgNzkyLjMgICAgICAgIDc5MS40ICAgICAgICA5OS44OSUNDQpmYW5ua3VjaHJl ZHV4ICAzODE1LjkgICAgICAgMzgxMy42ICAgICAgIDk5Ljk0JQ0NCmxlZSAgICAgICAgICAgIDEw MzAuMiAgICAgICAxMDM5LjIgICAgICAgMTAwLjg3JQ0NCm5ib2R5ICAgICAgICAgIDQ5LjIgICAg ICAgICA0OS4zICAgICAgICAgMTAwLjIwJQ0NCm9wdGNhcnJvdCAgICAgIDQxNDIgICAgICAgICA0 MTQzLjMgICAgICAgMTAwLjAzJQ0NCnJ1YnktanNvbiAgICAgIDI4NjAuNyAgICAgICAyODc0LjAg ICAgICAgMTAwLjQ2JQ0NCnJ1Ynlrb24gICAgICAgIDc5MDYuNiAgICAgICA3OTA0LjIgICAgICAg OTkuOTclDQ0KMzBrX2lmZWxzZSAgICAgMzQ4LjcgICAgICAgIDM0NS40ICAgICAgICA5OS4wNSUN DQozMGtfbWV0aG9kcyAgICA4MjguNiAgICAgICAgODMxLjggICAgICAgIDEwMC4zOSUNDQpjZnVu Y19pdHNlbGYgICAyOC44ICAgICAgICAgMjguOSAgICAgICAgIDEwMC4zNSUNDQpmaWIgICAgICAg ICAgICAzNC40ICAgICAgICAgMzQuNSAgICAgICAgIDEwMC4yOSUNDQpnZXRpdmFyICAgICAgICAx MTUuNSAgICAgICAgMTA5LjcgICAgICAgIDk0Ljk4JQ0NCmtleXdvcmRfYXJncyAgIDM3LjcgICAg ICAgICAzOC4wICAgICAgICAgMTAwLjgwJQ0NCnJlc3BvbmRfdG8gICAgIDI2ICAgICAgICAgICAy Ni4xICAgICAgICAgMTAwLjM4JQ0NCnNldGl2YXIgICAgICAgIDMzLjggICAgICAgICAzMy41ICAg ICAgICAgOTkuMTElDQ0Kc2V0aXZhcl9vYmplY3QgMjA4LjcgICAgICAgIDE5NC4zICAgICAgICA5 My4xMCUNDQpzdHJfY29uY2F0ICAgICA1Mi42ICAgICAgICAgNTIuMiAgICAgICAgIDk5LjI0JQ0N CnRocm93ICAgICAgICAgIDIzLjggICAgICAgICAyNC4xICAgICAgICAgMTAxLjI2JQ0NCi0tLS0t LS0tLS0tLS0tIC0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tDQ0KYGBg DQ0KDQ0KSXQgc2VlbXMgbGlrZSB0aGUgcGVyZm9ybWFuY2UgaW1wYWN0IG9mIGdlbmVyYXRpbmcg YW5kIHJlZ2lzdGVyaW5nIHRoZSBkZWJ1ZyBpbmZvIGlzIG1hcmdpbmFsLg0NCg0NCg0NCg0NCi0t IA0NCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0NCiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1Ynkt Y29yZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1 YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczov L21sLnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMvcG9zdG9yaXVzL2xpc3RzL3J1YnktY29yZS5tbC5y dWJ5LWxhbmcub3JnLw==