Go to main content

Textpattern CMS support forum

You are not logged in. Register | Login | Help

#1 2005-08-20 03:40:07

graumeister
Plugin Author
From: Ban Bang Por, Samui, Thailand
Registered: 2005-01-16
Posts: 167
Website

[plugin] [ORPHAN] glx_admin_image_resize

Notice: This thread is archived, this plugin is no longer supported but it can be copied from this page.

**********************************************************

Hi all, after mailing with Johan i took ownership of both plugins developed by him glx_admin_image_resize and glx_gravatar. He currently is out of time to maintain them and I use them, so why not?

At grauhirn.org you find version 2006.1 of the plugin with two small fixes in presentation of the form. Documentation and use of the plugin is still the same as described in this thread.

If you have any thought about new features, gimmicks and addons to the plugin please dont wait with suggestions as I am starting to work on a new version soon. This thread would be a good place ;)

todo:

  • handling of gif- and png-graphics
YToxMDp7czo0OiJuYW1lIjtzOjE1OiJnbHhfYWRtaW5faW1hZ2UiO3M6NjoiYXV0aG9yIjtzOjE1OiJkZXIgR3JhdU1laXN0ZXIiO3M6MTA6ImF1dGhvcl91cmkiO3M6NDc6Imh0dHA6Ly9ncmF1aGlybi5vcmcvcGF0dGVybnRleHQvZ2x4X2FkbWluX2ltYWdlIjtzOjc6InZlcnNpb24iO3M6NjoiMjAwNi4xIjtzOjExOiJkZXNjcmlwdGlvbiI7czo0NToiYWR2YW5jZWQgaW1hZ2UgZWRpdGluZyBhbmQgdGh1bWJuYWlsIGNyZWF0aW9uIjtzOjQ6ImhlbHAiO3M6NDkyNDoiPHA+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uZ2hve2JhY2tncm91bmQtY29sb3I6IzIyMjtjb2xvcjojY2NjO2ZvbnQtZmFtaWx5OlZlcmRhbmEsc2Fucy1zZXJpZjtmb250LXNpemU6MC44ZW07cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjE1cHggYXV0bztwYWRkaW5nOjEwcHg7dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOjc0MHB4O30uZ2hvIHB7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjojMjgyODI4O2JvcmRlcjoxcHggc29saWQgIzUxNTU1MTt9LmdobyBhOmxpbmssLmdobyBhOnZpc2l0ZWR7Y29sb3I6I2FhMDMwMzt0ZXh0LWRlY29yYXRpb246bm9uZTt9LmdobyBhOmhvdmVyLC5naG8gYTphY3RpdmV7Y29sb3I6I2FhMDMwMzt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO308L3N0eWxlPjxkaXYgY2xhc3M9ImdobyI+PHA+VGhpcyBpcyBhIFRleHRwYXR0ZXJuLXBsdWdpbiBieSA8YSBocmVmPSJodHRwOi8vZ3JhdWhpcm4ub3JnLyI+JiMzNjI2OyYjMzYzNzsmIzM2NDg7JiMzNjA3OyYjMzYzNDsmIzM2MjY7JiMzNjE3OyYjMzYyOTsmIzM1OTE7LiYjMzYyOTsmIzM1OTE7JiMzNTg4OyYjMzY2MDsmIzM1ODU7JiMzNjE5OzwvYT4uIElmIHlvdSBmaW5kIGEgYnVnIG9yIHRoaW5rIHRoZSBkb2N1bWVudGF0aW9uIGNvdWxkIGJlIGEgbGl0dGxlIGJpdCBtb3JlIGluIGRlcHRoIG9yIHVuZGVyc3RhbmRhYmxlLCA8YSBocmVmPSJodHRwOi8vZ3JhdWhpcm4ub3JnL2NvbnRhY3QvIj5wbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdGhlIGF1dGhvcjwvYT4uPC9wPjwvZGl2PjwvcD4KCgk8aDI+Z2x4X2FkbWluX2ltYWdlX3Jlc2l6ZTwvaDI+CgoJPHA+UmVzaXplIGltYWdlIGFuZCBjcmVhdGVzIGEgdGh1bWJuYWlsIG9uIHVwbG9hZC4gRGV2ZWxvcGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9qb2hhbi5nYWxheGVuLm5ldC8iPkpvaGFuIE5pbHNzb248L2E+IGFuZCBtYWludGFpbmVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9ncmF1aGlybi5vcmcvIj5kZXIgR3JhdU1laXN0ZXI8L2E+LjwvcD4KCgk8aDM+U2V0dGluZ3M8L2gzPgoKCTxwPllvdSBjYW4gY2hhbmdlIHRoZSBkZWZpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBsdWdpbmNvZGUgdG8gc3VpdCB5b3VyIG5lZWRzLjwvcD4KCgk8aDM+Q1NTPC9oMz4KCgk8cD5UaGlzIHBsdWdpbiBhbHNvIGNyZWF0ZXMgYSBzdHlsZXNoZWV0IG5hbWVkIGdseF9hZG1pbl9pbWFnZV9yZXNpemUsIHRoYXQgY2FuIGJlIGZvdW5kIHVuZGVyIHRoZSBzdHlsZSB0YWIuPC9wPgoKCTxwPkRlZmF1bHQgc3R5bGVzaGVldDwvcD4KCjxwcmU+PGNvZGU+bGFiZWwuaW5saW5lIHsKbWFyZ2luOiA1cHg7Cn0KbGFiZWwuYmxvY2sgewptYXJnaW46IDVweCA1cHggMCAwOwpkaXNwbGF5OiBibG9jazsKfQoucmVzaXplIHsKZmxvYXQ6IGxlZnQ7Cn0KLnJvdGF0ZSB7CmZsb2F0OiByaWdodDsKfQpociB7CmJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjREREREREOwpib3JkZXItdG9wOiBub25lOwpib3JkZXItcmlnaHQ6IG5vbmU7CmJvcmRlci1sZWZ0OiBub25lOwpoZWlnaHQ6IDFweDsKY2xlYXI6IGJvdGg7Cn08L2NvZGU+PC9wcmU+CgoJPGgzPlJlcXVpcmVtZW50czwvaDM+CgoJPHVsPgoJCTxsaT5UZXh0cGF0dGVybiA0LjAuMCs8L2xpPgoJCTxsaT5HRCAyLjAuMSBvciBsYXRlcjwvbGk+CgkJPGxpPmFuZCBzb21lIGltYWdlcyAoanBnKSB0byB0ZXN0IGl0IHdpdGg8L2xpPjwvbGk+Cgk8L3VsPgoKCTxoMz5DaGFuZ2Vsb2c8L2gzPgoKCTxwPjIwMDUtMTItMjQgdi4yMDA2LjE8L3A+Cgk8dWw+CgkJPGxpPnJlLXJlbGVhc2UgKHJldmlzZWQgZm9yIFRleHRwYXR0ZXJuIDQuMC4zKTwvbGk+Cgk8L3VsPgoKCTxwPjIwMDUtMTAtMTQgdi40LjAuMjwvcD4KCTx1bD4KCQk8bGk+Rm9ybWZpZWxkcyBvZiBUWFAgd2l0aCBzYW1lIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSBoaWRkZW48L2xpPgoJCTxsaT5jb25maWd1cmF0aW9uOiB3aWR0aCwgaGVpZ2h0IG9yIGxvbmdlc3Qgc2lkZSB3aWxsIGJlIHNjYWxlZCB0byB4PC9saT4KCTwvdWw+CgoJPHA+MjAwNS0xMC0xNCB2LjQuMC4xPC9wPgoJPHVsPgoJCTxsaT5vcHRpbWl6YXRpb24gb2Ygc3F1YXJlIGNyb3BwaW5nIChjdXR0aW5nIG9ubHkgdGhlIGxvbmdlc3Qgc2lkZSBvZiB0aGUgcGljdHVyZSkgKHRoYW5rcyA8YSBocmVmPSJodHRwOi8vd3d3LmJ1cmllZHNob3ZlbC5jb20iPmhlaWtraTc0PC9hPik8L2xpPgoJPC91bD4KCgk8cD4yMDA1LTA4LTIwIHYuMC41LjFiL3YuMC41LjJiPC9wPgoJPHVsPgoJCTxsaT5GaXhlZCBzb21lIHNtYWxsIGJ1ZyBpbnRyb2R1Y2VkIHdpdGggVGV4dHBhdHRlcm4gNC4wIChnaG8pPC9saT4KCTwvdWw+CgoJPHA+MjAwNS0wNC0wNCB2LjAuNWI8L3A+Cgk8dWw+CgkJPGxpPkNvb2tpZSB0aGF0IHNhdmVzIHRoZSBsYXRlc3QgbGVuZ3RoIGZvciB0aHVtYiBhbmQgbGFyZ2UgaW1hZ2UsIGZyb20gYW4gaWRlYSBieSBncmF1bWVpc3RlcjwvbGk+CgkJPGxpPkNoZWNrYm94IHRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gcmVzaXplIGltYWdlIG9uIHVwbG9hZCB3aXRoIGxhdGVzdCBzdG9yZWQgdmFsdWUuPC9saT4KCQk8bGk+SW1hZ2Ugb3B0cyBub3cgYXBwZWFycyBvbiB0aHVtYm5haWwgaW5zZXJ0IGFuZCBpbWFnZSByZXBsYWNlLCB0aGFua3MgWmlRPC9saT4KCQk8bGk+U3VwcG9ydCBmb3IgaW1hZ2Ugcm90YXRlIGZvciBwaHAgNC4zLjAgb3IgbG93ZXIsIHRoYW5rcyBUb2JpYXMgRWluYXJzc29uPC9saT4KCQk8bGk+R0QgdmVyc2lvbiBjaGVjaywgZnVuY3Rpb24gZnJvbSBNRFAgQXV0b21hdGljIFJlc2l6ZSBhbmQgVGh1bWJuYWlsIGZvciB0ZXh0cGF0dGVybiBieSA8YSBocmVmPSJodHRwOi8vd3d3LnB1cmVwaG90b3Nob3AuY29tIj5DYWdlZDwvYT48L2xpPgoJPC91bD4KCgk8cD4yMDA1LTAzLTMwIHYuMC40YjxiciAvPgpaaVEgYWRkZWQgdGhlIGZvbGxvd2luZzwvcD4KCTx1bD4KCQk8bGk+U3VibWl0IGJ1dHRvbiwgbm8gbmVlZCB0byB1cGxvYWQgYW4gaW1hZ2UgdG8gY3JlYXRlIHRodW1ibmFpbCwgc3F1YXJlIHRodW1ibmFpbCBvciB0byByZXNpemUgaW1hZ2UgYW55bW9yZS48L2xpPgoJCTxsaT5DaGVja2JveCwgaWYgeW91IHdhbnQgdG8gcmVzaXplIHRoZSBsYXJnZSBpbWFnZTwvbGk+CgkJPGxpPlF1YWxpdHkgaW5wdXQgZmllbGQgZm9yIHRodW1ibmFpbCBhbmQgbGFyZ2UgaW1hZ2UsIGJ1dCB0aGlzIHR3byBmaWVsZHMgYXJlIGNvbW1lbnRlZCBvdXQgcmlnaHQgbm93LCBwZXJzb25hbGx5IGkgdGhpbmsgaXRzIHRvbyBjbHV0dGVyZWQgdG8gaGF2ZSB0aGVtIHRoZXJlLCBidXQgeW91IGNvdWxkIGNvbW1lbnQgdGhlbSBvdXQgaWYgeW91IHdhbnQgdGhlbSwgdGhlIHZhbHVlcyBieSBkZWZhdWx0IGlzIDkwIGZvciB0aHVtYnMgYW5kIDgwIGZvciBsYXJnZSBpbWFnZXMuPC9saT4KCTwvdWw+CgoJPHA+VGhlIGJlaGF2aW9yIGZvciB0aGUgcGx1Z2luIGhhcyBjaGFuZ2VkIGEgYml0IHNpbmNlIHRoaXMgdmVyc2lvbiwgb24gdXBsb2FkIHRoZSBwbHVnaW4gd2lsbCBvbmx5IGNyZWF0ZXMgYSB0aHVtYm5haWwsIG5vIHJlc2l6ZSBpcyBub3cgZG9uZS4gV2hlbiByZXBsYWNpbmcgYSBpbWFnZSBpdCBvbmx5IHJlcGxhY2UgdGhlIGltYWdlLCBubyByZXNpemUgaXMgZG9uZSBvciB0aHVtYm5haWwgaXMgY3JlYXRlZC48L3A+CgoJPHA+T3RoZXIgdXBkYXRlczwvcD4KCgk8dWw+CgkJPGxpPkltYWdlIHJvdGF0aW5nLCAxODAsIDkwQ1csIDkwQ0NXLCByZXF1aXJlcyBwaHAgNC4zLjAgb3IgZ3JlYXRlcjwvbGk+CgkJPGxpPlBsdWdpbiByZW5hbWVkIHRvIGdseF9hbWluX2ltYWdlIGluc3RlYWQgb2YgZ2x4X2FkbWluX2ltYWdlX3Jlc2l6ZTwvbGk+CgkJPGxpPlN0eWxlc2hlZXQgcmVuYW1lZCB0byBnbHhfaW1hZ2VfYWRtaW4sIGRlbGV0ZSBvbGQgb25lLCBJIGFsc28gYWRkZWQgc29tZSBuZXcgcnVsZXMgdG8gdGhlIHN0eWxlc2hlZXQ8L2xpPgoJPC91bD4KCgk8cD4yMDA1LTAzLTI3IHYuMC4zYjwvcD4KCTx1bD4KCQk8bGk+SXRzIG5vdyBwb3NzaWJsZSB0byBjcmVhdGUgc3F1YXJlZCB0aHVtYm5haWxzPC9saT4KCQk8bGk+QmV0dGVyIGpzIGZvciBvdXRwdXR0aW5nIHRoZSBuZXcgaW5wdXQgZmllbGRzPC9saT4KCQk8bGk+Q2hhbmdlZCB0aGUgb3JkZXIgb2YgdGhlIGlucHV0IGZpZWxkcywgdGhleSBhcmUgbm93IGFib3ZlIHRoZSB1cGxvYWQgZmllbGQ8L2xpPgoJCTxsaT5BIHN0eWxlc2hlZXQgbmFtZWQgZ2x4X2FkbWluX2ltYWdlX3Jlc2l6ZSBpcyBjcmVhdGVkIHVuZGVyIHRoZSBzdHlsZSB0YWIgZm9yIHNvbWUgdmVyeSBiYXNpYyBzdHlsaW5nIHVuZGVyIHRoZSBpbWFnZSBlZGl0IHBhZ2UuPC9saT4KCTwvdWw+CgoJPHA+MjAwNS0wMy0yNSB2LjAuMmI8YnIgLz4KSXQgc3RpbGwgdXNlcyB0aGUgc2FtZSB0ZWNobmljIHRvIG1hbmlwdWxhdGUgdGhlIGltYWdlIGJ1dCBpdCBpcyBub3cgcG9zc2libGUgdG8gKGluIHRoZSBpbWFnZSBlZGl0IHBhZ2UpPC9wPjwvcD4KCgk8dWw+CgkJPGxpPnNwZWNpZnkgdGhlIHZhbHVlcyBmb3IgdGhlIHRodW1iIGFuZCB0aGUgbGFyZ2UgaW1hZ2U8L2xpPgoJCTxsaT5kZWNpZGUgaWYgeW91IHdhbnQgdG8gcmVzaXplIGFuZCBjcmVhdGUgYSB0aHVtYm5haWwgb3Igbm90PC9saT4KCTwvdWw+CgoJPHA+MjAwNS0wMy0yNSB2LjAuMWI8L3A+Cgk8dWw+CgkJPGxpPmluaXRpYWwgcmVsZWFzZTwvbGk+Cgk8L3VsPgoKCTxwPjxkaXYgY2xhc3M9ImdobyI+PHA+cGx1Z2luIGNvbXBpbGVkIGF0OiBUdWUsIDAzIEphbiAyMDA2IDEwOjAyOjQ5ICswMTAwIHwgY3VycmVudCB2ZXJzaW9uIGF0IDxhIGhyZWY9Imh0dHA6Ly9ncmF1aGlybi5vcmcvcGF0dGVybnRleHQvZ2x4X2FkbWluX2ltYWdlIj5odHRwOi8vZ3JhdWhpcm4ub3JnL3BhdHRlcm50ZXh0L2dseF9hZG1pbl9pbWFnZTwvYT48L3A+PC9kaXY+PC9wPiI7czo0OiJjb2RlIjtzOjI0NzYzOiIKLy8gc2V0IHRoaXMgdG8gMCB0byBzaG93IHRoZSBvcmlnaW5hbCB0aHVtYm5haWwtIGFuZCBjdXR0aW5nLWZvcm1zIG9mIHR4cC4KZGVmaW5lKCdISURFVFhQJywgMSk7Ci8vIHNldCB0aGlzIHRvIDEgdG8gZm9yY2Ugb2xkIG1ldGhvZCBvZiBzcXVhcmV0aHVtYnByb2R1Y3Rpb24KZGVmaW5lKCdNRVRIT0QnLCAyKTsKaWYgKEAgdHhwaW50ZXJmYWNlID09ICdhZG1pbicpIHsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCJnbHhfYWRtaW5faW1hZ2UiLCAiaW1hZ2UiKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCJnbHhfaW1hZ2Vfb3B0cyIsICJpbWFnZSIpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soImdseF9pbWFnZV9lZGl0X29wdHMiLCAiaW1hZ2UiLCAidGh1bWJuYWlsX2luc2VydCIpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soImdseF9pbWFnZV9lZGl0X29wdHMiLCAiaW1hZ2UiLCAiaW1hZ2VfcmVwbGFjZSIpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soImdseF9pbWFnZV9lZGl0X29wdHMiLCAiaW1hZ2UiLCAiaW1hZ2VfZWRpdCIpOwp9OwpmdW5jdGlvbiBnbHhfYWRtaW5faW1hZ2UoJGV2ZW50LCAkc3RlcCkgewogICAgJGFjdGlvbiA9IHBzKCJhY3Rpb24iKSA/IHBzKCJhY3Rpb24iKSA6ICJyZXNpemUiOwogICAgc3dpdGNoICgkYWN0aW9uKSB7CiAgICAgICAgY2FzZSAicmVzaXplIjoKICAgICAgICAgICAgZ2x4X2ltYWdlX3Jlc2l6ZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyb3RhdGUiOgogICAgICAgICAgICBnbHhfaW1hZ2Vfcm90YXRlKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGdseF9pbWFnZV9yZXNpemUoKTsKICAgIH07Cn0KLyoqCiAqIEZ1bmN0aW9uIGZyb20gTURQIEF1dG9tYXRpYyBSZXNpemUgYW5kIFRodW1ibmFpbCBmb3IgdGV4dHBhdHRlcm4KICogQnkgQ2FnZWQ6IDxodHRwOi8vd3d3LnB1cmVwaG90b3Nob3AuY29tPgogKi8KZnVuY3Rpb24gZ2x4X2dldF9nZF92ZXJzaW9uKCkgewogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VjcmVhdGV0cnVlY29sb3InKSl7CiAgICAgICAgJGZ1bmN0aW9uX2NyZWF0ZSA9ICdpbWFnZWNyZWF0ZSc7CiAgICAgICAgJGZ1bmN0aW9uX2NvcHkgPSAnaW1hZ2Vjb3B5cmVzaXplZCc7CiAgICB9IGVsc2UgewogICAgICAgICRmdW5jdGlvbl9jcmVhdGUgPSAnaW1hZ2VjcmVhdGV0cnVlY29sb3InOwogICAgICAgICRmdW5jdGlvbl9jb3B5ID0gJ2ltYWdlY29weXJlc2FtcGxlZCc7CiAgICB9OwogICAgcmV0dXJuIGFycmF5KCdjb3B5JyA9PiAkZnVuY3Rpb25fY29weSwgJ2NyZWF0ZScgPT4gJGZ1bmN0aW9uX2NyZWF0ZSk7Cn0KLyoqCiAqIFJvdGF0ZSBpbWFnZSBwaHAgNC4zLjAgb3IgbG93ZXIKICogQnkgVG9iaWFzIEVpbmFyc3NvbgogKi8KZnVuY3Rpb24gZ2x4X29sZF9pbWFnZV9yb3RhdGUoJHNyYywgJGFuZ2xlKXsKICAgIC8vIGNoZWNrIGN1cnJlbnQgR0QgdmVyc2lvbgogICAgJGdkID0gZ2x4X2dldF9nZF92ZXJzaW9uKCk7CiAgICAkd2lkdGggPSBpbWFnZXN4KCRzcmMpOwogICAgJGhlaWdodCA9IGltYWdlc3koJHNyYyk7CiAgICBpZigkYW5nbGUgPT0gOTAgfHwgJGFuZ2xlID09IDI3MCl7CiAgICAgICAgJGRzdCA9ICRnZFsnY3JlYXRlJ10oJGhlaWdodCwkd2lkdGgpOwogICAgfSBlbHNlewogICAgICAgICRkc3QgPSAkZ2RbJ2NyZWF0ZSddKCR3aWR0aCwkaGVpZ2h0KTsKICAgIH07CiAgICBmb3IoJHk9MDskeTwkaGVpZ2h0OyR5KyspewogICAgICAgIGZvcigkeD0wOyR4PCR3aWR0aDskeCsrKXsKICAgICAgICAgICAgc3dpdGNoKCRhbmdsZSl7CiAgICAgICAgICAgICAgICBjYXNlIDkwOgogICAgICAgICAgICAgICAgICAgIGltYWdlY29weSgkZHN0LCAkc3JjLCAkaGVpZ2h0LSR5LTEsICR4LCAkeCwgJHksIDEsIDEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAxODA6CiAgICAgICAgICAgICAgICAgICAgaW1hZ2Vjb3B5KCRkc3QsICRzcmMsICR4LCAkeSwgJHdpZHRoLSR4LTEsICRoZWlnaHQtJHktMSwgMSwgMSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDI3MDoKICAgICAgICAgICAgICAgICAgICBpbWFnZWNvcHkoJGRzdCwgJHNyYywgJHksICR3aWR0aC0keC0xLCAkeCwgJHksIDEsIDEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBpbWFnZWNvcHkoJGRzdCwgJHNyYywgJHgsICR5LCAkeCwgJHksIDEsIDEpOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9OwogICAgaW1hZ2VkZXN0cm95KCRzcmMpOwogICAgcmV0dXJuKCRkc3QpOwp9Ci8qKgogKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmVjZW50CiAqIEJ5IFppUQogKi8KZnVuY3Rpb24gemlxSXNQZXJjZW50KCR4KSB7CiAgICBpZiAoaXNfbnVtZXJpYygkeCkpIHsKICAgICAgICAkdG1wID0gaW50dmFsKCR4KTsKICAgICAgICBpZiAoJHRtcCA+PSAxMCAmJiAkdG1wIDw9IDEwMCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9OwogICAgfTsKICAgIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBnbHhfaW1hZ2Vfcm90YXRlKCkgewogICAgZ2xvYmFsICRwYXRoX3RvX3NpdGU7CiAgICAkcm90YXRlX3ZhbHVlID0gcHMoInJvdGF0ZVZhbHVlIikgPyBwcygicm90YXRlVmFsdWUiKSA6IDA7CiAgICAkaW1hZ2VfaWQgPSBwcygiaWQiKSA/IHBzKCJpZCIpIDogMDsKICAgICRzb3VyY2UgPSBJTVBBVEguJGltYWdlX2lkLicuanBnJzsKICAgIC8vIGdldCB0aGUgcmlnaHQgZGVncmVlCiAgICAkZGVncmVlcyA9IDA7CiAgICBzd2l0Y2ggKCRyb3RhdGVfdmFsdWUpIHsKICAgICAgICBjYXNlICIxODAiOgogICAgICAgICAgICAkZGVncmVlcyA9IDE4MDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiOTBDVyI6CiAgICAgICAgICAgICRkZWdyZWVzID0gMjcwOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICI5MENDVyI6CiAgICAgICAgICAgICRkZWdyZWVzID0gOTA7CiAgICAgICAgICAgIGJyZWFrOwogICAgfTsKICAgIC8vIHJvdGF0ZSBpbWFnZQogICAgJGltID0gaW1hZ2VjcmVhdGVmcm9tanBlZygkc291cmNlKTsKICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ltYWdlcm90YXRlJykpIHsKICAgICAgICAkaW0gPSBpbWFnZXJvdGF0ZSgkaW0sICRkZWdyZWVzLCAwKTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGltID0gZ2x4X29sZF9pbWFnZV9yb3RhdGUoJGltLCAkZGVncmVlcyk7CiAgICB9OwogICAgaW1hZ2VqcGVnKCRpbSwgJHNvdXJjZSwgOTUpOwogICAgaW1hZ2VkZXN0cm95KCRpbSk7CiAgICAvLyBnZXQgdGhlIHNpemUgZnJvbSB0aGUgbmV3IGltYWdlLCBhbmQgdXBkYXRlIGRhdGFiYXNlCiAgICAkc2l6ZSA9IGdldGltYWdlc2l6ZSgkc291cmNlKTsKICAgIHNhZmVfdXBkYXRlKCd0eHBfaW1hZ2UnLCAidz0nIi4kc2l6ZVswXS4iJyxoPSciLiRzaXplWzFdLiInIiwgImlkPSckaW1hZ2VfaWQnIik7CiAgICAvLyBzZW5kIHVzZXIgdG8gdGhlIGltYWdlIGVkaXQgdmlldwogICAgaGVhZGVyKCJMb2NhdGlvbjogaW5kZXgucGhwP2V2ZW50PWltYWdlJnN0ZXA9aW1hZ2VfZWRpdCZpZD0iLiRpbWFnZV9pZCk7Cn0KZnVuY3Rpb24gZ2x4X2ltYWdlX3Jlc2l6ZSgpIHsKICAgIGdsb2JhbCAkcGF0aF90b19zaXRlOwogICAgJGRvX3Jlc2l6ZV9sYXJnZSA9IHBzKCJkb1Jlc2l6ZUxhcmdlIikgPyBwcygiZG9SZXNpemVMYXJnZSIpIDogMDsKICAgICRkb19yZXNpemVfdGh1bWIgPSBwcygiZG9SZXNpemVUaHVtYiIpID8gcHMoImRvUmVzaXplVGh1bWIiKSA6IDE7CiAgICAkc3F1YXJlX2ltYWdlID0gcHMoInNxdWFyZSIpID8gcHMoInNxdWFyZSIpIDogMDsKICAgIC8vIGNoZWNrIGZvciBzYXZlZCB2YWx1ZXMKICAgICRsYXJnZVZhbHVlID0gY3MoImdseF9pbWFnZV9sYXJnZSIpID8gY3MoImdseF9pbWFnZV9sYXJnZSIpIDogNTAwOwogICAgJHRodW1iVmFsdWUgPSBjcygiZ2x4X2ltYWdlX3RodW1iIikgPyBjcygiZ2x4X2ltYWdlX3RodW1iIikgOiAxMDA7CiAgICAkbGFyZ2VzdF9zaWRlX2xhcmdlID0gcHMoImxhcmdlU2l6ZSIpID8gcHMoImxhcmdlU2l6ZSIpIDogJGxhcmdlVmFsdWU7CiAgICAkbGFyZ2VzdF9zaWRlX3RodW1iID0gcHMoInRodW1iU2l6ZSIpID8gcHMoInRodW1iU2l6ZSIpIDogJHRodW1iVmFsdWU7CiAgICAkc2lkZV90aHVtYiA9IHBzKCJ0aHVtYlZhbHVlIikgPyBwcygidGh1bWJWYWx1ZSIpIDogJ2xvbmdlc3QnOwogICAgJGltYWdlX2lkID0gcHMoImlkIikgPyBwcygiaWQiKSA6IG15c3FsX2luc2VydF9pZCgpOwogICAgJHF1YWxpdHlfdGh1bWIgPSB6aXFJc1BlcmNlbnQocHMoInRodW1iUXVhIikpID8gaW50dmFsKHBzKCJ0aHVtYlF1YSIpKSA6IDkwOwogICAgJHF1YWxpdHlfbGFyZ2UgPSB6aXFJc1BlcmNlbnQocHMoImxhcmdlUXVhIikpID8gaW50dmFsKHBzKCJsYXJnZVF1YSIpKSA6IDgwOwogICAgLy8gU2F2ZSB2YWx1ZXMgdG8gc29tZSBjb29raWVzCiAgICBzZXRjb29raWUoJ2dseF9pbWFnZV9sYXJnZScsJGxhcmdlc3Rfc2lkZV9sYXJnZSx0aW1lKCkrMzYwMCoyNCozNjUpOwogICAgc2V0Y29va2llKCdnbHhfaW1hZ2VfdGh1bWInLCRsYXJnZXN0X3NpZGVfdGh1bWIsdGltZSgpKzM2MDAqMjQqMzY1KTsKICAgIHNldGNvb2tpZSgnZ2x4X2ltYWdlX3Jlc2l6ZV9sYXJnZScsJGRvX3Jlc2l6ZV9sYXJnZSx0aW1lKCkrMzYwMCoyNCozNjUpOwogICAgc2V0Y29va2llKCdnbHhfaW1hZ2VfcmVzaXplX3RodW1iJywkZG9fcmVzaXplX3RodW1iLHRpbWUoKSszNjAwKjI0KjM2NSk7CiAgICBzZXRjb29raWUoJ2dseF9pbWFnZV9zcXVhcmUnLCRzcXVhcmVfaW1hZ2UsdGltZSgpKzM2MDAqMjQqMzY1KTsKICAgICRzb3VyY2UgPSBJTVBBVEguJGltYWdlX2lkLicuanBnJzsKICAgIGlmIChmaWxlX2V4aXN0cygkc291cmNlKSAmJiAoJGRvX3Jlc2l6ZV90aHVtYiA9PSAxIHx8ICRkb19yZXNpemVfbGFyZ2UgPT0gMSkpIHsKICAgICAgICAvLyBjaGVjayBjdXJyZW50IEdEIHZlcnNpb24KICAgICAgICAkZ2QgPSBnbHhfZ2V0X2dkX3ZlcnNpb24oKTsKICAgICAgICAkc2l6ZSA9IGdldGltYWdlc2l6ZSgkc291cmNlKTsKICAgICAgICAkeCA9ICRzaXplWzBdOwogICAgICAgICR5ID0gJHNpemVbMV07CiAgICAgICAgaWYgKCRzaWRlX3RodW1iID09ICdsb25nZXN0Jyl7CiAgICAgICAgICAgIGlmICgkeCA+ICR5KSB7CiAgICAgICAgICAgICAgICAkbWF4ID0gJHg7CiAgICAgICAgICAgICAgICAkbWluID0gJHk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbWF4ID0gJHk7CiAgICAgICAgICAgICAgICAkbWluID0gJHg7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlaWYgKCRzaWRlX3RodW1iID09ICdoZWlnaHQnKXsKICAgICAgICAgICAgJG1heCA9ICR5OwogICAgICAgICAgICAkbWluID0gJHg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1heCA9ICR4OwogICAgICAgICAgICAkbWluID0gJHk7CiAgICAgICAgfTsKICAgICAgICBpZiAoJGRvX3Jlc2l6ZV90aHVtYiA9PSAxKSB7CiAgICAgICAgICAgIC8vIHRodW1iCiAgICAgICAgICAgICRyYXRlX3RodW1iID0gJG1heCAvICRsYXJnZXN0X3NpZGVfdGh1bWI7CiAgICAgICAgICAgICRmaW5hbF94X3RodW1iID0gJHggLyAkcmF0ZV90aHVtYjsKICAgICAgICAgICAgJGZpbmFsX3lfdGh1bWIgPSAkeSAvICRyYXRlX3RodW1iOwogICAgICAgICAgICAvLyBjcmVhdGUgdGh1bWIKICAgICAgICAgICAgaWYgKCRzcXVhcmVfaW1hZ2UgPT0gMSkgewogICAgICAgICAgICAgICAgJHJlc2l6ZV90aHVtYiA9ICRnZFsnY3JlYXRlJ10oJGxhcmdlc3Rfc2lkZV90aHVtYiwgJGxhcmdlc3Rfc2lkZV90aHVtYik7CiAgICAgICAgICAgICAgICAkaW1fdGh1bWIgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCRzb3VyY2UpOwogICAgICAgICAgICAgICAgaWYgKE1FVEhPRCA9PSAyKXsKICAgICAgICAgICAgICAgICAgICBpZigkeCA+ICR5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR4MCA9ICgkeCAtICR5KSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICR4MSA9ICR5OwogICAgICAgICAgICAgICAgICAgICAgICAkeTAgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkeTEgPSAkeTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkeDAgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAkeDEgPSAkeDsKICAgICAgICAgICAgICAgICAgICAgICAgJHkwID0gKCR5IC0gJHgpIC8gMjsKICAgICAgICAgICAgICAgICAgICAgICAgJHkxID0gJHg7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAkZ2RbJ2NvcHknXSgkcmVzaXplX3RodW1iLCAkaW1fdGh1bWIsIDAsIDAsJHgwLCR5MCwgJGxhcmdlc3Rfc2lkZV90aHVtYiwgJGxhcmdlc3Rfc2lkZV90aHVtYiwgJHgxLCAkeTEpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkZ2RbJ2NvcHknXSgkcmVzaXplX3RodW1iLCAkaW1fdGh1bWIsIDAsIDAsIDAsIDAsICRsYXJnZXN0X3NpZGVfdGh1bWIsICRsYXJnZXN0X3NpZGVfdGh1bWIsICRsYXJnZXN0X3NpZGVfdGh1bWIgKiAxLjUsICRsYXJnZXN0X3NpZGVfdGh1bWIgKiAxLjUpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICRzb3VyY2VfdGh1bWIgPSBJTVBBVEguJGltYWdlX2lkLid0LmpwZyc7CiAgICAgICAgICAgICAgICBpbWFnZWpwZWcoJHJlc2l6ZV90aHVtYiwgJHNvdXJjZV90aHVtYiwgJHF1YWxpdHlfdGh1bWIpOwogICAgICAgICAgICAgICAgaW1hZ2VkZXN0cm95KCRyZXNpemVfdGh1bWIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlc2l6ZV90aHVtYiA9ICRnZFsnY3JlYXRlJ10oJGZpbmFsX3hfdGh1bWIsICRmaW5hbF95X3RodW1iKTsKICAgICAgICAgICAgICAgICRpbV90aHVtYiA9IGltYWdlY3JlYXRlZnJvbWpwZWcoJHNvdXJjZSk7CiAgICAgICAgICAgICAgICAkZ2RbJ2NvcHknXSgkcmVzaXplX3RodW1iLCAkaW1fdGh1bWIsIDAsIDAsIDAsIDAsICRmaW5hbF94X3RodW1iLCAkZmluYWxfeV90aHVtYiwgJHgsICR5KTsKICAgICAgICAgICAgICAgICRzb3VyY2VfdGh1bWIgPSBJTVBBVEguJGltYWdlX2lkLid0LmpwZyc7CiAgICAgICAgICAgICAgICBpbWFnZWpwZWcoJHJlc2l6ZV90aHVtYiwgJHNvdXJjZV90aHVtYiwgJHF1YWxpdHlfdGh1bWIpOwogICAgICAgICAgICAgICAgaW1hZ2VkZXN0cm95KCRyZXNpemVfdGh1bWIpOwogICAgICAgICAgICB9OwogICAgICAgICAgICAkdGh1bWIgPSB0cnVlOwogICAgICAgICAgICBzYWZlX3VwZGF0ZSgndHhwX2ltYWdlJywgInRodW1ibmFpbD0nJHRodW1iJyIsICJpZD0nJGltYWdlX2lkJyIpOwogICAgICAgIH07CiAgICAgICAgaWYgKCRkb19yZXNpemVfbGFyZ2UgPT0gMSkgewogICAgICAgICAgICAvLyBsYXJnZQogICAgICAgICAgICAkcmF0ZV9sYXJnZSA9ICRtYXggLyAkbGFyZ2VzdF9zaWRlX2xhcmdlOwogICAgICAgICAgICAkZmluYWxfeF9sYXJnZSA9ICR4IC8gJHJhdGVfbGFyZ2U7CiAgICAgICAgICAgICRmaW5hbF95X2xhcmdlID0gJHkgLyAkcmF0ZV9sYXJnZTsKICAgICAgICAgICAgLy8gY3JlYXRlIGxhcmdlCiAgICAgICAgICAgIGlmICgkeCA+ICRmaW5hbF94X2xhcmdlKSB7CiAgICAgICAgICAgICAgICAkcmVzaXplX2xhcmdlID0gJGdkWydjcmVhdGUnXSgkZmluYWxfeF9sYXJnZSwgJGZpbmFsX3lfbGFyZ2UpOwogICAgICAgICAgICAgICAgJGltX2xhcmdlID0gaW1hZ2VjcmVhdGVmcm9tanBlZygkc291cmNlKTsKICAgICAgICAgICAgICAgICRnZFsnY29weSddKCRyZXNpemVfbGFyZ2UsICRpbV9sYXJnZSwgMCwgMCwgMCwgMCwgJGZpbmFsX3hfbGFyZ2UsICRmaW5hbF95X2xhcmdlLCAkeCwgJHkpOwogICAgICAgICAgICAgICAgaW1hZ2VqcGVnKCRyZXNpemVfbGFyZ2UsICRzb3VyY2UsICRxdWFsaXR5X2xhcmdlKTsKICAgICAgICAgICAgICAgIGltYWdlZGVzdHJveSgkcmVzaXplX2xhcmdlKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgLy8gZ2V0IHNpemUgZnJvbSBsYXJnZQogICAgICAgICAgICAkc2l6ZSA9IGdldGltYWdlc2l6ZSgkc291cmNlKTsKICAgICAgICAgICAgc2FmZV91cGRhdGUoJ3R4cF9pbWFnZScsICJ3PSciLiRzaXplWzBdLiInLGg9JyIuJHNpemVbMV0uIiciLCAiaWQ9JyRpbWFnZV9pZCciKTsKICAgICAgICB9OwogICAgICAgIC8vIHNlbmQgdXNlciB0byB0aGUgaW1hZ2UgZWRpdCB2aWV3CiAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogaW5kZXgucGhwP2V2ZW50PWltYWdlJnN0ZXA9aW1hZ2VfZWRpdCZpZD0iLiRpbWFnZV9pZCk7CiAgICB9Owp9CmZ1bmN0aW9uIGdseF9pbWFnZV9vcHRzKCRldmVudCwgJHN0ZXApIHsKICAgIGVjaG88PDxFT0YKPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPCEtLQp3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CgkvLyByZXNpemUgaW1hZ2Ugb24gdXBsb2FkPwoJdmFyIGlucHV0RG9SZXNpemVMYXJnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CglpbnB1dERvUmVzaXplTGFyZ2Uuc2V0QXR0cmlidXRlKCduYW1lJywgJ2RvUmVzaXplTGFyZ2UnKTsKCWlucHV0RG9SZXNpemVMYXJnZS5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2RvUmVzaXplTGFyZ2UnKTsKCWlucHV0RG9SZXNpemVMYXJnZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnY2hlY2tib3gnKTsKCWlucHV0RG9SZXNpemVMYXJnZS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJzEnKTsKCWlucHV0RG9SZXNpemVMYXJnZS5jaGVja2VkID0gZmFsc2U7Cgl2YXIgbGFyZ2VWYWx1ZSA9IGdldENvb2tpZSgnZ2x4X2ltYWdlX2xhcmdlJykgPyAnLCBzdG9yZWQgdmFsdWUgJytnZXRDb29raWUoJ2dseF9pbWFnZV9sYXJnZScpKydweCcgOiAnLCBzdG9yZWQgdmFsdWUgNTAwcHgnOwoJdmFyIGxhYmVsRG9SZXNpemVMYXJnZSA9IGNyZWF0ZUxhYmVsKCdkb1Jlc2l6ZUxhcmdlJywgJ1Jlc2l6ZSBsYXJnZSBpbWFnZScrbGFyZ2VWYWx1ZSwgJ2lubGluZScpOwoJdmFyIHBEb1Jlc2l6ZUxhcmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwoJcERvUmVzaXplTGFyZ2UuYXBwZW5kQ2hpbGQoaW5wdXREb1Jlc2l6ZUxhcmdlKTsKCXBEb1Jlc2l6ZUxhcmdlLmFwcGVuZENoaWxkKGxhYmVsRG9SZXNpemVMYXJnZSk7CgkvLyBnZXQgdGhlIHVwbG9hZCBmb3JtIGVsZW1lbnQsIHRoZSB0aGlyZCBmb3JtIG9uIHRoZSBwYWdlCgl2YXIgZm9ybVVwbG9hZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdmb3JtJykuaXRlbSgyKTsKCWZvcm1VcGxvYWQuYXBwZW5kQ2hpbGQocERvUmVzaXplTGFyZ2UpOwp9CmZ1bmN0aW9uIGNyZWF0ZUxhYmVsKGZvckVsZW1lbnQsIHRleHQsIGVsZW1lbnRDbGFzcykgewoJdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CglsYWJlbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdmb3InLCBmb3JFbGVtZW50KTsKCWxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50Q2xhc3M7Cgl2YXIgbGFiZWxUZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOwoJbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsVGV4dE5vZGUpOwoJcmV0dXJuIGxhYmVsRWxlbWVudDsKfQpmdW5jdGlvbiBnZXRDb29raWUobmFtZSkgewoJdmFyIGRjID0gZG9jdW1lbnQuY29va2llOwoJdmFyIHByZWZpeCA9IG5hbWUgKyAiPSI7Cgl2YXIgYmVnaW4gPSBkYy5pbmRleE9mKCI7ICIgKyBwcmVmaXgpOwoJaWYgKGJlZ2luID09IC0xKSB7CgkJYmVnaW4gPSBkYy5pbmRleE9mKHByZWZpeCk7CgkJaWYgKGJlZ2luICE9IDApIHJldHVybiBudWxsOwoJfSBlbHNlIHsKICAgIAliZWdpbiArPSAyOwogICAgfQogIAl2YXIgZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoIjsiLCBiZWdpbik7CglpZiAoZW5kID09IC0xKSB7CgkJZW5kID0gZGMubGVuZ3RoOwoJfQogIAlyZXR1cm4gdW5lc2NhcGUoZGMuc3Vic3RyaW5nKGJlZ2luICsgcHJlZml4Lmxlbmd0aCwgZW5kKSk7Cn0KLS0+Cjwvc2NyaXB0PgpFT0Y7Cn0KZnVuY3Rpb24gZ2x4X2ltYWdlX2VkaXRfb3B0cygkZXZlbnQsICRzdGVwKSB7CgkkaWQgPSBncHMoJ2lkJyk7CglnbG9iYWwgJGltZ19kaXI7CgkkcnMgPSBzYWZlX3JvdygiKiIsICJ0eHBfaW1hZ2UiLCAiaWQ9JyRpZCciKTsKCWlmICgkcnMpIHsKCQlleHRyYWN0KCRycyk7Cgl9IGVsc2UgewoJICAgIHJldHVybjsKCX07CiAgICAvLyBjaGVjayBpZiBnbHhfYWRtaW4gY3NzIGlzIGZvdW5kLCBpZiBub3QgZm91bmQgY3JlYXRlIGl0CiAgICAkcnMgPSBzYWZlX3JvdygibmFtZSIsICJ0eHBfY3NzIiwgIm5hbWU9J2dseF9hZG1pbl9pbWFnZScgbGltaXQgMSIpOwogICAgaWYgKCEkcnMpIHsKICAgICAgICAkY3NzID0gImJHRmlaV3d1YVc1c2FXNWxJSHNOQ2dsdFlYSm5hVzQ2SURWd2VEc0pEUXA5Q1EwS0RRcHNZV0psYkM1aWJHOWpheUI3RFFvSmJXRnlaMmx1T2lBMWNIZ2dOWEI0SURBZ01Ec0pEUW9KWkdsemNHeGhlVG9nWW14dlkyczdEUXA5RFFvTkNpNXlaWE5wZW1VZ2V3MEtDV1pzYjJGME9pQnNaV1owT3cwS2ZRMEtEUW91Y205MFlYUmxJSHNOQ2dsbWJHOWhkRG9nY21sbmFIUTdEUXA5RFFvTkNtaHlJSHNOQ2dsaWIzSmtaWEl0WW05MGRHOXRPaUF4Y0hnZ2MyOXNhV1FnSTBSRVJFUkVSRHNOQ2dsaWIzSmtaWEl0ZEc5d09pQnViMjVsT3cwS0NXSnZjbVJsY2kxeWFXZG9kRG9nYm05dVpUc05DZ2xpYjNKa1pYSXRiR1ZtZERvZ2JtOXVaVHNOQ2dsb1pXbG5hSFE2SURGd2VEc05DZ2xqYkdWaGNqb2dZbTkwYURzTkNuMD0iOwogICAgICAgIHNhZmVfaW5zZXJ0KCJ0eHBfY3NzIiwgIm5hbWU9J2dseF9hZG1pbl9pbWFnZScsIGNzcz0nJGNzcyciKTsKICAgIH07CiAgICBlY2hvPDw8RU9GCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+CjwhLS0Kd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewpFT0Y7CiAgICBpZiAoSElERVRYUCA9PSAxKXsKICAgICAgICBlY2hvICIKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJylbNl0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RyJylbN10uc3R5bGUuZGlzcGxheSA9ICdub25lJzsiOwogICAgfTsKICAgIGVjaG8gIgoJLy8gYWRkIHNvbWUgc3R5bGUgdG8gdGhpcyEhISEKCWxvYWRDU1MoJ2Nzcy5waHA/bj1nbHhfYWRtaW5faW1hZ2UnKTsKCS8vYWxlcnQoZ2V0Q29va2llKCdnbHhfaW1hZ2VfbGFyZ2UnKSArIFwiIGFuZCBcIiArIGdldENvb2tpZSgnZ2x4X2ltYWdlX3RodW1iJykpOwoJLy8gY2hlY2tib3ggcmVzaXplIGxhcmdlCgl2YXIgaW5wdXREb1Jlc2l6ZUxhcmdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0RG9SZXNpemVMYXJnZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnZG9SZXNpemVMYXJnZScpOwoJaW5wdXREb1Jlc2l6ZUxhcmdlLnNldEF0dHJpYnV0ZSgnaWQnLCAnZG9SZXNpemVMYXJnZScpOwoJaW5wdXREb1Jlc2l6ZUxhcmdlLnNldEF0dHJpYnV0ZSgndHlwZScsICdjaGVja2JveCcpOwoJaW5wdXREb1Jlc2l6ZUxhcmdlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnMScpOwoJaW5wdXREb1Jlc2l6ZUxhcmdlLmNoZWNrZWQgPSBmYWxzZTsKCXZhciBsYWJlbERvUmVzaXplTGFyZ2UgPSBjcmVhdGVMYWJlbCgnZG9SZXNpemVMYXJnZScsICdSZXNpemUgbGFyZ2UgaW1hZ2UnLCAnaW5saW5lJyk7Cgl2YXIgcERvUmVzaXplTGFyZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CglwRG9SZXNpemVMYXJnZS5hcHBlbmRDaGlsZChpbnB1dERvUmVzaXplTGFyZ2UpOwoJcERvUmVzaXplTGFyZ2UuYXBwZW5kQ2hpbGQobGFiZWxEb1Jlc2l6ZUxhcmdlKTsKCS8vIGNoZWNrYm94IHJlc2l6ZSB0aHVtYgoJdmFyIGlucHV0RG9SZXNpemVUaHVtYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CglpbnB1dERvUmVzaXplVGh1bWIuc2V0QXR0cmlidXRlKCduYW1lJywgJ2RvUmVzaXplVGh1bWInKTsKCWlucHV0RG9SZXNpemVUaHVtYi5zZXRBdHRyaWJ1dGUoJ2lkJywgJ2RvUmVzaXplVGh1bWInKTsKCWlucHV0RG9SZXNpemVUaHVtYi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnY2hlY2tib3gnKTsKCWlucHV0RG9SZXNpemVUaHVtYi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJzEnKTsKCWlucHV0RG9SZXNpemVUaHVtYi5jaGVja2VkID0gdHJ1ZTsKCXZhciBsYWJlbERvUmVzaXplVGh1bWIgPSBjcmVhdGVMYWJlbCgnZG9SZXNpemVUaHVtYicsICdDcmVhdGUgdGh1bWJuYWlsJywgJ2lubGluZScpOwoJdmFyIHBEb1Jlc2l6ZVRodW1iID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwoJcERvUmVzaXplVGh1bWIuYXBwZW5kQ2hpbGQoaW5wdXREb1Jlc2l6ZVRodW1iKTsKCXBEb1Jlc2l6ZVRodW1iLmFwcGVuZENoaWxkKGxhYmVsRG9SZXNpemVUaHVtYik7CgkvLyBjaGVja0JveCBzcWFyZUltYWdlCgl2YXIgaW5wdXRTcXVhcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoJaW5wdXRTcXVhcmUuc2V0QXR0cmlidXRlKCduYW1lJywgJ3NxdWFyZScpOwoJaW5wdXRTcXVhcmUuc2V0QXR0cmlidXRlKCdpZCcsICdzcXVhcmUnKTsKCWlucHV0U3F1YXJlLnNldEF0dHJpYnV0ZSgndHlwZScsICdjaGVja2JveCcpOwoJaW5wdXRTcXVhcmUuc2V0QXR0cmlidXRlKCd2YWx1ZScsICcxJyk7CglpbnB1dFNxdWFyZS5jaGVja2VkID0gZmFsc2U7Cgl2YXIgbGFiZWxTcXVhcmUgPSBjcmVhdGVMYWJlbCgnc3F1YXJlJywgJ1NxdWFyZSB0aHVtYm5haWwnLCAnaW5saW5lJyk7Cgl2YXIgcFNxdWFyZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKCXBTcXVhcmUuYXBwZW5kQ2hpbGQoaW5wdXRTcXVhcmUpOwoJcFNxdWFyZS5hcHBlbmRDaGlsZChsYWJlbFNxdWFyZSk7CgkvLyBpbnB1dCB0aHVtYlNpemUKCXZhciB0aHVtYlZhbHVlID0gKGdldENvb2tpZSgnZ2x4X2ltYWdlX3RodW1iJykpID8gZ2V0Q29va2llKCdnbHhfaW1hZ2VfdGh1bWInKSA6IDEwMDsKCXZhciBpbnB1dFRodW1iU2l6ZSA9IGNyZWF0ZUlucHV0KCd0aHVtYlNpemUnLCAndGh1bWJTaXplJywgdGh1bWJWYWx1ZSk7Cgl2YXIgbGFiZWxUaHVtYlNpemUgPSBjcmVhdGVMYWJlbCgndGh1bWJTaXplJywgJ1RodW1ic2l6ZSAocHgpJywgJ2Jsb2NrJyk7Cgl2YXIgcFRodW1iID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwoJcFRodW1iLmFwcGVuZENoaWxkKGxhYmVsVGh1bWJTaXplKTsKCXBUaHVtYi5hcHBlbmRDaGlsZChpbnB1dFRodW1iU2l6ZSk7CgkvLyByYWRpbyBidXR0b24gdGh1bWJzaXplLXNpZGVoZWlnaHQKCXZhciBpbnB1dFJhZGlvVGh1bWJIZWlnaHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoJaW5wdXRSYWRpb1RodW1iSGVpZ2h0LnNldEF0dHJpYnV0ZSgnbmFtZScsICd0aHVtYlZhbHVlJyk7CglpbnB1dFJhZGlvVGh1bWJIZWlnaHQuc2V0QXR0cmlidXRlKCdpZCcsICdyYWRpb1RodW1iJyk7CglpbnB1dFJhZGlvVGh1bWJIZWlnaHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3JhZGlvJyk7CglpbnB1dFJhZGlvVGh1bWJIZWlnaHQuc2V0QXR0cmlidXRlKCd2YWx1ZScsICdoZWlnaHQnKTsKCWlucHV0UmFkaW9UaHVtYkhlaWdodC5jaGVja2VkID0gZmFsc2U7Cgl2YXIgbGFiZWxSYWRpb1RodW1iSGVpZ2h0ID0gY3JlYXRlTGFiZWwoJ3JhZGlvVGh1bWInLCAnaGVpZ2h0JywgJ2lubGluZScpOwoJdmFyIHBSYWRpb1RodW1iSGVpZ2h0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwoJcFJhZGlvVGh1bWJIZWlnaHQuYXBwZW5kQ2hpbGQoaW5wdXRSYWRpb1RodW1iSGVpZ2h0KTsKCXBSYWRpb1RodW1iSGVpZ2h0LmFwcGVuZENoaWxkKGxhYmVsUmFkaW9UaHVtYkhlaWdodCk7CgkvLyByYWRpbyBidXR0b24gdGh1bWJzaXplLXNpZGV3aWR0aAoJdmFyIGlucHV0UmFkaW9UaHVtYldpZHRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0UmFkaW9UaHVtYldpZHRoLnNldEF0dHJpYnV0ZSgnbmFtZScsICd0aHVtYlZhbHVlJyk7CglpbnB1dFJhZGlvVGh1bWJXaWR0aC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3JhZGlvVGh1bWInKTsKCWlucHV0UmFkaW9UaHVtYldpZHRoLnNldEF0dHJpYnV0ZSgndHlwZScsICdyYWRpbycpOwoJaW5wdXRSYWRpb1RodW1iV2lkdGguc2V0QXR0cmlidXRlKCd2YWx1ZScsICd3aWR0aCcpOwoJaW5wdXRSYWRpb1RodW1iV2lkdGguY2hlY2tlZCA9IGZhbHNlOwoJdmFyIGxhYmVsUmFkaW9UaHVtYldpZHRoID0gY3JlYXRlTGFiZWwoJ3JhZGlvVGh1bWInLCAnd2lkdGgnLCAnaW5saW5lJyk7Cgl2YXIgcFJhZGlvVGh1bWJXaWR0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKCXBSYWRpb1RodW1iV2lkdGguYXBwZW5kQ2hpbGQoaW5wdXRSYWRpb1RodW1iV2lkdGgpOwoJcFJhZGlvVGh1bWJXaWR0aC5hcHBlbmRDaGlsZChsYWJlbFJhZGlvVGh1bWJXaWR0aCk7CgkvLyByYWRpbyBidXR0b24gdGh1bWJzaXplLXNpZGVsb25nZXN0Cgl2YXIgaW5wdXRSYWRpb1RodW1iTG9uZ2VzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CglpbnB1dFJhZGlvVGh1bWJMb25nZXN0LnNldEF0dHJpYnV0ZSgnbmFtZScsICd0aHVtYlZhbHVlJyk7CglpbnB1dFJhZGlvVGh1bWJMb25nZXN0LnNldEF0dHJpYnV0ZSgnaWQnLCAncmFkaW9UaHVtYicpOwoJaW5wdXRSYWRpb1RodW1iTG9uZ2VzdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAncmFkaW8nKTsKCWlucHV0UmFkaW9UaHVtYkxvbmdlc3Quc2V0QXR0cmlidXRlKCd2YWx1ZScsICdsb25nZXN0Jyk7CglpbnB1dFJhZGlvVGh1bWJMb25nZXN0LmNoZWNrZWQgPSBmYWxzZTsKCXZhciBsYWJlbFJhZGlvVGh1bWJMb25nZXN0ID0gY3JlYXRlTGFiZWwoJ3JhZGlvVGh1bWInLCAnbG9uZ2VzdCBzaWRlJywgJ2lubGluZScpOwoJdmFyIHBSYWRpb1RodW1iTG9uZ2VzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKCXBSYWRpb1RodW1iTG9uZ2VzdC5hcHBlbmRDaGlsZChpbnB1dFJhZGlvVGh1bWJMb25nZXN0KTsKCXBSYWRpb1RodW1iTG9uZ2VzdC5hcHBlbmRDaGlsZChsYWJlbFJhZGlvVGh1bWJMb25nZXN0KTsKCS8vIGlucHV0IGxhcmdlU2l6ZQoJdmFyIGxhcmdlVmFsdWUgPSAoZ2V0Q29va2llKCdnbHhfaW1hZ2VfbGFyZ2UnKSkgPyBnZXRDb29raWUoJ2dseF9pbWFnZV9sYXJnZScpIDogNTAwOwoJdmFyIGlucHV0TGFyZ2VTaXplID0gY3JlYXRlSW5wdXQoJ2xhcmdlU2l6ZScsICdsYXJnZVNpemUnLCBsYXJnZVZhbHVlKTsKCXZhciBsYWJlbExhcmdlU2l6ZSA9IGNyZWF0ZUxhYmVsKCdsYXJnZVNpemUnLCAnTGFyZ2VzaXplIChweCknLCAnYmxvY2snKTsKCXZhciBwTGFyZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CglwTGFyZ2UuYXBwZW5kQ2hpbGQobGFiZWxMYXJnZVNpemUpOwoJcExhcmdlLmFwcGVuZENoaWxkKGlucHV0TGFyZ2VTaXplKTsKCS8vIGlucHV0IHF1YWxpdHkKCXZhciBpbnB1dFF1YVRodW1iID0gY3JlYXRlSW5wdXQoJ3RodW1iUXVhJywgJ3RodW1iUXVhJywgJzkwJyk7Cgl2YXIgbGFiZWxRdWFUaHVtYiA9IGNyZWF0ZUxhYmVsKCd0aHVtYlF1YScsICdRdWFsaXR5IFRodW1iICgxMC0xMDApJywgJ2Jsb2NrJyk7Cgl2YXIgcFF1YVRodW1iID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpOwoJcFF1YVRodW1iLmFwcGVuZENoaWxkKGxhYmVsUXVhVGh1bWIpOwoJcFF1YVRodW1iLmFwcGVuZENoaWxkKGlucHV0UXVhVGh1bWIpOwoJLy8gaW5wdXQgcXVhbGl0eQoJdmFyIGlucHV0UXVhTGFyZ2UgPSBjcmVhdGVJbnB1dCgnbGFyZ2VRdWEnLCAnbGFyZ2VRdWEnLCAnODAnKTsKCXZhciBsYWJlbFF1YUxhcmdlID0gY3JlYXRlTGFiZWwoJ2xhcmdlUXVhJywgJ1F1YWxpdHkgTGFyZ2UgSW1hZ2UgKDEwLTEwMCknLCAnYmxvY2snKTsKCXZhciBwUXVhTGFyZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CglwUXVhTGFyZ2UuYXBwZW5kQ2hpbGQobGFiZWxRdWFMYXJnZSk7CglwUXVhTGFyZ2UuYXBwZW5kQ2hpbGQoaW5wdXRRdWFMYXJnZSk7CgkvLyBhZGQgaGlkZGVuIGZpZWxkcwoJdmFyIGlucHV0SGlkZGVuQWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0SGlkZGVuQWN0aW9uLnNldEF0dHJpYnV0ZSgnbmFtZScsICdhY3Rpb24nKTsKCWlucHV0SGlkZGVuQWN0aW9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTsKCWlucHV0SGlkZGVuQWN0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAncmVzaXplJyk7Cgl2YXIgaW5wdXRIaWRkZW5TdGVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0SGlkZGVuU3RlcC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnc3RlcCcpOwoJaW5wdXRIaWRkZW5TdGVwLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTsKCWlucHV0SGlkZGVuU3RlcC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ2ltYWdlX2VkaXQnKTsKCXZhciBpbnB1dEhpZGRlbklkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0SGlkZGVuSWQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2lkJyk7CglpbnB1dEhpZGRlbklkLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTsKCWlucHV0SGlkZGVuSWQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdpZCcpLml0ZW0oMCkudmFsdWUpOwoJdmFyIGlucHV0SGlkZGVuRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoJaW5wdXRIaWRkZW5FdmVudC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnZXZlbnQnKTsKCWlucHV0SGlkZGVuRXZlbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpOwoJaW5wdXRIaWRkZW5FdmVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ2ltYWdlJyk7Cgl2YXIgaW5wdXRIaWRkZW5GcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CglpbnB1dEhpZGRlbkZzLnNldEF0dHJpYnV0ZSgnbmFtZScsICdNQVhfRklMRV9TSVpFJyk7CglpbnB1dEhpZGRlbkZzLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTsKCWlucHV0SGlkZGVuRnMuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdNQVhfRklMRV9TSVpFJykuaXRlbSgwKS52YWx1ZSk7CgkvL2FkZCBzdWJtaXQKCXZhciBzdWJtaXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoJc3VibWl0LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAnc21hbGxlcmJveCcpOwoJc3VibWl0LnNldEF0dHJpYnV0ZSgndHlwZScsICdzdWJtaXQnKTsKCXN1Ym1pdC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ1Jlc2l6ZScpOwoJc3VibWl0LnNldEF0dHJpYnV0ZSgnbmFtZScsICdNb2QnKTsKCS8vIGFkZCBmb3JtCgl2YXIgZm9ybVJlc2l6ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKCWZvcm1SZXNpemUuc2V0QXR0cmlidXRlKCdhY3Rpb24nLCAnaW5kZXgucGhwJyk7Cglmb3JtUmVzaXplLnNldEF0dHJpYnV0ZSgnbWV0aG9kJywgJ3Bvc3QnKTsKCS8vYXBwZW5kIGZvcm0KCWZvcm1SZXNpemUuYXBwZW5kQ2hpbGQocExhcmdlKTsKCWZvcm1SZXNpemUuYXBwZW5kQ2hpbGQocFRodW1iKTsKCWZvcm1SZXNpemUuYXBwZW5kQ2hpbGQocFJhZGlvVGh1bWJXaWR0aCk7Cglmb3JtUmVzaXplLmFwcGVuZENoaWxkKHBSYWRpb1RodW1iSGVpZ2h0KTsKCWZvcm1SZXNpemUuYXBwZW5kQ2hpbGQocFJhZGlvVGh1bWJMb25nZXN0KTsKCS8vIHRoaXMgdHdvIGxpbmVzIGFyZSBjb21tZW50ZWQgZm9yIG5vdywgcGVyc29uYWxseSBJIHRoaW5rIGl0IGlzIHRvbyBjbHV0dGVyZWQgd2l0aCB0aGVtIHRoZXJlLgoJLy9mb3JtUmVzaXplLmFwcGVuZENoaWxkKHBRdWFMYXJnZSk7CgkvL2Zvcm1SZXNpemUuYXBwZW5kQ2hpbGQocFF1YVRodW1iKTsKCWZvcm1SZXNpemUuYXBwZW5kQ2hpbGQocERvUmVzaXplTGFyZ2UpOwoJZm9ybVJlc2l6ZS5hcHBlbmRDaGlsZChwRG9SZXNpemVUaHVtYik7Cglmb3JtUmVzaXplLmFwcGVuZENoaWxkKHBTcXVhcmUpOwoJZm9ybVJlc2l6ZS5hcHBlbmRDaGlsZChpbnB1dEhpZGRlbkFjdGlvbik7Cglmb3JtUmVzaXplLmFwcGVuZENoaWxkKGlucHV0SGlkZGVuSWQpOwoJZm9ybVJlc2l6ZS5hcHBlbmRDaGlsZChpbnB1dEhpZGRlbkZzKTsKCWZvcm1SZXNpemUuYXBwZW5kQ2hpbGQoaW5wdXRIaWRkZW5FdmVudCk7Cglmb3JtUmVzaXplLmFwcGVuZENoaWxkKGlucHV0SGlkZGVuU3RlcCk7Cglmb3JtUmVzaXplLmFwcGVuZENoaWxkKHN1Ym1pdCk7CgkvLyBSb3RhdGUgaW1hZ2UKCXZhciBmb3JtUm90YXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOwoJZm9ybVJvdGF0ZS5zZXRBdHRyaWJ1dGUoJ2FjdGlvbicsICdpbmRleC5waHAnKTsKCWZvcm1Sb3RhdGUuc2V0QXR0cmlidXRlKCdtZXRob2QnLCAncG9zdCcpOwoJLy8gcmFkaW8gYnV0dG9uIHJvdGF0ZSAxODAKCXZhciBpbnB1dFJhZGlvMTgwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0UmFkaW8xODAuc2V0QXR0cmlidXRlKCduYW1lJywgJ3JvdGF0ZVZhbHVlJyk7CglpbnB1dFJhZGlvMTgwLnNldEF0dHJpYnV0ZSgnaWQnLCAncmFkaW8xODAnKTsKCWlucHV0UmFkaW8xODAuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3JhZGlvJyk7CglpbnB1dFJhZGlvMTgwLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnMTgwJyk7CglpbnB1dFJhZGlvMTgwLmNoZWNrZWQgPSBmYWxzZTsKCXZhciBsYWJlbFJhZGlvMTgwID0gY3JlYXRlTGFiZWwoJ3JhZGlvMTgwJywgJzE4MCcsICdpbmxpbmUnKTsKCXZhciBwUmFkaW8xODAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CglwUmFkaW8xODAuYXBwZW5kQ2hpbGQoaW5wdXRSYWRpbzE4MCk7CglwUmFkaW8xODAuYXBwZW5kQ2hpbGQobGFiZWxSYWRpbzE4MCk7CgkvLyByYWRpbyBidXR0b24gcm90YXRlIDkwIENXCgl2YXIgaW5wdXRSYWRpbzkwQ3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoJaW5wdXRSYWRpbzkwQ3cuc2V0QXR0cmlidXRlKCduYW1lJywgJ3JvdGF0ZVZhbHVlJyk7CglpbnB1dFJhZGlvOTBDdy5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3JhZGlvOTBDdycpOwoJaW5wdXRSYWRpbzkwQ3cuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3JhZGlvJyk7CglpbnB1dFJhZGlvOTBDdy5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJzkwQ1cnKTsKCWlucHV0UmFkaW85MEN3LmNoZWNrZWQgPSBmYWxzZTsKCXZhciBsYWJlbFJhZGlvOTBDdyA9IGNyZWF0ZUxhYmVsKCdyYWRpbzkwQ3cnLCAnOTAgQ1cnLCAnaW5saW5lJyk7Cgl2YXIgcFJhZGlvOTBDdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsKCXBSYWRpbzkwQ3cuYXBwZW5kQ2hpbGQoaW5wdXRSYWRpbzkwQ3cpOwoJcFJhZGlvOTBDdy5hcHBlbmRDaGlsZChsYWJlbFJhZGlvOTBDdyk7CgkvLyByYWRpbyBidXR0b24gcm90YXRlIDkwIENDVwoJdmFyIGlucHV0UmFkaW85MENjdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CglpbnB1dFJhZGlvOTBDY3cuc2V0QXR0cmlidXRlKCduYW1lJywgJ3JvdGF0ZVZhbHVlJyk7CglpbnB1dFJhZGlvOTBDY3cuc2V0QXR0cmlidXRlKCdpZCcsICdyYWRpbzkwQ2N3Jyk7CglpbnB1dFJhZGlvOTBDY3cuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3JhZGlvJyk7CglpbnB1dFJhZGlvOTBDY3cuc2V0QXR0cmlidXRlKCd2YWx1ZScsICc5MENDVycpOwoJaW5wdXRSYWRpbzkwQ2N3LmNoZWNrZWQgPSBmYWxzZTsKCXZhciBsYWJlbFJhZGlvOTBDY3cgPSBjcmVhdGVMYWJlbCgncmFkaW85MENjdycsICc5MCBDQ1cnLCAnaW5saW5lJyk7Cgl2YXIgcFJhZGlvOTBDY3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7CglwUmFkaW85MENjdy5hcHBlbmRDaGlsZChpbnB1dFJhZGlvOTBDY3cpOwoJcFJhZGlvOTBDY3cuYXBwZW5kQ2hpbGQobGFiZWxSYWRpbzkwQ2N3KTsKCS8vIHNvbWUgaGlkZGVuIGZpZWxkcwoJdmFyIGlucHV0Um90YXRlSGlkZGVuQWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0Um90YXRlSGlkZGVuQWN0aW9uLnNldEF0dHJpYnV0ZSgnbmFtZScsICdhY3Rpb24nKTsKCWlucHV0Um90YXRlSGlkZGVuQWN0aW9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTsKCWlucHV0Um90YXRlSGlkZGVuQWN0aW9uLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAncm90YXRlJyk7Cgl2YXIgaW5wdXRSb3RhdGVIaWRkZW5TdGVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0Um90YXRlSGlkZGVuU3RlcC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnc3RlcCcpOwoJaW5wdXRSb3RhdGVIaWRkZW5TdGVwLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTsKCWlucHV0Um90YXRlSGlkZGVuU3RlcC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ2ltYWdlX2VkaXQnKTsKCXZhciBpbnB1dFJvdGF0ZUhpZGRlbklkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWlucHV0Um90YXRlSGlkZGVuSWQuc2V0QXR0cmlidXRlKCduYW1lJywgJ2lkJyk7CglpbnB1dFJvdGF0ZUhpZGRlbklkLnNldEF0dHJpYnV0ZSgndHlwZScsICdoaWRkZW4nKTsKCWlucHV0Um90YXRlSGlkZGVuSWQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdpZCcpLml0ZW0oMCkudmFsdWUpOwoJdmFyIGlucHV0Um90YXRlSGlkZGVuRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoJaW5wdXRSb3RhdGVIaWRkZW5FdmVudC5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnZXZlbnQnKTsKCWlucHV0Um90YXRlSGlkZGVuRXZlbnQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2hpZGRlbicpOwoJaW5wdXRSb3RhdGVIaWRkZW5FdmVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJ2ltYWdlJyk7Cgl2YXIgc3VibWl0Um90YXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCXN1Ym1pdFJvdGF0ZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ3NtYWxsZXJib3gnKTsKCXN1Ym1pdFJvdGF0ZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc3VibWl0Jyk7CglzdWJtaXRSb3RhdGUuc2V0QXR0cmlidXRlKCd2YWx1ZScsICdSb3RhdGUnKTsKCXN1Ym1pdFJvdGF0ZS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnTW9kJyk7CgoJdmFyIGltZ1RodW1ibmFpbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwoJaW1nVGh1bWJuYWlsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAndGh1bWJuYWlsJyk7CglpbWdUaHVtYm5haWwuc2V0QXR0cmlidXRlKCdzcmMnLCAnIi5odS4kaW1nX2Rpci4iLyIuJGlkLiJ0Ii4kZXh0LiInKTsKCWltZ1RodW1ibmFpbC5zZXRBdHRyaWJ1dGUoJ2FsdCcsICd0aHVtYm5haWwgb2YgdGhlIHBpY3R1cmUnKTsKCWltZ1RodW1ibmFpbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjFlbSAwOycpOwoKCS8vIGFwcGVuZCBmb3JtUm90YXRlCglmb3JtUm90YXRlLmFwcGVuZENoaWxkKHBSYWRpbzE4MCk7Cglmb3JtUm90YXRlLmFwcGVuZENoaWxkKHBSYWRpbzkwQ3cpOwoJZm9ybVJvdGF0ZS5hcHBlbmRDaGlsZChwUmFkaW85MENjdyk7Cglmb3JtUm90YXRlLmFwcGVuZENoaWxkKGlucHV0Um90YXRlSGlkZGVuQWN0aW9uKTsKCWZvcm1Sb3RhdGUuYXBwZW5kQ2hpbGQoaW5wdXRSb3RhdGVIaWRkZW5JZCk7Cglmb3JtUm90YXRlLmFwcGVuZENoaWxkKGlucHV0Um90YXRlSGlkZGVuRXZlbnQpOwoJZm9ybVJvdGF0ZS5hcHBlbmRDaGlsZChpbnB1dFJvdGF0ZUhpZGRlblN0ZXApOwoJZm9ybVJvdGF0ZS5hcHBlbmRDaGlsZChzdWJtaXRSb3RhdGUpOwoJZm9ybVJvdGF0ZS5hcHBlbmRDaGlsZChpbWdUaHVtYm5haWwpOwoJLy8gY3JlYXRlIGEgcGxhY2Vob2xkZXJzIGZvciByZXNpemUgYW5kIHJvdGF0ZQoJdmFyIGRpdlJlc2l6ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwoJZGl2UmVzaXplLmNsYXNzTmFtZSA9ICdyZXNpemUnOwoJZGl2UmVzaXplLmFwcGVuZENoaWxkKGZvcm1SZXNpemUpOwoJdmFyIGRpdlJvdGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwoJZGl2Um90YXRlLmNsYXNzTmFtZSA9ICdyb3RhdGUnOwoJZGl2Um90YXRlLmFwcGVuZENoaWxkKGZvcm1Sb3RhdGUpOwoJLy8gc2luY2Ugd2UgYXJlIHVzaW5nIGZsb2F0cyBvbiB0aGUgdHdvIGFib3ZlLCB3ZSBuZWVkIHRvIGNsZWFyLi4uCgl2YXIgaHJDbGVhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2hyJyk7CglockNsZWFyLmNsYXNzTmFtZSA9ICdjbGVhcic7CgkvLyBnZXQgdGhlIHVwbG9hZCBmb3JtIGVsZW1lbnQKCXZhciBmb3JtVXBsb2FkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Zvcm0nKS5pdGVtKDEpOwoJZm9ybVVwbG9hZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkaXZSZXNpemUsIGZvcm1VcGxvYWQpOwoJZm9ybVVwbG9hZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkaXZSb3RhdGUsIGZvcm1VcGxvYWQpOwoJZm9ybVVwbG9hZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShockNsZWFyLCBmb3JtVXBsb2FkKTsKfQpmdW5jdGlvbiBjcmVhdGVJbnB1dChuYW1lLCBpZCwgdmFsdWUpIHsKCXZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKCWVsZW1lbnQuc2V0QXR0cmlidXRlKCduYW1lJywgbmFtZSk7CgllbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7CgllbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB2YWx1ZSk7CgllbGVtZW50LmNsYXNzTmFtZSA9ICdlZGl0JzsKCXJldHVybiBlbGVtZW50Owp9CmZ1bmN0aW9uIGNyZWF0ZUxhYmVsKGZvckVsZW1lbnQsIHRleHQsIGVsZW1lbnRDbGFzcykgewoJdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7CglsYWJlbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdmb3InLCBmb3JFbGVtZW50KTsKCWxhYmVsRWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50Q2xhc3M7Cgl2YXIgbGFiZWxUZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpOwoJbGFiZWxFbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsVGV4dE5vZGUpOwoJcmV0dXJuIGxhYmVsRWxlbWVudDsKfQpmdW5jdGlvbiBsb2FkQ1NTKGZpbGVOYW1lKSB7Cgl2YXIgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJykuaXRlbSgwKTsKCXZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CglzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdocmVmJywgZmlsZU5hbWUpOwoJc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgncmVsJywgJ3N0eWxlc2hlZXQnKTsKCXN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTsKCWhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTsKfQovKgogKiBDb29raWUgc3R1ZmYKICoKICogaHR0cDovL3d3dy53ZWJyZWZlcmVuY2UuY29tL2pzL2NvbHVtbjgvaW5kZXguaHRtbAogKgogKi8KZnVuY3Rpb24gc2V0Q29va2llKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkgewoJdmFyIGN1ckNvb2tpZSA9IG5hbWUgKyAnPScgKyBlc2NhcGUodmFsdWUpICsKICAgIAkoKGV4cGlyZXMpID8gJzsgZXhwaXJlcz0nICsgZXhwaXJlcy50b0xvY2FsZVN0cmluZygpIDogJycpICsKICAgIAkoKHBhdGgpID8gJzsgcGF0aD0nICsgcGF0aCA6ICcnKSArCiAgICAJKChkb21haW4pID8gJzsgZG9tYWluPScgKyBkb21haW4gOiAnJykgKwogICAgCSgoc2VjdXJlKSA/ICc7IHNlY3VyZScgOiAnJyk7Cglkb2N1bWVudC5jb29raWUgPSBjdXJDb29raWU7Cn0KZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHsKCXZhciBkYyA9IGRvY3VtZW50LmNvb2tpZTsKCXZhciBwcmVmaXggPSBuYW1lICsgJz0nOwoJdmFyIGJlZ2luID0gZGMuaW5kZXhPZignOyAnICsgcHJlZml4KTsKCWlmIChiZWdpbiA9PSAtMSkgewoJCWJlZ2luID0gZGMuaW5kZXhPZihwcmVmaXgpOwoJCWlmIChiZWdpbiAhPSAwKSByZXR1cm4gbnVsbDsKCX0gZWxzZSB7CiAgICAJYmVnaW4gKz0gMjsKICAgIH07CiAgCXZhciBlbmQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZignOycsIGJlZ2luKTsKCWlmIChlbmQgPT0gLTEpIHsKCQllbmQgPSBkYy5sZW5ndGg7Cgl9OwogIAlyZXR1cm4gdW5lc2NhcGUoZGMuc3Vic3RyaW5nKGJlZ2luICsgcHJlZml4Lmxlbmd0aCwgZW5kKSk7Cn0KZnVuY3Rpb24gZGVsZXRlQ29va2llKG5hbWUsIHBhdGgsIGRvbWFpbikgewoJaWYgKGdldENvb2tpZShuYW1lKSkgewoJCWRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAnPScgKwogICAgCQkoKHBhdGgpID8gJzsgcGF0aD0nICsgcGF0aCA6ICcnKSArCiAgICAJCSgoZG9tYWluKSA/ICc7IGRvbWFpbj0nICsgZG9tYWluIDogJycpICsKICAgIAkJJzsgZXhwaXJlcz1UaHUsIDAxLUphbi03MCAwMDowMDowMSBHTVQnOwoJfTsKfQotLT4KPC9zY3JpcHQ+CiI7Cn0KIjtzOjQ6InR5cGUiO3M6MToiMSI7czo1OiJvcmRlciI7czoxOiI1IjtzOjM6Im1kNSI7czozMjoiOGRmMDc3MDAzNjE0Njc2NjYxMzBkYWE5MDgzZjU3NzAiO30=

Last edited by graumeister (2006-08-23 01:16:51)


Samui? Samui! (about the life as farang in thailand)
David’s Neighbour

Offline

#2 2005-08-20 07:12:45

colak
Admin
From: Cyprus
Registered: 2004-11-20
Posts: 9,090
Website GitHub Mastodon Twitter

Re: [plugin] [ORPHAN] glx_admin_image_resize

hi graumeister,
firstly a big thanks for taking over johan’s wonderful plugins.
A request:)
Johan also wrote another great plugin the <a href=“http://johan.galaxen.net/logg/63/textpattern-plugin-glx_if”>glx_if</a>. Would it be very rude of me to ask if you could take over that one too?

Last edited by colak (2005-08-20 07:47:20)


Yiannis
——————————
NeMe | hblack.art | EMAP | A Sea change | Toolkit of Care
I do my best editing after I click on the submit button.

Offline

#3 2005-08-20 07:20:50

druzli
Member
From: Denmark / Iceland
Registered: 2004-06-28
Posts: 60
Website

Re: [plugin] [ORPHAN] glx_admin_image_resize

Nice of you to adopt his plugins, I really like and use alot glx_admin_image_resize. Will post here if I think of anything.


regards,

Agust

Offline

#4 2005-08-21 19:05:21

heikki74
Member
From: Finland
Registered: 2004-08-17
Posts: 100

Re: [plugin] [ORPHAN] glx_admin_image_resize

Hi graumeister, you still have one place to fix:

// get the upload form element, the second form on the page var formUpload = document.getElementsByTagName(‘form’).item(1);

to:

// get the upload form element, the third form on the page var formUpload = document.getElementsByTagName(‘form’).item(2);

Offline

#5 2005-08-22 12:17:21

graumeister
Plugin Author
From: Ban Bang Por, Samui, Thailand
Registered: 2005-01-16
Posts: 167
Website

Re: [plugin] [ORPHAN] glx_admin_image_resize

kiitos heikki, i have fixed it and put version 0.5.2b online at grauhirn.org.


Samui? Samui! (about the life as farang in thailand)
David’s Neighbour

Offline

#6 2005-08-22 13:05:13

druzli
Member
From: Denmark / Iceland
Registered: 2004-06-28
Posts: 60
Website

Re: [plugin] [ORPHAN] glx_admin_image_resize

The .txt file still says it´s # glx_admin_image v0.5.1b. and also the plugin in the list of plugins in textpattern admin. But seems to be the updated plugin working.

Just so u know :)

Thx for your work!


regards,

Agust

Offline

#7 2005-08-22 13:13:18

graumeister
Plugin Author
From: Ban Bang Por, Samui, Thailand
Registered: 2005-01-16
Posts: 167
Website

Re: [plugin] [ORPHAN] glx_admin_image_resize

druzli: takk fyrir. its fixed


Samui? Samui! (about the life as farang in thailand)
David’s Neighbour

Offline

#8 2005-08-23 07:47:10

druzli
Member
From: Denmark / Iceland
Registered: 2004-06-28
Posts: 60
Website

Re: [plugin] [ORPHAN] glx_admin_image_resize

Hehe nice icelandic !

Np, anytime


regards,

Agust

Offline

#9 2005-08-23 11:15:05

graumeister
Plugin Author
From: Ban Bang Por, Samui, Thailand
Registered: 2005-01-16
Posts: 167
Website

Re: [plugin] [ORPHAN] glx_admin_image_resize

@colak: sorry, I managed it to dont read your reply ;) is there anything which needs to be done with that plugin? because Johan will come back and I dont want take to much work of his shoulders ;)


Samui? Samui! (about the life as farang in thailand)
David’s Neighbour

Offline

#10 2005-08-25 23:48:20

starzabove
Member
Registered: 2004-04-13
Posts: 76

Re: [plugin] [ORPHAN] glx_admin_image_resize

Thanks so much graumeister! What a community we have here!
I had a client very much befuddled by how the last version was appearing in the top right of the image editing window in 4.0.


90+ Textpattern installs and still going…

Offline

#11 2005-09-20 19:23:52

andjules
Member
From: toronto
Registered: 2004-10-20
Posts: 44

Re: [plugin] [ORPHAN] glx_admin_image_resize

yes, I also saw the form postioning glitch. thanks for fixing.

I don’t know if it’s a bug, but i can’t seem to get a resized, square thumbnail – please help – when i click ‘square thumbnail’, no matter what other checkboxes are checked/off, the thumbnail ends up being square (good) but it’s not a ‘thumbnail’ – rather a full resolution crop of the top left of the original image

Offline

#12 2005-09-20 20:42:17

heikki74
Member
From: Finland
Registered: 2004-08-17
Posts: 100

Re: [plugin] [ORPHAN] glx_admin_image_resize

I don’t know if it’s a bug, but i can’t seem to get a resized, square thumbnail – please help – when i click ‘square thumbnail’, no matter what other checkboxes are checked/off, the thumbnail ends up being square (good) but it’s not a ‘thumbnail’ – rather a full resolution crop of the top left of the original image

That’s how the plugin is supposed to work. Txp has it’s own thumbnail generator which has square option too.

I did modify the plugin (0.5b) to do square cropping differently. If someone wants to take a look at the modified code I put it temporarily for download. Check out the “glx_image_resize” function and inside that the part about thumbs.

Last edited by heikki74 (2005-09-20 20:44:49)

Offline

Board footer

Powered by FluxBB