AdsBypasserLite

Bypass Ads

当前为 2015-04-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name AdsBypasserLite
  3. // @namespace AdsBypasser
  4. // @description Bypass Ads
  5. // @copyright 2012+, Wei-Cheng Pan (legnaleurc)
  6. // @version 5.19.1
  7. // @license BSD
  8. // @homepageURL https://adsbypasser.github.io/
  9. // @supportURL https://github.com/adsbypasser/adsbypasser/issues
  10. // @icon https://raw.githubusercontent.com/adsbypasser/adsbypasser/v5.19.1/img/logo.png
  11. // @grant unsafeWindow
  12. // @grant GM_xmlhttpRequest
  13.  
  14. // @grant GM_getValue
  15. // @grant GM_openInTab
  16. // @grant GM_registerMenuCommand
  17. // @grant GM_setValue
  18. // @run-at document-start
  19.  
  20. // @include http://*
  21. // @include https://*
  22. // ==/UserScript==
  23.  
  24. (function (context, factory) {
  25. if (typeof module === 'object' && typeof module.exports === 'object') {
  26. var bluebird = require('bluebird');
  27. module.exports = factory(context, bluebird.Promise);
  28. } else {
  29. factory(context, context.Promise || function (fn) {
  30. return context.unsafeWindow.Future.call(this, function (fr) {
  31. fn(fr.resolve.bind(fr), fr.reject.bind(fr));
  32. });
  33. });
  34. }
  35. }(this, function (context, Promise) {
  36. 'use strict';
  37. var _ = context._ = {};
  38. function setupStack () {
  39. if (Error.captureStackTrace) {
  40. Error.captureStackTrace(this, this.constructor);
  41. } else if (!this.hasOwnProperty('stack')) {
  42. var stack = (new Error()).stack.split('\n').slice(2);
  43. var e = stack[0].match(/^.*@(.*):(\d*)$/);
  44. this.fileName = e[1];
  45. this.lineNumber = parseInt(e[2], 10);
  46. this.stack = stack.join('\n');
  47. }
  48. }
  49. function AdsBypasserError (message) {
  50. setupStack.call(this);
  51. this.message = message;
  52. }
  53. AdsBypasserError.prototype = Object.create(Error.prototype);
  54. AdsBypasserError.prototype.constructor = AdsBypasserError;
  55. AdsBypasserError.prototype.name = 'AdsBypasserError';
  56. AdsBypasserError.extend = function (protoProps, staticProps) {
  57. var parent = this, child = function () {
  58. setupStack.call(this);
  59. protoProps.constructor.apply(this, arguments);
  60. };
  61. extend(child, parent, staticProps);
  62. child.prototype = Object.create(parent.prototype);
  63. extend(child.prototype, protoProps);
  64. child.prototype.constructor = child;
  65. child.super = parent.prototype;
  66. return child;
  67. };
  68. AdsBypasserError.super = null;
  69. _.AdsBypasserError = AdsBypasserError;
  70. function any (c, fn) {
  71. if (c.some) {
  72. return c.some(fn);
  73. }
  74. if (typeof c.length === 'number') {
  75. return Array.prototype.some.call(c, fn);
  76. }
  77. return Object.keys(c).some(function (k) {
  78. return fn(c[k], k, c);
  79. });
  80. }
  81. function all (c, fn) {
  82. if (c.every) {
  83. return c.every(fn);
  84. }
  85. if (typeof c.length === 'number') {
  86. return Array.prototype.every.call(c, fn);
  87. }
  88. return Object.keys(c).every(function (k) {
  89. return fn(c[k], k, c);
  90. });
  91. }
  92. function each (c, fn) {
  93. if (c.forEach) {
  94. c.forEach(fn);
  95. } else if (typeof c.length === 'number') {
  96. Array.prototype.forEach.call(c, fn);
  97. } else {
  98. Object.keys(c).forEach(function (k) {
  99. fn(c[k], k, c);
  100. });
  101. }
  102. }
  103. function map (c, fn) {
  104. if (c.map) {
  105. return c.map(fn);
  106. }
  107. if (typeof c.length === 'number') {
  108. return Array.prototype.map.call(c, fn);
  109. }
  110. return Object.keys(c).map(function (k) {
  111. return fn(c[k], k, c);
  112. });
  113. }
  114. function extend(c) {
  115. Array.prototype.slice.call(arguments, 1).forEach(function (source) {
  116. if (!source) {
  117. return;
  118. }
  119. _.C(source).each(function (v, k) {
  120. c[k] = v;
  121. });
  122. });
  123. return c;
  124. }
  125. function CollectionProxy (collection) {
  126. this._c = collection;
  127. }
  128. CollectionProxy.prototype.size = function () {
  129. if (typeof this._c.length === 'number') {
  130. return this._c.length;
  131. }
  132. return Object.keys(c).length;
  133. };
  134. CollectionProxy.prototype.at = function (k) {
  135. return this._c[k];
  136. };
  137. CollectionProxy.prototype.each = function (fn) {
  138. each(this._c, fn);
  139. return this;
  140. };
  141. CollectionProxy.prototype.find = function (fn) {
  142. var result;
  143. any(this._c, function (value, index, self) {
  144. var tmp = fn(value, index, self);
  145. if (tmp !== _.nop) {
  146. result = {
  147. key: index,
  148. value: value,
  149. payload: tmp,
  150. };
  151. return true;
  152. }
  153. return false;
  154. });
  155. return result;
  156. };
  157. CollectionProxy.prototype.all = function (fn) {
  158. return all(this._c, fn);
  159. };
  160. CollectionProxy.prototype.map = function (fn) {
  161. return map(this._c, fn);
  162. };
  163. _.C = function (collection) {
  164. return new CollectionProxy(collection);
  165. };
  166. _.T = function (s) {
  167. if (typeof s === 'string') {
  168. } else if (s instanceof String) {
  169. s = s.toString();
  170. } else {
  171. throw new AdsBypasserError('template must be a string');
  172. }
  173. var T = {
  174. '{{': '{',
  175. '}}': '}',
  176. };
  177. return function () {
  178. var args = Array.prototype.slice.call(arguments);
  179. var kwargs = args[args.length-1];
  180. return s.replace(/\{\{|\}\}|\{([^\}]+)\}/g, function (m, key) {
  181. if (T.hasOwnProperty(m)) {
  182. return T[m];
  183. }
  184. if (args.hasOwnProperty(key)) {
  185. return args[key];
  186. }
  187. if (kwargs.hasOwnProperty(key)) {
  188. return kwargs[key];
  189. }
  190. return m;
  191. });
  192. };
  193. };
  194. _.P = function (fn) {
  195. if (typeof fn !== 'function') {
  196. throw new _.AdsBypasserError('must give a function');
  197. }
  198. var slice = Array.prototype.slice;
  199. var args = slice.call(arguments, 1);
  200. return function () {
  201. return fn.apply(this, args.concat(slice.call(arguments)));
  202. };
  203. };
  204. _.D = function (fn) {
  205. return new Promise(fn);
  206. };
  207. _.nop = function () {
  208. };
  209. function log (method, args) {
  210. args = Array.prototype.slice.call(args);
  211. if (typeof args[0] === 'string' || args[0] instanceof String) {
  212. args[0] = 'AdsBypasser: ' + args[0];
  213. } else {
  214. args.unshift('AdsBypasser:');
  215. }
  216. var f = console[method];
  217. if (typeof f === 'function') {
  218. f.apply(console, args);
  219. }
  220. }
  221. _.info = function () {
  222. log('info', arguments);
  223. };
  224. _.warn = function () {
  225. log('warn', arguments);
  226. };
  227. return _;
  228. }));
  229.  
  230. (function (context, factory) {
  231. if (typeof module === 'object' && typeof module.exports === 'object') {
  232. module.exports = function (context) {
  233. var core = require('./core.js');
  234. return factory(context, core);
  235. };
  236. } else {
  237. context.$ = factory(context, context._);
  238. }
  239. }(this, function (context, _) {
  240. 'use strict';
  241. var window = context.window;
  242. var document = window.document;
  243. var DomNotFoundError = _.AdsBypasserError.extend({
  244. name: 'DomNotFoundError',
  245. constructor: function (selector) {
  246. DomNotFoundError.super.constructor.call(this, _.T('`{0}` not found')(selector));
  247. },
  248. });
  249. var $ = function (selector, context) {
  250. if (!context || !context.querySelector) {
  251. context = document;
  252. }
  253. var n = context.querySelector(selector);
  254. if (!n) {
  255. throw new DomNotFoundError(selector);
  256. }
  257. return n;
  258. };
  259. $.$ = function (selector, context) {
  260. try {
  261. return $(selector, context);
  262. } catch (e) {
  263. return null;
  264. }
  265. };
  266. $.$$ = function (selector, context) {
  267. if (!context || !context.querySelectorAll) {
  268. context = document;
  269. }
  270. var ns = context.querySelectorAll(selector);
  271. return _.C(ns);
  272. };
  273. $.toDOM = function(rawHTML) {
  274. try {
  275. var parser = new DOMParser();
  276. var DOMHTML = parser.parseFromString(rawHTML, "text/html");
  277. return DOMHTML;
  278. } catch (e) {
  279. throw new _.AdsBypasserError('could not parse HTML to DOM');
  280. }
  281. };
  282. $.removeNodes = function (selector, context) {
  283. $.$$(selector, context).each(function (e) {
  284. e.parentNode.removeChild(e);
  285. });
  286. };
  287. function searchScriptsByRegExp (pattern, context) {
  288. var m = $.$$('script', context).find(function (s) {
  289. var m = s.innerHTML.match(pattern);
  290. if (!m) {
  291. return _.nop;
  292. }
  293. return m;
  294. });
  295. if (!m) {
  296. return null;
  297. }
  298. return m.payload;
  299. }
  300. function searchScriptsByString (pattern, context) {
  301. var m = $.$$('script', context).find(function (s) {
  302. var m = s.innerHTML.indexOf(pattern);
  303. if (m < 0) {
  304. return _.nop;
  305. }
  306. return m;
  307. });
  308. if (!m) {
  309. return null;
  310. }
  311. return m.value.innerHTML;
  312. }
  313. $.searchScripts = function (pattern, context) {
  314. if (pattern instanceof RegExp) {
  315. return searchScriptsByRegExp(pattern, context);
  316. } else if (typeof pattern === 'string') {
  317. return searchScriptsByString(pattern, context);
  318. } else {
  319. return null;
  320. }
  321. };
  322. return $;
  323. }));
  324.  
  325. (function (context, factory) {
  326. if (typeof module === 'object' && typeof module.exports === 'object') {
  327. module.exports = function (context, GM) {
  328. var core = require('./core.js');
  329. return factory(context, GM, core);
  330. };
  331. } else {
  332. factory(context, {
  333. xmlhttpRequest: GM_xmlhttpRequest,
  334. }, context._);
  335. }
  336. }(this, function (context, GM, _) {
  337. 'use strict';
  338. var window = context.window;
  339. var document = window.document;
  340. var $ = context.$ || {};
  341. function deepJoin (prefix, object) {
  342. return _.C(object).map(function (v, k) {
  343. var key = _.T('{0}[{1}]')(prefix, k);
  344. if (typeof v === 'object') {
  345. return deepJoin(key, v);
  346. }
  347. return _.T('{0}={1}').apply(this, [key, v].map(encodeURIComponent));
  348. }).join('&');
  349. }
  350. function toQuery (data) {
  351. var type = typeof data;
  352. if (data === null || (type !== 'string' && type !== 'object')) {
  353. return '';
  354. }
  355. if (type === 'string') {
  356. return data;
  357. }
  358. if (data instanceof String) {
  359. return data.toString();
  360. }
  361. return _.C(data).map(function (v, k) {
  362. if (typeof v === 'object') {
  363. return deepJoin(k, v);
  364. }
  365. return _.T('{0}={1}').apply(this, [k, v].map(encodeURIComponent));
  366. }).join('&');
  367. }
  368. function ajax (method, url, data, headers) {
  369. var l = document.createElement('a');
  370. l.href = url;
  371. var reqHost = l.hostname;
  372. headers.Host = reqHost || window.location.host;
  373. headers.Origin = window.location.origin;
  374. headers.Referer = window.location.href;
  375. headers['X-Requested-With'] = 'XMLHttpRequest';
  376. var xhr = null;
  377. var promise = _.D(function (resolve, reject) {
  378. xhr = GM.xmlhttpRequest({
  379. method: method,
  380. url: url,
  381. data: data,
  382. headers: headers,
  383. onload: function (response) {
  384. response = (typeof response.responseText !== 'undefined') ? response : this;
  385. if (response.status !== 200) {
  386. reject(response.responseText);
  387. } else {
  388. resolve(response.responseText);
  389. }
  390. },
  391. onerror: function (response) {
  392. response = (typeof response.responseText !== 'undefined') ? response : this;
  393. reject(response.responseText);
  394. },
  395. });
  396. });
  397. promise.abort = function () {
  398. xhr.abort();
  399. };
  400. return promise;
  401. }
  402. $.get = function (url, data, headers) {
  403. data = toQuery(data);
  404. data = data ? '?' + data : '';
  405. headers = headers || {};
  406. return ajax('GET', url + data, '', headers);
  407. };
  408. $.post = function (url, data, headers) {
  409. data = toQuery(data);
  410. var h = {
  411. 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  412. 'Content-Length': data.length,
  413. };
  414. if (headers) {
  415. _.C(headers).each(function (v, k) {
  416. h[k] = v;
  417. });
  418. }
  419. return ajax('POST', url, data, h);
  420. };
  421. return $;
  422. }));
  423.  
  424. (function (context, factory) {
  425. if (typeof module === 'object' && typeof module.exports === 'object') {
  426. module.exports = function (context) {
  427. var core = require('./core.js');
  428. return factory(context, core);
  429. };
  430. } else {
  431. factory(context, context._);
  432. }
  433. }(this, function (context, _) {
  434. 'use strict';
  435. var window = context.window;
  436. var document = window.document;
  437. var $ = context.$ || {};
  438. $.setCookie = function (key, value) {
  439. var now = new Date();
  440. now.setTime(now.getTime() + 3600 * 1000);
  441. var tpl = _.T('{0}={1};path=/;');
  442. document.cookie = tpl(key, value, now.toUTCString());
  443. };
  444. $.getCookie = function (key) {
  445. var c = _.C(document.cookie.split(';')).find(function (v) {
  446. var k = v.replace(/^\s*(\w+)=.+$/, '$1');
  447. if (k !== key) {
  448. return _.nop;
  449. }
  450. });
  451. if (!c) {
  452. return null;
  453. }
  454. c = c.value.replace(/^\s*\w+=([^;]+).+$/, '$1');
  455. if (!c) {
  456. return null;
  457. }
  458. return c;
  459. };
  460. $.resetCookies = function () {
  461. var a = document.domain;
  462. var b = document.domain.replace(/^www\./, '');
  463. var c = document.domain.replace(/^(\w+\.)+?(\w+\.\w+)$/, '$2');
  464. var d = (new Date(1e3)).toUTCString();
  465. _.C(document.cookie.split(';')).each(function (v) {
  466. var k = v.replace(/^\s*(\w+)=.+$/, '$1');
  467. document.cookie = _.T('{0}=;expires={1};')(k, d);
  468. document.cookie = _.T('{0}=;path=/;expires={1};')(k, d);
  469. var e = _.T('{0}=;path=/;domain={1};expires={2};');
  470. document.cookie = e(k, a, d);
  471. document.cookie = e(k, b, d);
  472. document.cookie = e(k, c, d);
  473. });
  474. };
  475. return $;
  476. }));
  477.  
  478. (function (context, factory) {
  479. if (typeof module === 'object' && typeof module.exports === 'object') {
  480. module.exports = function (context) {
  481. var core = require('./core.js');
  482. return factory(context, core);
  483. };
  484. } else {
  485. factory(context, context._);
  486. }
  487. }(this, function (context, _) {
  488. 'use strict';
  489. var window = context.window;
  490. var document = window.document;
  491. var $ = context.$ || {};
  492. var patterns = [];
  493. $.register = function (pattern) {
  494. patterns.push(pattern);
  495. };
  496. function dispatchByObject (rule, url_6) {
  497. var matched = {};
  498. var passed = _.C(rule).all(function (pattern, part) {
  499. if (pattern instanceof RegExp) {
  500. matched[part] = url_6[part].match(pattern);
  501. } else if (pattern instanceof Array) {
  502. var r = _.C(pattern).find(function (p) {
  503. var m = url_6[part].match(p);
  504. return m || _.nop;
  505. });
  506. matched[part] = r ? r.payload : null;
  507. }
  508. return !!matched[part];
  509. });
  510. return passed ? matched : null;
  511. }
  512. function dispatchByRegExp (rule, url_1) {
  513. return url_1.match(rule);
  514. }
  515. function dispatchByArray (byLocation, rules, url_1, url_3, url_6) {
  516. var tmp = _.C(rules).find(function (rule) {
  517. var m = dispatch(byLocation, rule, url_1, url_3, url_6);
  518. if (!m) {
  519. return _.nop;
  520. }
  521. return m;
  522. });
  523. return tmp ? tmp.payload : null;
  524. }
  525. function dispatchByString (rule, url_3) {
  526. var scheme = /\*|https?|file|ftp|chrome-extension/;
  527. var host = /\*|(\*\.)?([^\/*]+)/;
  528. var path = /\/.*/;
  529. var up = new RegExp(_.T('^({scheme})://({host})?({path})$')({
  530. scheme: scheme.source,
  531. host: host.source,
  532. path: path.source,
  533. }));
  534. var matched = rule.match(up);
  535. if (!matched) {
  536. return null;
  537. }
  538. scheme = matched[1];
  539. host = matched[2];
  540. var wc = matched[3];
  541. var sd = matched[4];
  542. path = matched[5];
  543. if (scheme === '*' && !/https?/.test(url_3.scheme)) {
  544. return null;
  545. } else if (scheme !== url_3.scheme) {
  546. return null;
  547. }
  548. if (scheme !== 'file' && host !== '*') {
  549. if (wc) {
  550. up = url_3.host.indexOf(sd);
  551. if (up < 0 || up + sd.length !== url_3.host.length) {
  552. return null;
  553. }
  554. } else if (host !== url_3.host) {
  555. return null;
  556. }
  557. }
  558. path = new RegExp(_.T('^{0}$')(path.replace(/[*.\[\]?+#]/g, function (c) {
  559. if (c === '*') {
  560. return '.*';
  561. }
  562. return '\\' + c;
  563. })));
  564. if (!path.test(url_3.path)) {
  565. return null;
  566. }
  567. return url_3;
  568. }
  569. function dispatchByFunction (rule, url_1, url_3, url_6) {
  570. return rule(url_1, url_3, url_6);
  571. }
  572. function dispatch (byLocation, rule, url_1, url_3, url_6) {
  573. if (rule instanceof Array) {
  574. return dispatchByArray(byLocation, rule, url_1, url_3, url_6);
  575. }
  576. if (typeof rule === 'function') {
  577. if (byLocation) {
  578. return null;
  579. }
  580. return dispatchByFunction(rule, url_1, url_3, url_6);
  581. }
  582. if (rule instanceof RegExp) {
  583. return dispatchByRegExp(rule, url_1);
  584. }
  585. if (typeof rule === 'string' || rule instanceof String) {
  586. return dispatchByString(rule, url_3);
  587. }
  588. return dispatchByObject(rule, url_6);
  589. }
  590. $._findHandler = function (byLocation) {
  591. var url_1 = window.location.toString();
  592. var url_3 = {
  593. scheme: window.location.protocol.slice(0, -1),
  594. host: window.location.host,
  595. path: window.location.pathname + window.location.search + window.location.hash,
  596. };
  597. var url_6 = {
  598. scheme: window.location.protocol,
  599. host: window.location.hostname,
  600. port: window.location.port,
  601. path: window.location.pathname,
  602. query: window.location.search,
  603. hash: window.location.hash,
  604. };
  605. var pattern = _.C(patterns).find(function (pattern) {
  606. var m = dispatch(byLocation, pattern.rule, url_1, url_3, url_6);
  607. if (!m) {
  608. return _.nop;
  609. }
  610. return m;
  611. });
  612. if (!pattern) {
  613. return null;
  614. }
  615. var matched = pattern.payload;
  616. pattern = pattern.value;
  617. if (!pattern.start && !pattern.ready) {
  618. return null;
  619. }
  620. return {
  621. start: pattern.start ? _.P(pattern.start, matched) : _.nop,
  622. ready: pattern.ready ? _.P(pattern.ready, matched) : _.nop,
  623. };
  624. };
  625. return $;
  626. }));
  627.  
  628. (function (context, factory) {
  629. if (typeof module === 'object' && typeof module.exports === 'object') {
  630. module.exports = function (context) {
  631. var core = require('./core.js');
  632. return factory(context, core);
  633. };
  634. } else {
  635. factory(context, context._);
  636. }
  637. }(this, function (context, _) {
  638. 'use strict';
  639. var window = context.window;
  640. var document = window.document;
  641. var $ = context.$ || {};
  642. function go (path, params, method) {
  643. method = method || 'post';
  644. params = params || {};
  645. var form = document.createElement('form');
  646. form.method = method;
  647. form.action = path;
  648. _.C(params).each(function (value, key) {
  649. var input = document.createElement('input');
  650. input.type = 'hidden';
  651. input.name = key;
  652. input.value = value;
  653. form.appendChild(input);
  654. });
  655. document.body.appendChild(form);
  656. form.submit();
  657. }
  658. $.openLinkByPost = function (url, data) {
  659. go(url, data, 'post');
  660. };
  661. $.openLink = function (to) {
  662. if (!to) {
  663. _.warn('false URL');
  664. return;
  665. }
  666. var from = window.location.toString();
  667. _.info(_.T('{0} -> {1}')(from, to));
  668. window.top.location.replace(to);
  669. };
  670. $.openLinkWithReferer = function (to) {
  671. if (!to) {
  672. _.warn('false URL');
  673. return;
  674. }
  675. var from = window.location.toString();
  676. _.info(_.T('{0} -> {1}')(from, to));
  677. var a = document.createElement('a');
  678. a.href = to;
  679. a.style.display = 'none';
  680. document.body.appendChild(a);
  681. a.click();
  682. };
  683. return $;
  684. }));
  685.  
  686. (function (context, factory) {
  687. if (typeof module === 'object' && typeof module.exports === 'object') {
  688. module.exports = function (context) {
  689. var core = require('./core.js');
  690. var ajax = require('./ajax.js');
  691. var $ = ajax(context);
  692. return factory(context, core, $);
  693. };
  694. } else {
  695. factory(context, context._, context.$);
  696. }
  697. }(this, function (context, _, $) {
  698. 'use strict';
  699. var window = context.window;
  700. var unsafeWindow = context.unsafeWindow || (0, eval)('this').window;
  701. var document = window.document;
  702. $.removeAllTimer = function () {
  703. var handle = window.setInterval(_.nop, 10);
  704. while (handle > 0) {
  705. window.clearInterval(handle--);
  706. }
  707. handle = window.setTimeout(_.nop, 10);
  708. while (handle > 0) {
  709. window.clearTimeout(handle--);
  710. }
  711. };
  712. $.captcha = function (imgSrc, cb) {
  713. if (!$.config.externalServerSupport) {
  714. return;
  715. }
  716. var a = document.createElement('canvas');
  717. var b = a.getContext('2d');
  718. var c = new Image();
  719. c.src = imgSrc;
  720. c.onload = function () {
  721. a.width = c.width;
  722. a.height = c.height;
  723. b.drawImage(c, 0, 0);
  724. var d = a.toDataURL();
  725. var e = d.substr(d.indexOf(',') + 1);
  726. $.post('http://www.wcpan.info/cgi-bin/captcha.cgi', {
  727. i: e,
  728. }, cb);
  729. };
  730. };
  731. function clone (safe) {
  732. if (safe === null || !(safe instanceof Object)) {
  733. return safe;
  734. }
  735. if (safe instanceof String) {
  736. return safe.toString();
  737. }
  738. if (safe instanceof Function) {
  739. return exportFunction(safe, unsafeWindow, {
  740. allowCrossOriginArguments: true,
  741. });
  742. }
  743. if (safe instanceof Array) {
  744. var unsafe = new unsafeWindow.Array();
  745. for (var i = 0; i < safe.length; ++i) {
  746. unsafe.push(clone(safe[i]));
  747. }
  748. return unsafe;
  749. }
  750. var unsafe = new unsafeWindow.Object();
  751. _.C(safe).each(function (v, k) {
  752. unsafe[k] = clone(v);
  753. });
  754. return unsafe;
  755. }
  756. var MAGIC_KEY = '__adsbypasser_reverse_proxy__';
  757. $.window = (function () {
  758. var isFirefox = typeof InstallTrigger !== 'undefined';
  759. if (!isFirefox) {
  760. return unsafeWindow;
  761. }
  762. var decorator = {
  763. set: function (target, key, value) {
  764. if (key === MAGIC_KEY) {
  765. return false;
  766. }
  767. target[key] = clone(value);
  768. return true;
  769. },
  770. get: function (target, key) {
  771. if (key === MAGIC_KEY) {
  772. return target;
  773. }
  774. var value = target[key];
  775. var type = typeof value;
  776. if (value === null || (type !== 'function' && type !== 'object')) {
  777. return value;
  778. }
  779. return new Proxy(value, decorator);
  780. },
  781. apply: function (target, self, args) {
  782. args = Array.prototype.slice.call(args);
  783. if (target === unsafeWindow.Object.defineProperty) {
  784. args[0] = args[0][MAGIC_KEY];
  785. }
  786. if (target === unsafeWindow.Function.apply) {
  787. self = self[MAGIC_KEY];
  788. args[1] = Array.prototype.slice.call(args[1]);
  789. }
  790. var usargs = clone(args);
  791. return target.apply(self, usargs);
  792. },
  793. construct: function (target, args) {
  794. args = Array.prototype.slice.call(args);
  795. args.unshift(undefined);
  796. var usargs = clone(args);
  797. var bind = unsafeWindow.Function.prototype.bind;
  798. return new (bind.apply(target, usargs));
  799. },
  800. };
  801. return new Proxy(unsafeWindow, decorator);
  802. })();
  803. return $;
  804. }));
  805.  
  806. (function (context, factory) {
  807. if (typeof module === 'object' && typeof module.exports === 'object') {
  808. module.exports = function (context, GM) {
  809. var _ = require('lodash');
  810. var core = require('./core.js');
  811. var misc = require('./misc.js');
  812. var dispatcher = require('./dispatcher.js');
  813. var modules = [misc, dispatcher].map(function (v) {
  814. return v.call(null, context, GM);
  815. });
  816. var $ = _.assign.apply(null, modules);
  817. return factory(context, GM, core, $);
  818. };
  819. } else {
  820. factory(context, {
  821. getValue: GM_getValue,
  822. setValue: GM_setValue,
  823. }, context._, context.$);
  824. }
  825. }(this, function (context, GM, _, $) {
  826. 'use strict';
  827. var window = context.window;
  828. $.config = {
  829. set version (value) {
  830. GM.setValue('version', value);
  831. },
  832. get version () {
  833. return GM.getValue('version', 0);
  834. },
  835. set alignCenter (value) {
  836. GM.setValue('align_center', value);
  837. },
  838. get alignCenter () {
  839. return GM.getValue('align_center');
  840. },
  841. set changeBackground (value) {
  842. GM.setValue('change_background', value);
  843. },
  844. get changeBackground () {
  845. return GM.getValue('change_background');
  846. },
  847. set externalServerSupport (value) {
  848. GM.setValue('external_server_support', value);
  849. },
  850. get externalServerSupport () {
  851. return GM.getValue('external_server_support');
  852. },
  853. set redirectImage (value) {
  854. GM.setValue('redirect_image', value);
  855. },
  856. get redirectImage () {
  857. return GM.getValue('redirect_image');
  858. },
  859. set scaleImage (value) {
  860. GM.setValue('scale_image', value);
  861. },
  862. get scaleImage () {
  863. return GM.getValue('scale_image');
  864. },
  865. };
  866. fixup($.config);
  867. function fixup (c) {
  868. var patches = [
  869. function (c) {
  870. var ac = typeof c.alignCenter !== 'undefined';
  871. if (typeof c.changeBackground === 'undefined') {
  872. c.changeBackground = ac ? c.alignCenter : true;
  873. }
  874. if (typeof c.scaleImage === 'undefined') {
  875. c.scaleImage = ac ? c.alignCenter : true;
  876. }
  877. if (!ac) {
  878. c.alignCenter = true;
  879. }
  880. if (typeof c.redirectImage === 'undefined') {
  881. c.redirectImage = true;
  882. }
  883. },
  884. function (c) {
  885. if (typeof c.externalServerSupport === 'undefined') {
  886. c.externalServerSupport = false;
  887. }
  888. },
  889. ];
  890. while (c.version < patches.length) {
  891. patches[c.version](c);
  892. ++c.version;
  893. }
  894. }
  895. $.register({
  896. rule: {
  897. host: /^adsbypasser\.github\.io$/,
  898. path: /^\/configure\.html$/,
  899. },
  900. ready: function () {
  901. $.window.commit = function (data) {
  902. data.version = $.config.version;
  903. _.C(data).each(function (v, k) {
  904. $.config[k] = v;
  905. });
  906. setTimeout(function () {
  907. save(data);
  908. }, 0);
  909. };
  910. $.window.render({
  911. version: $.config.version,
  912. options: {
  913. alignCenter: {
  914. type: 'checkbox',
  915. value: $.config.alignCenter,
  916. label: 'Align Center',
  917. help: 'Align image to the center if possible. (default: enabled)',
  918. },
  919. changeBackground: {
  920. type: 'checkbox',
  921. value: $.config.changeBackground,
  922. label: 'Change Background',
  923. help: 'Use Firefox-like image background if possible. (default: enabled)',
  924. },
  925. redirectImage: {
  926. type: 'checkbox',
  927. value: $.config.redirectImage,
  928. label: 'Redirect Image',
  929. help: [
  930. 'Directly open image link if possible. (default: enabled)',
  931. 'If disabled, redirection will only works on link shortener sites.',
  932. ].join('<br/>\n'),
  933. },
  934. scaleImage: {
  935. type: 'checkbox',
  936. value: $.config.scaleImage,
  937. label: 'Scale Image',
  938. help: 'When image loaded, scale it to fit window if possible. (default: enabled)',
  939. },
  940. externalServerSupport: {
  941. type: 'checkbox',
  942. value: $.config.externalServerSupport,
  943. label: 'External Server Support',
  944. help: [
  945. 'Send URL information to external server to enhance features (e.g.: captcha resolving). (default: disabled)',
  946. 'Affected sites:',
  947. 'urlz.so (captcha)',
  948. ].join('<br/>\n'),
  949. },
  950. },
  951. });
  952. },
  953. });
  954. return $;
  955. }));
  956.  
  957. $.register({
  958. rule: {
  959. host: /^01\.nl$/,
  960. },
  961. ready: function () {
  962. 'use strict';
  963. var f = $('iframe#redirectframe');
  964. $.openLink(f.src);
  965. },
  966. });
  967.  
  968. $.register({
  969. rule: {
  970. host: /^(www\.)?1be\.biz$/,
  971. path: /^\/s\.php$/,
  972. query: /^\?(.+)/,
  973. },
  974. start: function (m) {
  975. 'use strict';
  976. $.openLink(m.query[1]);
  977. },
  978. });
  979.  
  980. $.register({
  981. rule: {
  982. host: /^(www\.)?1tiny\.net$/,
  983. path: /\/\w+/
  984. },
  985. ready: function () {
  986. 'use strict';
  987. var directUrl = $.searchScripts(/window\.location='([^']+)';/);
  988. if (!directUrl) {
  989. throw new _.AdsBypasserError('script content changed');
  990. }
  991. $.openLink(directUrl[1]);
  992. },
  993. });
  994.  
  995. $.register({
  996. rule: {
  997. host: /^2ty\.cc$/,
  998. path: /^\/.+/,
  999. },
  1000. ready: function () {
  1001. 'use strict';
  1002. $.removeNodes('iframe');
  1003. var a = $('#close');
  1004. $.openLink(a.href);
  1005. },
  1006. });
  1007.  
  1008. $.register({
  1009. rule: {
  1010. host: /^(www\.)?3ra\.be$/,
  1011. },
  1012. ready: function () {
  1013. 'use strict';
  1014. $.removeNodes('iframe');
  1015. var f = $.window.fc;
  1016. if (!f) {
  1017. throw new _.AdsBypasserError('window.fc is undefined');
  1018. }
  1019. f = f.toString();
  1020. f = f.match(/href="([^"]*)/);
  1021. if (!f) {
  1022. throw new _.AdsBypasserError('url pattern outdated');
  1023. }
  1024. $.openLink(f[1]);
  1025. },
  1026. });
  1027.  
  1028. $.register({
  1029. rule: {
  1030. host: /^(www\.)?4fun\.tw$/,
  1031. },
  1032. ready: function () {
  1033. 'use strict';
  1034. var i = $('#original_url');
  1035. $.openLink(i.value);
  1036. },
  1037. });
  1038.  
  1039. $.register({
  1040. rule: {
  1041. host: /^ad2links\.com$/,
  1042. path: /^\/\w-.+$/,
  1043. },
  1044. ready: function () {
  1045. 'use strict';
  1046. $.removeNodes('iframe');
  1047. $.openLinkByPost(window.location.toString(), {
  1048. image: 'Skip Ad.',
  1049. });
  1050. },
  1051. });
  1052.  
  1053. (function () {
  1054. 'use strict';
  1055. $.register({
  1056. rule: {
  1057. host: /^ad7.biz$/,
  1058. path: /^\/\d+\/(.*)$/,
  1059. },
  1060. start: function (m) {
  1061. $.removeNodes('iframe');
  1062. var redirectLink = m.path[1];
  1063. if (!redirectLink.match(/^https?:\/\//)) {
  1064. redirectLink = "http://" + redirectLink;
  1065. }
  1066. $.openLink(redirectLink);
  1067. },
  1068. });
  1069. $.register({
  1070. rule: {
  1071. host: /^ad7.biz$/,
  1072. path: /^\/\w+$/,
  1073. },
  1074. ready: function () {
  1075. $.removeNodes('iframe');
  1076. var script = $.searchScripts('var r_url');
  1077. var url = script.match(/&url=([^&]+)/);
  1078. url = url[1];
  1079. $.openLink(url);
  1080. },
  1081. });
  1082. })();
  1083.  
  1084. $.register({
  1085. rule: {
  1086. host: /^(www\.)?adb\.ug$/,
  1087. path: /^(?!\/(?:privacy|terms|contact(\/.*)?|#.*)?$).*$/
  1088. },
  1089. ready: function () {
  1090. 'use strict';
  1091. $.removeNodes('iframe');
  1092. var m = $.searchScripts(/top\.location\.href="([^"]+)"/);
  1093. if (m) {
  1094. $.openLink(m[1]);
  1095. return;
  1096. }
  1097. m = $.searchScripts(/\{_args.+\}\}/);
  1098. if (!m) {
  1099. throw new _.AdsBypasserError('script content changed');
  1100. }
  1101. m = eval('(' + m[0] + ')');
  1102. var url = window.location.pathname + '/skip_timer';
  1103. var i = setInterval(function () {
  1104. $.post(url, m).then(function (text) {
  1105. var jj = JSON.parse(text);
  1106. if (!jj.errors && jj.messages) {
  1107. clearInterval(i);
  1108. $.openLink(jj.messages.url);
  1109. }
  1110. });
  1111. }, 1000);
  1112. },
  1113. });
  1114.  
  1115. (function () {
  1116. 'use strict';
  1117. $.register({
  1118. rule: {
  1119. path: /\/locked$/,
  1120. query: /url=([^&]+)/,
  1121. },
  1122. start: function (m) {
  1123. $.resetCookies();
  1124. var url = decodeURIComponent(m.query[1]);
  1125. if (url.match(/^http/)) {
  1126. $.openLink(url);
  1127. } else {
  1128. $.openLink('/' + url);
  1129. }
  1130. },
  1131. });
  1132. $.register({
  1133. rule: function () {
  1134. var h = $.$('html[id="adfly_html"]');
  1135. var b = $.$('body[id="home"]');
  1136. if (h && b) {
  1137. return true;
  1138. } else {
  1139. return null;
  1140. }
  1141. },
  1142. ready: function () {
  1143. var h = $.$('#adfly_html'), b = $.$('#home');
  1144. if (!h || !b || h.nodeName !== 'HTML' || b.nodeName !== 'BODY') {
  1145. return;
  1146. }
  1147. $.removeNodes('iframe');
  1148. $.window.cookieCheck = _.nop;
  1149. h = $.window.eu;
  1150. if (!h) {
  1151. h = $('#adfly_bar');
  1152. $.window.close_bar();
  1153. return;
  1154. }
  1155. var a = h.indexOf('!HiTommy');
  1156. if (a >= 0) {
  1157. h = h.substring(0, a);
  1158. }
  1159. a = '';
  1160. b = '';
  1161. for (var i = 0; i < h.length; ++i) {
  1162. if (i % 2 === 0) {
  1163. a = a + h.charAt(i);
  1164. } else {
  1165. b = h.charAt(i) + b;
  1166. }
  1167. }
  1168. h = atob(a + b);
  1169. h = h.substr(2);
  1170. if (location.hash) {
  1171. h += location.hash;
  1172. }
  1173. $.openLinkWithReferer(h);
  1174. },
  1175. });
  1176. $.register({
  1177. rule: 'http://ad7.biz/*',
  1178. ready: function () {
  1179. $.removeNodes('iframe');
  1180. $.resetCookies();
  1181. var script = $.searchScripts('var r_url');
  1182. var url = script.match(/&url=([^&]+)/);
  1183. url = url[1];
  1184. $.openLinkWithReferer(url);
  1185. },
  1186. });
  1187. })();
  1188.  
  1189. $.register({
  1190. rule: 'http://adfoc.us/*',
  1191. ready: function () {
  1192. 'use strict';
  1193. var root = document.body;
  1194. var observer = new MutationObserver(function (mutations) {
  1195. var o = $.$('#showSkip');
  1196. if (o) {
  1197. observer.disconnect();
  1198. o = o.querySelector('a');
  1199. $.openLink(o.href);
  1200. }
  1201. });
  1202. observer.observe(root, {
  1203. childList: true,
  1204. subtree: true,
  1205. });
  1206. },
  1207. });
  1208.  
  1209. $.register({
  1210. rule: {
  1211. host: /^(www\.)?adjet\.biz$/,
  1212. },
  1213. ready: function () {
  1214. 'use strict';
  1215. var m = $.searchScripts(/href=(\S+)/);
  1216. if (!m) {
  1217. throw new _.AdsBypasserError('site changed');
  1218. }
  1219. $.openLink(m[1]);
  1220. },
  1221. });
  1222.  
  1223. $.register({
  1224. rule: {
  1225. host: /^adlock\.org$/,
  1226. },
  1227. ready: function () {
  1228. 'use strict';
  1229. var a = $.$('#xre a.xxr, #downloadButton1');
  1230. if (a) {
  1231. $.openLink(a.href);
  1232. return;
  1233. }
  1234. a = $.window.fileLocation;
  1235. if (a) {
  1236. $.openLink(a);
  1237. }
  1238. },
  1239. });
  1240.  
  1241. $.register({
  1242. rule: {
  1243. host: /^(www\.)?adlot\.us$/,
  1244. },
  1245. ready: function () {
  1246. 'use strict';
  1247. $.removeNodes('iframe');
  1248. var script = $.searchScripts('form');
  1249. var p = /name='([^']+)' value='([^']+)'/g;
  1250. var opt = {
  1251. image: ' ',
  1252. };
  1253. var tmp = null;
  1254. while (tmp = p.exec(script)) {
  1255. opt[tmp[1]] = tmp[2];
  1256. }
  1257. $.openLinkByPost('', opt);
  1258. },
  1259. });
  1260.  
  1261. $.register({
  1262. rule: {
  1263. host: /^(www\.)?ah-informatique\.com$/,
  1264. path: /^\/ZipUrl/,
  1265. },
  1266. ready: function () {
  1267. 'use strict';
  1268. var a = $('#zip3 a');
  1269. $.openLink(a.href);
  1270. },
  1271. });
  1272.  
  1273. $.register({
  1274. rule: {
  1275. host: /^aka\.gr$/
  1276. },
  1277. ready: function () {
  1278. 'use strict';
  1279. var l = $('iframe#yourls-frame');
  1280. $.openLink(l.src);
  1281. },
  1282. });
  1283.  
  1284. $.register({
  1285. rule: {
  1286. host: /^(www\.)?allkeyshop\.com$/,
  1287. },
  1288. ready: function (m) {
  1289. 'use strict';
  1290. var matches = $.searchScripts(/window\.location\.href = "([^"]+)"/);
  1291. $.openLink(matches[1]);
  1292. $.removeAllTimer();
  1293. },
  1294. });
  1295.  
  1296. $.register({
  1297. rule: {
  1298. host: /^anonymbucks\.com$/,
  1299. },
  1300. ready: function () {
  1301. 'use strict';
  1302. var a = $('#boton-continuar');
  1303. a.click();
  1304. },
  1305. });
  1306.  
  1307. (function () {
  1308. 'use strict';
  1309. $.register({
  1310. rule: {
  1311. host: /^bc\.vc$/,
  1312. path: /^.+(https?:\/\/.+)$/,
  1313. },
  1314. start: function (m) {
  1315. $.openLink(m.path[1] + document.location.search + document.location.hash);
  1316. },
  1317. });
  1318. function decompress (script, unzip) {
  1319. if (!unzip) {
  1320. return script;
  1321. }
  1322. var matches = script.match(/eval(.*)/);
  1323. matches = matches[1];
  1324. script = eval(matches);
  1325. return script;
  1326. }
  1327. function searchScript (unzip) {
  1328. var content = $.searchScripts('make_log');
  1329. if (content) {
  1330. return {
  1331. direct: false,
  1332. script: decompress(content, unzip),
  1333. };
  1334. }
  1335. content = $.searchScripts('click_log');
  1336. if (content) {
  1337. return {
  1338. direct: true,
  1339. script: decompress(content, unzip),
  1340. };
  1341. }
  1342. throw _.AdsBypasserError('script changed');
  1343. }
  1344. function knockServer (script, dirtyFix) {
  1345. var matches = script.match(/\$.post\('([^']*)'[^{]+(\{opt:'make_log'[^}]+\}\}),/i);
  1346. var make_url = matches[1];
  1347. var make_opts = eval('(' + matches[2] + ')');
  1348. var i = setInterval(function () {
  1349. $.post(make_url, make_opts).then(function (text) {
  1350. if (dirtyFix) {
  1351. text = text.match(/\{.+\}/)[0];
  1352. }
  1353. var jj = JSON.parse(text);
  1354. if (jj.message) {
  1355. clearInterval(i);
  1356. $.openLink(jj.message.url);
  1357. }
  1358. });
  1359. }, 1000);
  1360. }
  1361. function knockServer2 (script) {
  1362. var post = $.window.$.post;
  1363. $.window.$.post = function (a, b, c) {
  1364. if (typeof c !== 'function') {
  1365. return;
  1366. }
  1367. setTimeout(function () {
  1368. var data = {
  1369. error: false,
  1370. message: {
  1371. url: '#',
  1372. },
  1373. };
  1374. c(JSON.stringify(data));
  1375. }, 1000);
  1376. };
  1377. var matches = script.match(/\$.post\('([^']*)'[^{]+(\{opt:'make_log'[^}]+\}\}),/i);
  1378. var make_url = matches[1];
  1379. var make_opts = eval('(' + matches[2] + ')');
  1380. function makeLog () {
  1381. make_opts.opt = 'make_log';
  1382. post(make_url, make_opts, function (text) {
  1383. var data = JSON.parse(text);
  1384. _.info('make_log', data);
  1385. if (!data.message) {
  1386. checksLog();
  1387. return;
  1388. }
  1389. $.openLink(data.message.url);
  1390. });
  1391. }
  1392. function checkLog () {
  1393. make_opts.opt = 'check_log';
  1394. post(make_url, make_opts, function (text) {
  1395. var data = JSON.parse(text);
  1396. _.info('check_log', data);
  1397. if (!data.message) {
  1398. checkLog();
  1399. return;
  1400. }
  1401. makeLog();
  1402. });
  1403. }
  1404. function checksLog () {
  1405. make_opts.opt = 'checks_log';
  1406. post(make_url, make_opts, function () {
  1407. _.info('checks_log');
  1408. checkLog();
  1409. });
  1410. }
  1411. checksLog();
  1412. }
  1413. $.register({
  1414. rule: {
  1415. host: /^bc\.vc$/,
  1416. path: /^\/.+/,
  1417. },
  1418. ready: function () {
  1419. $.removeNodes('iframe');
  1420. var result = searchScript(false);
  1421. if (!result.direct) {
  1422. knockServer2(result.script);
  1423. } else {
  1424. result = result.script.match(/top\.location\.href = '([^']+)'/);
  1425. if (!result) {
  1426. throw new _.AdsBypasserError('script changed');
  1427. }
  1428. result = result[1];
  1429. $.openLink(result);
  1430. }
  1431. },
  1432. });
  1433. function run (dirtyFix) {
  1434. $.removeNodes('iframe');
  1435. var result = searchScript(true);
  1436. if (!result.direct) {
  1437. knockServer(result.script,dirtyFix);
  1438. } else {
  1439. result = result.script.match(/top\.location\.href='([^']+)'/);
  1440. if (!result) {
  1441. throw new _.AdsBypasserError('script changed');
  1442. }
  1443. result = result[1];
  1444. $.openLink(result);
  1445. }
  1446. }
  1447. $.register({
  1448. rule: {
  1449. host: /^adcrun\.ch$/,
  1450. path: /^\/\w+$/,
  1451. },
  1452. ready: function () {
  1453. $.removeNodes('.user_content');
  1454. var rSurveyLink = /http\.open\("GET", "api_ajax\.php\?sid=\d*&ip=[^&]*&longurl=([^"]+)" \+ first_time, (?:true|false)\);/;
  1455. var l = $.searchScripts(rSurveyLink);
  1456. if (l) {
  1457. $.openLink(l[1]);
  1458. return;
  1459. }
  1460. run(true);
  1461. },
  1462. });
  1463. $.register({
  1464. rule: {
  1465. host: [
  1466. /^1tk\.us$/,
  1467. /^gx\.si$/,
  1468. /^adwat\.ch$/,
  1469. /^(fly2url|urlwiz|xafox)\.com$/,
  1470. /^(zpoz|ultry)\.net$/,
  1471. /^(wwy|myam)\.me$/,
  1472. /^ssl\.gs$/,
  1473. /^link\.tl$/,
  1474. /^hit\.us$/,
  1475. /^shortit\.in$/,
  1476. /^(adbla|tl7)\.us$/,
  1477. /^www\.adjet\.eu$/,
  1478. /^srk\.gs$/,
  1479. /^cun\.bz$/,
  1480. /^miniurl\.tk$/,
  1481. /^vizzy\.es$/,
  1482. /^kazan\.vc$/,
  1483. ],
  1484. path: /^\/.+/,
  1485. },
  1486. ready: run,
  1487. });
  1488. $.register({
  1489. rule: {
  1490. host: /^adtr\.im|ysear\.ch|xip\.ir$/,
  1491. path: /^\/.+/,
  1492. },
  1493. ready: function () {
  1494. var a = $.$('div.fly_head a.close');
  1495. var f = $.$('iframe.fly_frame');
  1496. if (a && f) {
  1497. $.openLink(f.src);
  1498. } else {
  1499. run();
  1500. }
  1501. },
  1502. });
  1503. $.register({
  1504. rule: {
  1505. host: /^ad5\.eu$/,
  1506. path: /^\/[^.]+$/,
  1507. },
  1508. ready: function() {
  1509. $.removeNodes('iframe');
  1510. var s = searchScript(true);
  1511. var m = s.script.match(/(<form name="form1"method="post".*(?!<\\form>)<\/form>)/);
  1512. if (!m) {return;}
  1513. m = m[1];
  1514. var tz = -(new Date().getTimezoneOffset()/60);
  1515. m = m.replace("'+timezone+'",tz);
  1516. var d = document.createElement('div');
  1517. d.setAttribute('id','AdsBypasserFTW');
  1518. d.setAttribute('style', 'display:none;');
  1519. d.innerHTML = m;
  1520. document.body.appendChild(d);
  1521. $('#AdsBypasserFTW > form[name=form1]').submit();
  1522. },
  1523. });
  1524. $.register({
  1525. rule: {
  1526. host: /^tr5\.in$/,
  1527. path: /^\/.+/,
  1528. },
  1529. ready: function () {
  1530. run(true);
  1531. },
  1532. });
  1533. })();
  1534.  
  1535. $.register({
  1536. rule: 'http://www.bild.me/bild.php?file=*',
  1537. ready: function () {
  1538. 'use strict';
  1539. var i = $('#Bild');
  1540. $.openLink(i.src);
  1541. },
  1542. });
  1543.  
  1544. $.register({
  1545. rule: 'http://bildr.no/view/*',
  1546. ready: function () {
  1547. 'use strict';
  1548. var i = $('img.bilde');
  1549. $.openLink(i.src);
  1550. },
  1551. });
  1552.  
  1553. $.register({
  1554. rule: {
  1555. host: /^(www\.)?([a-zA-Z0-9]+\.)?binbox\.io$/,
  1556. path: /\/o\/([a-zA-Z0-9]+)/,
  1557. },
  1558. start: function (m) {
  1559. 'use strict';
  1560. var direct_link = window.atob(m.path[1]);
  1561. $.openLink(direct_link);
  1562. },
  1563. });
  1564.  
  1565. $.register({
  1566. rule: {
  1567. host: /^(www\.)?(buz|vzt)url\.com$/,
  1568. },
  1569. ready: function () {
  1570. 'use strict';
  1571. var frame = $('frame[scrolling=yes]');
  1572. $.openLink(frame.src);
  1573. },
  1574. });
  1575.  
  1576. $.register({
  1577. rule: {
  1578. host: /^(cf|ex|xt)\d\.(me|co)$/,
  1579. },
  1580. ready: function (m) {
  1581. 'use strict';
  1582. $.removeNodes('iframe');
  1583. var a = $('#skip_button');
  1584. $.openLink(a.href);
  1585. },
  1586. });
  1587.  
  1588. $.register({
  1589. rule: {
  1590. host: /^cf\.ly$/,
  1591. path: /^\/[^\/]+$/,
  1592. },
  1593. start: function (m) {
  1594. 'use strict';
  1595. $.removeNodes('iframe');
  1596. $.openLink('/skip' + m.path[0]);
  1597. },
  1598. });
  1599.  
  1600. $.register({
  1601. rule: {
  1602. host: /^(www\.)?cli\.gs$/,
  1603. },
  1604. ready: function () {
  1605. 'use strict';
  1606. var a = $('a.RedirectLink');
  1607. $.openLink(a.href);
  1608. },
  1609. });
  1610.  
  1611. $.register({
  1612. rule: {
  1613. host: /^(www\.)?clictune\.com$/,
  1614. path: /^\/id=\d+/,
  1615. },
  1616. ready: function () {
  1617. 'use strict';
  1618. $.removeNodes('iframe');
  1619. var matches = $.searchScripts(/<a href="http:\/\/(?:www.)?clictune\.com\/redirect\.php\?url=([^&]+)&/);
  1620. var url = decodeURIComponent(matches[1]);
  1621. $.openLink(url);
  1622. },
  1623. });
  1624.  
  1625. $.register({
  1626. rule: {
  1627. host: /^clk\.im$/,
  1628. },
  1629. ready: function (m) {
  1630. 'use strict';
  1631. $.removeNodes('iframe');
  1632. var matches = $.searchScripts(/\$\("\.countdown"\)\.attr\("href","([^"]+)"\)/);
  1633. $.openLink(matches[1]);
  1634. },
  1635. });
  1636.  
  1637. $.register({
  1638. rule: {
  1639. host: /^(www\.)?(coin-ads\.com|shortin\.tk)$/,
  1640. path: /^\/.+/,
  1641. },
  1642. ready: function () {
  1643. 'use strict';
  1644. var m = $.searchScripts(/window\.location\.replace/);
  1645. if (m) {
  1646. return;
  1647. }
  1648. m = $.searchScripts(/countdownArea\.innerHTML = "([^"]+)"/);
  1649. if (!m) {
  1650. throw new _.AdsBypasserError('pattern changed');
  1651. }
  1652. m = m[1];
  1653. var d = $.$('#area');
  1654. if (d) {
  1655. d.innerHTML = m;
  1656. d = $('.skip', d);
  1657. d.click();
  1658. return;
  1659. }
  1660. d = $('#site');
  1661. $.openLink(d.src);
  1662. },
  1663. });
  1664.  
  1665. $.register({
  1666. rule: {
  1667. host: /^(?:(\w+)\.)?(coinurl\.com|cur\.lv)$/,
  1668. path: /^\/([-\w]+)$/
  1669. },
  1670. ready: function (m) {
  1671. 'use strict';
  1672. $.removeNodes('iframe');
  1673. var host = 'http://cur.lv/redirect_curlv.php';
  1674. var param = m.host[1] === undefined ? {
  1675. code: m.path[1],
  1676. } : {
  1677. zone: m.host[1],
  1678. name: m.path[1],
  1679. };
  1680. $.get(host, param).then(function(mainFrameContent) {
  1681. try {
  1682. var docMainFrame = $.toDOM(mainFrameContent);
  1683. } catch (e) {
  1684. throw new _.AdsBypasserError('main frame changed');
  1685. }
  1686. var rExtractLink = /onclick="open_url\('([^']+)',\s*'go'\)/;
  1687. var innerFrames = $.$$('frameset > frame', docMainFrame).each(function (currFrame) {
  1688. var currFrameAddr = window.location.origin + '/' + currFrame.getAttribute('src');
  1689. $.get(currFrameAddr).then(function(currFrameContent) {
  1690. var aRealLink = rExtractLink.exec(currFrameContent);
  1691. if (aRealLink === undefined || aRealLink[1] === undefined) {
  1692. return;
  1693. }
  1694. var realLink = aRealLink[1];
  1695. $.openLink(realLink);
  1696. });
  1697. });
  1698. });
  1699. },
  1700. });
  1701.  
  1702. $.register({
  1703. rule: {
  1704. host: /^comyonet\.com$/,
  1705. },
  1706. ready: function () {
  1707. 'use strict';
  1708. var input = $('input[name="enter"]');
  1709. input.click();
  1710. },
  1711. });
  1712.  
  1713. $.register({
  1714. rule: {
  1715. host: /^(www\.)?dapat\.in$/,
  1716. },
  1717. ready: function () {
  1718. 'use strict';
  1719. var f = $('iframe[name=pagetext]');
  1720. $.openLink(f.src);
  1721. },
  1722. });
  1723.  
  1724. $.register({
  1725. rule: {
  1726. host: /^(www\.)?dd\.ma$/,
  1727. },
  1728. ready: function (m) {
  1729. 'use strict';
  1730. var i = $.$('#mainframe');
  1731. if (i) {
  1732. $.openLink(i.src);
  1733. return;
  1734. }
  1735. var a = $('#btn_open a');
  1736. $.openLink(a.href);
  1737. },
  1738. });
  1739.  
  1740. $.register({
  1741. rule: {
  1742. host: /^dikit\.in$/,
  1743. },
  1744. ready: function () {
  1745. 'use strict';
  1746. $.removeNodes('iframe');
  1747. var a = $('.disclaimer a');
  1748. $.openLink(a.href);
  1749. },
  1750. });
  1751.  
  1752. $.register({
  1753. rule: 'http://www.dumppix.com/viewer.php?*',
  1754. ready: function () {
  1755. 'use strict';
  1756. var i = $.$('#boring');
  1757. if (i) {
  1758. $.openLink(i.src);
  1759. return;
  1760. }
  1761. i = $('table td:nth-child(1) a');
  1762. $.openLink(i.href);
  1763. },
  1764. });
  1765.  
  1766. $.register({
  1767. rule: {
  1768. host: /^durl\.me$/,
  1769. },
  1770. ready: function () {
  1771. 'use strict';
  1772. var a = $('a[class="proceedBtn"]');
  1773. $.openLink(a.href);
  1774. },
  1775. });
  1776.  
  1777. $.register({
  1778. rule: {
  1779. host: /easyurl\.net|(atu|clickthru|redirects|readthis)\.ca|goshrink\.com$/,
  1780. },
  1781. ready: function () {
  1782. 'use strict';
  1783. var f = $('frame[name=main]');
  1784. $.openLink(f.src);
  1785. },
  1786. });
  1787.  
  1788. $.register({
  1789. rule: {
  1790. host: /empireload\.com$/,
  1791. path: /^\/plugin\.php$/,
  1792. query: /^\?id=linkout&url=([^&]+)$/,
  1793. },
  1794. start: function (m) {
  1795. $.openLink(m.query[1]);
  1796. },
  1797. });
  1798.  
  1799. $.register({
  1800. rule: {
  1801. host: [
  1802. /^ethi\.in$/,
  1803. /^st\.wardhanime\.net$/,
  1804. ],
  1805. path: /^\/i\/\d+$/,
  1806. },
  1807. ready: function () {
  1808. 'use strict';
  1809. var a = $('#wrapper > [class^="tombo"] > a[target="_blank"]');
  1810. $.openLink(a.href);
  1811. },
  1812. });
  1813.  
  1814. $.register({
  1815. rule: {
  1816. host: /^(www\.)?filoops.info$/
  1817. },
  1818. ready: function () {
  1819. 'use strict';
  1820. var a = $('#text > center a, #text > div[align=center] a');
  1821. $.openLink(a.href);
  1822. },
  1823. });
  1824.  
  1825. $.register({
  1826. rule: {
  1827. host: /^fit\.sh$/,
  1828. },
  1829. ready: function () {
  1830. 'use strict';
  1831. $.removeNodes('.container-body');
  1832. var m = $.searchScripts(/token="([^"]+)"/);
  1833. if (!m) {
  1834. throw new _.AdsBypasserError('site changed');
  1835. }
  1836. m = m[1];
  1837. var interLink = '/go/' + m + '?fa=15466&a=' + window.location.hash.substr(1);
  1838. setTimeout(function () {
  1839. $.openLink(interLink);
  1840. }, 6000);
  1841. },
  1842. });
  1843.  
  1844. $.register({
  1845. rule: {
  1846. host: /^www\.free-tv-video-online\.info$/,
  1847. path: /^\/interstitial2\.html$/,
  1848. query: /lnk=([^&]+)/,
  1849. },
  1850. start: function (m) {
  1851. 'use strict';
  1852. var url = decodeURIComponent(m.query[1]);
  1853. $.openLink(url);
  1854. },
  1855. });
  1856.  
  1857. (function () {
  1858. 'use strict';
  1859. $.register({
  1860. rule: {
  1861. host: /^(www\.)?fundurl\.com$/,
  1862. query: /i=([^&]+)/,
  1863. },
  1864. start: function (m) {
  1865. $.openLink(m.query[1]);
  1866. },
  1867. });
  1868. $.register({
  1869. rule: {
  1870. host: /^(www\.)?fundurl\.com$/,
  1871. path: /^\/(go-\w+|load\.php)$/,
  1872. },
  1873. ready: function () {
  1874. var f = $('iframe[name=fpage3]');
  1875. $.openLink(f.src);
  1876. },
  1877. });
  1878. })();
  1879.  
  1880. $.register({
  1881. rule: {
  1882. host: /^gca\.sh|repla\.cr$/,
  1883. },
  1884. ready: function () {
  1885. 'use strict';
  1886. $.removeNodes('iframe');
  1887. var jQuery = $.window.$;
  1888. setTimeout(function () {
  1889. jQuery("#captcha-dialog").dialog("open");
  1890. }, 1000);
  1891. },
  1892. });
  1893.  
  1894. $.register({
  1895. rule: {
  1896. host: /^gkurl\.us$/,
  1897. },
  1898. ready: function () {
  1899. 'use strict';
  1900. var iframe = $('#gkurl-frame');
  1901. $.openLink(iframe.src);
  1902. },
  1903. });
  1904.  
  1905. $.register({
  1906. rule: {
  1907. host: /^u\.go2\.me$/,
  1908. },
  1909. ready: function () {
  1910. 'use strict';
  1911. var iframe = $('iframe');
  1912. $.openLink(iframe.src);
  1913. },
  1914. });
  1915.  
  1916. $.register({
  1917. rule: {
  1918. host: /^hotshorturl\.com$/,
  1919. },
  1920. ready: function () {
  1921. 'use strict';
  1922. var frame = $('frame[scrolling=yes]');
  1923. $.openLink(frame.src);
  1924. },
  1925. });
  1926.  
  1927. $.register({
  1928. rule: {
  1929. host: /^(www\.)?(ilix\.in|priva\.us)$/,
  1930. path: /\/(\w+)/,
  1931. },
  1932. ready: function (m) {
  1933. 'use strict';
  1934. var realHost = 'ilix.in';
  1935. if (m.host[2] !== realHost) {
  1936. var realURL = location.href.replace(m.host[2], realHost);
  1937. $.openLink(realURL);
  1938. return;
  1939. }
  1940. var f = $.$('iframe[name=ifram]');
  1941. if (f) {
  1942. $.openLink(f.src);
  1943. return;
  1944. }
  1945. if (!$.$('img#captcha')) {
  1946. $('form[name=frm]').submit();
  1947. }
  1948. },
  1949. });
  1950.  
  1951. $.register({
  1952. rule: {
  1953. host: /^ity\.im$/,
  1954. },
  1955. ready: function () {
  1956. 'use strict';
  1957. var f = $.$('#main');
  1958. if (f) {
  1959. $.openLink(f.src);
  1960. return;
  1961. }
  1962. f = $.$$('frame').find(function (frame) {
  1963. if (frame.src.indexOf('interheader.php') < 0) {
  1964. return _.nop;
  1965. }
  1966. return frame.src;
  1967. });
  1968. if (f) {
  1969. $.openLink(f.payload);
  1970. return;
  1971. }
  1972. f = $.searchScripts(/krypted=([^&]+)/);
  1973. if (!f) {
  1974. throw new _.AdsBypasserError('site changed');
  1975. }
  1976. f = f[1];
  1977. var data = $.window.des('ksnslmtmk0v4Pdviusajqu', $.window.hexToString(f), 0, 0);
  1978. if (data) {
  1979. $.openLink('http://ity.im/1104_21_50846_' + data);
  1980. }
  1981. },
  1982. });
  1983.  
  1984. $.register({
  1985. rule: {
  1986. host: /^(www\.)?kingofshrink\.com$/,
  1987. },
  1988. ready: function () {
  1989. 'use strict';
  1990. var l = $('#textresult > a');
  1991. $.openLink(l.href);
  1992. },
  1993. });
  1994.  
  1995. $.register({
  1996. rule: {
  1997. host: /^(www\.)?leechbd\.tk$/,
  1998. path: /^\/Shortener\/(\w+)$/,
  1999. },
  2000. start: function (m) {
  2001. 'use strict';
  2002. $.get('/Shortener/API/read/get', {id: m.path[1], type: 'json'}).then(function (text) {
  2003. var r = JSON.parse(text);
  2004. if (r.success == true && r.data.full) {
  2005. $.openLink(r.data.full);
  2006. } else {
  2007. _.warn('API Error ' + r.error.code + ' : ' + r.error.msg);
  2008. }
  2009. });
  2010. },
  2011. });
  2012.  
  2013. $.register({
  2014. rule: 'http://www.lienscash.com/l/*',
  2015. ready: function () {
  2016. 'use strict';
  2017. var a = $('#redir_btn');
  2018. $.openLink(a.href);
  2019. },
  2020. });
  2021.  
  2022. $.register({
  2023. rule: {
  2024. host: /^(www\.)?\w+\.link-protector\.com$/,
  2025. },
  2026. ready: function (m) {
  2027. 'use strict';
  2028. var f = $('form[style="font-weight:normal;font-size:12;font-family:Verdana;"]');
  2029. $.openLink(f.action);
  2030. },
  2031. });
  2032.  
  2033. $.register({
  2034. rule: {
  2035. host: /\.link2dollar\.com$/,
  2036. path: /^\/\d+$/,
  2037. },
  2038. ready: function () {
  2039. 'use strict';
  2040. var m = $.searchScripts(/var rlink = '([^']+)';/);
  2041. if (!m) {
  2042. throw new _.AdsBypasserError('site changed');
  2043. }
  2044. m = m[1];
  2045. $.openLink(m);
  2046. },
  2047. });
  2048.  
  2049. $.register({
  2050. rule: {
  2051. host: /^link2you\.ru$/,
  2052. path: /^\/\d+\/(.+)$/,
  2053. },
  2054. start: function (m) {
  2055. 'use strict';
  2056. var url = m.path[1];
  2057. if (!url.match(/^https?:\/\//)) {
  2058. url = '//' + url;
  2059. }
  2060. $.openLink(url);
  2061. },
  2062. });
  2063.  
  2064. (function() {
  2065. function ConvertFromHex (str) {
  2066. var result = [];
  2067. while (str.length >= 2) {
  2068. result.push(String.fromCharCode(parseInt(str.substring(0, 2), 16)));
  2069. str = str.substring(2, str.length);
  2070. }
  2071. return result.join("");
  2072. }
  2073. var Encode = function (str) {
  2074. var s = [], j = 0, x, res = '', k = arguments.callee.toString().replace(/\s+/g, "");
  2075. for (var i = 0; i < 256; i++) {
  2076. s[i] = i;
  2077. }
  2078. for (i = 0; i < 256; i++) {
  2079. j = (j + s[i] + k.charCodeAt(i % k.length)) % 256;
  2080. x = s[i];
  2081. s[i] = s[j];
  2082. s[j] = x;
  2083. }
  2084. i = 0;
  2085. j = 0;
  2086. for (var y = 0; y < str.length; y++) {
  2087. i = (i + 1) % 256;
  2088. j = (j + s[i]) % 256;
  2089. x = s[i];
  2090. s[i] = s[j];
  2091. s[j] = x;
  2092. res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);
  2093. }
  2094. return res;
  2095. };
  2096. var hostRules = [
  2097. /^(([\w]{8}|www)\.)?(allanalpass|cash4files|drstickyfingers|fapoff|freegaysitepass|(gone|tube)viral|(pic|tna)bucks|whackyvidz)\.com$/,
  2098. /^(([\w]{8}|www)\.)?(a[mn]y|deb|dyo|sexpalace)\.gs$/,
  2099. /^(([\w]{8}|www)\.)?(filesonthe|poontown|seriousdeals|ultrafiles|urlbeat)\.net$/,
  2100. /^(([\w]{8}|www)\.)?freean\.us$/,
  2101. /^(([\w]{8}|www)\.)?galleries\.bz$/,
  2102. /^(([\w]{8}|www)\.)?hornywood\.tv$/,
  2103. /^(([\w]{8}|www)\.)?link(babes|bucks)\.com$/,
  2104. /^(([\w]{8}|www)\.)?(megaline|miniurls|qqc|rqq|tinylinks|yyv|zff)\.co$/,
  2105. /^(([\w]{8}|www)\.)?(these(blog|forum)s)\.com$/,
  2106. /^(([\w]{8}|www)\.)?youfap\.me$/,
  2107. /^warning-this-linkcode-will-cease-working-soon\.www\.linkbucksdns\.com$/,
  2108. ];
  2109. function generateRandomIP () {
  2110. 'use strict';
  2111. return [0,0,0,0].map(function () {
  2112. return Math.floor(Math.random() * 256);
  2113. }).join('.');
  2114. }
  2115. function findToken (context) {
  2116. 'use strict';
  2117. var script = $.searchScripts('window[\'init\' + \'Lb\' + \'js\' + \'\']', context);
  2118. if (!script) {
  2119. _.warn('pattern changed');
  2120. return null;
  2121. }
  2122. var m = script.match(/AdPopUrl\s*:\s*'.+\?ref=([\w\d]+)'/);
  2123. var token = m[1];
  2124. m = script.match(/=\s*(\d+);/);
  2125. var ak = parseInt(m[1], 10);
  2126. var re = /\+\s*(\d+);/g;
  2127. var tmp = null;
  2128. while((m = re.exec(script)) !== null) {
  2129. tmp = m[1];
  2130. }
  2131. ak += parseInt(tmp, 10);
  2132. return {
  2133. t: token,
  2134. aK: ak,
  2135. };
  2136. }
  2137. function sendRequest (token) {
  2138. 'use strict';
  2139. _.info('sending token: %o', token);
  2140. var i = setInterval(function () {
  2141. $.get('/intermission/loadTargetUrl', token).then(function (text) {
  2142. var data = JSON.parse(text);
  2143. _.info('response: %o', data);
  2144. if (!data.Success && data.Errors[0] === 'Invalid token') {
  2145. _.info('got invalid token');
  2146. clearInterval(i);
  2147. retry();
  2148. return;
  2149. }
  2150. if (data.Success && !data.AdBlockSpotted && data.Url) {
  2151. clearInterval(i);
  2152. $.openLinkWithReferer(data.Url);
  2153. return;
  2154. }
  2155. });
  2156. }, 1000);
  2157. }
  2158. function retry () {
  2159. 'use strict';
  2160. $.get(window.location.toString(), {}, {
  2161. 'X-Forwarded-For': generateRandomIP(),
  2162. }).then(function (text) {
  2163. var d = $.toDOM(text);
  2164. var t = findToken(d);
  2165. if (!t) {
  2166. var i = setTimeout(retry, 1000);
  2167. return;
  2168. }
  2169. sendRequest(t);
  2170. });
  2171. }
  2172. $.register({
  2173. rule: {
  2174. host: hostRules,
  2175. path: /^\/\w+\/url\/(.+)$/,
  2176. },
  2177. ready: function(m) {
  2178. 'use strict';
  2179. $.removeAllTimer();
  2180. $.resetCookies();
  2181. $.removeNodes('iframe');
  2182. var url = m.path[1] + window.location.search;
  2183. var match = $.searchScripts(/UrlEncoded: ([^,]+)/);
  2184. if (match && match[1] === 'true') {
  2185. url = Encode(ConvertFromHex(url));
  2186. }
  2187. $.openLinkWithReferer(url);
  2188. }
  2189. });
  2190. $.register({
  2191. rule: {
  2192. host: hostRules,
  2193. },
  2194. ready: function () {
  2195. 'use strict';
  2196. $.removeAllTimer();
  2197. $.resetCookies();
  2198. $.removeNodes('iframe');
  2199. if (window.location.pathname.indexOf('verify') >= 0) {
  2200. var path = window.location.pathname.replace('/verify', '');
  2201. $.openLink(path);
  2202. return;
  2203. }
  2204. var token = findToken(document);
  2205. sendRequest(token);
  2206. },
  2207. });
  2208. $.register({
  2209. rule: {
  2210. query: /^(.*)[?&]_lbGate=\d+$/,
  2211. },
  2212. start: function (m) {
  2213. 'use strict';
  2214. $.setCookie('_lbGatePassed', 'true');
  2215. $.openLink(window.location.pathname + m.query[1]);
  2216. },
  2217. });
  2218. })();
  2219.  
  2220. $.register({
  2221. rule: {
  2222. host: [
  2223. /^www\.linkdecode\.com$/,
  2224. /^www\.fastdecode\.com$/,
  2225. ],
  2226. path: /^\/$/,
  2227. query: /^\?.+$/,
  2228. },
  2229. ready: function (m) {
  2230. 'use strict';
  2231. $.removeNodes('iframe');
  2232. var b = $('#m > .Visit_Link');
  2233. b = b.onclick.toString().match(/\'([^']+)\'/);
  2234. if (!b) {
  2235. throw new _.AdsBypasser('pattern changed');
  2236. }
  2237. $.openLink(b[1]);
  2238. },
  2239. });
  2240.  
  2241. $.register({
  2242. rule: {
  2243. host: /^linkshrink\.net$/,
  2244. path: /^\/[a-zA-Z0-9]+$/,
  2245. },
  2246. ready: function () {
  2247. 'use strict';
  2248. var a = $.searchScripts(/class="bt" href="([^"]+)"/);
  2249. if (!a) {
  2250. _.warn('pattern changed');
  2251. return;
  2252. }
  2253. $.openLinkWithReferer(a[1]);
  2254. },
  2255. });
  2256.  
  2257. $.register({
  2258. rule: 'http://lix.in/-*',
  2259. ready: function () {
  2260. 'use strict';
  2261. var i = $.$('#ibdc');
  2262. if (i) {
  2263. return;
  2264. }
  2265. i = $.$('form');
  2266. if (i) {
  2267. i.submit();
  2268. return;
  2269. }
  2270. i = $('iframe');
  2271. $.openLink(i.src);
  2272. },
  2273. });
  2274.  
  2275. $.register({
  2276. rule: {
  2277. host: /^lnk\.in$/,
  2278. },
  2279. ready: function () {
  2280. 'use strict';
  2281. var a = $('#divRedirectText a');
  2282. $.openLink(a.innerHTML);
  2283. },
  2284. });
  2285.  
  2286. $.register({
  2287. rule: {
  2288. host: /^(rd?)lnk\.co|reducelnk\.com$/,
  2289. path: /^\/[^.]+$/,
  2290. },
  2291. ready: function () {
  2292. 'use strict';
  2293. var f = $.$('iframe#dest');
  2294. if (f) {
  2295. $.openLink(f.src);
  2296. return;
  2297. }
  2298. $.removeNodes('iframe');
  2299. var o = $.$('#urlholder');
  2300. if (o) {
  2301. $.openLink(o.value);
  2302. return;
  2303. }
  2304. o = $.$('#skipBtn');
  2305. if (o) {
  2306. o = o.querySelector('a');
  2307. $.openLink(o.href);
  2308. return;
  2309. }
  2310. o = document.title.replace(/(LNK.co|Linkbee)\s*:\s*/, '');
  2311. $.openLink(o);
  2312. },
  2313. });
  2314.  
  2315. $.register({
  2316. rule: {
  2317. host: /^lnx\.lu|url\.fm|z\.gs$/,
  2318. },
  2319. ready: function () {
  2320. 'use strict';
  2321. var a = $('#clickbtn a');
  2322. $.openLink(a.href);
  2323. },
  2324. });
  2325.  
  2326. $.register({
  2327. rule: {
  2328. host: /^lynk\.my$/,
  2329. },
  2330. ready: function () {
  2331. 'use strict';
  2332. var i = setInterval(function () {
  2333. var a = $.$('#continueButton a', window.frames[0].document);
  2334. if (!a) {
  2335. return;
  2336. }
  2337. clearInterval(i);
  2338. $.openLink(a.href);
  2339. }, 100);
  2340. },
  2341. });
  2342.  
  2343. $.register({
  2344. rule: [
  2345. 'http://madlink.sk/',
  2346. 'http://madlink.sk/*.html',
  2347. ],
  2348. });
  2349. $.register({
  2350. rule: 'http://madlink.sk/*',
  2351. start: function (m) {
  2352. 'use strict';
  2353. $.removeNodes('iframe');
  2354. $.post('/ajax/check_redirect.php', {
  2355. link: m[1],
  2356. }).then(function (text) {
  2357. $.openLink(text);
  2358. });
  2359. },
  2360. });
  2361.  
  2362. $.register({
  2363. rule: {
  2364. host: [
  2365. /^mant[ae][pb]\.in$/,
  2366. /^st\.oploverz\.net$/,
  2367. ],
  2368. },
  2369. ready: function () {
  2370. 'use strict';
  2371. var a = $('a.redirect, a[target=_blank][rel=nofollow]');
  2372. $.openLink(a.href);
  2373. },
  2374. });
  2375.  
  2376. $.register({
  2377. rule: {
  2378. host: /^(www\.)?microtec\.com\.sg$/,
  2379. path: /^\/short\/\w+$/,
  2380. },
  2381. ready: function (m) {
  2382. 'use strict';
  2383. var l = $('a.btn-block.redirect').href;
  2384. var b64 = l.match(/\?r=(\w+={0,2}?)/);
  2385. $.openLink(atob(b64[1]));
  2386. },
  2387. });
  2388.  
  2389. $.register({
  2390. rule: {
  2391. host: /^www\.mije\.net$/,
  2392. path: /^\/\w+\/(.+)$/,
  2393. },
  2394. start: function (m) {
  2395. 'use strict';
  2396. var url = atob(m.path[1]);
  2397. $.openLink(url);
  2398. },
  2399. });
  2400.  
  2401. $.register({
  2402. rule: {
  2403. host: [
  2404. /^moe\.god\.jp$/,
  2405. /^moesubs\.akurapopo\.pro$/,
  2406. /^dl\.nsfk\.in$/,
  2407. ]
  2408. },
  2409. ready: function () {
  2410. 'use strict';
  2411. var a = $('div div center a');
  2412. $.openLink(a.href);
  2413. },
  2414. });
  2415.  
  2416. $.register({
  2417. rule: {
  2418. host: /^mt0\.org$/,
  2419. path: /^\/[^\/]+\/$/,
  2420. },
  2421. ready: function () {
  2422. 'use strict';
  2423. $.removeNodes('frame[name=bottom]');
  2424. var f = $('frame[name=top]');
  2425. var i = setInterval(function () {
  2426. var a = $.$('div a', f.contentDocument);
  2427. if (!a) {
  2428. return;
  2429. }
  2430. clearInterval(i);
  2431. $.openLink(a.href)
  2432. }, 1000);
  2433. },
  2434. });
  2435.  
  2436. $.register({
  2437. rule: 'http://my-link.pro/*',
  2438. ready: function () {
  2439. 'use strict';
  2440. var i = $('iframe[scrolling=auto]');
  2441. if (i) {
  2442. $.openLink(i.src);
  2443. }
  2444. },
  2445. });
  2446.  
  2447. $.register({
  2448. rule: {
  2449. host: /^nsfw\.in$/,
  2450. },
  2451. ready: function () {
  2452. 'use strict';
  2453. var a = $('#long_url a');
  2454. $.openLink(a.href);
  2455. },
  2456. });
  2457.  
  2458. $.register({
  2459. rule: {
  2460. host: /^nutshellurl\.com$/,
  2461. },
  2462. ready: function () {
  2463. 'use strict';
  2464. var iframe = $('iframe');
  2465. $.openLink(iframe.src);
  2466. },
  2467. });
  2468.  
  2469. $.register({
  2470. rule: {
  2471. host: /^www\.oni\.vn$/,
  2472. },
  2473. ready: function () {
  2474. 'use strict';
  2475. $.removeNodes('iframe');
  2476. var url = $.searchScripts(/window\.location='([^']+)'/);
  2477. if (!url) {
  2478. throw new _.AdsBypasserError('pattern changed');
  2479. }
  2480. $.openLink(url[1]);
  2481. },
  2482. });
  2483.  
  2484. $.register({
  2485. rule: {
  2486. host: /^oxyl\.me$/,
  2487. },
  2488. ready: function () {
  2489. 'use strict';
  2490. var l = $.$$('.links-container.result-form > a.result-a');
  2491. if (l.size() > 1) {
  2492. return;
  2493. }
  2494. $.openLink(l.at(0).href);
  2495. },
  2496. });
  2497.  
  2498. $.register({
  2499. rule: {
  2500. host: /^p\.pw$/,
  2501. },
  2502. ready: function () {
  2503. 'use strict';
  2504. $.removeNodes('iframe');
  2505. var m = $.searchScripts(/window\.location = "(.*)";/);
  2506. m = m[1];
  2507. $.openLink(m);
  2508. },
  2509. });
  2510.  
  2511. $.register({
  2512. rule: {
  2513. host: /^(www\.)?\w+\.rapeit\.net$/,
  2514. path: /^\/(go|prepair|request|collect|analyze)\/[a-f0-9]+$/,
  2515. },
  2516. ready: function (m) {
  2517. 'use strict';
  2518. var a = $('a#download_link');
  2519. $.openLink(a.href);
  2520. },
  2521. });
  2522.  
  2523. $.register({
  2524. rule: 'http://reffbux.com/refflinx/view/*',
  2525. ready: function () {
  2526. 'use strict';
  2527. $.removeNodes('iframe');
  2528. var m = $.searchScripts(/skip_this_ad_(\d+)_(\d+)/);
  2529. var id = m[1];
  2530. var share = m[2];
  2531. var location = window.location.toString();
  2532. $.post('http://reffbux.com/refflinx/register', {
  2533. id: id,
  2534. share: share,
  2535. fp: 0,
  2536. location: location,
  2537. referer: '',
  2538. }).then(function (text) {
  2539. var m = text.match(/'([^']+)'/);
  2540. if (!m) {
  2541. throw new _.AdsBypasserError('pattern changed');
  2542. }
  2543. $.openLink(m[1]);
  2544. });
  2545. },
  2546. });
  2547.  
  2548. $.register({
  2549. rule: 'http://richlink.com/app/webscr?cmd=_click&key=*',
  2550. ready: function () {
  2551. 'use strict';
  2552. var f = $('frameset');
  2553. f = f.onload.toString();
  2554. f = f.match(/url=([^&]+)/);
  2555. if (f) {
  2556. f = decodeURIComponent(f[1]);
  2557. } else {
  2558. f = $('frame[name=site]');
  2559. f = f.src;
  2560. }
  2561. $.openLink(f);
  2562. },
  2563. });
  2564.  
  2565. $.register({
  2566. rule: 'http://rijaliti.info/*.php',
  2567. ready: function () {
  2568. 'use strict';
  2569. var a = $('#main td[align="center"] a');
  2570. $.openLink(a.href);
  2571. },
  2572. });
  2573.  
  2574. $.register({
  2575. rule: {
  2576. host: /^riurl\.com$/,
  2577. path: /^\/.+/,
  2578. },
  2579. ready: function () {
  2580. 'use strict';
  2581. var s = $.$('body script');
  2582. if (s) {
  2583. s = s.innerHTML.indexOf('window.location.replace');
  2584. if (s >= 0) {
  2585. return;
  2586. }
  2587. }
  2588. $.openLinkByPost('', {
  2589. hidden: '1',
  2590. image: ' ',
  2591. });
  2592. },
  2593. });
  2594.  
  2595. $.register({
  2596. rule: {
  2597. host: /^preview\.rlu\.ru$/,
  2598. },
  2599. ready: function () {
  2600. 'use strict';
  2601. var a = $('#content > .long_url > a');
  2602. $.openLink(a.href);
  2603. },
  2604. });
  2605.  
  2606. $.register({
  2607. rule: {
  2608. host: /^robo\.us$/,
  2609. },
  2610. ready: function () {
  2611. 'use strict';
  2612. $.removeNodes('iframe');
  2613. var url = atob($.window.fl);
  2614. $.openLink(url);
  2615. },
  2616. });
  2617.  
  2618. $.register({
  2619. rule: {
  2620. host: /^(www\.)?sa\.ae$/,
  2621. path: /^\/\w+\/$/,
  2622. },
  2623. ready: function () {
  2624. 'use strict';
  2625. var m = $.searchScripts(/var real_link = '([^']+)';/);
  2626. $.openLink(m[1]);
  2627. },
  2628. });
  2629.  
  2630. $.register({
  2631. rule: [
  2632. {
  2633. host: /^(www\.)?safelinkconverter2\.com$/,
  2634. path: /^\/decrypt-\d\/$/,
  2635. query: /id=(\w+=+)/,
  2636. },
  2637. {
  2638. host: /^(www\.)?safelinkreview\.com$/,
  2639. query: /id=(\w+=+)/,
  2640. },
  2641. ],
  2642. start: function (m) {
  2643. 'use strict';
  2644. $.get('https://decrypt.safelinkconverter.com/index.php' + window.location.search).then(function (html) {
  2645. var m = html.match(/3;URL=([^"]+)/);
  2646. if (!m) {
  2647. _.warn('pattern changed');
  2648. return;
  2649. }
  2650. $.openLink(m[1]);
  2651. });
  2652. },
  2653. });
  2654.  
  2655. $.register({
  2656. rule: {
  2657. host: /^(www\.)?safeurl\.eu$/,
  2658. path: /\/\w+/,
  2659. },
  2660. ready: function () {
  2661. 'use strict';
  2662. var directUrl = $.searchScripts(/window\.open\("([^"]+)"\);/);
  2663. if (!directUrl) {
  2664. throw new _.AdsBypasserError('script content changed');
  2665. }
  2666. directUrl = directUrl[1];
  2667. $.openLink(directUrl);
  2668. },
  2669. });
  2670.  
  2671. $.register({
  2672. rule: {
  2673. host: /^segmentnext\.com$/,
  2674. path: /^\/interstitial\.html$/,
  2675. query: /return_url=([^&]+)/,
  2676. },
  2677. start: function (m) {
  2678. 'use strict';
  2679. $.openLink(decodeURIComponent(m.query[1]));
  2680. },
  2681. });
  2682.  
  2683. $.register({
  2684. rule: {
  2685. host: /^(www\.)?(apploadz\.ru|seomafia\.net)$/
  2686. },
  2687. ready: function () {
  2688. 'use strict';
  2689. $.removeNodes('iframe');
  2690. var a = $('table a');
  2691. $.openLink(a.href);
  2692. },
  2693. });
  2694.  
  2695. $.register({
  2696. rule: /http:\/\/setlinks\.us\/(p|t|d).*/,
  2697. ready: function () {
  2698. 'use strict';
  2699. var k = $.searchScripts(/window\.location='([^']+)'/);
  2700. if (k) {
  2701. $.openLink(k[1]);
  2702. return;
  2703. }
  2704. var aLinks = $.$$('div.links-container.result-form:not(.p-links-container) > span.dlinks > a');
  2705. if (aLinks.size() === 1) {
  2706. $.openLink(aLinks.at(0).href);
  2707. return;
  2708. }
  2709. k = $('img[alt=captcha]');
  2710. $.captcha(k.src, function (a) {
  2711. var b = $('#captcha');
  2712. var c = $('input[name=Submit]');
  2713. b.value = a;
  2714. c.click();
  2715. });
  2716. },
  2717. });
  2718.  
  2719. (function () {
  2720. 'use strict';
  2721. function afterGotSessionId (sessionId) {
  2722. var X_NewRelic_ID = $.searchScripts(/xpid:"([^"]+)"/);
  2723. var Fingerprint = $.window.Fingerprint;
  2724. var browserToken = null;
  2725. if (Fingerprint) {
  2726. browserToken = (new Fingerprint({canvas: !0})).get();
  2727. } else {
  2728. browserToken = Math.round((new Date()).getTime() / 1000);
  2729. }
  2730. var data = "sessionId=" + sessionId + "&browserToken=" + browserToken;
  2731. var header = {
  2732. Accept: 'application/json, text/javascript',
  2733. };
  2734. if (X_NewRelic_ID) {
  2735. header['X-NewRelic-ID'] = X_NewRelic_ID;
  2736. }
  2737. var i = setInterval(function () {
  2738. $.get('/adSession/callback', data, header).then(function (text) {
  2739. var r = JSON.parse(text);
  2740. if (r.status == "ok" && r.destinationUrl) {
  2741. clearInterval(i);
  2742. $.removeAllTimer();
  2743. $.openLink(r.destinationUrl);
  2744. }
  2745. });
  2746. }, 1000);
  2747. }
  2748. $.register({
  2749. rule: {
  2750. host: /^sh\.st|(dh10thbvu|u2ks|jnw0)\.com$/,
  2751. path: /^\/[\d\w]+/,
  2752. },
  2753. ready: function () {
  2754. $.removeNodes('iframe');
  2755. var m = $.searchScripts(/sessionId: "([\d\w]+)",/);
  2756. if (m) {
  2757. afterGotSessionId(m[1]);
  2758. return;
  2759. }
  2760. var o = new MutationObserver(function (mutations) {
  2761. mutations.forEach(function (mutation) {
  2762. var m = $.searchScripts(/sessionId: "([\d\w]+)",/);
  2763. if (m) {
  2764. o.disconnect();
  2765. afterGotSessionId(m[1]);
  2766. }
  2767. });
  2768. });
  2769. o.observe(document.body, {
  2770. childList: true,
  2771. });
  2772. },
  2773. });
  2774. })();
  2775.  
  2776. $.register({
  2777. rule: {
  2778. host: [
  2779. /^(www\.)?shortenurl\.tk$/,
  2780. /^(www\.)?pengaman\.link$/,
  2781. ],
  2782. path: /^\/\w+$/,
  2783. },
  2784. ready: function (m) {
  2785. 'use strict';
  2786. var l = $('a.btn-block.redirect');
  2787. $.openLink(l.href);
  2788. },
  2789. });
  2790.  
  2791. $.register({
  2792. rule: {
  2793. host: /^(www\.)?similarsites\.com$/,
  2794. path: /^\/goto\/([^?]+)/
  2795. },
  2796. start: function (m) {
  2797. 'use strict';
  2798. var l = m.path[1];
  2799. if (!/^https?:\/\//.test(l)) {
  2800. l = 'http://' + l;
  2801. }
  2802. $.openLink(l);
  2803. },
  2804. });
  2805.  
  2806. $.register({
  2807. rule: {
  2808. host: /^(www\.)?safelinkair\.com$/,
  2809. path: /^\/code$/,
  2810. query: /(?:\?|&)link=([a-zA-Z0-9=]+)(?:$|&)/,
  2811. },
  2812. start: function (m) {
  2813. 'use strict';
  2814. var l = atob(m.query[1])
  2815. $.openLink(l);
  2816. },
  2817. });
  2818.  
  2819. $.register({
  2820. rule: {
  2821. host: /^stash-coins\.com$/,
  2822. },
  2823. start: function () {
  2824. 'use strict';
  2825. var url = window.location.toString();
  2826. var i = url.lastIndexOf('http');
  2827. url = url.substr(i);
  2828. $.openLink(url);
  2829. },
  2830. });
  2831.  
  2832. $.register({
  2833. rule: {
  2834. host: /^steamcommunity\.com$/,
  2835. path: /^\/linkfilter\/(.+)?$/,
  2836. query: /^(?:\?url=(.+))?$/,
  2837. },
  2838. start: function (m) {
  2839. 'use strict';
  2840. var target = m.path[1]? m.path[1]+document.location.search : m.query[1];
  2841. $.openLink(target);
  2842. },
  2843. });
  2844.  
  2845. $.register({
  2846. rule: [
  2847. {
  2848. host: /^(www\.)?sylnk\.net$/,
  2849. query: /link=([^&]+)/,
  2850. },
  2851. {
  2852. host: /^(www\.)?compul\.in$/,
  2853. path: /^\/n\.php$/,
  2854. query: /v=([^&]+)/,
  2855. },
  2856. ],
  2857. start: function (m) {
  2858. 'use strict';
  2859. var rawLink = atob(m.query[1]);
  2860. $.openLink(rawLink);
  2861. },
  2862. });
  2863.  
  2864. $.register({
  2865. rule: {
  2866. host: /^thinfi\.com$/,
  2867. },
  2868. ready: function () {
  2869. 'use strict';
  2870. var a = $('div p a');
  2871. $.openLink(a.href);
  2872. },
  2873. });
  2874.  
  2875. $.register({
  2876. rule: {
  2877. host: /^tinyarrows\.com$/,
  2878. path: /^\/preview\.php$/,
  2879. query: /^\?page=([^&]+)/,
  2880. },
  2881. start: function (m) {
  2882. 'use strict';
  2883. $.openLink(decodeURIComponent(m.query[1]));
  2884. },
  2885. });
  2886.  
  2887. $.register({
  2888. rule: {
  2889. host: /^(www\.)?typ\.me$/,
  2890. },
  2891. ready: function (m) {
  2892. 'use strict';
  2893. var a = $('#skipAdBtn');
  2894. $.openLink(a.href);
  2895. },
  2896. });
  2897.  
  2898. $.register({
  2899. rule: {
  2900. host: /^(www\.)?ultshare\.com$/,
  2901. path: /^\/(?:(?:\d-)?(\d+)|index\.php)$/,
  2902. query: /^(?:\?a=\d&c=(\d+))?$/
  2903. },
  2904. start: function (m) {
  2905. 'use strict';
  2906. var linkId = m.path[1]?m.path[1]:m.query[1];
  2907. var directLink = '/3-' + linkId;
  2908. $.openLink(directLink);
  2909. },
  2910. });
  2911.  
  2912. $.register({
  2913. rule: {
  2914. host: /^unfake\.it$/,
  2915. },
  2916. ready: function () {
  2917. 'use strict';
  2918. var frame = $('frame');
  2919. var i = frame.src.lastIndexOf('http://');
  2920. $.openLink(frame.src.substr(i));
  2921. },
  2922. });
  2923.  
  2924. $.register({
  2925. rule: {
  2926. host: /^(www\.)?(upan|gxp)\.so$/,
  2927. path: /^\/\w+$/,
  2928. },
  2929. ready: function () {
  2930. 'use strict';
  2931. var a = $('table.td_line a[onclick="down_process_s();"]');
  2932. $.openLink(a.href);
  2933. },
  2934. });
  2935.  
  2936. $.register({
  2937. rule: {
  2938. host: /^url\.ie$/,
  2939. },
  2940. ready: function () {
  2941. 'use strict';
  2942. var a = $('a[title="Link to original URL"]');
  2943. $.openLink(a.href);
  2944. },
  2945. });
  2946.  
  2947. $.register({
  2948. rule: {
  2949. host: /urlcash\.(com|net|org)|(bat5|detonating|celebclk|eightteen|smilinglinks|peekatmygirlfriend|pornyhost|clb1|urlgalleries)\.com|looble\.net|xxxs\.org$/,
  2950. },
  2951. ready: function () {
  2952. 'use strict';
  2953. if ($.window && $.window.linkDestUrl) {
  2954. $.openLink($.window.linkDestUrl);
  2955. return;
  2956. }
  2957. var matches = document.body.innerHTML.match(/linkDestUrl = '(.+)'/);
  2958. if (matches) {
  2959. $.openLink(matches[1]);
  2960. return;
  2961. }
  2962. },
  2963. });
  2964.  
  2965. $.register({
  2966. rule: {
  2967. host: /^(www\.)?(urlcow|miniurl)\.com$/,
  2968. },
  2969. ready: function () {
  2970. 'use strict';
  2971. var m = $.searchScripts(/window\.location = "([^"]+)"/);
  2972. if (!m) {
  2973. throw new _.AdsBypasserError('site changed');
  2974. }
  2975. $.openLink(m[1]);
  2976. },
  2977. });
  2978.  
  2979. $.register({
  2980. rule: {
  2981. host: /^urlinn\.com$/,
  2982. },
  2983. ready: function () {
  2984. 'use strict';
  2985. var m = $('META[HTTP-EQUIV=refresh]').getAttribute('CONTENT').match(/url='([^']+)'/);
  2986. if (m) {
  2987. $.openLink(m[1]);
  2988. }
  2989. },
  2990. });
  2991.  
  2992. $.register({
  2993. rule: {
  2994. host: /^urlms\.com$/,
  2995. },
  2996. ready: function () {
  2997. 'use strict';
  2998. var iframe = $('#content');
  2999. $.openLink(iframe.src);
  3000. },
  3001. });
  3002.  
  3003. $.register({
  3004. rule: {
  3005. host: /^(www\.)?urlv2\.com$/,
  3006. },
  3007. ready: function (m) {
  3008. 'use strict';
  3009. if (window.location.pathname.indexOf('locked') >= 0) {
  3010. var path = window.location.pathname.replace('/locked', '');
  3011. $.openLink(path);
  3012. return;
  3013. }
  3014. var m = $.searchScripts(/jeton=([\w]+)/);
  3015. var l = 'http://urlv2.com/algo.php?action=passer&px=0&so=1&jeton=' + m[1];
  3016. window.setTimeout(function() {$.openLink(l)}, 5000);
  3017. },
  3018. });
  3019.  
  3020. $.register({
  3021. rule: 'http://urlz.so/l/*',
  3022. ready: function () {
  3023. 'use strict';
  3024. var i = $.$('td > a');
  3025. if (i) {
  3026. i = i.href;
  3027. var m = i.match(/javascript:declocation\('(.+)'\);/);
  3028. if (m) {
  3029. i = atob(m[1]);
  3030. }
  3031. $.openLink(i);
  3032. return;
  3033. }
  3034. i = $('img');
  3035. $.captcha(i.src, function (a) {
  3036. var b = $('input[name=captcha]');
  3037. var c = $('input[name=submit]');
  3038. b.value = a;
  3039. c.click();
  3040. });
  3041. },
  3042. });
  3043.  
  3044. $.register({
  3045. rule: {
  3046. host: /^www\.viidii\.info$/,
  3047. },
  3048. ready: function () {
  3049. 'use strict';
  3050. var o = $('#directlink');
  3051. $.openLink(o.href);
  3052. },
  3053. });
  3054.  
  3055. $.register({
  3056. rule: {
  3057. host: /^(www\.)?vir\.al$/,
  3058. },
  3059. ready: function () {
  3060. 'use strict';
  3061. var m = $.searchScripts(/var target_url = '([^']+)';/);
  3062. if (!m) {
  3063. throw new _.AdsBypasserError('site changed');
  3064. }
  3065. $.openLink(m[1]);
  3066. },
  3067. });
  3068.  
  3069. $.register({
  3070. rule: {
  3071. host: /^(www\.)?wzzq\.me$/,
  3072. },
  3073. ready: function () {
  3074. 'use strict';
  3075. try {
  3076. var l = $('#img_loading_table2 div.wz_img_hit a[target=_blank]').href;
  3077. $.openLink(l);
  3078. } catch (e) {
  3079. }
  3080. },
  3081. });
  3082.  
  3083. $.register({
  3084. rule: {
  3085. host: /^xlink.me$/
  3086. },
  3087. ready: function () {
  3088. 'use strict';
  3089. var a = $('#main_form > center > a');
  3090. if (!a) {return;}
  3091. $.openLink(a.href);
  3092. },
  3093. });
  3094.  
  3095. $.register({
  3096. rule: 'http://yep.it/preview.php?p=*',
  3097. ready: function () {
  3098. 'use strict';
  3099. var link = $('font[color="grey"]').innerHTML;
  3100. $.openLink(link);
  3101. },
  3102. });
  3103.  
  3104. $.register({
  3105. rule: 'http://www.yooclick.com/l/*',
  3106. ready: function () {
  3107. 'use strict';
  3108. $.removeNodes('iframe');
  3109. var uniq = $.window.uniq || $.window.uniqi;
  3110. if (!uniq) {return;}
  3111. var path = window.location.pathname;
  3112. var url = _.T('{0}?ajax=true&adblock=false&old=false&framed=false&uniq={1}')(path, uniq);
  3113. var getURL = function() {
  3114. $.get(url).then(function (text) {
  3115. var goodURL = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(text);
  3116. if (goodURL) {
  3117. $.openLink(text);
  3118. } else {
  3119. setTimeout(getURL, 500);
  3120. }
  3121. });
  3122. }
  3123. getURL();
  3124. },
  3125. });
  3126.  
  3127. $.register({
  3128. rule: 'http://zo.mu/redirector/process?link=*',
  3129. ready: function () {
  3130. 'use strict';
  3131. $.removeNodes('iframe');
  3132. window.location.reload();
  3133. },
  3134. });
  3135.  
  3136. $.register({
  3137. rule: {
  3138. host: /^zzz\.gl$/,
  3139. },
  3140. ready: function () {
  3141. 'use strict';
  3142. var m = $.searchScripts(/var domainurl = '([^']+)';/);
  3143. if (!m) {
  3144. throw new _.AdsBypasserError('site changed');
  3145. }
  3146. $.openLink(m[1]);
  3147. },
  3148. });
  3149.  
  3150. $.register({
  3151. rule: {
  3152. host: /^www\.4shared\.com$/,
  3153. path: /^\/(mp3|get|rar|zip|file|android|software|program)\//,
  3154. },
  3155. ready: function () {
  3156. 'use strict';
  3157. $.get('http://www.4server.info/find.php', {
  3158. data: window.location.href,
  3159. }).then(function (data) {
  3160. var d = $.toDOM(data);
  3161. var c = $('meta[http-equiv=refresh]', d);
  3162. var b = c.content.match(/URL=(.+)$/);
  3163. var a = b[1];
  3164. $.openLink(a);
  3165. });
  3166. },
  3167. });
  3168.  
  3169. (function() {
  3170. 'use strict';
  3171. $.register({
  3172. rule: {
  3173. host: /^(www\.)?dl-protect\.com$/,
  3174. path: /\/[A-Z0-9]+/,
  3175. },
  3176. ready: function () {
  3177. if ($.$('#captcha')) {
  3178. return;
  3179. }
  3180. var f = $.$('form[name=ccerure]');
  3181. if (f) {
  3182. var observer = new MutationObserver(function (mutations) {
  3183. var iIn = $('input[id=in]');
  3184. for (var i = 0; i < mutations.length; i++) {
  3185. if (mutations[i].target.value && mutations[i].attributeName === 'value') {
  3186. observer.disconnect();
  3187. iIn.value = "Tracking too much hurts users' privacy";
  3188. if (!canFastRedirect()) {
  3189. return;
  3190. }
  3191. setTimeout(function() {
  3192. f.submit();
  3193. }, 600);
  3194. break;
  3195. }
  3196. }
  3197. });
  3198. var iIn = $('input[id=in]');
  3199. if (iIn.value) {
  3200. setTimeout(function() {
  3201. f.submit();
  3202. }, 600);
  3203. } else {
  3204. observer.observe(iIn, {
  3205. attributes: true,
  3206. });
  3207. }
  3208. return;
  3209. }
  3210. var l = $.$$('#slinks > a');
  3211. if (l.size() === 1) {
  3212. $.openLink(l.at(0).href);
  3213. }
  3214. },
  3215. });
  3216. function canFastRedirect () {
  3217. return !$.$('form[name=ccerure]').onsubmit && !$.$('form[name=ccerure] input[name=pwd]');
  3218. }
  3219. })();
  3220.  
  3221. $.register({
  3222. rule: {
  3223. host: /^(www\.)?embedupload\.com$/,
  3224. path: /^\/$/,
  3225. query: /^\?\w{2}=\w+$/
  3226. },
  3227. ready: function () {
  3228. 'use strict';
  3229. var downloadPage = $('.categories a[target=_blank]');
  3230. $.openLink(downloadPage);
  3231. },
  3232. });
  3233.  
  3234. $.register({
  3235. rule: {
  3236. host: /^(www\.)?(firedrive|putlocker)\.com$/,
  3237. path: /^\/file\/[0-9A-F]+$/,
  3238. },
  3239. ready: function () {
  3240. 'use strict';
  3241. var c = $('#confirm_form');
  3242. c.submit();
  3243. },
  3244. });
  3245.  
  3246. $.register({
  3247. rule: {
  3248. host: /^(www\.)?jheberg\.net$/,
  3249. path: /^\/captcha\//,
  3250. },
  3251. ready: function () {
  3252. 'use strict';
  3253. $('.dl-button').click();
  3254. },
  3255. });
  3256. $.register({
  3257. rule: {
  3258. host: /^(www\.)?jheberg\.net$/,
  3259. path: /^\/redirect\//,
  3260. },
  3261. ready: function () {
  3262. 'use strict';
  3263. $.removeAllTimer();
  3264. var matches = $.searchScripts(/'slug':\s*'([^']+)',\s*'hoster':\s*'([^']+)'/);
  3265. var slug = matches[1];
  3266. var hoster = matches[2];
  3267. $.post('/get/link/', {
  3268. 'slug': slug,
  3269. 'hoster': hoster
  3270. }).then(function(response) {
  3271. var respJSON = JSON.parse(response);
  3272. $.openLink(respJSON.url);
  3273. });
  3274. },
  3275. });
  3276.  
  3277. $.register({
  3278. rule: {
  3279. host: /^(www\.)?mirrorcreator\.com$/,
  3280. path: /^\/showlink\.php$/,
  3281. },
  3282. ready: function () {
  3283. 'use strict';
  3284. var a = $.$('#redirectlink a');
  3285. if (a) {
  3286. $.openLink(a.href);
  3287. return;
  3288. }
  3289. a = $('#redirectlink > div.redirecturl');
  3290. a = a.innerHTML;
  3291. if (!a.match(/^http/)) {
  3292. throw new _.AdsBypasserError('not a valid URL');
  3293. }
  3294. $.openLink(a);
  3295. },
  3296. });
  3297.  
  3298. $.register({
  3299. rule: {
  3300. host: /^www.mirrorupload.net$/,
  3301. },
  3302. ready: function () {
  3303. 'use strict';
  3304. var accessForm = $('form[name=form_upload]');
  3305. var accessInput = document.createElement('input');
  3306. accessInput.type = 'hidden';
  3307. accessInput.name = 'access';
  3308. accessInput.value = Math.random();
  3309. accessForm.appendChild(accessInput);
  3310. accessForm.submit();
  3311. },
  3312. });
  3313.  
  3314. $.register({
  3315. rule: {
  3316. host: /^mylinkgen\.com$/,
  3317. path: /^\/p\/(.+)$/,
  3318. },
  3319. start: function (m) {
  3320. 'use strict';
  3321. $.openLink('/g/' + m.path[1]);
  3322. },
  3323. });
  3324. $.register({
  3325. rule: {
  3326. host: /^mylinkgen\.com$/,
  3327. path: /^\/g\//,
  3328. },
  3329. ready: function () {
  3330. 'use strict';
  3331. var a = $('#main-content a.btn.btn-default');
  3332. $.openLink(a.href);
  3333. },
  3334. });
  3335.  
  3336. $.register({
  3337. rule: {
  3338. host: /^(www\.)?vidto\.me$/,
  3339. },
  3340. ready: function () {
  3341. 'use strict';
  3342. var f = $('#btn_download').form;
  3343. setTimeout(function() {
  3344. f.submit();
  3345. }, 6000);
  3346. },
  3347. });
  3348.  
  3349. (function () {
  3350. 'use strict';
  3351. var sUrl = '(\\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])';
  3352. function isLink (text) {
  3353. var rUrl = new RegExp(_.T('^{0}$')(sUrl), 'i');
  3354. return rUrl.test(text);
  3355. }
  3356. function linkify (text) {
  3357. var rUrl = new RegExp(sUrl, 'ig');
  3358. return text.replace(rUrl, function(match) {
  3359. return _.T("<a href='{0}'>{0}</a>")(match);
  3360. });
  3361. }
  3362. $.register({
  3363. rule: {
  3364. host: /^(www\.)?([a-zA-Z0-9]+\.)?binbox\.io$/,
  3365. path: /\/([a-zA-Z0-9]+)/,
  3366. hash: /#([a-zA-Z0-9]+)/,
  3367. },
  3368. ready: function (m) {
  3369. var sjcl = $.window.sjcl;
  3370. var paste_id = m.path[1];
  3371. var paste_salt = m.hash[1];
  3372. var fake_user = 'binbox';
  3373. var API_URL = _.T('https://{0}.binbox.io/{1}.json')(fake_user, paste_id);
  3374. $.get(API_URL).then(function (pasteInfo) {
  3375. pasteInfo = JSON.parse(pasteInfo);
  3376. if (!pasteInfo.ok) {
  3377. throw new _.AdsBypasserError("error when getting paste information");
  3378. }
  3379. var raw_paste = sjcl.decrypt(paste_salt, pasteInfo.paste.text);
  3380. if (isLink(raw_paste)) {
  3381. $.openLink(raw_paste);
  3382. return;
  3383. }
  3384. var elm = document.createElement('pre');
  3385. elm.id = 'paste-text';
  3386. elm.innerHTML = linkify(raw_paste);
  3387. var frame = $('#paste-frame, #captcha-page');
  3388. frame.parentNode.replaceChild(elm, frame);
  3389. });
  3390. },
  3391. });
  3392. })();
  3393.  
  3394. (function (context, factory) {
  3395. if (typeof module === 'object' && typeof module.exports === 'object') {
  3396. module.exports = function (context, GM) {
  3397. var _ = require('lodash');
  3398. var core = require('./core.js');
  3399. var misc = require('./misc.js');
  3400. var dispatcher = require('./dispatcher.js');
  3401. var modules = [misc, dispatcher].map(function (v) {
  3402. return v.call(null, context, GM);
  3403. });
  3404. var $ = _.assign.apply(_, modules);
  3405. return factory(context, GM, core, $);
  3406. };
  3407. } else {
  3408. factory(context, {
  3409. openInTab: GM_openInTab,
  3410. registerMenuCommand: GM_registerMenuCommand,
  3411. }, context._, context.$);
  3412. }
  3413. }(this, function (context, GM, _, $) {
  3414. 'use strict';
  3415. var window = context.window;
  3416. var document = window.document;
  3417. var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
  3418. function disableWindowOpen () {
  3419. $.window.open = _.nop;
  3420. }
  3421. function disableLeavePrompt () {
  3422. var seal = {
  3423. set: function () {
  3424. _.info('blocked onbeforeunload');
  3425. },
  3426. };
  3427. _.C([$.window, $.window.document.body]).each(function (o) {
  3428. if (!o) {
  3429. return;
  3430. }
  3431. o.onbeforeunload = undefined;
  3432. if (isSafari) {
  3433. o.__defineSetter__('onbeforeunload', seal.set);
  3434. } else {
  3435. $.window.Object.defineProperty(o, 'onbeforeunload', {
  3436. configurable: false,
  3437. enumerable: false,
  3438. get: undefined,
  3439. set: seal.set,
  3440. });
  3441. }
  3442. var oael = o.addEventListener;
  3443. var nael = function (type) {
  3444. if (type === 'beforeunload') {
  3445. _.info('blocked addEventListener onbeforeunload');
  3446. return;
  3447. }
  3448. return oael.apply(this, arguments);
  3449. };
  3450. o.addEventListener = nael;
  3451. });
  3452. }
  3453. function changeTitle () {
  3454. document.title += ' - AdsBypasser';
  3455. }
  3456. function beforeDOMReady (handler) {
  3457. _.info('working on\n%s \nwith\n%o', window.location.toString(), $.config);
  3458. disableWindowOpen();
  3459. handler.start();
  3460. }
  3461. function afterDOMReady (handler) {
  3462. disableLeavePrompt();
  3463. changeTitle();
  3464. handler.ready();
  3465. }
  3466. function waitDOM () {
  3467. return _.D(function (resolve, reject) {
  3468. if (document.readyState !== 'loading') {
  3469. resolve();
  3470. return;
  3471. }
  3472. document.addEventListener('DOMContentLoaded', function () {
  3473. resolve();
  3474. });
  3475. });
  3476. }
  3477. $._main = function () {
  3478. var findHandler = $._findHandler;
  3479. delete $._main;
  3480. delete $._findHandler;
  3481. if (window.top !== window.self) {
  3482. return;
  3483. }
  3484. GM.registerMenuCommand('AdsBypasser - Configure', function () {
  3485. GM.openInTab('https://adsbypasser.github.io/configure.html');
  3486. });
  3487. var handler = findHandler(true);
  3488. if (handler) {
  3489. beforeDOMReady(handler);
  3490. waitDOM().then(function () {
  3491. afterDOMReady(handler);
  3492. });
  3493. return;
  3494. }
  3495. _.info('does not match location on `%s`, will try HTML content', window.location.toString());
  3496. waitDOM().then(function () {
  3497. handler = findHandler(false);
  3498. if (!handler) {
  3499. _.info('does not match HTML content on `%s`', window.location.toString());
  3500. return;
  3501. }
  3502. beforeDOMReady(handler);
  3503. afterDOMReady(handler);
  3504. });
  3505. };
  3506. return $;
  3507. }));
  3508. $._main();