Greasy Fork is available in English.

Google Direct Links for Pages and Images

direct links to web pages and images from Google result.

// ==UserScript==
// @namespace          https://greasyfork.org/en/users/794317-colar
// @name               Google Direct Links for Pages and Images
// @name:fr            Google Liens Directs vers Pages et Images
// @name:zh-CN         Google 直链搜索结果网页及图片
// @name:zh-TW         Google 直鏈搜尋結果網頁及圖片
// @description        direct links to web pages and images from Google result.
// @description:fr     liens directs vers les pages web et les images des résultats Google.
// @description:zh-CN  令 Google 直接链接至搜索结果网页以及图片,跳过重定向及图片预览。
// @description:zh-TW  令 Google 直接鏈接至搜尋結果網頁以及圖片,跳過重定向及圖片預覽。
// @homepageURL        https://greasyfork.org/scripts/429493
// @license            GNU GPL-3
// @author             Colar & VA
// @version            1.1.20210716
// @grant              GM.getValue
// @grant              GM.setValue
// @grant              GM_getValue
// @grant              GM_setValue
// @grant              unsafeWindow
// @include            /^https?://(?:www|encrypted|ipv[46])\.google\.[^/]+/(?:$|[#?]|search|webhp|imgres)/
// @match              https://news.google.com/*
// @match              https://cse.google.com/cse/*
// @run-at             document-start
// @icon               data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+UHEBUqKsZZz3sAACAASURBVHjazZtnnBzVlfb/t0JX5+7JQTMajUZ5lJEIIgmBEMEIiRxsMMHpdQAWdh1gF+PFYR2xDXgDNvbaBpschRBBSCiHURpJM0qTRxO7p3N3pft+GAmEF4y8y/7e937pqtt1763z1DnPueecKvgb29JPLQTgU0vOUU7sX3zpNQqAlFIFooB2/L8FNY2M/vfX5/7hD3/I3XffzeWXL39/3uVXiznjxqpLFl+g/uRXv1QAfvKL7/H/RWsop37u1LoZx4QG4HOfWfaDO7969cHbb77goWsWRSZcNBvfqPDqR85z//0f3v/u7v/a988/fUyMjjn3/43QZy2YKACuv/H8BeedVtpxycIp+SUXTP0ngFOmVt9/z+2nye4DP5etO/9F3nXrKfEALAS45WbE8TlO1IT7j0kvP0I9brrz+1XFJRVXzTtr0bI/rnhpGsCdD94gfvHdZz8ReZS/dUCRjgrQub/lwcsvXzz2C59eaIyN5h+49rIJT86bWfHtr35xIWOK+t1x4TSl0VA0AwZA03ah3vyZRYojb0eI90F44IEHOPicRAghjpvQ2mPq8m+P3Fcz2Prmi2fMn/D0xLHG8y//5qd3AUzy1Ghfu/dK5s+f/x6A/6vtsuuv/8D5526/4vpz5lRYh5q+Ld2OX8qtz10j501U5X13nCZl+rtyeN8NsmftzfKhb50rK6q48C/n+/1vygB49dXJH+j/p+8/OOe2L9zw7OLFZ7xSFB1zys03XXLN33/lArlj/b+42zf9Qn7uM2cevum6Rc899Mgva08cd8stt/zvasDZBw584DydTJ7tC4U1r8d2kuYRKoIayxfNdBae3Qh2lkI6j6vlceQIyaMMAZT5OePqK0+bD/CZWwe5/fZp4tJLW9+b89bbLih9+9WnftHbtueK06YFLj1zTvTVw80bfzS2JMX0+oKYXZ+XN18xfXw81rX8zi9/1T3xfh5//PH/XQCOzpjxgfPK6spnjnTHh2MjA2okGiJcWsQ37lqinn96PW7WxLZ0LNdPZ5+JBTcsOrvuoc9/5ZoNNVWlm7/yxcu+vuvIQf2xx/bJE23/N79+Uw1p6ZIf3n8t//SNK+W937imorG+fOxTz+1nIDaCdA6KqbUutVGd+snjrzvxfm67ZbnyvwbAFOBnv/0ttfWh9/p+9tAf3j54ZGj9utX7QI3KSEkUxatDPkUmaSNFmMFhjdfe6pGNDcG7//7vr7rjnr/7DFPrx4hNW/bedvH5lxUBdLT8mmOmDyAmTKinvMiAQoeYWjXI9VcuoKGhgv7eDsxMChcpxzWMIRMb/jGIX8+fM+FPSy86deKvH3/eLY6M5X2SlZ8MAPfffz8tx4672lIAnDlv7JUXLmhoU2DR8y8eJNXbI1w9g0MGU3HxRwIIv48/PbueXCwpvnvvMueii2sdJbuGykof2aFEoretxQaom3LbictZTS1HenbtbUEfU0m2MMDYkgL33n4aVUUKfUf6sW1HJHMpWeq35JO/vffWL14389qhjr2vXH/jPWNiiU7OOOViAZwI6v8MgAceeGCUnK5uFABLzp151bxp4WduvfW8cffeeUHw3LOKpD8iEA440kLzaEhFEAwHOWPBFH772DVceukkNXu4SU20HaHv6CBD6azyl+t+/QYEMLx+Xdt9K17fm8/GVCIlEXRfnKhX4HEVbFclkzKZURMQD/3oRnHdp8dxzdIGOX1G3STV3vkbgHnzosrIyMgnawKLzlrMt//97tGL/Xz71s8v4ZLzqrllWT23f3qhUF0Dx1Lw6AaOm8PKJikKKVy9bDKLLpqPU8gRi1sESqKsW7eJseMmGN/91j0fWOPwExzX2f2rVu7747o1e/EXV0vLtsjJIUaG40gRwnZznH/2TBafN43eppUkEnGmTBvD7ubNXoD1W1cRjUY/WQC00jcQ0UMA+LRcorpMQ1O6CBWl8Ic1kBJh65BT0DUvPq9GLhkjm+3HzbXQ1d6GIqt4c+MwmzYdGawsKfnWvd/78dCJazwDnHoKKpA8WnDeeuOdPWSzuIFwFNPN42ogAJ+EUMRHarCZzHAvqswIaVmEi+r6AYLeIlRV/WQBaH8BWh4ZdVf9R+N0HBzAVxQmUlaM1yMwcVBVHVsB17LAUfEaPvweL9m0ietGSTlB9+lXD3KwT/nmK2+88xIgbr3yAiG8ATGudrJg8nQWXPsDCfDpG28f6OrN9x3YP6gGQmEJAkNT0J0RcHIkEp3Eu7rweKIyllLYtvXIwLp1zdcArN1wyHEc55MjQYDPnHcG218eBaC0uDy4Y+8AiCiOqSIVgcdRwSngqiZmvoBjOYhCFCcbJBE30XSv++7W/Upvd2z38uXL3jpO1L959k0p8xnZ3tUqaW3moX/4hgvwy4d+/lYwWPxcwY7i9XktcHAViWJo4LHJDA0jNYHuKRavr+5ifdPRsi9+/pbrAO76+68qnygJAvzj6o38LtAJQF/K883BkQw4IZAGHumFQh6pueiKiRF0EAgc28BRI0Q8QUaOxtyXn1+HYsUef+7559oBD6Af+/VApWfFUz81TgyoDLXsx4lUbq/U6j2GP0whZSIUBTQFKUx8IoI0LQIhTc4/63QRj/V+DaDzUJtywQVXfHImcHyfrXcnAdi8cefb/f0jmcRQFt0oBVfFDoLj5HBdC4GNIh2EYiIooKkG+zuHtTU7+pvX7TW3+kvGPBmqnhDzlFT26P5Qb0V9Y+9pFy3o/eVzOwZu/uItrWect+CacfMubBz0loTfWNuZ7hsUjJm+CNcTxXQsClmTUKgIiYVterj4nNPFxedOJpkcjI060hbZ1PTc3wSAdjJusEYPAmlOa6Ck80hv4K3t3Vxx8UykE0OTEnQFV6pgS8BBUUYQIovtVxk/UaW6zNM4c8GSdWPrJ+GqCpGIJxANlpBVFMhapPMm6eGBcNWYaX+uCYXx+1RWb+wkaya59rKZlAXL8RgBnNQAicwwnqCByKoYbl729R4WdZOmFbOqibPPny/+8PSn8Pke+mQAON6+9fJ8+e/Fq9l8mJ4z1PjPVrzUfNfFF13o+LSkSrIPDFCkCg6ADR4QwsVnqPQezVMeLRY3fPZWWTV2qogN91PQC1LVDGE7EpEBrxGSakCI9NBRmTJzZGybSHmV6N69ie/95GXqaw2+dH0jpUUNOPZRrFSMorrxciRli8NtXSQCk74NsHtvqfu3CA/wsT7j/vth+SXtfPnW68TWHc1cfuOXejoO7f4/waKoMm3WTBd7SOBmGY169dFBHhtUCXqQkUGd1Tv6qJ8yR7ieIImsRV46IpnPkbNMbMckbwuRypgohiakTwjNUMTY2mlMmjibcZNn0t7j8MIrGwj5DRoaJuOKapkoKOLhR59zn3mm/fymHdvfAtjRtOU9+p80/1x1uLdDnjJnGkf7Bv/7AKxZA0ZJCRs3bAVg6+atA7WV1oZtu/ourSrR/A2TSiBfAKmCUJFCRWoSoXhAFkGgms3b2gmWziRSVks8k8TRDXx+P5Zt4ipgaCFcqWI5aWyRRVdUzIyDK4MYoWrqJ86nbNwsmnc2s2bdNiIN88WTf24aevh3TUtzktVSSuNAV98NLQeapzRMmnvqAz96KP2HR388DHC0b5BxdeO44847WLNmzX9HA+7nrdde4+IN+zn060dG84LLLg+//dqaG1pbO4IXnb+EYEUJrm1hO16k7iWbFyTiGmpxLT2JCg73QOvBTmomTqAkWowrc6Tjw5QHy1BVD24hj6Yq2JhIt4CmBMBScDAxHRtX1QmEi6momcrh3gxvrNxEfHjwP4+0DzwMsGrTnqdLy8q/Nf/0s672BI3LV614eenQ0cTLYMYBMZIY+VDhT1IDRgceF/7L9373/Hfe2bBmoPdouKMrLQ/sbxVKoIbaaVPobOslnjOwfXVs2WMxMOKnKx7B8lZRyKcoipZwoHUf61e/Q0frAXZt30JRuJjSkig5J4l0JB4lCA7Yronq9YDQKagWpumgq0EmzD4FxV/E4c5EW8/hlqfPXrL0+Zlz5y5fsHAJuuGnsroCCzWqCHtZhdnz+GCO/OLFl4gjRw7y6s9/zhMrV/5tAACcc+rZoqOnk0eeevmCN15/41VdNTyhaFj2Hj0qWtpjHOkYZuHCBfQNJNl9IIerjcNVo3T1O6RNHx49SP24ibz52ku07G/mjDPPpWpsPSPDw+xv3YtpmUxoqEegkc+lUL0aaSeHqhl4VYNcwcSjCVzbIV/IUddQRyDon9jR03VnJBCcu3TZlax6fSUvvfIiqWSCmbPnkhxJR9tG5I7syMDevK9XpAat/yL8hwLg9Xqxbfu98y/ecbd49rk/SYCsye9DZWX1Cy+6RAai5SJSVIXH6yFSWsHhbhPXW4kWqiJuBokVQuQpxXFsqsoivLLidYbjQ9xwy2eZPHECJaVRpk2eQ7gowt6WFgYH4tTV1qIbHgp5id8XxrVtzEyakCeAKgWKYaHqEh8a1VVj1K7ePn9sOCZbm3eLFS89RSKZZqBvkJmNU5k4ZRqDQ8Pje9ta/j05YIrWXp3mprc/HoDjwmuqensoEp68fs3qPQCNc+d/2fAZn7/u5luFHi4RBUtQ2zCBxlPmM2ZCI1YwjAxVoIdqybkGlhrAUX34A1727NvB1m1baZw1i/0tB1i94nVUx6KutpIDB1tIJpOEfQa2tIiEy3BUjUKuQEjz4/EoDA73kMumCQUDdBw5yPZtO4inkyxZdJ5MZ3PilSd+DY4JBQczmUFRNU4/50z6O49UX37FhdkLFy1Zf1z4h3/1K1a8+uqH7wMMX0gt5FLzoqUl54VDoX82DP32xEiCnz3yH1e9s+bdhxvPOh0Q0ikURM3YGgpuAceRaD6DcvII1UCaNnmpIhyXYFAlloizZu1Gzr/4Ig7uauKl3/4K8LHu9Ze44vpl1Iwdz8531zBt9gxCRRFS2RQ+XwShClzFoq+7nXwuCaZN+96dKLLA/OmNxLMF9rTuF7NOmcPqhllUlZcybcZ03nl7LRvffpN5p58mJ02dIiJefe6JMuYGBz96K2zhqMBMj+45I53JaI5Uzga4/zv35QrSoaFmql3IFoSDQ85O4NF0vJ4QhUIeFB3LtslYaXwBQcRwCKsaG9e+RWV1NZMnTGXSpEnMX7gERQW7kOS5J55kx+YNGLrFujVrGOrrIBKNYpkuPl+Avt4OetrbuPPm67nztquIx3u57carufvzt/KPX74VNzlCaijDldffBF4fDdNmsPymmwjXT6K1uRnsDH2Z5AdJXdM+GgDNMR3g6fjAwKBqZU1dcW/77N33vDZ24ow7y6rqMDRDtSwb18njUT24jovrZlCFQ97Mg2vj1/yQLWAXksQTR+nrbmPy5HriA0fRFJ1ocSlSsVB1Hcey2Lp+LblUnPxgL+vfeIP+rlb0iIIrTEbiMYSQFBcFqamq5TPXfgpdG7VaQzfIpjJYVoZFiy+lqm4iK1auwBcOsPTqywmWRETTzv29Scf51xNl3PLNb340AB5FcYF7JXJKdXnRAhzrjCN7D5Sqtn3BzFPnMWKZwnZ9aG4IYfkgp4Gl4lE96Ioft+DBJwIkY8N0dbTTumcLrlWg2B/BMjPs3LGJtkMHuGTpMvzBCFJCOl1gaCCOEQrQ2TtA06ZtCCsDmqSorIihgR6GYsOAIDmY4O/uuYetW7fw04cf5sjhFmprqkhlBjj/wsUEQxGGjsaoLa2hsmo8A/2Jnv/8/vfX/OvupNJ45x0ADPxFqPwBANJ5EyHET23HvWhXa/f21gPtm9aufOly1WtYQdWH7YLm8YCrIW0B6mjsragahqMSEDq2XSA+NEg2bTPc24fjKPhLK1AsyaZ1G2mc3sid93yD8y69GkXzjxKvaaMYfnRdwbbB4wlhFRxqa+rR8PK73z/HG2vX8eqa7Rxu7+Hipcv5zeNPceY5S/AHKhgaSeIJeVl8+afo6e6kUHBIJweZMq1h1JPNDLvXRAYFwPIr/nowJKWUR4+Dkxhy1AuvvPA2X7BE94WDZFNpECEcKVGEBGPUY8i8gm1b6KpGLB4nlcoRDQdQPD5c6SBlAYI+HFsgFR+W9LH0iutAFljx7DPY+SR2vsAZC8+jZmwNtinBVMkV8py6aCFNTTvY3Po855x1HucsuZhDh9oor6ylqrSCWDoOhhfbdiirqsJ28+xrept0fIjk8GDN7Dr90ZJSzxP3P/DEOinhL3MlH7oRWr58OS0tLdIsDIfa+wceKa2sL544ZQYpK4PUFCw1j6vaSOGgYAMKQlVxEAz09FHIpdB8ElUoHDhwhMrSKmbMnsmhAwfZf7CN2inTKBlTTNW4eiIlVXgjpUyfPZ8ll1xMcXk1riuwXRCo+AJ+xk+ZQN2EiXgMAyUcpWbqVPzFEYZzFraQ+Dx+KAhUDdz0MC/8/jGmNNTK2266LDhp6oT5iQItzfu6N7ghWLvqJBIivmNM2d034OQtN6MZGrgaQgvgqCaaEOiqhoo6OoUqUFRQ3ByQR/UIbEcQKSsnXFzE9i1bMHMml914A4NdnbzywtOkChaqN8x5S5Zy01e+xtIbryNYXIERLUUoBl6fQNEEriMwlFIUqeM4UEimeP2ZP7BhxStQSBP1R8kXnNGH4EimT5lGzdixTJpULT77hZvtWbNm0dHZnwe45XPy5DJCKZ8PgNbdTUKxLMWrqUjNQXUVPK4HXWooUkEIbTSrJQVSgqIIfOEQUtGQUqWQszn1jLMZTgzwxFN/YvqEBq666VoCgRBWMkUhnSaRHsGVKgUHkrZLNltA9WlYTgHhtUimkrzyyvP0d/bgEyo7V/6OqkIv/U2rePZn/0yisxOfKrDVHPm8TaSyhkuuvIYdzW10HehRmndvIdF9xANQH77o5BIiL7eOJkF37T8sS8d6mKZouKoKigO2QBqAC1gCtNE6pWubKLqXomCIzEiSZDKNdPNEi4uYf9qZbFi3lqf+/DRLL78WqSok4gkCAYEUHgbiw5hWnoA3iKKo2E4Bqbk4qiDvZmnZ30TzuyuoLVGZMTnEvzx4J2+s3sKya7/LuZd2UVo3BgoKlpkllzeZNXcBuzZt5l9+/oja17P7rUKGF0Yle/0ko8Genvc8o6Xpt02bMaeifnIjZqEAjgLGMcXJH/vVXBTHRVUNPJpOwc6TyWRQVbCtLEXBIKXFxbz42iqatm6jUMhgZzPEhodo6+jk0L59SCmoKCtH90oKro3QAFfi8WtcePZC+rt6SHWt5cHv3IC/zE9bRy+HWmOcdcFylLCPWLyf9EiSXCqNzx9k375dvPD8swebm/sujhXo+d0f68TsmQkefBDefvvjUmKKAu7ok/W4OXQnh5NL4YpRNceVo284iONGJBAeL6abR1N0Kqpr8Hh0YoMxUiNxYmacspIiLjnvXNavXcOKF57CZxgEI2VEy8spLiknWhRBEQ75pIPHFyRfyKDpCtUlZRw9cJhoMMvf3XcHDSUlmCP9tOzaRXl1FcGyatL5PANHh9m/ZxcdnR2UR0IEg8VU188Yad+7a3j8Mr92843TbejgvvtOJifonlh+F1i2hZnPIVQPIMBxRk1AlaMmIEE6FqqUuMJEQSUaLCISKSUR7yeTipFIJKmsreTqW25luKcLw/BjCQ2PV1BaWk1FRRWqrmJIBQWDUNhAOnl2r36X5i1vcu0lp7BowRwwbAqZBE2b91LTeCMIG2EJiqPFZLNp/L4Ak2bOp76qhP7Obg3wHn4+k/+oWsHHJkUd28IGTCnRhMAVJ9CnGBUeW4CioiKwMLGFi+oxUKWgqLiKcLiUopICBTON64J/wkT8/jCuZaIaHvzBIqQiyNo2hsdAFDL0Helg/auvMDywl+/f9wUumD+PfLqbvp69vLu9F1Pq1NaU0n64Hcs2qaqr5Zrrb0ZRVfzeEG4+waQpk+ZEQr67hRAPHpdn4YIFvLNhw8kDECoqwx/wkxgZpKx0LFJ3R0tPHg0sZxQATSIRWLiAhhACF3BcB6EoCN1LwOfFLyO40kUIEFIBMbozcaQE10EzPLimyaY1r7FxxZPMnlzOoz/9GvPPPIXOzdt4ftUK+rv7SeZziEA10WCIQwe6kQoEImHKKoqxHEimh4kU+eSYujqxfcPmuhPlKSxYACcA8HEZIU+0asxtjbNnVQjVi+LR0P2+UfXnGBf8lfae2kmJlBIpjvcJpBjF7ngdT2oKiqqSTydIx4a5YekivviVGwiqKmuffZ7nX3+GPc3dpN1S9hwcpHLiYkwlgm2Z+DxgYJNKpkfBVBW8HlXIgklXT6f3qmuWbtm8fmMvQPcJwp+UBihWHum45DNZcsE8kaiOKUxw3FEStI8JqZ5EQVJKPnCVFCcwDTi2jeYLcua5CykX/fzHo//BWytfo6G+hLHjG+hKmYz0xSkfM4+K2inEknG8XoPk0AA7tm0mkc3hN3wUlRYzc8Z0pk2aaDVMnDjtQNvAImDbynuv5aLv/vlvqw1KVyIUFceV5DIFTGkhVAWkhZDgKDaOV456jpNtArAVKKijblUBHIlwXFQEubzkje3tvLL2AAURJVR3JtsOCjZu7iUQrWP2ggvJugWUgEZZVSXRshq0YJi87dDedojVb63m8d/8J6+vfF2oqkbz3kO9AAfCkwXAHXfc8YFb+TDdPf4iX7CifsKGS6+6foYWLAZNp6K2gqJQMW7eROgeLGGDJtAcHaR70gAotopUJFK4H1zXtZCui6EFwM6TTIywZe0qsqkEqXiGaMUYZsyfR9IuEC6JMKakBk3z4fXquEiGhwZoO3SAjgOH0B3TDQe8Sl9f39MVE2o+/6efPzRy2nnni82r35J/3QROqK8bgWI0EUQVOtlclsxwgpJgMa5QkAqoeKDgIFT3ffUWjLpGJOLDMJYWUrXev3C0E6QCrkDXBFk3i+6J4C3VOeX8i0kOHOWZ3/8RxevFzmWoGVeLL+ob9SyWxMq6uFISDIc47ayzOW3+2Yh0RskX0qxd9+bV695e9wiwBikUjhXxPtoEli5977AkoqF6bFAdFE0lGU8RH4qjezwgQZUC1XURjgBXjBKkpoBHxRUSifshIKhIVCTKMR5Wjz0LFRQFV3pQFB3TyoA0KS0vJlpZh+LxoSARKKQGhpAZG0MzUBQHKR0kFlbOIhnLEEskiZl59JII4epap3tPez+A6ygnQYLJ9/Nolu0isUGA0FTcrE1seACPX+D3l+BaEokDlud9OF0JmsTj8SIte9QdfmAjonwEMYzuLl0kigRVUXBdC8s2CRh+vIoCQkHXDYaGhrClQzhShtfvx+v1o6gSYY4CqnhB4qL6PYRCAfWSay+7qNHfcfBHj69yPp4E33nnvcNMxn2PKoQj0TSN1MgIfV19CNdF0xWkpo/O5HXB54IUuAWJaRZw5cm+sSE/pEcihIZ0NVRdxxsOkc7mkELi93nJpQr09HQy0N9NIt6Flc0hhINHGy3TGo4km0nj01WCgcA/rGzKVwCce+65Jx8LvHfvQoLtohkqeVeQSiaJxweJFEXQVA/uceqQEnQHcWwIuB9FtSf9DocrVXyGTumYSnq7OnGsPI5jU7A0EsMDDHR3YuYz5PMueAzKyioIRELkMjnMzDAhw8fR3qOJPbs2OCeW+04qFpDSxTZdvF6wHBezoOD3BynkC3T19JLLZCgqK8Lni+AgRx2BkIySuwKK5H/cjnlZr8+LtCWKEOiGweDwUbZu2UwqncYfKULXFVRFZWRkkFAwjK55qRlbRVm0iJ62feqHeb2P3QiZjoN0HKy8A7oG2NimjeHRyKZMhqw4OcukvNTC5w+g+ENI20baDijiQ1X7pPYJ8tiBcBBCQUqBZTm4ioKiCITtMn7SJGZMn0NBkYS8QbweLyjgShdXOiiKIBAJkxo8itD8IDwgzb9tIySEglAlqleiCNAUB6w8miIwvAIUh1QyTVd7DwO9fdjpJIqiYAS8aMJ93xQc530XO2oraFJFsV0UoaChgWWjomDnBFJV8HkVhONiGBrJxAjdvf2EAyGQGpZdIDGSxHIkNRXllIRLUBQvUhhoehhFRMgroz5oMJFF9RhMGT9B/s0aYBcySCuHrhYhLYFlmXQeOoyr+pg4dQqa42IdE254ZITEyAj+UATDqxMMhIiEShCKgqW4uLaFtO33SNHWHIR0Ea4GQqApCo5pY6hezGycIcvCSqfJmBaFdJ5sIkZV3SRcV0NV/diuxeDwAAMDR4mWVFBfN45stoCCgkcVmI6OEBapVApd9wbnnjVXbTm8D667Dv70p5PTgEIygWOrqMIDroXf8NMwbgKulWXru2uQrkPA78NxbQwF8rk88eF+Bvv76ezspr3rIMPxASwzg6oIPIYPTfeg6QaapqEHfAhZIJ9NYCJxyZLP9DEyMEz7oTa6O7px0hl0yyTi0yku9iF0iCVSHGrezaHW/SiGn2Q2yWBsgFAoMrqXUB00FzShko4NEx/uf+H8RRckgPeE/2gN8PkglwNQ0qmcb2gkSVmNpL2jjWwyyZxZszj/vPPZuXsHq19/nQlTpjJhUgMKCpYq0AIC4TqYZoF4rEAinsajK/h0A91QcYWGkDZCU3BdQS6TRdd1FF3HcF2EWyARK6C7El/AQFds1m5dR2I4RsgfwbEsiqIhbKeO3Tt30Hq4jXAwQElxMWNr65k2czYBvxfdJ9FUD9lMVq5/7YV/Xf/aCxnfaWepuc3rnL8OwLJl8OST1I33OxkzcnBkODZB1XUsy2VX03b27NhCSXkl5dW1lJRG2LjuLQb6epgzdz5FoSD9qRSKUFEUFdURONIkVXDIKXkUZTQH4DoScHFciaLqOE6O3vZ2eg934LgpwiVVNE6dQjZrs33nbvbv2sVZZ5xFdVUl/X0xbNdmzvxTWXD2QjauW8dAbxtDI0Os2r+XN1e9RElRCQsvWERVSQnxjsMiVFzjS8W6aQS2fWxStLl5tDIUt8xsMrE7Wlrx+QmTZpk4PQAABVxJREFUJisqAlRBeWkp+YLJYH8PdWNqmX/6Ajq7exkYGKKiqpySSBTd1dBVsKRE1VR8HoGuOygCdE1D11X8Xg/+QIiicJTdO7axfeMGDF3F79fweb20d/XStG0r4XCYkOKhtKKS0spqNE3FH/KjKF780SBTJk5k7vxTaJw2g9kzplNdXk53Zxc7tmzmcGsL4aCXBafP/s2O7du755wyWznY2io/lgQVDFwKAIWjnX3093URDJYyd/aZ+II6iuaguwpNm94iP5Bn2thSnn/hFWJ9B1m4eCmmaxAJhykK+XClLaXlYAspvD5DOjaiYDlkEkmy+V5ifUm8uoerb7iO6qoxHDx4iLb2biJRg8bJ04gWh3j26WdwhEBTIR4bJDaUYGToXaKVlYxtqKe8tJSQL0R1RQ31NeM5/YxF7GjayovPPcngiM64SZPV0RSEdnJewBXyuAtXLVzbdB21srKM/v5h9jdtxWc45HMuTn6EoooAK1etpr5Mpyqa4anHHkZ4i2UwFLSLKkr0iNcrAsUVeA2N4digMNMJNzmcai+pqXdjg72BVCxR+alrlovyqnJymSxja2uoHVOPI1z8us6+lhak4zJj6kS2bdjA9s3ryKaSFDIJ0HwEwmVMmDqZWWecyozpcygLV5Gx0py5+HxHOin12T/89qePOfFNAN7dO52TekmqYeI4EY/FZSTiq/J6A19VNB+GTzDSe4TCyEG+dvuVrHzpRa5bfir33Xsjb6xYyanTa/nGPbfy56deJzbYJ8IBRx3sPrwzZ7mbXSGPDHV1tuSSuR6vT398z5Z370gXfI/0tGw6NG3W1MtmzZmr9Xb2sGnNKnIDLXhFin3NO8gMd3Bg7y56O9uJ+A3MQpZA0EdZeSkVdQ2UlJZgZWMcaT1AS+thRmKDKIZCJBwi4NHd3Tt3KhvXvPuYbG/f/u1v3CV+9cpr1NfXc/zLko90g3X14yXAlZ++sT/i17/TeejAng2r32DHxrcZ7B0gmRph3LhKDrUeIJVVmTjjFA4dTTCcMJnUWM+UOXPbF1903o8e/t7nl/cebFk2xpu+omXn5qvOnTL7kq3vvPkg0DPStW0EGPF5NSOgpWndtYkz501h7Bg/b696jm/fdbP7qUWz6GrZwezpdeQLSXoP7qKz/QCpkQQ4DpGiIibPnEH95Il4XVvu3LpBPvqD78u3Xn1R7mtuEvtbWjhz4eISgPu/P1ocbGtr++sZoQcffJD7/qKC8LN//ffxf3rij6dt27Yt72QzzJ1TTzgYpZDPcvUNV/DiC2+wdft+vnTbhfQMDhqzzrpu/zf/z1d2fRTAY6Y2aj3799qV48ddaKj6Y5Gg1z+Sylu33XKF7G/ZpW1Ys77s1dXP8NbqTe5df/fA0cuWXayJQLVrpWLGn5989s5JU+bWz5g79x/aentHDu/dIVWPr1LXNS2XSZJKpNA0D95QMVKVKz/3la9+8Ydfv6vjvx+LHBz8xL9GveMbXxcAV3zpSwHNp08DGoHG6vrKKSHBrMYKz2+vWjKn5bZbPnWfAuMm1lfNbJgypfFX//bjqcdeZBCrNzfPvuPe70wDahcvvfQfL1i6bNcpCxZsWHjZsg2nnnn2ztmnn/OMzxcuBpg051QBUFpa+l/Cjo9sY8eOpbNz9GOJq7/+TWWwZb842LSL4YE2li2bTd9RF79f5aabr+apXz7Nlp7D3HvLVbyzp5uScY3y0Z/8zAWYddk4KpKTyAsTzbZJzZzJ1kcfZfq1N9D85yc+ankD8AOJY6XYv+Qu98RIS0qp/tuTL4Z2bVktPd4qhDqi/ODB72e9QhSmz5unNm/b5nzYIv8XnAE8CKzzRaUAAAAASUVORK5CYII=
// ==/UserScript==

document.addEventListener('DOMContentLoaded', function () {
  var style = document.createElement('style');
  style.textContent = 'a.x_source_link {' + [
    'line-height: 1.0', // increment the number for a taller thumbnail info-bar
    'text-decoration: none !important',
    'color: inherit !important',
    'display: block !important'
  ].join(';') + '}';
  document.head.appendChild(style);
}, true);

var M = (typeof GM !== 'undefined') ? GM : {
  getValue: function (name, alt) {
    var value = GM_getValue(name, alt);
    return { then: function (callback) { callback(value); } };
  },
  setValue: function (name, value) {
    GM_setValue(name, value);
    return { then: function (callback) { callback(); } };
  }
};

function getOption() {
  var opt_noopen = false;
  // For example: open https://ipv4.google.com/#x-option:open-inplace
  switch (location.hash) {
    // Open links in the current tab.
    case '#x-option:open-inplace': opt_noopen = true; break;
    // Do not ...
    case '#x-option:no-open-inplace': opt_noopen = false; break;
    default: return M.getValue('opt_noopen', opt_noopen);
  }
  M.setValue('opt_noopen', opt_noopen);
  return { then: function (callback) { callback(opt_noopen); } };
}

function unsafeEval(func, opt) {
  let body = 'return (' + func + ').apply(this, arguments)';
  unsafeWindow.Function(body).call(unsafeWindow, opt);
}

getOption().then(function run(opt_noopen) {
unsafeEval(function (opt_noopen) {

var debug = false;
var count = 0;

var options = {noopen: opt_noopen};
debug && console.log('Options:', options);

// web pages: url?url=
// images: imgres?imgurl=
// custom search engine: url?q=
// malware: interstitial?url=
var re = /\b(url|imgres)\?.*?\b(?:url|imgurl|q)=(https?\b[^&#]+)/i;
var restore = function (link, url) {
  var oldUrl = link.getAttribute('href') || '';
  var newUrl = url || oldUrl;
  var matches = newUrl.match(re);
  if (matches) {
    debug && console.log('restoring', link._x_id, newUrl);
    link.setAttribute('href', decodeURIComponent(matches[2]));
    enhanceLink(link);
    if (matches[1] === 'imgres') {
      if (link.querySelector('img[src^="data:"]')) {
        link._x_href = newUrl;
      }
      enhanceThumbnail(link, newUrl);
    }
  } else if (url != null) {
    link.setAttribute('href', newUrl);
  }
};

var purifyLink = function (a) {
  if (/\brwt\(/.test(a.getAttribute('onmousedown'))) {
    a.removeAttribute('onmousedown');
  }
  if (a.parentElement &&
      /\bclick\b/.test(a.parentElement.getAttribute('jsaction') || '')) {
    a.addEventListener('click', function (e) {
      e.stopImmediatePropagation();
      e.stopPropagation();
    }, true);
  }
};

var enhanceLink = function (a) {
  purifyLink(a);
  a.setAttribute('rel', 'noreferrer');
  a.setAttribute('referrerpolicy', 'no-referrer');
  if (options.noopen) {
    a.setAttribute('target', '_self');
    a.addEventListener('click', function (event) {
      event.stopImmediatePropagation();
      event.stopPropagation();
    }, true);
  }
};

var enhanceThumbnail = function (link, url) {
  // make thumbnail info-bar clickable
  var infos = [].slice.call(link.querySelectorAll('img~div'));
  if (infos.length > 0) {
    var pageUrl = decodeURIComponent(url.match(/[?&]imgrefurl=([^&#]+)/)[1]);
    infos.forEach(function (info) {
      var pagelink = document.createElement('a');
      enhanceLink(pagelink);
      pagelink.href = pageUrl;
      pagelink.className = 'x_source_link';
      pagelink.textContent = info.textContent;
      info.textContent = '';
      info.appendChild(pagelink);
    });
  }
};

var fakeLink = document.createElement('a');
var normalizeUrl = function (url) {
  fakeLink.href = url;
  return fakeLink.href;
};

var setter = function (v) {
  v = String(v); // in case an object is passed by clever Google
  debug && console.log('State:', document.readyState);
  debug && console.log('set', this._x_id, this.getAttribute('href'), v);
  restore(this, v);
};
var getter = function () {
  debug && console.log('get', this._x_id, this.getAttribute('href'));
  return normalizeUrl(this._x_href || this.getAttribute('href'));
};
var blocker = function (event) {
  event.stopPropagation();
  restore(this);
  debug && console.log('block', this._x_id, this.getAttribute('href'));
};

var handler = function (a) {
  if (a._x_id) {
    restore(a);
    return;
  }
  a._x_id = ++count;
  debug && a.setAttribute('x-id', a._x_id);
  if (Object.defineProperty) {
    debug && console.log('define property', a._x_id);
    Object.defineProperty(a, 'href', {get: getter, set: setter});
  } else if (a.__defineSetter__) {
    debug && console.log('define getter', a._x_id);
    a.__defineSetter__('href', setter);
    a.__defineGetter__('href', getter);
  } else {
    debug && console.log('define listener', a._x_id);
    a.onmouseenter = a.onmousemove = a.onmouseup = a.onmousedown =
      a.ondbclick = a.onclick = a.oncontextmenu = blocker;
  }
  if (/^_(?:blank|self)$/.test(a.getAttribute('target')) ||
      /\brwt\(/.test(a.getAttribute('onmousedown')) ||
      /\bmouse/.test(a.getAttribute('jsaction')) ||
      /\bclick\b/.test(a.parentElement.getAttribute('jsaction'))) {
    enhanceLink(a);
  }
  restore(a);
};

var checkNewNodes = function (mutations) {
  debug && console.log('State:', document.readyState);
  if (mutations.target) {
    checkAttribute(mutations);
  } else {
    mutations.forEach && mutations.forEach(checkAttribute);
  }
};
var checkAttribute = function (mutation) {
  var target = mutation.target;
  if (target && target.nodeName.toUpperCase() === 'A') {
    if ((mutation.attributeName || mutation.attrName) === 'href') {
      debug && console.log('restore attribute', target._x_id, target.getAttribute('href'));
    }
    handler(target);
  } else if (target instanceof Element) {
    [].slice.call(target.querySelectorAll('a')).forEach(handler);
  }
};

var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;

if (MutationObserver) {
  debug && console.log('MutationObserver: true');
  new MutationObserver(checkNewNodes).observe(document.documentElement, {
    childList: true,
    attributes: true,
    attributeFilter: ['href'],
    subtree: true
  });
} else {
  debug && console.log('MutationEvent: true');
  document.addEventListener('DOMAttrModified', checkAttribute, false);
  document.addEventListener('DOMNodeInserted', checkNewNodes, false);
}

}, opt_noopen);
});