Tk Menubutton Enhancement: -compound option for menubuttonTodd Helfter$Revision: 1.5 $
This TIP describes how to change the menubutton in the Tk core to add a -compound option to display both text and images. This behavior already exists in the button widget.
In order to have a menubutton with both text and images, this change is needed. This change facilitates the use of an image for the menubutton face with text on top. Like the button widget, the -compound option will accept these values: none, center, left, right, top, bottom.
This TIP proposes to change the internals of the menubutton.
The changes necessary to accomplish this are:
Extend the structure TkMenuButton in generic/tkMenubutton.h with a new field of type int to hold the value of the compound setting.Add an enumeration of valid -compound options in generic/tkMenubutton.h.Modify generic/tkMenuButton.c and unix/tkUnixMenubu.c in such a way to process this new option. Note: The windows port of Tk uses the unix/tkUnixMenubu.c file. So this change is portable to both Unix and windows.Change tests/menubut.test so that the test for configure options checks for 33 instead of the current 32.Change doc/menubutton.n to show the new option under widget specific options.
This document has been placed in the public domain.
SW5kZXg6IGRvYy9tZW51YnV0dG9uLm4=PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ==UkNTIGZpbGU6IC9jdnNyb290L3RrL2RvYy9tZW51YnV0dG9uLm4sdg==cmV0cmlldmluZyByZXZpc2lvbiAxLjM=ZGlmZiAtYyAtcjEuMyBtZW51YnV0dG9uLm4=KioqIG1lbnVidXR0b24ubgkyMDAwLzA4LzI1IDA2OjU4OjMyCTEuMw==LS0tIG1lbnVidXR0b24ubgkyMDAwLzExLzE2IDE0OjM3OjE1KioqKioqKioqKioqKioqKioqIDI2LDMxICoqKio=LS0tIDI2LDM5IC0tLS0=ICBcLWRpc2FibGVkZm9yZWdyb3VuZAlcLXBhZHg=ICAuU0U=ICAuU0ggIldJREdFVC1TUEVDSUZJQyBPUFRJT05TIg==KyAuT1AgXC1jb21wb3VuZCBjb21wb3VuZCBDb21wb3VuZA==KyBTcGVjaWZpZXMgd2hldGhlciB0aGUgbWVudWJ1dHRvbiBzaG91bGQgZGlzcGxheSBib3RoIGFuIGltYWdlIGFuZCB0ZXh0LA==KyBhbmQgaWYgc28sIHdoZXJlIHRoZSBpbWFnZSBzaG91bGQgYmUgcGxhY2VkIHJlbGF0aXZlIHRvIHRoZSB0ZXh0Lg==KyBWYWxpZCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGFyZSBcZkJib3R0b21cZlIsIFxmQmNlbnRlclxmUiw=KyBcZkJsZWZ0XGZSLCBcZkJub25lXGZSLCBcZkJyaWdodFxmUiBhbmQgXGZCdG9wXGZSLiAgVGhlIGRlZmF1bHQgdmFsdWU=KyBpcyBcZkJub25lXGZSLCBtZWFuaW5nIHRoYXQgdGhlIG1lbnVidXR0b24gd2lsbCBkaXNwbGF5IGVpdGhlciBhbiBpbWFnZSBvcg==KyB0ZXh0LCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlcyBvZiB0aGUgXGZCXC1pbWFnZVxmUiBhbmQgXGZCXC1iaXRtYXBcZlI=KyBvcHRpb25zLg==ICAuVlM=ICAuT1AgXC1kaXJlY3Rpb24gZGlyZWN0aW9uIEhlaWdodA==ICBTcGVjaWZpZXMgd2hlcmUgdGhlIG1lbnUgaXMgZ29pbmcgdG8gYmUgcG9wdXAgdXAuIFxmQmFib3ZlXGZSIHRyaWVzIHRvSW5kZXg6IGdlbmVyaWMvdGtNZW51YnV0dG9uLmM=PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ==UkNTIGZpbGU6IC9jdnNyb290L3RrL2dlbmVyaWMvdGtNZW51YnV0dG9uLmMsdg==cmV0cmlldmluZyByZXZpc2lvbiAxLjQ=ZGlmZiAtYyAtcjEuNCB0a01lbnVidXR0b24uYw==KioqIHRrTWVudWJ1dHRvbi5jCTE5OTkvMDQvMjQgMDE6NTA6NDkJMS40LS0tIHRrTWVudWJ1dHRvbi5jCTIwMDAvMTEvMTYgMTQ6Mzc6MTY=KioqKioqKioqKioqKioqKioqIDM3LDQyICoqKio=LS0tIDM3LDUxIC0tLS0=ICB9Ow==ICA=ICAvKg==KyAgKiBUaGUgZm9sbG93aW5nIHRhYmxlIGRlZmluZXMgdGhlIGxlZ2FsIHZhbHVlcyBmb3IgdGhlIC1jb21wb3VuZCBvcHRpb24uKyAgKiBJdCBpcyB1c2VkIHdpdGggdGhlICJlbnVtIGNvbXBvdW5kIiBkZWNsYXJhdGlvbiBpbiB0a0J1dHRvbi5oKyAgKi8=KyA=KyBzdGF0aWMgY2hhciAqY29tcG91bmRTdHJpbmdzW10gPSB7KyAgICAgImJvdHRvbSIsICJjZW50ZXIiLCAibGVmdCIsICJub25lIiwgInJpZ2h0IiwgInRvcCIsIChjaGFyICopIE5VTEw=KyB9Ow==KyA=KyAvKg==ICAgKiBJbmZvcm1hdGlvbiB1c2VkIGZvciBwYXJzaW5nIGNvbmZpZ3VyYXRpb24gc3BlY3M6ICAgKi8=ICA=KioqKioqKioqKioqKioqKioqIDExMywxMTggKioqKg==LS0tIDEyMiwxMzAgLS0tLQ==ICAgICAge1RLX09QVElPTl9SRUxJRUYsICItcmVsaWVmIiwgInJlbGllZiIsICJSZWxpZWYiLA==CSBERUZfTUVOVUJVVFRPTl9SRUxJRUYsIC0xLCBUa19PZmZzZXQoVGtNZW51QnV0dG9uLCByZWxpZWYpLCA=CSAgIDAsIDAsIDB9LA==KyAgICAge1RLX09QVElPTl9TVFJJTkdfVEFCTEUsICItY29tcG91bmQiLCAiY29tcG91bmQiLCAiQ29tcG91bmQiLA==KyAgICAgICAgICBERUZfQlVUVE9OX0NPTVBPVU5ELCAtMSwgVGtfT2Zmc2V0KFRrTWVudUJ1dHRvbiwgY29tcG91bmQpLCAwLA==KyAgICAgICAgICAoQ2xpZW50RGF0YSkgY29tcG91bmRTdHJpbmdzLCAwfSw=ICAgICAge1RLX09QVElPTl9TVFJJTkdfVEFCTEUsICItc3RhdGUiLCAic3RhdGUiLCAiU3RhdGUiLA==CSBERUZfTUVOVUJVVFRPTl9TVEFURSwgLTEsIFRrX09mZnNldChUa01lbnVCdXR0b24sIHN0YXRlKSw=CSAwLCAoQ2xpZW50RGF0YSkgc3RhdGVTdHJpbmdzLCAwfSw=SW5kZXg6IGdlbmVyaWMvdGtNZW51YnV0dG9uLmg=PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ==UkNTIGZpbGU6IC9jdnNyb290L3RrL2dlbmVyaWMvdGtNZW51YnV0dG9uLmgsdg==cmV0cmlldmluZyByZXZpc2lvbiAxLjU=ZGlmZiAtYyAtcjEuNSB0a01lbnVidXR0b24uaA==KioqIHRrTWVudWJ1dHRvbi5oCTE5OTkvMDQvMTYgMDE6NTE6MTkJMS41LS0tIHRrTWVudWJ1dHRvbi5oCTIwMDAvMTEvMTYgMTQ6Mzc6MTY=KioqKioqKioqKioqKioqKioqIDI1LDMwICoqKio=LS0tIDI1LDM5IC0tLS0=ICAjZW5kaWY=ICA=ICAvKg==KyAgKiBMZWdhbCB2YWx1ZXMgZm9yIHRoZSAiY29tcG91bmQiIGZpZWxkIG9mIFRrQnV0dG9uIHJlY29yZHMuKyAgKi8=KyA=KyBlbnVtIGNvbXBvdW5kIHs=KyAgICAgQ09NUE9VTkRfQk9UVE9NLCBDT01QT1VORF9DRU5URVIsIENPTVBPVU5EX0xFRlQsIENPTVBPVU5EX05PTkUsKyAgICAgICAgIENPTVBPVU5EX1JJR0hULCBDT01QT1VORF9UT1A=KyB9Ow==KyA=KyAvKg==ICAgKiBMZWdhbCB2YWx1ZXMgZm9yIHRoZSAib3JpZW50IiBmaWVsZCBvZiBUa01lbnVidXR0b24gcmVjb3Jkcy4=ICAgKi8=ICA=KioqKioqKioqKioqKioqKioqIDE2MSwxNjYgKioqKg==LS0tIDE3MCwxNzkgLS0tLQ==ICAgICAgLyo=CSogTWlzY2VsbGFuZW91cyBpbmZvcm1hdGlvbjo=CSovKyA=KyAgICAgaW50IGNvbXBvdW5kOyAgICAgICAgICAgICAgIC8qIFZhbHVlIG9mIC1jb21wb3VuZCBvcHRpb247IHNwZWNpZmllcyB3aGV0aGVyKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBidXR0b24gc2hvdWxkIHNob3cgYm90aCBhbiBpbWFnZSBhbmQ=KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRleHQsIGFuZCwgaWYgc28sIGhvdy4gKi8=ICA=ICAgICAgZW51bSBkaXJlY3Rpb24gZGlyZWN0aW9uOwkvKiBEaXJlY3Rpb24gZm9yIHdoZXJlIHRvIHBvcCB0aGUgbWVudS4=CQkJCSAgKiBWYWxpZCBkaXJlY3Rpb25zIGFyZSAiYWJvdmUiLCAiYmVsb3ciLA==SW5kZXg6IHRlc3RzL21lbnVidXQudGVzdA==PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ==UkNTIGZpbGU6IC9jdnNyb290L3RrL3Rlc3RzL21lbnVidXQudGVzdCx2cmV0cmlldmluZyByZXZpc2lvbiAxLjU=ZGlmZiAtYyAtcjEuNSBtZW51YnV0LnRlc3Q=KioqIG1lbnVidXQudGVzdAkxOTk5LzA0LzIxIDIxOjUzOjI5CTEuNQ==LS0tIG1lbnVidXQudGVzdAkyMDAwLzExLzE2IDE0OjM3OjE4KioqKioqKioqKioqKioqKioqIDEzOCwxNDQgKioqKg==ICB9IHszfQ==ICB0ZXN0IG1lbnVidXR0b24tMy43IHtCdXR0b25XaWRnZXRDbWQgcHJvY2VkdXJlLCAiY29uZmlndXJlIiBvcHRpb259IHs=ICAgICAgbGxlbmd0aCBbLm1iIGNvbmZpZ3VyZV0=ISB9IHszMn0=ICB0ZXN0IG1lbnVidXR0b24tMy44IHtCdXR0b25XaWRnZXRDbWQgcHJvY2VkdXJlLCAiY29uZmlndXJlIiBvcHRpb259IHs=ICAgICAgbGlzdCBbY2F0Y2ggey5tYiBjb25maWd1cmUgLWdvcnB9IG1zZ10gJG1zZw==ICB9IHsxIHt1bmtub3duIG9wdGlvbiAiLWdvcnAifX0=LS0tIDEzOCwxNDQgLS0tLQ==ICB9IHszfQ==ICB0ZXN0IG1lbnVidXR0b24tMy43IHtCdXR0b25XaWRnZXRDbWQgcHJvY2VkdXJlLCAiY29uZmlndXJlIiBvcHRpb259IHs=ICAgICAgbGxlbmd0aCBbLm1iIGNvbmZpZ3VyZV0=ISB9IHszM30=ICB0ZXN0IG1lbnVidXR0b24tMy44IHtCdXR0b25XaWRnZXRDbWQgcHJvY2VkdXJlLCAiY29uZmlndXJlIiBvcHRpb259IHs=ICAgICAgbGlzdCBbY2F0Y2ggey5tYiBjb25maWd1cmUgLWdvcnB9IG1zZ10gJG1zZw==ICB9IHsxIHt1bmtub3duIG9wdGlvbiAiLWdvcnAifX0=SW5kZXg6IHVuaXgvdGtVbml4TWVudWJ1LmM=PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ==UkNTIGZpbGU6IC9jdnNyb290L3RrL3VuaXgvdGtVbml4TWVudWJ1LmMsdg==cmV0cmlldmluZyByZXZpc2lvbiAxLjQ=ZGlmZiAtYyAtcjEuNCB0a1VuaXhNZW51YnUuYw==KioqIHRrVW5peE1lbnVidS5jCTE5OTkvMDkvMjEgMDY6NDM6MDEJMS40LS0tIHRrVW5peE1lbnVidS5jCTIwMDAvMTEvMTYgMTQ6Mzc6MTg=KioqKioqKioqKioqKioqKioqIDc1LDgzICoqKio=ICAgICAgUGl4bWFwIHBpeG1hcDs=ICAgICAgaW50IHggPSAwOwkJCS8qIEluaXRpYWxpemF0aW9uIG5lZWRlZCBvbmx5IHRvIHN0b3A=CQkJCSAgKiBjb21waWxlciB3YXJuaW5nLiAqLw==ISAgICAgaW50IHk7ICAgICAgcmVnaXN0ZXIgVGtfV2luZG93IHRrd2luID0gbWJQdHItPnRrd2luOw==ISAgICAgaW50IHdpZHRoLCBoZWlnaHQ7ICA=ICAgICAgbWJQdHItPmZsYWdzICY9IH5SRURSQVdfUEVORElORzs=ICAgICAgaWYgKChtYlB0ci0+dGt3aW4gPT0gTlVMTCkgfHwgIVRrX0lzTWFwcGVkKHRrd2luKSkgew==LS0tIDc1LDg1IC0tLS0=ICAgICAgUGl4bWFwIHBpeG1hcDs=ICAgICAgaW50IHggPSAwOwkJCS8qIEluaXRpYWxpemF0aW9uIG5lZWRlZCBvbmx5IHRvIHN0b3A=CQkJCSAgKiBjb21waWxlciB3YXJuaW5nLiAqLw==ISAgICAgaW50IHkgPSAwOw==ICAgICAgcmVnaXN0ZXIgVGtfV2luZG93IHRrd2luID0gbWJQdHItPnRrd2luOw==ISAgICAgaW50IHdpZHRoLCBoZWlnaHQsIGZ1bGxXaWR0aCwgZnVsbEhlaWdodDs=ISAgICAgaW50IGltYWdlWE9mZnNldCwgaW1hZ2VZT2Zmc2V0LCB0ZXh0WE9mZnNldCwgdGV4dFlPZmZzZXQ7ISAgICAgaW50IGhhdmVJbWFnZSA9IDAsIGhhdmVUZXh0ID0gMDs=ICA=ICAgICAgbWJQdHItPmZsYWdzICY9IH5SRURSQVdfUEVORElORzs=ICAgICAgaWYgKChtYlB0ci0+dGt3aW4gPT0gTlVMTCkgfHwgIVRrX0lzTWFwcGVkKHRrd2luKSkgew==KioqKioqKioqKioqKioqKioqIDk2LDEwMSAqKioqLS0tIDk4LDExMiAtLS0tCSBib3JkZXIgPSBtYlB0ci0+bm9ybWFsQm9yZGVyOw==ICAgICAgfQ==ICA=KyAgICAgaWYgKG1iUHRyLT5pbWFnZSAhPSBOb25lKSB7KyAJVGtfU2l6ZU9mSW1hZ2UobWJQdHItPmltYWdlLCAmd2lkdGgsICZoZWlnaHQpOw==KyAJaGF2ZUltYWdlID0gMTs=KyAgICAgfSBlbHNlIGlmIChtYlB0ci0+Yml0bWFwICE9IE5vbmUpIHs=KyAJVGtfU2l6ZU9mQml0bWFwKG1iUHRyLT5kaXNwbGF5LCBtYlB0ci0+Yml0bWFwLCAmd2lkdGgsICZoZWlnaHQpOw==KyAJaGF2ZUltYWdlID0gMTs=KyAgICAgfQ==KyAgICAgaGF2ZVRleHQgPSAobWJQdHItPnRleHRXaWR0aCAhPSAwICYmIG1iUHRyLT50ZXh0SGVpZ2h0ICE9IDApOw==KyA=ICAgICAgLyo=CSogSW4gb3JkZXIgdG8gYXZvaWQgc2NyZWVuIGZsYXNoZXMsIHRoaXMgcHJvY2VkdXJlIHJlZHJhd3M=CSogdGhlIG1lbnUgYnV0dG9uIGluIGEgcGl4bWFwLCB0aGVuIGNvcGllcyB0aGUgcGl4bWFwIHRvIHRoZQ==KioqKioqKioqKioqKioqKioqIDEwNywxNDEgKioqKg==CSAgICAgVGtfV2lkdGgodGt3aW4pLCBUa19IZWlnaHQodGt3aW4pLCBUa19EZXB0aCh0a3dpbikpOw==ICAgICAgVGtfRmlsbDNEUmVjdGFuZ2xlKHRrd2luLCBwaXhtYXAsIGJvcmRlciwgMCwgMCwgVGtfV2lkdGgodGt3aW4pLA==CSAgICAgVGtfSGVpZ2h0KHRrd2luKSwgMCwgVEtfUkVMSUVGX0ZMQVQpOw==LSA=LSAgICAgLyo=LSAgICAgICogRGlzcGxheSBpbWFnZSBvciBiaXRtYXAgb3IgdGV4dCBmb3IgYnV0dG9uLg==LSAgICAgICovICA=ISAgICAgaWYgKG1iUHRyLT5pbWFnZSAhPSBOb25lKSB7ISAJVGtfU2l6ZU9mSW1hZ2UobWJQdHItPmltYWdlLCAmd2lkdGgsICZoZWlnaHQpOw==ISA=ISAJaW1hZ2VPckJpdG1hcDo=ISAJVGtDb21wdXRlQW5jaG9yKG1iUHRyLT5hbmNob3IsIHRrd2luLCAwLCAwLCA=ISAJCXdpZHRoICsgbWJQdHItPmluZGljYXRvcldpZHRoLCBoZWlnaHQsICZ4LCAmeSk7ISAJaWYgKG1iUHRyLT5pbWFnZSAhPSBOVUxMKSB7ISAJICAgIFRrX1JlZHJhd0ltYWdlKG1iUHRyLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCwgcGl4bWFwLA==ISAJCSAgICB4LCB5KTs=ISAJfSBlbHNlIHs=ISAJICAgIFhDb3B5UGxhbmUobWJQdHItPmRpc3BsYXksIG1iUHRyLT5iaXRtYXAsIHBpeG1hcCw=ISAJCSAgICBnYywgMCwgMCwgKHVuc2lnbmVkKSB3aWR0aCwgKHVuc2lnbmVkKSBoZWlnaHQsIHgsIHksIDEpOw==ISAJfQ==ISAgICAgfSBlbHNlIGlmIChtYlB0ci0+Yml0bWFwICE9IE5vbmUpIHs=ISAJVGtfU2l6ZU9mQml0bWFwKG1iUHRyLT5kaXNwbGF5LCBtYlB0ci0+Yml0bWFwLCAmd2lkdGgsICZoZWlnaHQpOw==ISAJZ290byBpbWFnZU9yQml0bWFwOw==ICAgICAgfSBlbHNlIHs=ISAJVGtDb21wdXRlQW5jaG9yKG1iUHRyLT5hbmNob3IsIHRrd2luLCBtYlB0ci0+cGFkWCwgbWJQdHItPnBhZFksISAJCW1iUHRyLT50ZXh0V2lkdGggKyBtYlB0ci0+aW5kaWNhdG9yV2lkdGgsISAJCW1iUHRyLT50ZXh0SGVpZ2h0LCAmeCwgJnkpOw==ISAJVGtfRHJhd1RleHRMYXlvdXQobWJQdHItPmRpc3BsYXksIHBpeG1hcCwgZ2MsIG1iUHRyLT50ZXh0TGF5b3V0LCB4LCB5LA==ISAJCTAsIC0xKTs=ISAJVGtfVW5kZXJsaW5lVGV4dExheW91dChtYlB0ci0+ZGlzcGxheSwgcGl4bWFwLCBnYywgbWJQdHItPnRleHRMYXlvdXQsISAJCXgsIHksIG1iUHRyLT51bmRlcmxpbmUpOw==ICAgICAgfQ==ICA=ICAgICAgLyo=LS0tIDExOCwyMjMgLS0tLQ==CSAgICAgVGtfV2lkdGgodGt3aW4pLCBUa19IZWlnaHQodGt3aW4pLCBUa19EZXB0aCh0a3dpbikpOw==ICAgICAgVGtfRmlsbDNEUmVjdGFuZ2xlKHRrd2luLCBwaXhtYXAsIGJvcmRlciwgMCwgMCwgVGtfV2lkdGgodGt3aW4pLA==CSAgICAgVGtfSGVpZ2h0KHRrd2luKSwgMCwgVEtfUkVMSUVGX0ZMQVQpOw==ICA=ISAgICAgaW1hZ2VYT2Zmc2V0ID0gMDs=ISAgICAgaW1hZ2VZT2Zmc2V0ID0gMDs=ISAgICAgdGV4dFhPZmZzZXQgPSAwOw==ISAgICAgdGV4dFlPZmZzZXQgPSAwOw==ISAgICAgZnVsbFdpZHRoID0gMDs=ISAgICAgZnVsbEhlaWdodCA9IDA7ISA=ISAgICAgaWYgKG1iUHRyLT5jb21wb3VuZCAhPSBDT01QT1VORF9OT05FICYmIGhhdmVJbWFnZSAmJiBoYXZlVGV4dCkgew==ISA=ISAgICAgICAgIHN3aXRjaCAoKGVudW0gY29tcG91bmQpIG1iUHRyLT5jb21wb3VuZCkgew==ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX1RPUDo=ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX0JPVFRPTTogew==ISAgICAgICAgICAgICAgICAgLyogSW1hZ2UgaXMgYWJvdmUgb3IgYmVsb3cgdGV4dCAqLw==ISAgICAgICAgICAgICAgICAgaWYgKG1iUHRyLT5jb21wb3VuZCA9PSBDT01QT1VORF9UT1ApIHs=ISAgICAgICAgICAgICAgICAgICAgIHRleHRZT2Zmc2V0ID0gaGVpZ2h0ICsgbWJQdHItPnBhZFk7ISAgICAgICAgICAgICAgICAgfSBlbHNlIHs=ISAgICAgICAgICAgICAgICAgICAgIGltYWdlWU9mZnNldCA9IG1iUHRyLT50ZXh0SGVpZ2h0ICsgbWJQdHItPnBhZFk7ISAgICAgICAgICAgICAgICAgfQ==ISAgICAgICAgICAgICAgICAgZnVsbEhlaWdodCA9IGhlaWdodCArIG1iUHRyLT50ZXh0SGVpZ2h0ICsgbWJQdHItPnBhZFk7ISAgICAgICAgICAgICAgICAgZnVsbFdpZHRoID0gKHdpZHRoID4gbWJQdHItPnRleHRXaWR0aCA/IHdpZHRoIDo=ISAgICAgICAgICAgICAgICAgICAgICAgICBtYlB0ci0+dGV4dFdpZHRoKTs=ISAgICAgICAgICAgICAgICAgdGV4dFhPZmZzZXQgPSAoZnVsbFdpZHRoIC0gbWJQdHItPnRleHRXaWR0aCkvMjs=ISAgICAgICAgICAgICAgICAgaW1hZ2VYT2Zmc2V0ID0gKGZ1bGxXaWR0aCAtIHdpZHRoKS8yOw==ISAgICAgICAgICAgICAgICAgYnJlYWs7ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX0xFRlQ6ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX1JJR0hUOiB7ISAgICAgICAgICAgICAgICAgLyogSW1hZ2UgaXMgbGVmdCBvciByaWdodCBvZiB0ZXh0ICovISAgICAgICAgICAgICAgICAgaWYgKG1iUHRyLT5jb21wb3VuZCA9PSBDT01QT1VORF9MRUZUKSB7ISAgICAgICAgICAgICAgICAgICAgIHRleHRYT2Zmc2V0ID0gd2lkdGggKyBtYlB0ci0+cGFkWDs=ISAgICAgICAgICAgICAgICAgfSBlbHNlIHs=ISAgICAgICAgICAgICAgICAgICAgIGltYWdlWE9mZnNldCA9IG1iUHRyLT50ZXh0V2lkdGggKyBtYlB0ci0+cGFkWDs=ISAgICAgICAgICAgICAgICAgfQ==ISAgICAgICAgICAgICAgICAgZnVsbFdpZHRoID0gbWJQdHItPnRleHRXaWR0aCArIG1iUHRyLT5wYWRYICsgd2lkdGg7ISAgICAgICAgICAgICAgICAgZnVsbEhlaWdodCA9IChoZWlnaHQgPiBtYlB0ci0+dGV4dEhlaWdodCA/IGhlaWdodCA6ISAgICAgICAgICAgICAgICAgICAgICAgICBtYlB0ci0+dGV4dEhlaWdodCk7ISAgICAgICAgICAgICAgICAgdGV4dFlPZmZzZXQgPSAoZnVsbEhlaWdodCAtIG1iUHRyLT50ZXh0SGVpZ2h0KS8yOw==ISAgICAgICAgICAgICAgICAgaW1hZ2VZT2Zmc2V0ID0gKGZ1bGxIZWlnaHQgLSBoZWlnaHQpLzI7ISAgICAgICAgICAgICAgICAgYnJlYWs7ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX0NFTlRFUjogew==ISAgICAgICAgICAgICAgICAgLyogSW1hZ2UgYW5kIHRleHQgYXJlIHN1cGVyaW1wb3NlZCAqLw==ISAgICAgICAgICAgICAgICAgZnVsbFdpZHRoID0gKHdpZHRoID4gbWJQdHItPnRleHRXaWR0aCA/IHdpZHRoIDo=ISAgICAgICAgICAgICAgICAgICAgICAgICBtYlB0ci0+dGV4dFdpZHRoKTs=ISAgICAgICAgICAgICAgICAgZnVsbEhlaWdodCA9IChoZWlnaHQgPiBtYlB0ci0+dGV4dEhlaWdodCA/IGhlaWdodCA6ISAgICAgICAgICAgICAgICAgICAgICAgICBtYlB0ci0+dGV4dEhlaWdodCk7ISAgICAgICAgICAgICAgICAgdGV4dFhPZmZzZXQgPSAoZnVsbFdpZHRoIC0gbWJQdHItPnRleHRXaWR0aCkvMjs=ISAgICAgICAgICAgICAgICAgaW1hZ2VYT2Zmc2V0ID0gKGZ1bGxXaWR0aCAtIHdpZHRoKS8yOw==ISAgICAgICAgICAgICAgICAgdGV4dFlPZmZzZXQgPSAoZnVsbEhlaWdodCAtIG1iUHRyLT50ZXh0SGVpZ2h0KS8yOw==ISAgICAgICAgICAgICAgICAgaW1hZ2VZT2Zmc2V0ID0gKGZ1bGxIZWlnaHQgLSBoZWlnaHQpLzI7ISAgICAgICAgICAgICAgICAgYnJlYWs7ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX05PTkU6IHticmVhazt9ISAgICAgICAgIH0=ISA=ISAgICAgICAgIFRrQ29tcHV0ZUFuY2hvcihtYlB0ci0+YW5jaG9yLCB0a3dpbiwgMCwgMCw=ISAgICAgICAgICAgICAgICAgbWJQdHItPmluZGljYXRvcldpZHRoICsgZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LA==ISAJCSZ4LCAmeSk7ISA=ISAgICAgICAgIGlmIChtYlB0ci0+aW1hZ2UgIT0gTlVMTCkgew==ISAgICAgICAgICAgICBUa19SZWRyYXdJbWFnZShtYlB0ci0+aW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIHBpeG1hcCw=ISAgICAgICAgICAgICAgICAgICAgIHggKyBpbWFnZVhPZmZzZXQsIHkgKyBpbWFnZVlPZmZzZXQpOw==ISAgICAgICAgIH0=ISAgICAgICAgIGlmIChtYlB0ci0+Yml0bWFwICE9IE5vbmUpIHs=ISAgICAgICAgICAgICBYQ29weVBsYW5lKG1iUHRyLT5kaXNwbGF5LCBtYlB0ci0+Yml0bWFwLCBwaXhtYXAsISAgICAgICAgICAgICAgICAgICAgIGdjLCAwLCAwLCAodW5zaWduZWQpIHdpZHRoLCAodW5zaWduZWQpIGhlaWdodCwgISAJCSAgICB4ICsgaW1hZ2VYT2Zmc2V0LCB5ICsgaW1hZ2VZT2Zmc2V0LCAxKTs=ISAgICAgICAgIH0=ISAgICAgICAgIGlmIChoYXZlVGV4dCkgew==ISAgICAgICAgICAgICBUa19EcmF3VGV4dExheW91dChtYlB0ci0+ZGlzcGxheSwgcGl4bWFwLCBnYywgbWJQdHItPnRleHRMYXlvdXQsIA==ISAJCSAgICB4ICArIHRleHRYT2Zmc2V0LCB5ICsgdGV4dFlPZmZzZXQgLA==ISAgICAgICAgICAgICAgICAgICAgIDAsIC0xKTs=ISAgICAgICAgICAgICBUa19VbmRlcmxpbmVUZXh0TGF5b3V0KG1iUHRyLT5kaXNwbGF5LCBwaXhtYXAsIGdjLCA=ISAJCSAgICBtYlB0ci0+dGV4dExheW91dCwgeCArIHRleHRYT2Zmc2V0LCB5ICsgdGV4dFlPZmZzZXQgLA==ISAJCSAgICBtYlB0ci0+dW5kZXJsaW5lKTs=ISAgICAgICAgIH0=ICAgICAgfSBlbHNlIHs=ISAgICAgICAgaWYgKG1iUHRyLT5pbWFnZSAhPSBOVUxMKSB7ISAgICAgICAgICAgIFRrQ29tcHV0ZUFuY2hvcihtYlB0ci0+YW5jaG9yLCB0a3dpbiwgMCwgMCw=ISAgICAgICAgICAgICAgICAgICAgd2lkdGggKyBtYlB0ci0+aW5kaWNhdG9yV2lkdGgsIGhlaWdodCwgJngsICZ5KTs=ISAgICAgICAgICAgIFRrX1JlZHJhd0ltYWdlKG1iUHRyLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCwgcGl4bWFwLA==ISAgICAgICAgICAgICAgICAgICAgeCArIGltYWdlWE9mZnNldCwgeSArIGltYWdlWU9mZnNldCk7ISAgICAgICAgfSBlbHNlIGlmIChtYlB0ci0+Yml0bWFwICE9IE5vbmUpIHs=ISAgICAgICAgICAgIFRrQ29tcHV0ZUFuY2hvcihtYlB0ci0+YW5jaG9yLCB0a3dpbiwgMCwgMCw=ISAgICAgICAgICAgICAgICAgICAgd2lkdGggKyBtYlB0ci0+aW5kaWNhdG9yV2lkdGgsIGhlaWdodCwgJngsICZ5KTs=ISAgICAgICAgICAgIFhDb3B5UGxhbmUobWJQdHItPmRpc3BsYXksIG1iUHRyLT5iaXRtYXAsIHBpeG1hcCw=ISAgICAgICAgICAgICAgICAgICAgZ2MsIDAsIDAsICh1bnNpZ25lZCkgd2lkdGgsICh1bnNpZ25lZCkgaGVpZ2h0LCA=ISAJCSAgIHggKyBpbWFnZVhPZmZzZXQsIHkgKyBpbWFnZVlPZmZzZXQsIDEpOw==ISAgICAgICAgfSBlbHNlIHs=ISAgICAgICAgICAgIFRrQ29tcHV0ZUFuY2hvcihtYlB0ci0+YW5jaG9yLCB0a3dpbiwgbWJQdHItPnBhZFgsIG1iUHRyLT5wYWRZLA==ISAgICAgICAgICAgICAgICAgICAgbWJQdHItPnRleHRXaWR0aCArIG1iUHRyLT5pbmRpY2F0b3JXaWR0aCw=ISAgICAgICAgICAgICAgICAgICAgbWJQdHItPnRleHRIZWlnaHQsICZ4LCAmeSk7ISAgICAgICAgICAgIFRrX0RyYXdUZXh0TGF5b3V0KG1iUHRyLT5kaXNwbGF5LCBwaXhtYXAsIGdjLCBtYlB0ci0+dGV4dExheW91dCwgISAJCSAgIHggICsgdGV4dFhPZmZzZXQsIHkgKyB0ZXh0WU9mZnNldCAsISAgICAgICAgICAgICAgICAgICAgMCwgLTEpOw==ISAgICAgICAgICAgIFRrX1VuZGVybGluZVRleHRMYXlvdXQobWJQdHItPmRpc3BsYXksIHBpeG1hcCwgZ2MsIA==ISAJCSAgIG1iUHRyLT50ZXh0TGF5b3V0LCB4ICsgdGV4dFhPZmZzZXQsIHkgKyB0ZXh0WU9mZnNldCAsISAJCSAgIG1iUHRyLT51bmRlcmxpbmUpOw==ISAgICAgICAgIH0=ICAgICAgfQ==ICA=ICAgICAgLyo=KioqKioqKioqKioqKioqKioqIDI1MiwzMDUgKioqKg==ICAgICAgVGtNZW51QnV0dG9uICptYlB0cjsJLyogV2lkZ2V0IHJlY29yZCBmb3IgbWVudSBidXR0b24uICovICB7ICAgICAgaW50IHdpZHRoLCBoZWlnaHQsIG1tLCBwaXhlbHM7ICA=ICAgICAgbWJQdHItPmluc2V0ID0gbWJQdHItPmhpZ2hsaWdodFdpZHRoICsgbWJQdHItPmJvcmRlcldpZHRoOw==ICAgICAgaWYgKG1iUHRyLT5pbWFnZSAhPSBOb25lKSB7CSBUa19TaXplT2ZJbWFnZShtYlB0ci0+aW1hZ2UsICZ3aWR0aCwgJmhlaWdodCk7ISAJaWYgKG1iUHRyLT53aWR0aCA+IDApIHs=ISAJICAgIHdpZHRoID0gbWJQdHItPndpZHRoOw==ISAJfQ==ISAJaWYgKG1iUHRyLT5oZWlnaHQgPiAwKSB7ISAJICAgIGhlaWdodCA9IG1iUHRyLT5oZWlnaHQ7ISAJfQ==ICAgICAgfSBlbHNlIGlmIChtYlB0ci0+Yml0bWFwICE9IE5vbmUpIHs=CSBUa19TaXplT2ZCaXRtYXAobWJQdHItPmRpc3BsYXksIG1iUHRyLT5iaXRtYXAsICZ3aWR0aCwgJmhlaWdodCk7ISAJaWYgKG1iUHRyLT53aWR0aCA+IDApIHs=ISAJICAgIHdpZHRoID0gbWJQdHItPndpZHRoOw==ISAJfQ==ISAJaWYgKG1iUHRyLT5oZWlnaHQgPiAwKSB7ISAJICAgIGhlaWdodCA9IG1iUHRyLT5oZWlnaHQ7ISAJfQ==ISAgICAgfSBlbHNlIHs=CSBUa19GcmVlVGV4dExheW91dChtYlB0ci0+dGV4dExheW91dCk7CSBtYlB0ci0+dGV4dExheW91dCA9IFRrX0NvbXB1dGVUZXh0TGF5b3V0KG1iUHRyLT50a2ZvbnQsIG1iUHRyLT50ZXh0LA==CQkgLTEsIG1iUHRyLT53cmFwTGVuZ3RoLCBtYlB0ci0+anVzdGlmeSwgMCwgJm1iUHRyLT50ZXh0V2lkdGgsCQkgJm1iUHRyLT50ZXh0SGVpZ2h0KTs=ISAJd2lkdGggPSBtYlB0ci0+dGV4dFdpZHRoOw==ISAJaGVpZ2h0ID0gbWJQdHItPnRleHRIZWlnaHQ7ISAJaWYgKG1iUHRyLT53aWR0aCA+IDApIHs=ISAJICAgIHdpZHRoID0gbWJQdHItPndpZHRoICogVGtfVGV4dFdpZHRoKG1iUHRyLT50a2ZvbnQsICIwIiwgMSk7ISAJfQ==ISAJaWYgKG1iUHRyLT5oZWlnaHQgPiAwKSB7ISAJICAgIFRrX0ZvbnRNZXRyaWNzIGZtOw==ICA=ISAJICAgIFRrX0dldEZvbnRNZXRyaWNzKG1iUHRyLT50a2ZvbnQsICZmbSk7ISAJICAgIGhlaWdodCA9IG1iUHRyLT5oZWlnaHQgKiBmbS5saW5lc3BhY2U7CSB9ISAJd2lkdGggKz0gMiptYlB0ci0+cGFkWDs=ISAJaGVpZ2h0ICs9IDIqbWJQdHItPnBhZFk7ICAgICAgfQ==ICA=ICAgICAgaWYgKG1iUHRyLT5pbmRpY2F0b3JPbikgew==ISAJbW0gPSBXaWR0aE1NT2ZTY3JlZW4oVGtfU2NyZWVuKG1iUHRyLT50a3dpbikpOw==ISAJcGl4ZWxzID0gV2lkdGhPZlNjcmVlbihUa19TY3JlZW4obWJQdHItPnRrd2luKSk7ISAJbWJQdHItPmluZGljYXRvckhlaWdodD0gKElORElDQVRPUl9IRUlHSFQgKiBwaXhlbHMpLygxMCptbSk7ISAJbWJQdHItPmluZGljYXRvcldpZHRoID0gKElORElDQVRPUl9XSURUSCAqIHBpeGVscykvKDEwKm1tKQ==ISAJCSsgMiptYlB0ci0+aW5kaWNhdG9ySGVpZ2h0Ow==ISAJd2lkdGggKz0gbWJQdHItPmluZGljYXRvcldpZHRoOw==ICAgICAgfSBlbHNlIHs=ISAJbWJQdHItPmluZGljYXRvckhlaWdodCA9IDA7ISAJbWJQdHItPmluZGljYXRvcldpZHRoID0gMDs=ICAgICAgfQ==ICA=ICAgICAgVGtfR2VvbWV0cnlSZXF1ZXN0KG1iUHRyLT50a3dpbiwgKGludCkgKHdpZHRoICsgMiptYlB0ci0+aW5zZXQpLA==LS0tIDMzNCw0NDYgLS0tLQ==ICAgICAgVGtNZW51QnV0dG9uICptYlB0cjsJLyogV2lkZ2V0IHJlY29yZCBmb3IgbWVudSBidXR0b24uICovICB7ICAgICAgaW50IHdpZHRoLCBoZWlnaHQsIG1tLCBwaXhlbHM7KyAgICAgaW50ICBhdmdXaWR0aCwgdHh0V2lkdGgsIHR4dEhlaWdodDs=KyAgICAgaW50IGhhdmVJbWFnZSA9IDAsIGhhdmVUZXh0ID0gMDs=KyAgICAgVGtfRm9udE1ldHJpY3MgZm07ICA=ICAgICAgbWJQdHItPmluc2V0ID0gbWJQdHItPmhpZ2hsaWdodFdpZHRoICsgbWJQdHItPmJvcmRlcldpZHRoOw==KyA=KyAgICAgd2lkdGggPSAwOw==KyAgICAgaGVpZ2h0ID0gMDs=KyAgICAgdHh0V2lkdGggPSAwOw==KyAgICAgdHh0SGVpZ2h0ID0gMDs=KyAgICAgYXZnV2lkdGggPSAwOw==KyA=ICAgICAgaWYgKG1iUHRyLT5pbWFnZSAhPSBOb25lKSB7CSBUa19TaXplT2ZJbWFnZShtYlB0ci0+aW1hZ2UsICZ3aWR0aCwgJmhlaWdodCk7ISAJaGF2ZUltYWdlID0gMTs=ICAgICAgfSBlbHNlIGlmIChtYlB0ci0+Yml0bWFwICE9IE5vbmUpIHs=CSBUa19TaXplT2ZCaXRtYXAobWJQdHItPmRpc3BsYXksIG1iUHRyLT5iaXRtYXAsICZ3aWR0aCwgJmhlaWdodCk7ISAJaGF2ZUltYWdlID0gMTs=ISAgICAgfQ==ISA=ISAgICAgaWYgKGhhdmVJbWFnZSA9PSAwIHx8IG1iUHRyLT5jb21wb3VuZCAhPSBDT01QT1VORF9OT05FKSB7CSBUa19GcmVlVGV4dExheW91dChtYlB0ci0+dGV4dExheW91dCk7KyA=CSBtYlB0ci0+dGV4dExheW91dCA9IFRrX0NvbXB1dGVUZXh0TGF5b3V0KG1iUHRyLT50a2ZvbnQsIG1iUHRyLT50ZXh0LA==CQkgLTEsIG1iUHRyLT53cmFwTGVuZ3RoLCBtYlB0ci0+anVzdGlmeSwgMCwgJm1iUHRyLT50ZXh0V2lkdGgsCQkgJm1iUHRyLT50ZXh0SGVpZ2h0KTs=ISAJdHh0V2lkdGggPSBtYlB0ci0+dGV4dFdpZHRoOw==ISAJdHh0SGVpZ2h0ID0gbWJQdHItPnRleHRIZWlnaHQ7ISAgICAgICAgIGF2Z1dpZHRoID0gVGtfVGV4dFdpZHRoKG1iUHRyLT50a2ZvbnQsICIwIiwgMSk7ISAgICAgICAgIFRrX0dldEZvbnRNZXRyaWNzKG1iUHRyLT50a2ZvbnQsICZmbSk7ISAgICAgICAgIGhhdmVUZXh0ID0gKHR4dFdpZHRoICE9IDAgJiYgdHh0SGVpZ2h0ICE9IDApOw==ISAgICAgfQ==ISA=ISAgICAgLyo=ISAgICAgICogSWYgdGhlIG1lbnVidXR0b24gaXMgY29tcG91bmQgKGllLCBpdCBzaG93cyBib3RoIGFuIGltYWdlIGFuZCB0ZXh0KSw=ISAgICAgICogdGhlIG5ldyBnZW9tZXRyeSBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBpbWFnZSBhbmQgdGV4dCBnZW9tZXRyeS4=ISAgICAgICogV2Ugb25seSBob25vciB0aGUgY29tcG91bmQgYml0IGlmIHRoZSBtZW51YnV0dG9uIGhhcyBib3RoIHRleHQgYW5kISAgICAgICogYW4gaW1hZ2UsIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IGlzIG5vdCByZWFsbHkgYSBjb21wb3VuZCBtZW51YnV0dG9uLg==ISAgICAgICovICA=ISAgICAgaWYgKG1iUHRyLT5jb21wb3VuZCAhPSBDT01QT1VORF9OT05FICYmIGhhdmVJbWFnZSAmJiBoYXZlVGV4dCkgew==ISAgICAgICAgIHN3aXRjaCAoKGVudW0gY29tcG91bmQpIG1iUHRyLT5jb21wb3VuZCkgew==ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX1RPUDo=ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX0JPVFRPTTogew==ISAgICAgICAgICAgICAgICAgLyogSW1hZ2UgaXMgYWJvdmUgb3IgYmVsb3cgdGV4dCAqLw==ISAgICAgICAgICAgICAgICAgaGVpZ2h0ICs9IHR4dEhlaWdodCArIG1iUHRyLT5wYWRZOw==ISAgICAgICAgICAgICAgICAgd2lkdGggPSAod2lkdGggPiB0eHRXaWR0aCA/IHdpZHRoIDogdHh0V2lkdGgpOw==ISAgICAgICAgICAgICAgICAgYnJlYWs7ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX0xFRlQ6ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX1JJR0hUOiB7ISAgICAgICAgICAgICAgICAgLyogSW1hZ2UgaXMgbGVmdCBvciByaWdodCBvZiB0ZXh0ICovISAgICAgICAgICAgICAgICAgd2lkdGggKz0gdHh0V2lkdGggKyBtYlB0ci0+cGFkWDs=ISAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gKGhlaWdodCA+IHR4dEhlaWdodCA/IGhlaWdodCA6IHR4dEhlaWdodCk7ISAgICAgICAgICAgICAgICAgYnJlYWs7ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX0NFTlRFUjogew==ISAgICAgICAgICAgICAgICAgLyogSW1hZ2UgYW5kIHRleHQgYXJlIHN1cGVyaW1wb3NlZCAqLw==ISAgICAgICAgICAgICAgICAgd2lkdGggPSAod2lkdGggPiB0eHRXaWR0aCA/IHdpZHRoIDogdHh0V2lkdGgpOw==ISAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gKGhlaWdodCA+IHR4dEhlaWdodCA/IGhlaWdodCA6IHR4dEhlaWdodCk7ISAgICAgICAgICAgICAgICAgYnJlYWs7ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBjYXNlIENPTVBPVU5EX05PTkU6IHticmVhazt9ISAgICAgICAgIH0=ISAgICAgICAgIGlmIChtYlB0ci0+d2lkdGggPiAwKSB7ISAgICAgICAgICAgICB3aWR0aCA9IG1iUHRyLT53aWR0aDs=ISAgICAgICAgIH0=ISAgICAgICAgIGlmIChtYlB0ci0+aGVpZ2h0ID4gMCkgew==ISAgICAgICAgICAgICBoZWlnaHQgPSBtYlB0ci0+aGVpZ2h0Ow==ISAgICAgICAgIH0=ISAgICAgICAgIHdpZHRoICs9IDIqbWJQdHItPnBhZFg7ISAgICAgICAgIGhlaWdodCArPSAyKm1iUHRyLT5wYWRZOw==ISAgICAgfSBlbHNlIHs=ISAJaWYgKGhhdmVJbWFnZSkgew==ISAgICAgICAgICAgICBpZiAobWJQdHItPndpZHRoID4gMCkgew==ISAgICAgICAgICAgICAgICAgd2lkdGggPSBtYlB0ci0+d2lkdGg7ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBpZiAobWJQdHItPmhlaWdodCA+IDApIHs=ISAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gbWJQdHItPmhlaWdodDs=ISAgICAgICAgICAgICB9ISAJfSBlbHNlIHs=ISAJICAgIHdpZHRoID0gdHh0V2lkdGg7ISAJICAgIGhlaWdodCA9IHR4dEhlaWdodDs=ISAgICAgICAgICAgICBpZiAobWJQdHItPndpZHRoID4gMCkgew==ISAgICAgICAgICAgICAgICAgd2lkdGggPSBtYlB0ci0+d2lkdGggKiBhdmdXaWR0aDs=ISAgICAgICAgICAgICB9ISAgICAgICAgICAgICBpZiAobWJQdHItPmhlaWdodCA+IDApIHs=ISAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gbWJQdHItPmhlaWdodCAqIGZtLmxpbmVzcGFjZTs=ISAgICAgICAgICAgICB9CSB9ISAgICAgfQ==ISA=ISAgICAgaWYgKCEgaGF2ZUltYWdlKSB7ISAgICAgICAgIHdpZHRoICs9IDIqbWJQdHItPnBhZFg7ISAgICAgICAgIGhlaWdodCArPSAyKm1iUHRyLT5wYWRZOw==ICAgICAgfQ==ICA=ICAgICAgaWYgKG1iUHRyLT5pbmRpY2F0b3JPbikgew==ISAgICAgICAgIG1tID0gV2lkdGhNTU9mU2NyZWVuKFRrX1NjcmVlbihtYlB0ci0+dGt3aW4pKTs=ISAgICAgICAgIHBpeGVscyA9IFdpZHRoT2ZTY3JlZW4oVGtfU2NyZWVuKG1iUHRyLT50a3dpbikpOw==ISAgICAgICAgIG1iUHRyLT5pbmRpY2F0b3JIZWlnaHQ9IChJTkRJQ0FUT1JfSEVJR0hUICogcGl4ZWxzKS8oMTAqbW0pOw==ISAgICAgICAgIG1iUHRyLT5pbmRpY2F0b3JXaWR0aCA9IChJTkRJQ0FUT1JfV0lEVEggKiBwaXhlbHMpLygxMCptbSk=ISAgICAgCSAgICArIDIqbWJQdHItPmluZGljYXRvckhlaWdodDs=ISAgICAgICAgIHdpZHRoICs9IG1iUHRyLT5pbmRpY2F0b3JXaWR0aDs=ICAgICAgfSBlbHNlIHs=ISAgICAgICAgIG1iUHRyLT5pbmRpY2F0b3JIZWlnaHQgPSAwOw==ISAgICAgICAgIG1iUHRyLT5pbmRpY2F0b3JXaWR0aCA9IDA7ICAgICAgfQ==ICA=ICAgICAgVGtfR2VvbWV0cnlSZXF1ZXN0KG1iUHRyLT50a3dpbiwgKGludCkgKHdpZHRoICsgMiptYlB0ci0+aW5zZXQpLA==