Python Launcher Pops Up When Py-based App Is Running (Mac)
James Greenham via Python-list <[email protected]> Sun, 17 Sep 2023 04:20:56 +0300
| Newsgroups | gmane.comp.python.general,gmane.comp.python.apple |
|---|---|
| Message-ID | <[email protected]> |
SGVsbG8sCgpPbiB0aGUgZmFjZSBvZiBpdCwgdGhlIFB5dGhvbi1NYWMgbWFpbGluZyBsaXN0IGlz IGxhcmdlbHkgaW5hY3RpdmUgc28gSSdtIHBvc3RpbmcgaGVyZSBzaW5jZSBpdCBsb29rcyBsaWtl IHRoaXMgb25lIGlzIGxpdmVsaWVyLiAgCgpJJ20gcnVubmluZyBtYWNPUyBNb2phdmUgd2l0aCBQ eXRob24gMi43LiBJIGhhdmUgYW4gb2xkIERhc2hib2FyZCB3aWRnZXQgKGxhc3QgbW9kaWZpZWQg aW4gMjAwOSkgdGhhdCBhcHBlYXJzIHRvIHVzZSBQeXRob24gYXMgd2VsbC4gVGhlIHdpZGdldCBj YXB0dXJlcyB0aGUgZnVsbCBTYWZhcmkgd2ViLXBhZ2UuIEl0IHdvcmtzIHNlYW1sZXNzbHkgb24g ZWFybGllciBtYWNPUyBzeXN0ZW1zIGJ1dCBoYW5ncyBpbiAxMC4xNC4gVGhlIHdpZGdldCdzIGNv cmUgZnVuY3Rpb25zIGNvbnN0aXR1dGUgY29kZSBvZiB0aGUgc2NyaXB0IHRoYXQgSSdtIHBhc3Rp bmcgaW4gdGhpcyBtZXNzYWdlLiBUaGUgcHJvYmxlbSBpcyB0aGF0IGFzIHNvb24gYXMgdGhlIGV4 ZWN1dGlvbiByZWFjaGVzIHRoZSBpbWFnZSBwcm9jZXNzaW5nIHN0YWdlIGl0IGdldHMgc3R1Y2sg d2hpY2ggbWFuaWZlc3RzIGJ5IFB5dGhvbiBMYXVuY2hlciBwb3BwaW5nIHVwIGluIERvY2sgYW5k IGlzIHRyeWluZyBmb3JldmVyIHVudGlsIEkgcXVpdCB0aGUgbGF1bmNoZXIgdGhhdCBmb3JjZS1x dWl0cyB0aGUgd2lkZ2V0IHNob3dpbmcgdGhlIGVycm9yIGljb24uCgpUaGUgaXNzdWUgc2VlbXMg dG8gb3JpZ2luYXRlIGluIHRoZSBkb0dyYWIgaGFuZGxlciAobW9kdWxlIG9yIHdoYXRldmVyIHRo ZSBjb3JyZWN0IFB5dGhvbiB0ZXJtIGZpdHMgdGhlIGRlZmluaXRpb24pIGltbWVkaWF0ZWx5IGZv bGxvd2luZyB0aGUgcHJpbnQgIlByb2Nlc3NpbmcgSW1hZ2UuLi4iIGxpbmU6IGl0J3MgdGhlIG1l c3NhZ2UgdGhlIHdpZGdldCBkaXNwbGF5cyBhdCBnZXR0aW5nIHN0YWxsZWQuIEkoIGNoZWNrZWQg dGhhdCBQeXRob24gMi43IGlzIGluc3RhbGxlZCBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBhdCAv dXNyL2Jpbi4gSSBhbHNvIGhhdmUgdGhlIGJpbmFyaWVzIGlkbGUzLCBpZGxlMy4xMCwgcGlwMywg cGlwMy4xMCBpbiAvdXNyL2xvY2FsL2JpbiwgYXBwYXJlbnRseSB1c2VkIGJ5IGFub3RoZXIgVW5p eCBwcm9ncmFtLiAKCklzIHRoYXQgcmVtZWRpZWQ/IFRoZSBzY3JpcHQncyBlbnZpcm9ubWVudCBz ZXQgdG8gcHl0aG9uLCBpLmUuIHRvIHB5dGhvbiAyLjcgc28gdGhhdCBzaG91bGRuJ3QgYmUgdGhl IGVuY3VtYnJhbmNlLiBBbSBJIGNvcnJlY3Q/CgojIS91c3IvYmluL2VudiBweXRob24KIyAtKi0g Y29kaW5nOiB1dGYtOCAtKi0KCiMgT1I6CiMgY29kaW5nPXV0Zi04CgpfX3ZlcnNpb25fXyA9ICIw LjYiCgojCiMgQmFzZWQgb24gUGF1bCBIYW1tb25kJ3Mgd2Via2l0MnBuZyBzY3JpcHQgLSBtYWtl IHNjcmVlbnNob3RzIG9mIHdlYnBhZ2VzCiMgaHR0cDovL3d3dy5wYXVsaGFtbW9uZC5vcmcvd2Vi a2l0MnBuZyA8aHR0cDovL3d3dy5wYXVsaGFtbW9uZC5vcmcvd2Via2l0MnBuZz4KIwojIE1vZGlm aWVkIGJ5IFBhdWxvIEF2aWxhIGZvciB0aGUgUGFnZSBDYXB0dXJlIHdpZGdldAojCiMgVGhlIG9y aWdpbmFsIHNvdXJjZSBjb2RlICh2MC41KSBiZWxvbmdzIHRvIFBhdWwgSGFtbW9uZCAoc2VlIG5v dGljZSBiZWxvdykuCiMgQW55IGFuZCBhbGwgY29kZSBhZGRlZCBhZnRlciBpcyBDb3B5cmlnaHQg KGMpIDIwMDkgUGF1bG8gQXZpbGEuCiMKIyBNb2RpZmljYXRpb24gTG9nIGJ5IFBhdWwgQXZpbGEK IwojICAyMDA5LjA0LjIxIC0gQ2hhbmdlZCBhbG1vc3QgYWxsIHRoZSBvdXRwdXQgbWVzc2FnZXMg aW4gb3JkZXIgdG8gYmVoYXZlIHByb3Blcmx5IHdpdGggbXkgUGFnZSBDYXB0dXJlIHdpZGdldAoj ICAyMDA5LjA0LjIxIC0gQWRkZWQgZnVuY3Rpb24gaGVhZGVycwojICAyMDA5LjA0LjIxIC0gUHJv cGVybHkgZmx1c2ggdGhlIG91dHB1dCBidWZmZXJzIHNvIHRoYXQgbWVzc2FnZXMgZGlzcGxheSBp bW1lZGlhdGVseQojICAyMDA5LjA0LjIxIC0gQ2hhbmdlZCBlbmNvZGluZyBvZiB0aGlzIGZpbGUg dG8gVVRGLTgKIyAgMjAwOS4wNC4yNSAtIFVwZGF0ZWQgaG93IGZpbGVzIGFyZSBuYW1lZDogIjxk b21haW4+ID4gPGZpbGU+LnBuZyIKIyAgMjAwOS4wNC4yNSAtIEZpbGVzIGFyZSBub3cgbmFtZWQg d2l0aCB0aGUgZnVsbCBVUkwgZXhjbHVkaW5nIHByb3RvY29sIChodHRwOi8vKSBhbmQgYXJndW1l bnRzICguLi4/KikKIwoKCgojIENvcHlyaWdodCAoYykgMjAwOSBQYXVsIEhhbW1vbmQKIwojIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhIGNvcHkKIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAojIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy aWdodHMKIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIwojIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1 ZGVkIGluCiMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCiMKIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgojIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAojIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNI QUxMIFRIRQojIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAojIE9VVCBPRiBP UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVB TElOR1MgSU4KIyBUSEUgU09GVFdBUkUuCiMKICAgICAgICAgICAgICAgIAppbXBvcnQgc3lzCmlt cG9ydCBvcHRwYXJzZQoKdHJ5OgogIGltcG9ydCBGb3VuZGF0aW9uCiAgaW1wb3J0IFdlYktpdAog IGltcG9ydCBBcHBLaXQKICBpbXBvcnQgb2JqYwpleGNlcHQgSW1wb3J0RXJyb3I6CiAgI3ByaW50 ICJDYW5ub3QgZmluZCBweW9iamMgbGlicmFyeSBmaWxlcy4gIEFyZSB5b3Ugc3VyZSBpdCBpcyBp bnN0YWxsZWQ/IgogIHByaW50ICJNYWMgT1MgWCAxMC41IG9yIGhpZ2hlciBpcyByZXF1aXJlZC4i CiAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgc3lzLmV4aXQoKSAKCgoKY2xhc3MgQXBwRGVsZWdhdGUg KEZvdW5kYXRpb24uTlNPYmplY3QpOgogICAgIyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgYXBwIHN0 YXJ0cyB1cAogICAgZGVmIGFwcGxpY2F0aW9uRGlkRmluaXNoTGF1bmNoaW5nXyhzZWxmLCBhTm90 aWZpY2F0aW9uKToKICAgICAgICB3ZWJ2aWV3ID0gYU5vdGlmaWNhdGlvbi5vYmplY3QoKS53aW5k b3dzKClbMF0uY29udGVudFZpZXcoKQogICAgICAgIHdlYnZpZXcuZnJhbWVMb2FkRGVsZWdhdGUo KS5nZXRVUkwod2VidmlldykKCmNsYXNzIFdlYmtpdExvYWQgKEZvdW5kYXRpb24uTlNPYmplY3Qs IFdlYktpdC5wcm90b2NvbHMuV2ViRnJhbWVMb2FkRGVsZWdhdGUpOgogICAgIyB3aGF0IGhhcHBl bnMgaWYgc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2hpbGUgbG9hZGluZwogICAgZGVmIHdlYlZpZXdf ZGlkRmFpbExvYWRXaXRoRXJyb3JfZm9yRnJhbWVfKHNlbGYsd2VidmlldyxlcnJvcixmcmFtZSk6 CiAgICAgICAgI3ByaW50ICIgLi4uIHNvbWV0aGluZyB3ZW50IHdyb25nIiAKICAgICAgICBwcmlu dCAiVW5hYmxlIHRvIGxvYWQgV2ViS2l0LiIKICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAg ICAgICBzZWxmLmdldFVSTCh3ZWJ2aWV3KQogICAgZGVmIHdlYlZpZXdfZGlkRmFpbFByb3Zpc2lv bmFsTG9hZFdpdGhFcnJvcl9mb3JGcmFtZV8oc2VsZix3ZWJ2aWV3LGVycm9yLGZyYW1lKToKICAg ICAgICAjcHJpbnQgIiAuLi4gc29tZXRoaW5nIHdlbnQgd3JvbmciIAogICAgICAgIHByaW50ICJD aGVjayBVUkwgb3IgSW50ZXJuZXQgY29ubmVjdGlvbi4iCiAgICAgICAgc3lzLnN0ZG91dC5mbHVz aCgpCiAgICAgICAgc2VsZi5nZXRVUkwod2VidmlldykKCgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojNyAtIEdlbmVyYXRlcyB0aGUgZmlsZW5h bWUuCgogICAgZGVmIG1ha2VGaWxlbmFtZShzZWxmLFVSTCxvcHRpb25zKToKICAgICAgICMgbWFr ZSB0aGUgZmlsZW5hbWUKICAgICAgIGlmIG9wdGlvbnMuZmlsZW5hbWU6CiAgICAgICAgIGZpbGVu YW1lID0gb3B0aW9ucy5maWxlbmFtZQogICAgICAgZWxpZiBvcHRpb25zLm1kNToKICAgICAgICAg dHJ5OgogICAgICAgICAgICAgICAgaW1wb3J0IG1kNQogICAgICAgICBleGNlcHQgSW1wb3J0RXJy b3I6CiAgICAgICAgICAgICAgICBwcmludCAiLS1tZDUgcmVxdWlyZXMgcHl0aG9uIG1kNSBsaWJy YXJ5IgogICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICAgICBB cHBLaXQuTlNBcHBsaWNhdGlvbi5zaGFyZWRBcHBsaWNhdGlvbigpLnRlcm1pbmF0ZV8oTm9uZSkK ICAgICAgICAgZmlsZW5hbWUgPSBtZDUubmV3KFVSTCkuaGV4ZGlnZXN0KCkKICAgICAgIGVsc2U6 CiAgICAgICAgIGltcG9ydCByZQojICAgICAgICAgZmlsZW5hbWUgPSByZS5zdWIoJ1xXJywnJyxV UkwpOyAjXFcgaXMgdGhlIHNhbWUgYXMgW15hLXpBLVowLTlfXQoKIy0tLS0tLS0tCiAgICAgICAg ICNyZW1vdmUgYW55dGhpbmcgYWZ0ZXIgKGFuZCBpbmNsdWRpbmcpIGEgcXVlc3Rpb24gbWFyawog ICAgICAgICBVUkwgPSByZS5zdWIoIlw/LiokIiwgIiIsIFVSTCk7CiAgICAgICAgICNhcmcgPSBV UkwuZmluZCgiPyIpOwogICAgICAgICAjaWYgYXJnID49IDA6CiAgICAgICAgICMgICAgVVJMID0g VVJMWzA6YXJnXTsKCiAgICAgICAgICNyZW1vdmUgdGhlIHByb3RvY29sIHN0cmluZyBpbiB0aGUg YmVnaW5uaW5nIChTU0wgb3Igbm90KQogICAgICAgICBVUkwgPSByZS5zdWIoIl5odHRwcz86Ly8i LCAiIiwgVVJMKTsKCgoKIy0tIFBhZ2UgQ2FwdHVyZSAjIChzdGFydCkKICAgICAgICAgaW1wb3J0 IG9zCiAgICAgICAgIGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmV4cGFuZHVzZXIob3B0 aW9ucy5kaXIpKTsKCiAgICAgICAgIGNvdW50ID0gMTsKICAgICAgICAgd2hpbGUgb3MuYWNjZXNz KGRpciArICIvUGFnZSBDYXB0dXJlICIgKyBzdHIoY291bnQpICsgIi5wbmciLCBvcy5GX09LKTog CiAgICAgICAgICAgICBjb3VudCArPSAxOwoKICAgICAgICAgZmlsZW5hbWUgPSAiUGFnZSBDYXB0 dXJlICIgKyBzdHIoY291bnQpOwojLS0gUGFnZSBDYXB0dXJlICMgKGVuZCkKCgoKIy0tIEZ1bGwg VVJMIChzdGFydCkKICAgICAgICAgI3JlcGxhY2UgZm9yd2FyZCBzbGFzaGVzIHdpdGggY29sb25z IHRvIGFsbG93IHRvIGZvcndhcmQgc2xhc2hlcyBpbiB0aGUgZmlsZW5hbWUgKE9TIFgncyBIRlMr IGFsbG93cyBmb3IgdGhpcykKICAgICAgIyAgIGZpbGVuYW1lID0gcmUuc3ViKCIvIiwgIjoiLCBV UkwpOwoKICAgICAgICAgI21heCBmaWxlbmFtZSBsZW5ndGggcGVybWl0dGVkIGlzIDI1NS4gKDI1 NSAtIDQgPSAyNTEpLiAoNCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBleHRlbmlvbiAnLnBuZycpCiAg ICAgICMgICBpZiBsZW4oZmlsZW5hbWUpID4gMjUxOgogICAgICAjICAgICAgIGZpbGVuYW1lID0g ZmlsZW5hbWVbMDoyNDhdICsgIi4uLiI7CiMtLSBGdWxsIFVSTCAoZW5kKQoKCgojLS0gRG9tYWlu ID4gRmlsZSAoc3RhcnQpCiAgICAgICMgICBVUkwgPSBVUkwuc3BsaXQoIi8iKTsKCiAgICAgICAg ICNpc29sYXRlIGp1c3QgdGhlIGRvbWFpbgogICAgICAjICAgZG9tYWluID0gVVJMWzBdOwogICAg ICAgICAjZG9tYWluID0gcmUuc3ViKCIvLiokIiwgIiIsIFVSTCk7CiAgICAgICAgICNkb21haW4g PSBVUkxbMDpVUkwuZmluZCgiLyIpXTsKCiAgICAgICAgICNpc29sYXRlIGp1c3QgdGhlIGZpbGUs IGlmIGl0IGRvZXNuJ3QgZXhpc3QsIG1ha2UgaXQgYmxhbmsKICAgICAgIyAgIGZpbGUgPSBVUkxb bGVuKFVSTCktMV07CiAgICAgICMgICBpZiBsZW4oVVJMKSA9PSAxOgogICAgICAjICAgICAgIGZp bGUgPSAiIjsKCiAgICAgICMgICBmaWxlbmFtZSA9IGRvbWFpbiArICIgPiAiICsgZmlsZTsKCiAg ICAgICAgICNwcmludCAiZD0gJyIgKyBkb21haW4gKyAiJyI7CiAgICAgICAgICNwcmludCAiZj0g JyIgKyBmaWxlICsgIiciOwojLS0gRG9tYWluID4gRmlsZSAoZW5kKQojLS0tLS0tLS0KCiAgICAg ICBpZiBvcHRpb25zLmRhdGVzdGFtcDoKICAgICAgICAgaW1wb3J0IHRpbWUKICAgICAgICAgbm93 ID0gdGltZS5zdHJmdGltZSgiJVklbSVkIikKIyAgICAgICAgIG5vdyA9IHRpbWUuc3RyZnRpbWUo IiVZJW0lZCVIJU0lUyIpCiAgICAgICAgIGZpbGVuYW1lID0gbm93ICsgIi0iICsgZmlsZW5hbWUK IyAgICAgICBpbXBvcnQgb3MKIyAgICAgICBkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5l eHBhbmR1c2VyKG9wdGlvbnMuZGlyKSkKIyAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKGRpcixm aWxlbmFtZSkKICAgICAgIHJldHVybiBmaWxlbmFtZQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzggLSBTYXZlcyB0aGUgY2FwdHVyZWQgaW1h Z2UocykgdG8gdGhlIHJpZ2h0IHBsYWNlLgoKICAgIGRlZiBzYXZlSW1hZ2VzKHNlbGYsYml0bWFw ZGF0YSxmaWxlbmFtZSxvcHRpb25zKToKICAgICAgICAjIHNhdmUgdGhlIGZ1bGxzaXplIHBuZwog ICAgICAgIGlmIG9wdGlvbnMuZnVsbHNpemU6CgkJCWJpdG1hcGRhdGEucmVwcmVzZW50YXRpb25V c2luZ1R5cGVfcHJvcGVydGllc18oQXBwS2l0Lk5TUE5HRmlsZVR5cGUsTm9uZSkud3JpdGVUb0Zp bGVfYXRvbWljYWxseV8oZmlsZW5hbWUgKyAiLWZ1bGwucG5nIixvYmpjLllFUykKCiAgICAgICAg aWYgb3B0aW9ucy50aHVtYiBvciBvcHRpb25zLmNsaXBwZWQ6CiAgICAgICAgICAgICMgd29yayBv dXQgaG93IGJpZyB0aGUgdGh1bWJuYWlsIGlzCiAgICAgICAgICAgIHdpZHRoID0gYml0bWFwZGF0 YS5waXhlbHNXaWRlKCkKICAgICAgICAgICAgaGVpZ2h0ID0gYml0bWFwZGF0YS5waXhlbHNIaWdo KCkKICAgICAgICAgICAgdGh1bWJXaWR0aCA9ICh3aWR0aCAqIG9wdGlvbnMuc2NhbGUpCiAgICAg ICAgICAgIHRodW1iSGVpZ2h0ID0gKGhlaWdodCAqIG9wdGlvbnMuc2NhbGUpCgogICAgICAgICAg ICAjIG1ha2UgdGhlIHRodW1ibmFpbHMgaW4gYSBzY3JhdGNoIGltYWdlCiAgICAgICAgICAgIHNj cmF0Y2ggPSBBcHBLaXQuTlNJbWFnZS5hbGxvYygpLmluaXRXaXRoU2l6ZV8oCiAgICAgICAgICAg ICAgICAgICAgRm91bmRhdGlvbi5OU01ha2VTaXplKHRodW1iV2lkdGgsdGh1bWJIZWlnaHQpKQog ICAgICAgICAgICBzY3JhdGNoLmxvY2tGb2N1cygpCiAgICAgICAgICAgIEFwcEtpdC5OU0dyYXBo aWNzQ29udGV4dC5jdXJyZW50Q29udGV4dCgpLnNldEltYWdlSW50ZXJwb2xhdGlvbl8oCiAgICAg ICAgICAgICAgICAgICAgQXBwS2l0Lk5TSW1hZ2VJbnRlcnBvbGF0aW9uSGlnaCkKICAgICAgICAg ICAgdGh1bWJSZWN0ID0gRm91bmRhdGlvbi5OU01ha2VSZWN0KDAuMCwgMC4wLCB0aHVtYldpZHRo LCB0aHVtYkhlaWdodCkKICAgICAgICAgICAgY2xpcFJlY3QgPSBGb3VuZGF0aW9uLk5TTWFrZVJl Y3QoMC4wLCAKICAgICAgICAgICAgICAgICAgICB0aHVtYkhlaWdodC1vcHRpb25zLmNsaXBoZWln aHQsIAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2xpcHdpZHRoLCBvcHRpb25zLmNsaXBo ZWlnaHQpCiAgICAgICAgICAgIGJpdG1hcGRhdGEuZHJhd0luUmVjdF8odGh1bWJSZWN0KQogICAg ICAgICAgICB0aHVtYk91dHB1dCA9IEFwcEtpdC5OU0JpdG1hcEltYWdlUmVwLmFsbG9jKCkuaW5p dFdpdGhGb2N1c2VkVmlld1JlY3RfKHRodW1iUmVjdCkKICAgICAgICAgICAgY2xpcE91dHB1dCA9 IEFwcEtpdC5OU0JpdG1hcEltYWdlUmVwLmFsbG9jKCkuaW5pdFdpdGhGb2N1c2VkVmlld1JlY3Rf KGNsaXBSZWN0KQogICAgICAgICAgICBzY3JhdGNoLnVubG9ja0ZvY3VzKCkKICAgICAgICAgICAK ICAgICAgICAgICAgIyBzYXZlIHRoZSB0aHVtYm5haWxzIGFzIHBuZ3MgCiAgICAgICAgICAgIGlm IG9wdGlvbnMudGh1bWI6CiAgICAgICAgICAgICAgICB0aHVtYk91dHB1dC5yZXByZXNlbnRhdGlv blVzaW5nVHlwZV9wcm9wZXJ0aWVzXygKICAgICAgICAgICAgICAgICAgICAgICAgQXBwS2l0Lk5T UE5HRmlsZVR5cGUsTm9uZQogICAgICAgICAgICAgICAgICAgICkud3JpdGVUb0ZpbGVfYXRvbWlj YWxseV8oZmlsZW5hbWUgKyAiLnBuZyIsb2JqYy5ZRVMpCiMgICAgICAgICAgICAgICAgdGh1bWJP dXRwdXQucmVwcmVzZW50YXRpb25Vc2luZ1R5cGVfcHJvcGVydGllc18oCiMgICAgICAgICAgICAg ICAgICAgICAgICBBcHBLaXQuTlNQTkdGaWxlVHlwZSxOb25lCiMgICAgICAgICAgICAgICAgICAg ICkud3JpdGVUb0ZpbGVfYXRvbWljYWxseV8oZmlsZW5hbWUgKyAiLXRodW1iLnBuZyIsb2JqYy5Z RVMpCiAgICAgICAgICAgIGlmIG9wdGlvbnMuY2xpcHBlZDoKICAgICAgICAgICAgICAgIGNsaXBP dXRwdXQucmVwcmVzZW50YXRpb25Vc2luZ1R5cGVfcHJvcGVydGllc18oCiAgICAgICAgICAgICAg ICAgICAgICAgIEFwcEtpdC5OU1BOR0ZpbGVUeXBlLE5vbmUKICAgICAgICAgICAgICAgICAgICAp LndyaXRlVG9GaWxlX2F0b21pY2FsbHlfKGZpbGVuYW1lICsgIi1jbGlwcGVkLnBuZyIsb2JqYy5Z RVMpCgoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIzEgLSBEb3dubG9hZHMgVVJMIGNvbnRlbnRzLgoKICAgIGRlZiBnZXRVUkwoc2VsZix3ZWJ2 aWV3KToKICAgICAgICBpZiBzZWxmLnVybHM6CiAgICAgICAgICAgIGlmIHNlbGYudXJsc1swXSA9 PSAnLSc6CiAgICAgICAgICAgICAgICB1cmwgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5yc3RyaXAo KQogICAgICAgICAgICAgICAgaWYgbm90IHVybDogQXBwS2l0Lk5TQXBwbGljYXRpb24uc2hhcmVk QXBwbGljYXRpb24oKS50ZXJtaW5hdGVfKE5vbmUpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAg ICAgICAgICB1cmwgPSBzZWxmLnVybHMucG9wKDApCiAgICAgICAgZWxzZToKICAgICAgICAgICAg QXBwS2l0Lk5TQXBwbGljYXRpb24uc2hhcmVkQXBwbGljYXRpb24oKS50ZXJtaW5hdGVfKE5vbmUp CiAgICAgICAgI3ByaW50ICJGZXRjaGluZyIsIHVybCwgIi4uLiIKICAgICAgICBwcmludCAiRmV0 Y2hpbmcgVVJMLi4uIgogICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgIHNlbGYucmVz ZXRXZWJ2aWV3KHdlYnZpZXcpCiAgICAgICAgd2Vidmlldy5tYWluRnJhbWUoKS5sb2FkUmVxdWVz dF8oRm91bmRhdGlvbi5OU1VSTFJlcXVlc3QucmVxdWVzdFdpdGhVUkxfKEZvdW5kYXRpb24uTlNV UkwuVVJMV2l0aFN0cmluZ18odXJsKSkpCiAgICAgICAgaWYgbm90IHdlYnZpZXcubWFpbkZyYW1l KCkucHJvdmlzaW9uYWxEYXRhU291cmNlKCk6CiAgICAgICAgICAgICNwcmludCAiIC4uLiBub3Qg YSBwcm9wZXIgdXJsPyIKICAgICAgICAgICAgcHJpbnQgIkludmFsaWQgVVJMLiIKICAgICAgICAg ICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgIHNlbGYuZ2V0VVJMKHdlYnZpZXcpCgoK CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzIg LSBSZXNldHMgYW55IHByZXZpb3VzIGhpc3Rvcnk/CgogICAgZGVmIHJlc2V0V2VidmlldyhzZWxm LHdlYnZpZXcpOgogICAgICAgIHJlY3QgPSBGb3VuZGF0aW9uLk5TTWFrZVJlY3QoMCwwLHNlbGYu b3B0aW9ucy5pbml0V2lkdGgsc2VsZi5vcHRpb25zLmluaXRIZWlnaHQpCiAgICAgICAgd2Vidmll dy53aW5kb3coKS5zZXRDb250ZW50U2l6ZV8oKHNlbGYub3B0aW9ucy5pbml0V2lkdGgsc2VsZi5v cHRpb25zLmluaXRIZWlnaHQpKQogICAgICAgIHdlYnZpZXcuc2V0RnJhbWVfKHJlY3QpCgoKCiMt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzUgLSBS ZXNpemVzIHRoZSB3aW5kb3cuCgogICAgZGVmIHJlc2l6ZVdlYnZpZXcoc2VsZix2aWV3KToKICAg ICAgICB2aWV3LndpbmRvdygpLmRpc3BsYXkoKQogICAgICAgIHZpZXcud2luZG93KCkuc2V0Q29u dGVudFNpemVfKHZpZXcuYm91bmRzKCkuc2l6ZSkKICAgICAgICB2aWV3LnNldEZyYW1lXyh2aWV3 LmJvdW5kcygpKQoKCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiM2IC0gVHVybnMgY3VycmVudCB3ZWJ2aWV3IGNvbnRlbnQgaW50byBhIGJpdG1h cC4KICAgIGRlZiBjYXB0dXJlVmlldyhzZWxmLHZpZXcpOgogICAgICAgIHZpZXcubG9ja0ZvY3Vz KCkKICAgICAgICBiaXRtYXBkYXRhID0gQXBwS2l0Lk5TQml0bWFwSW1hZ2VSZXAuYWxsb2MoKQog ICAgICAgIGJpdG1hcGRhdGEuaW5pdFdpdGhGb2N1c2VkVmlld1JlY3RfKHZpZXcuYm91bmRzKCkp CiAgICAgICAgdmlldy51bmxvY2tGb2N1cygpCiAgICAgICAgcmV0dXJuIGJpdG1hcGRhdGEKCgoK Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojMyAt IENhbGxlZCBmb3IgZWFjaCAicGllY2UiIG9mIHRoZSBwYWdlLgoKICAgICMgd2hhdCBoYXBwZW5z IHdoZW4gdGhlIHBhZ2UgaGFzIGZpbmlzaGVkIGxvYWRpbmcKICAgIGRlZiB3ZWJWaWV3X2RpZEZp bmlzaExvYWRGb3JGcmFtZV8oc2VsZix3ZWJ2aWV3LGZyYW1lKToKICAgICAgICAjIGRvbid0IGNh cmUgYWJvdXQgc3ViZnJhbWVzCiAgICAgICAgaWYgKGZyYW1lID09IHdlYnZpZXcubWFpbkZyYW1l KCkpOgogICAgICAgICAgICBGb3VuZGF0aW9uLk5TVGltZXIuc2NoZWR1bGVkVGltZXJXaXRoVGlt ZUludGVydmFsX3RhcmdldF9zZWxlY3Rvcl91c2VySW5mb19yZXBlYXRzXyggc2VsZi5vcHRpb25z LmRlbGF5LCBzZWxmLCBzZWxmLmRvR3JhYiwgd2VidmlldywgRmFsc2UpCgoKCiMtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIzQgLSBQcm9jZXNzIHRo ZSBkb3dubG9hZGVkIGNvbnRlbnQgKGNhbGxzIDUtOCkKCiAgICBkZWYgZG9HcmFiKHNlbGYsdGlt ZXIpOgogICAgICAgICAgICBwcmludCAiUHJvY2Vzc2luZyBpbWFnZS4uLiIKICAgICAgICAgICAg c3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgIHdlYnZpZXcgPSB0aW1lci51c2VySW5mbygp CiAgICAgICAgICAgIHZpZXcgPSB3ZWJ2aWV3Lm1haW5GcmFtZSgpLmZyYW1lVmlldygpLmRvY3Vt ZW50VmlldygpCiAgICAgICAgICAgIAogICAgICAgICAgICBzZWxmLnJlc2l6ZVdlYnZpZXcodmll dykKCiAgICAgICAgICAgIFVSTCA9IHdlYnZpZXcubWFpbkZyYW1lKCkuZGF0YVNvdXJjZSgpLmlu aXRpYWxSZXF1ZXN0KCkuVVJMKCkuYWJzb2x1dGVTdHJpbmcoKQogICAgICAgICAgICBmaWxlbmFt ZSA9IHNlbGYubWFrZUZpbGVuYW1lKFVSTCwgc2VsZi5vcHRpb25zKSAKCiAgICAgICAgICAgIGlt cG9ydCBvcwogICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5hYnNw YXRoKG9zLnBhdGguZXhwYW5kdXNlcihzZWxmLm9wdGlvbnMuZGlyKSksIGZpbGVuYW1lKTsKCiAg ICAgICAgICAgIGJpdG1hcGRhdGEgPSBzZWxmLmNhcHR1cmVWaWV3KHZpZXcpICAKICAgICAgICAg ICAgc2VsZi5zYXZlSW1hZ2VzKGJpdG1hcGRhdGEsIGZ1bGxfcGF0aCwgc2VsZi5vcHRpb25zKQoK ICAgICAgICAgICAgI3ByaW50ICIgLi4uIGRvbmUiCiMg4pyTCiAgICAgICAgICAgIHByaW50ICI8 ZmlsZW5hbWU+IiArIGZpbGVuYW1lICsgIjwvZmlsZW5hbWU+IHNhdmVkIHRvIHlvdXIgRGVza3Rv cC4iCiAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICBzZWxmLmdldFVS TCh3ZWJ2aWV3KQoKCmRlZiBtYWluKCk6CgogICAgIyBwYXJzZSB0aGUgY29tbWFuZCBsaW5lCiAg ICB1c2FnZSA9ICIiIiVwcm9nIFtvcHRpb25zXSBbaHR0cDovL2V4YW1wbGUubmV0LyA8aHR0cDov L2V4YW1wbGUubmV0Lz4gLi4uXQoKZXhhbXBsZXM6CiVwcm9nIGh0dHA6Ly9nb29nbGUuY29tLyA8 aHR0cDovL2dvb2dsZS5jb20vPiAgICAgICAgICAgICMgc2NyZWVuZ3JhYiBnb29nbGUKJXByb2cg LVcgMTAwMCAtSCAxMDAwIGh0dHA6Ly9nb29nbGUuY29tLyA8aHR0cDovL2dvb2dsZS5jb20vPiAj IGJpZ2dlciBzY3JlZW5ncmFiIG9mIGdvb2dsZQolcHJvZyAtVCBodHRwOi8vZ29vZ2xlLmNvbS8g PGh0dHA6Ly9nb29nbGUuY29tLz4gICAgICAgICAjIGp1c3QgdGhlIHRodW1ibmFpbCBzY3JlZW5n cmFiCiVwcm9nIC1URiBodHRwOi8vZ29vZ2xlLmNvbS8gPGh0dHA6Ly9nb29nbGUuY29tLz4gICAg ICAgICMganVzdCB0aHVtYm5haWwgYW5kIGZ1bGxzaXplIGdyYWIKJXByb2cgLW8gZm9vIGh0dHA6 Ly9nb29nbGUuY29tLyA8aHR0cDovL2dvb2dsZS5jb20vPiAgICAgIyBzYXZlIGltYWdlcyBhcyAi Zm9vLXRodW1iLnBuZyIgZXRjCiVwcm9nIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg c2NyZWVuZ3JhYiB1cmxzIGZyb20gc3RkaW4KJXByb2cgLWggfCBsZXNzICAgICAgICAgICAgICAg ICAgICAgIyBmdWxsIGRvY3VtZW50YXRpb24iIiIKCiAgICBjbWRwYXJzZXIgPSBvcHRwYXJzZS5P cHRpb25QYXJzZXIodXNhZ2UsdmVyc2lvbj0oIndlYmtpdDJwbmcgIitfX3ZlcnNpb25fXykpCiAg ICAjIFRPRE86IGFkZCBxdWlldC92ZXJib3NlIG9wdGlvbnMKICAgIGNtZHBhcnNlci5hZGRfb3B0 aW9uKCItVyIsICItLXdpZHRoIix0eXBlPSJmbG9hdCIsZGVmYXVsdD04MDAuMCwKICAgICAgIGhl bHA9ImluaXRpYWwgKGFuZCBtaW5pbXVtKSB3aWR0aCBvZiBicm93c2VyIChkZWZhdWx0OiA4MDAp IikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItSCIsICItLWhlaWdodCIsdHlwZT0iZmxvYXQi LGRlZmF1bHQ9NjAwLjAsCiAgICAgICBoZWxwPSJpbml0aWFsIChhbmQgbWluaW11bSkgaGVpZ2h0 IG9mIGJyb3dzZXIgKGRlZmF1bHQ6IDYwMCkiKQogICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi0t Y2xpcHdpZHRoIix0eXBlPSJmbG9hdCIsZGVmYXVsdD0yMDAuMCwKICAgICAgIGhlbHA9IndpZHRo IG9mIGNsaXBwZWQgdGh1bWJuYWlsIChkZWZhdWx0OiAyMDApIiwKICAgICAgIG1ldGF2YXI9IldJ RFRIIikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItLWNsaXBoZWlnaHQiLHR5cGU9ImZsb2F0 IixkZWZhdWx0PTE1MC4wLAogICAgICAgaGVscD0iaGVpZ2h0IG9mIGNsaXBwZWQgdGh1bWJuYWls IChkZWZhdWx0OiAxNTApIiwKICAgICAgIG1ldGF2YXI9IkhFSUdIVCIpCiAgICBjbWRwYXJzZXIu YWRkX29wdGlvbigiLXMiLCAiLS1zY2FsZSIsdHlwZT0iZmxvYXQiLGRlZmF1bHQ9MC4yNSwKICAg ICAgIGhlbHA9InNjYWxlIGZhY3RvciBmb3IgdGh1bWJuYWlscyAoZGVmYXVsdDogMC4yNSkiKQog ICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0tbWQ1IiwgYWN0aW9uPSJzdG9yZV90cnVl IiwKICAgICAgIGhlbHA9InVzZSBtZDUgaGFzaCBmb3IgZmlsZW5hbWUgKGxpa2UgZGVsLmljaW8u dXMgPGh0dHA6Ly9kZWwuaWNpby51cy8+KSIpCiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLW8i LCAiLS1maWxlbmFtZSIsIHR5cGU9InN0cmluZyIsZGVmYXVsdD0iIiwKICAgICAgIG1ldGF2YXI9 Ik5BTUUiLCBoZWxwPSJzYXZlIGltYWdlcyBhcyBOQU1FLWZ1bGwucG5nLE5BTUUtdGh1bWIucG5n IGV0YyIpCiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLUYiLCAiLS1mdWxsc2l6ZSIsIGFjdGlv bj0ic3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJvbmx5IGNyZWF0ZSBmdWxsc2l6ZSBzY3JlZW5z aG90IikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItVCIsICItLXRodW1iIiwgYWN0aW9uPSJz dG9yZV90cnVlIiwKICAgICAgIGhlbHA9Im9ubHkgY3JlYXRlIHRodW1ibmFpbCBzcmVlbnNob3Qi KQogICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi1DIiwgIi0tY2xpcHBlZCIsIGFjdGlvbj0ic3Rv cmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJvbmx5IGNyZWF0ZSBjbGlwcGVkIHRodW1ibmFpbCBzY3Jl ZW5zaG90IikKICAgIGNtZHBhcnNlci5hZGRfb3B0aW9uKCItZCIsICItLWRhdGVzdGFtcCIsIGFj dGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJpbmNsdWRlIGRhdGUgaW4gZmlsZW5hbWUi KQogICAgY21kcGFyc2VyLmFkZF9vcHRpb24oIi1EIiwgIi0tZGlyIix0eXBlPSJzdHJpbmciLGRl ZmF1bHQ9Ii4vIiwKICAgICAgIGhlbHA9ImRpcmVjdG9yeSB0byBwbGFjZSBpbWFnZXMgaW50byIp CiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLS1kZWxheSIsdHlwZT0iZmxvYXQiLGRlZmF1bHQ9 MCwKICAgICAgIGhlbHA9ImRlbGF5IGJldHdlZW4gcGFnZSBsb2FkIGZpbmlzaGluZyBhbmQgc2Ny ZWVuc2hvdCIpCiAgICBjbWRwYXJzZXIuYWRkX29wdGlvbigiLS1ub2ltYWdlcyIsIGFjdGlvbj0i c3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxwPSJkb24ndCBsb2FkIGltYWdlcyIpCiAgICBjbWRwYXJz ZXIuYWRkX29wdGlvbigiLS1kZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICBoZWxw PW9wdHBhcnNlLlNVUFBSRVNTX0hFTFApCiAgICAob3B0aW9ucywgYXJncykgPSBjbWRwYXJzZXIu cGFyc2VfYXJncygpCiAgICBpZiBsZW4oYXJncykgPT0gMDoKICAgICAgICBjbWRwYXJzZXIucHJp bnRfdXNhZ2UoKQogICAgICAgIHJldHVybgogICAgaWYgb3B0aW9ucy5maWxlbmFtZToKICAgICAg ICBpZiBsZW4oYXJncykgIT0gMSBvciBhcmdzWzBdID09ICItIjoKICAgICAgICAgIHByaW50ICIt LWZpbGVuYW1lIG9wdGlvbiByZXF1aXJlcyBleGFjdGx5IG9uZSB1cmwiCiAgICAgICAgICBzeXMu c3Rkb3V0LmZsdXNoKCkKICAgICAgICAgIHJldHVybgogICAgaWYgb3B0aW9ucy5zY2FsZSA9PSAw OgogICAgICBjbWRwYXJzZXIuZXJyb3IoInNjYWxlIGNhbm5vdCBiZSB6ZXJvIikKICAgICMgbWFr ZSBzdXJlIHdlJ3JlIG91dHB1dGluZyBzb21ldGhpbmcKICAgIGlmIG5vdCAob3B0aW9ucy5mdWxs c2l6ZSBvciBvcHRpb25zLnRodW1iIG9yIG9wdGlvbnMuY2xpcHBlZCk6CiAgICAgIG9wdGlvbnMu ZnVsbHNpemUgPSBUcnVlCiAgICAgIG9wdGlvbnMudGh1bWIgPSBUcnVlCiAgICAgIG9wdGlvbnMu Y2xpcHBlZCA9IFRydWUKICAgICMgd29yayBvdXQgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgYnJv d3NlciB3aW5kb3cKICAgICMgICh0aGlzIG1pZ2h0IG5lZWQgdG8gYmUgbGFyZ2VyIHNvIGNsaXBw ZWQgaW1hZ2UgaXMgcmlnaHQgc2l6ZSkKICAgIG9wdGlvbnMuaW5pdFdpZHRoID0gKG9wdGlvbnMu Y2xpcHdpZHRoIC8gb3B0aW9ucy5zY2FsZSkKICAgIG9wdGlvbnMuaW5pdEhlaWdodCA9IChvcHRp b25zLmNsaXBoZWlnaHQgLyBvcHRpb25zLnNjYWxlKQogICAgaWYgb3B0aW9ucy53aWR0aD5vcHRp b25zLmluaXRXaWR0aDoKICAgICAgIG9wdGlvbnMuaW5pdFdpZHRoID0gb3B0aW9ucy53aWR0aAog ICAgaWYgb3B0aW9ucy5oZWlnaHQ+b3B0aW9ucy5pbml0SGVpZ2h0OgogICAgICAgb3B0aW9ucy5p bml0SGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQKCiAgICBhcHAgPSBBcHBLaXQuTlNBcHBsaWNhdGlv bi5zaGFyZWRBcHBsaWNhdGlvbigpCiAgICAKICAgICMgY3JlYXRlIGFuIGFwcCBkZWxlZ2F0ZQog ICAgZGVsZWdhdGUgPSBBcHBEZWxlZ2F0ZS5hbGxvYygpLmluaXQoKQogICAgQXBwS2l0Lk5TQXBw KCkuc2V0RGVsZWdhdGVfKGRlbGVnYXRlKQoKICAgICMgY3JlYXRlIGEgd2luZG93CiAgICByZWN0 ID0gRm91bmRhdGlvbi5OU01ha2VSZWN0KDAsMCwxMDAsMTAwKQogICAgd2luID0gQXBwS2l0Lk5T V2luZG93LmFsbG9jKCkKICAgIHdpbi5pbml0V2l0aENvbnRlbnRSZWN0X3N0eWxlTWFza19iYWNr aW5nX2RlZmVyXyAocmVjdCwgCiAgICAgICAgICAgIEFwcEtpdC5OU0JvcmRlcmxlc3NXaW5kb3dN YXNrLCAyLCAwKQogICAgaWYgb3B0aW9ucy5kZWJ1ZzoKICAgICAgd2luLm9yZGVyRnJvbnRSZWdh cmRsZXNzKCkKICAgICMgY3JlYXRlIGEgd2VidmlldyBvYmplY3QKICAgIHdlYnZpZXcgPSBXZWJL aXQuV2ViVmlldy5hbGxvYygpCiAgICB3ZWJ2aWV3LmluaXRXaXRoRnJhbWVfKHJlY3QpCiAgICAj IHR1cm4gb2ZmIHNjcm9sbGluZyBzbyB0aGUgY29udGVudCBpcyBhY3R1YWxseSB4IHdpZGUgYW5k IG5vdCB4LTE1CiAgICB3ZWJ2aWV3Lm1haW5GcmFtZSgpLmZyYW1lVmlldygpLnNldEFsbG93c1Nj cm9sbGluZ18ob2JqYy5OTykKCiAgICB3ZWJ2aWV3LnNldFByZWZlcmVuY2VzSWRlbnRpZmllcl8o J3dlYmtpdDJwbmcnKQogICAgd2Vidmlldy5wcmVmZXJlbmNlcygpLnNldExvYWRzSW1hZ2VzQXV0 b21hdGljYWxseV8obm90IG9wdGlvbnMubm9pbWFnZXMpCgogICAgIyBhZGQgdGhlIHdlYnZpZXcg dG8gdGhlIHdpbmRvdwogICAgd2luLnNldENvbnRlbnRWaWV3Xyh3ZWJ2aWV3KQogICAgCiAgICAj IGNyZWF0ZSBhIExvYWREZWxlZ2F0ZQogICAgbG9hZGRlbGVnYXRlID0gV2Via2l0TG9hZC5hbGxv YygpLmluaXQoKQogICAgbG9hZGRlbGVnYXRlLm9wdGlvbnMgPSBvcHRpb25zCiAgICBsb2FkZGVs ZWdhdGUudXJscyA9IGFyZ3MKICAgIHdlYnZpZXcuc2V0RnJhbWVMb2FkRGVsZWdhdGVfKGxvYWRk ZWxlZ2F0ZSkKICAgIAogICAgYXBwLnJ1bigpICAgIAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9f JyA6IG1haW4oKQoKCkJlc3QsCkphbWVzCgotLSAKaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFp bG1hbi9saXN0aW5mby9weXRob24tbGlzdAo=