From 14a385ee5b19dfe39df1beded252418bb10004e7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 8 May 2024 05:27:47 +0000 Subject: [PATCH] Commit sha 423a82ac638a075296b44892fddaa88a18ed777b --- 404.html | 41 +- Super_preloaderPlus_one_New.user.js | 24768 ++++++++-------- assets/app.1gO23e7I.js | 1 + assets/baidu.BzHzvwzy.png | Bin 0 -> 67337 bytes assets/chunks/framework.qh4ipt1c.js | 17 + assets/chunks/hhmm.apdfnDZY.js | 1 + assets/chunks/logo.BLgnOXGY.js | 1 + assets/chunks/theme.Bw3nEMJ8.js | 1 + assets/cn_compatibility.md.DFXspByW.js | 1 + assets/cn_compatibility.md.DFXspByW.lean.js | 1 + assets/cn_database.md.0MAp0LYl.js | 1 + assets/cn_database.md.0MAp0LYl.lean.js | 1 + assets/cn_develop.md.BfMaFYH0.js | 1 + assets/cn_develop.md.BfMaFYH0.lean.js | 1 + assets/cn_example.md.C1LVQ_ed.js | 1 + assets/cn_example.md.C1LVQ_ed.lean.js | 1 + assets/cn_faq.md.DKPUHfL4.js | 8 + assets/cn_faq.md.DKPUHfL4.lean.js | 1 + assets/cn_index.md.DiJrdMqx.js | 1 + assets/cn_index.md.DiJrdMqx.lean.js | 1 + assets/cn_siterule.md.D7WIuG0H.js | 24 + assets/cn_siterule.md.D7WIuG0H.lean.js | 1 + assets/compatibility.md.BI7A23S1.js | 1 + assets/compatibility.md.BI7A23S1.lean.js | 1 + assets/database.md.CBUxs3Nf.js | 1 + assets/database.md.CBUxs3Nf.lean.js | 1 + assets/example.md.CjslsAG_.js | 1 + assets/example.md.CjslsAG_.lean.js | 1 + assets/faq.md.GcAR8P0d.js | 8 + assets/faq.md.GcAR8P0d.lean.js | 1 + assets/google.AkcAA5qz.png | Bin 0 -> 78275 bytes assets/hhmm.CWWLJcVP.png | Bin 0 -> 426693 bytes assets/index.md.B-VkCBg5.js | 1 + assets/index.md.B-VkCBg5.lean.js | 1 + .../inter-italic-cyrillic-ext.r48I6akx.woff2 | Bin 0 -> 43112 bytes assets/inter-italic-cyrillic.By2_1cv3.woff2 | Bin 0 -> 31300 bytes assets/inter-italic-greek-ext.1u6EdAuj.woff2 | Bin 0 -> 17404 bytes assets/inter-italic-greek.DJ8dCoTZ.woff2 | Bin 0 -> 32564 bytes assets/inter-italic-latin-ext.CN1xVJS-.woff2 | Bin 0 -> 120840 bytes assets/inter-italic-latin.C2AdPX0b.woff2 | Bin 0 -> 74784 bytes assets/inter-italic-vietnamese.BSbpV94h.woff2 | Bin 0 -> 14884 bytes .../inter-roman-cyrillic-ext.BBPuwvHQ.woff2 | Bin 0 -> 40488 bytes assets/inter-roman-cyrillic.C5lxZ8CY.woff2 | Bin 0 -> 29164 bytes assets/inter-roman-greek-ext.CqjqNYQ-.woff2 | Bin 0 -> 16272 bytes assets/inter-roman-greek.BBVDIX6e.woff2 | Bin 0 -> 29920 bytes assets/inter-roman-latin-ext.4ZJIpNVo.woff2 | Bin 0 -> 110160 bytes assets/inter-roman-latin.Di8DUHzh.woff2 | Bin 0 -> 67792 bytes assets/inter-roman-vietnamese.BjW4sHH5.woff2 | Bin 0 -> 14072 bytes assets/logo.Bu5BlKbI.png | Bin 0 -> 7542 bytes assets/siterule.md.DYsQHBca.js | 17 + assets/siterule.md.DYsQHBca.lean.js | 1 + assets/style.CmS-lTVg.css | 1 + assets/xkcd.De4VfqBi.png | Bin 0 -> 272291 bytes cn/compatibility.html | 24 + cn/database.html | 24 + cn/develop.html | 24 + cn/example.html | 25 + cn/faq.html | 31 + cn/index.html | 25 + cn/siterule.html | 47 + compatibility.html | 44 +- database.html | 44 +- example.html | 45 +- faq.html | 60 +- hashmap.json | 1 + index.html | 45 +- mydata_detail.json | 2 +- siterule.html | 79 +- wedata.json | 40 +- wedata_detail.json | 2 +- 70 files changed, 12620 insertions(+), 12852 deletions(-) create mode 100644 assets/app.1gO23e7I.js create mode 100644 assets/baidu.BzHzvwzy.png create mode 100644 assets/chunks/framework.qh4ipt1c.js create mode 100644 assets/chunks/hhmm.apdfnDZY.js create mode 100644 assets/chunks/logo.BLgnOXGY.js create mode 100644 assets/chunks/theme.Bw3nEMJ8.js create mode 100644 assets/cn_compatibility.md.DFXspByW.js create mode 100644 assets/cn_compatibility.md.DFXspByW.lean.js create mode 100644 assets/cn_database.md.0MAp0LYl.js create mode 100644 assets/cn_database.md.0MAp0LYl.lean.js create mode 100644 assets/cn_develop.md.BfMaFYH0.js create mode 100644 assets/cn_develop.md.BfMaFYH0.lean.js create mode 100644 assets/cn_example.md.C1LVQ_ed.js create mode 100644 assets/cn_example.md.C1LVQ_ed.lean.js create mode 100644 assets/cn_faq.md.DKPUHfL4.js create mode 100644 assets/cn_faq.md.DKPUHfL4.lean.js create mode 100644 assets/cn_index.md.DiJrdMqx.js create mode 100644 assets/cn_index.md.DiJrdMqx.lean.js create mode 100644 assets/cn_siterule.md.D7WIuG0H.js create mode 100644 assets/cn_siterule.md.D7WIuG0H.lean.js create mode 100644 assets/compatibility.md.BI7A23S1.js create mode 100644 assets/compatibility.md.BI7A23S1.lean.js create mode 100644 assets/database.md.CBUxs3Nf.js create mode 100644 assets/database.md.CBUxs3Nf.lean.js create mode 100644 assets/example.md.CjslsAG_.js create mode 100644 assets/example.md.CjslsAG_.lean.js create mode 100644 assets/faq.md.GcAR8P0d.js create mode 100644 assets/faq.md.GcAR8P0d.lean.js create mode 100644 assets/google.AkcAA5qz.png create mode 100644 assets/hhmm.CWWLJcVP.png create mode 100644 assets/index.md.B-VkCBg5.js create mode 100644 assets/index.md.B-VkCBg5.lean.js create mode 100644 assets/inter-italic-cyrillic-ext.r48I6akx.woff2 create mode 100644 assets/inter-italic-cyrillic.By2_1cv3.woff2 create mode 100644 assets/inter-italic-greek-ext.1u6EdAuj.woff2 create mode 100644 assets/inter-italic-greek.DJ8dCoTZ.woff2 create mode 100644 assets/inter-italic-latin-ext.CN1xVJS-.woff2 create mode 100644 assets/inter-italic-latin.C2AdPX0b.woff2 create mode 100644 assets/inter-italic-vietnamese.BSbpV94h.woff2 create mode 100644 assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 create mode 100644 assets/inter-roman-cyrillic.C5lxZ8CY.woff2 create mode 100644 assets/inter-roman-greek-ext.CqjqNYQ-.woff2 create mode 100644 assets/inter-roman-greek.BBVDIX6e.woff2 create mode 100644 assets/inter-roman-latin-ext.4ZJIpNVo.woff2 create mode 100644 assets/inter-roman-latin.Di8DUHzh.woff2 create mode 100644 assets/inter-roman-vietnamese.BjW4sHH5.woff2 create mode 100644 assets/logo.Bu5BlKbI.png create mode 100644 assets/siterule.md.DYsQHBca.js create mode 100644 assets/siterule.md.DYsQHBca.lean.js create mode 100644 assets/style.CmS-lTVg.css create mode 100644 assets/xkcd.De4VfqBi.png create mode 100644 cn/compatibility.html create mode 100644 cn/database.html create mode 100644 cn/develop.html create mode 100644 cn/example.html create mode 100644 cn/faq.html create mode 100644 cn/index.html create mode 100644 cn/siterule.html create mode 100644 hashmap.json diff --git a/404.html b/404.html index a201594a4..a0540feb4 100644 --- a/404.html +++ b/404.html @@ -1,34 +1,21 @@ - +
That's a Four-Oh-Four.
English
Appearance
404
But if you don't change your direction, and if you keep looking, you may end up where you are heading.
: plain text - // : Image - // : Audio and video - // : PDF (Chrome) - // body > #outerContainer:first-child + #printContainer:last-child: PDF (Firefox) - document.querySelector('body > pre:only-child, body > img:only-child, body > video:only-child, body > embed:only-child, body > #outerContainer:first-child + #printContainer:last-child')) { - return; - } - if (window.name === 'mynovelreader-iframe') { - return; - } - function CheckIframe() { - if (window.name === 'superpreloader-iframe') { - return true; - } else { - return false; - } - } - - // how to trigger lazy_load - // https://wiki.greasespot.net/Generate_Click_Events - if (CheckIframe()) { - // 搜狗,iframe里面怎么不加载js啊? - // 去掉了原版的另一种方法,因为新版本 chrome 已经支持。旧版本 chrome iframe里面 无法访问window.parent,返回undefined - var domLoaded = function domLoaded() { - //window.scroll(window.scrollX, 99999); - var mutationObserver = window.frameElement ? JSON.parse(window.frameElement.getAttribute('mutationObserver')) : null; - if (!mutationObserver) { - window.parent.postMessage('superpreloader-iframe:DOMLoaded', '*'); - } else { - var observers = mutationObserver.observers; - - /**@type {Promise} */ - var p = null; - /**@type {Array} */ - var parr = []; - if (observers) { - ['attributes', 'addedNodes', 'removedNodes'].forEach(function (key) { - var el = getAllElements(observers[key]); - if (el.length > 0) { - if (mutationObserver.relatedObj) { - //el.forEach((x) => { - // p.push(elementReady(x, key)); - //}); - parr.push(elementReady(el[el.length - 1], key)); - el[0].scrollIntoView(); - el[el.length - 1].scrollIntoView(); - } else { - parr.push(elementReady(el[el.length - 1], key)); - } - } - }); - } - if (p) { - p = Promise.all(parr); - } else { - p = Promise.resolve(undefined); - } - var timeout = mutationObserver.timeout && 0; - setTimeout(function () { - p.then(function (values) { - if (values) { - values.forEach(function (_ref) { - _ref.element; - _ref.type; - _ref.mutationList; - var observer = _ref.observer; - observer.disconnect(); - }); - } - //window.scrollTo(0, scrollLocation); - window.parent.postMessage('superpreloader-iframe:DOMLoaded', '*'); - }); - }, timeout); - } - }; - //@ts-ignore - if (window.opera) { - document.addEventListener('DOMContentLoaded', domLoaded, false); - } else { - domLoaded(); - } - return; - } - - // 在以下网站上允许在非顶层窗口上加载JS..比如猫扑之类的框架集网页. - var DIExclude = [['猫扑帖子', true, /^https?:\/\/dzh\.mop\.com\/[a-z]{3,6}\/\d{8}\/.*\.shtml$/i], ['铁血社区', true, /^https?:\/\/bbs\.tiexue\.net\/.*\.html$/i], ['铁血社区-2', true, /^https?:\/\/bbs\.qichelian\.com\/bbsqcl\.php\?fid/i], - // 像 http://so.baiduyun.me/ 内嵌的百度、Google 框架 - ['百度网盘搜索引擎-百度', true, /^https?:\/\/www\.baidu\.com\/baidu/i], ['百度网盘搜索引擎-Google', true, /^https?:\/\/74\.125\.128\.147\/custom/i]]; - - // 页面不刷新的站点 - var HashchangeSites = [{ - url: /^https?:\/\/(www|encrypted)\.google(stable)?\..{2,9}\/(webhp|#|$|\?)/, - timer: 2000, - mutationSelector: '#main' - }, - // 运营商可能会在 #wd= 前面添加 ?tn=07084049_pg - { - url: /^https?:\/\/www\.baidu\.com\/($|#wd=)/, - timer: 1000, - mutationSelector: '#wrapper_wrapper' - }, { - url: /^https?:\/\/www\.newsmth\.net/, - timer: 1000 - }]; - - // ///////// ----- End of Rules obtained from online json files -------/////////// - - // 分页导航的6个图标以及颜色设置: - var sep_icons = { - top: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWtJREFUeNrclE0rRGEUx8c1GUpRJIVIZGdhZCVr38GGhaI0ZXwCkliglChZEcvJxhdgYWOjLEUpm/EyiLzze+o8dTzdO3PljoVTv7rPc8/5d+6555xYrEhWop6boda5+6l9wjWcWpF+WIbqCJJ9hFRcDr3QAIkIhKugz5PDfkSixkphz5aiAnqgE8rgWRxGoSOPyBkswQuUwyscw4HrmFCZL8Kt/JAg7mEFPEmo4FdPwk0BUcsdzIap0TQ8qMAPuICcEjLnd+VjSjcfJNgIc/DkZGSymYGsnK9EZMrxe4MFaNGiZjC2fT5zQ3p7QDK1dR2GSljziclAvRUe8nHYVA4jjvC43NfAuk/smB2QNqcsWxKcLbAKTFnS0hWD6n27Fd6FLqiDI5iQmQ9jpiVT0sNJ6aYd7dAE3QHBbinSAX5JWWaxuLo8F35jh/bBK9Y+/r/Cl6pLcnna8NvuDGMnslpbZRpXZYT/3r4EGACZL3ZL2afNFAAAAABJRU5ErkJggg==', - bottom: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXFJREFUeNrM1c8rBGEcx/FdtCEkLqYtpdwkKSUHUhxwITdK+Z3yM2cOLnJ39Cc44SgHScmJwlFxsIdlCScO6/2t76Onp52dXTtbnno1M8+Pz84+zzMzkcg/KA3oRTzM0A4cI4VTdIUVPIM3pPGO5aABJTkGx1BqjYmFFZxW7nnBwXmXogWX6bEGc2jEIU7+kNWDUSSwZyqndSvJ3N1g2Bm0oLtB2j+w7rQP4MpqXzRT0YRaPW/BthMedYLs60HsoE2vq9BsPwAJa8XFLUa0fUrvROo/saT1Q9adGimdlt8yj6TT6Q6d2vaida9YRbtP6EqmBZC5fHA6X+AAz1bwEc6cfk9+oaZM4NoZJL70+J2hTaZtNpet041zK8yP/Mgl+rOF1emr0UM1xnAfEPyISd0Jno6vtx+QuM6PZ22lpO7dbEV2Siv6rPeIjNs1HdYC7ixfG+YBqdTVDqPIv6iIWvO7iXGUFxAqi72PraJ9IH8EGACQcYjYRd5GHwAAAABJRU5ErkJggg==', - pre: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASlJREFUeNpiYBjOoBiIrwJxFRAzUsvQViD+CMT/gfgTEPdRy9BPUENh+AsQ91JiaAuSS9HxZ3INb8Hi0v+UurwF6qL/ROBvQNxDrKFfkTT+A+JnQPwBKfJA/L9Ian7ic7kMEHcC8Q80F3UAcRsQv4by30INaUJT9weaWhSQDRUB4uVYvLkYiAWAOBopvEFBlArEPEA8G4ue9UAsATM4EYuCJUgKMtAMLoSKCwPxXCx6c1igClTQgmUZVPNrHMEGy3mgYCkCYiYgTkCSV4UZvA2IjYBYDIgvQbPvOyJTECid5wHxbyA2BuL3QLwRWYEsEJvg0IweFEU41IEMlgcxWJAEH0MxJeAsjMFEq6Jw+Br8BimVfMCTDEkG7EBcA8T3oWUJx4DVYwABBgCannnSzbgwIQAAAABJRU5ErkJggg==', - next: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT1JREFUeNrc1b1KA0EYheEl/iARFFEkKl6D0UK8CrEVrCwEexFCtBIlRWIjsfEiLL0FKzs7QUWxM2piFMUkvhPOwLAs2TGuCn7wkNll5jC7+w0Jgv9avdjAObbQn1TwCu7QwhWW4xakPIOHMKzxGCaSCm6ioXHLZ0Hqpz7KrwRPIvvNvBlM2zYyNY8cMjhDHo9fCBzErnIqKNjgRSxpvIABbOLes2MKWHfuXdhXcR2avKrJ4zGhI9gLhQbq9XaZgGO1kutIOzIHpKp7NawhjYOINSeY6lFwHacw17P6NTWHd4xqnNbcS83LObtsaCPbEW+gXUW8ODswC27xoOsn3ODDmfOGss9XLuE54jGjvPqGuuG1mFDzZIfdNHynnde7DbW1r5DwTstJHP2iE55YqD36ebXZDvr+7L/sU4ABAIpVZWnoA5GkAAAAAElFTkSuQmCC', - next_gray: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtxJREFUeNrclc9L2mEcx7/6NbVZqRVj7pIOlIUuZ1HMgv0BDcqT7JrskH13ELPBF7eTvz10HznWQBlBRIfBXIfBLmqXscvYZWPKrMNIU9Apmrr34/w6i0ovMZjw+H0+z/N8Xt+Pn/fn80hR/+WHYRhBIpFwRKPRz/F4/KnD4RB28xH0Ah4cHHyoUCjsIpFIIZPJHkml0m9Yfn2ZD78XcL1eH6rValIMCmMUtqKbD7/HbNQxaq15oxcH/lXpcmXgtnh2u/2mXC6/DqE+sSxLlUqlniE0TVPBYJAqFot6+GV9Pt+PJthms80sLS2xEonkhlgs/jgwMOBcXV3N5fP5rlCcp9bX1yWLi4uecrk8U6lUshDY3wRbLJYFGKZsNksq4N78/LwY9hOn05k5Ojqi+PzTGePxeFwZUl6vd8hkMvkPDg6sZJ2M5eXlr1wqUu2kA5JOpy2IAO+oO9fW1n5mMpk2nDjmcjkKNU25XC652Wx2pVIp65mXJ2nyjUPpqakpNZxuA8Y5T87OzsobjcYHpVKpGhsbe1CtVkXYqxQKhTdqtfqL1Wr1JpPJxxyU5Lq/vz8aCoX8TTDatYiFhF6vxx5tAJwm8OPj48m5ubmKSqUaAWwSa9eQw6JGo/luNBoNh4eHbAe0JhAINsLh8LNAIJCiudhxB+Qh2ludTifDAQLvI3AIch+Rkl8jJlrhCbOqgfoLmDepOF/BfGNra2sFFZFtvqgzMbFYjAiyp9Vqh4VC4cTJyYmQ90epIQJtHRO1bA5aRhAvdnZ2GI/H87cEz5YPgeOS2RsfHx9B7u+gOi68yQAtYX9zd3eXgZCna/s8By5ypGUUzhOISHgO9BfWXwG6chZ6IbiVc6LwnsFgGIVAepLzjk4rYW1ze3ubcbvd53fjZV2FaqGQ63fT09PDMO9i9BEoon0J9Rm/339xm3dr2f39fVLX7wFvoMVvoYWfRyIRFndD/Z/8nf0WYAA8EC1Z/ZNm4gAAAABJRU5ErkJggg==', - pre_gray: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAslJREFUeNrclTtMWmEUxz/uvTzlIUhpNMR0aGNjrNHSmHTqRJyadujQDbSGRwJUaYCmDizqUEw6ODVNGgbpYCfSpFINCQzFR9oyMXRsXFCsAXkIKNL/R7gGWxOsSdPEk5zc3O+e87vn+59zv0vIpbSJiQmyubn5LBKJpNbX11+4XC5Buxy2XYDNZiMOh2OW4ziPTCbTi8XikeHh4SsSieQTXnIxsN1uJ1ardVYgEDgPDw+V9Xqd1Go1Mcuyg7AuuVy+sra29ndgVEnGx8dnhEKhs1qtKgE/eXZ8fCzC+q3+/n6tSqVaSSQS5wM7nU5iMplmsF1XpVI5BeXt6OhIBFkGAe9SKpV/wNmzKjWbzRT6tFwuK86CUqPrkIVWPjQwMKBWKBSn4Ozv0LGxsRmRSDSFSjua0Do8TRWAS+B5+B68g/IhixCNvQPN1WjuieZsS/f1aNQ0wzBuaCqlUCQRtVr9Es1K4kVDWJNhrQjAIiqMlkqle804FnkjBoOhEzv4vrGxkW2ALRaLFrq+QoAV2nE8tLe3dzEYDE5vb2939vX1PcBkiKVSaQ1jForFYq+NRqMum83ebsYzmJq7sGu4xhkKxsDfB/AxnO860ev1oeXlZU8gEMgmk0kFqmw8o9dUKiWfn58vhMPh54h7S+OpQXNSLBYfejyeR1yzw9dbRon09PS8W11dnfL5fJl8Pk+0Wi3hk5vyCNBY4vV6f0Im9+joKJNOp818o8G70ah4aWnpIzSKYCa/dXd3B+PxuHNycjKzs7NzAms1+qFQy+VydDRz0WjUpdPp3tB8TFM0FAqFGxXPzc19plJrNJqraMoXt9tNt3Suc+Tg4ICeJfmFhQVLoVAwoKG7fr//B8cHAL6Fy9ZFDinaG/r5w77ya8y/OhEvKRhjtIup2YMTeBb3mXY53HnAmNkP+/v7NzHTTwAO4f79f/ud/RJgAOLcRNZqLojMAAAAAElFTkSuQmCC', - text_span_style: 'color:#595959!important;' - }; - - // 悬浮窗的状态颜色. - var FWKG_color = { - loading: '#8B00E8', - // 读取中状态 - prefetcher: '#5564AF', - // 预读状态 - autopager: '#038B00', - // 翻页状态 - Apause: '#B7B700', - // 翻页状态(暂停). - Astop: '#A00000', - // 翻页状态(停止)(翻页完成,或者被异常停止.)(无法再开启) - dot: '#00FF05' // 读取完后,会显示一个小点,那么小点的颜色. - }; - - // 上一页关键字 - var prePageKey = ['上一页', '上一頁', '上1页', '上1頁', '上页', '上頁', '翻上頁', '翻上页', '上一张', '上一張', '上一幅', '上一章', '上一节', '上一節', '上一篇', '前一页', '前一頁', '后退', '後退', '上篇', 'previous', 'previous Page', '前へ', '前のページ']; - - // 下一页关键字 - var nextPageKey = ['下一页', '下一頁', '下1页', '下1頁', '下页', '下页 ›', '下頁', '翻页', '翻頁', '翻下頁', '翻下页', '下一张', '下一張', '下一幅', '下一章', '下一节', '下一節', '下一篇', '前进', '下篇', '后页', '往后', 'Next', 'Next Page', '次へ', '次のページ', '次のページ »', '下一页 →', '下一頁 →', '下1页 →', '下1頁 →', '下页 →', '下頁 →', '翻页 →', '翻頁 →', '翻下頁 →', '翻下页 →', '下一张 →', '下一張 →', '下一幅 →', '下一章 →', '下一节 →', '下一節 →', '下一篇 →', '前进 →', '下篇 →', '后页 →', '往后 →', 'Next →', 'Next Page →', '次へ →', '次のページ →', '下一页 »', '下一頁 »', '下1页 »', '下1頁 »', '下页 »', '下頁 »', '翻页 »', '翻頁 »', '翻下頁 »', '翻下页 »', '下一张 »', '下一張 »', '下一幅 »', '下一章 »', '下一节 »', '下一節 »', '下一篇 »', '前进 »', '下篇 »', '后页 »', '往后 »', 'Next »', 'Next Page »', '次へ »', '后一页', '後一頁', '下一页 ›', '下一頁 ›', '下1页 ›', '下1頁 ›', '下頁 ›', '翻页 ›', '翻頁 ›', '翻下頁 ›', '翻下页 ›', '下一张 ›', '下一張 ›', '下一幅 ›', '下一章 ›', '下一节 ›', '下一節 ›', '下一篇 ›', '前进 ›', '下篇 ›', '后页 ›', '往后 ›', 'Next ›', 'Next >', 'Next Page ›', '次へ ›', '次のページ ›', '»', '→', '早期文章→']; - // THX to https://greasyfork.org/en/forum/discussion/39361/x - // 出在自动翻页信息附加显示真实相对页面信息,一般能智能识别出来。如果还有站点不能识别,可以把地址的特征字符串加到下面 - // 最好不要乱加,一些不规律的站点显示出来的数字也没有意义 - var REALPAGE_SITE_PATTERN = ['search?', 'search_', 'forum', 'thread']; - - // ------------------------下面的不要管他----------------- - /// //////////////////////////////////////////////////////////////// - // eslint-disable-next-line prettier/prettier - Promise.all([loadSettings(), getServerIp(location.hostname)]).then(function (_ref2) { - var _ref3 = _slicedToArray(_ref2, 2), - values = _ref3[0], - serverIp = _ref3[1]; - var jsonRule = values.jsonRule; - var prefs = values.prefs, - SITEINFO_D = values.SITEINFO_D, - autoMatch = values.autoMatch; - values.version; - var blackList = values.blackList; - if (prefs.debug) { - logger.setLevel('debug'); - } else { - logger.setLevel(5); - } - logger.debug("[Super-preloader]", 'Script Manager: ', JSON.stringify({ - name: SCRIPT_MANAGER.name, - version: SCRIPT_MANAGER.version || 'unknown' - })); - logger.debug("[Super-preloader]", 'Browser: ', JSON.stringify(BROWSER)); - logger.debug("[Super-preloader]", `Server ip: ', ${serverIp}`); - var setup = function setup() { - var d = document; - - /** - * - * @param {string} s s - * @returns {HTMLInputElement} elem - */ - var $ = function $(s) { - // @ts-ignore - return d.getElementById('sp-prefs-' + s); - }; - if ($('setup')) return; - var styleNode = addStyle(spcss['sp-prefs-setup']); - if (prefs.customCSS.length > 0) { - addStyle(prefs.customCSS); - } - var div = d.createElement('div'); - div.id = 'sp-prefs-setup'; - div.style.position = 'fixed'; - if (prefs.FW_position !== 2) { - div.style.right = '38px'; - div.style.top = '20px'; - } else { - div.style.right = `${prefs.FW_offset[1]}px`; - div.style.top = `${prefs.FW_offset[0]}px`; - } - var nextUpdateDate = prefs.disableBuiltinSubscriptionRules ? 'N/A' : jsonRuleLoader.expire.toDateString(); - div.innerHTML = template['sp-prefs']({ - prefs, - scriptInfo, - nextUpdateDate: nextUpdateDate - }); - d.body.appendChild(div); - var close = function close() { - if (styleNode) { - styleNode.parentNode.removeChild(styleNode); - } - var div = $('setup'); - div.parentNode.removeChild(div); - }; - var on = function on(node, e, f) { - node.addEventListener(e, f, false); - }; - on($('ok'), 'click', function () { - Object.keys(factorySettings.prefs).forEach(function (key) { - var el = $(key); - if (el !== null) { - prefs[key] = getProperty(el); - } - }); - if (prefs.debug) { - logger.setLevel('debug'); - } else { - logger.setLevel(5); - } - autoMatch.keyMatch = !$('autoMatchKeyMatch').checked; - SITEINFO_D.useiframe = !!$('SITEINFO_D-useiframe').checked; - SITEINFO_D.autopager.enable = !!$('SITEINFO_D-a_enable').checked; - SITEINFO_D.autopager.force_enable = !!$('SITEINFO_D-a_force_enable').checked; - autoMatch.useiframe = SITEINFO_D.useiframe; - saveSettings({ - prefs, - SITEINFO_D, - autoMatch - }).then(function () { - SP.loadSetting(); - close(); - location.reload(); - }); - }); - on($('reset'), 'click', function () { - $('setup').innerHTML = template.spinner.reset; - addStyle(spcss['sp-prefs-spinner']); - resetSettings().then(function () { - location.reload(); - }); - }); - if (prefs.disableBuiltinSubscriptionRules) { - $('updaterule').setAttribute('disabled', ''); - } - on($('updaterule'), 'click', function () { - if (prefs.disableBuiltinSubscriptionRules) return; - $('setup').innerHTML = template.spinner.update; - addStyle(spcss['sp-prefs-spinner']); - jsonRuleLoader.updateRule(true).then(function () { - jsonRule = jsonRuleLoader.getRule(); - SP.loadSetting(); - close(); - location.reload(); - }); - }); - on($('cancel'), 'click', close); - $('debug').checked = logger.getLevel() === logger.levels.DEBUG; - $('ChineseUI').checked = prefs.ChineseUI; - $('floatWindow').checked = prefs.floatWindow; - $('enableHistory').checked = prefs.enableHistory; - // $('forceTargetWindow').checked = prefs.forceTargetWindow; - $('dblclick_pause').checked = prefs.dblclick_pause; - $('SITEINFO_D-useiframe').checked = SITEINFO_D.useiframe; - $('SITEINFO_D-a_enable').checked = SITEINFO_D.autopager.enable; - $('arrowKeyPage').checked = prefs.arrowKeyPage; - $('SITEINFO_D-a_force_enable').checked = SITEINFO_D.autopager.force_enable; - $('excludes').value = prefs.excludes; - $('custom_siteinfo').value = prefs.custom_siteinfo; - $('customCSS').value = prefs.customCSS; - $('disableBuiltinRules').checked = prefs.disableBuiltinRules; - $('disableBuiltinSubscriptionRules').checked = prefs.disableBuiltinSubscriptionRules; - $('autoMatchKeyMatch').checked = !autoMatch.keyMatch; - }; - - // main functions - var SP = { - spinit: function spinit() { - if (document.body.getAttribute('name') === 'MyNovelReader') { - return; - } - this.loadSetting(); - if (userLang === 'zh_CN') { - GM.registerMenuCommand('Super_preloaderPlus_one_New 设置', setup); - } else { - GM.registerMenuCommand('Super_preloaderPlus_one_New Settings', setup); - } - - // 查找是否是页面不刷新的站点 - var locationHref = location.href; - var hashSite = _find(HashchangeSites, function (x) { - return toRE(x.url).test(locationHref); - }); - if (hashSite) { - isHashchangeSite = true; - hashchangeTimer = hashSite.timer; - logger.debug("[Super-preloader]", 'This site does not refresh the page.', hashSite); - var p1 = new Promise(function (resolve, reject) { - setTimeout(resolve, hashchangeTimer); - }); - p1.then(function (values) { - init(window, document); - }); - } else { - init(window, document); - } - // 分辨率 高度 > 宽度 的是手机 - if (window.screen.height > window.screen.width) { - addStyle('div.sp-separator { min-width:auto !important; }'); - } - }, - loadSetting: function loadSetting() { - var a_enable = SITEINFO_D.autopager.enable; - if (a_enable !== undefined) { - SITEINFO_D.autopager.enable = a_enable; - } - var loadDblclickPause = function loadDblclickPause(reload) { - var dblclickPause = prefs.dblclick_pause; - if (dblclickPause) { - prefs.mouseA = false; - prefs.Pbutton = [0, 0, 0]; - } - if (reload) location.reload(); - }; - var loadCustomSiteInfo = function loadCustomSiteInfo() { - var userRules; - try { - // eslint-disable-next-line no-new-func - userRules = new Function('', 'return ' + prefs.custom_siteinfo)(); - } catch (e) { - logger.error("[Super-preloader]", 'Custom site rule error:', prefs.custom_siteinfo); - } - if (_isArray(userRules)) { - SSRules = SSRules.concat(userRules); - } - }; - loadDblclickPause(); - loadCustomSiteInfo(); - } - }; - SP.spinit(); - /** - * - * @param {Window} window window - * @param {Document} document document - * @returns {void} - */ - function init(window, document) { - var startTime = new Date(); - // eslint-disable-next-line valid-jsdoc - /**@type {(...rest:any[])=>void} */ - var nullFn = function nullFn() {}; // 空函数. - var url = document.location.href.replace(/#.*$/, ''); // url 去掉hash - var cplink = url; // 翻上来的最近的页面的url; - document.domain; // 取得域名. - var domain_port = url.match(/https?:\/\/([^\/]+)/)[1]; // 端口和域名,用来验证是否跨域. - - // 新加的,以示区别 - var remove = []; // 需要移除的事件 - - // 悬浮窗 - var floatWO = { - updateColor: nullFn, - loadedIcon: nullFn, - CmodeIcon: nullFn - }; - /** - * - * @param {IRuntimeRule} SSS a rule - * @returns {void} - */ - function floatWindow(SSS) { - // inject css - addStyle(spcss['sp-fw']); - - // create container - var div = document.createElement('div'); - div.id = 'sp-fw-container'; - div.innerHTML = template.floatWindow(); - document.body.appendChild(div); - - // helper function to get element - /** - * - * @param {string} id id - * @returns {HTMLInputElement} return - * */ - function $(id) { - //@ts-ignore - return document.getElementById(id); - } - var rect = $('sp-fw-rect'); // 悬浮窗的小正方形,用颜色描述当前的状态. - var spanel = $('sp-fw-content'); // 设置面板. - - // 设置面板显隐 - var spanelc = { - show: function show() { - spanel.style.display = 'block'; - }, - hide: function hide() { - spanel.style.display = 'none'; - } - }; - spanelc.hide(); - var rectt1, rectt2; - rect.addEventListener('mouseover', function (e) { - rectt1 = setTimeout(spanelc.show, 100); - }, false); - rect.addEventListener('mouseleave', function (e) { - clearTimeout(rectt1); - }, false); - div.addEventListener('mouseover', function (e) { - clearTimeout(rectt2); - }, false); - div.addEventListener('mouseleave', function (e) { - // Firefox bug - // https://stackoverflow.com/questions/46831247/select-triggers-mouseleave-event-on-parent-element-in-mozilla-firefox - if (e.relatedTarget === null) return; - rectt2 = setTimeout(spanelc.hide, 288); - }, false); - var dot = $('sp-fw-dot'); // 载入完成后,显示的小点 - dot.style.backgroundColor = FWKG_color.dot; - var cur_mode = $('sp-fw-cur-mode'); // 当载入状态时,用来描述当前是翻页模式,还是预读模式. - cur_mode.style.backgroundColor = SSS.a_enable ? FWKG_color.autopager : FWKG_color.prefetcher; - var a_enable = $('sp-fw-a_enable'); // 启用翻页模式 - var autopager_field = $('sp-fw-autopager-field'); // 翻页设置区域 - - // 预读设置 - var useiframe = $('sp-fw-useiframe'); - var viewcontent = $('sp-fw-viewcontent'); - - // 翻页设置 - var a_useiframe = $('sp-fw-a_useiframe'); - var a_iloaded = $('sp-fw-a_iloaded'); - var a_itimeout = $('sp-fw-a_itimeout'); - var a_manualA = $('sp-fw-a_manualA'); - var a_remain = $('sp-fw-a_remain'); - var a_maxpage = $('sp-fw-a_maxpage'); - var a_separator = $('sp-fw-a_separator'); - var a_ipages_0 = $('sp-fw-a_ipages_0'); - var a_ipages_1 = $('sp-fw-a_ipages_1'); - var a_force = $('sp-fw-a_force'); - - // newIframe 输入框的点击 - var a_newIframe = $('sp-fw-a_newIframe'); - a_newIframe.addEventListener('click', function () { - a_useiframe.checked = a_newIframe.checked; - }, false); - var a_starti = $('sp-fw-a_starti'); // 开始立即翻页 - a_starti.addEventListener('click', function (e) { - //@ts-ignore - if (e.currentTarget.disabled) return; - var value = parseInt(a_ipages_1.value); - if (isNaN(value) || value < 0) { - value = SSS.a_ipages[1]; - //@ts-ignore - a_ipages_1.value = value; - } - autoPO.startipages(value); - }, false); - - // 总开关 - var enable = $('sp-fw-enable'); - $('sp-fw-setup').addEventListener('click', setup, false); - - // 保存设置按钮. - var savebutton = $('sp-fw-savebutton'); - savebutton.addEventListener('click', function (e) { - var value = { - Rurl: SSS.Rurl, - useiframe: getProperty(useiframe), - viewcontent: getProperty(viewcontent), - enable: getProperty(enable) - }; - if (SSS.a_enable !== undefined) { - /** @type {(s:HTMLElement)=>number} */ - //@ts-ignore - var getPropertyNumber = getProperty; - value.a_enable = getProperty(a_enable) === 'autopager'; - value.a_useiframe = getProperty(a_useiframe); - value.a_newIframe = getProperty(a_newIframe); - value.a_iloaded = getProperty(a_iloaded); - value.a_manualA = getProperty(a_manualA); - value.a_force = getProperty(a_force); - var t_a_itimeout = getPropertyNumber(a_itimeout); - value.a_itimeout = isNaN(t_a_itimeout) ? SSS.a_itimeout : t_a_itimeout >= 0 ? t_a_itimeout : 0; - var t_a_remain = getPropertyNumber(a_remain); - value.a_remain = isNaN(t_a_remain) ? SSS.a_remain : Number(t_a_remain); - var t_a_maxpage = getPropertyNumber(a_maxpage); - value.a_maxpage = isNaN(t_a_maxpage) ? SSS.a_maxpage : t_a_maxpage >= 1 ? t_a_maxpage : 1; - var t_a_ipages_1 = getPropertyNumber(a_ipages_1); - value.a_ipages = [getProperty(a_ipages_0), isNaN(t_a_ipages_1) ? SSS.a_ipages[1] : t_a_ipages_1 >= 0 ? t_a_ipages_1 : 1]; - value.a_separator = getProperty(a_separator); - } - saveLocalSetting(value); - if (e.shiftKey ? !prefs.FW_RAS : prefs.FW_RAS) { - // 按住shift键,执行反向操作. - setTimeout(function () { - location.reload(); - }, 1); - } - }, false); - - // 载入翻页设置. - if (SSS.a_enable === undefined) { - // 未定义翻页功能. - a_enable.disabled = true; - autopager_field.style.display = 'none'; - } else { - setProperty(a_enable, SSS.a_enable ? 'autopager' : 'preloader'); - setProperty(a_useiframe, SSS.a_useiframe); - setProperty(a_newIframe, SSS.a_newIframe); - setProperty(a_iloaded, SSS.a_iloaded); - setProperty(a_itimeout, SSS.a_itimeout); - setProperty(a_manualA, SSS.a_manualA); - setProperty(a_force, SSS.a_force); - setProperty(a_remain, SSS.a_remain); - setProperty(a_maxpage, SSS.a_maxpage); - setProperty(a_separator, SSS.a_separator); - setProperty(a_ipages_0, SSS.a_ipages[0]); - setProperty(a_ipages_1, SSS.a_ipages[1]); - } - if (!SSS.a_enable) { - // 当前不是翻页模式,禁用立即翻页按钮. - a_starti.disabled = true; - } - if (!SSS.hasRule) { - // 如果没有高级规则,那么此项不允许操作. - a_force.disabled = true; - } - - // 载入预读设置. - setProperty(useiframe, SSS.useiframe); - setProperty(viewcontent, SSS.viewcontent); - - // 总开关 - setProperty(enable, SSS.enable); - var FWKG_state = { - loading: '读取中状态', - prefetcher: '预读状态', - autopager: '翻页状态', - Apause: '翻页状态(暂停)', - Astop: '翻页状态(停止)(翻页完成,或者被异常停止)(无法再开启)', - dot: '读取完后' - }; - if (userLang !== 'zh_CN') { - FWKG_state.loading = 'Loading'; - FWKG_state.prefetcher = 'Prefetching'; - FWKG_state.autopager = 'Autopagger (Running)'; - FWKG_state.Apause = 'Autopagger (Pause)'; - FWKG_state.Astop = 'Autopagger (Stop)'; - FWKG_state.dot = 'Finish loading'; - } - floatWO = { - updateColor: function updateColor(state) { - rect.style.backgroundColor = FWKG_color[state]; - rect.setAttribute('title', FWKG_state[state]); - }, - loadedIcon: function loadedIcon(command) { - dot.style.display = command == 'show' ? 'block' : 'none'; - }, - CmodeIcon: function CmodeIcon(command) { - cur_mode.style.display = command == 'show' ? 'block' : 'none'; - } - }; - var vertical = parseInt(prefs.FW_offset[0] + '', 10); - var horiz = parseInt(prefs.FW_offset[1] + '', 10); - var FW_position = prefs.FW_position; - - // 非opera用fixed定位. - div.style.position = 'fixed'; - switch (FW_position) { - case 1: - div.style.top = vertical + 'px'; - div.style.left = horiz + 'px'; - break; - case 2: - div.style.top = vertical + 'px'; - div.style.right = horiz + 'px'; - break; - case 3: - div.style.bottom = vertical + 'px'; - div.style.right = horiz + 'px'; - break; - case 4: - div.style.bottom = vertical + 'px'; - div.style.left = horiz + 'px'; - break; - } - } - function sp_transition(start, end) { - //@ts-ignore - var TweenF = sp_transition.TweenF; - if (!TweenF) { - TweenF = Tween[TweenM[prefs.s_method]]; - TweenF = TweenF[TweenEase[prefs.s_ease]] || TweenF; - //@ts-ignore - sp_transition.TweenF = TweenF; - } - var frameSpeed = 1000 / prefs.s_FPS; - var t = 0; // 次数,开始 - var b = start; // 开始 - var c = end - start; // 结束 - var d = Math.ceil(prefs.s_duration / frameSpeed); // 次数,结束 - - var x = window.scrollX; - function transition() { - var y = Math.ceil(TweenF(t, b, c, d)); - window.scroll(x, y); - if (t < d) { - t++; - setTimeout(transition, frameSpeed); - } - } - transition(); - } - function sepHandler(e) { - e.stopPropagation(); - var div = e.currentTarget; - var target = e.target; - function getRelativeDiv(which) { - var id = div.id; - id = id.replace(/(sp-separator-)(.+)/, function (a, b, c) { - return b + String(Number(c) + (which == 'pre' ? -1 : 1)); - }); - return id ? document.getElementById(id) : null; - } - function scrollIt(a, b) { - // a=a!==undefined? a : window.scrollY; - if (prefs.sepT) { - sp_transition(a, b); - } else { - window.scroll(window.scrollX, b); - } - } - var o_scrollY, divS; - switch (target.className) { - case 'sp-sp-gotop': - scrollIt(window.scrollY, 0); - break; - case 'sp-sp-gopre': - { - var prediv = getRelativeDiv('pre'); - if (!prediv) return; - o_scrollY = window.scrollY; - var preDS = prediv.getBoundingClientRect().top; - if (prefs.sepP) { - divS = div.getBoundingClientRect().top; - preDS = o_scrollY - (divS - preDS); - } else { - preDS += o_scrollY - 6; - } - scrollIt(o_scrollY, preDS); - break; - } - case 'sp-sp-gonext': - { - var nextdiv = getRelativeDiv('next'); - if (!nextdiv) return; - o_scrollY = window.scrollY; - var nextDS = nextdiv.getBoundingClientRect().top; - if (prefs.sepP) { - divS = div.getBoundingClientRect().top; - nextDS = o_scrollY + (-divS + nextDS); - } else { - nextDS += o_scrollY - 6; - } - scrollIt(o_scrollY, nextDS); - break; - } - case 'sp-sp-gobottom': - scrollIt(window.scrollY, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight)); - break; - } - } - - // autopager - var autoPO = { - /**@type {(value?:number)=>void} f*/ - startipages: nullFn - }; - var hashchangeAdded = false; - /** - * @param {IRuntimeRule} SSS a rule - * @param {*} floatWO float window object - * @returns {void} - */ - function autopager(SSS, floatWO) { - // return; - // 更新悬浮窗的颜色. - floatWO.updateColor('autopager'); - - // 获取插入位置节点. - var insertPoint; - var pageElement; - var insertMode; - if (SSS.a_HT_insert) { - insertPoint = getElement(SSS.a_HT_insert[0]); - insertMode = SSS.a_HT_insert[1]; - } else { - pageElement = getAllElements(SSS.a_pageElement, document, document, null, cplink); - if (pageElement.length > 0) { - var pELast = pageElement[pageElement.length - 1]; - insertPoint = pELast.nextSibling ? pELast.nextSibling : pELast.parentNode.appendChild(document.createTextNode(' ')); - } - insertMode = -1; - } - if (insertPoint) { - logger.debug("[Super-preloader]", 'Verify that the insertion position node can be found: success', insertPoint); - } else { - logger.error("[Super-preloader]", 'Verify that the insertion position node can be found: failed. JS execution stopped', SSS.a_HT_insert ? SSS.a_HT_insert[0] : ''); - floatWO.updateColor('Astop'); - return; - } - if (window.navigator.language != 'en') { - logger.debug("[Super-preloader]", 'Language: ', window.navigator.language); - } - if (pageElement === undefined) { - pageElement = getAllElements(SSS.a_pageElement); - } - if (pageElement.length > 0) { - logger.debug("[Super-preloader]", 'Verify that the main element can be found: success', pageElement); - } else { - logger.error("[Super-preloader]", 'Verify that the main element can be found: failure', SSS.a_pageElement); - floatWO.updateColor('Astop'); - return; - } - if (SSS.a_stylish) { - // 插入自定义样式 - addStyle(SSS.a_stylish, 'Super_preloader-style'); - } - - /** @type {Node} */ - var insertPointP; - if (insertMode != 2) { - insertPointP = insertPoint.parentNode; - } - var addIntoDoc; - if (insertMode == -1 || insertMode == 1) { - addIntoDoc = function addIntoDoc(obj) { - return insertPointP.insertBefore(obj, insertPoint); - }; - } else if (insertMode == 2) { - addIntoDoc = function addIntoDoc(obj) { - return insertPoint.appendChild(obj); - }; - } else if (insertMode == 0) { - addIntoDoc = function addIntoDoc(obj) { - return insertPointP.insertBefore(obj, insertPoint.nextSibling); - }; - } - - /** @type {HTMLDocument} */ - var doc, win; - function XHRLoaded(res) { - var str = res.data; - doc = win = createDocumentByString(str); - if (!doc) { - logger.error("[Super-preloader]", 'Document object creation failed'); - removeL(); - return; - } - floatWO.updateColor('autopager'); - floatWO.CmodeIcon('hide'); - floatWO.loadedIcon('show'); - working = false; - scroll(); - } - function XHRNotLoaded(res) { - logger.error("[Super-preloader]", 'XHR is failed to be loaded'); - logger.error("[Super-preloader]", res); - removeL(); - } - function removeL(isRemoveAddPage) { - logger.debug("[Super-preloader]", 'Remove various event listeners'); - floatWO.updateColor('Astop'); - var _remove = remove; - for (var i = 0, ii = _remove.length; i < ii; i++) { - _remove[i](); - } - if (isRemoveAddPage) { - var separator = document.querySelector('.sp-separator'); - if (separator) { - var insertBefore = insertPoint; - if (insertMode == 2) { - var l = insertPoint.children.length; - if (l > 0) { - insertBefore = insertPoint.children[l - 1]; - } - } - var range = document.createRange(); - range.setStartBefore(separator); - range.setEndBefore(insertBefore); - range.deleteContents(); - range.detach(); - if (insertMode == 2) { - // 还需要额外移除? - insertPoint.removeChild(insertBefore); - } - } - var style = document.getElementById('Super_preloader-style'); - if (style) { - style.parentNode.removeChild(style); - } - } - } - if (isHashchangeSite && !hashchangeAdded) { - window.addEventListener('hashchange', onhashChange, false); - hashchangeAdded = true; - logger.debug("[Super-preloader]", 'Successfully added hashchange event'); - } - function onhashChange(event) { - logger.debug("[Super-preloader]", 'hashchange event triggered'); - removeL(true); - setTimeout(function () { - nextlinkElem = getElement(SSS.nextLink || 'auto;'); - nextlink = elemToHref(nextlinkElem); - // preLink = getElement(SSS.preLink || 'auto;'); - autopager(SSS, floatWO); - }, hashchangeTimer); - } - - /** @type {HTMLIFrameElement} */ - var iframe; - var messageR; - - /** - * Event handler of iframe loaded - * @param {IFrameLoadedEvent} event Iframe loaded event - * @returns {void} - */ - function iframeLoaded(event) { - var iframe = event.currentTarget; - var body = iframe.contentDocument.body; - if (body && body.firstChild) { - setTimeout(function () { - doc = iframe.contentDocument; - removeScripts(doc, SSS.a_scriptFilter); - win = iframe.contentWindow || doc; - floatWO.updateColor('autopager'); - floatWO.CmodeIcon('hide'); - floatWO.loadedIcon('show'); - working = false; - scroll(); - }, SSS.a_itimeout); - } - } - - /** - * Load next page in iframe - * @param {string} link Link of the next page - * @returns {void} - */ - function iframeRequest(link) { - messageR = false; - if (SSS.a_newIframe || !iframe) { - var insertLoc = null; - var i = document.createElement('iframe'); - iframe = i; - i.name = 'superpreloader-iframe'; - i.width = '100%'; - i.height = '0'; - i.frameBorder = '0'; - i.style.cssText = '\ + } + }); + document.body.appendChild(div); + noticeDiv = div; + } + clearTimeout(noticeDivto); + clearTimeout(noticeDivto2); + noticeDiv.innerHTML = html_txt; + noticeDiv.style.display = 'block'; + noticeDiv.style.opacity = '0.96'; + if (showTime === undefined) { + showTime = 1666; + } + if (showTime > 0) { + noticeDivto2 = setTimeout(function () { + noticeDiv.style.opacity = '0'; + }, showTime); + noticeDivto = setTimeout(function () { + noticeDiv.style.display = 'none'; + }, showTime + 300); + } + } + + var spcss = {}; //@ts-check + spcss["sp-separator"] = _wcImport4; + spcss["sp-prefs-spinner"] = _wcImport3; + spcss["sp-prefs-setup"] = _wcImport2; + spcss["sp-fw"] = _wcImport; + (function () { + // use charset from currentDocument + var gotConfig = { + html: true, + encoding: document.characterSet + }; + logger.setLevel('warn'); + + // `options.cookie`, dirty fix for older versions of TM and VM on Firefox + if (BROWSER.name === 'firefox') { + if (SCRIPT_MANAGER.name === 'Violentmonkey' && compareVersions(SCRIPT_MANAGER.version, '2.12.3') <= 0 || SCRIPT_MANAGER.name === 'Tampermonkey' && compareVersions(SCRIPT_MANAGER.version, '4.10.6103') < 0) { + logger.warn("[Super-preloader]", `${SCRIPT_MANAGER.name} v${SCRIPT_MANAGER.version} has a flaw with Firefox, which may affect this script`); + logger.warn("[Super-preloader]", 'Check https://github.com/Tampermonkey/tampermonkey/issues/786 and https://github.com/violentmonkey/violentmonkey/issues/606 to learn more'); + gotConfig.cookie = true; + } + } else if (SCRIPT_MANAGER.name === 'Tampermonkey' && BROWSER.name === 'safari') { + logger.warn("[Super-preloader]", `${SCRIPT_MANAGER.name} has a flaw with Safari, which may affect this script`); + logger.warn("[Super-preloader]", 'Check https://github.com/Tampermonkey/tampermonkey/issues/786 and https://github.com/violentmonkey/violentmonkey/issues/606 to learn more'); + gotConfig.cookie = true; + } + if (SCRIPT_MANAGER.name.toLowerCase().includes('adguard')) { + logger.warn("[Super-preloader]", `${SCRIPT_MANAGER.name} has issues with some specific like Google due to the way it injects script`); + } + var got = got$1.create(gotConfig); + var scriptInfo = SCRIPT_INFO; + + // ---------------------------------- + // all rules + /** @type {IRule[]} */ + var SSRules = []; + // ---------------------------------- + + // Check if we are looking at a file instead of a webpage + if ( + // : SVG Document + document.documentElement.matches('svg') || + // : plain text + // : Image + // : Audio and video + // : PDF (Chrome) + // body > #outerContainer:first-child + #printContainer:last-child: PDF (Firefox) + document.querySelector('body > pre:only-child, body > img:only-child, body > video:only-child, body > embed:only-child, body > #outerContainer:first-child + #printContainer:last-child')) { + return; + } + if (window.name === 'mynovelreader-iframe') { + return; + } + function CheckIframe() { + if (window.name === 'superpreloader-iframe') { + return true; + } else { + return false; + } + } + + // how to trigger lazy_load + // https://wiki.greasespot.net/Generate_Click_Events + if (CheckIframe()) { + // 搜狗,iframe里面怎么不加载js啊? + // 去掉了原版的另一种方法,因为新版本 chrome 已经支持。旧版本 chrome iframe里面 无法访问window.parent,返回undefined + var domLoaded = function domLoaded() { + //window.scroll(window.scrollX, 99999); + var mutationObserver = window.frameElement ? JSON.parse(window.frameElement.getAttribute('mutationObserver')) : null; + if (!mutationObserver) { + window.parent.postMessage('superpreloader-iframe:DOMLoaded', '*'); + } else { + var observers = mutationObserver.observers; + + /**@type {Promise} */ + var p = null; + /**@type {Array} */ + var parr = []; + if (observers) { + ['attributes', 'addedNodes', 'removedNodes'].forEach(function (key) { + var el = getAllElements(observers[key]); + if (el.length > 0) { + if (mutationObserver.relatedObj) { + //el.forEach((x) => { + // p.push(elementReady(x, key)); + //}); + parr.push(elementReady(el[el.length - 1], key)); + el[0].scrollIntoView(); + el[el.length - 1].scrollIntoView(); + } else { + parr.push(elementReady(el[el.length - 1], key)); + } + } + }); + } + if (p) { + p = Promise.all(parr); + } else { + p = Promise.resolve(undefined); + } + var timeout = mutationObserver.timeout && 0; + setTimeout(function () { + p.then(function (values) { + if (values) { + values.forEach(function (_ref) { + _ref.element; + _ref.type; + _ref.mutationList; + var observer = _ref.observer; + observer.disconnect(); + }); + } + //window.scrollTo(0, scrollLocation); + window.parent.postMessage('superpreloader-iframe:DOMLoaded', '*'); + }); + }, timeout); + } + }; + //@ts-ignore + if (window.opera) { + document.addEventListener('DOMContentLoaded', domLoaded, false); + } else { + domLoaded(); + } + return; + } + + // 在以下网站上允许在非顶层窗口上加载JS..比如猫扑之类的框架集网页. + var DIExclude = [['猫扑帖子', true, /^https?:\/\/dzh\.mop\.com\/[a-z]{3,6}\/\d{8}\/.*\.shtml$/i], ['铁血社区', true, /^https?:\/\/bbs\.tiexue\.net\/.*\.html$/i], ['铁血社区-2', true, /^https?:\/\/bbs\.qichelian\.com\/bbsqcl\.php\?fid/i], + // 像 http://so.baiduyun.me/ 内嵌的百度、Google 框架 + ['百度网盘搜索引擎-百度', true, /^https?:\/\/www\.baidu\.com\/baidu/i], ['百度网盘搜索引擎-Google', true, /^https?:\/\/74\.125\.128\.147\/custom/i]]; + + // 页面不刷新的站点 + var HashchangeSites = [{ + url: /^https?:\/\/(www|encrypted)\.google(stable)?\..{2,9}\/(webhp|#|$|\?)/, + timer: 2000, + mutationSelector: '#main' + }, + // 运营商可能会在 #wd= 前面添加 ?tn=07084049_pg + { + url: /^https?:\/\/www\.baidu\.com\/($|#wd=)/, + timer: 1000, + mutationSelector: '#wrapper_wrapper' + }, { + url: /^https?:\/\/www\.newsmth\.net/, + timer: 1000 + }]; + + // ///////// ----- End of Rules obtained from online json files -------/////////// + + // 分页导航的6个图标以及颜色设置: + var sep_icons = { + top: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWtJREFUeNrclE0rRGEUx8c1GUpRJIVIZGdhZCVr38GGhaI0ZXwCkliglChZEcvJxhdgYWOjLEUpm/EyiLzze+o8dTzdO3PljoVTv7rPc8/5d+6555xYrEhWop6boda5+6l9wjWcWpF+WIbqCJJ9hFRcDr3QAIkIhKugz5PDfkSixkphz5aiAnqgE8rgWRxGoSOPyBkswQuUwyscw4HrmFCZL8Kt/JAg7mEFPEmo4FdPwk0BUcsdzIap0TQ8qMAPuICcEjLnd+VjSjcfJNgIc/DkZGSymYGsnK9EZMrxe4MFaNGiZjC2fT5zQ3p7QDK1dR2GSljziclAvRUe8nHYVA4jjvC43NfAuk/smB2QNqcsWxKcLbAKTFnS0hWD6n27Fd6FLqiDI5iQmQ9jpiVT0sNJ6aYd7dAE3QHBbinSAX5JWWaxuLo8F35jh/bBK9Y+/r/Cl6pLcnna8NvuDGMnslpbZRpXZYT/3r4EGACZL3ZL2afNFAAAAABJRU5ErkJggg==', + bottom: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXFJREFUeNrM1c8rBGEcx/FdtCEkLqYtpdwkKSUHUhxwITdK+Z3yM2cOLnJ39Cc44SgHScmJwlFxsIdlCScO6/2t76Onp52dXTtbnno1M8+Pz84+zzMzkcg/KA3oRTzM0A4cI4VTdIUVPIM3pPGO5aABJTkGx1BqjYmFFZxW7nnBwXmXogWX6bEGc2jEIU7+kNWDUSSwZyqndSvJ3N1g2Bm0oLtB2j+w7rQP4MpqXzRT0YRaPW/BthMedYLs60HsoE2vq9BsPwAJa8XFLUa0fUrvROo/saT1Q9adGimdlt8yj6TT6Q6d2vaida9YRbtP6EqmBZC5fHA6X+AAz1bwEc6cfk9+oaZM4NoZJL70+J2hTaZtNpet041zK8yP/Mgl+rOF1emr0UM1xnAfEPyISd0Jno6vtx+QuM6PZ22lpO7dbEV2Siv6rPeIjNs1HdYC7ixfG+YBqdTVDqPIv6iIWvO7iXGUFxAqi72PraJ9IH8EGACQcYjYRd5GHwAAAABJRU5ErkJggg==', + pre: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASlJREFUeNpiYBjOoBiIrwJxFRAzUsvQViD+CMT/gfgTEPdRy9BPUENh+AsQ91JiaAuSS9HxZ3INb8Hi0v+UurwF6qL/ROBvQNxDrKFfkTT+A+JnQPwBKfJA/L9Ian7ic7kMEHcC8Q80F3UAcRsQv4by30INaUJT9weaWhSQDRUB4uVYvLkYiAWAOBopvEFBlArEPEA8G4ue9UAsATM4EYuCJUgKMtAMLoSKCwPxXCx6c1igClTQgmUZVPNrHMEGy3mgYCkCYiYgTkCSV4UZvA2IjYBYDIgvQbPvOyJTECid5wHxbyA2BuL3QLwRWYEsEJvg0IweFEU41IEMlgcxWJAEH0MxJeAsjMFEq6Jw+Br8BimVfMCTDEkG7EBcA8T3oWUJx4DVYwABBgCannnSzbgwIQAAAABJRU5ErkJggg==', + next: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT1JREFUeNrc1b1KA0EYheEl/iARFFEkKl6D0UK8CrEVrCwEexFCtBIlRWIjsfEiLL0FKzs7QUWxM2piFMUkvhPOwLAs2TGuCn7wkNll5jC7+w0Jgv9avdjAObbQn1TwCu7QwhWW4xakPIOHMKzxGCaSCm6ioXHLZ0Hqpz7KrwRPIvvNvBlM2zYyNY8cMjhDHo9fCBzErnIqKNjgRSxpvIABbOLes2MKWHfuXdhXcR2avKrJ4zGhI9gLhQbq9XaZgGO1kutIOzIHpKp7NawhjYOINSeY6lFwHacw17P6NTWHd4xqnNbcS83LObtsaCPbEW+gXUW8ODswC27xoOsn3ODDmfOGss9XLuE54jGjvPqGuuG1mFDzZIfdNHynnde7DbW1r5DwTstJHP2iE55YqD36ebXZDvr+7L/sU4ABAIpVZWnoA5GkAAAAAElFTkSuQmCC', + next_gray: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtxJREFUeNrclc9L2mEcx7/6NbVZqRVj7pIOlIUuZ1HMgv0BDcqT7JrskH13ELPBF7eTvz10HznWQBlBRIfBXIfBLmqXscvYZWPKrMNIU9Apmrr34/w6i0ovMZjw+H0+z/N8Xt+Pn/fn80hR/+WHYRhBIpFwRKPRz/F4/KnD4RB28xH0Ah4cHHyoUCjsIpFIIZPJHkml0m9Yfn2ZD78XcL1eH6rValIMCmMUtqKbD7/HbNQxaq15oxcH/lXpcmXgtnh2u/2mXC6/DqE+sSxLlUqlniE0TVPBYJAqFot6+GV9Pt+PJthms80sLS2xEonkhlgs/jgwMOBcXV3N5fP5rlCcp9bX1yWLi4uecrk8U6lUshDY3wRbLJYFGKZsNksq4N78/LwY9hOn05k5Ojqi+PzTGePxeFwZUl6vd8hkMvkPDg6sZJ2M5eXlr1wqUu2kA5JOpy2IAO+oO9fW1n5mMpk2nDjmcjkKNU25XC652Wx2pVIp65mXJ2nyjUPpqakpNZxuA8Y5T87OzsobjcYHpVKpGhsbe1CtVkXYqxQKhTdqtfqL1Wr1JpPJxxyU5Lq/vz8aCoX8TTDatYiFhF6vxx5tAJwm8OPj48m5ubmKSqUaAWwSa9eQw6JGo/luNBoNh4eHbAe0JhAINsLh8LNAIJCiudhxB+Qh2ludTifDAQLvI3AIch+Rkl8jJlrhCbOqgfoLmDepOF/BfGNra2sFFZFtvqgzMbFYjAiyp9Vqh4VC4cTJyYmQ90epIQJtHRO1bA5aRhAvdnZ2GI/H87cEz5YPgeOS2RsfHx9B7u+gOi68yQAtYX9zd3eXgZCna/s8By5ypGUUzhOISHgO9BfWXwG6chZ6IbiVc6LwnsFgGIVAepLzjk4rYW1ze3ubcbvd53fjZV2FaqGQ63fT09PDMO9i9BEoon0J9Rm/339xm3dr2f39fVLX7wFvoMVvoYWfRyIRFndD/Z/8nf0WYAA8EC1Z/ZNm4gAAAABJRU5ErkJggg==', + pre_gray: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAslJREFUeNrclTtMWmEUxz/uvTzlIUhpNMR0aGNjrNHSmHTqRJyadujQDbSGRwJUaYCmDizqUEw6ODVNGgbpYCfSpFINCQzFR9oyMXRsXFCsAXkIKNL/R7gGWxOsSdPEk5zc3O+e87vn+59zv0vIpbSJiQmyubn5LBKJpNbX11+4XC5Buxy2XYDNZiMOh2OW4ziPTCbTi8XikeHh4SsSieQTXnIxsN1uJ1ardVYgEDgPDw+V9Xqd1Go1Mcuyg7AuuVy+sra29ndgVEnGx8dnhEKhs1qtKgE/eXZ8fCzC+q3+/n6tSqVaSSQS5wM7nU5iMplmsF1XpVI5BeXt6OhIBFkGAe9SKpV/wNmzKjWbzRT6tFwuK86CUqPrkIVWPjQwMKBWKBSn4Ozv0LGxsRmRSDSFSjua0Do8TRWAS+B5+B68g/IhixCNvQPN1WjuieZsS/f1aNQ0wzBuaCqlUCQRtVr9Es1K4kVDWJNhrQjAIiqMlkqle804FnkjBoOhEzv4vrGxkW2ALRaLFrq+QoAV2nE8tLe3dzEYDE5vb2939vX1PcBkiKVSaQ1jForFYq+NRqMum83ebsYzmJq7sGu4xhkKxsDfB/AxnO860ev1oeXlZU8gEMgmk0kFqmw8o9dUKiWfn58vhMPh54h7S+OpQXNSLBYfejyeR1yzw9dbRon09PS8W11dnfL5fJl8Pk+0Wi3hk5vyCNBY4vV6f0Im9+joKJNOp818o8G70ah4aWnpIzSKYCa/dXd3B+PxuHNycjKzs7NzAms1+qFQy+VydDRz0WjUpdPp3tB8TFM0FAqFGxXPzc19plJrNJqraMoXt9tNt3Suc+Tg4ICeJfmFhQVLoVAwoKG7fr//B8cHAL6Fy9ZFDinaG/r5w77ya8y/OhEvKRhjtIup2YMTeBb3mXY53HnAmNkP+/v7NzHTTwAO4f79f/ud/RJgAOLcRNZqLojMAAAAAElFTkSuQmCC', + text_span_style: 'color:#595959!important;' + }; + + // 悬浮窗的状态颜色. + var FWKG_color = { + loading: '#8B00E8', + // 读取中状态 + prefetcher: '#5564AF', + // 预读状态 + autopager: '#038B00', + // 翻页状态 + Apause: '#B7B700', + // 翻页状态(暂停). + Astop: '#A00000', + // 翻页状态(停止)(翻页完成,或者被异常停止.)(无法再开启) + dot: '#00FF05' // 读取完后,会显示一个小点,那么小点的颜色. + }; + + // 上一页关键字 + var prePageKey = ['上一页', '上一頁', '上1页', '上1頁', '上页', '上頁', '翻上頁', '翻上页', '上一张', '上一張', '上一幅', '上一章', '上一节', '上一節', '上一篇', '前一页', '前一頁', '后退', '後退', '上篇', 'previous', 'previous Page', '前へ', '前のページ']; + + // 下一页关键字 + var nextPageKey = ['下一页', '下一頁', '下1页', '下1頁', '下页', '下页 ›', '下頁', '翻页', '翻頁', '翻下頁', '翻下页', '下一张', '下一張', '下一幅', '下一章', '下一节', '下一節', '下一篇', '前进', '下篇', '后页', '往后', 'Next', 'Next Page', '次へ', '次のページ', '次のページ »', '下一页 →', '下一頁 →', '下1页 →', '下1頁 →', '下页 →', '下頁 →', '翻页 →', '翻頁 →', '翻下頁 →', '翻下页 →', '下一张 →', '下一張 →', '下一幅 →', '下一章 →', '下一节 →', '下一節 →', '下一篇 →', '前进 →', '下篇 →', '后页 →', '往后 →', 'Next →', 'Next Page →', '次へ →', '次のページ →', '下一页 »', '下一頁 »', '下1页 »', '下1頁 »', '下页 »', '下頁 »', '翻页 »', '翻頁 »', '翻下頁 »', '翻下页 »', '下一张 »', '下一張 »', '下一幅 »', '下一章 »', '下一节 »', '下一節 »', '下一篇 »', '前进 »', '下篇 »', '后页 »', '往后 »', 'Next »', 'Next Page »', '次へ »', '后一页', '後一頁', '下一页 ›', '下一頁 ›', '下1页 ›', '下1頁 ›', '下頁 ›', '翻页 ›', '翻頁 ›', '翻下頁 ›', '翻下页 ›', '下一张 ›', '下一張 ›', '下一幅 ›', '下一章 ›', '下一节 ›', '下一節 ›', '下一篇 ›', '前进 ›', '下篇 ›', '后页 ›', '往后 ›', 'Next ›', 'Next >', 'Next Page ›', '次へ ›', '次のページ ›', '»', '→', '早期文章→']; + // THX to https://greasyfork.org/en/forum/discussion/39361/x + // 出在自动翻页信息附加显示真实相对页面信息,一般能智能识别出来。如果还有站点不能识别,可以把地址的特征字符串加到下面 + // 最好不要乱加,一些不规律的站点显示出来的数字也没有意义 + var REALPAGE_SITE_PATTERN = ['search?', 'search_', 'forum', 'thread']; + + // ------------------------下面的不要管他----------------- + /// //////////////////////////////////////////////////////////////// + // eslint-disable-next-line prettier/prettier + Promise.all([loadSettings(), getServerIp(location.hostname)]).then(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + values = _ref3[0], + serverIp = _ref3[1]; + var jsonRule = values.jsonRule; + var prefs = values.prefs, + SITEINFO_D = values.SITEINFO_D, + autoMatch = values.autoMatch; + values.version; + var blackList = values.blackList; + if (prefs.debug) { + logger.setLevel('debug'); + } else { + logger.setLevel(5); + } + logger.debug("[Super-preloader]", 'Script Manager: ', JSON.stringify({ + name: SCRIPT_MANAGER.name, + version: SCRIPT_MANAGER.version || 'unknown' + })); + logger.debug("[Super-preloader]", 'Browser: ', JSON.stringify(BROWSER)); + logger.debug("[Super-preloader]", `Server ip: ', ${serverIp}`); + var setup = function setup() { + var d = document; + + /** + * + * @param {string} s s + * @returns {HTMLInputElement} elem + */ + var $ = function $(s) { + // @ts-ignore + return d.getElementById('sp-prefs-' + s); + }; + if ($('setup')) return; + var styleNode = addStyle(spcss['sp-prefs-setup']); + if (prefs.customCSS.length > 0) { + addStyle(prefs.customCSS); + } + var div = d.createElement('div'); + div.id = 'sp-prefs-setup'; + div.style.position = 'fixed'; + if (prefs.FW_position !== 2) { + div.style.right = '38px'; + div.style.top = '20px'; + } else { + div.style.right = `${prefs.FW_offset[1]}px`; + div.style.top = `${prefs.FW_offset[0]}px`; + } + var nextUpdateDate = prefs.disableBuiltinSubscriptionRules ? 'N/A' : jsonRuleLoader.expire.toDateString(); + div.innerHTML = template['sp-prefs']({ + prefs, + scriptInfo, + nextUpdateDate: nextUpdateDate + }); + d.body.appendChild(div); + var close = function close() { + if (styleNode) { + styleNode.parentNode.removeChild(styleNode); + } + var div = $('setup'); + div.parentNode.removeChild(div); + }; + var on = function on(node, e, f) { + node.addEventListener(e, f, false); + }; + on($('ok'), 'click', function () { + Object.keys(factorySettings.prefs).forEach(function (key) { + var el = $(key); + if (el !== null) { + prefs[key] = getProperty(el); + } + }); + if (prefs.debug) { + logger.setLevel('debug'); + } else { + logger.setLevel(5); + } + autoMatch.keyMatch = !$('autoMatchKeyMatch').checked; + SITEINFO_D.useiframe = !!$('SITEINFO_D-useiframe').checked; + SITEINFO_D.autopager.enable = !!$('SITEINFO_D-a_enable').checked; + SITEINFO_D.autopager.force_enable = !!$('SITEINFO_D-a_force_enable').checked; + autoMatch.useiframe = SITEINFO_D.useiframe; + saveSettings({ + prefs, + SITEINFO_D, + autoMatch + }).then(function () { + SP.loadSetting(); + close(); + location.reload(); + }); + }); + on($('reset'), 'click', function () { + $('setup').innerHTML = template.spinner.reset; + addStyle(spcss['sp-prefs-spinner']); + resetSettings().then(function () { + location.reload(); + }); + }); + if (prefs.disableBuiltinSubscriptionRules) { + $('updaterule').setAttribute('disabled', ''); + } + on($('updaterule'), 'click', function () { + if (prefs.disableBuiltinSubscriptionRules) return; + $('setup').innerHTML = template.spinner.update; + addStyle(spcss['sp-prefs-spinner']); + jsonRuleLoader.updateRule(true).then(function () { + jsonRule = jsonRuleLoader.getRule(); + SP.loadSetting(); + close(); + location.reload(); + }); + }); + on($('cancel'), 'click', close); + $('debug').checked = logger.getLevel() === logger.levels.DEBUG; + $('ChineseUI').checked = prefs.ChineseUI; + $('floatWindow').checked = prefs.floatWindow; + $('enableHistory').checked = prefs.enableHistory; + // $('forceTargetWindow').checked = prefs.forceTargetWindow; + $('dblclick_pause').checked = prefs.dblclick_pause; + $('SITEINFO_D-useiframe').checked = SITEINFO_D.useiframe; + $('SITEINFO_D-a_enable').checked = SITEINFO_D.autopager.enable; + $('arrowKeyPage').checked = prefs.arrowKeyPage; + $('SITEINFO_D-a_force_enable').checked = SITEINFO_D.autopager.force_enable; + $('excludes').value = prefs.excludes; + $('custom_siteinfo').value = prefs.custom_siteinfo; + $('customCSS').value = prefs.customCSS; + $('disableBuiltinRules').checked = prefs.disableBuiltinRules; + $('disableBuiltinSubscriptionRules').checked = prefs.disableBuiltinSubscriptionRules; + $('autoMatchKeyMatch').checked = !autoMatch.keyMatch; + }; + + // main functions + var SP = { + spinit: function spinit() { + if (document.body.getAttribute('name') === 'MyNovelReader') { + return; + } + this.loadSetting(); + if (userLang === 'zh_CN') { + GM.registerMenuCommand('Super_preloaderPlus_one_New 设置', setup); + } else { + GM.registerMenuCommand('Super_preloaderPlus_one_New Settings', setup); + } + + // 查找是否是页面不刷新的站点 + var locationHref = location.href; + var hashSite = _find(HashchangeSites, function (x) { + return toRE(x.url).test(locationHref); + }); + if (hashSite) { + isHashchangeSite = true; + hashchangeTimer = hashSite.timer; + logger.debug("[Super-preloader]", 'This site does not refresh the page.', hashSite); + var p1 = new Promise(function (resolve, reject) { + setTimeout(resolve, hashchangeTimer); + }); + p1.then(function (values) { + init(window, document); + }); + } else { + init(window, document); + } + // 分辨率 高度 > 宽度 的是手机 + if (window.screen.height > window.screen.width) { + addStyle('div.sp-separator { min-width:auto !important; }'); + } + }, + loadSetting: function loadSetting() { + var a_enable = SITEINFO_D.autopager.enable; + if (a_enable !== undefined) { + SITEINFO_D.autopager.enable = a_enable; + } + var loadDblclickPause = function loadDblclickPause(reload) { + var dblclickPause = prefs.dblclick_pause; + if (dblclickPause) { + prefs.mouseA = false; + prefs.Pbutton = [0, 0, 0]; + } + if (reload) location.reload(); + }; + var loadCustomSiteInfo = function loadCustomSiteInfo() { + var userRules; + try { + // eslint-disable-next-line no-new-func + userRules = new Function('', 'return ' + prefs.custom_siteinfo)(); + } catch (e) { + logger.error("[Super-preloader]", 'Custom site rule error:', prefs.custom_siteinfo); + } + if (_isArray(userRules)) { + SSRules = SSRules.concat(userRules); + } + }; + loadDblclickPause(); + loadCustomSiteInfo(); + } + }; + SP.spinit(); + /** + * + * @param {Window} window window + * @param {Document} document document + * @returns {void} + */ + function init(window, document) { + var startTime = new Date(); + // eslint-disable-next-line valid-jsdoc + /**@type {(...rest:any[])=>void} */ + var nullFn = function nullFn() {}; // 空函数. + var url = document.location.href.replace(/#.*$/, ''); // url 去掉hash + var cplink = url; // 翻上来的最近的页面的url; + document.domain; // 取得域名. + var domain_port = url.match(/https?:\/\/([^\/]+)/)[1]; // 端口和域名,用来验证是否跨域. + + // 新加的,以示区别 + var remove = []; // 需要移除的事件 + + // 悬浮窗 + var floatWO = { + updateColor: nullFn, + loadedIcon: nullFn, + CmodeIcon: nullFn + }; + /** + * + * @param {IRuntimeRule} SSS a rule + * @returns {void} + */ + function floatWindow(SSS) { + // inject css + addStyle(spcss['sp-fw']); + + // create container + var div = document.createElement('div'); + div.id = 'sp-fw-container'; + div.innerHTML = template.floatWindow(); + document.body.appendChild(div); + + // helper function to get element + /** + * + * @param {string} id id + * @returns {HTMLInputElement} return + * */ + function $(id) { + //@ts-ignore + return document.getElementById(id); + } + var rect = $('sp-fw-rect'); // 悬浮窗的小正方形,用颜色描述当前的状态. + var spanel = $('sp-fw-content'); // 设置面板. + + // 设置面板显隐 + var spanelc = { + show: function show() { + spanel.style.display = 'block'; + }, + hide: function hide() { + spanel.style.display = 'none'; + } + }; + spanelc.hide(); + var rectt1, rectt2; + rect.addEventListener('mouseover', function (e) { + rectt1 = setTimeout(spanelc.show, 100); + }, false); + rect.addEventListener('mouseleave', function (e) { + clearTimeout(rectt1); + }, false); + div.addEventListener('mouseover', function (e) { + clearTimeout(rectt2); + }, false); + div.addEventListener('mouseleave', function (e) { + // Firefox bug + // https://stackoverflow.com/questions/46831247/select-triggers-mouseleave-event-on-parent-element-in-mozilla-firefox + if (e.relatedTarget === null) return; + rectt2 = setTimeout(spanelc.hide, 288); + }, false); + var dot = $('sp-fw-dot'); // 载入完成后,显示的小点 + dot.style.backgroundColor = FWKG_color.dot; + var cur_mode = $('sp-fw-cur-mode'); // 当载入状态时,用来描述当前是翻页模式,还是预读模式. + cur_mode.style.backgroundColor = SSS.a_enable ? FWKG_color.autopager : FWKG_color.prefetcher; + var a_enable = $('sp-fw-a_enable'); // 启用翻页模式 + var autopager_field = $('sp-fw-autopager-field'); // 翻页设置区域 + + // 预读设置 + var useiframe = $('sp-fw-useiframe'); + var viewcontent = $('sp-fw-viewcontent'); + + // 翻页设置 + var a_useiframe = $('sp-fw-a_useiframe'); + var a_iloaded = $('sp-fw-a_iloaded'); + var a_itimeout = $('sp-fw-a_itimeout'); + var a_manualA = $('sp-fw-a_manualA'); + var a_remain = $('sp-fw-a_remain'); + var a_maxpage = $('sp-fw-a_maxpage'); + var a_separator = $('sp-fw-a_separator'); + var a_ipages_0 = $('sp-fw-a_ipages_0'); + var a_ipages_1 = $('sp-fw-a_ipages_1'); + var a_force = $('sp-fw-a_force'); + + // newIframe 输入框的点击 + var a_newIframe = $('sp-fw-a_newIframe'); + a_newIframe.addEventListener('click', function () { + a_useiframe.checked = a_newIframe.checked; + }, false); + var a_starti = $('sp-fw-a_starti'); // 开始立即翻页 + a_starti.addEventListener('click', function (e) { + //@ts-ignore + if (e.currentTarget.disabled) return; + var value = parseInt(a_ipages_1.value); + if (isNaN(value) || value < 0) { + value = SSS.a_ipages[1]; + //@ts-ignore + a_ipages_1.value = value; + } + autoPO.startipages(value); + }, false); + + // 总开关 + var enable = $('sp-fw-enable'); + $('sp-fw-setup').addEventListener('click', setup, false); + + // 保存设置按钮. + var savebutton = $('sp-fw-savebutton'); + savebutton.addEventListener('click', function (e) { + var value = { + Rurl: SSS.Rurl, + useiframe: getProperty(useiframe), + viewcontent: getProperty(viewcontent), + enable: getProperty(enable) + }; + if (SSS.a_enable !== undefined) { + /** @type {(s:HTMLElement)=>number} */ + //@ts-ignore + var getPropertyNumber = getProperty; + value.a_enable = getProperty(a_enable) === 'autopager'; + value.a_useiframe = getProperty(a_useiframe); + value.a_newIframe = getProperty(a_newIframe); + value.a_iloaded = getProperty(a_iloaded); + value.a_manualA = getProperty(a_manualA); + value.a_force = getProperty(a_force); + var t_a_itimeout = getPropertyNumber(a_itimeout); + value.a_itimeout = isNaN(t_a_itimeout) ? SSS.a_itimeout : t_a_itimeout >= 0 ? t_a_itimeout : 0; + var t_a_remain = getPropertyNumber(a_remain); + value.a_remain = isNaN(t_a_remain) ? SSS.a_remain : Number(t_a_remain); + var t_a_maxpage = getPropertyNumber(a_maxpage); + value.a_maxpage = isNaN(t_a_maxpage) ? SSS.a_maxpage : t_a_maxpage >= 1 ? t_a_maxpage : 1; + var t_a_ipages_1 = getPropertyNumber(a_ipages_1); + value.a_ipages = [getProperty(a_ipages_0), isNaN(t_a_ipages_1) ? SSS.a_ipages[1] : t_a_ipages_1 >= 0 ? t_a_ipages_1 : 1]; + value.a_separator = getProperty(a_separator); + } + saveLocalSetting(value); + if (e.shiftKey ? !prefs.FW_RAS : prefs.FW_RAS) { + // 按住shift键,执行反向操作. + setTimeout(function () { + location.reload(); + }, 1); + } + }, false); + + // 载入翻页设置. + if (SSS.a_enable === undefined) { + // 未定义翻页功能. + a_enable.disabled = true; + autopager_field.style.display = 'none'; + } else { + setProperty(a_enable, SSS.a_enable ? 'autopager' : 'preloader'); + setProperty(a_useiframe, SSS.a_useiframe); + setProperty(a_newIframe, SSS.a_newIframe); + setProperty(a_iloaded, SSS.a_iloaded); + setProperty(a_itimeout, SSS.a_itimeout); + setProperty(a_manualA, SSS.a_manualA); + setProperty(a_force, SSS.a_force); + setProperty(a_remain, SSS.a_remain); + setProperty(a_maxpage, SSS.a_maxpage); + setProperty(a_separator, SSS.a_separator); + setProperty(a_ipages_0, SSS.a_ipages[0]); + setProperty(a_ipages_1, SSS.a_ipages[1]); + } + if (!SSS.a_enable) { + // 当前不是翻页模式,禁用立即翻页按钮. + a_starti.disabled = true; + } + if (!SSS.hasRule) { + // 如果没有高级规则,那么此项不允许操作. + a_force.disabled = true; + } + + // 载入预读设置. + setProperty(useiframe, SSS.useiframe); + setProperty(viewcontent, SSS.viewcontent); + + // 总开关 + setProperty(enable, SSS.enable); + var FWKG_state = { + loading: '读取中状态', + prefetcher: '预读状态', + autopager: '翻页状态', + Apause: '翻页状态(暂停)', + Astop: '翻页状态(停止)(翻页完成,或者被异常停止)(无法再开启)', + dot: '读取完后' + }; + if (userLang !== 'zh_CN') { + FWKG_state.loading = 'Loading'; + FWKG_state.prefetcher = 'Prefetching'; + FWKG_state.autopager = 'Autopagger (Running)'; + FWKG_state.Apause = 'Autopagger (Pause)'; + FWKG_state.Astop = 'Autopagger (Stop)'; + FWKG_state.dot = 'Finish loading'; + } + floatWO = { + updateColor: function updateColor(state) { + rect.style.backgroundColor = FWKG_color[state]; + rect.setAttribute('title', FWKG_state[state]); + }, + loadedIcon: function loadedIcon(command) { + dot.style.display = command == 'show' ? 'block' : 'none'; + }, + CmodeIcon: function CmodeIcon(command) { + cur_mode.style.display = command == 'show' ? 'block' : 'none'; + } + }; + var vertical = parseInt(prefs.FW_offset[0] + '', 10); + var horiz = parseInt(prefs.FW_offset[1] + '', 10); + var FW_position = prefs.FW_position; + + // 非opera用fixed定位. + div.style.position = 'fixed'; + switch (FW_position) { + case 1: + div.style.top = vertical + 'px'; + div.style.left = horiz + 'px'; + break; + case 2: + div.style.top = vertical + 'px'; + div.style.right = horiz + 'px'; + break; + case 3: + div.style.bottom = vertical + 'px'; + div.style.right = horiz + 'px'; + break; + case 4: + div.style.bottom = vertical + 'px'; + div.style.left = horiz + 'px'; + break; + } + } + function sp_transition(start, end) { + //@ts-ignore + var TweenF = sp_transition.TweenF; + if (!TweenF) { + TweenF = Tween[TweenM[prefs.s_method]]; + TweenF = TweenF[TweenEase[prefs.s_ease]] || TweenF; + //@ts-ignore + sp_transition.TweenF = TweenF; + } + var frameSpeed = 1000 / prefs.s_FPS; + var t = 0; // 次数,开始 + var b = start; // 开始 + var c = end - start; // 结束 + var d = Math.ceil(prefs.s_duration / frameSpeed); // 次数,结束 + + var x = window.scrollX; + function transition() { + var y = Math.ceil(TweenF(t, b, c, d)); + window.scroll(x, y); + if (t < d) { + t++; + setTimeout(transition, frameSpeed); + } + } + transition(); + } + function sepHandler(e) { + e.stopPropagation(); + var div = e.currentTarget; + var target = e.target; + function getRelativeDiv(which) { + var id = div.id; + id = id.replace(/(sp-separator-)(.+)/, function (a, b, c) { + return b + String(Number(c) + (which == 'pre' ? -1 : 1)); + }); + return id ? document.getElementById(id) : null; + } + function scrollIt(a, b) { + // a=a!==undefined? a : window.scrollY; + if (prefs.sepT) { + sp_transition(a, b); + } else { + window.scroll(window.scrollX, b); + } + } + var o_scrollY, divS; + switch (target.className) { + case 'sp-sp-gotop': + scrollIt(window.scrollY, 0); + break; + case 'sp-sp-gopre': + { + var prediv = getRelativeDiv('pre'); + if (!prediv) return; + o_scrollY = window.scrollY; + var preDS = prediv.getBoundingClientRect().top; + if (prefs.sepP) { + divS = div.getBoundingClientRect().top; + preDS = o_scrollY - (divS - preDS); + } else { + preDS += o_scrollY - 6; + } + scrollIt(o_scrollY, preDS); + break; + } + case 'sp-sp-gonext': + { + var nextdiv = getRelativeDiv('next'); + if (!nextdiv) return; + o_scrollY = window.scrollY; + var nextDS = nextdiv.getBoundingClientRect().top; + if (prefs.sepP) { + divS = div.getBoundingClientRect().top; + nextDS = o_scrollY + (-divS + nextDS); + } else { + nextDS += o_scrollY - 6; + } + scrollIt(o_scrollY, nextDS); + break; + } + case 'sp-sp-gobottom': + scrollIt(window.scrollY, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight)); + break; + } + } + + // autopager + var autoPO = { + /**@type {(value?:number)=>void} f*/ + startipages: nullFn + }; + var hashchangeAdded = false; + /** + * @param {IRuntimeRule} SSS a rule + * @param {*} floatWO float window object + * @returns {void} + */ + function autopager(SSS, floatWO) { + // return; + // 更新悬浮窗的颜色. + floatWO.updateColor('autopager'); + + // 获取插入位置节点. + var insertPoint; + var pageElement; + var insertMode; + if (SSS.a_HT_insert) { + insertPoint = getElement(SSS.a_HT_insert[0]); + insertMode = SSS.a_HT_insert[1]; + } else { + pageElement = getAllElements(SSS.a_pageElement, document, document, null, cplink); + if (pageElement.length > 0) { + var pELast = pageElement[pageElement.length - 1]; + insertPoint = pELast.nextSibling ? pELast.nextSibling : pELast.parentNode.appendChild(document.createTextNode(' ')); + } + insertMode = -1; + } + if (insertPoint) { + logger.debug("[Super-preloader]", 'Verify that the insertion position node can be found: success', insertPoint); + } else { + logger.error("[Super-preloader]", 'Verify that the insertion position node can be found: failed. JS execution stopped', SSS.a_HT_insert ? SSS.a_HT_insert[0] : ''); + floatWO.updateColor('Astop'); + return; + } + if (window.navigator.language != 'en') { + logger.debug("[Super-preloader]", 'Language: ', window.navigator.language); + } + if (pageElement === undefined) { + pageElement = getAllElements(SSS.a_pageElement); + } + if (pageElement.length > 0) { + logger.debug("[Super-preloader]", 'Verify that the main element can be found: success', pageElement); + } else { + logger.error("[Super-preloader]", 'Verify that the main element can be found: failure', SSS.a_pageElement); + floatWO.updateColor('Astop'); + return; + } + if (SSS.a_stylish) { + // 插入自定义样式 + addStyle(SSS.a_stylish, 'Super_preloader-style'); + } + + /** @type {Node} */ + var insertPointP; + if (insertMode != 2) { + insertPointP = insertPoint.parentNode; + } + var addIntoDoc; + if (insertMode == -1 || insertMode == 1) { + addIntoDoc = function addIntoDoc(obj) { + return insertPointP.insertBefore(obj, insertPoint); + }; + } else if (insertMode == 2) { + addIntoDoc = function addIntoDoc(obj) { + return insertPoint.appendChild(obj); + }; + } else if (insertMode == 0) { + addIntoDoc = function addIntoDoc(obj) { + return insertPointP.insertBefore(obj, insertPoint.nextSibling); + }; + } + + /** @type {HTMLDocument} */ + var doc, win; + function XHRLoaded(res) { + var str = res.data; + doc = win = createDocumentByString(str); + if (!doc) { + logger.error("[Super-preloader]", 'Document object creation failed'); + removeL(); + return; + } + floatWO.updateColor('autopager'); + floatWO.CmodeIcon('hide'); + floatWO.loadedIcon('show'); + working = false; + scroll(); + } + function XHRNotLoaded(res) { + logger.error("[Super-preloader]", 'XHR is failed to be loaded'); + logger.error("[Super-preloader]", res); + removeL(); + } + function removeL(isRemoveAddPage) { + logger.debug("[Super-preloader]", 'Remove various event listeners'); + floatWO.updateColor('Astop'); + var _remove = remove; + for (var i = 0, ii = _remove.length; i < ii; i++) { + _remove[i](); + } + if (isRemoveAddPage) { + var separator = document.querySelector('.sp-separator'); + if (separator) { + var insertBefore = insertPoint; + if (insertMode == 2) { + var l = insertPoint.children.length; + if (l > 0) { + insertBefore = insertPoint.children[l - 1]; + } + } + var range = document.createRange(); + range.setStartBefore(separator); + range.setEndBefore(insertBefore); + range.deleteContents(); + range.detach(); + if (insertMode == 2) { + // 还需要额外移除? + insertPoint.removeChild(insertBefore); + } + } + var style = document.getElementById('Super_preloader-style'); + if (style) { + style.parentNode.removeChild(style); + } + } + } + if (isHashchangeSite && !hashchangeAdded) { + window.addEventListener('hashchange', onhashChange, false); + hashchangeAdded = true; + logger.debug("[Super-preloader]", 'Successfully added hashchange event'); + } + function onhashChange(event) { + logger.debug("[Super-preloader]", 'hashchange event triggered'); + removeL(true); + setTimeout(function () { + nextlinkElem = getElement(SSS.nextLink || 'auto;'); + nextlink = elemToHref(nextlinkElem); + // preLink = getElement(SSS.preLink || 'auto;'); + autopager(SSS, floatWO); + }, hashchangeTimer); + } + + /** @type {HTMLIFrameElement} */ + var iframe; + var messageR; + + /** + * Event handler of iframe loaded + * @param {IFrameLoadedEvent} event Iframe loaded event + * @returns {void} + */ + function iframeLoaded(event) { + var iframe = event.currentTarget; + var body = iframe.contentDocument.body; + if (body && body.firstChild) { + setTimeout(function () { + doc = iframe.contentDocument; + removeScripts(doc, SSS.a_scriptFilter); + win = iframe.contentWindow || doc; + floatWO.updateColor('autopager'); + floatWO.CmodeIcon('hide'); + floatWO.loadedIcon('show'); + working = false; + scroll(); + }, SSS.a_itimeout); + } + } + + /** + * Load next page in iframe + * @param {string} link Link of the next page + * @returns {void} + */ + function iframeRequest(link) { + messageR = false; + if (SSS.a_newIframe || !iframe) { + var insertLoc = null; + var i = document.createElement('iframe'); + iframe = i; + i.name = 'superpreloader-iframe'; + i.width = '100%'; + i.height = '0'; + i.frameBorder = '0'; + i.style.cssText = '\ margin:0!important;\ padding:0!important;\ visibility:hidden!important;\ '; - if (SSS.a_sandbox != false) { - //sandbox is readonly property - //i.sandbox = SSS.a_sandbox; - i.setAttribute('sandbox', ''); - } - i.src = link; - if (SSS.a_mutationObserver) { - i.setAttribute('mutationObserver', JSON.stringify(SSS.a_mutationObserver)); - if (SSS.a_mutationObserver.relatedObj) { - insertLoc = getAllElements(SSS.a_mutationObserver.relatedObj); - if (insertLoc.length > 0) { - insertLoc = insertLoc[0]; - } else { - insertLoc = null; - } - } - } - if (SSS.a_iloaded) { - i.addEventListener('load', iframeLoaded, false); - remove.push(function () { - i.removeEventListener('load', iframeLoaded, false); - }); - } else { - var messagehandler = function messagehandler(e) { - if (!messageR && e.data == 'superpreloader-iframe:DOMLoaded') { - messageR = true; - iframeLoaded.call(i, { - currentTarget: i - }); - if (SSS.a_newIframe) { - window.removeEventListener('message', messagehandler, false); - } - } - }; - window.addEventListener('message', messagehandler, false); - remove.push(function () { - window.removeEventListener('message', messagehandler, false); - }); - } - if (insertLoc) { - insertLoc.parentNode.insertBefore(i, insertLoc); - } else { - document.body.appendChild(i); - } - } else { - iframe.src = link; - iframe.contentDocument.location.replace(link); - if (SSS.a_reload) { - iframe.contentWindow.location.reload(); - } - } - } - - /** - * Send XHR request to obtain next page content - * @param {string} link Link of next page - * @returns {void} - */ - function XHRrequest(link) { - var reqConf = { - headers: SSS.a_headers ? SSS.a_headers : { - Referer: cplink - } - }; - got.get(link, reqConf).then( - /** - * Handling of XHR request - * @param {ResponseObject} res Response of got - * @returns {void} - */ - function (res) { - if (res.finalUrl === cplink) { - logger.debug("[Super-preloader]", 'Same final address'); - XHRNotLoaded(res); - } else { - XHRLoaded(res); - logger.debug("[Super-preloader]", 'XHRrequest complete'); - } - }).catch( - /** - * Error handling of XHR request - * @param {ResponseObject} res Response of got - * @returns {void} - */ - function (res) { - XHRNotLoaded(res); - }); - } - var working; - function doRequest() { - working = true; - floatWO.updateColor('loading'); - floatWO.CmodeIcon('show'); - logger.debug("[Super-preloader]", 'Get next page', SSS.a_useiframe ? '(iframe method)' : '(XHR method)', nextlink); - pagedLinks.push(nextlink); - if (SSS.a_useiframe) { - iframeRequest(nextlink); - } else { - if (/(?:http|\/).*/.test(nextlink)) { - // request next page by XHR - XHRrequest(nextlink); - } else { - logger.error("[Super-preloader]", 'Lazyload or Invalid nextLinkElem', nextlinkElem); - } - } - } - var _SSS$a_ipages = _slicedToArray(SSS.a_ipages, 2), - _SSS$a_ipages$ = _SSS$a_ipages[0], - ipagesmode = _SSS$a_ipages$ === void 0 ? false : _SSS$a_ipages$, - _SSS$a_ipages$2 = _SSS$a_ipages[1], - ipagesnumber = _SSS$a_ipages$2 === void 0 ? 2 : _SSS$a_ipages$2; - if (ipagesmode && ipagesnumber === 0) { - ipagesnumber = Number.MAX_SAFE_INTEGER; - } - var scrollDo = nullFn; - var afterInsertDo = nullFn; - if (prefs.Aplus) { - afterInsertDo = doRequest; - doRequest(); - } else { - scrollDo = doRequest; - if (ipagesmode) doRequest(); - } - var manualDiv; - function manualAdiv() { - if (!manualDiv) { - addStyle(spcss['sp-separator']); - var spage = /*#__PURE__*/function () { - var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(el) { - var value; - return _regeneratorRuntime.wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - if (!doc) { - _context.next = 7; - break; - } - value = Number(el.value); - if (isNaN(value) || value < 1) { - el.value = value = 1; - } - ipagesmode = true; - ipagesnumber = value + paged; - _context.next = 7; - return insertedIntoDoc(); - case 7: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function spage(_x) { - return _ref4.apply(this, arguments); - }; - }(); - var div = createDOM('div', { - attr: { - id: 'sp-sp-manualdiv', - class: 'sp-separator' - }, - children: [createDOM('span', { - attr: { - class: 'sp-md-span' - }, - innerHTML: userLang === 'zh_CN' ? '下' : 'Next' - }), createDOM('input', { - attr: { - type: 'number', - value: 1, - min: 1, - title: userLang === 'zh_CN' ? '输入你想要拼接的页数(必须>=1),然后按回车.' : 'Type number of pageringzing and press enter', - id: 'sp-sp-md-number' - }, - eventListener: [{ - type: 'keyup', - listener: function listener(e) { - if (e.keyCode == 13) { - // 回车 - spage(e.target); - } - } - }] - }), createDOM('span', { - attr: { - class: 'sp-md-span' - }, - innerHTML: userLang === 'zh_CN' ? '页' : 'page' - }), createDOM('img', { - attr: { - id: 'sp-sp-md-imgnext', - src: _sep_icons.next - } - }), createDOM('div', { - attr: { - class: 'sp-someinfo', - id: 'sp-separator-hover' - }, - children: [createDOM('a', { - attr: { - href: 'https://github.com/machsix/Super-preloader', - target: '_blank' - }, - innerHTML: 'Powered by Super-preloader' - })] - })] - }); - manualDiv = div; - document.body.appendChild(div); - div.addEventListener('click', function (e) { - //@ts-ignore - if (e.target.id === 'sp-sp-md-number') return; - spage(document.getElementById('sp-sp-md-number')).then(function () { - manualDiv.remove(); - }); - }, false); - } - addIntoDoc(manualDiv); - //manualDiv.style.display = "block"; - } - function beforeInsertIntoDoc() { - return _beforeInsertIntoDoc.apply(this, arguments); - } - function _beforeInsertIntoDoc() { - _beforeInsertIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() { - return _regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - working = true; - if (!(SSS.a_manualA && !ipagesmode)) { - _context3.next = 6; - break; - } - // 显示手动翻页触发条. - logger.debug("[Super-preloader]", 'Manual stitching'); - manualAdiv(); - _context3.next = 9; - break; - case 6: - // 直接拼接. - logger.debug("[Super-preloader]", 'Direct stitching'); - _context3.next = 9; - return insertedIntoDoc(); - case 9: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return _beforeInsertIntoDoc.apply(this, arguments); - } - var sepStyle; - //looks like goNextImg is useless here. - //const goNextImg = [false]; - var sNumber = prefs.sepStartN; - var _sep_icons = sep_icons; - var curNumber = sNumber; - function createSep(lastUrl, currentUrl, nextUrl) { - var div = document.createElement('div'); - if (SSS.a_separator) { - if (!sepStyle) { - sepStyle = addStyle(spcss['sp-separator']); - if (prefs.customCSS.length > 0) addStyle(prefs.customCSS); - } - div.className = 'sp-separator'; - div.id = 'sp-separator-' + curNumber; - div.addEventListener('click', sepHandler, false); - var pageStr = ''; - if (userLang === 'zh_CN') { - pageStr = '第 ' + curNumber + ' 页' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); - } else { - pageStr = 'Page ' + curNumber + '' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); - } - div.appendChild(createDOM('a', { - attr: { - class: 'sp-sp-nextlink', - target: '_blank', - href: currentUrl, - title: currentUrl - }, - innerHTML: pageStr - })); - div.appendChild(createDOM('img', { - attr: { - src: _sep_icons.top, - class: 'sp-sp-gotop', - alt: userLang === 'zh_CN' ? '去到顶部' : 'To Top', - title: userLang === 'zh_CN' ? '去到顶部' : 'To Top' - } - })); - div.appendChild(createDOM('img', { - attr: { - src: curNumber == sNumber ? _sep_icons.pre_gray : _sep_icons.pre, - class: 'sp-sp-gopre', - title: userLang === 'zh_CN' ? '上滚一页' : 'Scroll up a page' - } - })); - var i_next = createDOM('img', { - attr: { - src: _sep_icons.next_gray, - class: 'sp-sp-gonext', - title: userLang === 'zh_CN' ? '下滚一页' : 'Scroll down a page' - } - }); - - //if (goNextImg.length == 2) { - // goNextImg.shift(); - //} - //goNextImg.push(i_next); - div.appendChild(i_next); - div.appendChild(createDOM('img', { - attr: { - src: _sep_icons.bottom, - class: 'sp-sp-gobottom', - alt: userLang === 'zh_CN' ? '去到底部' : 'To Bottom', - title: userLang === 'zh_CN' ? '去到底部' : 'To Bottom' - } - })); - div.appendChild(createDOM('div', { - attr: { - class: 'sp-someinfo', - id: 'sp-separator-hover' - }, - children: [createDOM('a', { - attr: { - href: 'https://github.com/machsix/Super-preloader', - target: '_blank' - }, - innerHTML: 'Powered by Super-preloader' - })] - })); - curNumber += 1; - } else { - div.style.cssText = '\ + if (SSS.a_sandbox != false) { + //sandbox is readonly property + //i.sandbox = SSS.a_sandbox; + i.setAttribute('sandbox', ''); + } + i.src = link; + if (SSS.a_mutationObserver) { + i.setAttribute('mutationObserver', JSON.stringify(SSS.a_mutationObserver)); + if (SSS.a_mutationObserver.relatedObj) { + insertLoc = getAllElements(SSS.a_mutationObserver.relatedObj); + if (insertLoc.length > 0) { + insertLoc = insertLoc[0]; + } else { + insertLoc = null; + } + } + } + if (SSS.a_iloaded) { + i.addEventListener('load', iframeLoaded, false); + remove.push(function () { + i.removeEventListener('load', iframeLoaded, false); + }); + } else { + var messagehandler = function messagehandler(e) { + if (!messageR && e.data == 'superpreloader-iframe:DOMLoaded') { + messageR = true; + iframeLoaded.call(i, { + currentTarget: i + }); + if (SSS.a_newIframe) { + window.removeEventListener('message', messagehandler, false); + } + } + }; + window.addEventListener('message', messagehandler, false); + remove.push(function () { + window.removeEventListener('message', messagehandler, false); + }); + } + if (insertLoc) { + insertLoc.parentNode.insertBefore(i, insertLoc); + } else { + document.body.appendChild(i); + } + } else { + iframe.src = link; + iframe.contentDocument.location.replace(link); + if (SSS.a_reload) { + iframe.contentWindow.location.reload(); + } + } + } + + /** + * Send XHR request to obtain next page content + * @param {string} link Link of next page + * @returns {void} + */ + function XHRrequest(link) { + var reqConf = { + headers: SSS.a_headers ? SSS.a_headers : { + Referer: cplink + } + }; + got.get(link, reqConf).then( + /** + * Handling of XHR request + * @param {ResponseObject} res Response of got + * @returns {void} + */ + function (res) { + if (res.finalUrl === cplink) { + logger.debug("[Super-preloader]", 'Same final address'); + XHRNotLoaded(res); + } else { + XHRLoaded(res); + logger.debug("[Super-preloader]", 'XHRrequest complete'); + } + }).catch( + /** + * Error handling of XHR request + * @param {ResponseObject} res Response of got + * @returns {void} + */ + function (res) { + XHRNotLoaded(res); + }); + } + var working; + function doRequest() { + working = true; + floatWO.updateColor('loading'); + floatWO.CmodeIcon('show'); + logger.debug("[Super-preloader]", 'Get next page', SSS.a_useiframe ? '(iframe method)' : '(XHR method)', nextlink); + pagedLinks.push(nextlink); + if (SSS.a_useiframe) { + iframeRequest(nextlink); + } else { + if (/(?:http|\/).*/.test(nextlink)) { + // request next page by XHR + XHRrequest(nextlink); + } else { + logger.error("[Super-preloader]", 'Lazyload or Invalid nextLinkElem', nextlinkElem); + } + } + } + var _SSS$a_ipages = _slicedToArray(SSS.a_ipages, 2), + _SSS$a_ipages$ = _SSS$a_ipages[0], + ipagesmode = _SSS$a_ipages$ === void 0 ? false : _SSS$a_ipages$, + _SSS$a_ipages$2 = _SSS$a_ipages[1], + ipagesnumber = _SSS$a_ipages$2 === void 0 ? 2 : _SSS$a_ipages$2; + if (ipagesmode && ipagesnumber === 0) { + ipagesnumber = Number.MAX_SAFE_INTEGER; + } + var scrollDo = nullFn; + var afterInsertDo = nullFn; + if (prefs.Aplus) { + afterInsertDo = doRequest; + doRequest(); + } else { + scrollDo = doRequest; + if (ipagesmode) doRequest(); + } + var manualDiv; + function manualAdiv() { + if (!manualDiv) { + addStyle(spcss['sp-separator']); + var spage = /*#__PURE__*/function () { + var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(el) { + var value; + return _regeneratorRuntime.wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + if (!doc) { + _context.next = 7; + break; + } + value = Number(el.value); + if (isNaN(value) || value < 1) { + el.value = value = 1; + } + ipagesmode = true; + ipagesnumber = value + paged; + _context.next = 7; + return insertedIntoDoc(); + case 7: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function spage(_x) { + return _ref4.apply(this, arguments); + }; + }(); + var div = createDOM('div', { + attr: { + id: 'sp-sp-manualdiv', + class: 'sp-separator' + }, + children: [createDOM('span', { + attr: { + class: 'sp-md-span' + }, + innerHTML: userLang === 'zh_CN' ? '下' : 'Next' + }), createDOM('input', { + attr: { + type: 'number', + value: 1, + min: 1, + title: userLang === 'zh_CN' ? '输入你想要拼接的页数(必须>=1),然后按回车.' : 'Type number of pageringzing and press enter', + id: 'sp-sp-md-number' + }, + eventListener: [{ + type: 'keyup', + listener: function listener(e) { + if (e.keyCode == 13) { + // 回车 + spage(e.target); + } + } + }] + }), createDOM('span', { + attr: { + class: 'sp-md-span' + }, + innerHTML: userLang === 'zh_CN' ? '页' : 'page' + }), createDOM('img', { + attr: { + id: 'sp-sp-md-imgnext', + src: _sep_icons.next + } + }), createDOM('div', { + attr: { + class: 'sp-someinfo', + id: 'sp-separator-hover' + }, + children: [createDOM('a', { + attr: { + href: 'https://github.com/machsix/Super-preloader', + target: '_blank' + }, + innerHTML: 'Powered by Super-preloader' + })] + })] + }); + manualDiv = div; + document.body.appendChild(div); + div.addEventListener('click', function (e) { + //@ts-ignore + if (e.target.id === 'sp-sp-md-number') return; + spage(document.getElementById('sp-sp-md-number')).then(function () { + manualDiv.remove(); + }); + }, false); + } + addIntoDoc(manualDiv); + //manualDiv.style.display = "block"; + } + function beforeInsertIntoDoc() { + return _beforeInsertIntoDoc.apply(this, arguments); + } + function _beforeInsertIntoDoc() { + _beforeInsertIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() { + return _regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + working = true; + if (!(SSS.a_manualA && !ipagesmode)) { + _context3.next = 6; + break; + } + // 显示手动翻页触发条. + logger.debug("[Super-preloader]", 'Manual stitching'); + manualAdiv(); + _context3.next = 9; + break; + case 6: + // 直接拼接. + logger.debug("[Super-preloader]", 'Direct stitching'); + _context3.next = 9; + return insertedIntoDoc(); + case 9: + case "end": + return _context3.stop(); + } + }, _callee3); + })); + return _beforeInsertIntoDoc.apply(this, arguments); + } + var sepStyle; + //looks like goNextImg is useless here. + //const goNextImg = [false]; + var sNumber = prefs.sepStartN; + var _sep_icons = sep_icons; + var curNumber = sNumber; + function createSep(lastUrl, currentUrl, nextUrl) { + var div = document.createElement('div'); + if (SSS.a_separator) { + if (!sepStyle) { + sepStyle = addStyle(spcss['sp-separator']); + if (prefs.customCSS.length > 0) addStyle(prefs.customCSS); + } + div.className = 'sp-separator'; + div.id = 'sp-separator-' + curNumber; + div.addEventListener('click', sepHandler, false); + var pageStr = ''; + if (userLang === 'zh_CN') { + pageStr = '第 ' + curNumber + ' 页' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); + } else { + pageStr = 'Page ' + curNumber + '' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); + } + div.appendChild(createDOM('a', { + attr: { + class: 'sp-sp-nextlink', + target: '_blank', + href: currentUrl, + title: currentUrl + }, + innerHTML: pageStr + })); + div.appendChild(createDOM('img', { + attr: { + src: _sep_icons.top, + class: 'sp-sp-gotop', + alt: userLang === 'zh_CN' ? '去到顶部' : 'To Top', + title: userLang === 'zh_CN' ? '去到顶部' : 'To Top' + } + })); + div.appendChild(createDOM('img', { + attr: { + src: curNumber == sNumber ? _sep_icons.pre_gray : _sep_icons.pre, + class: 'sp-sp-gopre', + title: userLang === 'zh_CN' ? '上滚一页' : 'Scroll up a page' + } + })); + var i_next = createDOM('img', { + attr: { + src: _sep_icons.next_gray, + class: 'sp-sp-gonext', + title: userLang === 'zh_CN' ? '下滚一页' : 'Scroll down a page' + } + }); + + //if (goNextImg.length == 2) { + // goNextImg.shift(); + //} + //goNextImg.push(i_next); + div.appendChild(i_next); + div.appendChild(createDOM('img', { + attr: { + src: _sep_icons.bottom, + class: 'sp-sp-gobottom', + alt: userLang === 'zh_CN' ? '去到底部' : 'To Bottom', + title: userLang === 'zh_CN' ? '去到底部' : 'To Bottom' + } + })); + div.appendChild(createDOM('div', { + attr: { + class: 'sp-someinfo', + id: 'sp-separator-hover' + }, + children: [createDOM('a', { + attr: { + href: 'https://github.com/machsix/Super-preloader', + target: '_blank' + }, + innerHTML: 'Powered by Super-preloader' + })] + })); + curNumber += 1; + } else { + div.style.cssText = '\ height:0!important;\ width:0!important;\ margin:0!important;\ @@ -11249,415 +10777,415 @@ display:block!important;\ visibility:hidden!important;\ '; - } - return div; - } - var paged = 0; - function insertedIntoDoc() { - return _insertedIntoDoc.apply(this, arguments); - } // 返回,剩余高度是总高度的比值. - function _insertedIntoDoc() { - _insertedIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() { - var docTitle, fragment, pageElements, ii, lastUrl, nl, i, pe_x, pe_x_nn, nodes, nodes_x, imgs, arr, sepdiv, toInsert, insertParent, colNodes, _ncol, trs, _ncol2, oldE, oldE_lt, newE, newE_lt, oldE_x, newE_x, ev, delayiframe; - return _regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - if (doc) { - _context4.next = 3; - break; - } - logger.error("[Super-preloader]", 'No document'); - return _context4.abrupt("return"); - case 3: - if (!SSS.a_documentFilter) { - _context4.next = 13; - break; - } - _context4.prev = 4; - _context4.next = 7; - return SSS.a_documentFilter(doc, typeof nextlink === 'string' && nextlink); - case 7: - logger.debug("[Super-preloader]", 'Successfully executeed documentFilter'); - _context4.next = 13; - break; - case 10: - _context4.prev = 10; - _context4.t0 = _context4["catch"](4); - logger.error("[Super-preloader]", 'Error executing documentFilter', _context4.t0, SSS.a_documentFilter.toString()); - case 13: - docTitle = getElementByCSS('title', doc).textContent; - fragment = document.createDocumentFragment(); - pageElements = getAllElements(SSS.a_pageElement, undefined, doc, win, typeof nextlink === 'string' && nextlink); - ii = pageElements.length; - if (!(ii <= 0)) { - _context4.next = 23; - break; - } - logger.error("[Super-preloader]", 'Failed to get the main content of the next page', SSS.a_pageElement); - removeL(); - return _context4.abrupt("return"); - case 23: - logger.debug("[Super-preloader]", 'Successfully got the main content of the next page', pageElements); - case 24: - // 提前查找下一页链接,后面再赋值 - lastUrl = cplink; - cplink = String(nextlink); - /** @type {HTMLElement | String} */ - nl = getElement(SSS.nextLink, undefined, doc, win); - if (nl) { - if (nl === nextlinkElem) { - nextlinkElem = null; - } else { - nextlinkElem = nl; - } - } else { - nextlinkElem = null; - } - nextlink = elemToHref(nextlinkElem); - // 有部分下一页的信息是在script中(比如新加的csdn的规则),因此先查找下一页信息,再执行 removeScripts - removeScripts(doc, SSS.a_scriptFilter); - i = 0; - case 31: - if (!(i < ii)) { - _context4.next = 40; - break; - } - pe_x = pageElements[i]; - pe_x_nn = pe_x.nodeName; - if (!(pe_x_nn == 'BODY' || pe_x_nn == 'HTML' || pe_x_nn == 'SCRIPT')) { - _context4.next = 36; - break; - } - return _context4.abrupt("continue", 37); - case 36: - fragment.appendChild(pe_x); - case 37: - i++; - _context4.next = 31; - break; - case 40: - if (SSS.filter && typeof SSS.filter === 'string') { - // 功能未完善. - nodes = []; - try { - nodes = getAllElements(SSS.filter, fragment); - } catch (e) {} - for (i = nodes.length - 1; i >= 0; i--) { - nodes_x = nodes[i]; - nodes_x.parentNode.removeChild(nodes_x); - } - } - - // lazyImgSrc - if (SSS.lazyImgSrc) { - handleLazyImgSrc(SSS.lazyImgSrc, fragment); - } - //@ts-ignore - if (!window.opera && SSS.a_useiframe && !SSS.a_iloaded) { - imgs = getAllElements('css;img[src]', fragment); // 收集所有图片 - } - - // 处理下一页内容部分链接是否新标签页打开 - if (prefs.forceTargetWindow) { - arr = Array.prototype.slice.call(fragment.querySelectorAll('a[href]:not([href^="mailto:"]):not([href^="javascript:"]):not([href^="#"])')); - arr.forEach(function (elem) { - elem.setAttribute('target', '_blank'); - if (elem.getAttribute('onclick') == 'atarget(this)') { - // 卡饭论坛的控制是否在新标签页打开 - elem.removeAttribute('onclick'); - } - }); - } - - /** @type {HTMLElement} */ - sepdiv = createSep(lastUrl, cplink, nextlink); - toInsert = sepdiv; - if (SSS.a_sepdivDom !== undefined && typeof SSS.a_sepdivDom === 'function') { - toInsert = SSS.a_sepdivDom(doc, sepdiv); - } else if (pageElements[0] && pageElements[0].tagName === 'TR' && pageElements[pageElements.length - 1].tagName === 'TR') { - insertParent = insertPoint.parentNode; - colNodes = getAllElements('child::tr[1]/child::*[self::td or self::th]', insertParent); - if (colNodes.length == 0) { - colNodes = getAllElements('child::*[self::td or self::th]', pageElements[0]); - } - _ncol = [].reduce.call(colNodes, function (acc, cur) { - return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); - }, 0); - toInsert = createDOM('tr', { - children: [createDOM('td', { - attr: { - colspan: _ncol - }, - children: [sepdiv] - })] - }); - } else if (pageElements[0] && pageElements[0].tagName === 'TBODY' && pageElements[pageElements.length - 1].tagName === 'TBODY') { - // https://bbs.kafan.cn/forum-8-1.html - trs = pageElements[pageElements.length - 1].getElementsByTagName('tr'); - if (trs) { - _ncol2 = [].reduce.call(trs[trs.length - 1].children, function (acc, cur) { - return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); - }, 0); - toInsert = createDOM('tbody', { - children: [createDOM('tr', { - children: [createDOM('td', { - attr: { - colspan: _ncol2 - }, - children: [sepdiv] - })] - })] - }); - } else { - logger.warn("[Super-preloader]", 'No trs found'); - } - } - fragment.insertBefore(toInsert, fragment.firstChild); - addIntoDoc(fragment); - - // filter - if (SSS.filter && typeof SSS.filter === 'function') { - try { - SSS.filter(pageElements); - logger.debug("[Super-preloader]", 'Execution of filter(pages) succeeded'); - } catch (e) { - logger.error("[Super-preloader]", 'Error executing filter(pages)', e, SSS.filter.toString()); - } - } - if (imgs) { - // 非opera,在iframeDOM取出数据时需要重载图片. - setTimeout(function () { - var _imgs = imgs; - var i, ii, img; - for (i = 0, ii = _imgs.length; i < ii; i++) { - img = _imgs[i]; - var src = img.src; - img.src = src; - } - }, 99); - } - if (SSS.a_replaceE) { - oldE = getAllElements(SSS.a_replaceE); - oldE_lt = oldE.length; - if (oldE_lt > 0) { - newE = getAllElements(SSS.a_replaceE, undefined, doc, win); - newE_lt = newE.length; - if (newE_lt == oldE_lt) { - // 替换 - - for (i = 0; i < newE_lt; i++) { - oldE_x = oldE[i]; - newE_x = newE[i]; - newE_x = doc.importNode(newE_x, true); - oldE_x.parentNode.replaceChild(newE_x, oldE_x); - } - } - } - } - paged += 1; - if (ipagesmode && paged >= ipagesnumber) { - ipagesmode = false; - } - floatWO.loadedIcon('hide'); - if (manualDiv) { - manualDiv.style.display = 'none'; - } - //if (goNextImg[0]) goNextImg[0].src = _sep_icons.next; - ev = document.createEvent('Event'); - ev.initEvent('Super_preloaderPageLoaded', true, false); - document.dispatchEvent(ev); - if (prefs.enableHistory) { - try { - window.history.pushState(null, docTitle, cplink); - } catch (e) {} - } - if (!(paged >= SSS.a_maxpage)) { - _context4.next = 66; - break; - } - logger.debug("[Super-preloader]", `Reached the set maximum number of page turns ${SSS.a_maxpage}`); - notice('Status:' + 'Reached the set maximum number of page turns:' + SSS.a_maxpage + ''); - removeL(); - return _context4.abrupt("return"); - case 66: - delayiframe = function delayiframe(fn) { - setTimeout(fn, 199); - }; - if (nextlink && !pagedLinks.includes(nextlink)) { - // debug('Found the next page link:', nextlink); - doc = win = null; - if (ipagesmode) { - if (SSS.a_useiframe) { - // 延时点,firefox,太急会卡-_-! - delayiframe(doRequest); - } else { - doRequest(); - } - } else { - working = false; - if (SSS.a_useiframe) { - delayiframe(afterInsertDo); - } else { - afterInsertDo(); - } - } - } else { - logger.error("[Super-preloader]", 'No next page link found.', SSS.nextLink); - removeL(); - } - case 68: - case "end": - return _context4.stop(); - } - }, _callee4, null, [[4, 10]]); - })); - return _insertedIntoDoc.apply(this, arguments); - } - var relatedObj_0, relatedObj_1; - if (SSS.a_relatedObj) { - if (_isArray(SSS.a_relatedObj)) { - relatedObj_0 = SSS.a_relatedObj[0]; - relatedObj_1 = SSS.a_relatedObj[1]; - } else { - relatedObj_0 = SSS.a_pageElement; - relatedObj_1 = 'bottom'; - } - } - function getRemain() { - var _cplink = cplink || undefined; - var scrolly = window.scrollY; - var windowHeight = window.innerHeight; - document.body.clientHeight; - var obj = getLastVisibleElement(relatedObj_0, _cplink); - var scrollH = obj && obj.nodeType == 1 ? obj.getBoundingClientRect()[relatedObj_1] + scrolly : Math.max(document.documentElement.scrollHeight, document.body.scrollHeight); - var exElementHeight = 0; - if (SSS.a_excludeElement != undefined) { - var exElementNode = getLastVisibleElement(SSS.a_excludeElement, _cplink); - if (exElementNode !== null) { - exElementHeight = exElementNode.offsetHeight; - } - } - return (scrollH - scrolly - windowHeight - exElementHeight) / windowHeight; // 剩余高度于页面总高度的比例. - } - var pause = false; - if (prefs.pauseA) { - var Sbutton = ['target', 'shiftKey', 'ctrlKey', 'altKey']; - var ltype = prefs.mouseA ? 'mousedown' : 'dblclick'; - var button_1 = Sbutton[prefs.Pbutton[0]]; - var button_2 = Sbutton[prefs.Pbutton[1]]; - var button_3 = Sbutton[prefs.Pbutton[2]]; - var pauseIt = function pauseIt() { - pause = !pause; - if (prefs.stop_ipage) ipagesmode = false; - if (pause) { - floatWO.updateColor('Apause'); - if (userLang === 'zh_CN') { - notice('状态:' + '自动翻页 暂停.', prefs.disappearDelay); - } else { - notice('Status:' + 'Autopagger Pause.', prefs.disappearDelay); - } - } else { - floatWO.updateColor('autopager'); - floatWO.CmodeIcon('hide'); - if (userLang === 'zh_CN') { - notice('状态:' + '自动翻页 启用.'); - } else { - notice('Status:' + 'Autopagger Enable.'); - } - } - scroll(); - }; - var Sctimeout; - var clearPause = function clearPause() { - clearTimeout(Sctimeout); - document.removeEventListener('mouseup', clearPause, false); - }; - var pausehandler = function pausehandler(e) { - if (!SSS.a_manualA || ipagesmode) { - if (e[button_1] && e[button_2] && e[button_3]) { - if (e.type == 'mousedown') { - document.addEventListener('mouseup', clearPause, false); - Sctimeout = setTimeout(pauseIt, prefs.Atimeout); - } else { - pauseIt(); - } - } - } - }; - document.addEventListener(ltype, pausehandler, false); - remove.push(function () { - document.removeEventListener(ltype, pausehandler, false); - }); - } - function scroll() { - if (!pause && !working && (getRemain() <= SSS.a_remain || ipagesmode)) { - if (doc) { - // 有的话,就插入到文档. - beforeInsertIntoDoc(); - } else { - // 否则就请求文档. - scrollDo(); - } - } - } - var timeout; - function timeoutfn() { - clearTimeout(timeout); - timeout = setTimeout(scroll, 100); - } - window.addEventListener('scroll', timeoutfn, false); - remove.push(function () { - window.removeEventListener('scroll', timeoutfn, false); - }); - autoPO = { - startipages: function () { - var _startipages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(value) { - return _regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - if (!(value > 0)) { - _context2.next = 8; - break; - } - ipagesmode = true; - ipagesnumber = value + paged; - notice('Status:' + 'Current number of pages turned: ' + paged + ',' + 'Continue to turn page ' + ipagesnumber + ''); - if (!SSS.a_manualA) { - _context2.next = 7; - break; - } - _context2.next = 7; - return insertedIntoDoc(); - case 7: - scroll(); - case 8: - case "end": - return _context2.stop(); - } - }, _callee2); - })); - function startipages(_x2) { - return _startipages.apply(this, arguments); - } - return startipages; - }() - }; - } - - /** - * prefetcher - * @param {IRuntimeRule} SSS a rule - * @param {*} floatWO float window object - * @returns {void} - */ - function prefetcher(SSS, floatWO) { - function cContainer() { - var div = document.createElement('div'); - /** @type {HTMLElement} */ - //@ts-ignore - var div2 = div.cloneNode(false); - var hr = document.createElement('hr'); - div.style.cssText = '\ + } + return div; + } + var paged = 0; + function insertedIntoDoc() { + return _insertedIntoDoc.apply(this, arguments); + } // 返回,剩余高度是总高度的比值. + function _insertedIntoDoc() { + _insertedIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() { + var docTitle, fragment, pageElements, ii, lastUrl, nl, i, pe_x, pe_x_nn, nodes, nodes_x, imgs, arr, sepdiv, toInsert, insertParent, colNodes, _ncol, trs, _ncol2, oldE, oldE_lt, newE, newE_lt, oldE_x, newE_x, ev, delayiframe; + return _regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) switch (_context4.prev = _context4.next) { + case 0: + if (doc) { + _context4.next = 3; + break; + } + logger.error("[Super-preloader]", 'No document'); + return _context4.abrupt("return"); + case 3: + if (!SSS.a_documentFilter) { + _context4.next = 13; + break; + } + _context4.prev = 4; + _context4.next = 7; + return SSS.a_documentFilter(doc, typeof nextlink === 'string' && nextlink); + case 7: + logger.debug("[Super-preloader]", 'Successfully executeed documentFilter'); + _context4.next = 13; + break; + case 10: + _context4.prev = 10; + _context4.t0 = _context4["catch"](4); + logger.error("[Super-preloader]", 'Error executing documentFilter', _context4.t0, SSS.a_documentFilter.toString()); + case 13: + docTitle = getElementByCSS('title', doc).textContent; + fragment = document.createDocumentFragment(); + pageElements = getAllElements(SSS.a_pageElement, undefined, doc, win, typeof nextlink === 'string' && nextlink); + ii = pageElements.length; + if (!(ii <= 0)) { + _context4.next = 23; + break; + } + logger.error("[Super-preloader]", 'Failed to get the main content of the next page', SSS.a_pageElement); + removeL(); + return _context4.abrupt("return"); + case 23: + logger.debug("[Super-preloader]", 'Successfully got the main content of the next page', pageElements); + case 24: + // 提前查找下一页链接,后面再赋值 + lastUrl = cplink; + cplink = String(nextlink); + /** @type {HTMLElement | String} */ + nl = getElement(SSS.nextLink, undefined, doc, win); + if (nl) { + if (nl === nextlinkElem) { + nextlinkElem = null; + } else { + nextlinkElem = nl; + } + } else { + nextlinkElem = null; + } + nextlink = elemToHref(nextlinkElem); + // 有部分下一页的信息是在script中(比如新加的csdn的规则),因此先查找下一页信息,再执行 removeScripts + removeScripts(doc, SSS.a_scriptFilter); + i = 0; + case 31: + if (!(i < ii)) { + _context4.next = 40; + break; + } + pe_x = pageElements[i]; + pe_x_nn = pe_x.nodeName; + if (!(pe_x_nn == 'BODY' || pe_x_nn == 'HTML' || pe_x_nn == 'SCRIPT')) { + _context4.next = 36; + break; + } + return _context4.abrupt("continue", 37); + case 36: + fragment.appendChild(pe_x); + case 37: + i++; + _context4.next = 31; + break; + case 40: + if (SSS.filter && typeof SSS.filter === 'string') { + // 功能未完善. + nodes = []; + try { + nodes = getAllElements(SSS.filter, fragment); + } catch (e) {} + for (i = nodes.length - 1; i >= 0; i--) { + nodes_x = nodes[i]; + nodes_x.parentNode.removeChild(nodes_x); + } + } + + // lazyImgSrc + if (SSS.lazyImgSrc) { + handleLazyImgSrc(SSS.lazyImgSrc, fragment); + } + //@ts-ignore + if (!window.opera && SSS.a_useiframe && !SSS.a_iloaded) { + imgs = getAllElements('css;img[src]', fragment); // 收集所有图片 + } + + // 处理下一页内容部分链接是否新标签页打开 + if (prefs.forceTargetWindow) { + arr = Array.prototype.slice.call(fragment.querySelectorAll('a[href]:not([href^="mailto:"]):not([href^="javascript:"]):not([href^="#"])')); + arr.forEach(function (elem) { + elem.setAttribute('target', '_blank'); + if (elem.getAttribute('onclick') == 'atarget(this)') { + // 卡饭论坛的控制是否在新标签页打开 + elem.removeAttribute('onclick'); + } + }); + } + + /** @type {HTMLElement} */ + sepdiv = createSep(lastUrl, cplink, nextlink); + toInsert = sepdiv; + if (SSS.a_sepdivDom !== undefined && typeof SSS.a_sepdivDom === 'function') { + toInsert = SSS.a_sepdivDom(doc, sepdiv); + } else if (pageElements[0] && pageElements[0].tagName === 'TR' && pageElements[pageElements.length - 1].tagName === 'TR') { + insertParent = insertPoint.parentNode; + colNodes = getAllElements('child::tr[1]/child::*[self::td or self::th]', insertParent); + if (colNodes.length == 0) { + colNodes = getAllElements('child::*[self::td or self::th]', pageElements[0]); + } + _ncol = [].reduce.call(colNodes, function (acc, cur) { + return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); + }, 0); + toInsert = createDOM('tr', { + children: [createDOM('td', { + attr: { + colspan: _ncol + }, + children: [sepdiv] + })] + }); + } else if (pageElements[0] && pageElements[0].tagName === 'TBODY' && pageElements[pageElements.length - 1].tagName === 'TBODY') { + // https://bbs.kafan.cn/forum-8-1.html + trs = pageElements[pageElements.length - 1].getElementsByTagName('tr'); + if (trs) { + _ncol2 = [].reduce.call(trs[trs.length - 1].children, function (acc, cur) { + return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); + }, 0); + toInsert = createDOM('tbody', { + children: [createDOM('tr', { + children: [createDOM('td', { + attr: { + colspan: _ncol2 + }, + children: [sepdiv] + })] + })] + }); + } else { + logger.warn("[Super-preloader]", 'No trs found'); + } + } + fragment.insertBefore(toInsert, fragment.firstChild); + addIntoDoc(fragment); + + // filter + if (SSS.filter && typeof SSS.filter === 'function') { + try { + SSS.filter(pageElements); + logger.debug("[Super-preloader]", 'Execution of filter(pages) succeeded'); + } catch (e) { + logger.error("[Super-preloader]", 'Error executing filter(pages)', e, SSS.filter.toString()); + } + } + if (imgs) { + // 非opera,在iframeDOM取出数据时需要重载图片. + setTimeout(function () { + var _imgs = imgs; + var i, ii, img; + for (i = 0, ii = _imgs.length; i < ii; i++) { + img = _imgs[i]; + var src = img.src; + img.src = src; + } + }, 99); + } + if (SSS.a_replaceE) { + oldE = getAllElements(SSS.a_replaceE); + oldE_lt = oldE.length; + if (oldE_lt > 0) { + newE = getAllElements(SSS.a_replaceE, undefined, doc, win); + newE_lt = newE.length; + if (newE_lt == oldE_lt) { + // 替换 + + for (i = 0; i < newE_lt; i++) { + oldE_x = oldE[i]; + newE_x = newE[i]; + newE_x = doc.importNode(newE_x, true); + oldE_x.parentNode.replaceChild(newE_x, oldE_x); + } + } + } + } + paged += 1; + if (ipagesmode && paged >= ipagesnumber) { + ipagesmode = false; + } + floatWO.loadedIcon('hide'); + if (manualDiv) { + manualDiv.style.display = 'none'; + } + //if (goNextImg[0]) goNextImg[0].src = _sep_icons.next; + ev = document.createEvent('Event'); + ev.initEvent('Super_preloaderPageLoaded', true, false); + document.dispatchEvent(ev); + if (prefs.enableHistory) { + try { + window.history.pushState(null, docTitle, cplink); + } catch (e) {} + } + if (!(paged >= SSS.a_maxpage)) { + _context4.next = 66; + break; + } + logger.debug("[Super-preloader]", `Reached the set maximum number of page turns ${SSS.a_maxpage}`); + notice('Status:' + 'Reached the set maximum number of page turns:' + SSS.a_maxpage + ''); + removeL(); + return _context4.abrupt("return"); + case 66: + delayiframe = function delayiframe(fn) { + setTimeout(fn, 199); + }; + if (nextlink && !pagedLinks.includes(nextlink)) { + // debug('Found the next page link:', nextlink); + doc = win = null; + if (ipagesmode) { + if (SSS.a_useiframe) { + // 延时点,firefox,太急会卡-_-! + delayiframe(doRequest); + } else { + doRequest(); + } + } else { + working = false; + if (SSS.a_useiframe) { + delayiframe(afterInsertDo); + } else { + afterInsertDo(); + } + } + } else { + logger.error("[Super-preloader]", 'No next page link found.', SSS.nextLink); + removeL(); + } + case 68: + case "end": + return _context4.stop(); + } + }, _callee4, null, [[4, 10]]); + })); + return _insertedIntoDoc.apply(this, arguments); + } + var relatedObj_0, relatedObj_1; + if (SSS.a_relatedObj) { + if (_isArray(SSS.a_relatedObj)) { + relatedObj_0 = SSS.a_relatedObj[0]; + relatedObj_1 = SSS.a_relatedObj[1]; + } else { + relatedObj_0 = SSS.a_pageElement; + relatedObj_1 = 'bottom'; + } + } + function getRemain() { + var _cplink = cplink || undefined; + var scrolly = window.scrollY; + var windowHeight = window.innerHeight; + document.body.clientHeight; + var obj = getLastVisibleElement(relatedObj_0, _cplink); + var scrollH = obj && obj.nodeType == 1 ? obj.getBoundingClientRect()[relatedObj_1] + scrolly : Math.max(document.documentElement.scrollHeight, document.body.scrollHeight); + var exElementHeight = 0; + if (SSS.a_excludeElement != undefined) { + var exElementNode = getLastVisibleElement(SSS.a_excludeElement, _cplink); + if (exElementNode !== null) { + exElementHeight = exElementNode.offsetHeight; + } + } + return (scrollH - scrolly - windowHeight - exElementHeight) / windowHeight; // 剩余高度于页面总高度的比例. + } + var pause = false; + if (prefs.pauseA) { + var Sbutton = ['target', 'shiftKey', 'ctrlKey', 'altKey']; + var ltype = prefs.mouseA ? 'mousedown' : 'dblclick'; + var button_1 = Sbutton[prefs.Pbutton[0]]; + var button_2 = Sbutton[prefs.Pbutton[1]]; + var button_3 = Sbutton[prefs.Pbutton[2]]; + var pauseIt = function pauseIt() { + pause = !pause; + if (prefs.stop_ipage) ipagesmode = false; + if (pause) { + floatWO.updateColor('Apause'); + if (userLang === 'zh_CN') { + notice('状态:' + '自动翻页 暂停.', prefs.disappearDelay); + } else { + notice('Status:' + 'Autopagger Pause.', prefs.disappearDelay); + } + } else { + floatWO.updateColor('autopager'); + floatWO.CmodeIcon('hide'); + if (userLang === 'zh_CN') { + notice('状态:' + '自动翻页 启用.'); + } else { + notice('Status:' + 'Autopagger Enable.'); + } + } + scroll(); + }; + var Sctimeout; + var clearPause = function clearPause() { + clearTimeout(Sctimeout); + document.removeEventListener('mouseup', clearPause, false); + }; + var pausehandler = function pausehandler(e) { + if (!SSS.a_manualA || ipagesmode) { + if (e[button_1] && e[button_2] && e[button_3]) { + if (e.type == 'mousedown') { + document.addEventListener('mouseup', clearPause, false); + Sctimeout = setTimeout(pauseIt, prefs.Atimeout); + } else { + pauseIt(); + } + } + } + }; + document.addEventListener(ltype, pausehandler, false); + remove.push(function () { + document.removeEventListener(ltype, pausehandler, false); + }); + } + function scroll() { + if (!pause && !working && (getRemain() <= SSS.a_remain || ipagesmode)) { + if (doc) { + // 有的话,就插入到文档. + beforeInsertIntoDoc(); + } else { + // 否则就请求文档. + scrollDo(); + } + } + } + var timeout; + function timeoutfn() { + clearTimeout(timeout); + timeout = setTimeout(scroll, 100); + } + window.addEventListener('scroll', timeoutfn, false); + remove.push(function () { + window.removeEventListener('scroll', timeoutfn, false); + }); + autoPO = { + startipages: function () { + var _startipages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(value) { + return _regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + if (!(value > 0)) { + _context2.next = 8; + break; + } + ipagesmode = true; + ipagesnumber = value + paged; + notice('Status:' + 'Current number of pages turned: ' + paged + ',' + 'Continue to turn page ' + ipagesnumber + ''); + if (!SSS.a_manualA) { + _context2.next = 7; + break; + } + _context2.next = 7; + return insertedIntoDoc(); + case 7: + scroll(); + case 8: + case "end": + return _context2.stop(); + } + }, _callee2); + })); + function startipages(_x2) { + return _startipages.apply(this, arguments); + } + return startipages; + }() + }; + } + + /** + * prefetcher + * @param {IRuntimeRule} SSS a rule + * @param {*} floatWO float window object + * @returns {void} + */ + function prefetcher(SSS, floatWO) { + function cContainer() { + var div = document.createElement('div'); + /** @type {HTMLElement} */ + //@ts-ignore + var div2 = div.cloneNode(false); + var hr = document.createElement('hr'); + div.style.cssText = '\ margin:3px!important;\ padding:5px!important;\ border-radius:8px!important;\ @@ -11668,8 +11196,8 @@ float:none!important;\ display:none!important;\ '; - div.title = 'Prefetched content'; - div2.style.cssText = '\ + div.title = 'Prefetched content'; + div2.style.cssText = '\ text-align:left!important;\ color:red!important;\ font-size:13px!important;\ @@ -11677,1163 +11205,1163 @@ display:block!important;\ position:static!important;\ '; - hr.style.cssText = '\ + hr.style.cssText = '\ display:block!important;\ border:1px inset #000!important;\ '; - div.appendChild(div2); - div.appendChild(hr); - document.body.appendChild(div); - return { - div: div, - div2: div2 - }; - } - floatWO.updateColor('prefetcher'); - floatWO.updateColor('loading'); - floatWO.CmodeIcon('show'); - if (SSS.useiframe) { - var iframe = document.createElement('iframe'); - iframe.name = 'superpreloader-iframe'; - iframe.src = String(nextlink); - iframe.width = '100%'; - iframe.height = '0'; - iframe.frameBorder = '0'; - iframe.style.cssText = '\ + div.appendChild(div2); + div.appendChild(hr); + document.body.appendChild(div); + return { + div: div, + div2: div2 + }; + } + floatWO.updateColor('prefetcher'); + floatWO.updateColor('loading'); + floatWO.CmodeIcon('show'); + if (SSS.useiframe) { + var iframe = document.createElement('iframe'); + iframe.name = 'superpreloader-iframe'; + iframe.src = String(nextlink); + iframe.width = '100%'; + iframe.height = '0'; + iframe.frameBorder = '0'; + iframe.style.cssText = '\ margin:0!important;\ padding:0!important;\ '; - iframe.addEventListener('load', function (e) { - //@ts-ignore - var body = e.currentTarget.contentDocument.body; - if (body && body.firstChild) { - floatWO.updateColor('prefetcher'); - floatWO.CmodeIcon('hide'); - floatWO.loadedIcon('show'); - //@ts-ignore - e.currentTarget.removeEventListener('load', arguments.callee, false); - if (SSS.lazyImgSrc) { - handleLazyImgSrc(SSS.lazyImgSrc, body); - } - } - }, false); - if (SSS.viewcontent) { - var container = cContainer(); - container.div.style.display = 'block'; - container.div2.innerHTML = 'iframe full prefetch: ' + '' + 'Prefetch URL: ' + '' + nextlink + ''; - iframe.height = '300px'; - container.div.appendChild(iframe); - } else { - document.body.appendChild(iframe); - } - } else { - var reqConf = { - headers: SSS.a_headers ? SSS.a_headers : { - Referer: cplink - } - }; - got.get(nextlink, reqConf).then(function (res) { - var doc = createDocumentByString(res.data); - if (!doc) { - logger.error("[Super-preloader]", 'Document object creation failed!'); - return; - } - if (SSS.lazyImgSrc) { - handleLazyImgSrc(SSS.lazyImgSrc, doc); - } - var images = doc.images; - var isl = images.length; - var img; - var iarray = []; - var i; - var existSRC = {}; - var isrc; - for (i = isl - 1; i >= 0; i--) { - isrc = images[i].getAttribute('src'); - if (!isrc || existSRC[isrc]) { - continue; - } else { - existSRC[isrc] = true; - } - img = document.createElement('img'); - img.src = isrc; - iarray.push(img); - } - var container = cContainer(); - var div = container.div; - i = iarray.length; - container.div2.innerHTML = 'Number of prefetched pictures: ' + '' + i + '' + '' + 'Prefetch URL:' + '' + nextlink + ''; - logger.info("[Super-preloader]", 'Number of prefetched pictures: ' + i + 'Prefetch URL: ' + nextlink); - for (i -= 1; i >= 0; i--) { - div.appendChild(iarray[i]); - } - if (SSS.viewcontent) { - container.div.style.display = 'block'; - } - floatWO.updateColor('prefetcher'); - floatWO.loadedIcon('show'); - floatWO.CmodeIcon('hide'); - }); - } - } - - // 执行开始../////////////////// - - // 分析黑名单 - var blackList_re = new RegExp(blackList.map(function (x) { - if (x.substring(0, 3).toLowerCase() == 're:') { - return x.substring(4); - } else { - return wildcardToRegExpStr(x); - } - }).join('|')); - if (blackList_re.test(url)) { - logger.debug("[Super-preloader]", 'Matched blacklist, JS execution stopped'); - return; - } - - // 是否在frame上加载.. - if (prefs.DisableI && window.self != window.parent) { - var isReturn = !_find(DIExclude, function (x) { - //@ts-ignore - return x[1] && x[2].test(url); - }); - if (isReturn) { - logger.debug("[Super-preloader]", `The page with url:${url} is not a top-level window, JS execution stopped`); - return; - } - } - logger.debug("[Super-preloader]", `Page url is: ${url}, JS loaded successfully`); - - // 第一阶段..分析高级模式.. - if (prefs.disableBuiltinRules) { - logger.warn("[Super-preloader]", 'Builtin js rules are disabled'); - } else { - SSRules = SSRules.concat(jsSiteRule); - } - if (prefs.disableBuiltinSubscriptionRules) { - logger.warn("[Super-preloader]", 'Remote json rules are disabled'); - } else { - SSRules = SSRules.concat(jsonRule); - } - if (!prefs.disableBuiltinRules) { - SSRules = SSRules.concat(jsGeneralRule); - } - if (!prefs.numOfRule || prefs.numOfRule != SSRules.length) { - prefs.numOfRule = SSRules.length; - GM.setValue('prefs', prefs); - } - - // 重要的变量两枚. - /** @type {Array} */ - var pagedLinks = [document.location.href]; - /** @type {HTMLElement|string} */ - var nextlinkElem; - /** @type {string} */ - var nextlink; - /** @type {HTMLElement|string} */ - var prelink; - - //= ============== - - /**@type {IRuntimeRule} */ - var SSS = {}; - var findCurSiteInfo = /*#__PURE__*/function () { - var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() { - var SIIAD, Rurl, ii, _loop, _ret, i, FA; - return _regeneratorRuntime.wrap(function _callee5$(_context6) { - while (1) switch (_context6.prev = _context6.next) { - case 0: - SIIAD = SITEINFO_D.autopager; - ii = SSRules.length; - if (userLang === 'zh_CN') { - logger.debug("[Super-preloader]", `高级规则数目:${ii}`); - logger.debug("[Super-preloader]", `Number of rules > ${ii - jsonRule.length} from other sources, such as: wedata.net`); - } else { - logger.debug("[Super-preloader]", `Number of advanced rules:${ii}`); - } - _loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() { - var SII, SIIA, documentFilter, pageElement; - return _regeneratorRuntime.wrap(function _loop$(_context5) { - while (1) switch (_context5.prev = _context5.next) { - case 0: - SII = SSRules[i]; - if (!(SII.autopager && SII.autopager.ip)) { - _context5.next = 4; - break; - } - if (!(SII.autopager.ip.indexOf(serverIp) < 0)) { - _context5.next = 4; - break; - } - return _context5.abrupt("return", 0); - case 4: - Rurl = toRE(SII.url); - if (!Rurl.test(url)) { - _context5.next = 75; - break; - } - if (userLang === 'zh_CN') { - logger.debug("[Super-preloader]", 'Find current site rules:', SII); - logger.debug("[Super-preloader]", `规则ID: ${i + 1}`); - } else { - logger.debug("[Super-preloader]", 'Find rule for this website:', SII); - logger.debug("[Super-preloader]", `Rule ID: ${i + 1}`); - } - - // 运行规则的 startFilter - if (!(SII.autopager && SII.autopager.startFilter)) { - _context5.next = 17; - break; - } - _context5.prev = 8; - _context5.next = 11; - return SII.autopager.startFilter(document, window); - case 11: - logger.debug("[Super-preloader]", 'startFilter executed successfully'); - _context5.next = 17; - break; - case 14: - _context5.prev = 14; - _context5.t0 = _context5["catch"](8); - logger.error("[Super-preloader]", 'Error executing startFilter', _context5.t0); - case 17: - if (!(SII.nextLink === 'null;')) { - _context5.next = 21; - break; - } - logger.debug("[Super-preloader]", 'Find the rule for a site without nextpage', SII); - SSS.hasRule = false; - return _context5.abrupt("return", 1); - case 21: - nextlinkElem = getElement(SII.nextLink || 'auto;'); - if (nextlinkElem) { - _context5.next = 25; - break; - } - logger.warn("[Super-preloader]", 'Could not find the next page link, continue searching for other rules, skiping rule:', SII); - return _context5.abrupt("return", 0); - case 25: - // extract next page link from an a link - nextlink = getFullHref(nextlinkElem); - if (!(nextlink === document.location.href)) { - _context5.next = 29; - break; - } - nextlinkElem = null; - return _context5.abrupt("return", 0); - case 29: - if (SII.preLink && SII.preLink != 'auto;') { - // 如果设定了具体的preLink - prelink = getElement(SII.preLink); - } else { - if (prefs.autoGetPreLink) { - prelink = getElement('auto;'); - } - } - SSS = {}; - SSS.Rurl = String(Rurl); - SSS.nextLink = SII.nextLink || 'auto;'; - SSS.viewcontent = SII.viewcontent; - SSS.enable = SII.enable === undefined ? SITEINFO_D.enable : SII.enable; - SSS.useiframe = SII.useiframe === undefined ? SITEINFO_D.useiframe : SII.useiframe; - if (SII.pageElement) { - // 如果是Oautopager的规则.. - if (typeof SII.autopager !== 'object') SII.autopager = {}; - SII.autopager.pageElement = SII.pageElement; - if (!SII.autopager.useiframe) SII.autopager.useiframe = SII.useiframe; - if (SII.preLink) SII.autopager.preLink = SII.preLink; - if (SII.insertBefore) SII.autopager.HT_insert = [SII.insertBefore, 1]; - } - - // 自动翻页设置. - SIIA = SII.autopager; - if (!SIIA) { - _context5.next = 68; - break; - } - SSS.a_pageElement = SIIA.pageElement; - if (SSS.a_pageElement) { - _context5.next = 42; - break; - } - return _context5.abrupt("return", 1); - case 42: - SSS.a_manualA = SIIA.manualA === undefined ? SIIAD.manualA : SIIA.manualA; - SSS.a_enable = SIIA.enable === undefined ? SIIAD.enable : SIIA.enable; - SSS.a_useiframe = SIIA.useiframe === undefined ? SIIAD.useiframe : SIIA.useiframe; - SSS.a_mutationObserver = SSS.a_useiframe ? SIIA.mutationObserver === undefined ? null : SIIA.mutationObserver : null; - SSS.a_newIframe = SIIA.newIframe === undefined ? SIIAD.newIframe : SIIA.newIframe; - SSS.a_iloaded = SIIA.iloaded === undefined ? SIIAD.iloaded : SIIA.iloaded; - SSS.a_itimeout = SIIA.itimeout === undefined ? SIIAD.itimeout : SIIA.itimeout; - SSS.a_remain = SIIA.remain === undefined ? SIIAD.remain : SIIA.remain; - SSS.a_maxpage = SIIA.maxpage === undefined ? SIIAD.maxpage : SIIA.maxpage; - SSS.a_separator = SIIA.separator === undefined ? SIIAD.separator : SIIA.separator; - SSS.a_sepdivDom = SIIA.sepdivDom === undefined ? undefined : SIIA.sepdivDom; - SSS.a_separatorReal = SIIA.separatorReal === undefined ? SIIAD.separatorReal : SIIA.separatorReal; - SSS.a_replaceE = SIIA.replaceE; - SSS.a_HT_insert = SIIA.HT_insert; - SSS.a_relatedObj = SIIA.relatedObj === undefined ? SIIAD.relatedObj : SIIA.relatedObj; - SSS.a_ipages = SIIA.ipages === undefined ? SIIAD.ipages : SIIA.ipages; - - // new - SSS.filter = SII.filter || SIIA.filter; // 新增了函数的形式,原来的功能是移除 pageElement - documentFilter = SII.documentFilter || SIIA.documentFilter; - if (documentFilter === 'startFilter') { - SSS.a_documentFilter = function (doc) { - return SII.autopager.startFilter(doc); - }; - } else if (typeof documentFilter === 'function') { - SSS.a_documentFilter = documentFilter; - } else { - SSS.a_documentFilter = undefined; - } - SSS.a_scriptFilter = SIIA.scriptFilter === undefined ? '' : SIIA.scriptFilter; - SSS.a_stylish = SII.stylish || SIIA.stylish; - SSS.lazyImgSrc = SIIA.lazyImgSrc; - SSS.a_headers = SIIA.headers === undefined ? undefined : SIIA.headers; // custom header for XHRLoaded - SSS.a_reload = SIIA.reload === undefined ? SIIAD.reload : SIIA.reload; // force reload iframe - SSS.a_sandbox = SIIA.sandbox === undefined ? SIIAD.sandbox : SIIA.sandbox; - - // 在翻页的时候会有一些其他元素占据了页面的高度,导致翻页不精准。 - // 比如正文下面的推荐文章列表(占据超过整个页面10%就很难受) - SSS.a_excludeElement = SIIA.excludeElement; - case 68: - // 检验是否存在内容 - pageElement = getElement(SSS.a_pageElement); - if (!(!pageElement || Array.isArray(pageElement) && pageElement.length === 0)) { - _context5.next = 73; - break; - } - nextlinkElem = null; - logger.error("[Super-preloader]", 'Could not find content, skiping rule:', SII, 'Continue to search for other rules.'); - return _context5.abrupt("return", 0); - case 73: - SSS.hasRule = true; - return _context5.abrupt("return", 1); - case 75: - case "end": - return _context5.stop(); - } - }, _loop, null, [[8, 14]]); - }); - i = 0; - case 5: - if (!(i < ii)) { - _context6.next = 15; - break; - } - return _context6.delegateYield(_loop(), "t0", 7); - case 7: - _ret = _context6.t0; - if (!(_ret === 0)) { - _context6.next = 10; - break; - } - return _context6.abrupt("continue", 12); - case 10: - if (!(_ret === 1)) { - _context6.next = 12; - break; - } - return _context6.abrupt("break", 15); - case 12: - i++; - _context6.next = 5; - break; - case 15: - if (!SSS.hasRule) { - // 自动搜索. - if (!autoMatch.keyMatch) { - logger.warn("[Super-preloader]", 'Auto match is disabled'); - } else { - logger.warn("[Super-preloader]", 'No rules are found. Auto match starts'); - nextlinkElem = autoGetLink(); - if (nextlinkElem) { - // 强制模式. - FA = autoMatch.FA; - SSS.Rurl = window.localStorage ? 'am:' + (url.match(/^https?:\/\/[^:]*\//i) || [])[0] : 'am:automatch'; - SSS.enable = true; - SSS.nextLink = 'auto;'; - SSS.viewcontent = autoMatch.viewcontent; - SSS.useiframe = autoMatch.useiframe || SITEINFO_D.autopager.useiframe; - SSS.a_force = true; - SSS.a_manualA = FA.manualA; - SSS.a_enable = FA.enable || SITEINFO_D.autopager.force_enable; // Force join is enabled when this becomes true - SSS.a_useiframe = FA.useiframe || SITEINFO_D.useiframe; - SSS.a_iloaded = FA.iloaded; - SSS.a_itimeout = FA.itimeout; - SSS.a_remain = FA.remain; - SSS.a_maxpage = FA.maxpage; - SSS.a_separator = FA.separator; - SSS.a_ipages = FA.ipages; - } - } - } - - // 如果规则没 lazyImgSrc,设置默认值 - if (!SSS.lazyImgSrc) { - SSS.lazyImgSrc = prefs.lazyImgSrc; - } - logger.debug("[Super-preloader]", `Total time spent on searching for advanced rules and automatic matching: ${new Date().getTime() - startTime.getTime()}ms`); - case 18: - case "end": - return _context6.stop(); - } - }, _callee5); - })); - return function findCurSiteInfo() { - return _ref5.apply(this, arguments); - }; - }(); - findCurSiteInfo().then(function () { - // 上下页都没有找到啊 - if (!nextlinkElem && !prelink) { - logger.warn("[Super-preloader]", `No related links found, JS execution stopped. Total time spent: ${new Date().getTime() - startTime.getTime()}ms`); - return; - } else if (!nextlink) { - logger.error("[Super-preloader]", 'The link to the next page does not exist, JS cannot continue.'); - logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); - return; - } else { - logger.debug("[Super-preloader]", 'Previous link element:', prelink); - logger.debug("[Super-preloader]", 'Next link element:', nextlinkElem); - nextlink = elemToHref(nextlinkElem); - logger.debug("[Super-preloader]", 'Next link:', nextlink); - //@ts-ignore - prelink = prelink ? prelink.href || prelink : undefined; - } - var keyBinding = { - go: function go() { - if (typeof nextlink === 'string') window.location.href = nextlink; - }, - back: function back() { - //fixme - if (!prelink) getElement('auto;'); - if (typeof prelink === 'string') window.location.href = prelink; - }, - register: function register( /**@type {IPrefs} */prefs) { - var _this = this; - if (prefs.arrowKeyPage) { - logger.debug("[Super-preloader]", 'Adding left and right arrow keys to autopager listener.'); - document.addEventListener('keyup', function (e) { - //@ts-ignore - var tarNN = e.target.nodeName; - if (tarNN != 'BODY' && tarNN != 'HTML') return; - - // check is a combo pressed - if (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) { - return; - } - switch (e.keyCode) { - case 37: - _this.back(); - break; - case 39: - _this.go(); - break; - } - }, false); - - // 监听下一页事件. - logger.debug("[Super-preloader]", '添加鼠标手势翻页监听'); - document.addEventListener('superPreloader.go', function () { - _this.go(); - }, false); - - // 监听下一页事件. - document.addEventListener('superPreloader.back', function () { - _this.back(); - }, false); - } - } - }; - keyBinding.register(prefs); - loadLocalSetting(SSS); - if (!SSS.enable) { - logger.warn("[Super-preloader]", 'This rule is disabled, script execution is stopped'); - logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); - return; - } - if (!SSS.hasRule) { - SSS.a_force = true; - } - if (SSS.a_force) { - SSS.a_pageElement = '//body/*'; - SSS.a_HT_insert = undefined; - SSS.a_relatedObj = undefined; - } - if (prefs.floatWindow) { - logger.debug("[Super-preloader]", 'Creating a floating window'); - floatWindow(SSS); - var floatWindowWidth = getFloatWindowWith(); - displace(document.getElementById('sp-fw-container'), { - handle: document.getElementById('sp-fw-rect'), - customMove: function customMove(el, x, y) { - delete el.style.left; - delete el.style.bottom; - var right = document.body.clientWidth - floatWindowWidth - x; - if (right < 0) { - right = 0; - } else if (right > window.innerWidth - floatWindowWidth) { - right = window.innerWidth - floatWindowWidth; - } - var top = y; - if (top > window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight) { - top = window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight; - } else if (top < 0) { - top = 0; - } - el.style.right = `${right}px`; - el.style.top = `${top}px`; - }, - onMouseUp: function onMouseUp(el) { - prefs.FW_offset[0] = parseInt(el.style.top.replace('px', ''), 10); - prefs.FW_offset[1] = parseInt(el.style.right.replace('px', ''), 10); - prefs.FW_position = 2; - GM.setValue('prefs', prefs); - } - }); - document.getElementById('sp-fw-container').style.position = 'fixed'; - } - logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); - - // 预读或者翻页. - if (SSS.a_enable) { - logger.debug("[Super-preloader]", 'Initializing, autopager mode.'); - autopager(SSS, floatWO); - } else { - logger.debug("[Super-preloader]", 'Initializing, prefetch mode.'); - prefetcher(SSS, floatWO); - } - }); - - // 获取单个元素,混合 - /** - * - * @param {string|Function|Array|IHrefIncObject} selector selector - * @param {HTMLElement|Document=} contextNode element - * @param {Document=} doc document - * @param {Window=} win window - * @returns {HTMLElement} element - */ - function getElement(selector, contextNode, doc, win) { - var _cplink = cplink; - var ret; - if (!selector) return ret; - doc = doc || document; - win = win || window; - contextNode = contextNode || doc; - if (typeof selector === 'string') { - if (selector.search(/^css;/i) === 0) { - ret = getElementByCSS(selector.slice(4), contextNode); - } else if (selector.toLowerCase() == 'auto;') { - ret = autoGetLink(doc); - } else { - ret = getElementByXpath(selector, contextNode, doc); - } - } else if (typeof selector === 'function') { - ret = selector(doc, win, _cplink); - } else if (selector instanceof Array) { - for (var i = 0, l = selector.length; i < l; i++) { - ret = getElement(selector[i], contextNode, doc, win); - if (ret) { - break; - } - } - } else { - ret = hrefInc(selector, doc, win, _cplink); - } - return ret; - } - var docChecked; - /** - * - * @param {Document=} doc document - * @param {Window=} win window - * @returns {HTMLElement} a - */ - function autoGetLink(doc, win) { - if (!autoMatch.keyMatch) return; - //@ts-ignore - if (!parseKWRE.done) { - parseKWRE(); - //@ts-ignore - parseKWRE.done = true; - } - var startTime = new Date(); - doc = doc || document; - if (doc == document) { - // 当前文档,只检查一次. - if (docChecked) { - // @ts-ignore - return nextlink; - } - docChecked = true; - } - var _prePageKey = prePageKey; - var _nextPageKey = nextPageKey; - var _nPKL = nextPageKey.length; - var _pPKL = prePageKey.length; - var _getFullHref = getFullHref; - var _getAllElementsByXpath = getAllElementsByXpath; - var _Number = Number; - var _domain_port = domain_port; - var alllinks = doc.links; - var alllinksl = alllinks.length; - var curLHref = cplink; - var _nextlink; - var _prelink; - //@ts-ignore - if (!autoGetLink.checked) { - // 第一次检查 - _nextlink = nextlink; - _prelink = prelink; - } else { - _prelink = true; - } - var DCEnable = autoMatch.digitalCheck; - var DCRE = /^\s*\D{0,1}(\d+)\D{0,1}\s*$/; - var i, a, atext, numtext; - var aP; - var initSD; - var searchD = 1; - var preS1; - var preS2; - var searchedD; - var pSNText; - var preSS; - var nodeType; - var nextS1, nextS2, nSNText, nextSS; - var aimgs, j, jj, aimg_x, xbreak, k, keytext; - function finalCheck(a, type) { - var ahref = a.getAttribute('href'); // 在chrome上当是非当前页面文档对象的时候直接用a.href访问,不返回href - if (ahref == '#') { - return null; - } - ahref = _getFullHref(ahref); // 从相对路径获取完全的href; - - // 3个条件:http协议链接,非跳到当前页面的链接,非跨域 - if (/^https?:/i.test(ahref) && ahref.replace(/#.*$/, '') != curLHref && ahref.match(/https?:\/\/([^\/]+)/)[1] == _domain_port) { - logger.debug("[Super-preloader]", type == 'pre' ? 'previous' : 'next' + 'match:', atext); - return a; // 返回对象A - // return ahref; - } - } - logger.debug("[Super-preloader]", `Number of full document links:${alllinksl}`); - for (i = 0; i < alllinksl; i++) { - if (_nextlink && _prelink) break; - a = alllinks[i]; - if (!a) continue; // undefined跳过 - // links集合返回的本来就是包含href的a元素..所以不用检测 - // if(!a.hasAttribute("href"))continue; - atext = a.textContent; - if (atext) { - if (DCEnable) { - numtext = atext.match(DCRE); - if (numtext) { - // 是不是纯数字 - // debug(numtext); - numtext = numtext[1]; - aP = a; - initSD = 0; - if (!_nextlink) { - preS1 = a.previousSibling; - preS2 = a.previousElementSibling; - while (!(preS1 || preS2) && initSD < searchD) { - aP = aP.parentNode; - if (aP) { - preS1 = aP.previousSibling; - //@ts-ignore - preS2 = aP.previousElementSibling; - } - initSD++; - } - searchedD = initSD > 0; - if (preS1 || preS2) { - pSNText = preS1 ? preS1.textContent.match(DCRE) : ''; - if (pSNText) { - preSS = preS1; - } else { - pSNText = preS2 ? preS2.textContent.match(DCRE) : ''; - preSS = preS2; - } - if (pSNText) { - pSNText = pSNText[1]; - if (_Number(pSNText) == _Number(numtext) - 1) { - nodeType = preSS.nodeType; - if (nodeType == 3 || nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', preSS, doc).length === 0 : !preSS.hasAttribute('href') || _getFullHref(preSS.getAttribute('href')) == curLHref)) { - _nextlink = finalCheck(a, 'next'); - } - continue; - } - } - } - } - if (!_prelink) { - nextS1 = a.nextSibling; - nextS2 = a.nextElementSibling; - while (!(nextS1 || nextS2) && initSD < searchD) { - aP = aP.parentNode; - if (aP) { - nextS1 = a.nextSibling; - nextS2 = a.nextElementSibling; - } - initSD++; - } - searchedD = initSD > 0; - if (nextS1 || nextS2) { - nSNText = nextS1 ? nextS1.textContent.match(DCRE) : ''; - if (nSNText) { - nextSS = nextS1; - } else { - nSNText = nextS2 ? nextS2.textContent.match(DCRE) : ''; - nextSS = nextS2; - } - if (nSNText) { - nSNText = nSNText[1]; - if (_Number(nSNText) == _Number(numtext) + 1) { - nodeType = nextSS.nodeType; - if (nodeType == 3 || - // @ts-ignore - nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', nextSS, doc).length === 0 : !nextSS.hasAttribute('href') || _getFullHref(nextSS.getAttribute('href')) == curLHref)) { - _prelink = finalCheck(a, 'pre'); - } - } - } - } - } - continue; - } - } - } else { - atext = a.title; - } - if (!atext) { - aimgs = a.getElementsByTagName('img'); - for (j = 0, jj = aimgs.length; j < jj; j++) { - aimg_x = aimgs[j]; - atext = aimg_x.alt || aimg_x.title; - if (atext) break; - } - } - if (!atext) continue; - if (!_nextlink) { - xbreak = false; - for (k = 0; k < _nPKL; k++) { - keytext = _nextPageKey[k]; - //@ts-ignore - if (!keytext.test(atext)) continue; - _nextlink = finalCheck(a, 'next'); - xbreak = true; - break; - } - if (xbreak || _nextlink) continue; - } - if (!_prelink) { - for (k = 0; k < _pPKL; k++) { - keytext = _prePageKey[k]; - //@ts-ignore - if (!keytext.test(atext)) continue; - _prelink = finalCheck(a, 'pre'); - break; - } - } - } - logger.debug("[Super-preloader]", `Time to search ${i} links:${new Date().getTime() - startTime.getTime()}ms`); - //@ts-ignore - if (!autoGetLink.checked) { - // 只在第一次检测的时候,抛出上一页链接. - prelink = _prelink; - //@ts-ignore - autoGetLink.checked = true; - } - return _nextlink; - } - function parseKWRE() { - function modifyPageKey(name, pageKey, pageKeyLength) { - function strMTE(str) { - return str.replace(/\\/g, '\\\\').replace(/\+/g, '\\+').replace(/\./g, '\\.').replace(/\?/g, '\\?').replace(/\{/g, '\\{').replace(/\}/g, '\\}').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\^/g, '\\^').replace(/\$/g, '\\$').replace(/\*/g, '\\*').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\|/g, '\\|').replace(/\//g, '\\/'); - } - var pfwordl = autoMatch.pfwordl; - var sfwordl = autoMatch.sfwordl; - var RE_enable_a = pfwordl[name].enable; - var RE_maxPrefix = pfwordl[name].maxPrefix; - var RE_character_a = pfwordl[name].character; - var RE_enable_b = sfwordl[name].enable; - var RE_maxSubfix = sfwordl[name].maxSubfix; - var RE_character_b = sfwordl[name].character; - var plwords, slwords, rep; - plwords = RE_maxPrefix > 0 ? '[' + (RE_enable_a ? strMTE(RE_character_a.join('')) : '.') + ']{0,' + RE_maxPrefix + '}' : ''; - plwords = '^\\s*' + plwords; - slwords = RE_maxSubfix > 0 ? '[' + (RE_enable_b ? strMTE(RE_character_b.join('')) : '.') + ']{0,' + RE_maxSubfix + '}' : ''; - slwords = slwords + '\\s*$'; - rep = autoMatch.cases ? '' : 'i'; - for (var i = 0; i < pageKeyLength; i++) { - pageKey[i] = new RegExp(plwords + strMTE(pageKey[i]) + slwords, rep); - } - return pageKey; - } - - // 转成正则. - prePageKey = modifyPageKey('previous', prePageKey, prePageKey.length); - nextPageKey = modifyPageKey('next', nextPageKey, nextPageKey.length); - } - } - - // By lastDream2013 略加修改,原版只能用于 Firefox - function getRalativePageStr(lastUrl, currentUrl, nextUrl) { - var getRalativePageNumArray = function getRalativePageNumArray(lasturl, url) { - if (!lasturl || !url) { - return [0, 0]; - } - var lasturlarray = lasturl.split(/-|\.|\&|\/|=|#|\?/); - var urlarray = url.split(/-|\.|\&|\/|=|#|\?/); - var url_info; - var lasturl_info; - // 一些 url_info 为 p1,p2,p3 之类的 - var handleInfo = function handleInfo(s) { - if (s) { - return s.replace(/^p/, ''); - } - return s; - }; - while (urlarray.length !== 0) { - url_info = handleInfo(urlarray.pop()); - lasturl_info = handleInfo(lasturlarray.pop()); - if (url_info != lasturl_info) { - if (/[0-9]+/.test(url_info) && (url_info == '2' || /[0-9]+/.test(lasturl_info))) { - return [parseInt(lasturl_info) || 1, parseInt(url_info)]; - } - } - } - return [0, 0]; - }; - var relativeOff; - - // 论坛和搜索引擎网页显示实际页面信息 - var relativePageNumarray = []; - if (nextUrl) { - relativePageNumarray = getRalativePageNumArray(currentUrl, nextUrl); - } else { - relativePageNumarray = getRalativePageNumArray(lastUrl, currentUrl); - relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; // 用的上一页的相对信息比较的,要补充差值…… - relativePageNumarray[1] = relativePageNumarray[1] + relativeOff; - relativePageNumarray[0] = relativePageNumarray[0] + relativeOff; - } - - // console.log('[获取实际页数] ', '要比较的3个页数:',arguments, ',得到的差值:', relativePageNumarray); - if (isNaN(relativePageNumarray[0]) || isNaN(relativePageNumarray[1])) { - return ''; - } - var realPageSiteMatch = false; - relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; - // 上一页与下一页差值为1,并最大数值不超过10000(一般论坛也不会超过这么多页……) - if (relativeOff === 1 && relativePageNumarray[1] < 10000) { - realPageSiteMatch = true; - } - - // 上一页与下一页差值不为1,但上一页与下一页差值能被上一页与下一面所整除的,有规律的页面 - if (!realPageSiteMatch && relativeOff !== 1) { - if (relativePageNumarray[1] % relativeOff === 0 && relativePageNumarray[0] % relativeOff === 0) { - realPageSiteMatch = true; - } - } - if (!realPageSiteMatch) { - // 不满足以上条件,再根据地址特征来匹配 - var sitePattern; - for (var i = 0, length = REALPAGE_SITE_PATTERN.length; i < length; i++) { - sitePattern = REALPAGE_SITE_PATTERN[i]; - if (currentUrl.toLocaleLowerCase().indexOf(sitePattern) >= 0) { - realPageSiteMatch = true; - break; - } - } - } - var relativePageStr; - if (realPageSiteMatch) { - // 如果匹配就显示实际网页信息 - if (userLang === 'zh_CN') { - if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { - // 一般是搜索引擎的第xx - xx项…… - relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' 项 ]'; - } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { - // 一般的翻页数,差值应该是1 - relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' 页 ]'; - } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { - // 找不到的话…… - relativePageStr = ' [ 实际网页结束 ]'; - } - } else { - if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { - // 一般是搜索引擎的第xx - xx项…… - relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' ]'; - } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { - // 一般的翻页数,差值应该是1 - relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' ]'; - } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { - // 找不到的话…… - relativePageStr = ' [ Actual elements ends ]'; - } - } - } else { - relativePageStr = ''; - } - return relativePageStr || ''; - } - }).catch(function (err) { - console.log(err); - }); - - // ------------------------下面的不要管他----------------- - /// //////////////////////////////////////////////////////////////// - - // 变量 - var isHashchangeSite = false; - var hashchangeTimer = 0; - - // ==================== libs ============================== - /** - * - * @param {IHrefIncObject} obj obj - * @param {Document=} doc document - * @param {Window=} win window - * @param {string=} cplink cplink - * @returns {string} next link - * @description 地址栏递增处理函数 - */ - function hrefInc(obj, doc, win, cplink) { - var _cplink = cplink; - function getHref(href) { - var mFails = obj.mFails; - if (!mFails) return href; - var str; - if (typeof mFails === 'string') { - str = mFails; - } else { - var array = []; - for (var i = 0, ii = mFails.length; i < ii; i++) { - var fx = mFails[i]; - if (!fx) continue; - if (typeof fx !== 'string' || fx.indexOf('re;') === 0) { - var fxre = typeof fx === 'string' ? toRE(fx.slice(3)) : fx; - var mValue = href.match(fxre); - if (!mValue) return href; - array.push(mValue); - } else { - array.push(fx); - } - } - str = array.join(''); - } - return str; - } - var sa = obj.startAfter; - var index; - if (typeof sa === 'string') { - if (sa[0] == '#') { - _cplink = doc.location.href; - } - index = _cplink.indexOf(sa); - if (index == -1) { - _cplink = getHref(_cplink); - index = _cplink.indexOf(sa); - if (index == -1) return; - } - } else { - var tsa = _cplink.match(sa); - if (!tsa) { - _cplink = getHref(_cplink); - sa = (_cplink.match(sa) || [])[0]; - if (!sa) return; - index = _cplink.indexOf(sa); - if (index == -1) return; - } else { - sa = tsa[0]; - index = _cplink.indexOf(sa); - } - } - index += sa.length; - var max = obj.max === undefined ? 9999 : obj.max; - var min = obj.min === undefined ? 1 : obj.min; - var aStr = _cplink.slice(0, index); - var bStr = _cplink.slice(index); - var nbStr = bStr.replace(/^(\d+)(.*)$/, function (a, b, c) { - b = Number(b) + obj.inc; - if (b >= max || b < min) return a; - return b + c; - }); - if (nbStr !== bStr) { - var ilresult; - try { - ilresult = obj.isLast(doc, unsafeWindow, _cplink); - } catch (e) {} - if (ilresult) return; - return aStr + nbStr; - } - } - - // ==================== functions ============================== - function handleLazyImgSrc(rule, doc) { - var imgAttrs = rule.split('|'); - imgAttrs.forEach(function (attr) { - attr = attr.trim(); - [].forEach.call(doc.querySelectorAll('img[' + attr + ']'), function (img) { - var newSrc = img.getAttribute(attr); - if (newSrc && newSrc != img.src) { - img.setAttribute('src', newSrc); - img.removeAttribute(attr); - } - }); - }); - } - - /** - * - * @param {HTMLDocument} doc Document Fragment - * @param {String} scriptFilter Regex string - * @description Remove scripts node from doc - * @returns {void} - */ - function removeScripts(doc, scriptFilter) { - var scripts = getAllElements('css;script', doc); - var regFilter; - if (scriptFilter) { - regFilter = toRE(scriptFilter); - } - /** @type {HTMLScriptElement} */ - var scripts_x; - for (var i = scripts.length - 1; i >= 0; i--) { - //@ts-ignore - scripts_x = scripts[i]; - var iremove = false; - if (regFilter) { - if (scripts_x.hasOwnProperty('src')) { - if (!regFilter.test(scripts_x.src)) { - iremove = true; - } - } - if (scripts_x.text) { - if (!regFilter.test(scripts_x.text)) { - iremove = true; - } - } - if (iremove) { - scripts_x.parentNode.removeChild(scripts_x); - } - } else { - scripts_x.parentNode.removeChild(scripts_x); - } - } - } - - /** - * - * @param {string} str str - * @returns {HTMLDocument} document - */ - function createDocumentByString(str) { - // string转为DOM - if (!str) { - logger.error("[Super-preloader]", 'No string found to be converted to DOM'); - return; - } - if (document.documentElement.nodeName != 'HTML') { - return new DOMParser().parseFromString(str, 'application/xhtml+xml'); - } - /**@type {HTMLDocument} */ - var doc; - try { - // firefox and chrome 30+,Opera 12 会报错 - doc = new DOMParser().parseFromString(str, 'text/html'); - } catch (ex) {} - if (doc) { - return doc; - } - if (document.implementation.createHTMLDocument) { - doc = document.implementation.createHTMLDocument('superPreloader'); - } else { - try { - //@ts-ignore - doc = document.cloneNode(false); - doc.appendChild(doc.importNode(document.documentElement, false)); - doc.documentElement.appendChild(doc.createElement('head')); - doc.documentElement.appendChild(doc.createElement('body')); - } catch (e) {} - } - if (!doc) return; - var range = document.createRange(); - range.selectNodeContents(document.body); - var fragment = range.createContextualFragment(str); - doc.body.appendChild(fragment); - var headChildNames = { - TITLE: true, - META: true, - LINK: true, - STYLE: true, - BASE: true - }; - var child; - var body = doc.body; - var bchilds = body.childNodes; - for (var i = bchilds.length - 1; i >= 0; i--) { - // 移除head的子元素 - child = bchilds[i]; - if (headChildNames[child.nodeName]) body.removeChild(child); - } - return doc; - } - - /** - * - * @param {string|HTMLElement} href href - * @returns {string} href - * @description 从相对路径的a.href获取完全的href值. - */ - function getFullHref(href) { - // getAttribute may give relative url but href always give full url - if (typeof href !== 'string') href = href.getAttribute('href'); - - /** @type {HTMLAnchorElement} */ - // @ts-ignore - var a = getFullHref.a; - if (!a) { - //@ts-ignore - getFullHref.a = a = document.createElement('a'); - } - a.href = href; - return a.href; - } - function getFloatWindowWith() { - var el = document.getElementById('sp-fw-container'); - /** @type {HTMLElement} */ - //@ts-ignore - var elc = el.cloneNode(true); - elc.id = `${el.id}`; - elc.style.visibility = 'hidden'; - //@ts-ignore - elc.querySelector('#sp-fw-content').style.display = 'block'; - document.body.appendChild(elc); - //@ts-ignore - var width = elc.querySelector('#sp-fw-content').offsetWidth; - elc.remove(); - return width; - } - - /** - * Get next page link from an element - * @param {string | HTMLElement} elem nextlink element - * @returns {String} link of next page - */ - function elemToHref(elem) { - if (!elem) return undefined; - if (typeof elem === 'string' || elem.hasAttribute('href')) { - return getFullHref(elem); - } else { - // eslint-disable-next-line no-script-url - return 'javascript:void(0);'; // pseudo href - } - } - })(); - -})(); + iframe.addEventListener('load', function (e) { + //@ts-ignore + var body = e.currentTarget.contentDocument.body; + if (body && body.firstChild) { + floatWO.updateColor('prefetcher'); + floatWO.CmodeIcon('hide'); + floatWO.loadedIcon('show'); + //@ts-ignore + e.currentTarget.removeEventListener('load', arguments.callee, false); + if (SSS.lazyImgSrc) { + handleLazyImgSrc(SSS.lazyImgSrc, body); + } + } + }, false); + if (SSS.viewcontent) { + var container = cContainer(); + container.div.style.display = 'block'; + container.div2.innerHTML = 'iframe full prefetch: ' + '' + 'Prefetch URL: ' + '' + nextlink + ''; + iframe.height = '300px'; + container.div.appendChild(iframe); + } else { + document.body.appendChild(iframe); + } + } else { + var reqConf = { + headers: SSS.a_headers ? SSS.a_headers : { + Referer: cplink + } + }; + got.get(nextlink, reqConf).then(function (res) { + var doc = createDocumentByString(res.data); + if (!doc) { + logger.error("[Super-preloader]", 'Document object creation failed!'); + return; + } + if (SSS.lazyImgSrc) { + handleLazyImgSrc(SSS.lazyImgSrc, doc); + } + var images = doc.images; + var isl = images.length; + var img; + var iarray = []; + var i; + var existSRC = {}; + var isrc; + for (i = isl - 1; i >= 0; i--) { + isrc = images[i].getAttribute('src'); + if (!isrc || existSRC[isrc]) { + continue; + } else { + existSRC[isrc] = true; + } + img = document.createElement('img'); + img.src = isrc; + iarray.push(img); + } + var container = cContainer(); + var div = container.div; + i = iarray.length; + container.div2.innerHTML = 'Number of prefetched pictures: ' + '' + i + '' + '' + 'Prefetch URL:' + '' + nextlink + ''; + logger.info("[Super-preloader]", 'Number of prefetched pictures: ' + i + 'Prefetch URL: ' + nextlink); + for (i -= 1; i >= 0; i--) { + div.appendChild(iarray[i]); + } + if (SSS.viewcontent) { + container.div.style.display = 'block'; + } + floatWO.updateColor('prefetcher'); + floatWO.loadedIcon('show'); + floatWO.CmodeIcon('hide'); + }); + } + } + + // 执行开始../////////////////// + + // 分析黑名单 + var blackList_re = new RegExp(blackList.map(function (x) { + if (x.substring(0, 3).toLowerCase() == 're:') { + return x.substring(4); + } else { + return wildcardToRegExpStr(x); + } + }).join('|')); + if (blackList_re.test(url)) { + logger.debug("[Super-preloader]", 'Matched blacklist, JS execution stopped'); + return; + } + + // 是否在frame上加载.. + if (prefs.DisableI && window.self != window.parent) { + var isReturn = !_find(DIExclude, function (x) { + //@ts-ignore + return x[1] && x[2].test(url); + }); + if (isReturn) { + logger.debug("[Super-preloader]", `The page with url:${url} is not a top-level window, JS execution stopped`); + return; + } + } + logger.debug("[Super-preloader]", `Page url is: ${url}, JS loaded successfully`); + + // 第一阶段..分析高级模式.. + if (prefs.disableBuiltinRules) { + logger.warn("[Super-preloader]", 'Builtin js rules are disabled'); + } else { + SSRules = SSRules.concat(jsSiteRule); + } + if (prefs.disableBuiltinSubscriptionRules) { + logger.warn("[Super-preloader]", 'Remote json rules are disabled'); + } else { + SSRules = SSRules.concat(jsonRule); + } + if (!prefs.disableBuiltinRules) { + SSRules = SSRules.concat(jsGeneralRule); + } + if (!prefs.numOfRule || prefs.numOfRule != SSRules.length) { + prefs.numOfRule = SSRules.length; + GM.setValue('prefs', prefs); + } + + // 重要的变量两枚. + /** @type {Array} */ + var pagedLinks = [document.location.href]; + /** @type {HTMLElement|string} */ + var nextlinkElem; + /** @type {string} */ + var nextlink; + /** @type {HTMLElement|string} */ + var prelink; + + //= ============== + + /**@type {IRuntimeRule} */ + var SSS = {}; + var findCurSiteInfo = /*#__PURE__*/function () { + var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() { + var SIIAD, Rurl, ii, _loop, _ret, i, FA; + return _regeneratorRuntime.wrap(function _callee5$(_context6) { + while (1) switch (_context6.prev = _context6.next) { + case 0: + SIIAD = SITEINFO_D.autopager; + ii = SSRules.length; + if (userLang === 'zh_CN') { + logger.debug("[Super-preloader]", `高级规则数目:${ii}`); + logger.debug("[Super-preloader]", `Number of rules > ${ii - jsonRule.length} from other sources, such as: wedata.net`); + } else { + logger.debug("[Super-preloader]", `Number of advanced rules:${ii}`); + } + _loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() { + var SII, SIIA, documentFilter, pageElement; + return _regeneratorRuntime.wrap(function _loop$(_context5) { + while (1) switch (_context5.prev = _context5.next) { + case 0: + SII = SSRules[i]; + if (!(SII.autopager && SII.autopager.ip)) { + _context5.next = 4; + break; + } + if (!(SII.autopager.ip.indexOf(serverIp) < 0)) { + _context5.next = 4; + break; + } + return _context5.abrupt("return", 0); + case 4: + Rurl = toRE(SII.url); + if (!Rurl.test(url)) { + _context5.next = 75; + break; + } + if (userLang === 'zh_CN') { + logger.debug("[Super-preloader]", 'Find current site rules:', SII); + logger.debug("[Super-preloader]", `规则ID: ${i + 1}`); + } else { + logger.debug("[Super-preloader]", 'Find rule for this website:', SII); + logger.debug("[Super-preloader]", `Rule ID: ${i + 1}`); + } + + // 运行规则的 startFilter + if (!(SII.autopager && SII.autopager.startFilter)) { + _context5.next = 17; + break; + } + _context5.prev = 8; + _context5.next = 11; + return SII.autopager.startFilter(document, window); + case 11: + logger.debug("[Super-preloader]", 'startFilter executed successfully'); + _context5.next = 17; + break; + case 14: + _context5.prev = 14; + _context5.t0 = _context5["catch"](8); + logger.error("[Super-preloader]", 'Error executing startFilter', _context5.t0); + case 17: + if (!(SII.nextLink === 'null;')) { + _context5.next = 21; + break; + } + logger.debug("[Super-preloader]", 'Find the rule for a site without nextpage', SII); + SSS.hasRule = false; + return _context5.abrupt("return", 1); + case 21: + nextlinkElem = getElement(SII.nextLink || 'auto;'); + if (nextlinkElem) { + _context5.next = 25; + break; + } + logger.warn("[Super-preloader]", 'Could not find the next page link, continue searching for other rules, skiping rule:', SII); + return _context5.abrupt("return", 0); + case 25: + // extract next page link from an a link + nextlink = getFullHref(nextlinkElem); + if (!(nextlink === document.location.href)) { + _context5.next = 29; + break; + } + nextlinkElem = null; + return _context5.abrupt("return", 0); + case 29: + if (SII.preLink && SII.preLink != 'auto;') { + // 如果设定了具体的preLink + prelink = getElement(SII.preLink); + } else { + if (prefs.autoGetPreLink) { + prelink = getElement('auto;'); + } + } + SSS = {}; + SSS.Rurl = String(Rurl); + SSS.nextLink = SII.nextLink || 'auto;'; + SSS.viewcontent = SII.viewcontent; + SSS.enable = SII.enable === undefined ? SITEINFO_D.enable : SII.enable; + SSS.useiframe = SII.useiframe === undefined ? SITEINFO_D.useiframe : SII.useiframe; + if (SII.pageElement) { + // 如果是Oautopager的规则.. + if (typeof SII.autopager !== 'object') SII.autopager = {}; + SII.autopager.pageElement = SII.pageElement; + if (!SII.autopager.useiframe) SII.autopager.useiframe = SII.useiframe; + if (SII.preLink) SII.autopager.preLink = SII.preLink; + if (SII.insertBefore) SII.autopager.HT_insert = [SII.insertBefore, 1]; + } + + // 自动翻页设置. + SIIA = SII.autopager; + if (!SIIA) { + _context5.next = 68; + break; + } + SSS.a_pageElement = SIIA.pageElement; + if (SSS.a_pageElement) { + _context5.next = 42; + break; + } + return _context5.abrupt("return", 1); + case 42: + SSS.a_manualA = SIIA.manualA === undefined ? SIIAD.manualA : SIIA.manualA; + SSS.a_enable = SIIA.enable === undefined ? SIIAD.enable : SIIA.enable; + SSS.a_useiframe = SIIA.useiframe === undefined ? SIIAD.useiframe : SIIA.useiframe; + SSS.a_mutationObserver = SSS.a_useiframe ? SIIA.mutationObserver === undefined ? null : SIIA.mutationObserver : null; + SSS.a_newIframe = SIIA.newIframe === undefined ? SIIAD.newIframe : SIIA.newIframe; + SSS.a_iloaded = SIIA.iloaded === undefined ? SIIAD.iloaded : SIIA.iloaded; + SSS.a_itimeout = SIIA.itimeout === undefined ? SIIAD.itimeout : SIIA.itimeout; + SSS.a_remain = SIIA.remain === undefined ? SIIAD.remain : SIIA.remain; + SSS.a_maxpage = SIIA.maxpage === undefined ? SIIAD.maxpage : SIIA.maxpage; + SSS.a_separator = SIIA.separator === undefined ? SIIAD.separator : SIIA.separator; + SSS.a_sepdivDom = SIIA.sepdivDom === undefined ? undefined : SIIA.sepdivDom; + SSS.a_separatorReal = SIIA.separatorReal === undefined ? SIIAD.separatorReal : SIIA.separatorReal; + SSS.a_replaceE = SIIA.replaceE; + SSS.a_HT_insert = SIIA.HT_insert; + SSS.a_relatedObj = SIIA.relatedObj === undefined ? SIIAD.relatedObj : SIIA.relatedObj; + SSS.a_ipages = SIIA.ipages === undefined ? SIIAD.ipages : SIIA.ipages; + + // new + SSS.filter = SII.filter || SIIA.filter; // 新增了函数的形式,原来的功能是移除 pageElement + documentFilter = SII.documentFilter || SIIA.documentFilter; + if (documentFilter === 'startFilter') { + SSS.a_documentFilter = function (doc) { + return SII.autopager.startFilter(doc); + }; + } else if (typeof documentFilter === 'function') { + SSS.a_documentFilter = documentFilter; + } else { + SSS.a_documentFilter = undefined; + } + SSS.a_scriptFilter = SIIA.scriptFilter === undefined ? '' : SIIA.scriptFilter; + SSS.a_stylish = SII.stylish || SIIA.stylish; + SSS.lazyImgSrc = SIIA.lazyImgSrc; + SSS.a_headers = SIIA.headers === undefined ? undefined : SIIA.headers; // custom header for XHRLoaded + SSS.a_reload = SIIA.reload === undefined ? SIIAD.reload : SIIA.reload; // force reload iframe + SSS.a_sandbox = SIIA.sandbox === undefined ? SIIAD.sandbox : SIIA.sandbox; + + // 在翻页的时候会有一些其他元素占据了页面的高度,导致翻页不精准。 + // 比如正文下面的推荐文章列表(占据超过整个页面10%就很难受) + SSS.a_excludeElement = SIIA.excludeElement; + case 68: + // 检验是否存在内容 + pageElement = getElement(SSS.a_pageElement); + if (!(!pageElement || Array.isArray(pageElement) && pageElement.length === 0)) { + _context5.next = 73; + break; + } + nextlinkElem = null; + logger.error("[Super-preloader]", 'Could not find content, skiping rule:', SII, 'Continue to search for other rules.'); + return _context5.abrupt("return", 0); + case 73: + SSS.hasRule = true; + return _context5.abrupt("return", 1); + case 75: + case "end": + return _context5.stop(); + } + }, _loop, null, [[8, 14]]); + }); + i = 0; + case 5: + if (!(i < ii)) { + _context6.next = 15; + break; + } + return _context6.delegateYield(_loop(), "t0", 7); + case 7: + _ret = _context6.t0; + if (!(_ret === 0)) { + _context6.next = 10; + break; + } + return _context6.abrupt("continue", 12); + case 10: + if (!(_ret === 1)) { + _context6.next = 12; + break; + } + return _context6.abrupt("break", 15); + case 12: + i++; + _context6.next = 5; + break; + case 15: + if (!SSS.hasRule) { + // 自动搜索. + if (!autoMatch.keyMatch) { + logger.warn("[Super-preloader]", 'Auto match is disabled'); + } else { + logger.warn("[Super-preloader]", 'No rules are found. Auto match starts'); + nextlinkElem = autoGetLink(); + if (nextlinkElem) { + // 强制模式. + FA = autoMatch.FA; + SSS.Rurl = window.localStorage ? 'am:' + (url.match(/^https?:\/\/[^:]*\//i) || [])[0] : 'am:automatch'; + SSS.enable = true; + SSS.nextLink = 'auto;'; + SSS.viewcontent = autoMatch.viewcontent; + SSS.useiframe = autoMatch.useiframe || SITEINFO_D.autopager.useiframe; + SSS.a_force = true; + SSS.a_manualA = FA.manualA; + SSS.a_enable = FA.enable || SITEINFO_D.autopager.force_enable; // Force join is enabled when this becomes true + SSS.a_useiframe = FA.useiframe || SITEINFO_D.useiframe; + SSS.a_iloaded = FA.iloaded; + SSS.a_itimeout = FA.itimeout; + SSS.a_remain = FA.remain; + SSS.a_maxpage = FA.maxpage; + SSS.a_separator = FA.separator; + SSS.a_ipages = FA.ipages; + } + } + } + + // 如果规则没 lazyImgSrc,设置默认值 + if (!SSS.lazyImgSrc) { + SSS.lazyImgSrc = prefs.lazyImgSrc; + } + logger.debug("[Super-preloader]", `Total time spent on searching for advanced rules and automatic matching: ${new Date().getTime() - startTime.getTime()}ms`); + case 18: + case "end": + return _context6.stop(); + } + }, _callee5); + })); + return function findCurSiteInfo() { + return _ref5.apply(this, arguments); + }; + }(); + findCurSiteInfo().then(function () { + // 上下页都没有找到啊 + if (!nextlinkElem && !prelink) { + logger.warn("[Super-preloader]", `No related links found, JS execution stopped. Total time spent: ${new Date().getTime() - startTime.getTime()}ms`); + return; + } else if (!nextlink) { + logger.error("[Super-preloader]", 'The link to the next page does not exist, JS cannot continue.'); + logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); + return; + } else { + logger.debug("[Super-preloader]", 'Previous link element:', prelink); + logger.debug("[Super-preloader]", 'Next link element:', nextlinkElem); + nextlink = elemToHref(nextlinkElem); + logger.debug("[Super-preloader]", 'Next link:', nextlink); + //@ts-ignore + prelink = prelink ? prelink.href || prelink : undefined; + } + var keyBinding = { + go: function go() { + if (typeof nextlink === 'string') window.location.href = nextlink; + }, + back: function back() { + //fixme + if (!prelink) getElement('auto;'); + if (typeof prelink === 'string') window.location.href = prelink; + }, + register: function register( /**@type {IPrefs} */prefs) { + var _this = this; + if (prefs.arrowKeyPage) { + logger.debug("[Super-preloader]", 'Adding left and right arrow keys to autopager listener.'); + document.addEventListener('keyup', function (e) { + //@ts-ignore + var tarNN = e.target.nodeName; + if (tarNN != 'BODY' && tarNN != 'HTML') return; + + // check is a combo pressed + if (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) { + return; + } + switch (e.keyCode) { + case 37: + _this.back(); + break; + case 39: + _this.go(); + break; + } + }, false); + + // 监听下一页事件. + logger.debug("[Super-preloader]", '添加鼠标手势翻页监听'); + document.addEventListener('superPreloader.go', function () { + _this.go(); + }, false); + + // 监听下一页事件. + document.addEventListener('superPreloader.back', function () { + _this.back(); + }, false); + } + } + }; + keyBinding.register(prefs); + loadLocalSetting(SSS); + if (!SSS.enable) { + logger.warn("[Super-preloader]", 'This rule is disabled, script execution is stopped'); + logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); + return; + } + if (!SSS.hasRule) { + SSS.a_force = true; + } + if (SSS.a_force) { + SSS.a_pageElement = '//body/*'; + SSS.a_HT_insert = undefined; + SSS.a_relatedObj = undefined; + } + if (prefs.floatWindow) { + logger.debug("[Super-preloader]", 'Creating a floating window'); + floatWindow(SSS); + var floatWindowWidth = getFloatWindowWith(); + displace(document.getElementById('sp-fw-container'), { + handle: document.getElementById('sp-fw-rect'), + customMove: function customMove(el, x, y) { + delete el.style.left; + delete el.style.bottom; + var right = document.body.clientWidth - floatWindowWidth - x; + if (right < 0) { + right = 0; + } else if (right > window.innerWidth - floatWindowWidth) { + right = window.innerWidth - floatWindowWidth; + } + var top = y; + if (top > window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight) { + top = window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight; + } else if (top < 0) { + top = 0; + } + el.style.right = `${right}px`; + el.style.top = `${top}px`; + }, + onMouseUp: function onMouseUp(el) { + prefs.FW_offset[0] = parseInt(el.style.top.replace('px', ''), 10); + prefs.FW_offset[1] = parseInt(el.style.right.replace('px', ''), 10); + prefs.FW_position = 2; + GM.setValue('prefs', prefs); + } + }); + document.getElementById('sp-fw-container').style.position = 'fixed'; + } + logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); + + // 预读或者翻页. + if (SSS.a_enable) { + logger.debug("[Super-preloader]", 'Initializing, autopager mode.'); + autopager(SSS, floatWO); + } else { + logger.debug("[Super-preloader]", 'Initializing, prefetch mode.'); + prefetcher(SSS, floatWO); + } + }); + + // 获取单个元素,混合 + /** + * + * @param {string|Function|Array|IHrefIncObject} selector selector + * @param {HTMLElement|Document=} contextNode element + * @param {Document=} doc document + * @param {Window=} win window + * @returns {HTMLElement} element + */ + function getElement(selector, contextNode, doc, win) { + var _cplink = cplink; + var ret; + if (!selector) return ret; + doc = doc || document; + win = win || window; + contextNode = contextNode || doc; + if (typeof selector === 'string') { + if (selector.search(/^css;/i) === 0) { + ret = getElementByCSS(selector.slice(4), contextNode); + } else if (selector.toLowerCase() == 'auto;') { + ret = autoGetLink(doc); + } else { + ret = getElementByXpath(selector, contextNode, doc); + } + } else if (typeof selector === 'function') { + ret = selector(doc, win, _cplink); + } else if (selector instanceof Array) { + for (var i = 0, l = selector.length; i < l; i++) { + ret = getElement(selector[i], contextNode, doc, win); + if (ret) { + break; + } + } + } else { + ret = hrefInc(selector, doc, win, _cplink); + } + return ret; + } + var docChecked; + /** + * + * @param {Document=} doc document + * @param {Window=} win window + * @returns {HTMLElement} a + */ + function autoGetLink(doc, win) { + if (!autoMatch.keyMatch) return; + //@ts-ignore + if (!parseKWRE.done) { + parseKWRE(); + //@ts-ignore + parseKWRE.done = true; + } + var startTime = new Date(); + doc = doc || document; + if (doc == document) { + // 当前文档,只检查一次. + if (docChecked) { + // @ts-ignore + return nextlink; + } + docChecked = true; + } + var _prePageKey = prePageKey; + var _nextPageKey = nextPageKey; + var _nPKL = nextPageKey.length; + var _pPKL = prePageKey.length; + var _getFullHref = getFullHref; + var _getAllElementsByXpath = getAllElementsByXpath; + var _Number = Number; + var _domain_port = domain_port; + var alllinks = doc.links; + var alllinksl = alllinks.length; + var curLHref = cplink; + var _nextlink; + var _prelink; + //@ts-ignore + if (!autoGetLink.checked) { + // 第一次检查 + _nextlink = nextlink; + _prelink = prelink; + } else { + _prelink = true; + } + var DCEnable = autoMatch.digitalCheck; + var DCRE = /^\s*\D{0,1}(\d+)\D{0,1}\s*$/; + var i, a, atext, numtext; + var aP; + var initSD; + var searchD = 1; + var preS1; + var preS2; + var searchedD; + var pSNText; + var preSS; + var nodeType; + var nextS1, nextS2, nSNText, nextSS; + var aimgs, j, jj, aimg_x, xbreak, k, keytext; + function finalCheck(a, type) { + var ahref = a.getAttribute('href'); // 在chrome上当是非当前页面文档对象的时候直接用a.href访问,不返回href + if (ahref == '#') { + return null; + } + ahref = _getFullHref(ahref); // 从相对路径获取完全的href; + + // 3个条件:http协议链接,非跳到当前页面的链接,非跨域 + if (/^https?:/i.test(ahref) && ahref.replace(/#.*$/, '') != curLHref && ahref.match(/https?:\/\/([^\/]+)/)[1] == _domain_port) { + logger.debug("[Super-preloader]", type == 'pre' ? 'previous' : 'next' + 'match:', atext); + return a; // 返回对象A + // return ahref; + } + } + logger.debug("[Super-preloader]", `Number of full document links:${alllinksl}`); + for (i = 0; i < alllinksl; i++) { + if (_nextlink && _prelink) break; + a = alllinks[i]; + if (!a) continue; // undefined跳过 + // links集合返回的本来就是包含href的a元素..所以不用检测 + // if(!a.hasAttribute("href"))continue; + atext = a.textContent; + if (atext) { + if (DCEnable) { + numtext = atext.match(DCRE); + if (numtext) { + // 是不是纯数字 + // debug(numtext); + numtext = numtext[1]; + aP = a; + initSD = 0; + if (!_nextlink) { + preS1 = a.previousSibling; + preS2 = a.previousElementSibling; + while (!(preS1 || preS2) && initSD < searchD) { + aP = aP.parentNode; + if (aP) { + preS1 = aP.previousSibling; + //@ts-ignore + preS2 = aP.previousElementSibling; + } + initSD++; + } + searchedD = initSD > 0; + if (preS1 || preS2) { + pSNText = preS1 ? preS1.textContent.match(DCRE) : ''; + if (pSNText) { + preSS = preS1; + } else { + pSNText = preS2 ? preS2.textContent.match(DCRE) : ''; + preSS = preS2; + } + if (pSNText) { + pSNText = pSNText[1]; + if (_Number(pSNText) == _Number(numtext) - 1) { + nodeType = preSS.nodeType; + if (nodeType == 3 || nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', preSS, doc).length === 0 : !preSS.hasAttribute('href') || _getFullHref(preSS.getAttribute('href')) == curLHref)) { + _nextlink = finalCheck(a, 'next'); + } + continue; + } + } + } + } + if (!_prelink) { + nextS1 = a.nextSibling; + nextS2 = a.nextElementSibling; + while (!(nextS1 || nextS2) && initSD < searchD) { + aP = aP.parentNode; + if (aP) { + nextS1 = a.nextSibling; + nextS2 = a.nextElementSibling; + } + initSD++; + } + searchedD = initSD > 0; + if (nextS1 || nextS2) { + nSNText = nextS1 ? nextS1.textContent.match(DCRE) : ''; + if (nSNText) { + nextSS = nextS1; + } else { + nSNText = nextS2 ? nextS2.textContent.match(DCRE) : ''; + nextSS = nextS2; + } + if (nSNText) { + nSNText = nSNText[1]; + if (_Number(nSNText) == _Number(numtext) + 1) { + nodeType = nextSS.nodeType; + if (nodeType == 3 || + // @ts-ignore + nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', nextSS, doc).length === 0 : !nextSS.hasAttribute('href') || _getFullHref(nextSS.getAttribute('href')) == curLHref)) { + _prelink = finalCheck(a, 'pre'); + } + } + } + } + } + continue; + } + } + } else { + atext = a.title; + } + if (!atext) { + aimgs = a.getElementsByTagName('img'); + for (j = 0, jj = aimgs.length; j < jj; j++) { + aimg_x = aimgs[j]; + atext = aimg_x.alt || aimg_x.title; + if (atext) break; + } + } + if (!atext) continue; + if (!_nextlink) { + xbreak = false; + for (k = 0; k < _nPKL; k++) { + keytext = _nextPageKey[k]; + //@ts-ignore + if (!keytext.test(atext)) continue; + _nextlink = finalCheck(a, 'next'); + xbreak = true; + break; + } + if (xbreak || _nextlink) continue; + } + if (!_prelink) { + for (k = 0; k < _pPKL; k++) { + keytext = _prePageKey[k]; + //@ts-ignore + if (!keytext.test(atext)) continue; + _prelink = finalCheck(a, 'pre'); + break; + } + } + } + logger.debug("[Super-preloader]", `Time to search ${i} links:${new Date().getTime() - startTime.getTime()}ms`); + //@ts-ignore + if (!autoGetLink.checked) { + // 只在第一次检测的时候,抛出上一页链接. + prelink = _prelink; + //@ts-ignore + autoGetLink.checked = true; + } + return _nextlink; + } + function parseKWRE() { + function modifyPageKey(name, pageKey, pageKeyLength) { + function strMTE(str) { + return str.replace(/\\/g, '\\\\').replace(/\+/g, '\\+').replace(/\./g, '\\.').replace(/\?/g, '\\?').replace(/\{/g, '\\{').replace(/\}/g, '\\}').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\^/g, '\\^').replace(/\$/g, '\\$').replace(/\*/g, '\\*').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\|/g, '\\|').replace(/\//g, '\\/'); + } + var pfwordl = autoMatch.pfwordl; + var sfwordl = autoMatch.sfwordl; + var RE_enable_a = pfwordl[name].enable; + var RE_maxPrefix = pfwordl[name].maxPrefix; + var RE_character_a = pfwordl[name].character; + var RE_enable_b = sfwordl[name].enable; + var RE_maxSubfix = sfwordl[name].maxSubfix; + var RE_character_b = sfwordl[name].character; + var plwords, slwords, rep; + plwords = RE_maxPrefix > 0 ? '[' + (RE_enable_a ? strMTE(RE_character_a.join('')) : '.') + ']{0,' + RE_maxPrefix + '}' : ''; + plwords = '^\\s*' + plwords; + slwords = RE_maxSubfix > 0 ? '[' + (RE_enable_b ? strMTE(RE_character_b.join('')) : '.') + ']{0,' + RE_maxSubfix + '}' : ''; + slwords = slwords + '\\s*$'; + rep = autoMatch.cases ? '' : 'i'; + for (var i = 0; i < pageKeyLength; i++) { + pageKey[i] = new RegExp(plwords + strMTE(pageKey[i]) + slwords, rep); + } + return pageKey; + } + + // 转成正则. + prePageKey = modifyPageKey('previous', prePageKey, prePageKey.length); + nextPageKey = modifyPageKey('next', nextPageKey, nextPageKey.length); + } + } + + // By lastDream2013 略加修改,原版只能用于 Firefox + function getRalativePageStr(lastUrl, currentUrl, nextUrl) { + var getRalativePageNumArray = function getRalativePageNumArray(lasturl, url) { + if (!lasturl || !url) { + return [0, 0]; + } + var lasturlarray = lasturl.split(/-|\.|\&|\/|=|#|\?/); + var urlarray = url.split(/-|\.|\&|\/|=|#|\?/); + var url_info; + var lasturl_info; + // 一些 url_info 为 p1,p2,p3 之类的 + var handleInfo = function handleInfo(s) { + if (s) { + return s.replace(/^p/, ''); + } + return s; + }; + while (urlarray.length !== 0) { + url_info = handleInfo(urlarray.pop()); + lasturl_info = handleInfo(lasturlarray.pop()); + if (url_info != lasturl_info) { + if (/[0-9]+/.test(url_info) && (url_info == '2' || /[0-9]+/.test(lasturl_info))) { + return [parseInt(lasturl_info) || 1, parseInt(url_info)]; + } + } + } + return [0, 0]; + }; + var relativeOff; + + // 论坛和搜索引擎网页显示实际页面信息 + var relativePageNumarray = []; + if (nextUrl) { + relativePageNumarray = getRalativePageNumArray(currentUrl, nextUrl); + } else { + relativePageNumarray = getRalativePageNumArray(lastUrl, currentUrl); + relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; // 用的上一页的相对信息比较的,要补充差值…… + relativePageNumarray[1] = relativePageNumarray[1] + relativeOff; + relativePageNumarray[0] = relativePageNumarray[0] + relativeOff; + } + + // console.log('[获取实际页数] ', '要比较的3个页数:',arguments, ',得到的差值:', relativePageNumarray); + if (isNaN(relativePageNumarray[0]) || isNaN(relativePageNumarray[1])) { + return ''; + } + var realPageSiteMatch = false; + relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; + // 上一页与下一页差值为1,并最大数值不超过10000(一般论坛也不会超过这么多页……) + if (relativeOff === 1 && relativePageNumarray[1] < 10000) { + realPageSiteMatch = true; + } + + // 上一页与下一页差值不为1,但上一页与下一页差值能被上一页与下一面所整除的,有规律的页面 + if (!realPageSiteMatch && relativeOff !== 1) { + if (relativePageNumarray[1] % relativeOff === 0 && relativePageNumarray[0] % relativeOff === 0) { + realPageSiteMatch = true; + } + } + if (!realPageSiteMatch) { + // 不满足以上条件,再根据地址特征来匹配 + var sitePattern; + for (var i = 0, length = REALPAGE_SITE_PATTERN.length; i < length; i++) { + sitePattern = REALPAGE_SITE_PATTERN[i]; + if (currentUrl.toLocaleLowerCase().indexOf(sitePattern) >= 0) { + realPageSiteMatch = true; + break; + } + } + } + var relativePageStr; + if (realPageSiteMatch) { + // 如果匹配就显示实际网页信息 + if (userLang === 'zh_CN') { + if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { + // 一般是搜索引擎的第xx - xx项…… + relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' 项 ]'; + } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { + // 一般的翻页数,差值应该是1 + relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' 页 ]'; + } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { + // 找不到的话…… + relativePageStr = ' [ 实际网页结束 ]'; + } + } else { + if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { + // 一般是搜索引擎的第xx - xx项…… + relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' ]'; + } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { + // 一般的翻页数,差值应该是1 + relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' ]'; + } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { + // 找不到的话…… + relativePageStr = ' [ Actual elements ends ]'; + } + } + } else { + relativePageStr = ''; + } + return relativePageStr || ''; + } + }).catch(function (err) { + console.log(err); + }); + + // ------------------------下面的不要管他----------------- + /// //////////////////////////////////////////////////////////////// + + // 变量 + var isHashchangeSite = false; + var hashchangeTimer = 0; + + // ==================== libs ============================== + /** + * + * @param {IHrefIncObject} obj obj + * @param {Document=} doc document + * @param {Window=} win window + * @param {string=} cplink cplink + * @returns {string} next link + * @description 地址栏递增处理函数 + */ + function hrefInc(obj, doc, win, cplink) { + var _cplink = cplink; + function getHref(href) { + var mFails = obj.mFails; + if (!mFails) return href; + var str; + if (typeof mFails === 'string') { + str = mFails; + } else { + var array = []; + for (var i = 0, ii = mFails.length; i < ii; i++) { + var fx = mFails[i]; + if (!fx) continue; + if (typeof fx !== 'string' || fx.indexOf('re;') === 0) { + var fxre = typeof fx === 'string' ? toRE(fx.slice(3)) : fx; + var mValue = href.match(fxre); + if (!mValue) return href; + array.push(mValue); + } else { + array.push(fx); + } + } + str = array.join(''); + } + return str; + } + var sa = obj.startAfter; + var index; + if (typeof sa === 'string') { + if (sa[0] == '#') { + _cplink = doc.location.href; + } + index = _cplink.indexOf(sa); + if (index == -1) { + _cplink = getHref(_cplink); + index = _cplink.indexOf(sa); + if (index == -1) return; + } + } else { + var tsa = _cplink.match(sa); + if (!tsa) { + _cplink = getHref(_cplink); + sa = (_cplink.match(sa) || [])[0]; + if (!sa) return; + index = _cplink.indexOf(sa); + if (index == -1) return; + } else { + sa = tsa[0]; + index = _cplink.indexOf(sa); + } + } + index += sa.length; + var max = obj.max === undefined ? 9999 : obj.max; + var min = obj.min === undefined ? 1 : obj.min; + var aStr = _cplink.slice(0, index); + var bStr = _cplink.slice(index); + var nbStr = bStr.replace(/^(\d+)(.*)$/, function (a, b, c) { + b = Number(b) + obj.inc; + if (b >= max || b < min) return a; + return b + c; + }); + if (nbStr !== bStr) { + var ilresult; + try { + ilresult = obj.isLast(doc, unsafeWindow, _cplink); + } catch (e) {} + if (ilresult) return; + return aStr + nbStr; + } + } + + // ==================== functions ============================== + function handleLazyImgSrc(rule, doc) { + var imgAttrs = rule.split('|'); + imgAttrs.forEach(function (attr) { + attr = attr.trim(); + [].forEach.call(doc.querySelectorAll('img[' + attr + ']'), function (img) { + var newSrc = img.getAttribute(attr); + if (newSrc && newSrc != img.src) { + img.setAttribute('src', newSrc); + img.removeAttribute(attr); + } + }); + }); + } + + /** + * + * @param {HTMLDocument} doc Document Fragment + * @param {String} scriptFilter Regex string + * @description Remove scripts node from doc + * @returns {void} + */ + function removeScripts(doc, scriptFilter) { + var scripts = getAllElements('css;script', doc); + var regFilter; + if (scriptFilter) { + regFilter = toRE(scriptFilter); + } + /** @type {HTMLScriptElement} */ + var scripts_x; + for (var i = scripts.length - 1; i >= 0; i--) { + //@ts-ignore + scripts_x = scripts[i]; + var iremove = false; + if (regFilter) { + if (scripts_x.hasOwnProperty('src')) { + if (!regFilter.test(scripts_x.src)) { + iremove = true; + } + } + if (scripts_x.text) { + if (!regFilter.test(scripts_x.text)) { + iremove = true; + } + } + if (iremove) { + scripts_x.parentNode.removeChild(scripts_x); + } + } else { + scripts_x.parentNode.removeChild(scripts_x); + } + } + } + + /** + * + * @param {string} str str + * @returns {HTMLDocument} document + */ + function createDocumentByString(str) { + // string转为DOM + if (!str) { + logger.error("[Super-preloader]", 'No string found to be converted to DOM'); + return; + } + if (document.documentElement.nodeName != 'HTML') { + return new DOMParser().parseFromString(str, 'application/xhtml+xml'); + } + /**@type {HTMLDocument} */ + var doc; + try { + // firefox and chrome 30+,Opera 12 会报错 + doc = new DOMParser().parseFromString(str, 'text/html'); + } catch (ex) {} + if (doc) { + return doc; + } + if (document.implementation.createHTMLDocument) { + doc = document.implementation.createHTMLDocument('superPreloader'); + } else { + try { + //@ts-ignore + doc = document.cloneNode(false); + doc.appendChild(doc.importNode(document.documentElement, false)); + doc.documentElement.appendChild(doc.createElement('head')); + doc.documentElement.appendChild(doc.createElement('body')); + } catch (e) {} + } + if (!doc) return; + var range = document.createRange(); + range.selectNodeContents(document.body); + var fragment = range.createContextualFragment(str); + doc.body.appendChild(fragment); + var headChildNames = { + TITLE: true, + META: true, + LINK: true, + STYLE: true, + BASE: true + }; + var child; + var body = doc.body; + var bchilds = body.childNodes; + for (var i = bchilds.length - 1; i >= 0; i--) { + // 移除head的子元素 + child = bchilds[i]; + if (headChildNames[child.nodeName]) body.removeChild(child); + } + return doc; + } + + /** + * + * @param {string|HTMLElement} href href + * @returns {string} href + * @description 从相对路径的a.href获取完全的href值. + */ + function getFullHref(href) { + // getAttribute may give relative url but href always give full url + if (typeof href !== 'string') href = href.getAttribute('href'); + + /** @type {HTMLAnchorElement} */ + // @ts-ignore + var a = getFullHref.a; + if (!a) { + //@ts-ignore + getFullHref.a = a = document.createElement('a'); + } + a.href = href; + return a.href; + } + function getFloatWindowWith() { + var el = document.getElementById('sp-fw-container'); + /** @type {HTMLElement} */ + //@ts-ignore + var elc = el.cloneNode(true); + elc.id = `${el.id}`; + elc.style.visibility = 'hidden'; + //@ts-ignore + elc.querySelector('#sp-fw-content').style.display = 'block'; + document.body.appendChild(elc); + //@ts-ignore + var width = elc.querySelector('#sp-fw-content').offsetWidth; + elc.remove(); + return width; + } + + /** + * Get next page link from an element + * @param {string | HTMLElement} elem nextlink element + * @returns {String} link of next page + */ + function elemToHref(elem) { + if (!elem) return undefined; + if (typeof elem === 'string' || elem.hasAttribute('href')) { + return getFullHref(elem); + } else { + // eslint-disable-next-line no-script-url + return 'javascript:void(0);'; // pseudo href + } + } + })(); + +})(_asyncToGenerator, _slicedToArray, _regeneratorRuntime, _defineProperty$1); diff --git a/assets/app.1gO23e7I.js b/assets/app.1gO23e7I.js new file mode 100644 index 000000000..555572cfc --- /dev/null +++ b/assets/app.1gO23e7I.js @@ -0,0 +1 @@ +import{R as i}from"./chunks/theme.Bw3nEMJ8.js";import{U as o,a2 as u,a3 as c,a4 as l,a5 as f,a6 as d,a7 as m,a8 as h,a9 as g,aa as A,ab as y,d as P,u as v,k as w,y as C,ac as R,ad as b,ae as E,af as S}from"./chunks/framework.qh4ipt1c.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/assets/baidu.BzHzvwzy.png b/assets/baidu.BzHzvwzy.png new file mode 100644 index 0000000000000000000000000000000000000000..819acced13b6aa28a1ae60dfa735a540e7b72296 GIT binary patch literal 67337 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
: plain text + // : Image + // : Audio and video + // : PDF (Chrome) + // body > #outerContainer:first-child + #printContainer:last-child: PDF (Firefox) + document.querySelector('body > pre:only-child, body > img:only-child, body > video:only-child, body > embed:only-child, body > #outerContainer:first-child + #printContainer:last-child')) { + return; + } + if (window.name === 'mynovelreader-iframe') { + return; + } + function CheckIframe() { + if (window.name === 'superpreloader-iframe') { + return true; + } else { + return false; + } + } + + // how to trigger lazy_load + // https://wiki.greasespot.net/Generate_Click_Events + if (CheckIframe()) { + // 搜狗,iframe里面怎么不加载js啊? + // 去掉了原版的另一种方法,因为新版本 chrome 已经支持。旧版本 chrome iframe里面 无法访问window.parent,返回undefined + var domLoaded = function domLoaded() { + //window.scroll(window.scrollX, 99999); + var mutationObserver = window.frameElement ? JSON.parse(window.frameElement.getAttribute('mutationObserver')) : null; + if (!mutationObserver) { + window.parent.postMessage('superpreloader-iframe:DOMLoaded', '*'); + } else { + var observers = mutationObserver.observers; + + /**@type {Promise} */ + var p = null; + /**@type {Array} */ + var parr = []; + if (observers) { + ['attributes', 'addedNodes', 'removedNodes'].forEach(function (key) { + var el = getAllElements(observers[key]); + if (el.length > 0) { + if (mutationObserver.relatedObj) { + //el.forEach((x) => { + // p.push(elementReady(x, key)); + //}); + parr.push(elementReady(el[el.length - 1], key)); + el[0].scrollIntoView(); + el[el.length - 1].scrollIntoView(); + } else { + parr.push(elementReady(el[el.length - 1], key)); + } + } + }); + } + if (p) { + p = Promise.all(parr); + } else { + p = Promise.resolve(undefined); + } + var timeout = mutationObserver.timeout && 0; + setTimeout(function () { + p.then(function (values) { + if (values) { + values.forEach(function (_ref) { + _ref.element; + _ref.type; + _ref.mutationList; + var observer = _ref.observer; + observer.disconnect(); + }); + } + //window.scrollTo(0, scrollLocation); + window.parent.postMessage('superpreloader-iframe:DOMLoaded', '*'); + }); + }, timeout); + } + }; + //@ts-ignore + if (window.opera) { + document.addEventListener('DOMContentLoaded', domLoaded, false); + } else { + domLoaded(); + } + return; + } + + // 在以下网站上允许在非顶层窗口上加载JS..比如猫扑之类的框架集网页. + var DIExclude = [['猫扑帖子', true, /^https?:\/\/dzh\.mop\.com\/[a-z]{3,6}\/\d{8}\/.*\.shtml$/i], ['铁血社区', true, /^https?:\/\/bbs\.tiexue\.net\/.*\.html$/i], ['铁血社区-2', true, /^https?:\/\/bbs\.qichelian\.com\/bbsqcl\.php\?fid/i], + // 像 http://so.baiduyun.me/ 内嵌的百度、Google 框架 + ['百度网盘搜索引擎-百度', true, /^https?:\/\/www\.baidu\.com\/baidu/i], ['百度网盘搜索引擎-Google', true, /^https?:\/\/74\.125\.128\.147\/custom/i]]; + + // 页面不刷新的站点 + var HashchangeSites = [{ + url: /^https?:\/\/(www|encrypted)\.google(stable)?\..{2,9}\/(webhp|#|$|\?)/, + timer: 2000, + mutationSelector: '#main' + }, + // 运营商可能会在 #wd= 前面添加 ?tn=07084049_pg + { + url: /^https?:\/\/www\.baidu\.com\/($|#wd=)/, + timer: 1000, + mutationSelector: '#wrapper_wrapper' + }, { + url: /^https?:\/\/www\.newsmth\.net/, + timer: 1000 + }]; + + // ///////// ----- End of Rules obtained from online json files -------/////////// + + // 分页导航的6个图标以及颜色设置: + var sep_icons = { + top: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWtJREFUeNrclE0rRGEUx8c1GUpRJIVIZGdhZCVr38GGhaI0ZXwCkliglChZEcvJxhdgYWOjLEUpm/EyiLzze+o8dTzdO3PljoVTv7rPc8/5d+6555xYrEhWop6boda5+6l9wjWcWpF+WIbqCJJ9hFRcDr3QAIkIhKugz5PDfkSixkphz5aiAnqgE8rgWRxGoSOPyBkswQuUwyscw4HrmFCZL8Kt/JAg7mEFPEmo4FdPwk0BUcsdzIap0TQ8qMAPuICcEjLnd+VjSjcfJNgIc/DkZGSymYGsnK9EZMrxe4MFaNGiZjC2fT5zQ3p7QDK1dR2GSljziclAvRUe8nHYVA4jjvC43NfAuk/smB2QNqcsWxKcLbAKTFnS0hWD6n27Fd6FLqiDI5iQmQ9jpiVT0sNJ6aYd7dAE3QHBbinSAX5JWWaxuLo8F35jh/bBK9Y+/r/Cl6pLcnna8NvuDGMnslpbZRpXZYT/3r4EGACZL3ZL2afNFAAAAABJRU5ErkJggg==', + bottom: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXFJREFUeNrM1c8rBGEcx/FdtCEkLqYtpdwkKSUHUhxwITdK+Z3yM2cOLnJ39Cc44SgHScmJwlFxsIdlCScO6/2t76Onp52dXTtbnno1M8+Pz84+zzMzkcg/KA3oRTzM0A4cI4VTdIUVPIM3pPGO5aABJTkGx1BqjYmFFZxW7nnBwXmXogWX6bEGc2jEIU7+kNWDUSSwZyqndSvJ3N1g2Bm0oLtB2j+w7rQP4MpqXzRT0YRaPW/BthMedYLs60HsoE2vq9BsPwAJa8XFLUa0fUrvROo/saT1Q9adGimdlt8yj6TT6Q6d2vaida9YRbtP6EqmBZC5fHA6X+AAz1bwEc6cfk9+oaZM4NoZJL70+J2hTaZtNpet041zK8yP/Mgl+rOF1emr0UM1xnAfEPyISd0Jno6vtx+QuM6PZ22lpO7dbEV2Siv6rPeIjNs1HdYC7ixfG+YBqdTVDqPIv6iIWvO7iXGUFxAqi72PraJ9IH8EGACQcYjYRd5GHwAAAABJRU5ErkJggg==', + pre: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASlJREFUeNpiYBjOoBiIrwJxFRAzUsvQViD+CMT/gfgTEPdRy9BPUENh+AsQ91JiaAuSS9HxZ3INb8Hi0v+UurwF6qL/ROBvQNxDrKFfkTT+A+JnQPwBKfJA/L9Ian7ic7kMEHcC8Q80F3UAcRsQv4by30INaUJT9weaWhSQDRUB4uVYvLkYiAWAOBopvEFBlArEPEA8G4ue9UAsATM4EYuCJUgKMtAMLoSKCwPxXCx6c1igClTQgmUZVPNrHMEGy3mgYCkCYiYgTkCSV4UZvA2IjYBYDIgvQbPvOyJTECid5wHxbyA2BuL3QLwRWYEsEJvg0IweFEU41IEMlgcxWJAEH0MxJeAsjMFEq6Jw+Br8BimVfMCTDEkG7EBcA8T3oWUJx4DVYwABBgCannnSzbgwIQAAAABJRU5ErkJggg==', + next: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT1JREFUeNrc1b1KA0EYheEl/iARFFEkKl6D0UK8CrEVrCwEexFCtBIlRWIjsfEiLL0FKzs7QUWxM2piFMUkvhPOwLAs2TGuCn7wkNll5jC7+w0Jgv9avdjAObbQn1TwCu7QwhWW4xakPIOHMKzxGCaSCm6ioXHLZ0Hqpz7KrwRPIvvNvBlM2zYyNY8cMjhDHo9fCBzErnIqKNjgRSxpvIABbOLes2MKWHfuXdhXcR2avKrJ4zGhI9gLhQbq9XaZgGO1kutIOzIHpKp7NawhjYOINSeY6lFwHacw17P6NTWHd4xqnNbcS83LObtsaCPbEW+gXUW8ODswC27xoOsn3ODDmfOGss9XLuE54jGjvPqGuuG1mFDzZIfdNHynnde7DbW1r5DwTstJHP2iE55YqD36ebXZDvr+7L/sU4ABAIpVZWnoA5GkAAAAAElFTkSuQmCC', + next_gray: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtxJREFUeNrclc9L2mEcx7/6NbVZqRVj7pIOlIUuZ1HMgv0BDcqT7JrskH13ELPBF7eTvz10HznWQBlBRIfBXIfBLmqXscvYZWPKrMNIU9Apmrr34/w6i0ovMZjw+H0+z/N8Xt+Pn/fn80hR/+WHYRhBIpFwRKPRz/F4/KnD4RB28xH0Ah4cHHyoUCjsIpFIIZPJHkml0m9Yfn2ZD78XcL1eH6rValIMCmMUtqKbD7/HbNQxaq15oxcH/lXpcmXgtnh2u/2mXC6/DqE+sSxLlUqlniE0TVPBYJAqFot6+GV9Pt+PJthms80sLS2xEonkhlgs/jgwMOBcXV3N5fP5rlCcp9bX1yWLi4uecrk8U6lUshDY3wRbLJYFGKZsNksq4N78/LwY9hOn05k5Ojqi+PzTGePxeFwZUl6vd8hkMvkPDg6sZJ2M5eXlr1wqUu2kA5JOpy2IAO+oO9fW1n5mMpk2nDjmcjkKNU25XC652Wx2pVIp65mXJ2nyjUPpqakpNZxuA8Y5T87OzsobjcYHpVKpGhsbe1CtVkXYqxQKhTdqtfqL1Wr1JpPJxxyU5Lq/vz8aCoX8TTDatYiFhF6vxx5tAJwm8OPj48m5ubmKSqUaAWwSa9eQw6JGo/luNBoNh4eHbAe0JhAINsLh8LNAIJCiudhxB+Qh2ludTifDAQLvI3AIch+Rkl8jJlrhCbOqgfoLmDepOF/BfGNra2sFFZFtvqgzMbFYjAiyp9Vqh4VC4cTJyYmQ90epIQJtHRO1bA5aRhAvdnZ2GI/H87cEz5YPgeOS2RsfHx9B7u+gOi68yQAtYX9zd3eXgZCna/s8By5ypGUUzhOISHgO9BfWXwG6chZ6IbiVc6LwnsFgGIVAepLzjk4rYW1ze3ubcbvd53fjZV2FaqGQ63fT09PDMO9i9BEoon0J9Rm/339xm3dr2f39fVLX7wFvoMVvoYWfRyIRFndD/Z/8nf0WYAA8EC1Z/ZNm4gAAAABJRU5ErkJggg==', + pre_gray: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAslJREFUeNrclTtMWmEUxz/uvTzlIUhpNMR0aGNjrNHSmHTqRJyadujQDbSGRwJUaYCmDizqUEw6ODVNGgbpYCfSpFINCQzFR9oyMXRsXFCsAXkIKNL/R7gGWxOsSdPEk5zc3O+e87vn+59zv0vIpbSJiQmyubn5LBKJpNbX11+4XC5Buxy2XYDNZiMOh2OW4ziPTCbTi8XikeHh4SsSieQTXnIxsN1uJ1ardVYgEDgPDw+V9Xqd1Go1Mcuyg7AuuVy+sra29ndgVEnGx8dnhEKhs1qtKgE/eXZ8fCzC+q3+/n6tSqVaSSQS5wM7nU5iMplmsF1XpVI5BeXt6OhIBFkGAe9SKpV/wNmzKjWbzRT6tFwuK86CUqPrkIVWPjQwMKBWKBSn4Ozv0LGxsRmRSDSFSjua0Do8TRWAS+B5+B68g/IhixCNvQPN1WjuieZsS/f1aNQ0wzBuaCqlUCQRtVr9Es1K4kVDWJNhrQjAIiqMlkqle804FnkjBoOhEzv4vrGxkW2ALRaLFrq+QoAV2nE8tLe3dzEYDE5vb2939vX1PcBkiKVSaQ1jForFYq+NRqMum83ebsYzmJq7sGu4xhkKxsDfB/AxnO860ev1oeXlZU8gEMgmk0kFqmw8o9dUKiWfn58vhMPh54h7S+OpQXNSLBYfejyeR1yzw9dbRon09PS8W11dnfL5fJl8Pk+0Wi3hk5vyCNBY4vV6f0Im9+joKJNOp818o8G70ah4aWnpIzSKYCa/dXd3B+PxuHNycjKzs7NzAms1+qFQy+VydDRz0WjUpdPp3tB8TFM0FAqFGxXPzc19plJrNJqraMoXt9tNt3Suc+Tg4ICeJfmFhQVLoVAwoKG7fr//B8cHAL6Fy9ZFDinaG/r5w77ya8y/OhEvKRhjtIup2YMTeBb3mXY53HnAmNkP+/v7NzHTTwAO4f79f/ud/RJgAOLcRNZqLojMAAAAAElFTkSuQmCC', + text_span_style: 'color:#595959!important;' + }; + + // 悬浮窗的状态颜色. + var FWKG_color = { + loading: '#8B00E8', + // 读取中状态 + prefetcher: '#5564AF', + // 预读状态 + autopager: '#038B00', + // 翻页状态 + Apause: '#B7B700', + // 翻页状态(暂停). + Astop: '#A00000', + // 翻页状态(停止)(翻页完成,或者被异常停止.)(无法再开启) + dot: '#00FF05' // 读取完后,会显示一个小点,那么小点的颜色. + }; + + // 上一页关键字 + var prePageKey = ['上一页', '上一頁', '上1页', '上1頁', '上页', '上頁', '翻上頁', '翻上页', '上一张', '上一張', '上一幅', '上一章', '上一节', '上一節', '上一篇', '前一页', '前一頁', '后退', '後退', '上篇', 'previous', 'previous Page', '前へ', '前のページ']; + + // 下一页关键字 + var nextPageKey = ['下一页', '下一頁', '下1页', '下1頁', '下页', '下页 ›', '下頁', '翻页', '翻頁', '翻下頁', '翻下页', '下一张', '下一張', '下一幅', '下一章', '下一节', '下一節', '下一篇', '前进', '下篇', '后页', '往后', 'Next', 'Next Page', '次へ', '次のページ', '次のページ »', '下一页 →', '下一頁 →', '下1页 →', '下1頁 →', '下页 →', '下頁 →', '翻页 →', '翻頁 →', '翻下頁 →', '翻下页 →', '下一张 →', '下一張 →', '下一幅 →', '下一章 →', '下一节 →', '下一節 →', '下一篇 →', '前进 →', '下篇 →', '后页 →', '往后 →', 'Next →', 'Next Page →', '次へ →', '次のページ →', '下一页 »', '下一頁 »', '下1页 »', '下1頁 »', '下页 »', '下頁 »', '翻页 »', '翻頁 »', '翻下頁 »', '翻下页 »', '下一张 »', '下一張 »', '下一幅 »', '下一章 »', '下一节 »', '下一節 »', '下一篇 »', '前进 »', '下篇 »', '后页 »', '往后 »', 'Next »', 'Next Page »', '次へ »', '后一页', '後一頁', '下一页 ›', '下一頁 ›', '下1页 ›', '下1頁 ›', '下頁 ›', '翻页 ›', '翻頁 ›', '翻下頁 ›', '翻下页 ›', '下一张 ›', '下一張 ›', '下一幅 ›', '下一章 ›', '下一节 ›', '下一節 ›', '下一篇 ›', '前进 ›', '下篇 ›', '后页 ›', '往后 ›', 'Next ›', 'Next >', 'Next Page ›', '次へ ›', '次のページ ›', '»', '→', '早期文章→']; + // THX to https://greasyfork.org/en/forum/discussion/39361/x + // 出在自动翻页信息附加显示真实相对页面信息,一般能智能识别出来。如果还有站点不能识别,可以把地址的特征字符串加到下面 + // 最好不要乱加,一些不规律的站点显示出来的数字也没有意义 + var REALPAGE_SITE_PATTERN = ['search?', 'search_', 'forum', 'thread']; + + // ------------------------下面的不要管他----------------- + /// //////////////////////////////////////////////////////////////// + // eslint-disable-next-line prettier/prettier + Promise.all([loadSettings(), getServerIp(location.hostname)]).then(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + values = _ref3[0], + serverIp = _ref3[1]; + var jsonRule = values.jsonRule; + var prefs = values.prefs, + SITEINFO_D = values.SITEINFO_D, + autoMatch = values.autoMatch; + values.version; + var blackList = values.blackList; + if (prefs.debug) { + logger.setLevel('debug'); + } else { + logger.setLevel(5); + } + logger.debug("[Super-preloader]", 'Script Manager: ', JSON.stringify({ + name: SCRIPT_MANAGER.name, + version: SCRIPT_MANAGER.version || 'unknown' + })); + logger.debug("[Super-preloader]", 'Browser: ', JSON.stringify(BROWSER)); + logger.debug("[Super-preloader]", `Server ip: ', ${serverIp}`); + var setup = function setup() { + var d = document; + + /** + * + * @param {string} s s + * @returns {HTMLInputElement} elem + */ + var $ = function $(s) { + // @ts-ignore + return d.getElementById('sp-prefs-' + s); + }; + if ($('setup')) return; + var styleNode = addStyle(spcss['sp-prefs-setup']); + if (prefs.customCSS.length > 0) { + addStyle(prefs.customCSS); + } + var div = d.createElement('div'); + div.id = 'sp-prefs-setup'; + div.style.position = 'fixed'; + if (prefs.FW_position !== 2) { + div.style.right = '38px'; + div.style.top = '20px'; + } else { + div.style.right = `${prefs.FW_offset[1]}px`; + div.style.top = `${prefs.FW_offset[0]}px`; + } + var nextUpdateDate = prefs.disableBuiltinSubscriptionRules ? 'N/A' : jsonRuleLoader.expire.toDateString(); + div.innerHTML = template['sp-prefs']({ + prefs, + scriptInfo, + nextUpdateDate: nextUpdateDate + }); + d.body.appendChild(div); + var close = function close() { + if (styleNode) { + styleNode.parentNode.removeChild(styleNode); + } + var div = $('setup'); + div.parentNode.removeChild(div); + }; + var on = function on(node, e, f) { + node.addEventListener(e, f, false); + }; + on($('ok'), 'click', function () { + Object.keys(factorySettings.prefs).forEach(function (key) { + var el = $(key); + if (el !== null) { + prefs[key] = getProperty(el); + } + }); + if (prefs.debug) { + logger.setLevel('debug'); + } else { + logger.setLevel(5); + } + autoMatch.keyMatch = !$('autoMatchKeyMatch').checked; + SITEINFO_D.useiframe = !!$('SITEINFO_D-useiframe').checked; + SITEINFO_D.autopager.enable = !!$('SITEINFO_D-a_enable').checked; + SITEINFO_D.autopager.force_enable = !!$('SITEINFO_D-a_force_enable').checked; + autoMatch.useiframe = SITEINFO_D.useiframe; + saveSettings({ + prefs, + SITEINFO_D, + autoMatch + }).then(function () { + SP.loadSetting(); + close(); + location.reload(); + }); + }); + on($('reset'), 'click', function () { + $('setup').innerHTML = template.spinner.reset; + addStyle(spcss['sp-prefs-spinner']); + resetSettings().then(function () { + location.reload(); + }); + }); + if (prefs.disableBuiltinSubscriptionRules) { + $('updaterule').setAttribute('disabled', ''); + } + on($('updaterule'), 'click', function () { + if (prefs.disableBuiltinSubscriptionRules) return; + $('setup').innerHTML = template.spinner.update; + addStyle(spcss['sp-prefs-spinner']); + jsonRuleLoader.updateRule(true).then(function () { + jsonRule = jsonRuleLoader.getRule(); + SP.loadSetting(); + close(); + location.reload(); + }); + }); + on($('cancel'), 'click', close); + $('debug').checked = logger.getLevel() === logger.levels.DEBUG; + $('ChineseUI').checked = prefs.ChineseUI; + $('floatWindow').checked = prefs.floatWindow; + $('enableHistory').checked = prefs.enableHistory; + // $('forceTargetWindow').checked = prefs.forceTargetWindow; + $('dblclick_pause').checked = prefs.dblclick_pause; + $('SITEINFO_D-useiframe').checked = SITEINFO_D.useiframe; + $('SITEINFO_D-a_enable').checked = SITEINFO_D.autopager.enable; + $('arrowKeyPage').checked = prefs.arrowKeyPage; + $('SITEINFO_D-a_force_enable').checked = SITEINFO_D.autopager.force_enable; + $('excludes').value = prefs.excludes; + $('custom_siteinfo').value = prefs.custom_siteinfo; + $('customCSS').value = prefs.customCSS; + $('disableBuiltinRules').checked = prefs.disableBuiltinRules; + $('disableBuiltinSubscriptionRules').checked = prefs.disableBuiltinSubscriptionRules; + $('autoMatchKeyMatch').checked = !autoMatch.keyMatch; + }; + + // main functions + var SP = { + spinit: function spinit() { + if (document.body.getAttribute('name') === 'MyNovelReader') { + return; + } + this.loadSetting(); + if (userLang === 'zh_CN') { + GM.registerMenuCommand('Super_preloaderPlus_one_New 设置', setup); + } else { + GM.registerMenuCommand('Super_preloaderPlus_one_New Settings', setup); + } + + // 查找是否是页面不刷新的站点 + var locationHref = location.href; + var hashSite = _find(HashchangeSites, function (x) { + return toRE(x.url).test(locationHref); + }); + if (hashSite) { + isHashchangeSite = true; + hashchangeTimer = hashSite.timer; + logger.debug("[Super-preloader]", 'This site does not refresh the page.', hashSite); + var p1 = new Promise(function (resolve, reject) { + setTimeout(resolve, hashchangeTimer); + }); + p1.then(function (values) { + init(window, document); + }); + } else { + init(window, document); + } + // 分辨率 高度 > 宽度 的是手机 + if (window.screen.height > window.screen.width) { + addStyle('div.sp-separator { min-width:auto !important; }'); + } + }, + loadSetting: function loadSetting() { + var a_enable = SITEINFO_D.autopager.enable; + if (a_enable !== undefined) { + SITEINFO_D.autopager.enable = a_enable; + } + var loadDblclickPause = function loadDblclickPause(reload) { + var dblclickPause = prefs.dblclick_pause; + if (dblclickPause) { + prefs.mouseA = false; + prefs.Pbutton = [0, 0, 0]; + } + if (reload) location.reload(); + }; + var loadCustomSiteInfo = function loadCustomSiteInfo() { + var userRules; + try { + // eslint-disable-next-line no-new-func + userRules = new Function('', 'return ' + prefs.custom_siteinfo)(); + } catch (e) { + logger.error("[Super-preloader]", 'Custom site rule error:', prefs.custom_siteinfo); + } + if (_isArray(userRules)) { + SSRules = SSRules.concat(userRules); + } + }; + loadDblclickPause(); + loadCustomSiteInfo(); + } + }; + SP.spinit(); + /** + * + * @param {Window} window window + * @param {Document} document document + * @returns {void} + */ + function init(window, document) { + var startTime = new Date(); + // eslint-disable-next-line valid-jsdoc + /**@type {(...rest:any[])=>void} */ + var nullFn = function nullFn() {}; // 空函数. + var url = document.location.href.replace(/#.*$/, ''); // url 去掉hash + var cplink = url; // 翻上来的最近的页面的url; + document.domain; // 取得域名. + var domain_port = url.match(/https?:\/\/([^\/]+)/)[1]; // 端口和域名,用来验证是否跨域. + + // 新加的,以示区别 + var remove = []; // 需要移除的事件 + + // 悬浮窗 + var floatWO = { + updateColor: nullFn, + loadedIcon: nullFn, + CmodeIcon: nullFn + }; + /** + * + * @param {IRuntimeRule} SSS a rule + * @returns {void} + */ + function floatWindow(SSS) { + // inject css + addStyle(spcss['sp-fw']); + + // create container + var div = document.createElement('div'); + div.id = 'sp-fw-container'; + div.innerHTML = template.floatWindow(); + document.body.appendChild(div); + + // helper function to get element + /** + * + * @param {string} id id + * @returns {HTMLInputElement} return + * */ + function $(id) { + //@ts-ignore + return document.getElementById(id); + } + var rect = $('sp-fw-rect'); // 悬浮窗的小正方形,用颜色描述当前的状态. + var spanel = $('sp-fw-content'); // 设置面板. + + // 设置面板显隐 + var spanelc = { + show: function show() { + spanel.style.display = 'block'; + }, + hide: function hide() { + spanel.style.display = 'none'; + } + }; + spanelc.hide(); + var rectt1, rectt2; + rect.addEventListener('mouseover', function (e) { + rectt1 = setTimeout(spanelc.show, 100); + }, false); + rect.addEventListener('mouseleave', function (e) { + clearTimeout(rectt1); + }, false); + div.addEventListener('mouseover', function (e) { + clearTimeout(rectt2); + }, false); + div.addEventListener('mouseleave', function (e) { + // Firefox bug + // https://stackoverflow.com/questions/46831247/select-triggers-mouseleave-event-on-parent-element-in-mozilla-firefox + if (e.relatedTarget === null) return; + rectt2 = setTimeout(spanelc.hide, 288); + }, false); + var dot = $('sp-fw-dot'); // 载入完成后,显示的小点 + dot.style.backgroundColor = FWKG_color.dot; + var cur_mode = $('sp-fw-cur-mode'); // 当载入状态时,用来描述当前是翻页模式,还是预读模式. + cur_mode.style.backgroundColor = SSS.a_enable ? FWKG_color.autopager : FWKG_color.prefetcher; + var a_enable = $('sp-fw-a_enable'); // 启用翻页模式 + var autopager_field = $('sp-fw-autopager-field'); // 翻页设置区域 + + // 预读设置 + var useiframe = $('sp-fw-useiframe'); + var viewcontent = $('sp-fw-viewcontent'); + + // 翻页设置 + var a_useiframe = $('sp-fw-a_useiframe'); + var a_iloaded = $('sp-fw-a_iloaded'); + var a_itimeout = $('sp-fw-a_itimeout'); + var a_manualA = $('sp-fw-a_manualA'); + var a_remain = $('sp-fw-a_remain'); + var a_maxpage = $('sp-fw-a_maxpage'); + var a_separator = $('sp-fw-a_separator'); + var a_ipages_0 = $('sp-fw-a_ipages_0'); + var a_ipages_1 = $('sp-fw-a_ipages_1'); + var a_force = $('sp-fw-a_force'); + + // newIframe 输入框的点击 + var a_newIframe = $('sp-fw-a_newIframe'); + a_newIframe.addEventListener('click', function () { + a_useiframe.checked = a_newIframe.checked; + }, false); + var a_starti = $('sp-fw-a_starti'); // 开始立即翻页 + a_starti.addEventListener('click', function (e) { + //@ts-ignore + if (e.currentTarget.disabled) return; + var value = parseInt(a_ipages_1.value); + if (isNaN(value) || value < 0) { + value = SSS.a_ipages[1]; + //@ts-ignore + a_ipages_1.value = value; + } + autoPO.startipages(value); + }, false); + + // 总开关 + var enable = $('sp-fw-enable'); + $('sp-fw-setup').addEventListener('click', setup, false); + + // 保存设置按钮. + var savebutton = $('sp-fw-savebutton'); + savebutton.addEventListener('click', function (e) { + var value = { + Rurl: SSS.Rurl, + useiframe: getProperty(useiframe), + viewcontent: getProperty(viewcontent), + enable: getProperty(enable) + }; + if (SSS.a_enable !== undefined) { + /** @type {(s:HTMLElement)=>number} */ + //@ts-ignore + var getPropertyNumber = getProperty; + value.a_enable = getProperty(a_enable) === 'autopager'; + value.a_useiframe = getProperty(a_useiframe); + value.a_newIframe = getProperty(a_newIframe); + value.a_iloaded = getProperty(a_iloaded); + value.a_manualA = getProperty(a_manualA); + value.a_force = getProperty(a_force); + var t_a_itimeout = getPropertyNumber(a_itimeout); + value.a_itimeout = isNaN(t_a_itimeout) ? SSS.a_itimeout : t_a_itimeout >= 0 ? t_a_itimeout : 0; + var t_a_remain = getPropertyNumber(a_remain); + value.a_remain = isNaN(t_a_remain) ? SSS.a_remain : Number(t_a_remain); + var t_a_maxpage = getPropertyNumber(a_maxpage); + value.a_maxpage = isNaN(t_a_maxpage) ? SSS.a_maxpage : t_a_maxpage >= 1 ? t_a_maxpage : 1; + var t_a_ipages_1 = getPropertyNumber(a_ipages_1); + value.a_ipages = [getProperty(a_ipages_0), isNaN(t_a_ipages_1) ? SSS.a_ipages[1] : t_a_ipages_1 >= 0 ? t_a_ipages_1 : 1]; + value.a_separator = getProperty(a_separator); + } + saveLocalSetting(value); + if (e.shiftKey ? !prefs.FW_RAS : prefs.FW_RAS) { + // 按住shift键,执行反向操作. + setTimeout(function () { + location.reload(); + }, 1); + } + }, false); + + // 载入翻页设置. + if (SSS.a_enable === undefined) { + // 未定义翻页功能. + a_enable.disabled = true; + autopager_field.style.display = 'none'; + } else { + setProperty(a_enable, SSS.a_enable ? 'autopager' : 'preloader'); + setProperty(a_useiframe, SSS.a_useiframe); + setProperty(a_newIframe, SSS.a_newIframe); + setProperty(a_iloaded, SSS.a_iloaded); + setProperty(a_itimeout, SSS.a_itimeout); + setProperty(a_manualA, SSS.a_manualA); + setProperty(a_force, SSS.a_force); + setProperty(a_remain, SSS.a_remain); + setProperty(a_maxpage, SSS.a_maxpage); + setProperty(a_separator, SSS.a_separator); + setProperty(a_ipages_0, SSS.a_ipages[0]); + setProperty(a_ipages_1, SSS.a_ipages[1]); + } + if (!SSS.a_enable) { + // 当前不是翻页模式,禁用立即翻页按钮. + a_starti.disabled = true; + } + if (!SSS.hasRule) { + // 如果没有高级规则,那么此项不允许操作. + a_force.disabled = true; + } + + // 载入预读设置. + setProperty(useiframe, SSS.useiframe); + setProperty(viewcontent, SSS.viewcontent); + + // 总开关 + setProperty(enable, SSS.enable); + var FWKG_state = { + loading: '读取中状态', + prefetcher: '预读状态', + autopager: '翻页状态', + Apause: '翻页状态(暂停)', + Astop: '翻页状态(停止)(翻页完成,或者被异常停止)(无法再开启)', + dot: '读取完后' + }; + if (userLang !== 'zh_CN') { + FWKG_state.loading = 'Loading'; + FWKG_state.prefetcher = 'Prefetching'; + FWKG_state.autopager = 'Autopagger (Running)'; + FWKG_state.Apause = 'Autopagger (Pause)'; + FWKG_state.Astop = 'Autopagger (Stop)'; + FWKG_state.dot = 'Finish loading'; + } + floatWO = { + updateColor: function updateColor(state) { + rect.style.backgroundColor = FWKG_color[state]; + rect.setAttribute('title', FWKG_state[state]); + }, + loadedIcon: function loadedIcon(command) { + dot.style.display = command == 'show' ? 'block' : 'none'; + }, + CmodeIcon: function CmodeIcon(command) { + cur_mode.style.display = command == 'show' ? 'block' : 'none'; + } + }; + var vertical = parseInt(prefs.FW_offset[0] + '', 10); + var horiz = parseInt(prefs.FW_offset[1] + '', 10); + var FW_position = prefs.FW_position; + + // 非opera用fixed定位. + div.style.position = 'fixed'; + switch (FW_position) { + case 1: + div.style.top = vertical + 'px'; + div.style.left = horiz + 'px'; + break; + case 2: + div.style.top = vertical + 'px'; + div.style.right = horiz + 'px'; + break; + case 3: + div.style.bottom = vertical + 'px'; + div.style.right = horiz + 'px'; + break; + case 4: + div.style.bottom = vertical + 'px'; + div.style.left = horiz + 'px'; + break; + } + } + function sp_transition(start, end) { + //@ts-ignore + var TweenF = sp_transition.TweenF; + if (!TweenF) { + TweenF = Tween[TweenM[prefs.s_method]]; + TweenF = TweenF[TweenEase[prefs.s_ease]] || TweenF; + //@ts-ignore + sp_transition.TweenF = TweenF; + } + var frameSpeed = 1000 / prefs.s_FPS; + var t = 0; // 次数,开始 + var b = start; // 开始 + var c = end - start; // 结束 + var d = Math.ceil(prefs.s_duration / frameSpeed); // 次数,结束 + + var x = window.scrollX; + function transition() { + var y = Math.ceil(TweenF(t, b, c, d)); + window.scroll(x, y); + if (t < d) { + t++; + setTimeout(transition, frameSpeed); + } + } + transition(); + } + function sepHandler(e) { + e.stopPropagation(); + var div = e.currentTarget; + var target = e.target; + function getRelativeDiv(which) { + var id = div.id; + id = id.replace(/(sp-separator-)(.+)/, function (a, b, c) { + return b + String(Number(c) + (which == 'pre' ? -1 : 1)); + }); + return id ? document.getElementById(id) : null; + } + function scrollIt(a, b) { + // a=a!==undefined? a : window.scrollY; + if (prefs.sepT) { + sp_transition(a, b); + } else { + window.scroll(window.scrollX, b); + } + } + var o_scrollY, divS; + switch (target.className) { + case 'sp-sp-gotop': + scrollIt(window.scrollY, 0); + break; + case 'sp-sp-gopre': + { + var prediv = getRelativeDiv('pre'); + if (!prediv) return; + o_scrollY = window.scrollY; + var preDS = prediv.getBoundingClientRect().top; + if (prefs.sepP) { + divS = div.getBoundingClientRect().top; + preDS = o_scrollY - (divS - preDS); + } else { + preDS += o_scrollY - 6; + } + scrollIt(o_scrollY, preDS); + break; + } + case 'sp-sp-gonext': + { + var nextdiv = getRelativeDiv('next'); + if (!nextdiv) return; + o_scrollY = window.scrollY; + var nextDS = nextdiv.getBoundingClientRect().top; + if (prefs.sepP) { + divS = div.getBoundingClientRect().top; + nextDS = o_scrollY + (-divS + nextDS); + } else { + nextDS += o_scrollY - 6; + } + scrollIt(o_scrollY, nextDS); + break; + } + case 'sp-sp-gobottom': + scrollIt(window.scrollY, Math.max(document.documentElement.scrollHeight, document.body.scrollHeight)); + break; + } + } + + // autopager + var autoPO = { + /**@type {(value?:number)=>void} f*/ + startipages: nullFn + }; + var hashchangeAdded = false; + /** + * @param {IRuntimeRule} SSS a rule + * @param {*} floatWO float window object + * @returns {void} + */ + function autopager(SSS, floatWO) { + // return; + // 更新悬浮窗的颜色. + floatWO.updateColor('autopager'); + + // 获取插入位置节点. + var insertPoint; + var pageElement; + var insertMode; + if (SSS.a_HT_insert) { + insertPoint = getElement(SSS.a_HT_insert[0]); + insertMode = SSS.a_HT_insert[1]; + } else { + pageElement = getAllElements(SSS.a_pageElement, document, document, null, cplink); + if (pageElement.length > 0) { + var pELast = pageElement[pageElement.length - 1]; + insertPoint = pELast.nextSibling ? pELast.nextSibling : pELast.parentNode.appendChild(document.createTextNode(' ')); + } + insertMode = -1; + } + if (insertPoint) { + logger.debug("[Super-preloader]", 'Verify that the insertion position node can be found: success', insertPoint); + } else { + logger.error("[Super-preloader]", 'Verify that the insertion position node can be found: failed. JS execution stopped', SSS.a_HT_insert ? SSS.a_HT_insert[0] : ''); + floatWO.updateColor('Astop'); + return; + } + if (window.navigator.language != 'en') { + logger.debug("[Super-preloader]", 'Language: ', window.navigator.language); + } + if (pageElement === undefined) { + pageElement = getAllElements(SSS.a_pageElement); + } + if (pageElement.length > 0) { + logger.debug("[Super-preloader]", 'Verify that the main element can be found: success', pageElement); + } else { + logger.error("[Super-preloader]", 'Verify that the main element can be found: failure', SSS.a_pageElement); + floatWO.updateColor('Astop'); + return; + } + if (SSS.a_stylish) { + // 插入自定义样式 + addStyle(SSS.a_stylish, 'Super_preloader-style'); + } + + /** @type {Node} */ + var insertPointP; + if (insertMode != 2) { + insertPointP = insertPoint.parentNode; + } + var addIntoDoc; + if (insertMode == -1 || insertMode == 1) { + addIntoDoc = function addIntoDoc(obj) { + return insertPointP.insertBefore(obj, insertPoint); + }; + } else if (insertMode == 2) { + addIntoDoc = function addIntoDoc(obj) { + return insertPoint.appendChild(obj); + }; + } else if (insertMode == 0) { + addIntoDoc = function addIntoDoc(obj) { + return insertPointP.insertBefore(obj, insertPoint.nextSibling); + }; + } + + /** @type {HTMLDocument} */ + var doc, win; + function XHRLoaded(res) { + var str = res.data; + doc = win = createDocumentByString(str); + if (!doc) { + logger.error("[Super-preloader]", 'Document object creation failed'); + removeL(); + return; + } + floatWO.updateColor('autopager'); + floatWO.CmodeIcon('hide'); + floatWO.loadedIcon('show'); + working = false; + scroll(); + } + function XHRNotLoaded(res) { + logger.error("[Super-preloader]", 'XHR is failed to be loaded'); + logger.error("[Super-preloader]", res); + removeL(); + } + function removeL(isRemoveAddPage) { + logger.debug("[Super-preloader]", 'Remove various event listeners'); + floatWO.updateColor('Astop'); + var _remove = remove; + for (var i = 0, ii = _remove.length; i < ii; i++) { + _remove[i](); + } + if (isRemoveAddPage) { + var separator = document.querySelector('.sp-separator'); + if (separator) { + var insertBefore = insertPoint; + if (insertMode == 2) { + var l = insertPoint.children.length; + if (l > 0) { + insertBefore = insertPoint.children[l - 1]; + } + } + var range = document.createRange(); + range.setStartBefore(separator); + range.setEndBefore(insertBefore); + range.deleteContents(); + range.detach(); + if (insertMode == 2) { + // 还需要额外移除? + insertPoint.removeChild(insertBefore); + } + } + var style = document.getElementById('Super_preloader-style'); + if (style) { + style.parentNode.removeChild(style); + } + } + } + if (isHashchangeSite && !hashchangeAdded) { + window.addEventListener('hashchange', onhashChange, false); + hashchangeAdded = true; + logger.debug("[Super-preloader]", 'Successfully added hashchange event'); + } + function onhashChange(event) { + logger.debug("[Super-preloader]", 'hashchange event triggered'); + removeL(true); + setTimeout(function () { + nextlinkElem = getElement(SSS.nextLink || 'auto;'); + nextlink = elemToHref(nextlinkElem); + // preLink = getElement(SSS.preLink || 'auto;'); + autopager(SSS, floatWO); + }, hashchangeTimer); + } + + /** @type {HTMLIFrameElement} */ + var iframe; + var messageR; + + /** + * Event handler of iframe loaded + * @param {IFrameLoadedEvent} event Iframe loaded event + * @returns {void} + */ + function iframeLoaded(event) { + var iframe = event.currentTarget; + var body = iframe.contentDocument.body; + if (body && body.firstChild) { + setTimeout(function () { + doc = iframe.contentDocument; + removeScripts(doc, SSS.a_scriptFilter); + win = iframe.contentWindow || doc; + floatWO.updateColor('autopager'); + floatWO.CmodeIcon('hide'); + floatWO.loadedIcon('show'); + working = false; + scroll(); + }, SSS.a_itimeout); + } + } + + /** + * Load next page in iframe + * @param {string} link Link of the next page + * @returns {void} + */ + function iframeRequest(link) { + messageR = false; + if (SSS.a_newIframe || !iframe) { + var insertLoc = null; + var i = document.createElement('iframe'); + iframe = i; + i.name = 'superpreloader-iframe'; + i.width = '100%'; + i.height = '0'; + i.frameBorder = '0'; + i.style.cssText = '\ margin:0!important;\ padding:0!important;\ visibility:hidden!important;\ '; - if (SSS.a_sandbox != false) { - //sandbox is readonly property - //i.sandbox = SSS.a_sandbox; - i.setAttribute('sandbox', ''); - } - i.src = link; - if (SSS.a_mutationObserver) { - i.setAttribute('mutationObserver', JSON.stringify(SSS.a_mutationObserver)); - if (SSS.a_mutationObserver.relatedObj) { - insertLoc = getAllElements(SSS.a_mutationObserver.relatedObj); - if (insertLoc.length > 0) { - insertLoc = insertLoc[0]; - } else { - insertLoc = null; - } - } - } - if (SSS.a_iloaded) { - i.addEventListener('load', iframeLoaded, false); - remove.push(function () { - i.removeEventListener('load', iframeLoaded, false); - }); - } else { - var messagehandler = function messagehandler(e) { - if (!messageR && e.data == 'superpreloader-iframe:DOMLoaded') { - messageR = true; - iframeLoaded.call(i, { - currentTarget: i - }); - if (SSS.a_newIframe) { - window.removeEventListener('message', messagehandler, false); - } - } - }; - window.addEventListener('message', messagehandler, false); - remove.push(function () { - window.removeEventListener('message', messagehandler, false); - }); - } - if (insertLoc) { - insertLoc.parentNode.insertBefore(i, insertLoc); - } else { - document.body.appendChild(i); - } - } else { - iframe.src = link; - iframe.contentDocument.location.replace(link); - if (SSS.a_reload) { - iframe.contentWindow.location.reload(); - } - } - } - - /** - * Send XHR request to obtain next page content - * @param {string} link Link of next page - * @returns {void} - */ - function XHRrequest(link) { - var reqConf = { - headers: SSS.a_headers ? SSS.a_headers : { - Referer: cplink - } - }; - got.get(link, reqConf).then( - /** - * Handling of XHR request - * @param {ResponseObject} res Response of got - * @returns {void} - */ - function (res) { - if (res.finalUrl === cplink) { - logger.debug("[Super-preloader]", 'Same final address'); - XHRNotLoaded(res); - } else { - XHRLoaded(res); - logger.debug("[Super-preloader]", 'XHRrequest complete'); - } - }).catch( - /** - * Error handling of XHR request - * @param {ResponseObject} res Response of got - * @returns {void} - */ - function (res) { - XHRNotLoaded(res); - }); - } - var working; - function doRequest() { - working = true; - floatWO.updateColor('loading'); - floatWO.CmodeIcon('show'); - logger.debug("[Super-preloader]", 'Get next page', SSS.a_useiframe ? '(iframe method)' : '(XHR method)', nextlink); - pagedLinks.push(nextlink); - if (SSS.a_useiframe) { - iframeRequest(nextlink); - } else { - if (/(?:http|\/).*/.test(nextlink)) { - // request next page by XHR - XHRrequest(nextlink); - } else { - logger.error("[Super-preloader]", 'Lazyload or Invalid nextLinkElem', nextlinkElem); - } - } - } - var _SSS$a_ipages = _slicedToArray(SSS.a_ipages, 2), - _SSS$a_ipages$ = _SSS$a_ipages[0], - ipagesmode = _SSS$a_ipages$ === void 0 ? false : _SSS$a_ipages$, - _SSS$a_ipages$2 = _SSS$a_ipages[1], - ipagesnumber = _SSS$a_ipages$2 === void 0 ? 2 : _SSS$a_ipages$2; - if (ipagesmode && ipagesnumber === 0) { - ipagesnumber = Number.MAX_SAFE_INTEGER; - } - var scrollDo = nullFn; - var afterInsertDo = nullFn; - if (prefs.Aplus) { - afterInsertDo = doRequest; - doRequest(); - } else { - scrollDo = doRequest; - if (ipagesmode) doRequest(); - } - var manualDiv; - function manualAdiv() { - if (!manualDiv) { - addStyle(spcss['sp-separator']); - var spage = /*#__PURE__*/function () { - var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(el) { - var value; - return _regeneratorRuntime.wrap(function _callee$(_context) { - while (1) switch (_context.prev = _context.next) { - case 0: - if (!doc) { - _context.next = 7; - break; - } - value = Number(el.value); - if (isNaN(value) || value < 1) { - el.value = value = 1; - } - ipagesmode = true; - ipagesnumber = value + paged; - _context.next = 7; - return insertedIntoDoc(); - case 7: - case "end": - return _context.stop(); - } - }, _callee); - })); - return function spage(_x) { - return _ref4.apply(this, arguments); - }; - }(); - var div = createDOM('div', { - attr: { - id: 'sp-sp-manualdiv', - class: 'sp-separator' - }, - children: [createDOM('span', { - attr: { - class: 'sp-md-span' - }, - innerHTML: userLang === 'zh_CN' ? '下' : 'Next' - }), createDOM('input', { - attr: { - type: 'number', - value: 1, - min: 1, - title: userLang === 'zh_CN' ? '输入你想要拼接的页数(必须>=1),然后按回车.' : 'Type number of pageringzing and press enter', - id: 'sp-sp-md-number' - }, - eventListener: [{ - type: 'keyup', - listener: function listener(e) { - if (e.keyCode == 13) { - // 回车 - spage(e.target); - } - } - }] - }), createDOM('span', { - attr: { - class: 'sp-md-span' - }, - innerHTML: userLang === 'zh_CN' ? '页' : 'page' - }), createDOM('img', { - attr: { - id: 'sp-sp-md-imgnext', - src: _sep_icons.next - } - }), createDOM('div', { - attr: { - class: 'sp-someinfo', - id: 'sp-separator-hover' - }, - children: [createDOM('a', { - attr: { - href: 'https://github.com/machsix/Super-preloader', - target: '_blank' - }, - innerHTML: 'Powered by Super-preloader' - })] - })] - }); - manualDiv = div; - document.body.appendChild(div); - div.addEventListener('click', function (e) { - //@ts-ignore - if (e.target.id === 'sp-sp-md-number') return; - spage(document.getElementById('sp-sp-md-number')).then(function () { - manualDiv.remove(); - }); - }, false); - } - addIntoDoc(manualDiv); - //manualDiv.style.display = "block"; - } - function beforeInsertIntoDoc() { - return _beforeInsertIntoDoc.apply(this, arguments); - } - function _beforeInsertIntoDoc() { - _beforeInsertIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() { - return _regeneratorRuntime.wrap(function _callee3$(_context3) { - while (1) switch (_context3.prev = _context3.next) { - case 0: - working = true; - if (!(SSS.a_manualA && !ipagesmode)) { - _context3.next = 6; - break; - } - // 显示手动翻页触发条. - logger.debug("[Super-preloader]", 'Manual stitching'); - manualAdiv(); - _context3.next = 9; - break; - case 6: - // 直接拼接. - logger.debug("[Super-preloader]", 'Direct stitching'); - _context3.next = 9; - return insertedIntoDoc(); - case 9: - case "end": - return _context3.stop(); - } - }, _callee3); - })); - return _beforeInsertIntoDoc.apply(this, arguments); - } - var sepStyle; - //looks like goNextImg is useless here. - //const goNextImg = [false]; - var sNumber = prefs.sepStartN; - var _sep_icons = sep_icons; - var curNumber = sNumber; - function createSep(lastUrl, currentUrl, nextUrl) { - var div = document.createElement('div'); - if (SSS.a_separator) { - if (!sepStyle) { - sepStyle = addStyle(spcss['sp-separator']); - if (prefs.customCSS.length > 0) addStyle(prefs.customCSS); - } - div.className = 'sp-separator'; - div.id = 'sp-separator-' + curNumber; - div.addEventListener('click', sepHandler, false); - var pageStr = ''; - if (userLang === 'zh_CN') { - pageStr = '第 ' + curNumber + ' 页' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); - } else { - pageStr = 'Page ' + curNumber + '' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); - } - div.appendChild(createDOM('a', { - attr: { - class: 'sp-sp-nextlink', - target: '_blank', - href: currentUrl, - title: currentUrl - }, - innerHTML: pageStr - })); - div.appendChild(createDOM('img', { - attr: { - src: _sep_icons.top, - class: 'sp-sp-gotop', - alt: userLang === 'zh_CN' ? '去到顶部' : 'To Top', - title: userLang === 'zh_CN' ? '去到顶部' : 'To Top' - } - })); - div.appendChild(createDOM('img', { - attr: { - src: curNumber == sNumber ? _sep_icons.pre_gray : _sep_icons.pre, - class: 'sp-sp-gopre', - title: userLang === 'zh_CN' ? '上滚一页' : 'Scroll up a page' - } - })); - var i_next = createDOM('img', { - attr: { - src: _sep_icons.next_gray, - class: 'sp-sp-gonext', - title: userLang === 'zh_CN' ? '下滚一页' : 'Scroll down a page' - } - }); - - //if (goNextImg.length == 2) { - // goNextImg.shift(); - //} - //goNextImg.push(i_next); - div.appendChild(i_next); - div.appendChild(createDOM('img', { - attr: { - src: _sep_icons.bottom, - class: 'sp-sp-gobottom', - alt: userLang === 'zh_CN' ? '去到底部' : 'To Bottom', - title: userLang === 'zh_CN' ? '去到底部' : 'To Bottom' - } - })); - div.appendChild(createDOM('div', { - attr: { - class: 'sp-someinfo', - id: 'sp-separator-hover' - }, - children: [createDOM('a', { - attr: { - href: 'https://github.com/machsix/Super-preloader', - target: '_blank' - }, - innerHTML: 'Powered by Super-preloader' - })] - })); - curNumber += 1; - } else { - div.style.cssText = '\ + if (SSS.a_sandbox != false) { + //sandbox is readonly property + //i.sandbox = SSS.a_sandbox; + i.setAttribute('sandbox', ''); + } + i.src = link; + if (SSS.a_mutationObserver) { + i.setAttribute('mutationObserver', JSON.stringify(SSS.a_mutationObserver)); + if (SSS.a_mutationObserver.relatedObj) { + insertLoc = getAllElements(SSS.a_mutationObserver.relatedObj); + if (insertLoc.length > 0) { + insertLoc = insertLoc[0]; + } else { + insertLoc = null; + } + } + } + if (SSS.a_iloaded) { + i.addEventListener('load', iframeLoaded, false); + remove.push(function () { + i.removeEventListener('load', iframeLoaded, false); + }); + } else { + var messagehandler = function messagehandler(e) { + if (!messageR && e.data == 'superpreloader-iframe:DOMLoaded') { + messageR = true; + iframeLoaded.call(i, { + currentTarget: i + }); + if (SSS.a_newIframe) { + window.removeEventListener('message', messagehandler, false); + } + } + }; + window.addEventListener('message', messagehandler, false); + remove.push(function () { + window.removeEventListener('message', messagehandler, false); + }); + } + if (insertLoc) { + insertLoc.parentNode.insertBefore(i, insertLoc); + } else { + document.body.appendChild(i); + } + } else { + iframe.src = link; + iframe.contentDocument.location.replace(link); + if (SSS.a_reload) { + iframe.contentWindow.location.reload(); + } + } + } + + /** + * Send XHR request to obtain next page content + * @param {string} link Link of next page + * @returns {void} + */ + function XHRrequest(link) { + var reqConf = { + headers: SSS.a_headers ? SSS.a_headers : { + Referer: cplink + } + }; + got.get(link, reqConf).then( + /** + * Handling of XHR request + * @param {ResponseObject} res Response of got + * @returns {void} + */ + function (res) { + if (res.finalUrl === cplink) { + logger.debug("[Super-preloader]", 'Same final address'); + XHRNotLoaded(res); + } else { + XHRLoaded(res); + logger.debug("[Super-preloader]", 'XHRrequest complete'); + } + }).catch( + /** + * Error handling of XHR request + * @param {ResponseObject} res Response of got + * @returns {void} + */ + function (res) { + XHRNotLoaded(res); + }); + } + var working; + function doRequest() { + working = true; + floatWO.updateColor('loading'); + floatWO.CmodeIcon('show'); + logger.debug("[Super-preloader]", 'Get next page', SSS.a_useiframe ? '(iframe method)' : '(XHR method)', nextlink); + pagedLinks.push(nextlink); + if (SSS.a_useiframe) { + iframeRequest(nextlink); + } else { + if (/(?:http|\/).*/.test(nextlink)) { + // request next page by XHR + XHRrequest(nextlink); + } else { + logger.error("[Super-preloader]", 'Lazyload or Invalid nextLinkElem', nextlinkElem); + } + } + } + var _SSS$a_ipages = _slicedToArray(SSS.a_ipages, 2), + _SSS$a_ipages$ = _SSS$a_ipages[0], + ipagesmode = _SSS$a_ipages$ === void 0 ? false : _SSS$a_ipages$, + _SSS$a_ipages$2 = _SSS$a_ipages[1], + ipagesnumber = _SSS$a_ipages$2 === void 0 ? 2 : _SSS$a_ipages$2; + if (ipagesmode && ipagesnumber === 0) { + ipagesnumber = Number.MAX_SAFE_INTEGER; + } + var scrollDo = nullFn; + var afterInsertDo = nullFn; + if (prefs.Aplus) { + afterInsertDo = doRequest; + doRequest(); + } else { + scrollDo = doRequest; + if (ipagesmode) doRequest(); + } + var manualDiv; + function manualAdiv() { + if (!manualDiv) { + addStyle(spcss['sp-separator']); + var spage = /*#__PURE__*/function () { + var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(el) { + var value; + return _regeneratorRuntime.wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + if (!doc) { + _context.next = 7; + break; + } + value = Number(el.value); + if (isNaN(value) || value < 1) { + el.value = value = 1; + } + ipagesmode = true; + ipagesnumber = value + paged; + _context.next = 7; + return insertedIntoDoc(); + case 7: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function spage(_x) { + return _ref4.apply(this, arguments); + }; + }(); + var div = createDOM('div', { + attr: { + id: 'sp-sp-manualdiv', + class: 'sp-separator' + }, + children: [createDOM('span', { + attr: { + class: 'sp-md-span' + }, + innerHTML: userLang === 'zh_CN' ? '下' : 'Next' + }), createDOM('input', { + attr: { + type: 'number', + value: 1, + min: 1, + title: userLang === 'zh_CN' ? '输入你想要拼接的页数(必须>=1),然后按回车.' : 'Type number of pageringzing and press enter', + id: 'sp-sp-md-number' + }, + eventListener: [{ + type: 'keyup', + listener: function listener(e) { + if (e.keyCode == 13) { + // 回车 + spage(e.target); + } + } + }] + }), createDOM('span', { + attr: { + class: 'sp-md-span' + }, + innerHTML: userLang === 'zh_CN' ? '页' : 'page' + }), createDOM('img', { + attr: { + id: 'sp-sp-md-imgnext', + src: _sep_icons.next + } + }), createDOM('div', { + attr: { + class: 'sp-someinfo', + id: 'sp-separator-hover' + }, + children: [createDOM('a', { + attr: { + href: 'https://github.com/machsix/Super-preloader', + target: '_blank' + }, + innerHTML: 'Powered by Super-preloader' + })] + })] + }); + manualDiv = div; + document.body.appendChild(div); + div.addEventListener('click', function (e) { + //@ts-ignore + if (e.target.id === 'sp-sp-md-number') return; + spage(document.getElementById('sp-sp-md-number')).then(function () { + manualDiv.remove(); + }); + }, false); + } + addIntoDoc(manualDiv); + //manualDiv.style.display = "block"; + } + function beforeInsertIntoDoc() { + return _beforeInsertIntoDoc.apply(this, arguments); + } + function _beforeInsertIntoDoc() { + _beforeInsertIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() { + return _regeneratorRuntime.wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + working = true; + if (!(SSS.a_manualA && !ipagesmode)) { + _context3.next = 6; + break; + } + // 显示手动翻页触发条. + logger.debug("[Super-preloader]", 'Manual stitching'); + manualAdiv(); + _context3.next = 9; + break; + case 6: + // 直接拼接. + logger.debug("[Super-preloader]", 'Direct stitching'); + _context3.next = 9; + return insertedIntoDoc(); + case 9: + case "end": + return _context3.stop(); + } + }, _callee3); + })); + return _beforeInsertIntoDoc.apply(this, arguments); + } + var sepStyle; + //looks like goNextImg is useless here. + //const goNextImg = [false]; + var sNumber = prefs.sepStartN; + var _sep_icons = sep_icons; + var curNumber = sNumber; + function createSep(lastUrl, currentUrl, nextUrl) { + var div = document.createElement('div'); + if (SSS.a_separator) { + if (!sepStyle) { + sepStyle = addStyle(spcss['sp-separator']); + if (prefs.customCSS.length > 0) addStyle(prefs.customCSS); + } + div.className = 'sp-separator'; + div.id = 'sp-separator-' + curNumber; + div.addEventListener('click', sepHandler, false); + var pageStr = ''; + if (userLang === 'zh_CN') { + pageStr = '第 ' + curNumber + ' 页' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); + } else { + pageStr = 'Page ' + curNumber + '' + (SSS.a_separatorReal ? getRalativePageStr(lastUrl, currentUrl, nextUrl) : ''); + } + div.appendChild(createDOM('a', { + attr: { + class: 'sp-sp-nextlink', + target: '_blank', + href: currentUrl, + title: currentUrl + }, + innerHTML: pageStr + })); + div.appendChild(createDOM('img', { + attr: { + src: _sep_icons.top, + class: 'sp-sp-gotop', + alt: userLang === 'zh_CN' ? '去到顶部' : 'To Top', + title: userLang === 'zh_CN' ? '去到顶部' : 'To Top' + } + })); + div.appendChild(createDOM('img', { + attr: { + src: curNumber == sNumber ? _sep_icons.pre_gray : _sep_icons.pre, + class: 'sp-sp-gopre', + title: userLang === 'zh_CN' ? '上滚一页' : 'Scroll up a page' + } + })); + var i_next = createDOM('img', { + attr: { + src: _sep_icons.next_gray, + class: 'sp-sp-gonext', + title: userLang === 'zh_CN' ? '下滚一页' : 'Scroll down a page' + } + }); + + //if (goNextImg.length == 2) { + // goNextImg.shift(); + //} + //goNextImg.push(i_next); + div.appendChild(i_next); + div.appendChild(createDOM('img', { + attr: { + src: _sep_icons.bottom, + class: 'sp-sp-gobottom', + alt: userLang === 'zh_CN' ? '去到底部' : 'To Bottom', + title: userLang === 'zh_CN' ? '去到底部' : 'To Bottom' + } + })); + div.appendChild(createDOM('div', { + attr: { + class: 'sp-someinfo', + id: 'sp-separator-hover' + }, + children: [createDOM('a', { + attr: { + href: 'https://github.com/machsix/Super-preloader', + target: '_blank' + }, + innerHTML: 'Powered by Super-preloader' + })] + })); + curNumber += 1; + } else { + div.style.cssText = '\ height:0!important;\ width:0!important;\ margin:0!important;\ @@ -11249,415 +10777,415 @@ display:block!important;\ visibility:hidden!important;\ '; - } - return div; - } - var paged = 0; - function insertedIntoDoc() { - return _insertedIntoDoc.apply(this, arguments); - } // 返回,剩余高度是总高度的比值. - function _insertedIntoDoc() { - _insertedIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() { - var docTitle, fragment, pageElements, ii, lastUrl, nl, i, pe_x, pe_x_nn, nodes, nodes_x, imgs, arr, sepdiv, toInsert, insertParent, colNodes, _ncol, trs, _ncol2, oldE, oldE_lt, newE, newE_lt, oldE_x, newE_x, ev, delayiframe; - return _regeneratorRuntime.wrap(function _callee4$(_context4) { - while (1) switch (_context4.prev = _context4.next) { - case 0: - if (doc) { - _context4.next = 3; - break; - } - logger.error("[Super-preloader]", 'No document'); - return _context4.abrupt("return"); - case 3: - if (!SSS.a_documentFilter) { - _context4.next = 13; - break; - } - _context4.prev = 4; - _context4.next = 7; - return SSS.a_documentFilter(doc, typeof nextlink === 'string' && nextlink); - case 7: - logger.debug("[Super-preloader]", 'Successfully executeed documentFilter'); - _context4.next = 13; - break; - case 10: - _context4.prev = 10; - _context4.t0 = _context4["catch"](4); - logger.error("[Super-preloader]", 'Error executing documentFilter', _context4.t0, SSS.a_documentFilter.toString()); - case 13: - docTitle = getElementByCSS('title', doc).textContent; - fragment = document.createDocumentFragment(); - pageElements = getAllElements(SSS.a_pageElement, undefined, doc, win, typeof nextlink === 'string' && nextlink); - ii = pageElements.length; - if (!(ii <= 0)) { - _context4.next = 23; - break; - } - logger.error("[Super-preloader]", 'Failed to get the main content of the next page', SSS.a_pageElement); - removeL(); - return _context4.abrupt("return"); - case 23: - logger.debug("[Super-preloader]", 'Successfully got the main content of the next page', pageElements); - case 24: - // 提前查找下一页链接,后面再赋值 - lastUrl = cplink; - cplink = String(nextlink); - /** @type {HTMLElement | String} */ - nl = getElement(SSS.nextLink, undefined, doc, win); - if (nl) { - if (nl === nextlinkElem) { - nextlinkElem = null; - } else { - nextlinkElem = nl; - } - } else { - nextlinkElem = null; - } - nextlink = elemToHref(nextlinkElem); - // 有部分下一页的信息是在script中(比如新加的csdn的规则),因此先查找下一页信息,再执行 removeScripts - removeScripts(doc, SSS.a_scriptFilter); - i = 0; - case 31: - if (!(i < ii)) { - _context4.next = 40; - break; - } - pe_x = pageElements[i]; - pe_x_nn = pe_x.nodeName; - if (!(pe_x_nn == 'BODY' || pe_x_nn == 'HTML' || pe_x_nn == 'SCRIPT')) { - _context4.next = 36; - break; - } - return _context4.abrupt("continue", 37); - case 36: - fragment.appendChild(pe_x); - case 37: - i++; - _context4.next = 31; - break; - case 40: - if (SSS.filter && typeof SSS.filter === 'string') { - // 功能未完善. - nodes = []; - try { - nodes = getAllElements(SSS.filter, fragment); - } catch (e) {} - for (i = nodes.length - 1; i >= 0; i--) { - nodes_x = nodes[i]; - nodes_x.parentNode.removeChild(nodes_x); - } - } - - // lazyImgSrc - if (SSS.lazyImgSrc) { - handleLazyImgSrc(SSS.lazyImgSrc, fragment); - } - //@ts-ignore - if (!window.opera && SSS.a_useiframe && !SSS.a_iloaded) { - imgs = getAllElements('css;img[src]', fragment); // 收集所有图片 - } - - // 处理下一页内容部分链接是否新标签页打开 - if (prefs.forceTargetWindow) { - arr = Array.prototype.slice.call(fragment.querySelectorAll('a[href]:not([href^="mailto:"]):not([href^="javascript:"]):not([href^="#"])')); - arr.forEach(function (elem) { - elem.setAttribute('target', '_blank'); - if (elem.getAttribute('onclick') == 'atarget(this)') { - // 卡饭论坛的控制是否在新标签页打开 - elem.removeAttribute('onclick'); - } - }); - } - - /** @type {HTMLElement} */ - sepdiv = createSep(lastUrl, cplink, nextlink); - toInsert = sepdiv; - if (SSS.a_sepdivDom !== undefined && typeof SSS.a_sepdivDom === 'function') { - toInsert = SSS.a_sepdivDom(doc, sepdiv); - } else if (pageElements[0] && pageElements[0].tagName === 'TR' && pageElements[pageElements.length - 1].tagName === 'TR') { - insertParent = insertPoint.parentNode; - colNodes = getAllElements('child::tr[1]/child::*[self::td or self::th]', insertParent); - if (colNodes.length == 0) { - colNodes = getAllElements('child::*[self::td or self::th]', pageElements[0]); - } - _ncol = [].reduce.call(colNodes, function (acc, cur) { - return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); - }, 0); - toInsert = createDOM('tr', { - children: [createDOM('td', { - attr: { - colspan: _ncol - }, - children: [sepdiv] - })] - }); - } else if (pageElements[0] && pageElements[0].tagName === 'TBODY' && pageElements[pageElements.length - 1].tagName === 'TBODY') { - // https://bbs.kafan.cn/forum-8-1.html - trs = pageElements[pageElements.length - 1].getElementsByTagName('tr'); - if (trs) { - _ncol2 = [].reduce.call(trs[trs.length - 1].children, function (acc, cur) { - return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); - }, 0); - toInsert = createDOM('tbody', { - children: [createDOM('tr', { - children: [createDOM('td', { - attr: { - colspan: _ncol2 - }, - children: [sepdiv] - })] - })] - }); - } else { - logger.warn("[Super-preloader]", 'No trs found'); - } - } - fragment.insertBefore(toInsert, fragment.firstChild); - addIntoDoc(fragment); - - // filter - if (SSS.filter && typeof SSS.filter === 'function') { - try { - SSS.filter(pageElements); - logger.debug("[Super-preloader]", 'Execution of filter(pages) succeeded'); - } catch (e) { - logger.error("[Super-preloader]", 'Error executing filter(pages)', e, SSS.filter.toString()); - } - } - if (imgs) { - // 非opera,在iframeDOM取出数据时需要重载图片. - setTimeout(function () { - var _imgs = imgs; - var i, ii, img; - for (i = 0, ii = _imgs.length; i < ii; i++) { - img = _imgs[i]; - var src = img.src; - img.src = src; - } - }, 99); - } - if (SSS.a_replaceE) { - oldE = getAllElements(SSS.a_replaceE); - oldE_lt = oldE.length; - if (oldE_lt > 0) { - newE = getAllElements(SSS.a_replaceE, undefined, doc, win); - newE_lt = newE.length; - if (newE_lt == oldE_lt) { - // 替换 - - for (i = 0; i < newE_lt; i++) { - oldE_x = oldE[i]; - newE_x = newE[i]; - newE_x = doc.importNode(newE_x, true); - oldE_x.parentNode.replaceChild(newE_x, oldE_x); - } - } - } - } - paged += 1; - if (ipagesmode && paged >= ipagesnumber) { - ipagesmode = false; - } - floatWO.loadedIcon('hide'); - if (manualDiv) { - manualDiv.style.display = 'none'; - } - //if (goNextImg[0]) goNextImg[0].src = _sep_icons.next; - ev = document.createEvent('Event'); - ev.initEvent('Super_preloaderPageLoaded', true, false); - document.dispatchEvent(ev); - if (prefs.enableHistory) { - try { - window.history.pushState(null, docTitle, cplink); - } catch (e) {} - } - if (!(paged >= SSS.a_maxpage)) { - _context4.next = 66; - break; - } - logger.debug("[Super-preloader]", `Reached the set maximum number of page turns ${SSS.a_maxpage}`); - notice('Status:' + 'Reached the set maximum number of page turns:' + SSS.a_maxpage + ''); - removeL(); - return _context4.abrupt("return"); - case 66: - delayiframe = function delayiframe(fn) { - setTimeout(fn, 199); - }; - if (nextlink && !pagedLinks.includes(nextlink)) { - // debug('Found the next page link:', nextlink); - doc = win = null; - if (ipagesmode) { - if (SSS.a_useiframe) { - // 延时点,firefox,太急会卡-_-! - delayiframe(doRequest); - } else { - doRequest(); - } - } else { - working = false; - if (SSS.a_useiframe) { - delayiframe(afterInsertDo); - } else { - afterInsertDo(); - } - } - } else { - logger.error("[Super-preloader]", 'No next page link found.', SSS.nextLink); - removeL(); - } - case 68: - case "end": - return _context4.stop(); - } - }, _callee4, null, [[4, 10]]); - })); - return _insertedIntoDoc.apply(this, arguments); - } - var relatedObj_0, relatedObj_1; - if (SSS.a_relatedObj) { - if (_isArray(SSS.a_relatedObj)) { - relatedObj_0 = SSS.a_relatedObj[0]; - relatedObj_1 = SSS.a_relatedObj[1]; - } else { - relatedObj_0 = SSS.a_pageElement; - relatedObj_1 = 'bottom'; - } - } - function getRemain() { - var _cplink = cplink || undefined; - var scrolly = window.scrollY; - var windowHeight = window.innerHeight; - document.body.clientHeight; - var obj = getLastVisibleElement(relatedObj_0, _cplink); - var scrollH = obj && obj.nodeType == 1 ? obj.getBoundingClientRect()[relatedObj_1] + scrolly : Math.max(document.documentElement.scrollHeight, document.body.scrollHeight); - var exElementHeight = 0; - if (SSS.a_excludeElement != undefined) { - var exElementNode = getLastVisibleElement(SSS.a_excludeElement, _cplink); - if (exElementNode !== null) { - exElementHeight = exElementNode.offsetHeight; - } - } - return (scrollH - scrolly - windowHeight - exElementHeight) / windowHeight; // 剩余高度于页面总高度的比例. - } - var pause = false; - if (prefs.pauseA) { - var Sbutton = ['target', 'shiftKey', 'ctrlKey', 'altKey']; - var ltype = prefs.mouseA ? 'mousedown' : 'dblclick'; - var button_1 = Sbutton[prefs.Pbutton[0]]; - var button_2 = Sbutton[prefs.Pbutton[1]]; - var button_3 = Sbutton[prefs.Pbutton[2]]; - var pauseIt = function pauseIt() { - pause = !pause; - if (prefs.stop_ipage) ipagesmode = false; - if (pause) { - floatWO.updateColor('Apause'); - if (userLang === 'zh_CN') { - notice('状态:' + '自动翻页 暂停.', prefs.disappearDelay); - } else { - notice('Status:' + 'Autopagger Pause.', prefs.disappearDelay); - } - } else { - floatWO.updateColor('autopager'); - floatWO.CmodeIcon('hide'); - if (userLang === 'zh_CN') { - notice('状态:' + '自动翻页 启用.'); - } else { - notice('Status:' + 'Autopagger Enable.'); - } - } - scroll(); - }; - var Sctimeout; - var clearPause = function clearPause() { - clearTimeout(Sctimeout); - document.removeEventListener('mouseup', clearPause, false); - }; - var pausehandler = function pausehandler(e) { - if (!SSS.a_manualA || ipagesmode) { - if (e[button_1] && e[button_2] && e[button_3]) { - if (e.type == 'mousedown') { - document.addEventListener('mouseup', clearPause, false); - Sctimeout = setTimeout(pauseIt, prefs.Atimeout); - } else { - pauseIt(); - } - } - } - }; - document.addEventListener(ltype, pausehandler, false); - remove.push(function () { - document.removeEventListener(ltype, pausehandler, false); - }); - } - function scroll() { - if (!pause && !working && (getRemain() <= SSS.a_remain || ipagesmode)) { - if (doc) { - // 有的话,就插入到文档. - beforeInsertIntoDoc(); - } else { - // 否则就请求文档. - scrollDo(); - } - } - } - var timeout; - function timeoutfn() { - clearTimeout(timeout); - timeout = setTimeout(scroll, 100); - } - window.addEventListener('scroll', timeoutfn, false); - remove.push(function () { - window.removeEventListener('scroll', timeoutfn, false); - }); - autoPO = { - startipages: function () { - var _startipages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(value) { - return _regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) switch (_context2.prev = _context2.next) { - case 0: - if (!(value > 0)) { - _context2.next = 8; - break; - } - ipagesmode = true; - ipagesnumber = value + paged; - notice('Status:' + 'Current number of pages turned: ' + paged + ',' + 'Continue to turn page ' + ipagesnumber + ''); - if (!SSS.a_manualA) { - _context2.next = 7; - break; - } - _context2.next = 7; - return insertedIntoDoc(); - case 7: - scroll(); - case 8: - case "end": - return _context2.stop(); - } - }, _callee2); - })); - function startipages(_x2) { - return _startipages.apply(this, arguments); - } - return startipages; - }() - }; - } - - /** - * prefetcher - * @param {IRuntimeRule} SSS a rule - * @param {*} floatWO float window object - * @returns {void} - */ - function prefetcher(SSS, floatWO) { - function cContainer() { - var div = document.createElement('div'); - /** @type {HTMLElement} */ - //@ts-ignore - var div2 = div.cloneNode(false); - var hr = document.createElement('hr'); - div.style.cssText = '\ + } + return div; + } + var paged = 0; + function insertedIntoDoc() { + return _insertedIntoDoc.apply(this, arguments); + } // 返回,剩余高度是总高度的比值. + function _insertedIntoDoc() { + _insertedIntoDoc = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() { + var docTitle, fragment, pageElements, ii, lastUrl, nl, i, pe_x, pe_x_nn, nodes, nodes_x, imgs, arr, sepdiv, toInsert, insertParent, colNodes, _ncol, trs, _ncol2, oldE, oldE_lt, newE, newE_lt, oldE_x, newE_x, ev, delayiframe; + return _regeneratorRuntime.wrap(function _callee4$(_context4) { + while (1) switch (_context4.prev = _context4.next) { + case 0: + if (doc) { + _context4.next = 3; + break; + } + logger.error("[Super-preloader]", 'No document'); + return _context4.abrupt("return"); + case 3: + if (!SSS.a_documentFilter) { + _context4.next = 13; + break; + } + _context4.prev = 4; + _context4.next = 7; + return SSS.a_documentFilter(doc, typeof nextlink === 'string' && nextlink); + case 7: + logger.debug("[Super-preloader]", 'Successfully executeed documentFilter'); + _context4.next = 13; + break; + case 10: + _context4.prev = 10; + _context4.t0 = _context4["catch"](4); + logger.error("[Super-preloader]", 'Error executing documentFilter', _context4.t0, SSS.a_documentFilter.toString()); + case 13: + docTitle = getElementByCSS('title', doc).textContent; + fragment = document.createDocumentFragment(); + pageElements = getAllElements(SSS.a_pageElement, undefined, doc, win, typeof nextlink === 'string' && nextlink); + ii = pageElements.length; + if (!(ii <= 0)) { + _context4.next = 23; + break; + } + logger.error("[Super-preloader]", 'Failed to get the main content of the next page', SSS.a_pageElement); + removeL(); + return _context4.abrupt("return"); + case 23: + logger.debug("[Super-preloader]", 'Successfully got the main content of the next page', pageElements); + case 24: + // 提前查找下一页链接,后面再赋值 + lastUrl = cplink; + cplink = String(nextlink); + /** @type {HTMLElement | String} */ + nl = getElement(SSS.nextLink, undefined, doc, win); + if (nl) { + if (nl === nextlinkElem) { + nextlinkElem = null; + } else { + nextlinkElem = nl; + } + } else { + nextlinkElem = null; + } + nextlink = elemToHref(nextlinkElem); + // 有部分下一页的信息是在script中(比如新加的csdn的规则),因此先查找下一页信息,再执行 removeScripts + removeScripts(doc, SSS.a_scriptFilter); + i = 0; + case 31: + if (!(i < ii)) { + _context4.next = 40; + break; + } + pe_x = pageElements[i]; + pe_x_nn = pe_x.nodeName; + if (!(pe_x_nn == 'BODY' || pe_x_nn == 'HTML' || pe_x_nn == 'SCRIPT')) { + _context4.next = 36; + break; + } + return _context4.abrupt("continue", 37); + case 36: + fragment.appendChild(pe_x); + case 37: + i++; + _context4.next = 31; + break; + case 40: + if (SSS.filter && typeof SSS.filter === 'string') { + // 功能未完善. + nodes = []; + try { + nodes = getAllElements(SSS.filter, fragment); + } catch (e) {} + for (i = nodes.length - 1; i >= 0; i--) { + nodes_x = nodes[i]; + nodes_x.parentNode.removeChild(nodes_x); + } + } + + // lazyImgSrc + if (SSS.lazyImgSrc) { + handleLazyImgSrc(SSS.lazyImgSrc, fragment); + } + //@ts-ignore + if (!window.opera && SSS.a_useiframe && !SSS.a_iloaded) { + imgs = getAllElements('css;img[src]', fragment); // 收集所有图片 + } + + // 处理下一页内容部分链接是否新标签页打开 + if (prefs.forceTargetWindow) { + arr = Array.prototype.slice.call(fragment.querySelectorAll('a[href]:not([href^="mailto:"]):not([href^="javascript:"]):not([href^="#"])')); + arr.forEach(function (elem) { + elem.setAttribute('target', '_blank'); + if (elem.getAttribute('onclick') == 'atarget(this)') { + // 卡饭论坛的控制是否在新标签页打开 + elem.removeAttribute('onclick'); + } + }); + } + + /** @type {HTMLElement} */ + sepdiv = createSep(lastUrl, cplink, nextlink); + toInsert = sepdiv; + if (SSS.a_sepdivDom !== undefined && typeof SSS.a_sepdivDom === 'function') { + toInsert = SSS.a_sepdivDom(doc, sepdiv); + } else if (pageElements[0] && pageElements[0].tagName === 'TR' && pageElements[pageElements.length - 1].tagName === 'TR') { + insertParent = insertPoint.parentNode; + colNodes = getAllElements('child::tr[1]/child::*[self::td or self::th]', insertParent); + if (colNodes.length == 0) { + colNodes = getAllElements('child::*[self::td or self::th]', pageElements[0]); + } + _ncol = [].reduce.call(colNodes, function (acc, cur) { + return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); + }, 0); + toInsert = createDOM('tr', { + children: [createDOM('td', { + attr: { + colspan: _ncol + }, + children: [sepdiv] + })] + }); + } else if (pageElements[0] && pageElements[0].tagName === 'TBODY' && pageElements[pageElements.length - 1].tagName === 'TBODY') { + // https://bbs.kafan.cn/forum-8-1.html + trs = pageElements[pageElements.length - 1].getElementsByTagName('tr'); + if (trs) { + _ncol2 = [].reduce.call(trs[trs.length - 1].children, function (acc, cur) { + return acc + (parseInt(cur.getAttribute('colspan'), 10) || 1); + }, 0); + toInsert = createDOM('tbody', { + children: [createDOM('tr', { + children: [createDOM('td', { + attr: { + colspan: _ncol2 + }, + children: [sepdiv] + })] + })] + }); + } else { + logger.warn("[Super-preloader]", 'No trs found'); + } + } + fragment.insertBefore(toInsert, fragment.firstChild); + addIntoDoc(fragment); + + // filter + if (SSS.filter && typeof SSS.filter === 'function') { + try { + SSS.filter(pageElements); + logger.debug("[Super-preloader]", 'Execution of filter(pages) succeeded'); + } catch (e) { + logger.error("[Super-preloader]", 'Error executing filter(pages)', e, SSS.filter.toString()); + } + } + if (imgs) { + // 非opera,在iframeDOM取出数据时需要重载图片. + setTimeout(function () { + var _imgs = imgs; + var i, ii, img; + for (i = 0, ii = _imgs.length; i < ii; i++) { + img = _imgs[i]; + var src = img.src; + img.src = src; + } + }, 99); + } + if (SSS.a_replaceE) { + oldE = getAllElements(SSS.a_replaceE); + oldE_lt = oldE.length; + if (oldE_lt > 0) { + newE = getAllElements(SSS.a_replaceE, undefined, doc, win); + newE_lt = newE.length; + if (newE_lt == oldE_lt) { + // 替换 + + for (i = 0; i < newE_lt; i++) { + oldE_x = oldE[i]; + newE_x = newE[i]; + newE_x = doc.importNode(newE_x, true); + oldE_x.parentNode.replaceChild(newE_x, oldE_x); + } + } + } + } + paged += 1; + if (ipagesmode && paged >= ipagesnumber) { + ipagesmode = false; + } + floatWO.loadedIcon('hide'); + if (manualDiv) { + manualDiv.style.display = 'none'; + } + //if (goNextImg[0]) goNextImg[0].src = _sep_icons.next; + ev = document.createEvent('Event'); + ev.initEvent('Super_preloaderPageLoaded', true, false); + document.dispatchEvent(ev); + if (prefs.enableHistory) { + try { + window.history.pushState(null, docTitle, cplink); + } catch (e) {} + } + if (!(paged >= SSS.a_maxpage)) { + _context4.next = 66; + break; + } + logger.debug("[Super-preloader]", `Reached the set maximum number of page turns ${SSS.a_maxpage}`); + notice('Status:' + 'Reached the set maximum number of page turns:' + SSS.a_maxpage + ''); + removeL(); + return _context4.abrupt("return"); + case 66: + delayiframe = function delayiframe(fn) { + setTimeout(fn, 199); + }; + if (nextlink && !pagedLinks.includes(nextlink)) { + // debug('Found the next page link:', nextlink); + doc = win = null; + if (ipagesmode) { + if (SSS.a_useiframe) { + // 延时点,firefox,太急会卡-_-! + delayiframe(doRequest); + } else { + doRequest(); + } + } else { + working = false; + if (SSS.a_useiframe) { + delayiframe(afterInsertDo); + } else { + afterInsertDo(); + } + } + } else { + logger.error("[Super-preloader]", 'No next page link found.', SSS.nextLink); + removeL(); + } + case 68: + case "end": + return _context4.stop(); + } + }, _callee4, null, [[4, 10]]); + })); + return _insertedIntoDoc.apply(this, arguments); + } + var relatedObj_0, relatedObj_1; + if (SSS.a_relatedObj) { + if (_isArray(SSS.a_relatedObj)) { + relatedObj_0 = SSS.a_relatedObj[0]; + relatedObj_1 = SSS.a_relatedObj[1]; + } else { + relatedObj_0 = SSS.a_pageElement; + relatedObj_1 = 'bottom'; + } + } + function getRemain() { + var _cplink = cplink || undefined; + var scrolly = window.scrollY; + var windowHeight = window.innerHeight; + document.body.clientHeight; + var obj = getLastVisibleElement(relatedObj_0, _cplink); + var scrollH = obj && obj.nodeType == 1 ? obj.getBoundingClientRect()[relatedObj_1] + scrolly : Math.max(document.documentElement.scrollHeight, document.body.scrollHeight); + var exElementHeight = 0; + if (SSS.a_excludeElement != undefined) { + var exElementNode = getLastVisibleElement(SSS.a_excludeElement, _cplink); + if (exElementNode !== null) { + exElementHeight = exElementNode.offsetHeight; + } + } + return (scrollH - scrolly - windowHeight - exElementHeight) / windowHeight; // 剩余高度于页面总高度的比例. + } + var pause = false; + if (prefs.pauseA) { + var Sbutton = ['target', 'shiftKey', 'ctrlKey', 'altKey']; + var ltype = prefs.mouseA ? 'mousedown' : 'dblclick'; + var button_1 = Sbutton[prefs.Pbutton[0]]; + var button_2 = Sbutton[prefs.Pbutton[1]]; + var button_3 = Sbutton[prefs.Pbutton[2]]; + var pauseIt = function pauseIt() { + pause = !pause; + if (prefs.stop_ipage) ipagesmode = false; + if (pause) { + floatWO.updateColor('Apause'); + if (userLang === 'zh_CN') { + notice('状态:' + '自动翻页 暂停.', prefs.disappearDelay); + } else { + notice('Status:' + 'Autopagger Pause.', prefs.disappearDelay); + } + } else { + floatWO.updateColor('autopager'); + floatWO.CmodeIcon('hide'); + if (userLang === 'zh_CN') { + notice('状态:' + '自动翻页 启用.'); + } else { + notice('Status:' + 'Autopagger Enable.'); + } + } + scroll(); + }; + var Sctimeout; + var clearPause = function clearPause() { + clearTimeout(Sctimeout); + document.removeEventListener('mouseup', clearPause, false); + }; + var pausehandler = function pausehandler(e) { + if (!SSS.a_manualA || ipagesmode) { + if (e[button_1] && e[button_2] && e[button_3]) { + if (e.type == 'mousedown') { + document.addEventListener('mouseup', clearPause, false); + Sctimeout = setTimeout(pauseIt, prefs.Atimeout); + } else { + pauseIt(); + } + } + } + }; + document.addEventListener(ltype, pausehandler, false); + remove.push(function () { + document.removeEventListener(ltype, pausehandler, false); + }); + } + function scroll() { + if (!pause && !working && (getRemain() <= SSS.a_remain || ipagesmode)) { + if (doc) { + // 有的话,就插入到文档. + beforeInsertIntoDoc(); + } else { + // 否则就请求文档. + scrollDo(); + } + } + } + var timeout; + function timeoutfn() { + clearTimeout(timeout); + timeout = setTimeout(scroll, 100); + } + window.addEventListener('scroll', timeoutfn, false); + remove.push(function () { + window.removeEventListener('scroll', timeoutfn, false); + }); + autoPO = { + startipages: function () { + var _startipages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(value) { + return _regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + if (!(value > 0)) { + _context2.next = 8; + break; + } + ipagesmode = true; + ipagesnumber = value + paged; + notice('Status:' + 'Current number of pages turned: ' + paged + ',' + 'Continue to turn page ' + ipagesnumber + ''); + if (!SSS.a_manualA) { + _context2.next = 7; + break; + } + _context2.next = 7; + return insertedIntoDoc(); + case 7: + scroll(); + case 8: + case "end": + return _context2.stop(); + } + }, _callee2); + })); + function startipages(_x2) { + return _startipages.apply(this, arguments); + } + return startipages; + }() + }; + } + + /** + * prefetcher + * @param {IRuntimeRule} SSS a rule + * @param {*} floatWO float window object + * @returns {void} + */ + function prefetcher(SSS, floatWO) { + function cContainer() { + var div = document.createElement('div'); + /** @type {HTMLElement} */ + //@ts-ignore + var div2 = div.cloneNode(false); + var hr = document.createElement('hr'); + div.style.cssText = '\ margin:3px!important;\ padding:5px!important;\ border-radius:8px!important;\ @@ -11668,8 +11196,8 @@ float:none!important;\ display:none!important;\ '; - div.title = 'Prefetched content'; - div2.style.cssText = '\ + div.title = 'Prefetched content'; + div2.style.cssText = '\ text-align:left!important;\ color:red!important;\ font-size:13px!important;\ @@ -11677,1163 +11205,1163 @@ display:block!important;\ position:static!important;\ '; - hr.style.cssText = '\ + hr.style.cssText = '\ display:block!important;\ border:1px inset #000!important;\ '; - div.appendChild(div2); - div.appendChild(hr); - document.body.appendChild(div); - return { - div: div, - div2: div2 - }; - } - floatWO.updateColor('prefetcher'); - floatWO.updateColor('loading'); - floatWO.CmodeIcon('show'); - if (SSS.useiframe) { - var iframe = document.createElement('iframe'); - iframe.name = 'superpreloader-iframe'; - iframe.src = String(nextlink); - iframe.width = '100%'; - iframe.height = '0'; - iframe.frameBorder = '0'; - iframe.style.cssText = '\ + div.appendChild(div2); + div.appendChild(hr); + document.body.appendChild(div); + return { + div: div, + div2: div2 + }; + } + floatWO.updateColor('prefetcher'); + floatWO.updateColor('loading'); + floatWO.CmodeIcon('show'); + if (SSS.useiframe) { + var iframe = document.createElement('iframe'); + iframe.name = 'superpreloader-iframe'; + iframe.src = String(nextlink); + iframe.width = '100%'; + iframe.height = '0'; + iframe.frameBorder = '0'; + iframe.style.cssText = '\ margin:0!important;\ padding:0!important;\ '; - iframe.addEventListener('load', function (e) { - //@ts-ignore - var body = e.currentTarget.contentDocument.body; - if (body && body.firstChild) { - floatWO.updateColor('prefetcher'); - floatWO.CmodeIcon('hide'); - floatWO.loadedIcon('show'); - //@ts-ignore - e.currentTarget.removeEventListener('load', arguments.callee, false); - if (SSS.lazyImgSrc) { - handleLazyImgSrc(SSS.lazyImgSrc, body); - } - } - }, false); - if (SSS.viewcontent) { - var container = cContainer(); - container.div.style.display = 'block'; - container.div2.innerHTML = 'iframe full prefetch: ' + '' + 'Prefetch URL: ' + '' + nextlink + ''; - iframe.height = '300px'; - container.div.appendChild(iframe); - } else { - document.body.appendChild(iframe); - } - } else { - var reqConf = { - headers: SSS.a_headers ? SSS.a_headers : { - Referer: cplink - } - }; - got.get(nextlink, reqConf).then(function (res) { - var doc = createDocumentByString(res.data); - if (!doc) { - logger.error("[Super-preloader]", 'Document object creation failed!'); - return; - } - if (SSS.lazyImgSrc) { - handleLazyImgSrc(SSS.lazyImgSrc, doc); - } - var images = doc.images; - var isl = images.length; - var img; - var iarray = []; - var i; - var existSRC = {}; - var isrc; - for (i = isl - 1; i >= 0; i--) { - isrc = images[i].getAttribute('src'); - if (!isrc || existSRC[isrc]) { - continue; - } else { - existSRC[isrc] = true; - } - img = document.createElement('img'); - img.src = isrc; - iarray.push(img); - } - var container = cContainer(); - var div = container.div; - i = iarray.length; - container.div2.innerHTML = 'Number of prefetched pictures: ' + '' + i + '' + '' + 'Prefetch URL:' + '' + nextlink + ''; - logger.info("[Super-preloader]", 'Number of prefetched pictures: ' + i + 'Prefetch URL: ' + nextlink); - for (i -= 1; i >= 0; i--) { - div.appendChild(iarray[i]); - } - if (SSS.viewcontent) { - container.div.style.display = 'block'; - } - floatWO.updateColor('prefetcher'); - floatWO.loadedIcon('show'); - floatWO.CmodeIcon('hide'); - }); - } - } - - // 执行开始../////////////////// - - // 分析黑名单 - var blackList_re = new RegExp(blackList.map(function (x) { - if (x.substring(0, 3).toLowerCase() == 're:') { - return x.substring(4); - } else { - return wildcardToRegExpStr(x); - } - }).join('|')); - if (blackList_re.test(url)) { - logger.debug("[Super-preloader]", 'Matched blacklist, JS execution stopped'); - return; - } - - // 是否在frame上加载.. - if (prefs.DisableI && window.self != window.parent) { - var isReturn = !_find(DIExclude, function (x) { - //@ts-ignore - return x[1] && x[2].test(url); - }); - if (isReturn) { - logger.debug("[Super-preloader]", `The page with url:${url} is not a top-level window, JS execution stopped`); - return; - } - } - logger.debug("[Super-preloader]", `Page url is: ${url}, JS loaded successfully`); - - // 第一阶段..分析高级模式.. - if (prefs.disableBuiltinRules) { - logger.warn("[Super-preloader]", 'Builtin js rules are disabled'); - } else { - SSRules = SSRules.concat(jsSiteRule); - } - if (prefs.disableBuiltinSubscriptionRules) { - logger.warn("[Super-preloader]", 'Remote json rules are disabled'); - } else { - SSRules = SSRules.concat(jsonRule); - } - if (!prefs.disableBuiltinRules) { - SSRules = SSRules.concat(jsGeneralRule); - } - if (!prefs.numOfRule || prefs.numOfRule != SSRules.length) { - prefs.numOfRule = SSRules.length; - GM.setValue('prefs', prefs); - } - - // 重要的变量两枚. - /** @type {Array} */ - var pagedLinks = [document.location.href]; - /** @type {HTMLElement|string} */ - var nextlinkElem; - /** @type {string} */ - var nextlink; - /** @type {HTMLElement|string} */ - var prelink; - - //= ============== - - /**@type {IRuntimeRule} */ - var SSS = {}; - var findCurSiteInfo = /*#__PURE__*/function () { - var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() { - var SIIAD, Rurl, ii, _loop, _ret, i, FA; - return _regeneratorRuntime.wrap(function _callee5$(_context6) { - while (1) switch (_context6.prev = _context6.next) { - case 0: - SIIAD = SITEINFO_D.autopager; - ii = SSRules.length; - if (userLang === 'zh_CN') { - logger.debug("[Super-preloader]", `高级规则数目:${ii}`); - logger.debug("[Super-preloader]", `Number of rules > ${ii - jsonRule.length} from other sources, such as: wedata.net`); - } else { - logger.debug("[Super-preloader]", `Number of advanced rules:${ii}`); - } - _loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() { - var SII, SIIA, documentFilter, pageElement; - return _regeneratorRuntime.wrap(function _loop$(_context5) { - while (1) switch (_context5.prev = _context5.next) { - case 0: - SII = SSRules[i]; - if (!(SII.autopager && SII.autopager.ip)) { - _context5.next = 4; - break; - } - if (!(SII.autopager.ip.indexOf(serverIp) < 0)) { - _context5.next = 4; - break; - } - return _context5.abrupt("return", 0); - case 4: - Rurl = toRE(SII.url); - if (!Rurl.test(url)) { - _context5.next = 75; - break; - } - if (userLang === 'zh_CN') { - logger.debug("[Super-preloader]", 'Find current site rules:', SII); - logger.debug("[Super-preloader]", `规则ID: ${i + 1}`); - } else { - logger.debug("[Super-preloader]", 'Find rule for this website:', SII); - logger.debug("[Super-preloader]", `Rule ID: ${i + 1}`); - } - - // 运行规则的 startFilter - if (!(SII.autopager && SII.autopager.startFilter)) { - _context5.next = 17; - break; - } - _context5.prev = 8; - _context5.next = 11; - return SII.autopager.startFilter(document, window); - case 11: - logger.debug("[Super-preloader]", 'startFilter executed successfully'); - _context5.next = 17; - break; - case 14: - _context5.prev = 14; - _context5.t0 = _context5["catch"](8); - logger.error("[Super-preloader]", 'Error executing startFilter', _context5.t0); - case 17: - if (!(SII.nextLink === 'null;')) { - _context5.next = 21; - break; - } - logger.debug("[Super-preloader]", 'Find the rule for a site without nextpage', SII); - SSS.hasRule = false; - return _context5.abrupt("return", 1); - case 21: - nextlinkElem = getElement(SII.nextLink || 'auto;'); - if (nextlinkElem) { - _context5.next = 25; - break; - } - logger.warn("[Super-preloader]", 'Could not find the next page link, continue searching for other rules, skiping rule:', SII); - return _context5.abrupt("return", 0); - case 25: - // extract next page link from an a link - nextlink = getFullHref(nextlinkElem); - if (!(nextlink === document.location.href)) { - _context5.next = 29; - break; - } - nextlinkElem = null; - return _context5.abrupt("return", 0); - case 29: - if (SII.preLink && SII.preLink != 'auto;') { - // 如果设定了具体的preLink - prelink = getElement(SII.preLink); - } else { - if (prefs.autoGetPreLink) { - prelink = getElement('auto;'); - } - } - SSS = {}; - SSS.Rurl = String(Rurl); - SSS.nextLink = SII.nextLink || 'auto;'; - SSS.viewcontent = SII.viewcontent; - SSS.enable = SII.enable === undefined ? SITEINFO_D.enable : SII.enable; - SSS.useiframe = SII.useiframe === undefined ? SITEINFO_D.useiframe : SII.useiframe; - if (SII.pageElement) { - // 如果是Oautopager的规则.. - if (typeof SII.autopager !== 'object') SII.autopager = {}; - SII.autopager.pageElement = SII.pageElement; - if (!SII.autopager.useiframe) SII.autopager.useiframe = SII.useiframe; - if (SII.preLink) SII.autopager.preLink = SII.preLink; - if (SII.insertBefore) SII.autopager.HT_insert = [SII.insertBefore, 1]; - } - - // 自动翻页设置. - SIIA = SII.autopager; - if (!SIIA) { - _context5.next = 68; - break; - } - SSS.a_pageElement = SIIA.pageElement; - if (SSS.a_pageElement) { - _context5.next = 42; - break; - } - return _context5.abrupt("return", 1); - case 42: - SSS.a_manualA = SIIA.manualA === undefined ? SIIAD.manualA : SIIA.manualA; - SSS.a_enable = SIIA.enable === undefined ? SIIAD.enable : SIIA.enable; - SSS.a_useiframe = SIIA.useiframe === undefined ? SIIAD.useiframe : SIIA.useiframe; - SSS.a_mutationObserver = SSS.a_useiframe ? SIIA.mutationObserver === undefined ? null : SIIA.mutationObserver : null; - SSS.a_newIframe = SIIA.newIframe === undefined ? SIIAD.newIframe : SIIA.newIframe; - SSS.a_iloaded = SIIA.iloaded === undefined ? SIIAD.iloaded : SIIA.iloaded; - SSS.a_itimeout = SIIA.itimeout === undefined ? SIIAD.itimeout : SIIA.itimeout; - SSS.a_remain = SIIA.remain === undefined ? SIIAD.remain : SIIA.remain; - SSS.a_maxpage = SIIA.maxpage === undefined ? SIIAD.maxpage : SIIA.maxpage; - SSS.a_separator = SIIA.separator === undefined ? SIIAD.separator : SIIA.separator; - SSS.a_sepdivDom = SIIA.sepdivDom === undefined ? undefined : SIIA.sepdivDom; - SSS.a_separatorReal = SIIA.separatorReal === undefined ? SIIAD.separatorReal : SIIA.separatorReal; - SSS.a_replaceE = SIIA.replaceE; - SSS.a_HT_insert = SIIA.HT_insert; - SSS.a_relatedObj = SIIA.relatedObj === undefined ? SIIAD.relatedObj : SIIA.relatedObj; - SSS.a_ipages = SIIA.ipages === undefined ? SIIAD.ipages : SIIA.ipages; - - // new - SSS.filter = SII.filter || SIIA.filter; // 新增了函数的形式,原来的功能是移除 pageElement - documentFilter = SII.documentFilter || SIIA.documentFilter; - if (documentFilter === 'startFilter') { - SSS.a_documentFilter = function (doc) { - return SII.autopager.startFilter(doc); - }; - } else if (typeof documentFilter === 'function') { - SSS.a_documentFilter = documentFilter; - } else { - SSS.a_documentFilter = undefined; - } - SSS.a_scriptFilter = SIIA.scriptFilter === undefined ? '' : SIIA.scriptFilter; - SSS.a_stylish = SII.stylish || SIIA.stylish; - SSS.lazyImgSrc = SIIA.lazyImgSrc; - SSS.a_headers = SIIA.headers === undefined ? undefined : SIIA.headers; // custom header for XHRLoaded - SSS.a_reload = SIIA.reload === undefined ? SIIAD.reload : SIIA.reload; // force reload iframe - SSS.a_sandbox = SIIA.sandbox === undefined ? SIIAD.sandbox : SIIA.sandbox; - - // 在翻页的时候会有一些其他元素占据了页面的高度,导致翻页不精准。 - // 比如正文下面的推荐文章列表(占据超过整个页面10%就很难受) - SSS.a_excludeElement = SIIA.excludeElement; - case 68: - // 检验是否存在内容 - pageElement = getElement(SSS.a_pageElement); - if (!(!pageElement || Array.isArray(pageElement) && pageElement.length === 0)) { - _context5.next = 73; - break; - } - nextlinkElem = null; - logger.error("[Super-preloader]", 'Could not find content, skiping rule:', SII, 'Continue to search for other rules.'); - return _context5.abrupt("return", 0); - case 73: - SSS.hasRule = true; - return _context5.abrupt("return", 1); - case 75: - case "end": - return _context5.stop(); - } - }, _loop, null, [[8, 14]]); - }); - i = 0; - case 5: - if (!(i < ii)) { - _context6.next = 15; - break; - } - return _context6.delegateYield(_loop(), "t0", 7); - case 7: - _ret = _context6.t0; - if (!(_ret === 0)) { - _context6.next = 10; - break; - } - return _context6.abrupt("continue", 12); - case 10: - if (!(_ret === 1)) { - _context6.next = 12; - break; - } - return _context6.abrupt("break", 15); - case 12: - i++; - _context6.next = 5; - break; - case 15: - if (!SSS.hasRule) { - // 自动搜索. - if (!autoMatch.keyMatch) { - logger.warn("[Super-preloader]", 'Auto match is disabled'); - } else { - logger.warn("[Super-preloader]", 'No rules are found. Auto match starts'); - nextlinkElem = autoGetLink(); - if (nextlinkElem) { - // 强制模式. - FA = autoMatch.FA; - SSS.Rurl = window.localStorage ? 'am:' + (url.match(/^https?:\/\/[^:]*\//i) || [])[0] : 'am:automatch'; - SSS.enable = true; - SSS.nextLink = 'auto;'; - SSS.viewcontent = autoMatch.viewcontent; - SSS.useiframe = autoMatch.useiframe || SITEINFO_D.autopager.useiframe; - SSS.a_force = true; - SSS.a_manualA = FA.manualA; - SSS.a_enable = FA.enable || SITEINFO_D.autopager.force_enable; // Force join is enabled when this becomes true - SSS.a_useiframe = FA.useiframe || SITEINFO_D.useiframe; - SSS.a_iloaded = FA.iloaded; - SSS.a_itimeout = FA.itimeout; - SSS.a_remain = FA.remain; - SSS.a_maxpage = FA.maxpage; - SSS.a_separator = FA.separator; - SSS.a_ipages = FA.ipages; - } - } - } - - // 如果规则没 lazyImgSrc,设置默认值 - if (!SSS.lazyImgSrc) { - SSS.lazyImgSrc = prefs.lazyImgSrc; - } - logger.debug("[Super-preloader]", `Total time spent on searching for advanced rules and automatic matching: ${new Date().getTime() - startTime.getTime()}ms`); - case 18: - case "end": - return _context6.stop(); - } - }, _callee5); - })); - return function findCurSiteInfo() { - return _ref5.apply(this, arguments); - }; - }(); - findCurSiteInfo().then(function () { - // 上下页都没有找到啊 - if (!nextlinkElem && !prelink) { - logger.warn("[Super-preloader]", `No related links found, JS execution stopped. Total time spent: ${new Date().getTime() - startTime.getTime()}ms`); - return; - } else if (!nextlink) { - logger.error("[Super-preloader]", 'The link to the next page does not exist, JS cannot continue.'); - logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); - return; - } else { - logger.debug("[Super-preloader]", 'Previous link element:', prelink); - logger.debug("[Super-preloader]", 'Next link element:', nextlinkElem); - nextlink = elemToHref(nextlinkElem); - logger.debug("[Super-preloader]", 'Next link:', nextlink); - //@ts-ignore - prelink = prelink ? prelink.href || prelink : undefined; - } - var keyBinding = { - go: function go() { - if (typeof nextlink === 'string') window.location.href = nextlink; - }, - back: function back() { - //fixme - if (!prelink) getElement('auto;'); - if (typeof prelink === 'string') window.location.href = prelink; - }, - register: function register( /**@type {IPrefs} */prefs) { - var _this = this; - if (prefs.arrowKeyPage) { - logger.debug("[Super-preloader]", 'Adding left and right arrow keys to autopager listener.'); - document.addEventListener('keyup', function (e) { - //@ts-ignore - var tarNN = e.target.nodeName; - if (tarNN != 'BODY' && tarNN != 'HTML') return; - - // check is a combo pressed - if (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) { - return; - } - switch (e.keyCode) { - case 37: - _this.back(); - break; - case 39: - _this.go(); - break; - } - }, false); - - // 监听下一页事件. - logger.debug("[Super-preloader]", '添加鼠标手势翻页监听'); - document.addEventListener('superPreloader.go', function () { - _this.go(); - }, false); - - // 监听下一页事件. - document.addEventListener('superPreloader.back', function () { - _this.back(); - }, false); - } - } - }; - keyBinding.register(prefs); - loadLocalSetting(SSS); - if (!SSS.enable) { - logger.warn("[Super-preloader]", 'This rule is disabled, script execution is stopped'); - logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); - return; - } - if (!SSS.hasRule) { - SSS.a_force = true; - } - if (SSS.a_force) { - SSS.a_pageElement = '//body/*'; - SSS.a_HT_insert = undefined; - SSS.a_relatedObj = undefined; - } - if (prefs.floatWindow) { - logger.debug("[Super-preloader]", 'Creating a floating window'); - floatWindow(SSS); - var floatWindowWidth = getFloatWindowWith(); - displace(document.getElementById('sp-fw-container'), { - handle: document.getElementById('sp-fw-rect'), - customMove: function customMove(el, x, y) { - delete el.style.left; - delete el.style.bottom; - var right = document.body.clientWidth - floatWindowWidth - x; - if (right < 0) { - right = 0; - } else if (right > window.innerWidth - floatWindowWidth) { - right = window.innerWidth - floatWindowWidth; - } - var top = y; - if (top > window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight) { - top = window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight; - } else if (top < 0) { - top = 0; - } - el.style.right = `${right}px`; - el.style.top = `${top}px`; - }, - onMouseUp: function onMouseUp(el) { - prefs.FW_offset[0] = parseInt(el.style.top.replace('px', ''), 10); - prefs.FW_offset[1] = parseInt(el.style.right.replace('px', ''), 10); - prefs.FW_position = 2; - GM.setValue('prefs', prefs); - } - }); - document.getElementById('sp-fw-container').style.position = 'fixed'; - } - logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); - - // 预读或者翻页. - if (SSS.a_enable) { - logger.debug("[Super-preloader]", 'Initializing, autopager mode.'); - autopager(SSS, floatWO); - } else { - logger.debug("[Super-preloader]", 'Initializing, prefetch mode.'); - prefetcher(SSS, floatWO); - } - }); - - // 获取单个元素,混合 - /** - * - * @param {string|Function|Array|IHrefIncObject} selector selector - * @param {HTMLElement|Document=} contextNode element - * @param {Document=} doc document - * @param {Window=} win window - * @returns {HTMLElement} element - */ - function getElement(selector, contextNode, doc, win) { - var _cplink = cplink; - var ret; - if (!selector) return ret; - doc = doc || document; - win = win || window; - contextNode = contextNode || doc; - if (typeof selector === 'string') { - if (selector.search(/^css;/i) === 0) { - ret = getElementByCSS(selector.slice(4), contextNode); - } else if (selector.toLowerCase() == 'auto;') { - ret = autoGetLink(doc); - } else { - ret = getElementByXpath(selector, contextNode, doc); - } - } else if (typeof selector === 'function') { - ret = selector(doc, win, _cplink); - } else if (selector instanceof Array) { - for (var i = 0, l = selector.length; i < l; i++) { - ret = getElement(selector[i], contextNode, doc, win); - if (ret) { - break; - } - } - } else { - ret = hrefInc(selector, doc, win, _cplink); - } - return ret; - } - var docChecked; - /** - * - * @param {Document=} doc document - * @param {Window=} win window - * @returns {HTMLElement} a - */ - function autoGetLink(doc, win) { - if (!autoMatch.keyMatch) return; - //@ts-ignore - if (!parseKWRE.done) { - parseKWRE(); - //@ts-ignore - parseKWRE.done = true; - } - var startTime = new Date(); - doc = doc || document; - if (doc == document) { - // 当前文档,只检查一次. - if (docChecked) { - // @ts-ignore - return nextlink; - } - docChecked = true; - } - var _prePageKey = prePageKey; - var _nextPageKey = nextPageKey; - var _nPKL = nextPageKey.length; - var _pPKL = prePageKey.length; - var _getFullHref = getFullHref; - var _getAllElementsByXpath = getAllElementsByXpath; - var _Number = Number; - var _domain_port = domain_port; - var alllinks = doc.links; - var alllinksl = alllinks.length; - var curLHref = cplink; - var _nextlink; - var _prelink; - //@ts-ignore - if (!autoGetLink.checked) { - // 第一次检查 - _nextlink = nextlink; - _prelink = prelink; - } else { - _prelink = true; - } - var DCEnable = autoMatch.digitalCheck; - var DCRE = /^\s*\D{0,1}(\d+)\D{0,1}\s*$/; - var i, a, atext, numtext; - var aP; - var initSD; - var searchD = 1; - var preS1; - var preS2; - var searchedD; - var pSNText; - var preSS; - var nodeType; - var nextS1, nextS2, nSNText, nextSS; - var aimgs, j, jj, aimg_x, xbreak, k, keytext; - function finalCheck(a, type) { - var ahref = a.getAttribute('href'); // 在chrome上当是非当前页面文档对象的时候直接用a.href访问,不返回href - if (ahref == '#') { - return null; - } - ahref = _getFullHref(ahref); // 从相对路径获取完全的href; - - // 3个条件:http协议链接,非跳到当前页面的链接,非跨域 - if (/^https?:/i.test(ahref) && ahref.replace(/#.*$/, '') != curLHref && ahref.match(/https?:\/\/([^\/]+)/)[1] == _domain_port) { - logger.debug("[Super-preloader]", type == 'pre' ? 'previous' : 'next' + 'match:', atext); - return a; // 返回对象A - // return ahref; - } - } - logger.debug("[Super-preloader]", `Number of full document links:${alllinksl}`); - for (i = 0; i < alllinksl; i++) { - if (_nextlink && _prelink) break; - a = alllinks[i]; - if (!a) continue; // undefined跳过 - // links集合返回的本来就是包含href的a元素..所以不用检测 - // if(!a.hasAttribute("href"))continue; - atext = a.textContent; - if (atext) { - if (DCEnable) { - numtext = atext.match(DCRE); - if (numtext) { - // 是不是纯数字 - // debug(numtext); - numtext = numtext[1]; - aP = a; - initSD = 0; - if (!_nextlink) { - preS1 = a.previousSibling; - preS2 = a.previousElementSibling; - while (!(preS1 || preS2) && initSD < searchD) { - aP = aP.parentNode; - if (aP) { - preS1 = aP.previousSibling; - //@ts-ignore - preS2 = aP.previousElementSibling; - } - initSD++; - } - searchedD = initSD > 0; - if (preS1 || preS2) { - pSNText = preS1 ? preS1.textContent.match(DCRE) : ''; - if (pSNText) { - preSS = preS1; - } else { - pSNText = preS2 ? preS2.textContent.match(DCRE) : ''; - preSS = preS2; - } - if (pSNText) { - pSNText = pSNText[1]; - if (_Number(pSNText) == _Number(numtext) - 1) { - nodeType = preSS.nodeType; - if (nodeType == 3 || nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', preSS, doc).length === 0 : !preSS.hasAttribute('href') || _getFullHref(preSS.getAttribute('href')) == curLHref)) { - _nextlink = finalCheck(a, 'next'); - } - continue; - } - } - } - } - if (!_prelink) { - nextS1 = a.nextSibling; - nextS2 = a.nextElementSibling; - while (!(nextS1 || nextS2) && initSD < searchD) { - aP = aP.parentNode; - if (aP) { - nextS1 = a.nextSibling; - nextS2 = a.nextElementSibling; - } - initSD++; - } - searchedD = initSD > 0; - if (nextS1 || nextS2) { - nSNText = nextS1 ? nextS1.textContent.match(DCRE) : ''; - if (nSNText) { - nextSS = nextS1; - } else { - nSNText = nextS2 ? nextS2.textContent.match(DCRE) : ''; - nextSS = nextS2; - } - if (nSNText) { - nSNText = nSNText[1]; - if (_Number(nSNText) == _Number(numtext) + 1) { - nodeType = nextSS.nodeType; - if (nodeType == 3 || - // @ts-ignore - nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', nextSS, doc).length === 0 : !nextSS.hasAttribute('href') || _getFullHref(nextSS.getAttribute('href')) == curLHref)) { - _prelink = finalCheck(a, 'pre'); - } - } - } - } - } - continue; - } - } - } else { - atext = a.title; - } - if (!atext) { - aimgs = a.getElementsByTagName('img'); - for (j = 0, jj = aimgs.length; j < jj; j++) { - aimg_x = aimgs[j]; - atext = aimg_x.alt || aimg_x.title; - if (atext) break; - } - } - if (!atext) continue; - if (!_nextlink) { - xbreak = false; - for (k = 0; k < _nPKL; k++) { - keytext = _nextPageKey[k]; - //@ts-ignore - if (!keytext.test(atext)) continue; - _nextlink = finalCheck(a, 'next'); - xbreak = true; - break; - } - if (xbreak || _nextlink) continue; - } - if (!_prelink) { - for (k = 0; k < _pPKL; k++) { - keytext = _prePageKey[k]; - //@ts-ignore - if (!keytext.test(atext)) continue; - _prelink = finalCheck(a, 'pre'); - break; - } - } - } - logger.debug("[Super-preloader]", `Time to search ${i} links:${new Date().getTime() - startTime.getTime()}ms`); - //@ts-ignore - if (!autoGetLink.checked) { - // 只在第一次检测的时候,抛出上一页链接. - prelink = _prelink; - //@ts-ignore - autoGetLink.checked = true; - } - return _nextlink; - } - function parseKWRE() { - function modifyPageKey(name, pageKey, pageKeyLength) { - function strMTE(str) { - return str.replace(/\\/g, '\\\\').replace(/\+/g, '\\+').replace(/\./g, '\\.').replace(/\?/g, '\\?').replace(/\{/g, '\\{').replace(/\}/g, '\\}').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\^/g, '\\^').replace(/\$/g, '\\$').replace(/\*/g, '\\*').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\|/g, '\\|').replace(/\//g, '\\/'); - } - var pfwordl = autoMatch.pfwordl; - var sfwordl = autoMatch.sfwordl; - var RE_enable_a = pfwordl[name].enable; - var RE_maxPrefix = pfwordl[name].maxPrefix; - var RE_character_a = pfwordl[name].character; - var RE_enable_b = sfwordl[name].enable; - var RE_maxSubfix = sfwordl[name].maxSubfix; - var RE_character_b = sfwordl[name].character; - var plwords, slwords, rep; - plwords = RE_maxPrefix > 0 ? '[' + (RE_enable_a ? strMTE(RE_character_a.join('')) : '.') + ']{0,' + RE_maxPrefix + '}' : ''; - plwords = '^\\s*' + plwords; - slwords = RE_maxSubfix > 0 ? '[' + (RE_enable_b ? strMTE(RE_character_b.join('')) : '.') + ']{0,' + RE_maxSubfix + '}' : ''; - slwords = slwords + '\\s*$'; - rep = autoMatch.cases ? '' : 'i'; - for (var i = 0; i < pageKeyLength; i++) { - pageKey[i] = new RegExp(plwords + strMTE(pageKey[i]) + slwords, rep); - } - return pageKey; - } - - // 转成正则. - prePageKey = modifyPageKey('previous', prePageKey, prePageKey.length); - nextPageKey = modifyPageKey('next', nextPageKey, nextPageKey.length); - } - } - - // By lastDream2013 略加修改,原版只能用于 Firefox - function getRalativePageStr(lastUrl, currentUrl, nextUrl) { - var getRalativePageNumArray = function getRalativePageNumArray(lasturl, url) { - if (!lasturl || !url) { - return [0, 0]; - } - var lasturlarray = lasturl.split(/-|\.|\&|\/|=|#|\?/); - var urlarray = url.split(/-|\.|\&|\/|=|#|\?/); - var url_info; - var lasturl_info; - // 一些 url_info 为 p1,p2,p3 之类的 - var handleInfo = function handleInfo(s) { - if (s) { - return s.replace(/^p/, ''); - } - return s; - }; - while (urlarray.length !== 0) { - url_info = handleInfo(urlarray.pop()); - lasturl_info = handleInfo(lasturlarray.pop()); - if (url_info != lasturl_info) { - if (/[0-9]+/.test(url_info) && (url_info == '2' || /[0-9]+/.test(lasturl_info))) { - return [parseInt(lasturl_info) || 1, parseInt(url_info)]; - } - } - } - return [0, 0]; - }; - var relativeOff; - - // 论坛和搜索引擎网页显示实际页面信息 - var relativePageNumarray = []; - if (nextUrl) { - relativePageNumarray = getRalativePageNumArray(currentUrl, nextUrl); - } else { - relativePageNumarray = getRalativePageNumArray(lastUrl, currentUrl); - relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; // 用的上一页的相对信息比较的,要补充差值…… - relativePageNumarray[1] = relativePageNumarray[1] + relativeOff; - relativePageNumarray[0] = relativePageNumarray[0] + relativeOff; - } - - // console.log('[获取实际页数] ', '要比较的3个页数:',arguments, ',得到的差值:', relativePageNumarray); - if (isNaN(relativePageNumarray[0]) || isNaN(relativePageNumarray[1])) { - return ''; - } - var realPageSiteMatch = false; - relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; - // 上一页与下一页差值为1,并最大数值不超过10000(一般论坛也不会超过这么多页……) - if (relativeOff === 1 && relativePageNumarray[1] < 10000) { - realPageSiteMatch = true; - } - - // 上一页与下一页差值不为1,但上一页与下一页差值能被上一页与下一面所整除的,有规律的页面 - if (!realPageSiteMatch && relativeOff !== 1) { - if (relativePageNumarray[1] % relativeOff === 0 && relativePageNumarray[0] % relativeOff === 0) { - realPageSiteMatch = true; - } - } - if (!realPageSiteMatch) { - // 不满足以上条件,再根据地址特征来匹配 - var sitePattern; - for (var i = 0, length = REALPAGE_SITE_PATTERN.length; i < length; i++) { - sitePattern = REALPAGE_SITE_PATTERN[i]; - if (currentUrl.toLocaleLowerCase().indexOf(sitePattern) >= 0) { - realPageSiteMatch = true; - break; - } - } - } - var relativePageStr; - if (realPageSiteMatch) { - // 如果匹配就显示实际网页信息 - if (userLang === 'zh_CN') { - if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { - // 一般是搜索引擎的第xx - xx项…… - relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' 项 ]'; - } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { - // 一般的翻页数,差值应该是1 - relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' 页 ]'; - } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { - // 找不到的话…… - relativePageStr = ' [ 实际网页结束 ]'; - } - } else { - if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { - // 一般是搜索引擎的第xx - xx项…… - relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' ]'; - } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { - // 一般的翻页数,差值应该是1 - relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' ]'; - } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { - // 找不到的话…… - relativePageStr = ' [ Actual elements ends ]'; - } - } - } else { - relativePageStr = ''; - } - return relativePageStr || ''; - } - }).catch(function (err) { - console.log(err); - }); - - // ------------------------下面的不要管他----------------- - /// //////////////////////////////////////////////////////////////// - - // 变量 - var isHashchangeSite = false; - var hashchangeTimer = 0; - - // ==================== libs ============================== - /** - * - * @param {IHrefIncObject} obj obj - * @param {Document=} doc document - * @param {Window=} win window - * @param {string=} cplink cplink - * @returns {string} next link - * @description 地址栏递增处理函数 - */ - function hrefInc(obj, doc, win, cplink) { - var _cplink = cplink; - function getHref(href) { - var mFails = obj.mFails; - if (!mFails) return href; - var str; - if (typeof mFails === 'string') { - str = mFails; - } else { - var array = []; - for (var i = 0, ii = mFails.length; i < ii; i++) { - var fx = mFails[i]; - if (!fx) continue; - if (typeof fx !== 'string' || fx.indexOf('re;') === 0) { - var fxre = typeof fx === 'string' ? toRE(fx.slice(3)) : fx; - var mValue = href.match(fxre); - if (!mValue) return href; - array.push(mValue); - } else { - array.push(fx); - } - } - str = array.join(''); - } - return str; - } - var sa = obj.startAfter; - var index; - if (typeof sa === 'string') { - if (sa[0] == '#') { - _cplink = doc.location.href; - } - index = _cplink.indexOf(sa); - if (index == -1) { - _cplink = getHref(_cplink); - index = _cplink.indexOf(sa); - if (index == -1) return; - } - } else { - var tsa = _cplink.match(sa); - if (!tsa) { - _cplink = getHref(_cplink); - sa = (_cplink.match(sa) || [])[0]; - if (!sa) return; - index = _cplink.indexOf(sa); - if (index == -1) return; - } else { - sa = tsa[0]; - index = _cplink.indexOf(sa); - } - } - index += sa.length; - var max = obj.max === undefined ? 9999 : obj.max; - var min = obj.min === undefined ? 1 : obj.min; - var aStr = _cplink.slice(0, index); - var bStr = _cplink.slice(index); - var nbStr = bStr.replace(/^(\d+)(.*)$/, function (a, b, c) { - b = Number(b) + obj.inc; - if (b >= max || b < min) return a; - return b + c; - }); - if (nbStr !== bStr) { - var ilresult; - try { - ilresult = obj.isLast(doc, unsafeWindow, _cplink); - } catch (e) {} - if (ilresult) return; - return aStr + nbStr; - } - } - - // ==================== functions ============================== - function handleLazyImgSrc(rule, doc) { - var imgAttrs = rule.split('|'); - imgAttrs.forEach(function (attr) { - attr = attr.trim(); - [].forEach.call(doc.querySelectorAll('img[' + attr + ']'), function (img) { - var newSrc = img.getAttribute(attr); - if (newSrc && newSrc != img.src) { - img.setAttribute('src', newSrc); - img.removeAttribute(attr); - } - }); - }); - } - - /** - * - * @param {HTMLDocument} doc Document Fragment - * @param {String} scriptFilter Regex string - * @description Remove scripts node from doc - * @returns {void} - */ - function removeScripts(doc, scriptFilter) { - var scripts = getAllElements('css;script', doc); - var regFilter; - if (scriptFilter) { - regFilter = toRE(scriptFilter); - } - /** @type {HTMLScriptElement} */ - var scripts_x; - for (var i = scripts.length - 1; i >= 0; i--) { - //@ts-ignore - scripts_x = scripts[i]; - var iremove = false; - if (regFilter) { - if (scripts_x.hasOwnProperty('src')) { - if (!regFilter.test(scripts_x.src)) { - iremove = true; - } - } - if (scripts_x.text) { - if (!regFilter.test(scripts_x.text)) { - iremove = true; - } - } - if (iremove) { - scripts_x.parentNode.removeChild(scripts_x); - } - } else { - scripts_x.parentNode.removeChild(scripts_x); - } - } - } - - /** - * - * @param {string} str str - * @returns {HTMLDocument} document - */ - function createDocumentByString(str) { - // string转为DOM - if (!str) { - logger.error("[Super-preloader]", 'No string found to be converted to DOM'); - return; - } - if (document.documentElement.nodeName != 'HTML') { - return new DOMParser().parseFromString(str, 'application/xhtml+xml'); - } - /**@type {HTMLDocument} */ - var doc; - try { - // firefox and chrome 30+,Opera 12 会报错 - doc = new DOMParser().parseFromString(str, 'text/html'); - } catch (ex) {} - if (doc) { - return doc; - } - if (document.implementation.createHTMLDocument) { - doc = document.implementation.createHTMLDocument('superPreloader'); - } else { - try { - //@ts-ignore - doc = document.cloneNode(false); - doc.appendChild(doc.importNode(document.documentElement, false)); - doc.documentElement.appendChild(doc.createElement('head')); - doc.documentElement.appendChild(doc.createElement('body')); - } catch (e) {} - } - if (!doc) return; - var range = document.createRange(); - range.selectNodeContents(document.body); - var fragment = range.createContextualFragment(str); - doc.body.appendChild(fragment); - var headChildNames = { - TITLE: true, - META: true, - LINK: true, - STYLE: true, - BASE: true - }; - var child; - var body = doc.body; - var bchilds = body.childNodes; - for (var i = bchilds.length - 1; i >= 0; i--) { - // 移除head的子元素 - child = bchilds[i]; - if (headChildNames[child.nodeName]) body.removeChild(child); - } - return doc; - } - - /** - * - * @param {string|HTMLElement} href href - * @returns {string} href - * @description 从相对路径的a.href获取完全的href值. - */ - function getFullHref(href) { - // getAttribute may give relative url but href always give full url - if (typeof href !== 'string') href = href.getAttribute('href'); - - /** @type {HTMLAnchorElement} */ - // @ts-ignore - var a = getFullHref.a; - if (!a) { - //@ts-ignore - getFullHref.a = a = document.createElement('a'); - } - a.href = href; - return a.href; - } - function getFloatWindowWith() { - var el = document.getElementById('sp-fw-container'); - /** @type {HTMLElement} */ - //@ts-ignore - var elc = el.cloneNode(true); - elc.id = `${el.id}`; - elc.style.visibility = 'hidden'; - //@ts-ignore - elc.querySelector('#sp-fw-content').style.display = 'block'; - document.body.appendChild(elc); - //@ts-ignore - var width = elc.querySelector('#sp-fw-content').offsetWidth; - elc.remove(); - return width; - } - - /** - * Get next page link from an element - * @param {string | HTMLElement} elem nextlink element - * @returns {String} link of next page - */ - function elemToHref(elem) { - if (!elem) return undefined; - if (typeof elem === 'string' || elem.hasAttribute('href')) { - return getFullHref(elem); - } else { - // eslint-disable-next-line no-script-url - return 'javascript:void(0);'; // pseudo href - } - } - })(); - -})(); + iframe.addEventListener('load', function (e) { + //@ts-ignore + var body = e.currentTarget.contentDocument.body; + if (body && body.firstChild) { + floatWO.updateColor('prefetcher'); + floatWO.CmodeIcon('hide'); + floatWO.loadedIcon('show'); + //@ts-ignore + e.currentTarget.removeEventListener('load', arguments.callee, false); + if (SSS.lazyImgSrc) { + handleLazyImgSrc(SSS.lazyImgSrc, body); + } + } + }, false); + if (SSS.viewcontent) { + var container = cContainer(); + container.div.style.display = 'block'; + container.div2.innerHTML = 'iframe full prefetch: ' + '' + 'Prefetch URL: ' + '' + nextlink + ''; + iframe.height = '300px'; + container.div.appendChild(iframe); + } else { + document.body.appendChild(iframe); + } + } else { + var reqConf = { + headers: SSS.a_headers ? SSS.a_headers : { + Referer: cplink + } + }; + got.get(nextlink, reqConf).then(function (res) { + var doc = createDocumentByString(res.data); + if (!doc) { + logger.error("[Super-preloader]", 'Document object creation failed!'); + return; + } + if (SSS.lazyImgSrc) { + handleLazyImgSrc(SSS.lazyImgSrc, doc); + } + var images = doc.images; + var isl = images.length; + var img; + var iarray = []; + var i; + var existSRC = {}; + var isrc; + for (i = isl - 1; i >= 0; i--) { + isrc = images[i].getAttribute('src'); + if (!isrc || existSRC[isrc]) { + continue; + } else { + existSRC[isrc] = true; + } + img = document.createElement('img'); + img.src = isrc; + iarray.push(img); + } + var container = cContainer(); + var div = container.div; + i = iarray.length; + container.div2.innerHTML = 'Number of prefetched pictures: ' + '' + i + '' + '' + 'Prefetch URL:' + '' + nextlink + ''; + logger.info("[Super-preloader]", 'Number of prefetched pictures: ' + i + 'Prefetch URL: ' + nextlink); + for (i -= 1; i >= 0; i--) { + div.appendChild(iarray[i]); + } + if (SSS.viewcontent) { + container.div.style.display = 'block'; + } + floatWO.updateColor('prefetcher'); + floatWO.loadedIcon('show'); + floatWO.CmodeIcon('hide'); + }); + } + } + + // 执行开始../////////////////// + + // 分析黑名单 + var blackList_re = new RegExp(blackList.map(function (x) { + if (x.substring(0, 3).toLowerCase() == 're:') { + return x.substring(4); + } else { + return wildcardToRegExpStr(x); + } + }).join('|')); + if (blackList_re.test(url)) { + logger.debug("[Super-preloader]", 'Matched blacklist, JS execution stopped'); + return; + } + + // 是否在frame上加载.. + if (prefs.DisableI && window.self != window.parent) { + var isReturn = !_find(DIExclude, function (x) { + //@ts-ignore + return x[1] && x[2].test(url); + }); + if (isReturn) { + logger.debug("[Super-preloader]", `The page with url:${url} is not a top-level window, JS execution stopped`); + return; + } + } + logger.debug("[Super-preloader]", `Page url is: ${url}, JS loaded successfully`); + + // 第一阶段..分析高级模式.. + if (prefs.disableBuiltinRules) { + logger.warn("[Super-preloader]", 'Builtin js rules are disabled'); + } else { + SSRules = SSRules.concat(jsSiteRule); + } + if (prefs.disableBuiltinSubscriptionRules) { + logger.warn("[Super-preloader]", 'Remote json rules are disabled'); + } else { + SSRules = SSRules.concat(jsonRule); + } + if (!prefs.disableBuiltinRules) { + SSRules = SSRules.concat(jsGeneralRule); + } + if (!prefs.numOfRule || prefs.numOfRule != SSRules.length) { + prefs.numOfRule = SSRules.length; + GM.setValue('prefs', prefs); + } + + // 重要的变量两枚. + /** @type {Array} */ + var pagedLinks = [document.location.href]; + /** @type {HTMLElement|string} */ + var nextlinkElem; + /** @type {string} */ + var nextlink; + /** @type {HTMLElement|string} */ + var prelink; + + //= ============== + + /**@type {IRuntimeRule} */ + var SSS = {}; + var findCurSiteInfo = /*#__PURE__*/function () { + var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5() { + var SIIAD, Rurl, ii, _loop, _ret, i, FA; + return _regeneratorRuntime.wrap(function _callee5$(_context6) { + while (1) switch (_context6.prev = _context6.next) { + case 0: + SIIAD = SITEINFO_D.autopager; + ii = SSRules.length; + if (userLang === 'zh_CN') { + logger.debug("[Super-preloader]", `高级规则数目:${ii}`); + logger.debug("[Super-preloader]", `Number of rules > ${ii - jsonRule.length} from other sources, such as: wedata.net`); + } else { + logger.debug("[Super-preloader]", `Number of advanced rules:${ii}`); + } + _loop = /*#__PURE__*/_regeneratorRuntime.mark(function _loop() { + var SII, SIIA, documentFilter, pageElement; + return _regeneratorRuntime.wrap(function _loop$(_context5) { + while (1) switch (_context5.prev = _context5.next) { + case 0: + SII = SSRules[i]; + if (!(SII.autopager && SII.autopager.ip)) { + _context5.next = 4; + break; + } + if (!(SII.autopager.ip.indexOf(serverIp) < 0)) { + _context5.next = 4; + break; + } + return _context5.abrupt("return", 0); + case 4: + Rurl = toRE(SII.url); + if (!Rurl.test(url)) { + _context5.next = 75; + break; + } + if (userLang === 'zh_CN') { + logger.debug("[Super-preloader]", 'Find current site rules:', SII); + logger.debug("[Super-preloader]", `规则ID: ${i + 1}`); + } else { + logger.debug("[Super-preloader]", 'Find rule for this website:', SII); + logger.debug("[Super-preloader]", `Rule ID: ${i + 1}`); + } + + // 运行规则的 startFilter + if (!(SII.autopager && SII.autopager.startFilter)) { + _context5.next = 17; + break; + } + _context5.prev = 8; + _context5.next = 11; + return SII.autopager.startFilter(document, window); + case 11: + logger.debug("[Super-preloader]", 'startFilter executed successfully'); + _context5.next = 17; + break; + case 14: + _context5.prev = 14; + _context5.t0 = _context5["catch"](8); + logger.error("[Super-preloader]", 'Error executing startFilter', _context5.t0); + case 17: + if (!(SII.nextLink === 'null;')) { + _context5.next = 21; + break; + } + logger.debug("[Super-preloader]", 'Find the rule for a site without nextpage', SII); + SSS.hasRule = false; + return _context5.abrupt("return", 1); + case 21: + nextlinkElem = getElement(SII.nextLink || 'auto;'); + if (nextlinkElem) { + _context5.next = 25; + break; + } + logger.warn("[Super-preloader]", 'Could not find the next page link, continue searching for other rules, skiping rule:', SII); + return _context5.abrupt("return", 0); + case 25: + // extract next page link from an a link + nextlink = getFullHref(nextlinkElem); + if (!(nextlink === document.location.href)) { + _context5.next = 29; + break; + } + nextlinkElem = null; + return _context5.abrupt("return", 0); + case 29: + if (SII.preLink && SII.preLink != 'auto;') { + // 如果设定了具体的preLink + prelink = getElement(SII.preLink); + } else { + if (prefs.autoGetPreLink) { + prelink = getElement('auto;'); + } + } + SSS = {}; + SSS.Rurl = String(Rurl); + SSS.nextLink = SII.nextLink || 'auto;'; + SSS.viewcontent = SII.viewcontent; + SSS.enable = SII.enable === undefined ? SITEINFO_D.enable : SII.enable; + SSS.useiframe = SII.useiframe === undefined ? SITEINFO_D.useiframe : SII.useiframe; + if (SII.pageElement) { + // 如果是Oautopager的规则.. + if (typeof SII.autopager !== 'object') SII.autopager = {}; + SII.autopager.pageElement = SII.pageElement; + if (!SII.autopager.useiframe) SII.autopager.useiframe = SII.useiframe; + if (SII.preLink) SII.autopager.preLink = SII.preLink; + if (SII.insertBefore) SII.autopager.HT_insert = [SII.insertBefore, 1]; + } + + // 自动翻页设置. + SIIA = SII.autopager; + if (!SIIA) { + _context5.next = 68; + break; + } + SSS.a_pageElement = SIIA.pageElement; + if (SSS.a_pageElement) { + _context5.next = 42; + break; + } + return _context5.abrupt("return", 1); + case 42: + SSS.a_manualA = SIIA.manualA === undefined ? SIIAD.manualA : SIIA.manualA; + SSS.a_enable = SIIA.enable === undefined ? SIIAD.enable : SIIA.enable; + SSS.a_useiframe = SIIA.useiframe === undefined ? SIIAD.useiframe : SIIA.useiframe; + SSS.a_mutationObserver = SSS.a_useiframe ? SIIA.mutationObserver === undefined ? null : SIIA.mutationObserver : null; + SSS.a_newIframe = SIIA.newIframe === undefined ? SIIAD.newIframe : SIIA.newIframe; + SSS.a_iloaded = SIIA.iloaded === undefined ? SIIAD.iloaded : SIIA.iloaded; + SSS.a_itimeout = SIIA.itimeout === undefined ? SIIAD.itimeout : SIIA.itimeout; + SSS.a_remain = SIIA.remain === undefined ? SIIAD.remain : SIIA.remain; + SSS.a_maxpage = SIIA.maxpage === undefined ? SIIAD.maxpage : SIIA.maxpage; + SSS.a_separator = SIIA.separator === undefined ? SIIAD.separator : SIIA.separator; + SSS.a_sepdivDom = SIIA.sepdivDom === undefined ? undefined : SIIA.sepdivDom; + SSS.a_separatorReal = SIIA.separatorReal === undefined ? SIIAD.separatorReal : SIIA.separatorReal; + SSS.a_replaceE = SIIA.replaceE; + SSS.a_HT_insert = SIIA.HT_insert; + SSS.a_relatedObj = SIIA.relatedObj === undefined ? SIIAD.relatedObj : SIIA.relatedObj; + SSS.a_ipages = SIIA.ipages === undefined ? SIIAD.ipages : SIIA.ipages; + + // new + SSS.filter = SII.filter || SIIA.filter; // 新增了函数的形式,原来的功能是移除 pageElement + documentFilter = SII.documentFilter || SIIA.documentFilter; + if (documentFilter === 'startFilter') { + SSS.a_documentFilter = function (doc) { + return SII.autopager.startFilter(doc); + }; + } else if (typeof documentFilter === 'function') { + SSS.a_documentFilter = documentFilter; + } else { + SSS.a_documentFilter = undefined; + } + SSS.a_scriptFilter = SIIA.scriptFilter === undefined ? '' : SIIA.scriptFilter; + SSS.a_stylish = SII.stylish || SIIA.stylish; + SSS.lazyImgSrc = SIIA.lazyImgSrc; + SSS.a_headers = SIIA.headers === undefined ? undefined : SIIA.headers; // custom header for XHRLoaded + SSS.a_reload = SIIA.reload === undefined ? SIIAD.reload : SIIA.reload; // force reload iframe + SSS.a_sandbox = SIIA.sandbox === undefined ? SIIAD.sandbox : SIIA.sandbox; + + // 在翻页的时候会有一些其他元素占据了页面的高度,导致翻页不精准。 + // 比如正文下面的推荐文章列表(占据超过整个页面10%就很难受) + SSS.a_excludeElement = SIIA.excludeElement; + case 68: + // 检验是否存在内容 + pageElement = getElement(SSS.a_pageElement); + if (!(!pageElement || Array.isArray(pageElement) && pageElement.length === 0)) { + _context5.next = 73; + break; + } + nextlinkElem = null; + logger.error("[Super-preloader]", 'Could not find content, skiping rule:', SII, 'Continue to search for other rules.'); + return _context5.abrupt("return", 0); + case 73: + SSS.hasRule = true; + return _context5.abrupt("return", 1); + case 75: + case "end": + return _context5.stop(); + } + }, _loop, null, [[8, 14]]); + }); + i = 0; + case 5: + if (!(i < ii)) { + _context6.next = 15; + break; + } + return _context6.delegateYield(_loop(), "t0", 7); + case 7: + _ret = _context6.t0; + if (!(_ret === 0)) { + _context6.next = 10; + break; + } + return _context6.abrupt("continue", 12); + case 10: + if (!(_ret === 1)) { + _context6.next = 12; + break; + } + return _context6.abrupt("break", 15); + case 12: + i++; + _context6.next = 5; + break; + case 15: + if (!SSS.hasRule) { + // 自动搜索. + if (!autoMatch.keyMatch) { + logger.warn("[Super-preloader]", 'Auto match is disabled'); + } else { + logger.warn("[Super-preloader]", 'No rules are found. Auto match starts'); + nextlinkElem = autoGetLink(); + if (nextlinkElem) { + // 强制模式. + FA = autoMatch.FA; + SSS.Rurl = window.localStorage ? 'am:' + (url.match(/^https?:\/\/[^:]*\//i) || [])[0] : 'am:automatch'; + SSS.enable = true; + SSS.nextLink = 'auto;'; + SSS.viewcontent = autoMatch.viewcontent; + SSS.useiframe = autoMatch.useiframe || SITEINFO_D.autopager.useiframe; + SSS.a_force = true; + SSS.a_manualA = FA.manualA; + SSS.a_enable = FA.enable || SITEINFO_D.autopager.force_enable; // Force join is enabled when this becomes true + SSS.a_useiframe = FA.useiframe || SITEINFO_D.useiframe; + SSS.a_iloaded = FA.iloaded; + SSS.a_itimeout = FA.itimeout; + SSS.a_remain = FA.remain; + SSS.a_maxpage = FA.maxpage; + SSS.a_separator = FA.separator; + SSS.a_ipages = FA.ipages; + } + } + } + + // 如果规则没 lazyImgSrc,设置默认值 + if (!SSS.lazyImgSrc) { + SSS.lazyImgSrc = prefs.lazyImgSrc; + } + logger.debug("[Super-preloader]", `Total time spent on searching for advanced rules and automatic matching: ${new Date().getTime() - startTime.getTime()}ms`); + case 18: + case "end": + return _context6.stop(); + } + }, _callee5); + })); + return function findCurSiteInfo() { + return _ref5.apply(this, arguments); + }; + }(); + findCurSiteInfo().then(function () { + // 上下页都没有找到啊 + if (!nextlinkElem && !prelink) { + logger.warn("[Super-preloader]", `No related links found, JS execution stopped. Total time spent: ${new Date().getTime() - startTime.getTime()}ms`); + return; + } else if (!nextlink) { + logger.error("[Super-preloader]", 'The link to the next page does not exist, JS cannot continue.'); + logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); + return; + } else { + logger.debug("[Super-preloader]", 'Previous link element:', prelink); + logger.debug("[Super-preloader]", 'Next link element:', nextlinkElem); + nextlink = elemToHref(nextlinkElem); + logger.debug("[Super-preloader]", 'Next link:', nextlink); + //@ts-ignore + prelink = prelink ? prelink.href || prelink : undefined; + } + var keyBinding = { + go: function go() { + if (typeof nextlink === 'string') window.location.href = nextlink; + }, + back: function back() { + //fixme + if (!prelink) getElement('auto;'); + if (typeof prelink === 'string') window.location.href = prelink; + }, + register: function register( /**@type {IPrefs} */prefs) { + var _this = this; + if (prefs.arrowKeyPage) { + logger.debug("[Super-preloader]", 'Adding left and right arrow keys to autopager listener.'); + document.addEventListener('keyup', function (e) { + //@ts-ignore + var tarNN = e.target.nodeName; + if (tarNN != 'BODY' && tarNN != 'HTML') return; + + // check is a combo pressed + if (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) { + return; + } + switch (e.keyCode) { + case 37: + _this.back(); + break; + case 39: + _this.go(); + break; + } + }, false); + + // 监听下一页事件. + logger.debug("[Super-preloader]", '添加鼠标手势翻页监听'); + document.addEventListener('superPreloader.go', function () { + _this.go(); + }, false); + + // 监听下一页事件. + document.addEventListener('superPreloader.back', function () { + _this.back(); + }, false); + } + } + }; + keyBinding.register(prefs); + loadLocalSetting(SSS); + if (!SSS.enable) { + logger.warn("[Super-preloader]", 'This rule is disabled, script execution is stopped'); + logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); + return; + } + if (!SSS.hasRule) { + SSS.a_force = true; + } + if (SSS.a_force) { + SSS.a_pageElement = '//body/*'; + SSS.a_HT_insert = undefined; + SSS.a_relatedObj = undefined; + } + if (prefs.floatWindow) { + logger.debug("[Super-preloader]", 'Creating a floating window'); + floatWindow(SSS); + var floatWindowWidth = getFloatWindowWith(); + displace(document.getElementById('sp-fw-container'), { + handle: document.getElementById('sp-fw-rect'), + customMove: function customMove(el, x, y) { + delete el.style.left; + delete el.style.bottom; + var right = document.body.clientWidth - floatWindowWidth - x; + if (right < 0) { + right = 0; + } else if (right > window.innerWidth - floatWindowWidth) { + right = window.innerWidth - floatWindowWidth; + } + var top = y; + if (top > window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight) { + top = window.innerHeight - document.getElementById('sp-fw-rect').scrollHeight; + } else if (top < 0) { + top = 0; + } + el.style.right = `${right}px`; + el.style.top = `${top}px`; + }, + onMouseUp: function onMouseUp(el) { + prefs.FW_offset[0] = parseInt(el.style.top.replace('px', ''), 10); + prefs.FW_offset[1] = parseInt(el.style.right.replace('px', ''), 10); + prefs.FW_position = 2; + GM.setValue('prefs', prefs); + } + }); + document.getElementById('sp-fw-container').style.position = 'fixed'; + } + logger.debug("[Super-preloader]", `Total time spent:${new Date().getTime() - startTime.getTime()}ms`); + + // 预读或者翻页. + if (SSS.a_enable) { + logger.debug("[Super-preloader]", 'Initializing, autopager mode.'); + autopager(SSS, floatWO); + } else { + logger.debug("[Super-preloader]", 'Initializing, prefetch mode.'); + prefetcher(SSS, floatWO); + } + }); + + // 获取单个元素,混合 + /** + * + * @param {string|Function|Array|IHrefIncObject} selector selector + * @param {HTMLElement|Document=} contextNode element + * @param {Document=} doc document + * @param {Window=} win window + * @returns {HTMLElement} element + */ + function getElement(selector, contextNode, doc, win) { + var _cplink = cplink; + var ret; + if (!selector) return ret; + doc = doc || document; + win = win || window; + contextNode = contextNode || doc; + if (typeof selector === 'string') { + if (selector.search(/^css;/i) === 0) { + ret = getElementByCSS(selector.slice(4), contextNode); + } else if (selector.toLowerCase() == 'auto;') { + ret = autoGetLink(doc); + } else { + ret = getElementByXpath(selector, contextNode, doc); + } + } else if (typeof selector === 'function') { + ret = selector(doc, win, _cplink); + } else if (selector instanceof Array) { + for (var i = 0, l = selector.length; i < l; i++) { + ret = getElement(selector[i], contextNode, doc, win); + if (ret) { + break; + } + } + } else { + ret = hrefInc(selector, doc, win, _cplink); + } + return ret; + } + var docChecked; + /** + * + * @param {Document=} doc document + * @param {Window=} win window + * @returns {HTMLElement} a + */ + function autoGetLink(doc, win) { + if (!autoMatch.keyMatch) return; + //@ts-ignore + if (!parseKWRE.done) { + parseKWRE(); + //@ts-ignore + parseKWRE.done = true; + } + var startTime = new Date(); + doc = doc || document; + if (doc == document) { + // 当前文档,只检查一次. + if (docChecked) { + // @ts-ignore + return nextlink; + } + docChecked = true; + } + var _prePageKey = prePageKey; + var _nextPageKey = nextPageKey; + var _nPKL = nextPageKey.length; + var _pPKL = prePageKey.length; + var _getFullHref = getFullHref; + var _getAllElementsByXpath = getAllElementsByXpath; + var _Number = Number; + var _domain_port = domain_port; + var alllinks = doc.links; + var alllinksl = alllinks.length; + var curLHref = cplink; + var _nextlink; + var _prelink; + //@ts-ignore + if (!autoGetLink.checked) { + // 第一次检查 + _nextlink = nextlink; + _prelink = prelink; + } else { + _prelink = true; + } + var DCEnable = autoMatch.digitalCheck; + var DCRE = /^\s*\D{0,1}(\d+)\D{0,1}\s*$/; + var i, a, atext, numtext; + var aP; + var initSD; + var searchD = 1; + var preS1; + var preS2; + var searchedD; + var pSNText; + var preSS; + var nodeType; + var nextS1, nextS2, nSNText, nextSS; + var aimgs, j, jj, aimg_x, xbreak, k, keytext; + function finalCheck(a, type) { + var ahref = a.getAttribute('href'); // 在chrome上当是非当前页面文档对象的时候直接用a.href访问,不返回href + if (ahref == '#') { + return null; + } + ahref = _getFullHref(ahref); // 从相对路径获取完全的href; + + // 3个条件:http协议链接,非跳到当前页面的链接,非跨域 + if (/^https?:/i.test(ahref) && ahref.replace(/#.*$/, '') != curLHref && ahref.match(/https?:\/\/([^\/]+)/)[1] == _domain_port) { + logger.debug("[Super-preloader]", type == 'pre' ? 'previous' : 'next' + 'match:', atext); + return a; // 返回对象A + // return ahref; + } + } + logger.debug("[Super-preloader]", `Number of full document links:${alllinksl}`); + for (i = 0; i < alllinksl; i++) { + if (_nextlink && _prelink) break; + a = alllinks[i]; + if (!a) continue; // undefined跳过 + // links集合返回的本来就是包含href的a元素..所以不用检测 + // if(!a.hasAttribute("href"))continue; + atext = a.textContent; + if (atext) { + if (DCEnable) { + numtext = atext.match(DCRE); + if (numtext) { + // 是不是纯数字 + // debug(numtext); + numtext = numtext[1]; + aP = a; + initSD = 0; + if (!_nextlink) { + preS1 = a.previousSibling; + preS2 = a.previousElementSibling; + while (!(preS1 || preS2) && initSD < searchD) { + aP = aP.parentNode; + if (aP) { + preS1 = aP.previousSibling; + //@ts-ignore + preS2 = aP.previousElementSibling; + } + initSD++; + } + searchedD = initSD > 0; + if (preS1 || preS2) { + pSNText = preS1 ? preS1.textContent.match(DCRE) : ''; + if (pSNText) { + preSS = preS1; + } else { + pSNText = preS2 ? preS2.textContent.match(DCRE) : ''; + preSS = preS2; + } + if (pSNText) { + pSNText = pSNText[1]; + if (_Number(pSNText) == _Number(numtext) - 1) { + nodeType = preSS.nodeType; + if (nodeType == 3 || nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', preSS, doc).length === 0 : !preSS.hasAttribute('href') || _getFullHref(preSS.getAttribute('href')) == curLHref)) { + _nextlink = finalCheck(a, 'next'); + } + continue; + } + } + } + } + if (!_prelink) { + nextS1 = a.nextSibling; + nextS2 = a.nextElementSibling; + while (!(nextS1 || nextS2) && initSD < searchD) { + aP = aP.parentNode; + if (aP) { + nextS1 = a.nextSibling; + nextS2 = a.nextElementSibling; + } + initSD++; + } + searchedD = initSD > 0; + if (nextS1 || nextS2) { + nSNText = nextS1 ? nextS1.textContent.match(DCRE) : ''; + if (nSNText) { + nextSS = nextS1; + } else { + nSNText = nextS2 ? nextS2.textContent.match(DCRE) : ''; + nextSS = nextS2; + } + if (nSNText) { + nSNText = nSNText[1]; + if (_Number(nSNText) == _Number(numtext) + 1) { + nodeType = nextSS.nodeType; + if (nodeType == 3 || + // @ts-ignore + nodeType == 1 && (searchedD ? _getAllElementsByXpath('./descendant-or-self::a[@href]', nextSS, doc).length === 0 : !nextSS.hasAttribute('href') || _getFullHref(nextSS.getAttribute('href')) == curLHref)) { + _prelink = finalCheck(a, 'pre'); + } + } + } + } + } + continue; + } + } + } else { + atext = a.title; + } + if (!atext) { + aimgs = a.getElementsByTagName('img'); + for (j = 0, jj = aimgs.length; j < jj; j++) { + aimg_x = aimgs[j]; + atext = aimg_x.alt || aimg_x.title; + if (atext) break; + } + } + if (!atext) continue; + if (!_nextlink) { + xbreak = false; + for (k = 0; k < _nPKL; k++) { + keytext = _nextPageKey[k]; + //@ts-ignore + if (!keytext.test(atext)) continue; + _nextlink = finalCheck(a, 'next'); + xbreak = true; + break; + } + if (xbreak || _nextlink) continue; + } + if (!_prelink) { + for (k = 0; k < _pPKL; k++) { + keytext = _prePageKey[k]; + //@ts-ignore + if (!keytext.test(atext)) continue; + _prelink = finalCheck(a, 'pre'); + break; + } + } + } + logger.debug("[Super-preloader]", `Time to search ${i} links:${new Date().getTime() - startTime.getTime()}ms`); + //@ts-ignore + if (!autoGetLink.checked) { + // 只在第一次检测的时候,抛出上一页链接. + prelink = _prelink; + //@ts-ignore + autoGetLink.checked = true; + } + return _nextlink; + } + function parseKWRE() { + function modifyPageKey(name, pageKey, pageKeyLength) { + function strMTE(str) { + return str.replace(/\\/g, '\\\\').replace(/\+/g, '\\+').replace(/\./g, '\\.').replace(/\?/g, '\\?').replace(/\{/g, '\\{').replace(/\}/g, '\\}').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\^/g, '\\^').replace(/\$/g, '\\$').replace(/\*/g, '\\*').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\|/g, '\\|').replace(/\//g, '\\/'); + } + var pfwordl = autoMatch.pfwordl; + var sfwordl = autoMatch.sfwordl; + var RE_enable_a = pfwordl[name].enable; + var RE_maxPrefix = pfwordl[name].maxPrefix; + var RE_character_a = pfwordl[name].character; + var RE_enable_b = sfwordl[name].enable; + var RE_maxSubfix = sfwordl[name].maxSubfix; + var RE_character_b = sfwordl[name].character; + var plwords, slwords, rep; + plwords = RE_maxPrefix > 0 ? '[' + (RE_enable_a ? strMTE(RE_character_a.join('')) : '.') + ']{0,' + RE_maxPrefix + '}' : ''; + plwords = '^\\s*' + plwords; + slwords = RE_maxSubfix > 0 ? '[' + (RE_enable_b ? strMTE(RE_character_b.join('')) : '.') + ']{0,' + RE_maxSubfix + '}' : ''; + slwords = slwords + '\\s*$'; + rep = autoMatch.cases ? '' : 'i'; + for (var i = 0; i < pageKeyLength; i++) { + pageKey[i] = new RegExp(plwords + strMTE(pageKey[i]) + slwords, rep); + } + return pageKey; + } + + // 转成正则. + prePageKey = modifyPageKey('previous', prePageKey, prePageKey.length); + nextPageKey = modifyPageKey('next', nextPageKey, nextPageKey.length); + } + } + + // By lastDream2013 略加修改,原版只能用于 Firefox + function getRalativePageStr(lastUrl, currentUrl, nextUrl) { + var getRalativePageNumArray = function getRalativePageNumArray(lasturl, url) { + if (!lasturl || !url) { + return [0, 0]; + } + var lasturlarray = lasturl.split(/-|\.|\&|\/|=|#|\?/); + var urlarray = url.split(/-|\.|\&|\/|=|#|\?/); + var url_info; + var lasturl_info; + // 一些 url_info 为 p1,p2,p3 之类的 + var handleInfo = function handleInfo(s) { + if (s) { + return s.replace(/^p/, ''); + } + return s; + }; + while (urlarray.length !== 0) { + url_info = handleInfo(urlarray.pop()); + lasturl_info = handleInfo(lasturlarray.pop()); + if (url_info != lasturl_info) { + if (/[0-9]+/.test(url_info) && (url_info == '2' || /[0-9]+/.test(lasturl_info))) { + return [parseInt(lasturl_info) || 1, parseInt(url_info)]; + } + } + } + return [0, 0]; + }; + var relativeOff; + + // 论坛和搜索引擎网页显示实际页面信息 + var relativePageNumarray = []; + if (nextUrl) { + relativePageNumarray = getRalativePageNumArray(currentUrl, nextUrl); + } else { + relativePageNumarray = getRalativePageNumArray(lastUrl, currentUrl); + relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; // 用的上一页的相对信息比较的,要补充差值…… + relativePageNumarray[1] = relativePageNumarray[1] + relativeOff; + relativePageNumarray[0] = relativePageNumarray[0] + relativeOff; + } + + // console.log('[获取实际页数] ', '要比较的3个页数:',arguments, ',得到的差值:', relativePageNumarray); + if (isNaN(relativePageNumarray[0]) || isNaN(relativePageNumarray[1])) { + return ''; + } + var realPageSiteMatch = false; + relativeOff = relativePageNumarray[1] - relativePageNumarray[0]; + // 上一页与下一页差值为1,并最大数值不超过10000(一般论坛也不会超过这么多页……) + if (relativeOff === 1 && relativePageNumarray[1] < 10000) { + realPageSiteMatch = true; + } + + // 上一页与下一页差值不为1,但上一页与下一页差值能被上一页与下一面所整除的,有规律的页面 + if (!realPageSiteMatch && relativeOff !== 1) { + if (relativePageNumarray[1] % relativeOff === 0 && relativePageNumarray[0] % relativeOff === 0) { + realPageSiteMatch = true; + } + } + if (!realPageSiteMatch) { + // 不满足以上条件,再根据地址特征来匹配 + var sitePattern; + for (var i = 0, length = REALPAGE_SITE_PATTERN.length; i < length; i++) { + sitePattern = REALPAGE_SITE_PATTERN[i]; + if (currentUrl.toLocaleLowerCase().indexOf(sitePattern) >= 0) { + realPageSiteMatch = true; + break; + } + } + } + var relativePageStr; + if (realPageSiteMatch) { + // 如果匹配就显示实际网页信息 + if (userLang === 'zh_CN') { + if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { + // 一般是搜索引擎的第xx - xx项…… + relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' 项 ]'; + } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { + // 一般的翻页数,差值应该是1 + relativePageStr = ' [ 实际:第 ' + relativePageNumarray[0] + ' 页 ]'; + } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { + // 找不到的话…… + relativePageStr = ' [ 实际网页结束 ]'; + } + } else { + if (relativePageNumarray[1] - relativePageNumarray[0] > 1) { + // 一般是搜索引擎的第xx - xx项…… + relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' - ' + relativePageNumarray[1] + ' ]'; + } else if (relativePageNumarray[1] - relativePageNumarray[0] === 1) { + // 一般的翻页数,差值应该是1 + relativePageStr = ' [ Actual elements/pages: ' + relativePageNumarray[0] + ' ]'; + } else if ((relativePageNumarray[0] === 0 && relativePageNumarray[1]) === 0) { + // 找不到的话…… + relativePageStr = ' [ Actual elements ends ]'; + } + } + } else { + relativePageStr = ''; + } + return relativePageStr || ''; + } + }).catch(function (err) { + console.log(err); + }); + + // ------------------------下面的不要管他----------------- + /// //////////////////////////////////////////////////////////////// + + // 变量 + var isHashchangeSite = false; + var hashchangeTimer = 0; + + // ==================== libs ============================== + /** + * + * @param {IHrefIncObject} obj obj + * @param {Document=} doc document + * @param {Window=} win window + * @param {string=} cplink cplink + * @returns {string} next link + * @description 地址栏递增处理函数 + */ + function hrefInc(obj, doc, win, cplink) { + var _cplink = cplink; + function getHref(href) { + var mFails = obj.mFails; + if (!mFails) return href; + var str; + if (typeof mFails === 'string') { + str = mFails; + } else { + var array = []; + for (var i = 0, ii = mFails.length; i < ii; i++) { + var fx = mFails[i]; + if (!fx) continue; + if (typeof fx !== 'string' || fx.indexOf('re;') === 0) { + var fxre = typeof fx === 'string' ? toRE(fx.slice(3)) : fx; + var mValue = href.match(fxre); + if (!mValue) return href; + array.push(mValue); + } else { + array.push(fx); + } + } + str = array.join(''); + } + return str; + } + var sa = obj.startAfter; + var index; + if (typeof sa === 'string') { + if (sa[0] == '#') { + _cplink = doc.location.href; + } + index = _cplink.indexOf(sa); + if (index == -1) { + _cplink = getHref(_cplink); + index = _cplink.indexOf(sa); + if (index == -1) return; + } + } else { + var tsa = _cplink.match(sa); + if (!tsa) { + _cplink = getHref(_cplink); + sa = (_cplink.match(sa) || [])[0]; + if (!sa) return; + index = _cplink.indexOf(sa); + if (index == -1) return; + } else { + sa = tsa[0]; + index = _cplink.indexOf(sa); + } + } + index += sa.length; + var max = obj.max === undefined ? 9999 : obj.max; + var min = obj.min === undefined ? 1 : obj.min; + var aStr = _cplink.slice(0, index); + var bStr = _cplink.slice(index); + var nbStr = bStr.replace(/^(\d+)(.*)$/, function (a, b, c) { + b = Number(b) + obj.inc; + if (b >= max || b < min) return a; + return b + c; + }); + if (nbStr !== bStr) { + var ilresult; + try { + ilresult = obj.isLast(doc, unsafeWindow, _cplink); + } catch (e) {} + if (ilresult) return; + return aStr + nbStr; + } + } + + // ==================== functions ============================== + function handleLazyImgSrc(rule, doc) { + var imgAttrs = rule.split('|'); + imgAttrs.forEach(function (attr) { + attr = attr.trim(); + [].forEach.call(doc.querySelectorAll('img[' + attr + ']'), function (img) { + var newSrc = img.getAttribute(attr); + if (newSrc && newSrc != img.src) { + img.setAttribute('src', newSrc); + img.removeAttribute(attr); + } + }); + }); + } + + /** + * + * @param {HTMLDocument} doc Document Fragment + * @param {String} scriptFilter Regex string + * @description Remove scripts node from doc + * @returns {void} + */ + function removeScripts(doc, scriptFilter) { + var scripts = getAllElements('css;script', doc); + var regFilter; + if (scriptFilter) { + regFilter = toRE(scriptFilter); + } + /** @type {HTMLScriptElement} */ + var scripts_x; + for (var i = scripts.length - 1; i >= 0; i--) { + //@ts-ignore + scripts_x = scripts[i]; + var iremove = false; + if (regFilter) { + if (scripts_x.hasOwnProperty('src')) { + if (!regFilter.test(scripts_x.src)) { + iremove = true; + } + } + if (scripts_x.text) { + if (!regFilter.test(scripts_x.text)) { + iremove = true; + } + } + if (iremove) { + scripts_x.parentNode.removeChild(scripts_x); + } + } else { + scripts_x.parentNode.removeChild(scripts_x); + } + } + } + + /** + * + * @param {string} str str + * @returns {HTMLDocument} document + */ + function createDocumentByString(str) { + // string转为DOM + if (!str) { + logger.error("[Super-preloader]", 'No string found to be converted to DOM'); + return; + } + if (document.documentElement.nodeName != 'HTML') { + return new DOMParser().parseFromString(str, 'application/xhtml+xml'); + } + /**@type {HTMLDocument} */ + var doc; + try { + // firefox and chrome 30+,Opera 12 会报错 + doc = new DOMParser().parseFromString(str, 'text/html'); + } catch (ex) {} + if (doc) { + return doc; + } + if (document.implementation.createHTMLDocument) { + doc = document.implementation.createHTMLDocument('superPreloader'); + } else { + try { + //@ts-ignore + doc = document.cloneNode(false); + doc.appendChild(doc.importNode(document.documentElement, false)); + doc.documentElement.appendChild(doc.createElement('head')); + doc.documentElement.appendChild(doc.createElement('body')); + } catch (e) {} + } + if (!doc) return; + var range = document.createRange(); + range.selectNodeContents(document.body); + var fragment = range.createContextualFragment(str); + doc.body.appendChild(fragment); + var headChildNames = { + TITLE: true, + META: true, + LINK: true, + STYLE: true, + BASE: true + }; + var child; + var body = doc.body; + var bchilds = body.childNodes; + for (var i = bchilds.length - 1; i >= 0; i--) { + // 移除head的子元素 + child = bchilds[i]; + if (headChildNames[child.nodeName]) body.removeChild(child); + } + return doc; + } + + /** + * + * @param {string|HTMLElement} href href + * @returns {string} href + * @description 从相对路径的a.href获取完全的href值. + */ + function getFullHref(href) { + // getAttribute may give relative url but href always give full url + if (typeof href !== 'string') href = href.getAttribute('href'); + + /** @type {HTMLAnchorElement} */ + // @ts-ignore + var a = getFullHref.a; + if (!a) { + //@ts-ignore + getFullHref.a = a = document.createElement('a'); + } + a.href = href; + return a.href; + } + function getFloatWindowWith() { + var el = document.getElementById('sp-fw-container'); + /** @type {HTMLElement} */ + //@ts-ignore + var elc = el.cloneNode(true); + elc.id = `${el.id}`; + elc.style.visibility = 'hidden'; + //@ts-ignore + elc.querySelector('#sp-fw-content').style.display = 'block'; + document.body.appendChild(elc); + //@ts-ignore + var width = elc.querySelector('#sp-fw-content').offsetWidth; + elc.remove(); + return width; + } + + /** + * Get next page link from an element + * @param {string | HTMLElement} elem nextlink element + * @returns {String} link of next page + */ + function elemToHref(elem) { + if (!elem) return undefined; + if (typeof elem === 'string' || elem.hasAttribute('href')) { + return getFullHref(elem); + } else { + // eslint-disable-next-line no-script-url + return 'javascript:void(0);'; // pseudo href + } + } + })(); + +})(_asyncToGenerator, _slicedToArray, _regeneratorRuntime, _defineProperty$1); diff --git a/assets/app.1gO23e7I.js b/assets/app.1gO23e7I.js new file mode 100644 index 000000000..555572cfc --- /dev/null +++ b/assets/app.1gO23e7I.js @@ -0,0 +1 @@ +import{R as i}from"./chunks/theme.Bw3nEMJ8.js";import{U as o,a2 as u,a3 as c,a4 as l,a5 as f,a6 as d,a7 as m,a8 as h,a9 as g,aa as A,ab as y,d as P,u as v,k as w,y as C,ac as R,ad as b,ae as E,af as S}from"./chunks/framework.qh4ipt1c.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=p(i),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return w(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&R(),b(),E(),s.setup&&s.setup(),()=>S(s.Layout)}});async function D(){globalThis.__VITEPRESS__=!0;const e=j(),a=_();a.provide(c,e);const t=l(e.route);return a.provide(f,t),a.component("Content",d),a.component("ClientOnly",m),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:h}),{app:a,router:e,data:t}}function _(){return g(T)}function j(){let e=o,a;return A(t=>{let n=y(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&D().then(({app:e,router:a,data:t})=>{a.go().then(()=>{u(a.route,t.site),e.mount("#app")})});export{D as createApp}; diff --git a/assets/baidu.BzHzvwzy.png b/assets/baidu.BzHzvwzy.png new file mode 100644 index 0000000000000000000000000000000000000000..819acced13b6aa28a1ae60dfa735a540e7b72296 GIT binary patch literal 67337 zcmafacUV(R^R_;ySU^-%Iw+{9AP5+WG%KJq73ob3HKF%VRS={E1ccBd(!2B;iai4qb4!?t96=1jfZ=0^_0WE76tyN z>%kTMMnBYqV+%7SY5D*?lJh#p&;fOmnBrlQ9|Fw4#bUhN zCiiEN)A0AW;mEA4tS3wM?~qxV$f-dHi!*h?;Xh+lsj~e2)2wiwBT>RiLsiLqb)v@3 zIlkr=HT}!(as-+az3VWwt}$w4MacX7-vQZu45>tO7}UAjsp<^6CCM&k#F+0=2>0~g z2+5D=G4wt12+Te8zlYW}=`lTtmVWxhZmjfXEW&@SnbFWI#$d4n&8a6a`8tcUUyt=) z$<^MIn(_q8;+dG)?_Y~W)a}kE{e5x~&6$(7dRvS6zha$?OR}%cO>t7#UoInH4IR|o zWMz4Q70x!y{M3y z14@@6X|eLzh;1jau%=fe?LD>fGuVs%t!LHFOT3qvtFss3Tt3Ivg-&-z^Do(MpM5&Wxj6w zxChONF#c18=k;2+KKlLDTg{Q-T&OO;6t9G3 zc(Mbr!VKBZEWysEt|U#6Wq9VSog$iWvPy2ilH(;!4zpNG7?pRaRV8jpYgZ zQ5&$vxjn_u88`P?)?rF+o2KQ^lPsfk^`5~u`$+|;0PPNyC|@KhPwj@Z^(tJU)Fl0x+E5c1G9kG_kf+Zb=ZH;8PQ@w`036FBx7|c4ZcHsQ%uSp6`Pv*@>f_$fZp9dSKnmgauQoPs=Hj2`6{a{eUgVI=eV=8> z>|V-*A-$v`%kz3z=$K)}fjsS)aq6g;CCgYx&*PX&aK#4yy5C<@E+kFfTD8eO>~ObY zadLS}3mmQWWzoYHn~DNXP4i*WGRlAHUOgYudsXIN7v{>9CytdaNqAuMrY?r(G{U{* zMvJsRB?kFT(`S}-@lx5KyRnO&^1Z$9#Zp;I3u&5_sqK6z3mt;NmHCS{kcSUpOiv@- zT}G^fA8)tI2e>=Bh%u`V54)D{Pv}UPIK(#0Q{_L9O@ikc-UJj(?ANzj_2$Hr!1fnv z4$Y$I3fgn3Rw2uq#MW=NP2r}QnsFsTW6RSg%EqRe_^Vi*d2H_|u~HSS%}ZC4tgW-J zml>L>is=hP_#%fJ-xp-}*~gVBYetnZ@#hCVX&u>wsxk+)YiGebokeWq1l-lU0O(4 z`{O;tN8iB=C0IkVN;U(zAp?xQD6zE1+c(g)XHFHr-|6>rUidBvl7BtfrpK4U4)wKP zKaT#+^R9@z2tw~68V@p!JZCQHVF9vvh1ns)k`myx^<#V zYSTJiUU6D$ga=+>w|y1NtVIJB!&{M>xoGTf8Deq_TCQc~Ofjr}3j^mu^qRE1^PXoQ z?rt|;qeLlwIoNl2E~4H|#TSPe4Lgr**D~{G!&zm#f3%k)o}UV5s}ap*tiCb9#kzDC z3}2DFiKAKur8&B@qig-?p7IaO1-tchMK&rWu#7i-`xN}7IOG>ghxNc{uPS_>M&)q{ zWTR-_3!0c84l}UuDR;`7j3UGt+S|a5y;mx1x+Nz5s)-MC{9O0S(n$W0_eHsbwU*WW z?5SS`pl&y7%HP1G_R|}*7ak24cba_$C|7xcmFIL>uh$*v?g|kq#o;tblCe45sz;AR z=uGW6*OO}p_O&i8LOdj?2|I6JYi#+Bjd5CGkdV1Oc7Ct5Th6kZapmXJH?rl%{yiWb z`5bB~q%|?|z9mkzaHV0KQ`V#!>5g2sm|*t^ejH$cO#cyC{G|k~Cwl`d57Q*v{rD69 z(1HHs^S-NZW20RUt36oD5<(1EJPeR3P!oBJuL>mQnKZio5&@FzHvQ9&7L-?E7z!g^zaD!*xY zogRgaj#=$t=fZmQwl%}y3jPpC;o{bk>nV;>1cc?q9x=f!oNd3MOe%@HSI?WI!)^+9 z^WRL7&*+g{k^JSGP%b_2r!0orRtj;lxXMF~+1q&Is0qn1D{|veEtbq;Gx5AGfBui> z_a?pc!kXUr3bf=J>${$wp2e+yB_I6;*jo1pDG!>t@%De>L$Gxpo>mVV!a-P2&`pRL zx-1-IuAY$i>~^1Cuo6}xG%carS1$LA4r^GYNnVl6BxAW*`A9!*%wtk_c=>~ZrN4XA zVR^Z>dn0wX-}hCF@z(kn_jo($@QN7Lj2{1s_W7`Kn(9p6mCYvI$6ERAc6IEr*T~x- zYcZLWxu;T{3%MaB4G;AFODP|FQ?ydQ*=$dIEkeX{E?jkI~-jLa}_!5QN9R9A9 zLq+TMZ?1r#g2`KBJTb(*9Z3mn*(?7s>l)im+k^*uwu}DHN>kcm%-e;HenhDDCRx0E zUugxO&zup4Q$3#))l)h*ogMoe zb2jS+rPPakFr1|7{cUB<7iyb)&lRLz&25CFriwcEQ~AlVC6~PY9+z-Hp`Xmc#h^T# zP(v%60TN_+d-z+;<%2I>mRAmYUFhpQr2<77(uZB*xiIbb8KSC+)j!c*Dy0pO^>6OJ zeW`=O0xaW(L25{mnBJoJCA_kfU{)<9#l8~(!futWiT~<@%y@plfBI2|Ewk+DJg9wz z`plI#BULT~RX>V3i!y$epb75PHq70hJ)F}YZv6%m6zLm^LorfZjX+qg#lUPfIsYn5 z;W->M*RuyH$|;HHDRmDli7@6hZq*a8Qis~gR1ZIrqAo^;%B{W6yh^JVyWV#Kn2UP#03rdjg=YGkC@z6j=8oi;Tkn9HWlNso-gEw; zJ;Yd*i`fC3r>k7}Zb7GUlNhV~4Y3dTIyXx);A0DAeZ0|$4%T(3{VokYhvW>tL#UiahK^Kg)KqBw{~A4uj)P&UMx6s z3i3BZHhyjf_MP_K&YZT|(6B8yFEe*x5m)6aR)Vw!%9iv_lJALy(Js8CMUdf*YtZ{G}M$Dvn$|& z$GtYh*&*(%PCQKDAuPg`*x3HflWMT6}{g4!Je_yQhOUzaE4jp z{S3aPa#?*~xu+{sp+Q)}7K*bK;(#)CD+or)Ohl|EW&f0{hb34Qlqg*4%dNTWv&Vop zAcZb8F|d4d>65QA<}L|fQK&YSyWAk<1*CXch-9x@Ef8>*E!A!4+2O|a6}-=%`%!5u zVG|FZns>*`VgQ2-1;^0a1)oMF+_lsb-q-9}+|3DJr3hMH~@|_T| z2HPsE`^Ni;Mekal1H5Tml(Ma0SWEPST4Iv#Iqj*C~WZedbq5V~Q|sEcR5;P5Bl_l|({T*rIm<#b z=XH5o+Mn|D&qBG^ylo!-jcl#nwCmwD+F9h*K6pQ2UCK$1h?d`;kTAx)h)sz_t4UgB zp}6;&j)76BrRa)OO1H#__sI=0_hr4&cY%WmL{|HYyVDZSO!WCFc-7}Yif?Lc#%Q9U z%P@6<$RF98>ygR);(j^=R8YfIJkQN;X_m1w=xUm6`B`+;LOAu$Kv`xDtepFSXY?`( zHzhu|9FPIq+j$^`;y}P6<5JvZRf4z!?RujJUf9;HM0{ODtlYpvnhJY6RHcO1FQ3+z ztD~eWt(UFIjy|3Hvf}nM7ArU6^h>?d(dXwotS4=c zYIB}X1xC*HBIRbMzKncb{Vb*IFVM4i))@|J5S8*f*ujnw<>0*X4{5w0dx|-}dhQkZ zLWEmV-BMouU{d0w7pc&0minp?J>EN*cYi~6A=TTuKq8PhsbKXArTB+^`;Wk4W{wy2 zsqz^qT{)5B2SvR8GJnUkpA~5VNjv6VOHeDF)4jMPb)&v3~TDu-6a`*K3VO# z4w)Chtt{rW2sh=^Wux&$H)l=Vfky2C7L?4aDG^@7vQ(RV)nYOK@G* ze!BxV@~Prf6rD>rt9c)@m7f~_IY_wr<9hT6ztE`8I0P*_uBY`DMFpUdOw1W>QQ`Os zrSl#v3xi|koKPPJ=0@eEl%`j21r~t3&fQ_>+3R7QnY>$n8<_xL zn^%aW2pfhmhbLEdwOWAoj;%5CNTNXVXK;`L6{E)B$2Tm&eR%};SqQXNH*)_}YQp#1 zdHfUp$1vw)4Vl1jeW(xJ3xN0*HNU%M{DfZ-(pl^MbF`x@UiyLFt0AVU`io??Yudhk z>u`DXp9tiZ7alHUB=Pw5+vlE(3^h z4*fBH7U4sZm+_R5JkkUw{MN)*=-l+jSE#~VJ zlirlMjztHpX~4$*K1jVZ^E(18=id?VBd6#x95iy_*YRy2c_cV2Ujk4Y6cabjDI8NW zCCm8zcIXn*Q7>s?V03$ydXmBU=D#vk|HB>$MtPin^!oA$$B&XM&L`Dx!;c^z6dN}Q z<#H_aM^5jBqn>~Kg$})>j)v)$X;l& zf>mllXV=KnzsROa-=7|-X*KOQNH~?tp?;vY!Fqr{LDDXfi9`I^Y8_cYzuM6ZYES5l zEhM4zMQ=s!XCdiwSFor=FB`zs03kT#%_4Vel!g{q-&>KzEx>A=Hg|nWPSy74!AQ5yWDpiIYqq3s-$u%bC2ydy*l;R@$ z>1?G*G3s-f%^xpH`}oLlzP%__Kd04{(moDWbL3;Z`L>XK%w!R-kT=r5ZdvNxr)A&X zXS;2DK7^?0>O3j! z$jQuag-i5)ZDCO~0s^70t~^;DhX=cbZdA!8T_dN@%c$+C+#=MLK~+}O;)t%Poo~0^ zHUy&m8jJ$KUk(uD8x!XPmGiR8KLOmG3I7+81J{s>>fXd=j&nfc=K%=yjZy@6LaO&9 zfWbQxVs*2KK111>h_*1cI@-gR_xFW#3RJecUV=@Kkn;B(m-II&0D#lVN?ERU%1v0M zS602CXJv&(yR`z)Dr5k|m0$4g>+w{gUFDdP!ods+04V01q>7I^lna}hRvTqC#KkYU z@h4qE($S})PIj!KQWwTR{47$%ar(vg>^82e6}}0mf7f4IpGzF5cVJ72pM$Y;%Q*> zbrFYR3(iZ7vdC|K6i_CI!>bQ`S!Rpfms@dNNwL;55m3$Jk1gtO|A-=6?S%46UB^&DOS`W^TP zSrKjhPEKgDw>))N%b8SIm6gSe@nPQs3IH#PYUUG%^-O`BNZf04VffwX(6GVhAZB7^ zq{3c~TFOHZ?M%rXt*i`^G$Ra9-1so|$Hp}Mu<%yx_x>Y2tdYZs2aSiM#<@oNej|Yu zx$`XRRe-_fV^fE2@j>E2uI|+?(^SKok@v3ZS6Y?{8&~Pa6-@K1N`}gnxtG;fLSlq9 zx~T!8MN#^qx(aV|f}4YKkw|s|ovZGNf_w9WgsAxa4J)89W9*IWPuK6Bu}QpEI%z7|`K$E{iSeHb>%PY!`U);jYA0mHM(SwmI=f9YwiiPL& z@n=(FWP@E&w#Zk1&rPG5ltrE+?L6HNGd=iGajKM-e{t$N09u$m)M@miWz^Kj zOkztgyh-T81ES*S<}H&-+XOE1`Ckn@K5Na3d@sAPE%mdk`o)!32^>)F@--u*-`?U8 z^k4C;>Jz(j&SN{xKLs}Y>F)L~u~*;zbCW&Rb*#pQm_f>kQ}IrWW)^0T9p1d4!9`7O zcUi{-Y}#a}VDA>D)IXb>9TK^!FD_%}aizn)-G)t5W81D{&fK5>oxi5)mXr^7C{Ol+ z9ve9MQY3vgBRxX#tnW>jGqXEiSA?JIp63(DyrU9QLEQ;EU?oN;pM1@`| zo8P(cJr%w8iN&W0)TjT1&!M37A0QwwJDd|#)K|%Q&i4nduOkW)jZ;OVZd56vbnJc1 z;Bw`TsQS40MOa8lYMBDepKUtf(MIa};oKZ@cGO!oC3HjKaDHqEtjQPfmPn*(Z8gwxJ47`Zsl>0iAy z?N8rynsmq6*)t#ho~divQ|6;Ag`UNy_#f^rO5Y#cnD2r1^rXn@MkpTcJn#U(JZ-z8 zb@}Vu!u8yN{)*k$Cp^2qsDYY6>pPBXO~=oZb{t#s3!m$wIT=+B>gY2p{?;4De9PxD zt_5=r|2pvSfQVtAFT6l=3dW^7zE5y^uK*Kwj%9UB{;KQ3Zz@_Jv%oKi{f!%P{FJ<& zc1$fi(PkKn9J66{k5?j6+!gEI;vcZO=QDS4)k?m}CEXI_lXBf^ zx@?5K%S#?%aR~oKD`FdwJNywCS)9L%=cC_lq|?Y+GY2_L7I09n_kC4gGHN@E=vy`I z=M5;rX`(nDx zhqdzOLW$T;T9{<}FoBB@@=Ub&_YF}I1JS--Z!HsppE|b`tCVi_#S6Kx3AaW!I0!(MUsocQ*taRzL&%6tlL8iR{G$T{fy!ZufI ze+jm)Za7zzQ7mQ2vEn|?Ggw8p8{96(S!_>F-{Px1VA@TZX^d{<+vD2Bor{cad`L!6 zQm;2gd%&e1AFkK35*V$*qmhEA>K*8~At2WpIoohnx2QK>EZz9L*j(>JQh|GoSFWm6 z!TKphO1r=i&%#};!n~>)tl(DtMz71p1JPgyXgG*STYrgh# zuL4w~^LM{pW@Or|n%@JeykE66WN!MFEa5-A<20K+@=%iCVSaA8wM8=Wa5H-o{xRUD z!n6LaB1R_meuFSp;eWSgMqe?d3O*5Y4ycd67l5y*JG^;6Ky3ZQIs8M@BN*)^Bz>nR zF@bq;iB+9^W1MrAeddL{#{N?mTPwz>M)ut~r*XGeD=rsSy{k2M=(odhgGzpswsygw zp#qNwDHiWqhyp$)bzK`#%GJ{qpD;lz+;KPXFup&5ktj-Op9=BV`Q`zP-PGhQrS`2@y9sQ2juJ5{pm7)$d#!2C4E&3>$3 zZv^&9Av11vNVguT0MvVt+(CmTT3^L`hTsE-O;+ZhETT ztx@^1m$&*%MTg>SzrNTQ?Ql8AswGcUPuM!(a^4Ql6!#hYr{;b45CsvO>H(M?>XyUT z#v1iGQwR0l>>&F%&FP)!dhcO_U2KkxIJwfHE3~dbFs64eRG5ADIn1wLa1N}iAmE^? zVKE&SzmAmuIlxmE?!HUY8zZoQEr^QYQImeMN{6ImErP?L>z8`({>PNVd_N&RUZ=!* zkN####JTg)+a|6B2Wu<>nGWxpUN=HZH_-(;o;3UfCvR&a)ad%repTXIoBxu7v}&HG zO?@!hct|ZC!fds&YF5K&8g93XB{g@_3nZoifb|D7PrIGARn@2t?E_+9Z8fGdTsH*Uu_x5lf78*x^O>oqP(oX@l!;~389b2mXjh* z+VE83zS-*H-I1={HZKaX?~=Bhmc#e{z?v5At=Yx$!$#%j613wrc_91b2VO_1?x|Y>uv51CQk;f1}ONO71F9!)ZSgA z=E0D>!W97CABkCjF~ zY4l3rGOOea;*`>831IoX+teNIXzOOe zgw2XT!SR6C{#f(?D>V($DnhN;><+~v2>o4F9Z^#C!r7Vzx1Xl^JT3Bq#4@QqScwGz zr4pezbnZDqR>uaRuL^ZT(3J9(slhK%){?__ZtEVU((u`of^FEcGtQ{SamlA<`H(|= z?NCPCrqdHfOB0$q6w~b}aANE51qZ!s+>dL=Dczt-h55X*U6~f6cf3d^WD8E-Ra98K zIz||+>eTgfX{ZPHAE$U^FW)1}xJ$vvVs)K$8sh>Xv?mH)on&*O=`_Eh49qoix}&NV zjOB+Gtv^)eBJZb~=cTqW+j5t?08gVkU7%5d7p}F$ExNcQShy-I3AhEh&3+TXT zenBxljPK^9eatb zuKYWB!eCUN!hQy0&jsJ2CytJ7er>Owo)gN+>f=<1f5krd!|i7*b}p}3TPx{7jMLAE z*Ofo!M>tL5{p`}GKfS*4G#@uAhO#rzDgx_*3kF6xEtiAURGC~#KbT>~K28=zh5zMg zSD%YnzvIp#1wPn8Op`D>GYw-anrH@l7;nEW^dg${2J@>djW03q>~{7-`RN-M zD=#WkSs+CV2kc1FTP61rjK+xfgMGiym>Fgo?W{hT&Pwmj#SDR0)@E7^f7mrIKLEn> zdwZ=pXrP?T$wy%m!+Nd05e37Y?w^Z1!=Jn{%PZ?;nrxK{yCt99CUeJf%PBQesS}?Pd`YpMy1!=Jj!UV^-_&brwipz^>s@3 zH{4wFzF=o23qTnlCkQ%l-Jw)+J)44Qtwhp;1*e2%Q#`{CZtEYejY@U0L~!1v!}<>? zy{6>5Wa+fxdc1B2rFC-7G~%~$rQ+ zR)Xcgi2t(vE~RtPt+E7doLkbDvR-y}r}c^ia!(Eh(lH2DSRjqG&T)|H16Wd3Y2Rl6 zK9)N)@8WrWFN7VtCwb7m)iM3T@SoC6uZbHsy7cf)?@ga<)|@@k%!e7-b6MqW2k`OT z0#|poTdebrR_wj4r>_<=+z*Gm@zB8bamH>sh<$}LJ?(ExG&{!XebusV=w4-8BG`OH zFF$Q$MabQ<0VtETeXMGP?O)`yabQY*Fdj3vc4Okx;M&}D>bD@lo@;U?y)6;hfw;C8 zuF|)*aH&k*f#7sItI?k+{p?F;K)gvQJj|H8FL(5Q*#-3}jvMfCX05@R6vh)&Z%*iv zch8;KW_{;F+h)d`$O%t)6sd=zRV_#K1^e=Tb5!%SjbW8QSdEvhr3%0o!K0N5r{t6k z$Se8p`C{H9_kVobl{&l4NM|usp7JBi(6}t&VA6_$XCI;}GUbeAmeUA(L>0o=T|cR- zUdnF#8~O+|Da!$hJ!sCX+A?^BU^2tw>bsY-{)xF(eS%v`qwNrjPgViVW-Ho(y2Drn z=)~3sPf5{st(FCUv6iM_h0QeAQ(nNPtycV|b*{@waUbBAJ=IeL@C3r3s%R`~Yh0-C zZ*r#8;*h}K$ooLUUBNxshlr@^+SaUAc9-2Sli5qOnyXIh>!QXaT5K|Gm@l;I0`9uu zTDI|SwUOAKOwCrDvPJ7c@Pt^`0+|)SN9)#;MsQR8!lQjgcZmw97rn`Hnhl3#0&`p; z?kiG{4tF+{YBpzNO3AIyZSHkT+ndkB^_3KNwBKh%Hr_GzqwjFd?PDUM6=au1`Do3W za{=C~cgfRGw%zt3UxLf@lzM~54v0cCoxGta$6N8D(R`At%wVQPVCQ^6eobW-XH7)% z=5lEg!fg~NrzJ3@ZW@T5!~`GnwB2bT5DM3F`PEhdmf)n%Ycub!h_br|#10AUD=c%* zHKWk93Qv1fA|w-e9wv47DU*!RUEcXT?Kq(9dbTK1{zSzBYYXQicKLWsVY6dqwr=h< z);zE9i5W3F`W?=XA)PVSTnzT>YPa_C6BzGj#lv)RUp&`gE;O!s3oZbIKRPnK!>ps9 z@$IKQ*@<`hWo>14C7C@~;>j_=yqS)C`Nd~by|;5alW*YGzpb4ZlMSg1ItKooAi2UN zyQ{<`;C)N8%6B}cQpQ1X`$#)R@`5O5gGU2iP9p| zA`Ou)AMTM9-c5QR?CFK}Yat_lyRa(o)vo;L3udgmprAapRdHTv%J10R$X%23eRdpR zBWDSV@2-#I@aDmfCX|FgIl4Hk2EU$jgB2~8X#niLLqv?ZAi_g$%UG}`!3+Dz8 zt46;8vR?X8n)i{#=MTeT&4b_dFqhh7dGAV}c?o2crvKj1;=}$U@|Gt!ZU8TlieTM~ zjFyi?X=~K4UEiIGs_Lrpg9UTnU%0;89J2kAeqDmlomMutd0n&9LDct|MkA!w=;8aU zWT$4m1V>H6>RQD@x`%C4)pT?`X|8a)gGB87$#IU5oIsjG=uX^WM9LbSnmDZX+5U3e zd3^4(bB{m|C4IdsV{xxlPtaGv)o=yz$-iovxfI;^I+h^TLHW&Po|F>#&Cb8N(PxE` zu~Rank~Yvx8R6r-Ez1kK(J`%;tGaaEp&N2#s-8*l9-|qL*qrA^sm3dLbx;O^bH=;d zWa_2j<3cw{Ht-{p-aPA+?D&!(N_WLn3HLN?i!yRn>Sl9w^}(I)>p@0QU2S1^0gstw zy<^VAC>o}qe0BJ{BzfKfa!IVNVE%H@R)LM3m0lS3rp2O~#4O~-(3nBIGy6!nmEn_^ zGp^jjhG3?Gk~V97i8f9lXaU&i&x$B^Gk~GkA+=;nL+M^SG3C#AOz+w=$rG=W4{$Mt zv7k1X;P{juo7f2x#c+81s^MVH4W`@|w;fC2>nKc?FBsRf^JQjtL+z}=&i89RKKgXO zapkJdCF>3nurr71c)HTdon(eOe|ANmgPih67O-cZvh-62J_JuyodVyK-}S4#5%`iB z2eTcyd6b5*_2*&^^7N^9d`|=bhdB!e)8+eH{2p0YATi=}B{TU$(>dDe%2Pc&s;c6a zPs*5A9m^E{ad#aht?Xk++ZEU`kEWnwt0kYjCoZP}F)j0eW0iwi^g_6sCs6x_8a)rr zAK4Ugr6z*V+nG)#@D1H~HxSmkMI{}c@Q^lkFWF_(Wqx(c32(scqSoSn0EXFgUas=L z_fLE*I#_T=L;gL0`@X*rzIz+Xdt%9UZG_P#(lwBDiJhvRV5 zd3R)igObU&Duhopz3ZamK7kK%mxg5c5OXfZ5~4aN3$H2E225wAqRgwx{f@^J|2kd~ z+zJ4#Zo~vw1Pc_YLzK0bqP^MyM>wY1v@&<=){Y|~Z(E{TY`NMvZ4k}5bbh{eDvR?M z-#wbW(=xI0+C=U}(;Q{HLPhWI^F3YqR|+=*WmRU|7SABqEO@RtN_7@+%sl$U4f*9aa%70_g8Wq{K2Df?%Id2Dt^!3A{idc>0Ivw?2w2RImy0Lf zDu;^+8w4{k-GZ2jA6L6E4zYd>?h&EHf5tl5nvAw2TNNBvs|FQ3telLaO+8>LwwIj{ zorCN~RIEz01I$()W~-$ON#O}&aWNxnC)n(upV$Jins$$Wz=n$dM^Ll64b+xYk<7 z1mqrLOGa+IGpgfxr@2&d{x=4=&$T7P%qQE=UdgAhJ+twl#FeiCX@{TQpKV>Zvb)`^ zwW}lJ#h_0R8?WYZ5?DuD=R*k{X?aX$lgi`hNqbhRS zTK#W-h7|`S+ddCzZ90FsVQJ?%9sYB%6kU7TvteZ;(upcFNE;xk;`Wk%`}X_k(<`l^ zrgFT#w595iLqp=nr1IJ9%6FDd%WXYx%__ylK9Y6Vj;wW8NUe?&g1S6$IB|80F^lt* zVewQxq69t4wvMvt?p;*xa2yh!c*Z7^jGvWb2F0V=;JuFL4T`;|g$=7;6&<3bjGh)I z?r#n)USX&nvrFxqU^wlwsA~EW0Ufoc?cVOz01uvRJQd*9s>AL0L6|+9M#xh6Lv6ikDtt0`nJf+C+)!g*GB2es&YGNgRKL=LSOcVIGVgQ znm(AnpG>-G~(;Z z>(N0BSJ_p47iRxYlJ!>=R35JGNfBhNiaJKtM;i$dlL>j9dQXjQip+kHb|nmTyg0-I z6)X3u?`wtlF9;P?^V5RSd_LW^LA0)yRRlsoD3*G8=2)nzqT}wBhM^B#a^H`t+cc>r z0#^E~mv8>-xRO<Cv!z4{7^#$nfhyfLSLgTi<$Yef#mi!*}YpR1!P*1~ZW0VRQ~DkXK?**iY`NWL!ab6FF6pvzdxsl99Tb9A#_K-eF!}fe{7C@E z6%3qG` zU_M22&F?EW+h*`03~C=D_@*x3A?*(N?KxcF?5M{C?X69Vo;oaCPsU&JQh%cDi(1Pm+-E6(vx76alCPD!R+>v!eX?za@ z4t8WwX9(jJr*G{YaXb+BFWeukzQLo!NlcOE`<2q{r0b~mG*DuTGl(1U)gNlm-JqS_KL6CS-?2wGaUm}hxfA5~EoA;wcM&kb z)3^Ply~8&r>Hq9@OKHYw`s2-a7Z4G#nm+iqyR(`iu}B`*BDswNRl7ZGUOKOdpt?s$ zz01N~ne9W}xllH#t|{x*eYMY4T^yqGJXC9dwfDQ$Og4|+?3$qz%4^2)@g6Yl zF21(v=v8Kp<|F%m@*!C%cT}B6=~SvhgDbbz(FNK7J?zZ!zGs*@cv7|qu*f?Tp%cHm z^A}IMeaqFEi7YromkP2sd&NUkFq_Ug&q-dN9AT{IqZzp!AMM4jodGqJMX-ngL`>(L z+)z)n=wD<$ z1QRLU8|J8eqg&E4Z+$4E`UbbuR^hg~yO@wXz>Sq1(Q8q|w}b(;L%M1o@wkFqGxV6$ zZGbOo(Dw*)*RbO~W0chDY1PA;V^ero}_KO@Hb<%-Af zVWo#9-Z9jVE6y|SlnkZafklZ7x(uSzgb{f|adJa%7aMs#s$oC%S~k)*SIz&uWzx78 zWHD6Rd2^UbX&G>t+tcrwqhRhL67yg49{5Ia3_V*_J^xa@qZSTNC>eQ`|7#sQzV!i0 zAnmi*jErv8-2(M0${oDl?U)I8Lt9vDruZ|O3Yy~BK%?bYd+$dW4rn_NAM4?Lx^h6` z-m6LpCFU_cR>MJ(GPk+&ztjT4(XMlpDd!~0rD3_!v(GRp_?%6q9zS{heNOY_LzIvH z6%fD>`$rnAuF{vz3AXFGBvJ)b_5lv5)D7Wmdw=gh&*7|)17oNunO&kqOTBLN79Vcz zyCc_gDuDW#kA)H_6JeqqEknp}%B&JJpVEc`0s}n4b801iTe0z#AB_BF_t!$_*6?le zaS7T?>odVFXbi*9;R{<%wJl;*qKy!bC~!iH{?%ur32Kq#TWm8hLK!hNx`$i#NU=r6 zFFNozr`Xof-6*lXmxfT9mz34tH&m&IQ*#kmV%{YGKUirNm2j$u2u$^sU{{E$WL3xG zDfW~*oY1`M&;F9lHtq9LO0r5V;2Y0FOzizsu6BFoSb~k;rol{-tXqU4Z<44I*h%#? zvj!LcsOk6fdkFq?%Nv}r@vCLy*hf=(^7_{v^z{o=6-NmX2LT=z;>+JNkc*T3dLH2g zPWFDA{4(S;OZ~N1gIOi3_w~!{Z^U!OaWIG8i>+kYq8i@3L>K+ky1sp$bEnuTnaiSAU{m=t(Fc&NXYVP|_(@O35k| zod`J%=a5j61aOpw$A7u4bxmTt7%wvShdgzxbiOorvgA#A{WYj*3X3AVes>+N9}4LTCaaNhCX&)z>OarQCL^#9X5 z-^8YX*qtm|w}N_fNK`HE>QzLFYGpOt1kQ-sbX5Md2rDqG(w|pod~4!Wt*?VBc~NOQ zJ`sK6-yvQYJngA81_2;5C%g`-S5MTmM1M=s_BA9=8|Uj$q?S-`P-$Bf4;5ys-wR51 znK#-UubR&QDISjbz!rLIN^K^C%7gwhTrx(Y^KLvO7NJW8jv6dp5h8?{I@p5?(#m?{ z1@fnV$7A1xxa)1e9i+O>X^Ln<|0AbOKe==!eXSI$BJbD|lg1_WG5UAd3X{ZUx-qe9 zV)qKz7ZV67?Ww|Xk^1}#^?MbN{}mDE$-dj(Sq6lW?YjUa>(F`3YP!-=f5fUzhOz_& z8unkb6TMP3PHw89U@0IQV+XU@){rCZj*y0lYH77mfazr)Ng2WpW=0*nBpAz|ZYFqHK72>2k^dNEka@V=-0^JiaYO&<2YB93ZQ))Tza*WutTWHBq)~`5Lq0j4o&=WVsKgw)6 zl34Xbag%KK_tfwb@pb`+}u!HCozEhg8Xwxu7>ecG`yNU8INr{iz9eJg@UY za$IQYnIp>O*Qqa7t2sri*E6;mT$sx0ZO6p*>wQWJrmGun3M}r`Ki`-mAWY)`)?xc> zTi8%7z@TkU1VP`FO&a%99O)GJx%^`9^ptgN-)+o>Iab1u?$q^(3kk!|T3WNxODi+; zh>!oT2`x@GT>x)!Si)9+)i~3k+Z_(8`xV@>i}7#u8n`9&`n&u^Wr3;gYs#2rR>B|Vi|7eL;2i0H`NUMSW zN(0)>?LZIMLO`E3?)C8NSO26Kj=UrM06DiI=R2j`Z4LeV%{DCNhuccs?F?ObB(VLd z`=YkFOP*8QvPyBhKTY%6G#dsl74rT&w&rjSi8)dKT~$@6&=+~2xOJ~^X}#OH@NSq? zkakq!6cG25Pg$}fTou<_S#9=-0v-sy$u)*Cr{O9s0C{v=X=dq4!3ckQfk9noNiKhB zQb+C?HUiIcf*+KZn0UA3*iL$d)yu4F=u6op78usoXX>sLB#G-|r}W0qwH+*-&|-&g z=@F*FNZLyrS>K+gaox zQMNwR*saLAjHdZ3LUTPh2bYchXn7CBD1B=s_iD0ln&HNL3Vx_0^s7|?Ld5tkz*5|{ z*jbyo7q#_g{zT&eK~&<%**=g=lC*>9$G9rt0g|{zB;WNfN37I;`FG=6_d=~!A3mwD z&&M9>=bds$_WE++4VUlUrj7na2%$xK{JHk2c(aKDwc>|+tC_OxihSE9WAk~%8GGm} zrU({ZnjZ`}fJ_LqEBdzKQ7#u6fHW-yi!24xx9vyEXa$rfYRAQPUq`rP-g`}6xA$MgK2 z<9Yt+ILN%`x~}(mo!5E3Ua#}Kh6%VnDXQtJSvOc19$_=I?1^Rrt8d&)p+DdE+0c^T z-^je#dPPGu_CO&0qUGCszvI_WSu(Bz1-Aut;$8x^ew7XsS^wqH3T#3 zNO~fctp|MM2k~22EvbDw3f@0aLR_&H1CH~=?z=(4*9N5Glf_QWS~^u5tN9jMZ&a7a zcRaHza#)g3>==y?CJ(*}+09popD23#NS-8Sv}34rq)xc^$%f?3${+3gOHKt7@7%%g zJ(S&$|IU9F0Z=ukKlCWJ`osZy`2m>gZFx#*@M53^W_%$Q5g-ueCe(A$DdlE~&23&> z0OXtLYAavJojg?qLtzzVXuaZg?Rw(jU{kx@AJ*My24S@q(31~8#BJrGpF|ROfT}qa zXNwq(|f1-7q;FaqZusrN%r5qg5 zsr>mfskQEY^Z6>KKSmS?@L8N!h6GX&XgUB@QZ%J|nVr7D!dkZ_25AwDLIa zmM3~fn*tKx`yYGr#){YwrLS8_yQD`StH}nI45e z4MQLI`w4&MAI0-PYZ8eeXb=KW9?zcT7L0ISUdYNG=;H|3rDnxlP}UE7c2cX;&P5m& z{XFr=iEl;o(2u0iQuQB_sQbbtF_EP z4L7s;kNXR%s|hx*Q+K}}KiD$noK(fVfH*fuEk2z@P_Uid`>ccY_1;^`bnGh4k`TPz znlydWqfT>^xHwUevH8(@eQIpB3JMgJnM}~H&+yTcS=g&&JKy#^`0hKr@=5CncX-2( z_G8u4>xo{Y9!Vd0=@Ktb?NtcW#k?z9=s~wXS*jnmm>}nM<&JGseb=L>{*{I{Ulw;q z(Hc8S5~?$IV+nilE5+Y{je2uK{YSdo{zedfA#+@?LjSitIZ%gBgKH$&NM|)AbCfyZ zQtoU;IM3P)wxX&-$#7^FcwKoHg@}q_!Vp4}~|> z=<@|hJl+-JLEECk_U=CCYFS6i?55aLc2=#I>IH2Ez(q`|t~iWUdT?Y7TZ3|8m$!*_ z8vCy$%odAmBb0aucJXb8B-Z%vRd#+K3Q4Nor}4jG*4t><(-+$J4-xcMUtK9%t(`b< zTqb}j)a`MU#hXP=>ZglEoH~*i%TmUJ(``ODAn$y6zjPn}JL{`n{B^zHAo32TM!XS( zX?#FlzI?XtV}R4AbF&ERt{n5H9OYr(%V=63Ftm|MczO^(Xdw?4FH+*b5U7Hha#V7fnCqL3dv zEA@0DWq^ySH9_IG+)&$XBL((=skxuGArcj9HcRH{{c9-EG?K^5qiANs4R7^ze#n0F zlthX>t2{}%nLT-8C3q!hUdB)KUANH@IA*ElDB_RWBAxp9m^57$Y z>$G$Q%{->KpX{hW+VLHag6!{-cCsRQ^%}f`8*7Ez2ZN!;N&an7D>XVsfkV4dye|_b z?`XDKz#0j z1&fJwt63-U1m_fmPi&8n)~bfJNh(&LcqB1!dvL?bkk+&Hz=jwbEVx_mb3B#?nKOTQ z>@+&42uBo}2%M6wXxOGXeP0sQpGo8x`Z&wD#E6$CX@P0^r>v2u zj);`ENGj!dVQK3}5MSMR+JTlbE>W|p@(X>n`B-#*QSMJoRZLHxg)El1L*zl{t5=0{ zy8jqW+G2^(+A0L-v;P>4R)tHeN5@VpFJeBu2atI`uipQ@S0Pmo!=TfgIjK6l*68uq zry~L)(`Vak{EKzFR=ezZAu_&ApQeLUn0WJxFVF}2&FoQbzd0xnt zRk_>n%U#vgXW2xhA8K+Vt{EL%@Q1AcOuz-qOL3>GqY-bjqU%fY(*XAQbV{R)_7Hc` z;x>DiU5cX7*}Ks+ult==%zIOr4#X*0>oT_cZ)A?j4oVLuW1)lq&p^(1T<}_T8oA2# zU{>aim^mKLSn<@W)#*v6>o0)@_~6(ydU#L%1lD5Q1$xEf&i%)o^nq5JdH?b(6_~2$ zmn+{JhtjN3t8F6nk{*)Q5?cmV61KY*Gm02Ei1Z2FkdjQxMM#;I61nJUBBO2wRG=Zr zyj|qG9-X8lqYz1+qT^a9-{IOP&YbW^x$?a(Fm5|_An#VqOcsrJOk9+c+>Iz*PI3Lz zkE-P8zq;zhlhr+%#Kw<`O(g;TUtx8DwaZa7$Bl6Lo$}RK(2v8h>-&2vK-m=ML?*GT z?f#s{4-9+KQ~t;l*MTo{HKmBy!;23G%8V-y5`TaIa~@}VuuYTM+TBkgeE>@;Zzjvt zyDpnTRyS1fT!zUrx16{Em-SLMscrwEW6=q<`DQ1i_q;3Q`-uJUUTsOfdUc{BMt!VL zsspUqV|dTVJ6fJp(m?gtpmjfh)w!TE@xed9ts7x`A(5cHKsb}0R}7ykz3>)0V8ss; ztbjc_{F)2KIABneMf#bU>#k&DL^r=00i-Cjp_I{nDbCc{t%-#n70or6@z(VbNZYnk zZK}`xfd`k`dls*PHhL8HR(jMy)>KRk+#q(9Ewqa{bcYb6u;oN0`BA>Nqhz;k`gj`G zETEUHbQkOaGw)2TD-Z+Gs_Y-%#A6aA(yBi4u#nnMh)5-lZ9y(7juMoxkvKJZ(A3@D zFNR**xR@Cc^)xBx%!WHj5+!${?=n^b95#nt*V9RCj}A~B+w`cVb}4nQlimJQ{SPh3 zk2$!*u2@N1w(@eKP|#uqF>PXFtL$?crM;}dK+^YGKn8Bv;BKegC%XXvTKvX)P>hwj zhkqkQyc~KEM+v|p&cDA@R%1!heD(qK0!Z|7hWIG@5%6YqbAsqKb4hk^8WTV>N`-ohtb z1Uroc_tW{h5@Nd3D3Z+KFgx}KE$w*OCK9-$elzvXB)z|DAN>9L2U(Js_Shvjn(*AU zt7yYv9?8-EqbE4em;2U6(6~?slQMYx!9ohjs^GGXJPeDD0FK!+h6h+j;N&kzgZ_nGIfO=-01*ZoQ3Na#(IvyE9BuZ_t@VGz42QNL-!W z_Q44Fcj%}|7x7V+CkgilzBOxawcJ|`Rkd8Cju30$u zy{|e})YScX)v{IPi5K!s#R;f#=ln|jhxKWlyFJVmr0W~%`zgTK{wGk)oDBAW;^l0C zjvPsYMUEXKm1V=#)g<-@c0AWgJYGvkC|(~XxDJv6%6QA}O#wj8cbZpUp}u1+&s=-F zU%FK7O6_&Y8lT)d{$n!8`AMgg{dGM^u>r-5sJddX<;bIO5I(6cynEm$(Ohf0OgR8qLIn%m4t(H;NC$tn#$H1$-&Bhs`QYd|gFU)E`UX1Rx9hu3EEJ@-lxONo+O{hqq(TPGk(;^8pPsD;q zwi;(^F&s)CLp^LuR>;UVe(06W&CFJGYRV~Sn@Ns6cSK5FJ7qdtle;HE zjW^Q!R=*`g-Kr=IIYVo^>Swbt;&F0E2sRRsF}_vLa7v6c5yN5r4keBZUXl@3)`m*_ ztj@P7f|NT|uazn7lwI85V4G-e|@Ir(@cw z#)(5mo=+E&K*Kc{-x8j;U#|kD18&InRJO=)<5Si) z(4rQ&*{p60e+R0H#bI&Zz51XpiR?l<>mZl|G5jgw1!zO@W`opLg5gGM1w^NKf~@6r zqc5aCj}wdFfgdA&Uq4#r;?_U{;fg7%!0wj+08SY1di7WTgo1Q0<*z(O16X;&=WkU@ z!X4VnNqDqS>fXj#?2>c7kVc(>A>}>-mC|$Enu@ttez|a>;RzAj-F-N;jZB5Jy;p z57(QPAbz?IDsq=LWKD9NdQwZmn`~^r9n;;OpURlH#C!=coGgwOT6$f4{A$(HwsZI! zP;opHp*|^l>N0XFXz5n8O^*h3eZlt!*ajM68Y^WhXBKB@u!iGcOv3HfzxpdFZ>^cT zmoyQoKdxgf#+~ z-O5AD6*e0i?YZnvG35+0$aKKkW19TfA;F-)Otnxgr%PT3>)#7bsF8t9|B+Is47E6Q z)k%kk|HQVTdzD8?J0!944`t3m-cU`ljX3Kba5%EnHI-JC1rQTB^d9(#=?}>3on8 z?h=C855T{kl9$i zvAUvSz%j4j96m1z*HyGghU#c3LVf zsnvGz2^gQ!7G7ZjrXTjqUE3d!FCCe?4GBPU_xnm6TX)rrj(u}6Z+&&WhF9_iDbNH` zVIybc+9XTD^T>WY*(vAru1>$fuAQOjWz_>)>(<8Y-#Ozyl-hwte@b#ASl?@4O%7|z zGh$bSJjRF`je$ktjSq$cZ>^}M#tcp);$I5N^+`8n;FzSoA0zq9al*0TCm8oRjMRxFO2)FuhfKb^B6LB-O$-;ntJP{rc<>y79*&!}r?fBVx3h2oFqE}- ztbPN1vTr4+qp_)@xlaGXpf2UYFSGd7n)%$P=My++m7AtMe!W9{(oLSViR+rYA4n7` zDcn*lX4hGC7#F~V|@QNe+4}B-i6=8kw1YLuz7GhGay5a%fN$^P|hp%pM@zn*|s8ks-9#P_AJH@HrIi{!NrUMF6uwas9yHHrqv!oR=B{m|^C z)Nwg!6Ep5E&Qe64|3BGUC$= zMbazt?Lf_VwboeFEbO(yDV~z2Wgk0&nu*18csFcuBu-}PED)S>o%s1ue2=^)TIC73 z-hg#zZyHkSK7d?_4!Opp1o@wP_YhatR(QZem8RCN#nxeR?mnp{}@=(=P z*U}2WHgHOxQh=I7S|4S{{ErjTy1VB>2U2F0Ry>F2EOVQ`L=)X4@ypNATgT}EumJk! z7FT{aw;v}7B5F4}d#uNW(}VaqNw?2v&k$QJxjurb6c1fZ!f=)FHoN-N>8jtQn(Nhdd9#C9P{GGh20EtAVC%&V z=X)C}!qg18e0>{+5y@=vMuMeBtLeQ_N$TSm%1;N=+B)p#ztSh9%c);s)Qp zV>YUaG!eU9-ovj2U%&mQ^&IU4OpAy@6;g33qS|$_KonOb8oe;P{?pMb9)ie{xXNWo z(xW}X5!}c-GHOTGt_k)jJ+i8Mb%(0aUrg3N($w+&{vY92b3{x7pC~9?yV0+22ATr- z_4YZ`$ruG7`9FE8_+IjR;9-qha;9l2ORb!xvJ~|QdMJb0hvP_&ZC@&z&OaS=6m5$+vt@&pit|n8dadj z3*1en82ZQP^2*VX2-4nR2q;agjHwa-WiY%f0D%hEKSLVQaKm7hveMC((a_0fw3=gC zXR89LF~NV>abHZzSBV|~H?CDS3|TDJ03;t?L`o<61Ltoq@3pX1SE-)V5r!-r-id2z zxK^<0bvl10$m@nuk~0QCYT$qFjNvN=FH%^7q*dExb?kC_XjwT8o6rArZJR>3bT*vUcD&EbGm>>tvGhN{;QgHXO@gUxh zu#nr6^p1L4%_H&kn@y6nD@w(2b15NX&fm&`VJJ)qIF~MwYqCM&u%G7rEb$1G7nF#v z%Z*$@Yk~6*=6>svb6Zfb=(eKP{;i$BHkq%JaE8|r2`SrYmp-Q$XBTCop;iQy6?R{p$cJnA{(?rn!~Ie$O< z*6nC?OyOnR2nHnQ3@>$eJVDV@rMij3FLbdLGPf1=uVKYU;#v|33Z*y!+96Ldtsz9` zIU>yWeQN)iv~p@d!>})0j~2|z<-{zn?&?)nKe-)E8rdxkIZ_sDww;VkVIb!ppwXVs z%=t9wU`LaZ2jDqcIga3Y!vZzi2*QfnaX0UgA|2|AZ^#psjM=65628pXo34&j#>-l8 zTU)t_mFshf=4ri6h0K;xL|!^I}=ojtz3bM!rLCa8VZ`DFQQkRj=+Oyb}2# zz_x-gv^u__Hn9FasE1;)oe|5KdfyhI{Db=zHMUY{^9~xB!RE23GIN%6yI&+Gn||0W zy*LPWrg>xMj};H4<5Q3lxR3>laz^u}=&^F^74KHzr@O zh7wbs5kCM~edVC)b7+k7!=gG?l?$h;vnOzPk-^Oz2=)FtTgKDyrTYdg8R9+zQJRZ? z3f-}C>m;@8xOB%*a&^SfY+E^GUwsU*s6_Z+Wu94DI=sSw#W{dwmB76sBGft_1sr1y z#ul!P2jPNPT)L?xI6q;sTCjJYfWM=$^0@HS#piO!ax|RY_A{xwo*UasN8Jb zS1(Z!mv|#tYNWw!RI_zR&2EB#TVKC;K^cFk`+uf z_JBslyn<2dd(56UC(z)i!1diy2-|aq7jA-b30C%?huRjXa zZ=spqrw0xF)Kb=k2XazREn8V9uDiIVj+a^RyG35i6p45Jf;`!q+%+5s@UCX|)fhEU zyL;L2h-@kVI81v)3tsk`9L2+!WAaQ5!1S#5WZ}BU(uflU6h|U2~dNZfQ;~R;Id4`$Sm5WD`6q8veCB-S1dc^nC8 zXV)*pQdhD0;X1pSf0pu+zH>ik{FwWjkDG6Y^UEj&NpTmfKParSu@ttTlypTOLz2|AM^c!E%#*;c28>)V znggt@^_HlWJ3)%FN2F(@`}J95dEzF2B_pEaQR(&fpPR9LXVTP}v^n`l%Q%>S$Ei`o z%&$&XH?x-OBQ;)KWAoaH{q$8G;iU55rn$b&nBC`kt>U`xGRGSpcLkNbM2?Q{QR+dC z&(ZOA^u%H9=MRxn;bF8%h1=}h@oi1SCSW6=kl$6Jzx5)VfuDU ze|d{ZNU$nhkw{E8Ih6k0AK3Ca<32e!{7ETB%NaYvbmt!$1IL|!(C{(%0(s58EC87} ztLipdw6!z*N{_YXknxi#vrcX@u1V>awRsxre$#??J$)E|!}jB*@S*g_ zRdpDBHI14+aHy5hkFuSJ_@hg!FH*=;_?~;)Kfc7rV^OdZV>U;lXYqf%1XauMx^tX2x>^vMWt0&mA74#ca{kpF{m`HUNu~e%&sP| z5}~oSt5nMm3-g)I{j8*^DklFaZRSaJ)RP*Ovd+6_ z`_Yyx-0FCDQEp2DE+*Ez!WP;cbA%!#Y|7U-l{6HWJ~T4*I*?O!>r~Itrutv0>z9n! zuQ5GoV*?3=%XcwNiiYf)j03|W4_+rF)XM}ng(wI8f$2fdHmX~=KB${x>)9v6J{1rA z;n84E=W zmwMiDp=l&LxM)}%+az=QETLv~_w;K0(=o$JcET3R(-!5>>>eI|t$B?8hq}xWJ-An? zlcXF{fkUuF_<}JNw)QOBH+mM8+xU22wtA%|W1)H?fIMwebZNGu0W>75L)~(T9 z8D!sqc*D)3@f^Wtj5j4AC5vV*@9SERpW%COR?>WBXqoxR6Scuxd6{aN0lc&c6GksG zexK<g6B_x9a&G-wyAylzi}oy69J*--IODlUo@V`DUf_9Z(Eq>vobJ;w=Y}#i%53 zATfDgEP}Rin*jkXKaPNkq(Wds0E9~oG>^rkg4HRlZ@KJuSN$baCXe@S;oT?pf{T7I zY7%xQHlM9}MA}dIZ?0fweQGBsbc4L!&|j}u2JgG7`NbZ(m+?%g7lMA$`Z7}9FRN{1 zM2k%@seFy#Y5yHeA+@@`1ZZJ-g$zZe5xdg?pg!+kB!}WvhzP&5>85fQ$>H&*ff1G~ z@J@{cCqtv;jo7kt%kk|Q4wKWJ8KuJs>On7@hfLmxJgZSp?GGN@jZxKpmhlq*E#~>M z2h-$K#|wr{lP%4yUNs%Eacxfx(#1{&>e59 z9OBXl#=eyC2|+sV)?UQ$*2$5q!xqmrVtp4^Fg6T$bpettjIY1->jgn+qr6GusvEk& zUzZQi8}(nlozbW_;f!i;ZvxLIt@k%0h_)d|3-g0{8Ak6=OUGanEQ- z6G;vLKuc&{l}*VK%1n;EiDW^Mir7Q^h3LEx8KU0QV7IyAr@OeqGaiF$DBs+5-ruAs zy{3n6d2joxZ$d5FRpP^@e@AZaw`YWX{!8EZ(c+1C)u{45t7)3d-PkMyjs-bAzYc!_Tr`+C8K#pl}L`tJ4ze8m6NH4Cf$h;$+A#4X~-BGEpPW^T>guQeQ} zL`_-VxT#(q5yABP4ex1D6J=;S(AB-!g^7>kiBQ+r%B43e*B)>lS@9h!9;@eNS@c_^ zD?XSY?zvw+kA40zm+dj-vDst(wHbr0Kc@qF{j|skV zC7!&&S;Sx`x%qA>s@i_PD-nZu3?7e}LpcJF6)w8{#Sno1fGtJsR9Eejz~kJCcOn9U z+iz7cFW5)hdE41osO#75w2T{bRfRM)HZY7Z?MH;KAY-<+j9U8xw*3`0tArkSjBI%T zZ)((8zjrR~S@v&$UsRAxwur)Jv#83wlg0rfoF&tLwc|b4!w^W=!p#@%L(2EoV|~FM zRZ)SR&>#`y*w94tsbE(Em!T#@G(y#vK6C7x$RL(E#TPQYwol zwJdB9*LLP;CIlryej{`0YQ_+FTkSg26uBXDQ}tZEv&8sB?R`2VBxsRtyB|jl;;jC* zCWIJs9@C)*Xhf^|hq3-17Ml`S&Z%bIFmhxp>7t%EYlN>*kTaZYOUU+I;>f^=y5>}L z7gfn$ZBd;X!ZR3vRl@KCd7^ zMj%C6A;FKk=2VyO@7INJ1E<^p1%c%ljJ3@%28ZH-d=@V(%*;JRyASbr%UPwHX|>56 z475>*og4h(kru}s9ukS*T{%Jb7yH2-u>}S$SD`#6Acnyt`o!`Od0N#io^28&@PqqU zU%-u0zMZQe{BGqRi#m&-1mZu*B@p)ODry^F>UbsRCqK9hw`hn9Ia>0<5-ZsitB-|%ntbWn4ras0%8Ju2+Xx!(cgpSj1S z*HB_00Mr33z`YNM&40k|&w$Ds75aO`dg$+@^B>CmH}so&EUWNdAfOHWdR~io68?#4 zCTp$K!dwD6Au}~th5+P{_S8yKCyXoJdI@$MuIcN)P#Lde^n7h$m*CSnSKXS1Cu024cy9QQaP)zGn4!G zEmBOMPcs-KUOTd|B~sE^KhpZvbTN>3^1S0tAnQ`YMU(#Ja_g#VzSk)a%~<5+RVk_H zdp#ECPADjzxps38Cy*1|B@#Lg|VgP}B^c5gr z6<8CPx<{eT(WFks(qfyz9k0$xJjXg&1AHZg#}2bGZ8v3C*M*#(={V<3F|$&_wWaGJ;a?r}|e_ZrIY9w4q=|^HbviS7OldZ9tCKQd*6v zaTQf^a#Oe8mFJa&U9`PTd);}}4pF!H*hlI&yJLKs@ieUORSUi@Re*N!&X(7t=?RMC zbz9@q{@mgt2o4i=yYZqbSfQLdy7Gl$oV&GS+XCDhY9sD6(;^3D?Ey>a%LQ+pML1!p zTEn|XMp`#%_Uz3u1zc~J7%(>?p7S0TTWC2DG zGGFVO8x+MeKcz8KkU(=UL}xcpwK41v9N7Q<+lw{MC^y?_n%BBB!|9jK&y5lG;bnA= zpiaLr!Pp>QTs`tOMM|zCSVuA@HS+#u&6t~C88ebTIoNDZyAE`tDjHH?Rff9RtgYLn z50xDMiarQ=u+}~pm6pq$aZmMjvJL+XAj={ToRbyB;QTC`;}D z1P*r*_u#aj0!xjQ9QTV&K3EARhZ!K^FvvxCK-hU?^?4O|Nk!s#9#Wx7&t(@yrVd*0J;(Re;P-P42r2FE={KfMXFhqlgDs1|R1&n7F z(<`axwtu#&n$TKAv*3qfcpXruSg^+q6P2(C(4W$0f_sfRy-i>?jFWr5%^QzEa85;% zWvhe$Gb-{sI2aNg8_HG72XM$C=c{%T3H3mW{S&Ppf#NU9D?HYIb$vBM3!pcS`eU(r zkbshM%uq&f@N8lENxpomeLc9 z=aSGEP;}zTbl}P@Y-MINkFlX2IDVaexNr3JEkH!FZ zL7enL3ZyrEo|dy)1O>mS%uRfB_&GqhCFWMqivBzYa2B@#0apK&6wo^%K^a*Sfa9l3 zBPP^1y4+AfKhG8J<8&SVAF!-zHczB8h4i04(8aI^;L6A#fM#3z1@z`yt>bwpOkYw@ zp)W34;u+7B_a#?}>(v3V4}%5_OXo=-g#}z&f&nQLO<>gNGB)aP!fW+(w(j@CkgEF; zO0PZ~gHR6R9-P-vz726}!0Z8<|LBjJQ@q)qbq`GPBeNywU(noX=_LLFsA`3=42PpalkzrRebD3VK$Zi`xiq?Q!IQ z#X5VeBRvpU4Sa^`3uyfA)U9vK(WbM^s98d8qWwlqY$0F)cpHaNSA2S<;UhnjM4?5q z90Uw-O%_bkEoDS8O;xF*QtLcal`>v*6>rd}9ikwvInKlRN+XMKdTuHD31y-PA6&;7 zPiQ^c5xEwq&Ig$?ukGQ-OXA&o0|00-Iu1r9(C)vIUZ&y5HOX?e5_pfwDRM9_j86%& z$Z#u%Zt4NtJSh=XNEFjR(GGAs0KMzDi%+1*a|0Jh>17IhrS^d8h!0U_t+KU_M6=HT@&s!t?XaDSh0X%AQ@mX?-A0ZqPbzKLm8L&1XizBcW>3!| zL8#=#D#eW@06-cEbh;U+y2-3}T8fXFz`=~xtDG8qqIk?60;AkG4$$RbWy0*+>CM|qA#eZ&-O7c=rd$z6`W^F`)z1VriHTUazD-IGz6y*+P{Ee<5 zq;XeNuX0znCo6*(I6PWeCJFJ#s1^NAt@b5yl@C%K%I~cH$RjDqkAv(>YB57^&|>F8 zZx9W9#&bXOXW)orBv8Cn9xxS-xH}~Ab1iy0ITKT0otJ`~&J%;~*(Ymix&h_C#8l*2 zqU$M?d|?VkUEu9Ag8F5;!)&mkR(F!VpYSbjx2xhk0ON)j>pBC+TgPe}%B_IVW+tQI>Ilvz&f7!fgt zL~ov;z8%Ymj5GHk0O*sY15en}Gr|KC={P+cNKA-bqz(<>lB4hvO=Zvs;MzW5hH_`W z(Wo~!PO6>fc`Ek8!AKN_EUMoMv?z*GCX=VVbUhC#Aj z(GS(For@|hoG~zj{4dE6P(TIx>R&$S#*u;r?q~0#f9;kf@gs>n9Tc$3MbGlKv$Zf{ zwS62Gr(IllPunVuRF%9UZpK)lrq2tA3i@=00Ov8+0;|lKI*yV*?d=kw3FAp!IA2g+ zKJYJf>S5rH#v-6Sn?0kgn~g~*_^(3~&o{k5{g}L(j~E3aE({SfOGp*iy-qsMZ)f;i zEvG(=s6=>Wo$JKyG(3Jn<pMt*JT#MhRcq%(Ty88*8>^UxMauVcSqd`xh}b8U|A5o!AjT>w_o znnk%pvF6_+-%e4&6t2sj)p>&Q9DzPk=8b>B5*owq$=*uo;NCLrMbU^ zU`&8=_&*uafs}dKsx%}xVYg`ZyT}3IGxS@k<$egbEke(dn<`#Yiz9BRf6-Xv-h6q$ zyr>@jUrE)0E+z1D*xA09$yOgzZ^`GSmJ<~fV2q)$R&@kUii;lpG1#_QP#B8xwJn$0 zJa~8k@mY=Z%hP_jBFE(mHeG`>w;WXD!^Y*z#lN$*&Zli@1m>aHAT@ zg+h~NxLZN{e%;}snvZmkWo*9)^V8^qMN0>q<*$`@E%Lrt$KG>&1mb#Lv-6#XbeUlk zGLDOSk=ci+@DgjH!E&;cu~v0yLJ^cd9_vdw?-*OD$h1lMWEy}=rR)}d4<5v z)u>_kCrNmll+KEF`vSmP;d&wSHXEGF&Vd+!2ul3SRAot z3@z~K_Ccy{!~E}Yo!7l{vRK=M^6s`Zs$ll+xg|I6&PUc8$Cd9jz!0s>Ct7u^rM8&p zb`;>mm{fzS*Y-@-LlQ7y@oj2M@T9uAf~Pnmao<7paxJrii-~+BXfmWC%M##juCxw- z_Zb{VJcBaCia0sJ{Eu3epZcIOGCY!uvtW6PkguBD9x?7JOZ`N)`G8YJ85@3a^?^}z zc!+SW*_9agj#PW)TKCq+KBo_bVmvAN1-J+yDd2$oX&h1q?VNt9%-+6ZJopV@&0_y7 z4q&f8fAz;dCItM~!CMLYKUT2){Me=6iP2wQcIfYA{JWvevqN0e@fN#C9#YvXYy;e5 z>Yr7+qOY@Lt4d^S{V##sSnXwdVudgU8~NN!+5%9e5=3IqRne1!ZvmhHQ+3duAo(SD z^c+$3w^{&T=v!_Y-ZP>HB8kBm0m{dbeDFTTGsdm_^x&fH+2~CaLY<@@`zw5eevplNM8|P1>lh@JG6MAc+Z$Cy2f>MJ3-^Q|o-c#-U!0ujJb+#-RLih@9(AYUAZV{4|;QyFmj6* zaxI=ll(Ro1d-d-ZUFL;xT%QpX(GAqv0mr8ARiE zbX}Cmd)80v^60Wjn#}}y)#5`kUXqnQ`JLbTsr~won)5nrO!+wKwo8FZV=6)IBL}CY zs0{QeYG#HFkQaS!5eK5A{Fm60a2fhJN{RIHFKY2`E2)`dkp*WJnrig3Sw~#t?LbZs z27U+b`o^uDiKm@Hvr8Sb_dGNEiOHOK@hZ+!p0^|Pe}BRk&MPGd*kqtZv4zhM@$hDQ z=$*Fq!zB&GG5|q=8e(isqTRX4e!Xh{I@eq%rqnC}JgU?2j zL~((rNMuEady{EJNH5}RfL+~xA!eq=z=ck;3VFq6eYeK^t5mpKR*7FP|Ldsxe}dBe zwn@hB%E=pgK#I=bAOBJXjHP4dUZ=JWnq|hs1z=QZ)d#mF{GZ=NwY9z>-DA z{vxCPE7kAIzQV+UB!{zBdW6rVSc&Q-C%6RmUw?itN-6681gs}~>-<@pm~7hMKseO`7=x~H#BWf= z#V~Ch3NH63F8L+q!XsP;p!jwN6yNM;n7e$PS(b|st)%kHz?d9cnW?>!Vllwa2jyBB z|2k$@JDHQR2=4%?E>tD9C6=~$O+YqvC%Tif_uTx2Z)@RY*KCGzi|0%#ime)h+h33% zjd)WzcR(BmIH;U_&A%O6HqKqTtkXE-W*<1Y0}xCCp%Uu@;>V-+8aM^3pn7UYWJe#L z4e{gJL3F7rdxcp8smDIf_mQ9c+eGqtttr}9zANmOXMty`9@NnPqs%mE{_J81hEudi zn!t74whA&Jk^~SEJ0ZItwd?yrvgd2#U1Zq}D&>1!%aohIkpSoptp`G*XrgjWNN?c5 z7?uASu#}NRltY$rT>Gs^nw)+ftsdFaukv}7Fg1Ny9Msa z_W{>0Bh=v-Ptor_cl5?hOTx;@kh={3=3%rCMD+!yez~dDCRgazc<~wme1O4aq0Eh-(Vn&g9f>#$S zL=-Ymtw2`Xon4*1TSqIEI+&r^KRd~M^z^;s(W$RLozCL9@)r!sG|dU$jq`!PY;a`TjR&`Y_9guD5MY_kKq4+DnU$?05zlBm@F4H9 zGNKZRxP@;@%V=5Mv}|i{S>3rUYZO}s3#ZW*`K%cnt2F<;i|+I0+_-H2)JL_0HN2Xj z@Cb+Z|HCqTw(4iqE;YHwD9x%IM+y)xaZueO)DPbB>%{DeX;_5V#1Dpf{xsTu))+9_ zi_yvHGV&KK(1Q)KtEZ8=B%rN>7O%4#0X*UQA;1y9ML-pjMGck-=ElG@lmBzg1Yrk&ejp*S52c1adnB+(~tbwbY))4>*HwKgxr5zJ?b$xT~2)@2EBR%PI zRFnbsPuJ#U{q3uzr?<>ukoC(f@q-a$C5$x^!1}`0N{y2l6lP~M?d6fdbxUMNvMmg9 zvaM)sB!h5=_aLWBBJ5;OA?eTa1y~EqugP-ad+A0tieJ+)v8 z9M)Ta+&(Or03rmh+G`cy`92m6sU(5!jho`J7c&mj|8Rs64kw*ynW<%A(+g_1Z*2*@ z3{-Gv!3MMGulte#JV~Z<@Ch#ZN(|wF4nSfodmB_{!@~5>SjSJIZjAi&ioj0L3k`KK zNUfT#d`whE@Jwhgze>}!Q~EX z>sf$Cj5R6|0n~ojZ-BQPPEfAH@Wz+*#huy~(79H^OJ&KK33|FUAZRfJA}+qjJQ(s9AD*w9jJfM>J)$wJ{gsvjpn3WZl*(T6HG z0|F(77PsP$fNe)xa{OQ1y?0oX+qW)?%ca<{QU#WxAkst(y(|l$6cJDe9SMjKsz?jX zjtZfO6s1H(dO{DO1yCUoA|NevPyz%95Ge^I1nvyD_TG2zbDrm%v(NATan~O{StQ^5 zW*KvgcfNC!rV%WJSN0;*?r4D>e;#)K%lhvvak|p^oT#88;Jf^d6n+;y0WM@t1g@M6 z=)Y+JZZrFmrXC9Gc7Mrut>)nN26FIaVqyBv3(|}y?UhKs2uMI66kQbd*7L0^0=Yxsf#8B5l&@b%=;)wQ1hWX73<$u%R~uGT ziC({Lby58_0e|{?r;bA(&PWygfHcyUK_CY%3JW+qR#ZR5*k+D$I-D%6rs@d4{D`~(JLg$0)(cfTuK%B%zH_AkRVX~MYym>*>|vF&3=&6FdVPE-Q_&(UY15Q0liT_V$q{n8I=L< zKb?Lefg>u2tnhoTbmw`qb63#ZdF%;`{yn>Cr8A7yyymIAzY^o4jlq?FT=#*CHPe2j z(eZ@%bEph{;H4W_6^XH$9|?Syf7jh}^U@xuyw{&a_eS)ZGGDD zy0(V8)cC@DHy}}F&u6lLBUd2fWw#t$T0hp^!Q#Gpj5%!#?>>r^u~5;+`u4TZ=wo?< zcMeTqwYnmYIKUkk+7#`wtkJHMqIxed+pY3wX&`!O>EHFp^h4urpnAHEirgVzK+=~O z{Ku;7qMh09!Z62S$6j*jW0RrO8TpJiCBrQNSEj zT5)G#MGu1awoPoP1w{V{L*LQMPVsKJo#ri&I5(qUk8W=DzFp-v>?ZWY{f0PCwVwe9cl~e`1Pqlw?+xfN`U@6r!<)v9699G~|M=&JT|Z2` zIdvn3wp_e*|1nY=XmaT)_a<-y|NM{s7yPZ0gS0rX3jAZT{T~tqJh=ZKcmuwIaBLpP z0)R@uVglqjQMN#(Ias{L;O-9h@ZYZfR_2PC$#%bWSvQ)4_&8@Sa8!Jq8QHs+;xvV> zP9kVrNCf5aie}Dnza$(Tod@UKN{__bT1XHhMGBWkT2%`k+v)}KPb5SVRP+R2+lt(6 z(QCAd9s`jby@;4DT_5Nj5UC9Ofsy^eZi8ZSJk@ibLyP=ug?~Q^h5{ZnBHQ=+Hjt!j zZ9p8*;XKk*fr>P&_{q%4CzL?oZF|+HveWn7%*kS4bDX=L{FQZbbMzk%frH7@qMdq% zH+yz+w%TKKWsy^nCAicKppsnE}Y`esp^ z(;t%txOdQh?aJAPzwf^LegO8@wCPQY(XseK+2g|`sWS3b7d)#^!kz*jH{U_#t%k2n zPkZ{#vo|Mw*JR6gXk2^1_*Yqc@KyfkuBS&a+q(9h^)+QJSU`#YcsU&F2~;7 z*C^Y^@rB&6QZ2YCI+qZK!B)FK<`3N2NN`v=m!=do(%^6uqn!$r$zu>c{jy;d5%M>` zTszUEOs6}-gGh4f`VF6jI5Yq7_8vpiw4!!R?M*8!5{PvwgBPg?i`{%q$ZfVbxG?gv z8C;s$8oIg6IsC=TA-BQN4+rw&y6)6D3vNO_||-$__!0GsIA{Wi4pui zdf$R31UEnxi9R`d! zp#E3ON>xRZ3O@juH97%ejE$$2E%^vHvFEhfZf8aD1&$Q!)p_+CGy1yborNv!`@pWQ z#zp7yEAlamDq_wh-r^7`fKUd>V@-Am(nc=q*9V7HP;0f4TRZX%MiMrCAv{BZ!*5*d zk$wD@azC;T`sJpWhypnanM@z|4g1XA)35y%_=xI2`nUE-D$q-ke`NXu%n zTzZ#%;LX>1B&Y^^1YBL;|L*ZxMxTxOF z;@X%&=TU5#)WdBg4w79#uc9sGoHOJb2zftuuXV@;eCWDr1(PvSj}6IDl09TJwII6# zSI;!3C}x4%x1x~GDTgCAr8FiVnCzpMknY3vSDUI2VF>)WW8@tSZ0v=o!q#M&(%1TZGVuoVkYgU3D{{{yR01#Wbo-Oq(Y$% zb#T7w*mvSFvv{X%L)@@!D7AInk{&Nu6>2IvK}( z1$Zm%OG=c3_mzr})Fp>1F(tWAK^C{7j#o+2S4SEVZiGIQ`y17j)isKuWZps9P063M z28W0fmni$t0tXf>2&$gwnD5`trfn{1a^4gzu55^>~z;36;>jIs$ExE(DU?>7<^ICmflWi$l`;C9#m5Y%8EX2ZO zt^Qd2OhY7uDPbfc$OFf0@w)#(I&PG>AkR3X`|T2JnXE1+17CspeNc3JGn^FtPhwhtiUw;~@^i8>p~a$i@-O zh`LD3_DY$rOi38}%gi?ZF|PryeGu~ASJd|tOL=PB`3u!KjPSsRl|or^YhEIK~MU?XKN@Q>8Y>H z3ta2a`msT3wQ6&B@zy0udj)t*_M-D+-*JHwqTkMx*Hlgo9;CTvTLYin!2H*j-a~=Z z3d*96uy3caO!Sssyw44UAn~AWUvux~?F`4lgUS3C>CE5F{tLD8f9DO0ci+Cv#G$bg zQd@Qt1Tq1`xp+4hLjD^68^t^c0JD7Q+qDaLmv_=ay|}|((1g3IvtsArQ-%pYWs>v! zq_=F$RTzM4dyMO${yX0P#Lg7!RJd_yQqGsa(beR6nj5<4TkdwtBOtxU)}IeLaP;I2 zn1-4>8G7B*RnH0O7a+M@(sB4S1n_u$mOPE64_$08rjFk^h434FeqYi@r}Sp&=?k@I zn?VMF=UtM49M+W6m@#K(1NnrhtL?t-Io0p_Q3Hlt?X9AmF8&K?D0&V86u)VQ;%1gx z3qs#vg*s@TwOK0XX#G!(2w*tDj$)*2bKj_NjWeYI@$J(r&Ab zgTO&QPF7oPKkk`Y^&5fTvT@(}zYR?Om$ra#%jR__uLN4MJuAy(yr^ql{X)Bs9%l&c z@t|iS*M@iR{g@Lr-yRffum4fT@Jpti-6$2fGAye9;^#A%=x?72w*UMRgl}p*eIj3= zQ$)FI!*AO4dF@Jgs;cei3)0zbUv8VLpI9KKlG|M)m<#hmnz;@jTAMh2>9e(&%;tb| z0ElT9bNLg7BpwV3w$VNWy900HS8KjK+2{anRSuSs-i<2@i=88%=Y-}#54BJnHU^5 zew14D4C1b5aCYACOPNRa+j~`m53{Sh>>b?X(>&c~C}sU!AT9^@(5>UC*eiBJjoJK! zl7k4rrFNqSmGkBMtfhV3Jm=z8Gfy**OtNq>D4KH(_+w+=-n6@rb~2Q7#K_TZ3aMWo zw+eh~WQy2b<;|0oe5P)wb6NExn?m+cowEhb)t`Id%ItieEBUPLrq~{zUcM5HOeR0} zZHIT~6<491oiyj>Ol_pQTbMd*M!-E%xXc%wR8$ttZEw}X18J?~$?kA>ZPC>AOJ)Xg z1q3sQ+PE#m%*i^l$Cv=kb9rL%bk(*8hb$^%a~Tv1-hw3cDcvc) z48!zy&b*c<2f{2aP@BcWMP+;X3hjEz2p|h?jhziLXV$0909*tZUX8lC7W3-?0qU{yMl^}B3==Pv+RJ2n80JJ^D_Vr$mzdCm47J4gY3KOqm7p-w=p0( z>uF#?+U8!p3H&-FuLuD3YS6D!+Y{;g+&ph_TmU|8G`;;P|Nk}^a^UE)*AQ|Moj1?I zjB>ZxM_K$^Cc6a-JkdA+DN&w$+m`qe_)bB$F?WQ>7eh!x3peVauwgvUk@;*~&Q7Oq z$*-J7iU|u-#ZzjJi-CVu@q7_gj8=4#Z@gscBDp6pWK-c^RpF>&0L&oBb6MvS#6(2f zEc4i_2l^2exVQT6G8Mml3b2gB5D@PKh%NI8^5i-X|10OCn#22dR)&0yO7Cw^5d;Y> z5Eo7C7Fk`X+x9`zE;-1{d9(#X`DoNGA~`Q(h@d)RV(D?T!y%P0!f1g|y^#1k3buuB>;R;Dq<5 z>iJ(F_efYrc{pdw2U#+qd7l>^DF%Ir@L~Ncq2{xwovx|KXwapEvy7>@D+O%Qs!S<amsNtmb7Y0Dct!M1Gd3d^1$Y&FvX}rW#CnHJq~bD$F>3> zPw^eU&nal*GyW|$D-EG%iRb5Z|LmiP<&nv=30#BW)ClIQ^G91}rB*3v5@?-D*_x5Nq3 zP_`?$Ti1|SB|l8%#D@sS@9!>R6s%L5F)MrpNsoX0kD4TTgIZHEyP;aTgt$?k!x z#>LULb}y$6G;Qa+;*1GUZ5qN`L%8*tX`=e2k6jX)5EMnHRg8Gy; zy51|MHaeGkj@e`064P(1A!akA8uVaber@s|rGxF%8M%JXj@uLUVJe4T6`pzvTu$S+ z{nMF?M`~dLL+EcJ0U$|}>Wu2I^!er^!@bx0Qu<8?wY39b8*C4EJhpi*ER}z%V>HWr-S9(gLTcPtQF^Vk#NfKSiu>ni)duJ= zv+r+}@z}7~^vv~=<9_s@u?M^9v33KiOU14GH`;#!*R!ZsJE(uIA>o&S_VB=)-9ft;$Rvrz>!q#>v@e5|`QJSYW~7KV zxX0FObwBU5vBR&{!fWFR)qRLPwLz>7)cQ?OS?Ht$D!4f1e*3kY3e6u6wmXv179J>s zYcgeBPv^RpjbF`_Feb4|)bC4Hp8zPgqw%E3(^KROv30q-(|TimJ?zzXI+~xh-7~ay zKq=@-xCiP(@u+Y#N$*p|!>DUuS~=ixEae(WkoYTkyTd=LHgcHQ6$5OP-3#_cQt8YL|Nb)0=Jk`ZKu zWE_HNo>;0;P9eOVDw~g*l>a&Kpo9#zVbs<}{>a_CUr6yQ$mi8Bd;{}&yMlI?l`C3F zsnz4iaIsU#h5bol3p%I9Rb5*3I~Pm%j)YbD>R9=F|J5zOpdp4t#op~cB-iu{WoUFy zzav;#L38Z>Xqkr*_H^vDrnTd#I}fDj4^Ji4>zoqbh*ZR;Vq97cU)!{M5LdO?Mm zAeWViSUN$Ef28oK=R-o*RxCg3oT zBsirnhrhX#M?_j8#p@En`F2W75T!G>;5f_tJaffol&Z9rIvvU$K0Utbc^Jk%w9@Q8 z{K}LNW;aW-heZ^5ODY>MVoldA4x}#Hs@Sh-eH}{Qu)SWhu;JLg_Y0^)C?ZBrD)<~E zLfw@u2Bv9C-&KD4bnytc{=mu+?v`H}| zzy5)gGl7X$M{=xSRtMp#mlX|#dos%u7=54l+N(_L)W(+1+mFb;c(a}~t+e)dKH|`Z zxRxl>W2H;jE>>Se*(CISUu_n4h`(!Bm_(H3>css!h|X-|`8+$eUX<$88I_UeV(rO^ zpR73*Xzx*wN=*XJDY4{0%FXo0Ev)=t=C9g>4b4&a`C;x_o0`zi!z5w3R4G;@JE(Vo z;NO^kdH6&)a`{P$GBbI;O3m+ekX^NH%>pazYBQ!u2$vnTwt(x8#D0<7_zPyMdHF!t z57cNOYepd_JhSl^H*&>)2#?I1##@-n~ zhXX){5ZiRlqwVD8zIOcXFoK3rfh5Yr^)Y#6bs|JhXGNkr_gyv(W`GiXPuhTh_!<`NZ@
#hCVX&u>wsxk+)YiGebokeWq1l-lU0O(4 z`{O;tN8iB=C0IkVN;U(zAp?xQD6zE1+c(g)XHFHr-|6>rUidBvl7BtfrpK4U4)wKP zKaT#+^R9@z2tw~68V@p!JZCQHVF9vvh1ns)k`myx^<#V zYSTJiUU6D$ga=+>w|y1NtVIJB!&{M>xoGTf8Deq_TCQc~Ofjr}3j^mu^qRE1^PXoQ z?rt|;qeLlwIoNl2E~4H|#TSPe4Lgr**D~{G!&zm#f3%k)o}UV5s}ap*tiCb9#kzDC z3}2DFiKAKur8&B@qig-?p7IaO1-tchMK&rWu#7i-`xN}7IOG>ghxNc{uPS_>M&)q{ zWTR-_3!0c84l}UuDR;`7j3UGt+S|a5y;mx1x+Nz5s)-MC{9O0S(n$W0_eHsbwU*WW z?5SS`pl&y7%HP1G_R|}*7ak24cba_$C|7xcmFIL>uh$*v?g|kq#o;tblCe45sz;AR z=uGW6*OO}p_O&i8LOdj?2|I6JYi#+Bjd5CGkdV1Oc7Ct5Th6kZapmXJH?rl%{yiWb z`5bB~q%|?|z9mkzaHV0KQ`V#!>5g2sm|*t^ejH$cO#cyC{G|k~Cwl`d57Q*v{rD69 z(1HHs^S-NZW20RUt36oD5<(1EJPeR3P!oBJuL>mQnKZio5&@FzHvQ9&7L-?E7z!g^zaD!*xY zogRgaj#=$t=fZmQwl%}y3jPpC;o{bk>nV;>1cc?q9x=f!oNd3MOe%@HSI?WI!)^+9 z^WRL7&*+g{k^JSGP%b_2r!0orRtj;lxXMF~+1q&Is0qn1D{|veEtbq;Gx5AGfBui> z_a?pc!kXUr3bf=J>${$wp2e+yB_I6;*jo1pDG!>t@%De>L$Gxpo>mVV!a-P2&`pRL zx-1-IuAY$i>~^1Cuo6}xG%carS1$LA4r^GYNnVl6BxAW*`A9!*%wtk_c=>~ZrN4XA zVR^Z>dn0wX-}hCF@z(kn_jo($@QN7Lj2{1s_W7`Kn(9p6mCYvI$6ERAc6IEr*T~x- zYcZLWxu;T{3%MaB4G;AFODP|FQ?ydQ*=$dIEkeX{E?jkI~-jLa}_!5QN9R9A9 zLq+TMZ?1r#g2`KBJTb(*9Z3mn*(?7s>l)im+k^*uwu}DHN>kcm%-e;HenhDDCRx0E zUugxO&zup4Q$3#))l)h*ogMoe zb2jS+rPPakFr1|7{cUB<7iyb)&lRLz&25CFriwcEQ~AlVC6~PY9+z-Hp`Xmc#h^T# zP(v%60TN_+d-z+;<%2I>mRAmYUFhpQr2<77(uZB*xiIbb8KSC+)j!c*Dy0pO^>6OJ zeW`=O0xaW(L25{mnBJoJCA_kfU{)<9#l8~(!futWiT~<@%y@plfBI2|Ewk+DJg9wz z`plI#BULT~RX>V3i!y$epb75PHq70hJ)F}YZv6%m6zLm^LorfZjX+qg#lUPfIsYn5 z;W->M*RuyH$|;HHDRmDli7@6hZq*a8Qis~gR1ZIrqAo^;%B{W6yh^JVyWV#Kn2UP#03rdjg=YGkC@z6j=8oi;Tkn9HWlNso-gEw; zJ;Yd*i`fC3r>k7}Zb7GUlNhV~4Y3dTIyXx);A0DAeZ0|$4%T(3{VokYhvW>tL#UiahK^Kg)KqBw{~A4uj)P&UMx6s z3i3BZHhyjf_MP_K&YZT|(6B8yFEe*x5m)6aR)Vw!%9iv_lJALy(Js8CMUdf*YtZ{G}M$Dvn$|& z$GtYh*&*(%PCQKDAuPg`*x3HflWMT6}{g4!Je_yQhOUzaE4jp z{S3aPa#?*~xu+{sp+Q)}7K*bK;(#)CD+or)Ohl|EW&f0{hb34Qlqg*4%dNTWv&Vop zAcZb8F|d4d>65QA<}L|fQK&YSyWAk<1*CXch-9x@Ef8>*E!A!4+2O|a6}-=%`%!5u zVG|FZns>*`VgQ2-1;^0a1)oMF+_lsb-q-9}+|3DJr3hMH~@|_T| z2HPsE`^Ni;Mekal1H5Tml(Ma0SWEPST4Iv#Iqj*C~WZedbq5V~Q|sEcR5;P5Bl_l|({T*rIm<#b z=XH5o+Mn|D&qBG^ylo!-jcl#nwCmwD+F9h*K6pQ2UCK$1h?d`;kTAx)h)sz_t4UgB zp}6;&j)76BrRa)OO1H#__sI=0_hr4&cY%WmL{|HYyVDZSO!WCFc-7}Yif?Lc#%Q9U z%P@6<$RF98>ygR);(j^=R8YfIJkQN;X_m1w=xUm6`B`+;LOAu$Kv`xDtepFSXY?`( zHzhu|9FPIq+j$^`;y}P6<5JvZRf4z!?RujJUf9;HM0{ODtlYpvnhJY6RHcO1FQ3+z ztD~eWt(UFIjy|3Hvf}nM7ArU6^h>?d(dXwotS4=c zYIB}X1xC*HBIRbMzKncb{Vb*IFVM4i))@|J5S8*f*ujnw<>0*X4{5w0dx|-}dhQkZ zLWEmV-BMouU{d0w7pc&0minp?J>EN*cYi~6A=TTuKq8PhsbKXArTB+^`;Wk4W{wy2 zsqz^qT{)5B2SvR8GJnUkpA~5VNjv6VOHeDF)4jMPb)&v3~TDu-6a`*K3VO# z4w)Chtt{rW2sh=^Wux&$H)l=Vfky2C7L?4aDG^@7vQ(RV)nYOK@G* ze!BxV@~Prf6rD>rt9c)@m7f~_IY_wr<9hT6ztE`8I0P*_uBY`DMFpUdOw1W>QQ`Os zrSl#v3xi|koKPPJ=0@eEl%`j21r~t3&fQ_>+3R7QnY>$n8<_xL zn^%aW2pfhmhbLEdwOWAoj;%5CNTNXVXK;`L6{E)B$2Tm&eR%};SqQXNH*)_}YQp#1 zdHfUp$1vw)4Vl1jeW(xJ3xN0*HNU%M{DfZ-(pl^MbF`x@UiyLFt0AVU`io??Yudhk z>u`DXp9tiZ7alHUB=Pw5+vlE(3^h z4*fBH7U4sZm+_R5JkkUw{MN)*=-l+jSE#~VJ zlirlMjztHpX~4$*K1jVZ^E(18=id?VBd6#x95iy_*YRy2c_cV2Ujk4Y6cabjDI8NW zCCm8zcIXn*Q7>s?V03$ydXmBU=D#vk|HB>$MtPin^!oA$$B&XM&L`Dx!;c^z6dN}Q z<#H_aM^5jBqn>~Kg$})>j)v)$X;l& zf>mllXV=KnzsROa-=7|-X*KOQNH~?tp?;vY!Fqr{LDDXfi9`I^Y8_cYzuM6ZYES5l zEhM4zMQ=s!XCdiwSFor=FB`zs03kT#%_4Vel!g{q-&>KzEx>A=Hg|nWPSy74!AQ5yWDpiIYqq3s-$u%bC2ydy*l;R@$ z>1?G*G3s-f%^xpH`}oLlzP%__Kd04{(moDWbL3;Z`L>XK%w!R-kT=r5ZdvNxr)A&X zXS;2DK7^?0>O3j! z$jQuag-i5)ZDCO~0s^70t~^;DhX=cbZdA!8T_dN@%c$+C+#=MLK~+}O;)t%Poo~0^ zHUy&m8jJ$KUk(uD8x!XPmGiR8KLOmG3I7+81J{s>>fXd=j&nfc=K%=yjZy@6LaO&9 zfWbQxVs*2KK111>h_*1cI@-gR_xFW#3RJecUV=@Kkn;B(m-II&0D#lVN?ERU%1v0M zS602CXJv&(yR`z)Dr5k|m0$4g>+w{gUFDdP!ods+04V01q>7I^lna}hRvTqC#KkYU z@h4qE($S})PIj!KQWwTR{47$%ar(vg>^82e6}}0mf7f4IpGzF5cVJ72pM$Y;%Q*> zbrFYR3(iZ7vdC|K6i_CI!>bQ`S!Rpfms@dNNwL;55m3$Jk1gtO|A-=6?S%46UB^&DOS`W^TP zSrKjhPEKgDw>))N%b8SIm6gSe@nPQs3IH#PYUUG%^-O`BNZf04VffwX(6GVhAZB7^ zq{3c~TFOHZ?M%rXt*i`^G$Ra9-1so|$Hp}Mu<%yx_x>Y2tdYZs2aSiM#<@oNej|Yu zx$`XRRe-_fV^fE2@j>E2uI|+?(^SKok@v3ZS6Y?{8&~Pa6-@K1N`}gnxtG;fLSlq9 zx~T!8MN#^qx(aV|f}4YKkw|s|ovZGNf_w9WgsAxa4J)89W9*IWPuK6Bu}QpEI%z7|`K$E{iSeHb>%PY!`U);jYA0mHM(SwmI=f9YwiiPL& z@n=(FWP@E&w#Zk1&rPG5ltrE+?L6HNGd=iGajKM-e{t$N09u$m)M@miWz^Kj zOkztgyh-T81ES*S<}H&-+XOE1`Ckn@K5Na3d@sAPE%mdk`o)!32^>)F@--u*-`?U8 z^k4C;>Jz(j&SN{xKLs}Y>F)L~u~*;zbCW&Rb*#pQm_f>kQ}IrWW)^0T9p1d4!9`7O zcUi{-Y}#a}VDA>D)IXb>9TK^!FD_%}aizn)-G)t5W81D{&fK5>oxi5)mXr^7C{Ol+ z9ve9MQY3vgBRxX#tnW>jGqXEiSA?JIp63(DyrU9QLEQ;EU?oN;pM1@`| zo8P(cJr%w8iN&W0)TjT1&!M37A0QwwJDd|#)K|%Q&i4nduOkW)jZ;OVZd56vbnJc1 z;Bw`TsQS40MOa8lYMBDepKUtf(MIa};oKZ@cGO!oC3HjKaDHqEtjQPfmPn*(Z8gwxJ47`Zsl>0iAy z?N8rynsmq6*)t#ho~divQ|6;Ag`UNy_#f^rO5Y#cnD2r1^rXn@MkpTcJn#U(JZ-z8 zb@}Vu!u8yN{)*k$Cp^2qsDYY6>pPBXO~=oZb{t#s3!m$wIT=+B>gY2p{?;4De9PxD zt_5=r|2pvSfQVtAFT6l=3dW^7zE5y^uK*Kwj%9UB{;KQ3Zz@_Jv%oKi{f!%P{FJ<& zc1$fi(PkKn9J66{k5?j6+!gEI;vcZO=QDS4)k?m}CEXI_lXBf^ zx@?5K%S#?%aR~oKD`FdwJNywCS)9L%=cC_lq|?Y+GY2_L7I09n_kC4gGHN@E=vy`I z=M5;rX`(nDx zhqdzOLW$T;T9{<}FoBB@@=Ub&_YF}I1JS--Z!HsppE|b`tCVi_#S6Kx3AaW!I0!(MUsocQ*taRzL&%6tlL8iR{G$T{fy!ZufI ze+jm)Za7zzQ7mQ2vEn|?Ggw8p8{96(S!_>F-{Px1VA@TZX^d{<+vD2Bor{cad`L!6 zQm;2gd%&e1AFkK35*V$*qmhEA>K*8~At2WpIoohnx2QK>EZz9L*j(>JQh|GoSFWm6 z!TKphO1r=i&%#};!n~>)tl(DtMz71p1JPgyXgG*STYrgh# zuL4w~^LM{pW@Or|n%@JeykE66WN!MFEa5-A<20K+@=%iCVSaA8wM8=Wa5H-o{xRUD z!n6LaB1R_meuFSp;eWSgMqe?d3O*5Y4ycd67l5y*JG^;6Ky3ZQIs8M@BN*)^Bz>nR zF@bq;iB+9^W1MrAeddL{#{N?mTPwz>M)ut~r*XGeD=rsSy{k2M=(odhgGzpswsygw zp#qNwDHiWqhyp$)bzK`#%GJ{qpD;lz+;KPXFup&5ktj-Op9=BV`Q`zP-PGhQrS`2@y9sQ2juJ5{pm7)$d#!2C4E&3>$3 zZv^&9Av11vNVguT0MvVt+(CmTT3^L`hTsE-O;+ZhETT ztx@^1m$&*%MTg>SzrNTQ?Ql8AswGcUPuM!(a^4Ql6!#hYr{;b45CsvO>H(M?>XyUT z#v1iGQwR0l>>&F%&FP)!dhcO_U2KkxIJwfHE3~dbFs64eRG5ADIn1wLa1N}iAmE^? zVKE&SzmAmuIlxmE?!HUY8zZoQEr^QYQImeMN{6ImErP?L>z8`({>PNVd_N&RUZ=!* zkN####JTg)+a|6B2Wu<>nGWxpUN=HZH_-(;o;3UfCvR&a)ad%repTXIoBxu7v}&HG zO?@!hct|ZC!fds&YF5K&8g93XB{g@_3nZoifb|D7PrIGARn@2t?E_+9Z8fGdTsH*Uu_x5lf78*x^O>oqP(oX@l!;~389b2mXjh* z+VE83zS-*H-I1={HZKaX?~=Bhmc#e{z?v5At=Yx$!$#%j613wrc_91b2VO_1?x|Y>uv51CQk;f1}ONO71F9!)ZSgA z=E0D>!W97CABkCjF~ zY4l3rGOOea;*`>831IoX+teNIXzOOe zgw2XT!SR6C{#f(?D>V($DnhN;><+~v2>o4F9Z^#C!r7Vzx1Xl^JT3Bq#4@QqScwGz zr4pezbnZDqR>uaRuL^ZT(3J9(slhK%){?__ZtEVU((u`of^FEcGtQ{SamlA<`H(|= z?NCPCrqdHfOB0$q6w~b}aANE51qZ!s+>dL=Dczt-h55X*U6~f6cf3d^WD8E-Ra98K zIz||+>eTgfX{ZPHAE$U^FW)1}xJ$vvVs)K$8sh>Xv?mH)on&*O=`_Eh49qoix}&NV zjOB+Gtv^)eBJZb~=cTqW+j5t?08gVkU7%5d7p}F$ExNcQShy-I3AhEh&3+TXT zenBxljPK^9eatb zuKYWB!eCUN!hQy0&jsJ2CytJ7er>Owo)gN+>f=<1f5krd!|i7*b}p}3TPx{7jMLAE z*Ofo!M>tL5{p`}GKfS*4G#@uAhO#rzDgx_*3kF6xEtiAURGC~#KbT>~K28=zh5zMg zSD%YnzvIp#1wPn8Op`D>GYw-anrH@l7;nEW^dg${2J@>djW03q>~{7-`RN-M zD=#WkSs+CV2kc1FTP61rjK+xfgMGiym>Fgo?W{hT&Pwmj#SDR0)@E7^f7mrIKLEn> zdwZ=pXrP?T$wy%m!+Nd05e37Y?w^Z1!=Jn{%PZ?;nrxK{yCt99CUeJf%PBQesS}?Pd`YpMy1!=Jj!UV^-_&brwipz^>s@3 zH{4wFzF=o23qTnlCkQ%l-Jw)+J)44Qtwhp;1*e2%Q#`{CZtEYejY@U0L~!1v!}<>? zy{6>5Wa+fxdc1B2rFC-7G~%~$rQ+ zR)Xcgi2t(vE~RtPt+E7doLkbDvR-y}r}c^ia!(Eh(lH2DSRjqG&T)|H16Wd3Y2Rl6 zK9)N)@8WrWFN7VtCwb7m)iM3T@SoC6uZbHsy7cf)?@ga<)|@@k%!e7-b6MqW2k`OT z0#|poTdebrR_wj4r>_<=+z*Gm@zB8bamH>sh<$}LJ?(ExG&{!XebusV=w4-8BG`OH zFF$Q$MabQ<0VtETeXMGP?O)`yabQY*Fdj3vc4Okx;M&}D>bD@lo@;U?y)6;hfw;C8 zuF|)*aH&k*f#7sItI?k+{p?F;K)gvQJj|H8FL(5Q*#-3}jvMfCX05@R6vh)&Z%*iv zch8;KW_{;F+h)d`$O%t)6sd=zRV_#K1^e=Tb5!%SjbW8QSdEvhr3%0o!K0N5r{t6k z$Se8p`C{H9_kVobl{&l4NM|usp7JBi(6}t&VA6_$XCI;}GUbeAmeUA(L>0o=T|cR- zUdnF#8~O+|Da!$hJ!sCX+A?^BU^2tw>bsY-{)xF(eS%v`qwNrjPgViVW-Ho(y2Drn z=)~3sPf5{st(FCUv6iM_h0QeAQ(nNPtycV|b*{@waUbBAJ=IeL@C3r3s%R`~Yh0-C zZ*r#8;*h}K$ooLUUBNxshlr@^+SaUAc9-2Sli5qOnyXIh>!QXaT5K|Gm@l;I0`9uu zTDI|SwUOAKOwCrDvPJ7c@Pt^`0+|)SN9)#;MsQR8!lQjgcZmw97rn`Hnhl3#0&`p; z?kiG{4tF+{YBpzNO3AIyZSHkT+ndkB^_3KNwBKh%Hr_GzqwjFd?PDUM6=au1`Do3W za{=C~cgfRGw%zt3UxLf@lzM~54v0cCoxGta$6N8D(R`At%wVQPVCQ^6eobW-XH7)% z=5lEg!fg~NrzJ3@ZW@T5!~`GnwB2bT5DM3F`PEhdmf)n%Ycub!h_br|#10AUD=c%* zHKWk93Qv1fA|w-e9wv47DU*!RUEcXT?Kq(9dbTK1{zSzBYYXQicKLWsVY6dqwr=h< z);zE9i5W3F`W?=XA)PVSTnzT>YPa_C6BzGj#lv)RUp&`gE;O!s3oZbIKRPnK!>ps9 z@$IKQ*@<`hWo>14C7C@~;>j_=yqS)C`Nd~by|;5alW*YGzpb4ZlMSg1ItKooAi2UN zyQ{<`;C)N8%6B}cQpQ1X`$#)R@`5O5gGU2iP9p| zA`Ou)AMTM9-c5QR?CFK}Yat_lyRa(o)vo;L3udgmprAapRdHTv%J10R$X%23eRdpR zBWDSV@2-#I@aDmfCX|FgIl4Hk2EU$jgB2~8X#niLLqv?ZAi_g$%UG}`!3+Dz8 zt46;8vR?X8n)i{#=MTeT&4b_dFqhh7dGAV}c?o2crvKj1;=}$U@|Gt!ZU8TlieTM~ zjFyi?X=~K4UEiIGs_Lrpg9UTnU%0;89J2kAeqDmlomMutd0n&9LDct|MkA!w=;8aU zWT$4m1V>H6>RQD@x`%C4)pT?`X|8a)gGB87$#IU5oIsjG=uX^WM9LbSnmDZX+5U3e zd3^4(bB{m|C4IdsV{xxlPtaGv)o=yz$-iovxfI;^I+h^TLHW&Po|F>#&Cb8N(PxE` zu~Rank~Yvx8R6r-Ez1kK(J`%;tGaaEp&N2#s-8*l9-|qL*qrA^sm3dLbx;O^bH=;d zWa_2j<3cw{Ht-{p-aPA+?D&!(N_WLn3HLN?i!yRn>Sl9w^}(I)>p@0QU2S1^0gstw zy<^VAC>o}qe0BJ{BzfKfa!IVNVE%H@R)LM3m0lS3rp2O~#4O~-(3nBIGy6!nmEn_^ zGp^jjhG3?Gk~V97i8f9lXaU&i&x$B^Gk~GkA+=;nL+M^SG3C#AOz+w=$rG=W4{$Mt zv7k1X;P{juo7f2x#c+81s^MVH4W`@|w;fC2>nKc?FBsRf^JQjtL+z}=&i89RKKgXO zapkJdCF>3nurr71c)HTdon(eOe|ANmgPih67O-cZvh-62J_JuyodVyK-}S4#5%`iB z2eTcyd6b5*_2*&^^7N^9d`|=bhdB!e)8+eH{2p0YATi=}B{TU$(>dDe%2Pc&s;c6a zPs*5A9m^E{ad#aht?Xk++ZEU`kEWnwt0kYjCoZP}F)j0eW0iwi^g_6sCs6x_8a)rr zAK4Ugr6z*V+nG)#@D1H~HxSmkMI{}c@Q^lkFWF_(Wqx(c32(scqSoSn0EXFgUas=L z_fLE*I#_T=L;gL0`@X*rzIz+Xdt%9UZG_P#(lwBDiJhvRV5 zd3R)igObU&Duhopz3ZamK7kK%mxg5c5OXfZ5~4aN3$H2E225wAqRgwx{f@^J|2kd~ z+zJ4#Zo~vw1Pc_YLzK0bqP^MyM>wY1v@&<=){Y|~Z(E{TY`NMvZ4k}5bbh{eDvR?M z-#wbW(=xI0+C=U}(;Q{HLPhWI^F3YqR|+=*WmRU|7SABqEO@RtN_7@+%sl$U4f*9aa%70_g8Wq{K2Df?%Id2Dt^!3A{idc>0Ivw?2w2RImy0Lf zDu;^+8w4{k-GZ2jA6L6E4zYd>?h&EHf5tl5nvAw2TNNBvs|FQ3telLaO+8>LwwIj{ zorCN~RIEz01I$()W~-$ON#O}&aWNxnC)n(upV$Jins$$Wz=n$dM^Ll64b+xYk<7 z1mqrLOGa+IGpgfxr@2&d{x=4=&$T7P%qQE=UdgAhJ+twl#FeiCX@{TQpKV>Zvb)`^ zwW}lJ#h_0R8?WYZ5?DuD=R*k{X?aX$lgi`hNqbhRS zTK#W-h7|`S+ddCzZ90FsVQJ?%9sYB%6kU7TvteZ;(upcFNE;xk;`Wk%`}X_k(<`l^ zrgFT#w595iLqp=nr1IJ9%6FDd%WXYx%__ylK9Y6Vj;wW8NUe?&g1S6$IB|80F^lt* zVewQxq69t4wvMvt?p;*xa2yh!c*Z7^jGvWb2F0V=;JuFL4T`;|g$=7;6&<3bjGh)I z?r#n)USX&nvrFxqU^wlwsA~EW0Ufoc?cVOz01uvRJQd*9s>AL0L6|+9M#xh6Lv6ikDtt0`nJf+C+)!g*GB2es&YGNgRKL=LSOcVIGVgQ znm(AnpG>-G~(;Z z>(N0BSJ_p47iRxYlJ!>=R35JGNfBhNiaJKtM;i$dlL>j9dQXjQip+kHb|nmTyg0-I z6)X3u?`wtlF9;P?^V5RSd_LW^LA0)yRRlsoD3*G8=2)nzqT}wBhM^B#a^H`t+cc>r z0#^E~mv8>-xRO<Cv!z4{7^#$nfhyfLSLgTi<$Yef#mi!*}YpR1!P*1~ZW0VRQ~DkXK?**iY`NWL!ab6FF6pvzdxsl99Tb9A#_K-eF!}fe{7C@E z6%3qG` zU_M22&F?EW+h*`03~C=D_@*x3A?*(N?KxcF?5M{C?X69Vo;oaCPsU&JQh%cDi(1Pm+-E6(vx76alCPD!R+>v!eX?za@ z4t8WwX9(jJr*G{YaXb+BFWeukzQLo!NlcOE`<2q{r0b~mG*DuTGl(1U)gNlm-JqS_KL6CS-?2wGaUm}hxfA5~EoA;wcM&kb z)3^Ply~8&r>Hq9@OKHYw`s2-a7Z4G#nm+iqyR(`iu}B`*BDswNRl7ZGUOKOdpt?s$ zz01N~ne9W}xllH#t|{x*eYMY4T^yqGJXC9dwfDQ$Og4|+?3$qz%4^2)@g6Yl zF21(v=v8Kp<|F%m@*!C%cT}B6=~SvhgDbbz(FNK7J?zZ!zGs*@cv7|qu*f?Tp%cHm z^A}IMeaqFEi7YromkP2sd&NUkFq_Ug&q-dN9AT{IqZzp!AMM4jodGqJMX-ngL`>(L z+)z)n=wD<$ z1QRLU8|J8eqg&E4Z+$4E`UbbuR^hg~yO@wXz>Sq1(Q8q|w}b(;L%M1o@wkFqGxV6$ zZGbOo(Dw*)*RbO~W0chDY1PA;V^ero}_KO@Hb<%-Af zVWo#9-Z9jVE6y|SlnkZafklZ7x(uSzgb{f|adJa%7aMs#s$oC%S~k)*SIz&uWzx78 zWHD6Rd2^UbX&G>t+tcrwqhRhL67yg49{5Ia3_V*_J^xa@qZSTNC>eQ`|7#sQzV!i0 zAnmi*jErv8-2(M0${oDl?U)I8Lt9vDruZ|O3Yy~BK%?bYd+$dW4rn_NAM4?Lx^h6` z-m6LpCFU_cR>MJ(GPk+&ztjT4(XMlpDd!~0rD3_!v(GRp_?%6q9zS{heNOY_LzIvH z6%fD>`$rnAuF{vz3AXFGBvJ)b_5lv5)D7Wmdw=gh&*7|)17oNunO&kqOTBLN79Vcz zyCc_gDuDW#kA)H_6JeqqEknp}%B&JJpVEc`0s}n4b801iTe0z#AB_BF_t!$_*6?le zaS7T?>odVFXbi*9;R{<%wJl;*qKy!bC~!iH{?%ur32Kq#TWm8hLK!hNx`$i#NU=r6 zFFNozr`Xof-6*lXmxfT9mz34tH&m&IQ*#kmV%{YGKUirNm2j$u2u$^sU{{E$WL3xG zDfW~*oY1`M&;F9lHtq9LO0r5V;2Y0FOzizsu6BFoSb~k;rol{-tXqU4Z<44I*h%#? zvj!LcsOk6fdkFq?%Nv}r@vCLy*hf=(^7_{v^z{o=6-NmX2LT=z;>+JNkc*T3dLH2g zPWFDA{4(S;OZ~N1gIOi3_w~!{Z^U!OaWIG8i>+kYq8i@3L>K+ky1sp$bEnuTnaiSAU{m=t(Fc&NXYVP|_(@O35k| zod`J%=a5j61aOpw$A7u4bxmTt7%wvShdgzxbiOorvgA#A{WYj*3X3AVes>+N9}4LTCaaNhCX&)z>OarQCL^#9X5 z-^8YX*qtm|w}N_fNK`HE>QzLFYGpOt1kQ-sbX5Md2rDqG(w|pod~4!Wt*?VBc~NOQ zJ`sK6-yvQYJngA81_2;5C%g`-S5MTmM1M=s_BA9=8|Uj$q?S-`P-$Bf4;5ys-wR51 znK#-UubR&QDISjbz!rLIN^K^C%7gwhTrx(Y^KLvO7NJW8jv6dp5h8?{I@p5?(#m?{ z1@fnV$7A1xxa)1e9i+O>X^Ln<|0AbOKe==!eXSI$BJbD|lg1_WG5UAd3X{ZUx-qe9 zV)qKz7ZV67?Ww|Xk^1}#^?MbN{}mDE$-dj(Sq6lW?YjUa>(F`3YP!-=f5fUzhOz_& z8unkb6TMP3PHw89U@0IQV+XU@){rCZj*y0lYH77mfazr)Ng2WpW=0*nBpAz|ZYFqHK72>2k^dNEka@V=-0^JiaYO&<2YB93ZQ))Tza*WutTWHBq)~`5Lq0j4o&=WVsKgw)6 zl34Xbag%KK_tfwb@pb`+}u!HCozEhg8Xwxu7>ecG`yNU8INr{iz9eJg@UY za$IQYnIp>O*Qqa7t2sri*E6;mT$sx0ZO6p*>wQWJrmGun3M}r`Ki`-mAWY)`)?xc> zTi8%7z@TkU1VP`FO&a%99O)GJx%^`9^ptgN-)+o>Iab1u?$q^(3kk!|T3WNxODi+; zh>!oT2`x@GT>x)!Si)9+)i~3k+Z_(8`xV@>i}7#u8n`9&`n&u^Wr3;gYs#2rR>B|Vi|7eL;2i0H`NUMSW zN(0)>?LZIMLO`E3?)C8NSO26Kj=UrM06DiI=R2j`Z4LeV%{DCNhuccs?F?ObB(VLd z`=YkFOP*8QvPyBhKTY%6G#dsl74rT&w&rjSi8)dKT~$@6&=+~2xOJ~^X}#OH@NSq? zkakq!6cG25Pg$}fTou<_S#9=-0v-sy$u)*Cr{O9s0C{v=X=dq4!3ckQfk9noNiKhB zQb+C?HUiIcf*+KZn0UA3*iL$d)yu4F=u6op78usoXX>sLB#G-|r}W0qwH+*-&|-&g z=@F*FNZLyrS>K+gaox zQMNwR*saLAjHdZ3LUTPh2bYchXn7CBD1B=s_iD0ln&HNL3Vx_0^s7|?Ld5tkz*5|{ z*jbyo7q#_g{zT&eK~&<%**=g=lC*>9$G9rt0g|{zB;WNfN37I;`FG=6_d=~!A3mwD z&&M9>=bds$_WE++4VUlUrj7na2%$xK{JHk2c(aKDwc>|+tC_OxihSE9WAk~%8GGm} zrU({ZnjZ`}fJ_LqEBdzKQ7#u6fHW-yi!24xx9vyEXa$rfYRAQPUq`rP-g`}6xA$MgK2 z<9Yt+ILN%`x~}(mo!5E3Ua#}Kh6%VnDXQtJSvOc19$_=I?1^Rrt8d&)p+DdE+0c^T z-^je#dPPGu_CO&0qUGCszvI_WSu(Bz1-Aut;$8x^ew7XsS^wqH3T#3 zNO~fctp|MM2k~22EvbDw3f@0aLR_&H1CH~=?z=(4*9N5Glf_QWS~^u5tN9jMZ&a7a zcRaHza#)g3>==y?CJ(*}+09popD23#NS-8Sv}34rq)xc^$%f?3${+3gOHKt7@7%%g zJ(S&$|IU9F0Z=ukKlCWJ`osZy`2m>gZFx#*@M53^W_%$Q5g-ueCe(A$DdlE~&23&> z0OXtLYAavJojg?qLtzzVXuaZg?Rw(jU{kx@AJ*My24S@q(31~8#BJrGpF|ROfT}qa zXNwq(|f1-7q;FaqZusrN%r5qg5 zsr>mfskQEY^Z6>KKSmS?@L8N!h6GX&XgUB@QZ%J|nVr7D!dkZ_25AwDLIa zmM3~fn*tKx`yYGr#){YwrLS8_yQD`StH}nI45e z4MQLI`w4&MAI0-PYZ8eeXb=KW9?zcT7L0ISUdYNG=;H|3rDnxlP}UE7c2cX;&P5m& z{XFr=iEl;o(2u0iQuQB_sQbbtF_EP z4L7s;kNXR%s|hx*Q+K}}KiD$noK(fVfH*fuEk2z@P_Uid`>ccY_1;^`bnGh4k`TPz znlydWqfT>^xHwUevH8(@eQIpB3JMgJnM}~H&+yTcS=g&&JKy#^`0hKr@=5CncX-2( z_G8u4>xo{Y9!Vd0=@Ktb?NtcW#k?z9=s~wXS*jnmm>}nM<&JGseb=L>{*{I{Ulw;q z(Hc8S5~?$IV+nilE5+Y{je2uK{YSdo{zedfA#+@?LjSitIZ%gBgKH$&NM|)AbCfyZ zQtoU;IM3P)wxX&-$#7^FcwKoHg@}q_!Vp4}~|> z=<@|hJl+-JLEECk_U=CCYFS6i?55aLc2=#I>IH2Ez(q`|t~iWUdT?Y7TZ3|8m$!*_ z8vCy$%odAmBb0aucJXb8B-Z%vRd#+K3Q4Nor}4jG*4t><(-+$J4-xcMUtK9%t(`b< zTqb}j)a`MU#hXP=>ZglEoH~*i%TmUJ(``ODAn$y6zjPn}JL{`n{B^zHAo32TM!XS( zX?#FlzI?XtV}R4AbF&ERt{n5H9OYr(%V=63Ftm|MczO^(Xdw?4FH+*b5U7Hha#V7fnCqL3dv zEA@0DWq^ySH9_IG+)&$XBL((=skxuGArcj9HcRH{{c9-EG?K^5qiANs4R7^ze#n0F zlthX>t2{}%nLT-8C3q!hUdB)KUANH@IA*ElDB_RWBAxp9m^57$Y z>$G$Q%{->KpX{hW+VLHag6!{-cCsRQ^%}f`8*7Ez2ZN!;N&an7D>XVsfkV4dye|_b z?`XDKz#0j z1&fJwt63-U1m_fmPi&8n)~bfJNh(&LcqB1!dvL?bkk+&Hz=jwbEVx_mb3B#?nKOTQ z>@+&42uBo}2%M6wXxOGXeP0sQpGo8x`Z&wD#E6$CX@P0^r>v2u zj);`ENGj!dVQK3}5MSMR+JTlbE>W|p@(X>n`B-#*QSMJoRZLHxg)El1L*zl{t5=0{ zy8jqW+G2^(+A0L-v;P>4R)tHeN5@VpFJeBu2atI`uipQ@S0Pmo!=TfgIjK6l*68uq zry~L)(`Vak{EKzFR=ezZAu_&ApQeLUn0WJxFVF}2&FoQbzd0xnt zRk_>n%U#vgXW2xhA8K+Vt{EL%@Q1AcOuz-qOL3>GqY-bjqU%fY(*XAQbV{R)_7Hc` z;x>DiU5cX7*}Ks+ult==%zIOr4#X*0>oT_cZ)A?j4oVLuW1)lq&p^(1T<}_T8oA2# zU{>aim^mKLSn<@W)#*v6>o0)@_~6(ydU#L%1lD5Q1$xEf&i%)o^nq5JdH?b(6_~2$ zmn+{JhtjN3t8F6nk{*)Q5?cmV61KY*Gm02Ei1Z2FkdjQxMM#;I61nJUBBO2wRG=Zr zyj|qG9-X8lqYz1+qT^a9-{IOP&YbW^x$?a(Fm5|_An#VqOcsrJOk9+c+>Iz*PI3Lz zkE-P8zq;zhlhr+%#Kw<`O(g;TUtx8DwaZa7$Bl6Lo$}RK(2v8h>-&2vK-m=ML?*GT z?f#s{4-9+KQ~t;l*MTo{HKmBy!;23G%8V-y5`TaIa~@}VuuYTM+TBkgeE>@;Zzjvt zyDpnTRyS1fT!zUrx16{Em-SLMscrwEW6=q<`DQ1i_q;3Q`-uJUUTsOfdUc{BMt!VL zsspUqV|dTVJ6fJp(m?gtpmjfh)w!TE@xed9ts7x`A(5cHKsb}0R}7ykz3>)0V8ss; ztbjc_{F)2KIABneMf#bU>#k&DL^r=00i-Cjp_I{nDbCc{t%-#n70or6@z(VbNZYnk zZK}`xfd`k`dls*PHhL8HR(jMy)>KRk+#q(9Ewqa{bcYb6u;oN0`BA>Nqhz;k`gj`G zETEUHbQkOaGw)2TD-Z+Gs_Y-%#A6aA(yBi4u#nnMh)5-lZ9y(7juMoxkvKJZ(A3@D zFNR**xR@Cc^)xBx%!WHj5+!${?=n^b95#nt*V9RCj}A~B+w`cVb}4nQlimJQ{SPh3 zk2$!*u2@N1w(@eKP|#uqF>PXFtL$?crM;}dK+^YGKn8Bv;BKegC%XXvTKvX)P>hwj zhkqkQyc~KEM+v|p&cDA@R%1!heD(qK0!Z|7hWIG@5%6YqbAsqKb4hk^8WTV>N`-ohtb z1Uroc_tW{h5@Nd3D3Z+KFgx}KE$w*OCK9-$elzvXB)z|DAN>9L2U(Js_Shvjn(*AU zt7yYv9?8-EqbE4em;2U6(6~?slQMYx!9ohjs^GGXJPeDD0FK!+h6h+j;N&kzgZ_nGIfO=-01*ZoQ3Na#(IvyE9BuZ_t@VGz42QNL-!W z_Q44Fcj%}|7x7V+CkgilzBOxawcJ|`Rkd8Cju30$u zy{|e})YScX)v{IPi5K!s#R;f#=ln|jhxKWlyFJVmr0W~%`zgTK{wGk)oDBAW;^l0C zjvPsYMUEXKm1V=#)g<-@c0AWgJYGvkC|(~XxDJv6%6QA}O#wj8cbZpUp}u1+&s=-F zU%FK7O6_&Y8lT)d{$n!8`AMgg{dGM^u>r-5sJddX<;bIO5I(6cynEm$(Ohf0OgR8qLIn%m4t(H;NC$tn#$H1$-&Bhs`QYd|gFU)E`UX1Rx9hu3EEJ@-lxONo+O{hqq(TPGk(;^8pPsD;q zwi;(^F&s)CLp^LuR>;UVe(06W&CFJGYRV~Sn@Ns6cSK5FJ7qdtle;HE zjW^Q!R=*`g-Kr=IIYVo^>Swbt;&F0E2sRRsF}_vLa7v6c5yN5r4keBZUXl@3)`m*_ ztj@P7f|NT|uazn7lwI85V4G-e|@Ir(@cw z#)(5mo=+E&K*Kc{-x8j;U#|kD18&InRJO=)<5Si) z(4rQ&*{p60e+R0H#bI&Zz51XpiR?l<>mZl|G5jgw1!zO@W`opLg5gGM1w^NKf~@6r zqc5aCj}wdFfgdA&Uq4#r;?_U{;fg7%!0wj+08SY1di7WTgo1Q0<*z(O16X;&=WkU@ z!X4VnNqDqS>fXj#?2>c7kVc(>A>}>-mC|$Enu@ttez|a>;RzAj-F-N;jZB5Jy;p z57(QPAbz?IDsq=LWKD9NdQwZmn`~^r9n;;OpURlH#C!=coGgwOT6$f4{A$(HwsZI! zP;opHp*|^l>N0XFXz5n8O^*h3eZlt!*ajM68Y^WhXBKB@u!iGcOv3HfzxpdFZ>^cT zmoyQoKdxgf#+~ z-O5AD6*e0i?YZnvG35+0$aKKkW19TfA;F-)Otnxgr%PT3>)#7bsF8t9|B+Is47E6Q z)k%kk|HQVTdzD8?J0!944`t3m-cU`ljX3Kba5%EnHI-JC1rQTB^d9(#=?}>3on8 z?h=C855T{kl9$i zvAUvSz%j4j96m1z*HyGghU#c3LVf zsnvGz2^gQ!7G7ZjrXTjqUE3d!FCCe?4GBPU_xnm6TX)rrj(u}6Z+&&WhF9_iDbNH` zVIybc+9XTD^T>WY*(vAru1>$fuAQOjWz_>)>(<8Y-#Ozyl-hwte@b#ASl?@4O%7|z zGh$bSJjRF`je$ktjSq$cZ>^}M#tcp);$I5N^+`8n;FzSoA0zq9al*0TCm8oRjMRxFO2)FuhfKb^B6LB-O$-;ntJP{rc<>y79*&!}r?fBVx3h2oFqE}- ztbPN1vTr4+qp_)@xlaGXpf2UYFSGd7n)%$P=My++m7AtMe!W9{(oLSViR+rYA4n7` zDcn*lX4hGC7#F~V|@QNe+4}B-i6=8kw1YLuz7GhGay5a%fN$^P|hp%pM@zn*|s8ks-9#P_AJH@HrIi{!NrUMF6uwas9yHHrqv!oR=B{m|^C z)Nwg!6Ep5E&Qe64|3BGUC$= zMbazt?Lf_VwboeFEbO(yDV~z2Wgk0&nu*18csFcuBu-}PED)S>o%s1ue2=^)TIC73 z-hg#zZyHkSK7d?_4!Opp1o@wP_YhatR(QZem8RCN#nxeR?mnp{}@=(=P z*U}2WHgHOxQh=I7S|4S{{ErjTy1VB>2U2F0Ry>F2EOVQ`L=)X4@ypNATgT}EumJk! z7FT{aw;v}7B5F4}d#uNW(}VaqNw?2v&k$QJxjurb6c1fZ!f=)FHoN-N>8jtQn(Nhdd9#C9P{GGh20EtAVC%&V z=X)C}!qg18e0>{+5y@=vMuMeBtLeQ_N$TSm%1;N=+B)p#ztSh9%c);s)Qp zV>YUaG!eU9-ovj2U%&mQ^&IU4OpAy@6;g33qS|$_KonOb8oe;P{?pMb9)ie{xXNWo z(xW}X5!}c-GHOTGt_k)jJ+i8Mb%(0aUrg3N($w+&{vY92b3{x7pC~9?yV0+22ATr- z_4YZ`$ruG7`9FE8_+IjR;9-qha;9l2ORb!xvJ~|QdMJb0hvP_&ZC@&z&OaS=6m5$+vt@&pit|n8dadj z3*1en82ZQP^2*VX2-4nR2q;agjHwa-WiY%f0D%hEKSLVQaKm7hveMC((a_0fw3=gC zXR89LF~NV>abHZzSBV|~H?CDS3|TDJ03;t?L`o<61Ltoq@3pX1SE-)V5r!-r-id2z zxK^<0bvl10$m@nuk~0QCYT$qFjNvN=FH%^7q*dExb?kC_XjwT8o6rArZJR>3bT*vUcD&EbGm>>tvGhN{;QgHXO@gUxh zu#nr6^p1L4%_H&kn@y6nD@w(2b15NX&fm&`VJJ)qIF~MwYqCM&u%G7rEb$1G7nF#v z%Z*$@Yk~6*=6>svb6Zfb=(eKP{;i$BHkq%JaE8|r2`SrYmp-Q$XBTCop;iQy6?R{p$cJnA{(?rn!~Ie$O< z*6nC?OyOnR2nHnQ3@>$eJVDV@rMij3FLbdLGPf1=uVKYU;#v|33Z*y!+96Ldtsz9` zIU>yWeQN)iv~p@d!>})0j~2|z<-{zn?&?)nKe-)E8rdxkIZ_sDww;VkVIb!ppwXVs z%=t9wU`LaZ2jDqcIga3Y!vZzi2*QfnaX0UgA|2|AZ^#psjM=65628pXo34&j#>-l8 zTU)t_mFshf=4ri6h0K;xL|!^I}=ojtz3bM!rLCa8VZ`DFQQkRj=+Oyb}2# zz_x-gv^u__Hn9FasE1;)oe|5KdfyhI{Db=zHMUY{^9~xB!RE23GIN%6yI&+Gn||0W zy*LPWrg>xMj};H4<5Q3lxR3>laz^u}=&^F^74KHzr@O zh7wbs5kCM~edVC)b7+k7!=gG?l?$h;vnOzPk-^Oz2=)FtTgKDyrTYdg8R9+zQJRZ? z3f-}C>m;@8xOB%*a&^SfY+E^GUwsU*s6_Z+Wu94DI=sSw#W{dwmB76sBGft_1sr1y z#ul!P2jPNPT)L?xI6q;sTCjJYfWM=$^0@HS#piO!ax|RY_A{xwo*UasN8Jb zS1(Z!mv|#tYNWw!RI_zR&2EB#TVKC;K^cFk`+uf z_JBslyn<2dd(56UC(z)i!1diy2-|aq7jA-b30C%?huRjXa zZ=spqrw0xF)Kb=k2XazREn8V9uDiIVj+a^RyG35i6p45Jf;`!q+%+5s@UCX|)fhEU zyL;L2h-@kVI81v)3tsk`9L2+!WAaQ5!1S#5WZ}BU(uflU6h|U2~dNZfQ;~R;Id4`$Sm5WD`6q8veCB-S1dc^nC8 zXV)*pQdhD0;X1pSf0pu+zH>ik{FwWjkDG6Y^UEj&NpTmfKParSu@ttTlypTOLz2|AM^c!E%#*;c28>)V znggt@^_HlWJ3)%FN2F(@`}J95dEzF2B_pEaQR(&fpPR9LXVTP}v^n`l%Q%>S$Ei`o z%&$&XH?x-OBQ;)KWAoaH{q$8G;iU55rn$b&nBC`kt>U`xGRGSpcLkNbM2?Q{QR+dC z&(ZOA^u%H9=MRxn;bF8%h1=}h@oi1SCSW6=kl$6Jzx5)VfuDU ze|d{ZNU$nhkw{E8Ih6k0AK3Ca<32e!{7ETB%NaYvbmt!$1IL|!(C{(%0(s58EC87} ztLipdw6!z*N{_YXknxi#vrcX@u1V>awRsxre$#??J$)E|!}jB*@S*g_ zRdpDBHI14+aHy5hkFuSJ_@hg!FH*=;_?~;)Kfc7rV^OdZV>U;lXYqf%1XauMx^tX2x>^vMWt0&mA74#ca{kpF{m`HUNu~e%&sP| z5}~oSt5nMm3-g)I{j8*^DklFaZRSaJ)RP*Ovd+6_ z`_Yyx-0FCDQEp2DE+*Ez!WP;cbA%!#Y|7U-l{6HWJ~T4*I*?O!>r~Itrutv0>z9n! zuQ5GoV*?3=%XcwNiiYf)j03|W4_+rF)XM}ng(wI8f$2fdHmX~=KB${x>)9v6J{1rA z;n84E=W zmwMiDp=l&LxM)}%+az=QETLv~_w;K0(=o$JcET3R(-!5>>>eI|t$B?8hq}xWJ-An? zlcXF{fkUuF_<}JNw)QOBH+mM8+xU22wtA%|W1)H?fIMwebZNGu0W>75L)~(T9 z8D!sqc*D)3@f^Wtj5j4AC5vV*@9SERpW%COR?>WBXqoxR6Scuxd6{aN0lc&c6GksG zexK<g6B_x9a&G-wyAylzi}oy69J*--IODlUo@V`DUf_9Z(Eq>vobJ;w=Y}#i%53 zATfDgEP}Rin*jkXKaPNkq(Wds0E9~oG>^rkg4HRlZ@KJuSN$baCXe@S;oT?pf{T7I zY7%xQHlM9}MA}dIZ?0fweQGBsbc4L!&|j}u2JgG7`NbZ(m+?%g7lMA$`Z7}9FRN{1 zM2k%@seFy#Y5yHeA+@@`1ZZJ-g$zZe5xdg?pg!+kB!}WvhzP&5>85fQ$>H&*ff1G~ z@J@{cCqtv;jo7kt%kk|Q4wKWJ8KuJs>On7@hfLmxJgZSp?GGN@jZxKpmhlq*E#~>M z2h-$K#|wr{lP%4yUNs%Eacxfx(#1{&>e59 z9OBXl#=eyC2|+sV)?UQ$*2$5q!xqmrVtp4^Fg6T$bpettjIY1->jgn+qr6GusvEk& zUzZQi8}(nlozbW_;f!i;ZvxLIt@k%0h_)d|3-g0{8Ak6=OUGanEQ- z6G;vLKuc&{l}*VK%1n;EiDW^Mir7Q^h3LEx8KU0QV7IyAr@OeqGaiF$DBs+5-ruAs zy{3n6d2joxZ$d5FRpP^@e@AZaw`YWX{!8EZ(c+1C)u{45t7)3d-PkMyjs-bAzYc!_Tr`+C8K#pl}L`tJ4ze8m6NH4Cf$h;$+A#4X~-BGEpPW^T>guQeQ} zL`_-VxT#(q5yABP4ex1D6J=;S(AB-!g^7>kiBQ+r%B43e*B)>lS@9h!9;@eNS@c_^ zD?XSY?zvw+kA40zm+dj-vDst(wHbr0Kc@qF{j|skV zC7!&&S;Sx`x%qA>s@i_PD-nZu3?7e}LpcJF6)w8{#Sno1fGtJsR9Eejz~kJCcOn9U z+iz7cFW5)hdE41osO#75w2T{bRfRM)HZY7Z?MH;KAY-<+j9U8xw*3`0tArkSjBI%T zZ)((8zjrR~S@v&$UsRAxwur)Jv#83wlg0rfoF&tLwc|b4!w^W=!p#@%L(2EoV|~FM zRZ)SR&>#`y*w94tsbE(Em!T#@G(y#vK6C7x$RL(E#TPQYwol zwJdB9*LLP;CIlryej{`0YQ_+FTkSg26uBXDQ}tZEv&8sB?R`2VBxsRtyB|jl;;jC* zCWIJs9@C)*Xhf^|hq3-17Ml`S&Z%bIFmhxp>7t%EYlN>*kTaZYOUU+I;>f^=y5>}L z7gfn$ZBd;X!ZR3vRl@KCd7^ zMj%C6A;FKk=2VyO@7INJ1E<^p1%c%ljJ3@%28ZH-d=@V(%*;JRyASbr%UPwHX|>56 z475>*og4h(kru}s9ukS*T{%Jb7yH2-u>}S$SD`#6Acnyt`o!`Od0N#io^28&@PqqU zU%-u0zMZQe{BGqRi#m&-1mZu*B@p)ODry^F>UbsRCqK9hw`hn9Ia>0<5-ZsitB-|%ntbWn4ras0%8Ju2+Xx!(cgpSj1S z*HB_00Mr33z`YNM&40k|&w$Ds75aO`dg$+@^B>CmH}so&EUWNdAfOHWdR~io68?#4 zCTp$K!dwD6Au}~th5+P{_S8yKCyXoJdI@$MuIcN)P#Lde^n7h$m*CSnSKXS1Cu024cy9QQaP)zGn4!G zEmBOMPcs-KUOTd|B~sE^KhpZvbTN>3^1S0tAnQ`YMU(#Ja_g#VzSk)a%~<5+RVk_H zdp#ECPADjzxps38Cy*1|B@#Lg|VgP}B^c5gr z6<8CPx<{eT(WFks(qfyz9k0$xJjXg&1AHZg#}2bGZ8v3C*M*#(={V<3F|$&_wWaGJ;a?r}|e_ZrIY9w4q=|^HbviS7OldZ9tCKQd*6v zaTQf^a#Oe8mFJa&U9`PTd);}}4pF!H*hlI&yJLKs@ieUORSUi@Re*N!&X(7t=?RMC zbz9@q{@mgt2o4i=yYZqbSfQLdy7Gl$oV&GS+XCDhY9sD6(;^3D?Ey>a%LQ+pML1!p zTEn|XMp`#%_Uz3u1zc~J7%(>?p7S0TTWC2DG zGGFVO8x+MeKcz8KkU(=UL}xcpwK41v9N7Q<+lw{MC^y?_n%BBB!|9jK&y5lG;bnA= zpiaLr!Pp>QTs`tOMM|zCSVuA@HS+#u&6t~C88ebTIoNDZyAE`tDjHH?Rff9RtgYLn z50xDMiarQ=u+}~pm6pq$aZmMjvJL+XAj={ToRbyB;QTC`;}D z1P*r*_u#aj0!xjQ9QTV&K3EARhZ!K^FvvxCK-hU?^?4O|Nk!s#9#Wx7&t(@yrVd*0J;(Re;P-P42r2FE={KfMXFhqlgDs1|R1&n7F z(<`axwtu#&n$TKAv*3qfcpXruSg^+q6P2(C(4W$0f_sfRy-i>?jFWr5%^QzEa85;% zWvhe$Gb-{sI2aNg8_HG72XM$C=c{%T3H3mW{S&Ppf#NU9D?HYIb$vBM3!pcS`eU(r zkbshM%uq&f@N8lENxpomeLc9 z=aSGEP;}zTbl}P@Y-MINkFlX2IDVaexNr3JEkH!FZ zL7enL3ZyrEo|dy)1O>mS%uRfB_&GqhCFWMqivBzYa2B@#0apK&6wo^%K^a*Sfa9l3 zBPP^1y4+AfKhG8J<8&SVAF!-zHczB8h4i04(8aI^;L6A#fM#3z1@z`yt>bwpOkYw@ zp)W34;u+7B_a#?}>(v3V4}%5_OXo=-g#}z&f&nQLO<>gNGB)aP!fW+(w(j@CkgEF; zO0PZ~gHR6R9-P-vz726}!0Z8<|LBjJQ@q)qbq`GPBeNywU(noX=_LLFsA`3=42PpalkzrRebD3VK$Zi`xiq?Q!IQ z#X5VeBRvpU4Sa^`3uyfA)U9vK(WbM^s98d8qWwlqY$0F)cpHaNSA2S<;UhnjM4?5q z90Uw-O%_bkEoDS8O;xF*QtLcal`>v*6>rd}9ikwvInKlRN+XMKdTuHD31y-PA6&;7 zPiQ^c5xEwq&Ig$?ukGQ-OXA&o0|00-Iu1r9(C)vIUZ&y5HOX?e5_pfwDRM9_j86%& z$Z#u%Zt4NtJSh=XNEFjR(GGAs0KMzDi%+1*a|0Jh>17IhrS^d8h!0U_t+KU_M6=HT@&s!t?XaDSh0X%AQ@mX?-A0ZqPbzKLm8L&1XizBcW>3!| zL8#=#D#eW@06-cEbh;U+y2-3}T8fXFz`=~xtDG8qqIk?60;AkG4$$RbWy0*+>CM|qA#eZ&-O7c=rd$z6`W^F`)z1VriHTUazD-IGz6y*+P{Ee<5 zq;XeNuX0znCo6*(I6PWeCJFJ#s1^NAt@b5yl@C%K%I~cH$RjDqkAv(>YB57^&|>F8 zZx9W9#&bXOXW)orBv8Cn9xxS-xH}~Ab1iy0ITKT0otJ`~&J%;~*(Ymix&h_C#8l*2 zqU$M?d|?VkUEu9Ag8F5;!)&mkR(F!VpYSbjx2xhk0ON)j>pBC+TgPe}%B_IVW+tQI>Ilvz&f7!fgt zL~ov;z8%Ymj5GHk0O*sY15en}Gr|KC={P+cNKA-bqz(<>lB4hvO=Zvs;MzW5hH_`W z(Wo~!PO6>fc`Ek8!AKN_EUMoMv?z*GCX=VVbUhC#Aj z(GS(For@|hoG~zj{4dE6P(TIx>R&$S#*u;r?q~0#f9;kf@gs>n9Tc$3MbGlKv$Zf{ zwS62Gr(IllPunVuRF%9UZpK)lrq2tA3i@=00Ov8+0;|lKI*yV*?d=kw3FAp!IA2g+ zKJYJf>S5rH#v-6Sn?0kgn~g~*_^(3~&o{k5{g}L(j~E3aE({SfOGp*iy-qsMZ)f;i zEvG(=s6=>Wo$JKyG(3Jn<pMt*JT#MhRcq%(Ty88*8>^UxMauVcSqd`xh}b8U|A5o!AjT>w_o znnk%pvF6_+-%e4&6t2sj)p>&Q9DzPk=8b>B5*owq$=*uo;NCLrMbU^ zU`&8=_&*uafs}dKsx%}xVYg`ZyT}3IGxS@k<$egbEke(dn<`#Yiz9BRf6-Xv-h6q$ zyr>@jUrE)0E+z1D*xA09$yOgzZ^`GSmJ<~fV2q)$R&@kUii;lpG1#_QP#B8xwJn$0 zJa~8k@mY=Z%hP_jBFE(mHeG`>w;WXD!^Y*z#lN$*&Zli@1m>aHAT@ zg+h~NxLZN{e%;}snvZmkWo*9)^V8^qMN0>q<*$`@E%Lrt$KG>&1mb#Lv-6#XbeUlk zGLDOSk=ci+@DgjH!E&;cu~v0yLJ^cd9_vdw?-*OD$h1lMWEy}=rR)}d4<5v z)u>_kCrNmll+KEF`vSmP;d&wSHXEGF&Vd+!2ul3SRAot z3@z~K_Ccy{!~E}Yo!7l{vRK=M^6s`Zs$ll+xg|I6&PUc8$Cd9jz!0s>Ct7u^rM8&p zb`;>mm{fzS*Y-@-LlQ7y@oj2M@T9uAf~Pnmao<7paxJrii-~+BXfmWC%M##juCxw- z_Zb{VJcBaCia0sJ{Eu3epZcIOGCY!uvtW6PkguBD9x?7JOZ`N)`G8YJ85@3a^?^}z zc!+SW*_9agj#PW)TKCq+KBo_bVmvAN1-J+yDd2$oX&h1q?VNt9%-+6ZJopV@&0_y7 z4q&f8fAz;dCItM~!CMLYKUT2){Me=6iP2wQcIfYA{JWvevqN0e@fN#C9#YvXYy;e5 z>Yr7+qOY@Lt4d^S{V##sSnXwdVudgU8~NN!+5%9e5=3IqRne1!ZvmhHQ+3duAo(SD z^c+$3w^{&T=v!_Y-ZP>HB8kBm0m{dbeDFTTGsdm_^x&fH+2~CaLY<@@`zw5eevplNM8|P1>lh@JG6MAc+Z$Cy2f>MJ3-^Q|o-c#-U!0ujJb+#-RLih@9(AYUAZV{4|;QyFmj6* zaxI=ll(Ro1d-d-ZUFL;xT%QpX(GAqv0mr8ARiE zbX}Cmd)80v^60Wjn#}}y)#5`kUXqnQ`JLbTsr~won)5nrO!+wKwo8FZV=6)IBL}CY zs0{QeYG#HFkQaS!5eK5A{Fm60a2fhJN{RIHFKY2`E2)`dkp*WJnrig3Sw~#t?LbZs z27U+b`o^uDiKm@Hvr8Sb_dGNEiOHOK@hZ+!p0^|Pe}BRk&MPGd*kqtZv4zhM@$hDQ z=$*Fq!zB&GG5|q=8e(isqTRX4e!Xh{I@eq%rqnC}JgU?2j zL~((rNMuEady{EJNH5}RfL+~xA!eq=z=ck;3VFq6eYeK^t5mpKR*7FP|Ldsxe}dBe zwn@hB%E=pgK#I=bAOBJXjHP4dUZ=JWnq|hs1z=QZ)d#mF{GZ=NwY9z>-DA z{vxCPE7kAIzQV+UB!{zBdW6rVSc&Q-C%6RmUw?itN-6681gs}~>-<@pm~7hMKseO`7=x~H#BWf= z#V~Ch3NH63F8L+q!XsP;p!jwN6yNM;n7e$PS(b|st)%kHz?d9cnW?>!Vllwa2jyBB z|2k$@JDHQR2=4%?E>tD9C6=~$O+YqvC%Tif_uTx2Z)@RY*KCGzi|0%#ime)h+h33% zjd)WzcR(BmIH;U_&A%O6HqKqTtkXE-W*<1Y0}xCCp%Uu@;>V-+8aM^3pn7UYWJe#L z4e{gJL3F7rdxcp8smDIf_mQ9c+eGqtttr}9zANmOXMty`9@NnPqs%mE{_J81hEudi zn!t74whA&Jk^~SEJ0ZItwd?yrvgd2#U1Zq}D&>1!%aohIkpSoptp`G*XrgjWNN?c5 z7?uASu#}NRltY$rT>Gs^nw)+ftsdFaukv}7Fg1Ny9Msa z_W{>0Bh=v-Ptor_cl5?hOTx;@kh={3=3%rCMD+!yez~dDCRgazc<~wme1O4aq0Eh-(Vn&g9f>#$S zL=-Ymtw2`Xon4*1TSqIEI+&r^KRd~M^z^;s(W$RLozCL9@)r!sG|dU$jq`!PY;a`TjR&`Y_9guD5MY_kKq4+DnU$?05zlBm@F4H9 zGNKZRxP@;@%V=5Mv}|i{S>3rUYZO}s3#ZW*`K%cnt2F<;i|+I0+_-H2)JL_0HN2Xj z@Cb+Z|HCqTw(4iqE;YHwD9x%IM+y)xaZueO)DPbB>%{DeX;_5V#1Dpf{xsTu))+9_ zi_yvHGV&KK(1Q)KtEZ8=B%rN>7O%4#0X*UQA;1y9ML-pjMGck-=ElG@lmBzg1Yrk&ejp*S52c1adnB+(~tbwbY))4>*HwKgxr5zJ?b$xT~2)@2EBR%PI zRFnbsPuJ#U{q3uzr?<>ukoC(f@q-a$C5$x^!1}`0N{y2l6lP~M?d6fdbxUMNvMmg9 zvaM)sB!h5=_aLWBBJ5;OA?eTa1y~EqugP-ad+A0tieJ+)v8 z9M)Ta+&(Or03rmh+G`cy`92m6sU(5!jho`J7c&mj|8Rs64kw*ynW<%A(+g_1Z*2*@ z3{-Gv!3MMGulte#JV~Z<@Ch#ZN(|wF4nSfodmB_{!@~5>SjSJIZjAi&ioj0L3k`KK zNUfT#d`whE@Jwhgze>}!Q~EX z>sf$Cj5R6|0n~ojZ-BQPPEfAH@Wz+*#huy~(79H^OJ&KK33|FUAZRfJA}+qjJQ(s9AD*w9jJfM>J)$wJ{gsvjpn3WZl*(T6HG z0|F(77PsP$fNe)xa{OQ1y?0oX+qW)?%ca<{QU#WxAkst(y(|l$6cJDe9SMjKsz?jX zjtZfO6s1H(dO{DO1yCUoA|NevPyz%95Ge^I1nvyD_TG2zbDrm%v(NATan~O{StQ^5 zW*KvgcfNC!rV%WJSN0;*?r4D>e;#)K%lhvvak|p^oT#88;Jf^d6n+;y0WM@t1g@M6 z=)Y+JZZrFmrXC9Gc7Mrut>)nN26FIaVqyBv3(|}y?UhKs2uMI66kQbd*7L0^0=Yxsf#8B5l&@b%=;)wQ1hWX73<$u%R~uGT ziC({Lby58_0e|{?r;bA(&PWygfHcyUK_CY%3JW+qR#ZR5*k+D$I-D%6rs@d4{D`~(JLg$0)(cfTuK%B%zH_AkRVX~MYym>*>|vF&3=&6FdVPE-Q_&(UY15Q0liT_V$q{n8I=L< zKb?Lefg>u2tnhoTbmw`qb63#ZdF%;`{yn>Cr8A7yyymIAzY^o4jlq?FT=#*CHPe2j z(eZ@%bEph{;H4W_6^XH$9|?Syf7jh}^U@xuyw{&a_eS)ZGGDD zy0(V8)cC@DHy}}F&u6lLBUd2fWw#t$T0hp^!Q#Gpj5%!#?>>r^u~5;+`u4TZ=wo?< zcMeTqwYnmYIKUkk+7#`wtkJHMqIxed+pY3wX&`!O>EHFp^h4urpnAHEirgVzK+=~O z{Ku;7qMh09!Z62S$6j*jW0RrO8TpJiCBrQNSEj zT5)G#MGu1awoPoP1w{V{L*LQMPVsKJo#ri&I5(qUk8W=DzFp-v>?ZWY{f0PCwVwe9cl~e`1Pqlw?+xfN`U@6r!<)v9699G~|M=&JT|Z2` zIdvn3wp_e*|1nY=XmaT)_a<-y|NM{s7yPZ0gS0rX3jAZT{T~tqJh=ZKcmuwIaBLpP z0)R@uVglqjQMN#(Ias{L;O-9h@ZYZfR_2PC$#%bWSvQ)4_&8@Sa8!Jq8QHs+;xvV> zP9kVrNCf5aie}Dnza$(Tod@UKN{__bT1XHhMGBWkT2%`k+v)}KPb5SVRP+R2+lt(6 z(QCAd9s`jby@;4DT_5Nj5UC9Ofsy^eZi8ZSJk@ibLyP=ug?~Q^h5{ZnBHQ=+Hjt!j zZ9p8*;XKk*fr>P&_{q%4CzL?oZF|+HveWn7%*kS4bDX=L{FQZbbMzk%frH7@qMdq% zH+yz+w%TKKWsy^nCAicKppsnE}Y`esp^ z(;t%txOdQh?aJAPzwf^LegO8@wCPQY(XseK+2g|`sWS3b7d)#^!kz*jH{U_#t%k2n zPkZ{#vo|Mw*JR6gXk2^1_*Yqc@KyfkuBS&a+q(9h^)+QJSU`#YcsU&F2~;7 z*C^Y^@rB&6QZ2YCI+qZK!B)FK<`3N2NN`v=m!=do(%^6uqn!$r$zu>c{jy;d5%M>` zTszUEOs6}-gGh4f`VF6jI5Yq7_8vpiw4!!R?M*8!5{PvwgBPg?i`{%q$ZfVbxG?gv z8C;s$8oIg6IsC=TA-BQN4+rw&y6)6D3vNO_||-$__!0GsIA{Wi4pui zdf$R31UEnxi9R`d! zp#E3ON>xRZ3O@juH97%ejE$$2E%^vHvFEhfZf8aD1&$Q!)p_+CGy1yborNv!`@pWQ z#zp7yEAlamDq_wh-r^7`fKUd>V@-Am(nc=q*9V7HP;0f4TRZX%MiMrCAv{BZ!*5*d zk$wD@azC;T`sJpWhypnanM@z|4g1XA)35y%_=xI2`nUE-D$q-ke`NXu%n zTzZ#%;LX>1B&Y^^1YBL;|L*ZxMxTxOF z;@X%&=TU5#)WdBg4w79#uc9sGoHOJb2zftuuXV@;eCWDr1(PvSj}6IDl09TJwII6# zSI;!3C}x4%x1x~GDTgCAr8FiVnCzpMknY3vSDUI2VF>)WW8@tSZ0v=o!q#M&(%1TZGVuoVkYgU3D{{{yR01#Wbo-Oq(Y$% zb#T7w*mvSFvv{X%L)@@!D7AInk{&Nu6>2IvK}( z1$Zm%OG=c3_mzr})Fp>1F(tWAK^C{7j#o+2S4SEVZiGIQ`y17j)isKuWZps9P063M z28W0fmni$t0tXf>2&$gwnD5`trfn{1a^4gzu55^>~z;36;>jIs$ExE(DU?>7<^ICmflWi$l`;C9#m5Y%8EX2ZO zt^Qd2OhY7uDPbfc$OFf0@w)#(I&PG>AkR3X`|T2JnXE1+17CspeNc3JGn^FtPhwhtiUw;~@^i8>p~a$i@-O zh`LD3_DY$rOi38}%gi?ZF|PryeGu~ASJd|tOL=PB`3u!KjPSsRl|or^YhEIK~MU?XKN@Q>8Y>H z3ta2a`msT3wQ6&B@zy0udj)t*_M-D+-*JHwqTkMx*Hlgo9;CTvTLYin!2H*j-a~=Z z3d*96uy3caO!Sssyw44UAn~AWUvux~?F`4lgUS3C>CE5F{tLD8f9DO0ci+Cv#G$bg zQd@Qt1Tq1`xp+4hLjD^68^t^c0JD7Q+qDaLmv_=ay|}|((1g3IvtsArQ-%pYWs>v! zq_=F$RTzM4dyMO${yX0P#Lg7!RJd_yQqGsa(beR6nj5<4TkdwtBOtxU)}IeLaP;I2 zn1-4>8G7B*RnH0O7a+M@(sB4S1n_u$mOPE64_$08rjFk^h434FeqYi@r}Sp&=?k@I zn?VMF=UtM49M+W6m@#K(1NnrhtL?t-Io0p_Q3Hlt?X9AmF8&K?D0&V86u)VQ;%1gx z3qs#vg*s@TwOK0XX#G!(2w*tDj$)*2bKj_NjWeYI@$J(r&Ab zgTO&QPF7oPKkk`Y^&5fTvT@(}zYR?Om$ra#%jR__uLN4MJuAy(yr^ql{X)Bs9%l&c z@t|iS*M@iR{g@Lr-yRffum4fT@Jpti-6$2fGAye9;^#A%=x?72w*UMRgl}p*eIj3= zQ$)FI!*AO4dF@Jgs;cei3)0zbUv8VLpI9KKlG|M)m<#hmnz;@jTAMh2>9e(&%;tb| z0ElT9bNLg7BpwV3w$VNWy900HS8KjK+2{anRSuSs-i<2@i=88%=Y-}#54BJnHU^5 zew14D4C1b5aCYACOPNRa+j~`m53{Sh>>b?X(>&c~C}sU!AT9^@(5>UC*eiBJjoJK! zl7k4rrFNqSmGkBMtfhV3Jm=z8Gfy**OtNq>D4KH(_+w+=-n6@rb~2Q7#K_TZ3aMWo zw+eh~WQy2b<;|0oe5P)wb6NExn?m+cowEhb)t`Id%ItieEBUPLrq~{zUcM5HOeR0} zZHIT~6<491oiyj>Ol_pQTbMd*M!-E%xXc%wR8$ttZEw}X18J?~$?kA>ZPC>AOJ)Xg z1q3sQ+PE#m%*i^l$Cv=kb9rL%bk(*8hb$^%a~Tv1-hw3cDcvc) z48!zy&b*c<2f{2aP@BcWMP+;X3hjEz2p|h?jhziLXV$0909*tZUX8lC7W3-?0qU{yMl^}B3==Pv+RJ2n80JJ^D_Vr$mzdCm47J4gY3KOqm7p-w=p0( z>uF#?+U8!p3H&-FuLuD3YS6D!+Y{;g+&ph_TmU|8G`;;P|Nk}^a^UE)*AQ|Moj1?I zjB>ZxM_K$^Cc6a-JkdA+DN&w$+m`qe_)bB$F?WQ>7eh!x3peVauwgvUk@;*~&Q7Oq z$*-J7iU|u-#ZzjJi-CVu@q7_gj8=4#Z@gscBDp6pWK-c^RpF>&0L&oBb6MvS#6(2f zEc4i_2l^2exVQT6G8Mml3b2gB5D@PKh%NI8^5i-X|10OCn#22dR)&0yO7Cw^5d;Y> z5Eo7C7Fk`X+x9`zE;-1{d9(#X`DoNGA~`Q(h@d)RV(D?T!y%P0!f1g|y^#1k3buuB>;R;Dq<5 z>iJ(F_efYrc{pdw2U#+qd7l>^DF%Ir@L~Ncq2{xwovx|KXwapEvy7>@D+O%Qs!S<amsNtmb7Y0Dct!M1Gd3d^1$Y&FvX}rW#CnHJq~bD$F>3> zPw^eU&nal*GyW|$D-EG%iRb5Z|LmiP<&nv=30#BW)ClIQ^G91}rB*3v5@?-D*_x5Nq3 zP_`?$Ti1|SB|l8%#D@sS@9!>R6s%L5F)MrpNsoX0kD4TTgIZHEyP;aTgt$?k!x z#>LULb}y$6G;Qa+;*1GUZ5qN`L%8*tX`=e2k6jX)5EMnHRg8Gy; zy51|MHaeGkj@e`064P(1A!akA8uVaber@s|rGxF%8M%JXj@uLUVJe4T6`pzvTu$S+ z{nMF?M`~dLL+EcJ0U$|}>Wu2I^!er^!@bx0Qu<8?wY39b8*C4EJhpi*ER}z%V>HWr-S9(gLTcPtQF^Vk#NfKSiu>ni)duJ= zv+r+}@z}7~^vv~=<9_s@u?M^9v33KiOU14GH`;#!*R!ZsJE(uIA>o&S_VB=)-9ft;$Rvrz>!q#>v@e5|`QJSYW~7KV zxX0FObwBU5vBR&{!fWFR)qRLPwLz>7)cQ?OS?Ht$D!4f1e*3kY3e6u6wmXv179J>s zYcgeBPv^RpjbF`_Feb4|)bC4Hp8zPgqw%E3(^KROv30q-(|TimJ?zzXI+~xh-7~ay zKq=@-xCiP(@u+Y#N$*p|!>DUuS~=ixEae(WkoYTkyTd=LHgcHQ6$5OP-3#_cQt8YL|Nb)0=Jk`ZKu zWE_HNo>;0;P9eOVDw~g*l>a&Kpo9#zVbs<}{>a_CUr6yQ$mi8Bd;{}&yMlI?l`C3F zsnz4iaIsU#h5bol3p%I9Rb5*3I~Pm%j)YbD>R9=F|J5zOpdp4t#op~cB-iu{WoUFy zzav;#L38Z>Xqkr*_H^vDrnTd#I}fDj4^Ji4>zoqbh*ZR;Vq97cU)!{M5LdO?Mm zAeWViSUN$Ef28oK=R-o*RxCg3oT zBsirnhrhX#M?_j8#p@En`F2W75T!G>;5f_tJaffol&Z9rIvvU$K0Utbc^Jk%w9@Q8 z{K}LNW;aW-heZ^5ODY>MVoldA4x}#Hs@Sh-eH}{Qu)SWhu;JLg_Y0^)C?ZBrD)<~E zLfw@u2Bv9C-&KD4bnytc{=mu+?v`H}| zzy5)gGl7X$M{=xSRtMp#mlX|#dos%u7=54l+N(_L)W(+1+mFb;c(a}~t+e)dKH|`Z zxRxl>W2H;jE>>Se*(CISUu_n4h`(!Bm_(H3>css!h|X-|`8+$eUX<$88I_UeV(rO^ zpR73*Xzx*wN=*XJDY4{0%FXo0Ev)=t=C9g>4b4&a`C;x_o0`zi!z5w3R4G;@JE(Vo z;NO^kdH6&)a`{P$GBbI;O3m+ekX^NH%>pazYBQ!u2$vnTwt(x8#D0<7_zPyMdHF!t z57cNOYepd_JhSl^H*&>)2#?I1##@-n~ zhXX){5ZiRlqwVD8zIOcXFoK3rfh5Yr^)Y#6bs|JhXGNkr_gyv(W`GiXPuhTh_!<`NZ@
W}lJ#h_0R8?WYZ5?DuD=R*k{X?aX$lgi`hNqbhRS zTK#W-h7|`S+ddCzZ90FsVQJ?%9sYB%6kU7TvteZ;(upcFNE;xk;`Wk%`}X_k(<`l^ zrgFT#w595iLqp=nr1IJ9%6FDd%WXYx%__ylK9Y6Vj;wW8NUe?&g1S6$IB|80F^lt* zVewQxq69t4wvMvt?p;*xa2yh!c*Z7^jGvWb2F0V=;JuFL4T`;|g$=7;6&<3bjGh)I z?r#n)USX&nvrFxqU^wlwsA~EW0Ufoc?cVOz01uvRJQd*9s>AL0L6|+9M#xh6Lv6ikDtt0`nJf+C+)!g*GB2es&YGNgRKL=LSOcVIGVgQ znm(AnpG>-G~(;Z z>(N0BSJ_p47iRxYlJ!>=R35JGNfBhNiaJKtM;i$dlL>j9dQXjQip+kHb|nmTyg0-I z6)X3u?`wtlF9;P?^V5RSd_LW^LA0)yRRlsoD3*G8=2)nzqT}wBhM^B#a^H`t+cc>r z0#^E~mv8>-xRO<Cv!z4{7^#$nfhyfLSLgTi<$Yef#mi!*}YpR1!P*1~ZW0VRQ~DkXK?**iY`NWL!ab6FF6pvzdxsl99Tb9A#_K-eF!}fe{7C@E z6%3qG` zU_M22&F?EW+h*`03~C=D_@*x3A?*(N?KxcF?5M{C?X69Vo;oaCPsU&JQh%cDi(1Pm+-E6(vx76alCPD!R+>v!eX?za@ z4t8WwX9(jJr*G{YaXb+BFWeukzQLo!NlcOE`<2q{r0b~mG*DuTGl(1U)gNlm-JqS_KL6CS-?2wGaUm}hxfA5~EoA;wcM&kb z)3^Ply~8&r>Hq9@OKHYw`s2-a7Z4G#nm+iqyR(`iu}B`*BDswNRl7ZGUOKOdpt?s$ zz01N~ne9W}xllH#t|{x*eYMY4T^yqGJXC9dwfDQ$Og4|+?3$qz%4^2)@g6Yl zF21(v=v8Kp<|F%m@*!C%cT}B6=~SvhgDbbz(FNK7J?zZ!zGs*@cv7|qu*f?Tp%cHm z^A}IMeaqFEi7YromkP2sd&NUkFq_Ug&q-dN9AT{IqZzp!AMM4jodGqJMX-ngL`>(L z+)z)n=wD<$ z1QRLU8|J8eqg&E4Z+$4E`UbbuR^hg~yO@wXz>Sq1(Q8q|w}b(;L%M1o@wkFqGxV6$ zZGbOo(Dw*)*RbO~W0chDY1PA;V^ero}_KO@Hb<%-Af zVWo#9-Z9jVE6y|SlnkZafklZ7x(uSzgb{f|adJa%7aMs#s$oC%S~k)*SIz&uWzx78 zWHD6Rd2^UbX&G>t+tcrwqhRhL67yg49{5Ia3_V*_J^xa@qZSTNC>eQ`|7#sQzV!i0 zAnmi*jErv8-2(M0${oDl?U)I8Lt9vDruZ|O3Yy~BK%?bYd+$dW4rn_NAM4?Lx^h6` z-m6LpCFU_cR>MJ(GPk+&ztjT4(XMlpDd!~0rD3_!v(GRp_?%6q9zS{heNOY_LzIvH z6%fD>`$rnAuF{vz3AXFGBvJ)b_5lv5)D7Wmdw=gh&*7|)17oNunO&kqOTBLN79Vcz zyCc_gDuDW#kA)H_6JeqqEknp}%B&JJpVEc`0s}n4b801iTe0z#AB_BF_t!$_*6?le zaS7T?>odVFXbi*9;R{<%wJl;*qKy!bC~!iH{?%ur32Kq#TWm8hLK!hNx`$i#NU=r6 zFFNozr`Xof-6*lXmxfT9mz34tH&m&IQ*#kmV%{YGKUirNm2j$u2u$^sU{{E$WL3xG zDfW~*oY1`M&;F9lHtq9LO0r5V;2Y0FOzizsu6BFoSb~k;rol{-tXqU4Z<44I*h%#? zvj!LcsOk6fdkFq?%Nv}r@vCLy*hf=(^7_{v^z{o=6-NmX2LT=z;>+JNkc*T3dLH2g zPWFDA{4(S;OZ~N1gIOi3_w~!{Z^U!OaWIG8i>+kYq8i@3L>K+ky1sp$bEnuTnaiSAU{m=t(Fc&NXYVP|_(@O35k| zod`J%=a5j61aOpw$A7u4bxmTt7%wvShdgzxbiOorvgA#A{WYj*3X3AVes>+N9}4LTCaaNhCX&)z>OarQCL^#9X5 z-^8YX*qtm|w}N_fNK`HE>QzLFYGpOt1kQ-sbX5Md2rDqG(w|pod~4!Wt*?VBc~NOQ zJ`sK6-yvQYJngA81_2;5C%g`-S5MTmM1M=s_BA9=8|Uj$q?S-`P-$Bf4;5ys-wR51 znK#-UubR&QDISjbz!rLIN^K^C%7gwhTrx(Y^KLvO7NJW8jv6dp5h8?{I@p5?(#m?{ z1@fnV$7A1xxa)1e9i+O>X^Ln<|0AbOKe==!eXSI$BJbD|lg1_WG5UAd3X{ZUx-qe9 zV)qKz7ZV67?Ww|Xk^1}#^?MbN{}mDE$-dj(Sq6lW?YjUa>(F`3YP!-=f5fUzhOz_& z8unkb6TMP3PHw89U@0IQV+XU@){rCZj*y0lYH77mfazr)Ng2WpW=0*nBpAz|ZYFqHK72>2k^dNEka@V=-0^JiaYO&<2YB93ZQ))Tza*WutTWHBq)~`5Lq0j4o&=WVsKgw)6 zl34Xbag%KK_tfwb@pb`+}u!HCozEhg8Xwxu7>ecG`yNU8INr{iz9eJg@UY za$IQYnIp>O*Qqa7t2sri*E6;mT$sx0ZO6p*>wQWJrmGun3M}r`Ki`-mAWY)`)?xc> zTi8%7z@TkU1VP`FO&a%99O)GJx%^`9^ptgN-)+o>Iab1u?$q^(3kk!|T3WNxODi+; zh>!oT2`x@GT>x)!Si)9+)i~3k+Z_(8`xV@>i}7#u8n`9&`n&u^Wr3;gYs#2rR>B|Vi|7eL;2i0H`NUMSW zN(0)>?LZIMLO`E3?)C8NSO26Kj=UrM06DiI=R2j`Z4LeV%{DCNhuccs?F?ObB(VLd z`=YkFOP*8QvPyBhKTY%6G#dsl74rT&w&rjSi8)dKT~$@6&=+~2xOJ~^X}#OH@NSq? zkakq!6cG25Pg$}fTou<_S#9=-0v-sy$u)*Cr{O9s0C{v=X=dq4!3ckQfk9noNiKhB zQb+C?HUiIcf*+KZn0UA3*iL$d)yu4F=u6op78usoXX>sLB#G-|r}W0qwH+*-&|-&g z=@F*FNZLyrS>K+gaox zQMNwR*saLAjHdZ3LUTPh2bYchXn7CBD1B=s_iD0ln&HNL3Vx_0^s7|?Ld5tkz*5|{ z*jbyo7q#_g{zT&eK~&<%**=g=lC*>9$G9rt0g|{zB;WNfN37I;`FG=6_d=~!A3mwD z&&M9>=bds$_WE++4VUlUrj7na2%$xK{JHk2c(aKDwc>|+tC_OxihSE9WAk~%8GGm} zrU({ZnjZ`}fJ_LqEBdzKQ7#u6fHW-yi!24xx9vyEXa$rfYRAQPUq`rP-g`}6xA$MgK2 z<9Yt+ILN%`x~}(mo!5E3Ua#}Kh6%VnDXQtJSvOc19$_=I?1^Rrt8d&)p+DdE+0c^T z-^je#dPPGu_CO&0qUGCszvI_WSu(Bz1-Aut;$8x^ew7XsS^wqH3T#3 zNO~fctp|MM2k~22EvbDw3f@0aLR_&H1CH~=?z=(4*9N5Glf_QWS~^u5tN9jMZ&a7a zcRaHza#)g3>==y?CJ(*}+09popD23#NS-8Sv}34rq)xc^$%f?3${+3gOHKt7@7%%g zJ(S&$|IU9F0Z=ukKlCWJ`osZy`2m>gZFx#*@M53^W_%$Q5g-ueCe(A$DdlE~&23&> z0OXtLYAavJojg?qLtzzVXuaZg?Rw(jU{kx@AJ*My24S@q(31~8#BJrGpF|ROfT}qa zXNwq(|f1-7q;FaqZusrN%r5qg5 zsr>mfskQEY^Z6>KKSmS?@L8N!h6GX&XgUB@QZ%J|nVr7D!dkZ_25AwDLIa zmM3~fn*tKx`yYGr#){YwrLS8_yQD`StH}nI45e z4MQLI`w4&MAI0-PYZ8eeXb=KW9?zcT7L0ISUdYNG=;H|3rDnxlP}UE7c2cX;&P5m& z{XFr=iEl;o(2u0iQuQB_sQbbtF_EP z4L7s;kNXR%s|hx*Q+K}}KiD$noK(fVfH*fuEk2z@P_Uid`>ccY_1;^`bnGh4k`TPz znlydWqfT>^xHwUevH8(@eQIpB3JMgJnM}~H&+yTcS=g&&JKy#^`0hKr@=5CncX-2( z_G8u4>xo{Y9!Vd0=@Ktb?NtcW#k?z9=s~wXS*jnmm>}nM<&JGseb=L>{*{I{Ulw;q z(Hc8S5~?$IV+nilE5+Y{je2uK{YSdo{zedfA#+@?LjSitIZ%gBgKH$&NM|)AbCfyZ zQtoU;IM3P)wxX&-$#7^FcwKoHg@}q_!Vp4}~|> z=<@|hJl+-JLEECk_U=CCYFS6i?55aLc2=#I>IH2Ez(q`|t~iWUdT?Y7TZ3|8m$!*_ z8vCy$%odAmBb0aucJXb8B-Z%vRd#+K3Q4Nor}4jG*4t><(-+$J4-xcMUtK9%t(`b< zTqb}j)a`MU#hXP=>ZglEoH~*i%TmUJ(``ODAn$y6zjPn}JL{`n{B^zHAo32TM!XS( zX?#FlzI?XtV}R4AbF&ERt{n5H9OYr(%V=63Ftm|MczO^(Xdw?4FH+*b5U7Hha#V7fnCqL3dv zEA@0DWq^ySH9_IG+)&$XBL((=skxuGArcj9HcRH{{c9-EG?K^5qiANs4R7^ze#n0F zlthX>t2{}%nLT-8C3q!hUdB)KUANH@IA*ElDB_RWBAxp9m^57$Y z>$G$Q%{->KpX{hW+VLHag6!{-cCsRQ^%}f`8*7Ez2ZN!;N&an7D>XVsfkV4dye|_b z?`XDKz#0j z1&fJwt63-U1m_fmPi&8n)~bfJNh(&LcqB1!dvL?bkk+&Hz=jwbEVx_mb3B#?nKOTQ z>@+&42uBo}2%M6wXxOGXeP0sQpGo8x`Z&wD#E6$CX@P0^r>v2u zj);`ENGj!dVQK3}5MSMR+JTlbE>W|p@(X>n`B-#*QSMJoRZLHxg)El1L*zl{t5=0{ zy8jqW+G2^(+A0L-v;P>4R)tHeN5@VpFJeBu2atI`uipQ@S0Pmo!=TfgIjK6l*68uq zry~L)(`Vak{EKzFR=ezZAu_&ApQeLUn0WJxFVF}2&FoQbzd0xnt zRk_>n%U#vgXW2xhA8K+Vt{EL%@Q1AcOuz-qOL3>GqY-bjqU%fY(*XAQbV{R)_7Hc` z;x>DiU5cX7*}Ks+ult==%zIOr4#X*0>oT_cZ)A?j4oVLuW1)lq&p^(1T<}_T8oA2# zU{>aim^mKLSn<@W)#*v6>o0)@_~6(ydU#L%1lD5Q1$xEf&i%)o^nq5JdH?b(6_~2$ zmn+{JhtjN3t8F6nk{*)Q5?cmV61KY*Gm02Ei1Z2FkdjQxMM#;I61nJUBBO2wRG=Zr zyj|qG9-X8lqYz1+qT^a9-{IOP&YbW^x$?a(Fm5|_An#VqOcsrJOk9+c+>Iz*PI3Lz zkE-P8zq;zhlhr+%#Kw<`O(g;TUtx8DwaZa7$Bl6Lo$}RK(2v8h>-&2vK-m=ML?*GT z?f#s{4-9+KQ~t;l*MTo{HKmBy!;23G%8V-y5`TaIa~@}VuuYTM+TBkgeE>@;Zzjvt zyDpnTRyS1fT!zUrx16{Em-SLMscrwEW6=q<`DQ1i_q;3Q`-uJUUTsOfdUc{BMt!VL zsspUqV|dTVJ6fJp(m?gtpmjfh)w!TE@xed9ts7x`A(5cHKsb}0R}7ykz3>)0V8ss; ztbjc_{F)2KIABneMf#bU>#k&DL^r=00i-Cjp_I{nDbCc{t%-#n70or6@z(VbNZYnk zZK}`xfd`k`dls*PHhL8HR(jMy)>KRk+#q(9Ewqa{bcYb6u;oN0`BA>Nqhz;k`gj`G zETEUHbQkOaGw)2TD-Z+Gs_Y-%#A6aA(yBi4u#nnMh)5-lZ9y(7juMoxkvKJZ(A3@D zFNR**xR@Cc^)xBx%!WHj5+!${?=n^b95#nt*V9RCj}A~B+w`cVb}4nQlimJQ{SPh3 zk2$!*u2@N1w(@eKP|#uqF>PXFtL$?crM;}dK+^YGKn8Bv;BKegC%XXvTKvX)P>hwj zhkqkQyc~KEM+v|p&cDA@R%1!heD(qK0!Z|7hWIG@5%6YqbAsqKb4hk^8WTV>N`-ohtb z1Uroc_tW{h5@Nd3D3Z+KFgx}KE$w*OCK9-$elzvXB)z|DAN>9L2U(Js_Shvjn(*AU zt7yYv9?8-EqbE4em;2U6(6~?slQMYx!9ohjs^GGXJPeDD0FK!+h6h+j;N&kzgZ_nGIfO=-01*ZoQ3Na#(IvyE9BuZ_t@VGz42QNL-!W z_Q44Fcj%}|7x7V+CkgilzBOxawcJ|`Rkd8Cju30$u zy{|e})YScX)v{IPi5K!s#R;f#=ln|jhxKWlyFJVmr0W~%`zgTK{wGk)oDBAW;^l0C zjvPsYMUEXKm1V=#)g<-@c0AWgJYGvkC|(~XxDJv6%6QA}O#wj8cbZpUp}u1+&s=-F zU%FK7O6_&Y8lT)d{$n!8`AMgg{dGM^u>r-5sJddX<;bIO5I(6cynEm$(Ohf0OgR8qLIn%m4t(H;NC$tn#$H1$-&Bhs`QYd|gFU)E`UX1Rx9hu3EEJ@-lxONo+O{hqq(TPGk(;^8pPsD;q zwi;(^F&s)CLp^LuR>;UVe(06W&CFJGYRV~Sn@Ns6cSK5FJ7qdtle;HE zjW^Q!R=*`g-Kr=IIYVo^>Swbt;&F0E2sRRsF}_vLa7v6c5yN5r4keBZUXl@3)`m*_ ztj@P7f|NT|uazn7lwI85V4G-e|@Ir(@cw z#)(5mo=+E&K*Kc{-x8j;U#|kD18&InRJO=)<5Si) z(4rQ&*{p60e+R0H#bI&Zz51XpiR?l<>mZl|G5jgw1!zO@W`opLg5gGM1w^NKf~@6r zqc5aCj}wdFfgdA&Uq4#r;?_U{;fg7%!0wj+08SY1di7WTgo1Q0<*z(O16X;&=WkU@ z!X4VnNqDqS>fXj#?2>c7kVc(>A>}>-mC|$Enu@ttez|a>;RzAj-F-N;jZB5Jy;p z57(QPAbz?IDsq=LWKD9NdQwZmn`~^r9n;;OpURlH#C!=coGgwOT6$f4{A$(HwsZI! zP;opHp*|^l>N0XFXz5n8O^*h3eZlt!*ajM68Y^WhXBKB@u!iGcOv3HfzxpdFZ>^cT zmoyQoKdxgf#+~ z-O5AD6*e0i?YZnvG35+0$aKKkW19TfA;F-)Otnxgr%PT3>)#7bsF8t9|B+Is47E6Q z)k%kk|HQVTdzD8?J0!944`t3m-cU`ljX3Kba5%EnHI-JC1rQTB^d9(#=?}>3on8 z?h=C855T{kl9$i zvAUvSz%j4j96m1z*HyGghU#c3LVf zsnvGz2^gQ!7G7ZjrXTjqUE3d!FCCe?4GBPU_xnm6TX)rrj(u}6Z+&&WhF9_iDbNH` zVIybc+9XTD^T>WY*(vAru1>$fuAQOjWz_>)>(<8Y-#Ozyl-hwte@b#ASl?@4O%7|z zGh$bSJjRF`je$ktjSq$cZ>^}M#tcp);$I5N^+`8n;FzSoA0zq9al*0TCm8oRjMRxFO2)FuhfKb^B6LB-O$-;ntJP{rc<>y79*&!}r?fBVx3h2oFqE}- ztbPN1vTr4+qp_)@xlaGXpf2UYFSGd7n)%$P=My++m7AtMe!W9{(oLSViR+rYA4n7` zDcn*lX4hGC7#F~V|@QNe+4}B-i6=8kw1YLuz7GhGay5a%fN$^P|hp%pM@zn*|s8ks-9#P_AJH@HrIi{!NrUMF6uwas9yHHrqv!oR=B{m|^C z)Nwg!6Ep5E&Qe64|3BGUC$= zMbazt?Lf_VwboeFEbO(yDV~z2Wgk0&nu*18csFcuBu-}PED)S>o%s1ue2=^)TIC73 z-hg#zZyHkSK7d?_4!Opp1o@wP_YhatR(QZem8RCN#nxeR?mnp{}@=(=P z*U}2WHgHOxQh=I7S|4S{{ErjTy1VB>2U2F0Ry>F2EOVQ`L=)X4@ypNATgT}EumJk! z7FT{aw;v}7B5F4}d#uNW(}VaqNw?2v&k$QJxjurb6c1fZ!f=)FHoN-N>8jtQn(Nhdd9#C9P{GGh20EtAVC%&V z=X)C}!qg18e0>{+5y@=vMuMeBtLeQ_N$TSm%1;N=+B)p#ztSh9%c);s)Qp zV>YUaG!eU9-ovj2U%&mQ^&IU4OpAy@6;g33qS|$_KonOb8oe;P{?pMb9)ie{xXNWo z(xW}X5!}c-GHOTGt_k)jJ+i8Mb%(0aUrg3N($w+&{vY92b3{x7pC~9?yV0+22ATr- z_4YZ`$ruG7`9FE8_+IjR;9-qha;9l2ORb!xvJ~|QdMJb0hvP_&ZC@&z&OaS=6m5$+vt@&pit|n8dadj z3*1en82ZQP^2*VX2-4nR2q;agjHwa-WiY%f0D%hEKSLVQaKm7hveMC((a_0fw3=gC zXR89LF~NV>abHZzSBV|~H?CDS3|TDJ03;t?L`o<61Ltoq@3pX1SE-)V5r!-r-id2z zxK^<0bvl10$m@nuk~0QCYT$qFjNvN=FH%^7q*dExb?kC_XjwT8o6rArZJR>3bT*vUcD&EbGm>>tvGhN{;QgHXO@gUxh zu#nr6^p1L4%_H&kn@y6nD@w(2b15NX&fm&`VJJ)qIF~MwYqCM&u%G7rEb$1G7nF#v z%Z*$@Yk~6*=6>svb6Zfb=(eKP{;i$BHkq%JaE8|r2`SrYmp-Q$XBTCop;iQy6?R{p$cJnA{(?rn!~Ie$O< z*6nC?OyOnR2nHnQ3@>$eJVDV@rMij3FLbdLGPf1=uVKYU;#v|33Z*y!+96Ldtsz9` zIU>yWeQN)iv~p@d!>})0j~2|z<-{zn?&?)nKe-)E8rdxkIZ_sDww;VkVIb!ppwXVs z%=t9wU`LaZ2jDqcIga3Y!vZzi2*QfnaX0UgA|2|AZ^#psjM=65628pXo34&j#>-l8 zTU)t_mFshf=4ri6h0K;xL|!^I}=ojtz3bM!rLCa8VZ`DFQQkRj=+Oyb}2# zz_x-gv^u__Hn9FasE1;)oe|5KdfyhI{Db=zHMUY{^9~xB!RE23GIN%6yI&+Gn||0W zy*LPWrg>xMj};H4<5Q3lxR3>laz^u}=&^F^74KHzr@O zh7wbs5kCM~edVC)b7+k7!=gG?l?$h;vnOzPk-^Oz2=)FtTgKDyrTYdg8R9+zQJRZ? z3f-}C>m;@8xOB%*a&^SfY+E^GUwsU*s6_Z+Wu94DI=sSw#W{dwmB76sBGft_1sr1y z#ul!P2jPNPT)L?xI6q;sTCjJYfWM=$^0@HS#piO!ax|RY_A{xwo*UasN8Jb zS1(Z!mv|#tYNWw!RI_zR&2EB#TVKC;K^cFk`+uf z_JBslyn<2dd(56UC(z)i!1diy2-|aq7jA-b30C%?huRjXa zZ=spqrw0xF)Kb=k2XazREn8V9uDiIVj+a^RyG35i6p45Jf;`!q+%+5s@UCX|)fhEU zyL;L2h-@kVI81v)3tsk`9L2+!WAaQ5!1S#5WZ}BU(uflU6h|U2~dNZfQ;~R;Id4`$Sm5WD`6q8veCB-S1dc^nC8 zXV)*pQdhD0;X1pSf0pu+zH>ik{FwWjkDG6Y^UEj&NpTmfKParSu@ttTlypTOLz2|AM^c!E%#*;c28>)V znggt@^_HlWJ3)%FN2F(@`}J95dEzF2B_pEaQR(&fpPR9LXVTP}v^n`l%Q%>S$Ei`o z%&$&XH?x-OBQ;)KWAoaH{q$8G;iU55rn$b&nBC`kt>U`xGRGSpcLkNbM2?Q{QR+dC z&(ZOA^u%H9=MRxn;bF8%h1=}h@oi1SCSW6=kl$6Jzx5)VfuDU ze|d{ZNU$nhkw{E8Ih6k0AK3Ca<32e!{7ETB%NaYvbmt!$1IL|!(C{(%0(s58EC87} ztLipdw6!z*N{_YXknxi#vrcX@u1V>awRsxre$#??J$)E|!}jB*@S*g_ zRdpDBHI14+aHy5hkFuSJ_@hg!FH*=;_?~;)Kfc7rV^OdZV>U;lXYqf%1XauMx^tX2x>^vMWt0&mA74#ca{kpF{m`HUNu~e%&sP| z5}~oSt5nMm3-g)I{j8*^DklFaZRSaJ)RP*Ovd+6_ z`_Yyx-0FCDQEp2DE+*Ez!WP;cbA%!#Y|7U-l{6HWJ~T4*I*?O!>r~Itrutv0>z9n! zuQ5GoV*?3=%XcwNiiYf)j03|W4_+rF)XM}ng(wI8f$2fdHmX~=KB${x>)9v6J{1rA z;n84E=W zmwMiDp=l&LxM)}%+az=QETLv~_w;K0(=o$JcET3R(-!5>>>eI|t$B?8hq}xWJ-An? zlcXF{fkUuF_<}JNw)QOBH+mM8+xU22wtA%|W1)H?fIMwebZNGu0W>75L)~(T9 z8D!sqc*D)3@f^Wtj5j4AC5vV*@9SERpW%COR?>WBXqoxR6Scuxd6{aN0lc&c6GksG zexK<g6B_x9a&G-wyAylzi}oy69J*--IODlUo@V`DUf_9Z(Eq>vobJ;w=Y}#i%53 zATfDgEP}Rin*jkXKaPNkq(Wds0E9~oG>^rkg4HRlZ@KJuSN$baCXe@S;oT?pf{T7I zY7%xQHlM9}MA}dIZ?0fweQGBsbc4L!&|j}u2JgG7`NbZ(m+?%g7lMA$`Z7}9FRN{1 zM2k%@seFy#Y5yHeA+@@`1ZZJ-g$zZe5xdg?pg!+kB!}WvhzP&5>85fQ$>H&*ff1G~ z@J@{cCqtv;jo7kt%kk|Q4wKWJ8KuJs>On7@hfLmxJgZSp?GGN@jZxKpmhlq*E#~>M z2h-$K#|wr{lP%4yUNs%Eacxfx(#1{&>e59 z9OBXl#=eyC2|+sV)?UQ$*2$5q!xqmrVtp4^Fg6T$bpettjIY1->jgn+qr6GusvEk& zUzZQi8}(nlozbW_;f!i;ZvxLIt@k%0h_)d|3-g0{8Ak6=OUGanEQ- z6G;vLKuc&{l}*VK%1n;EiDW^Mir7Q^h3LEx8KU0QV7IyAr@OeqGaiF$DBs+5-ruAs zy{3n6d2joxZ$d5FRpP^@e@AZaw`YWX{!8EZ(c+1C)u{45t7)3d-PkMyjs-bAzYc!_Tr`+C8K#pl}L`tJ4ze8m6NH4Cf$h;$+A#4X~-BGEpPW^T>guQeQ} zL`_-VxT#(q5yABP4ex1D6J=;S(AB-!g^7>kiBQ+r%B43e*B)>lS@9h!9;@eNS@c_^ zD?XSY?zvw+kA40zm+dj-vDst(wHbr0Kc@qF{j|skV zC7!&&S;Sx`x%qA>s@i_PD-nZu3?7e}LpcJF6)w8{#Sno1fGtJsR9Eejz~kJCcOn9U z+iz7cFW5)hdE41osO#75w2T{bRfRM)HZY7Z?MH;KAY-<+j9U8xw*3`0tArkSjBI%T zZ)((8zjrR~S@v&$UsRAxwur)Jv#83wlg0rfoF&tLwc|b4!w^W=!p#@%L(2EoV|~FM zRZ)SR&>#`y*w94tsbE(Em!T#@G(y#vK6C7x$RL(E#TPQYwol zwJdB9*LLP;CIlryej{`0YQ_+FTkSg26uBXDQ}tZEv&8sB?R`2VBxsRtyB|jl;;jC* zCWIJs9@C)*Xhf^|hq3-17Ml`S&Z%bIFmhxp>7t%EYlN>*kTaZYOUU+I;>f^=y5>}L z7gfn$ZBd;X!ZR3vRl@KCd7^ zMj%C6A;FKk=2VyO@7INJ1E<^p1%c%ljJ3@%28ZH-d=@V(%*;JRyASbr%UPwHX|>56 z475>*og4h(kru}s9ukS*T{%Jb7yH2-u>}S$SD`#6Acnyt`o!`Od0N#io^28&@PqqU zU%-u0zMZQe{BGqRi#m&-1mZu*B@p)ODry^F>UbsRCqK9hw`hn9Ia>0<5-ZsitB-|%ntbWn4ras0%8Ju2+Xx!(cgpSj1S z*HB_00Mr33z`YNM&40k|&w$Ds75aO`dg$+@^B>CmH}so&EUWNdAfOHWdR~io68?#4 zCTp$K!dwD6Au}~th5+P{_S8yKCyXoJdI@$MuIcN)P#Lde^n7h$m*CSnSKXS1Cu024cy9QQaP)zGn4!G zEmBOMPcs-KUOTd|B~sE^KhpZvbTN>3^1S0tAnQ`YMU(#Ja_g#VzSk)a%~<5+RVk_H zdp#ECPADjzxps38Cy*1|B@#Lg|VgP}B^c5gr z6<8CPx<{eT(WFks(qfyz9k0$xJjXg&1AHZg#}2bGZ8v3C*M*#(={V<3F|$&_wWaGJ;a?r}|e_ZrIY9w4q=|^HbviS7OldZ9tCKQd*6v zaTQf^a#Oe8mFJa&U9`PTd);}}4pF!H*hlI&yJLKs@ieUORSUi@Re*N!&X(7t=?RMC zbz9@q{@mgt2o4i=yYZqbSfQLdy7Gl$oV&GS+XCDhY9sD6(;^3D?Ey>a%LQ+pML1!p zTEn|XMp`#%_Uz3u1zc~J7%(>?p7S0TTWC2DG zGGFVO8x+MeKcz8KkU(=UL}xcpwK41v9N7Q<+lw{MC^y?_n%BBB!|9jK&y5lG;bnA= zpiaLr!Pp>QTs`tOMM|zCSVuA@HS+#u&6t~C88ebTIoNDZyAE`tDjHH?Rff9RtgYLn z50xDMiarQ=u+}~pm6pq$aZmMjvJL+XAj={ToRbyB;QTC`;}D z1P*r*_u#aj0!xjQ9QTV&K3EARhZ!K^FvvxCK-hU?^?4O|Nk!s#9#Wx7&t(@yrVd*0J;(Re;P-P42r2FE={KfMXFhqlgDs1|R1&n7F z(<`axwtu#&n$TKAv*3qfcpXruSg^+q6P2(C(4W$0f_sfRy-i>?jFWr5%^QzEa85;% zWvhe$Gb-{sI2aNg8_HG72XM$C=c{%T3H3mW{S&Ppf#NU9D?HYIb$vBM3!pcS`eU(r zkbshM%uq&f@N8lENxpomeLc9 z=aSGEP;}zTbl}P@Y-MINkFlX2IDVaexNr3JEkH!FZ zL7enL3ZyrEo|dy)1O>mS%uRfB_&GqhCFWMqivBzYa2B@#0apK&6wo^%K^a*Sfa9l3 zBPP^1y4+AfKhG8J<8&SVAF!-zHczB8h4i04(8aI^;L6A#fM#3z1@z`yt>bwpOkYw@ zp)W34;u+7B_a#?}>(v3V4}%5_OXo=-g#}z&f&nQLO<>gNGB)aP!fW+(w(j@CkgEF; zO0PZ~gHR6R9-P-vz726}!0Z8<|LBjJQ@q)qbq`GPBeNywU(noX=_LLFsA`3=42PpalkzrRebD3VK$Zi`xiq?Q!IQ z#X5VeBRvpU4Sa^`3uyfA)U9vK(WbM^s98d8qWwlqY$0F)cpHaNSA2S<;UhnjM4?5q z90Uw-O%_bkEoDS8O;xF*QtLcal`>v*6>rd}9ikwvInKlRN+XMKdTuHD31y-PA6&;7 zPiQ^c5xEwq&Ig$?ukGQ-OXA&o0|00-Iu1r9(C)vIUZ&y5HOX?e5_pfwDRM9_j86%& z$Z#u%Zt4NtJSh=XNEFjR(GGAs0KMzDi%+1*a|0Jh>17IhrS^d8h!0U_t+KU_M6=HT@&s!t?XaDSh0X%AQ@mX?-A0ZqPbzKLm8L&1XizBcW>3!| zL8#=#D#eW@06-cEbh;U+y2-3}T8fXFz`=~xtDG8qqIk?60;AkG4$$RbWy0*+>CM|qA#eZ&-O7c=rd$z6`W^F`)z1VriHTUazD-IGz6y*+P{Ee<5 zq;XeNuX0znCo6*(I6PWeCJFJ#s1^NAt@b5yl@C%K%I~cH$RjDqkAv(>YB57^&|>F8 zZx9W9#&bXOXW)orBv8Cn9xxS-xH}~Ab1iy0ITKT0otJ`~&J%;~*(Ymix&h_C#8l*2 zqU$M?d|?VkUEu9Ag8F5;!)&mkR(F!VpYSbjx2xhk0ON)j>pBC+TgPe}%B_IVW+tQI>Ilvz&f7!fgt zL~ov;z8%Ymj5GHk0O*sY15en}Gr|KC={P+cNKA-bqz(<>lB4hvO=Zvs;MzW5hH_`W z(Wo~!PO6>fc`Ek8!AKN_EUMoMv?z*GCX=VVbUhC#Aj z(GS(For@|hoG~zj{4dE6P(TIx>R&$S#*u;r?q~0#f9;kf@gs>n9Tc$3MbGlKv$Zf{ zwS62Gr(IllPunVuRF%9UZpK)lrq2tA3i@=00Ov8+0;|lKI*yV*?d=kw3FAp!IA2g+ zKJYJf>S5rH#v-6Sn?0kgn~g~*_^(3~&o{k5{g}L(j~E3aE({SfOGp*iy-qsMZ)f;i zEvG(=s6=>Wo$JKyG(3Jn<pMt*JT#MhRcq%(Ty88*8>^UxMauVcSqd`xh}b8U|A5o!AjT>w_o znnk%pvF6_+-%e4&6t2sj)p>&Q9DzPk=8b>B5*owq$=*uo;NCLrMbU^ zU`&8=_&*uafs}dKsx%}xVYg`ZyT}3IGxS@k<$egbEke(dn<`#Yiz9BRf6-Xv-h6q$ zyr>@jUrE)0E+z1D*xA09$yOgzZ^`GSmJ<~fV2q)$R&@kUii;lpG1#_QP#B8xwJn$0 zJa~8k@mY=Z%hP_jBFE(mHeG`>w;WXD!^Y*z#lN$*&Zli@1m>aHAT@ zg+h~NxLZN{e%;}snvZmkWo*9)^V8^qMN0>q<*$`@E%Lrt$KG>&1mb#Lv-6#XbeUlk zGLDOSk=ci+@DgjH!E&;cu~v0yLJ^cd9_vdw?-*OD$h1lMWEy}=rR)}d4<5v z)u>_kCrNmll+KEF`vSmP;d&wSHXEGF&Vd+!2ul3SRAot z3@z~K_Ccy{!~E}Yo!7l{vRK=M^6s`Zs$ll+xg|I6&PUc8$Cd9jz!0s>Ct7u^rM8&p zb`;>mm{fzS*Y-@-LlQ7y@oj2M@T9uAf~Pnmao<7paxJrii-~+BXfmWC%M##juCxw- z_Zb{VJcBaCia0sJ{Eu3epZcIOGCY!uvtW6PkguBD9x?7JOZ`N)`G8YJ85@3a^?^}z zc!+SW*_9agj#PW)TKCq+KBo_bVmvAN1-J+yDd2$oX&h1q?VNt9%-+6ZJopV@&0_y7 z4q&f8fAz;dCItM~!CMLYKUT2){Me=6iP2wQcIfYA{JWvevqN0e@fN#C9#YvXYy;e5 z>Yr7+qOY@Lt4d^S{V##sSnXwdVudgU8~NN!+5%9e5=3IqRne1!ZvmhHQ+3duAo(SD z^c+$3w^{&T=v!_Y-ZP>HB8kBm0m{dbeDFTTGsdm_^x&fH+2~CaLY<@@`zw5eevplNM8|P1>lh@JG6MAc+Z$Cy2f>MJ3-^Q|o-c#-U!0ujJb+#-RLih@9(AYUAZV{4|;QyFmj6* zaxI=ll(Ro1d-d-ZUFL;xT%QpX(GAqv0mr8ARiE zbX}Cmd)80v^60Wjn#}}y)#5`kUXqnQ`JLbTsr~won)5nrO!+wKwo8FZV=6)IBL}CY zs0{QeYG#HFkQaS!5eK5A{Fm60a2fhJN{RIHFKY2`E2)`dkp*WJnrig3Sw~#t?LbZs z27U+b`o^uDiKm@Hvr8Sb_dGNEiOHOK@hZ+!p0^|Pe}BRk&MPGd*kqtZv4zhM@$hDQ z=$*Fq!zB&GG5|q=8e(isqTRX4e!Xh{I@eq%rqnC}JgU?2j zL~((rNMuEady{EJNH5}RfL+~xA!eq=z=ck;3VFq6eYeK^t5mpKR*7FP|Ldsxe}dBe zwn@hB%E=pgK#I=bAOBJXjHP4dUZ=JWnq|hs1z=QZ)d#mF{GZ=NwY9z>-DA z{vxCPE7kAIzQV+UB!{zBdW6rVSc&Q-C%6RmUw?itN-6681gs}~>-<@pm~7hMKseO`7=x~H#BWf= z#V~Ch3NH63F8L+q!XsP;p!jwN6yNM;n7e$PS(b|st)%kHz?d9cnW?>!Vllwa2jyBB z|2k$@JDHQR2=4%?E>tD9C6=~$O+YqvC%Tif_uTx2Z)@RY*KCGzi|0%#ime)h+h33% zjd)WzcR(BmIH;U_&A%O6HqKqTtkXE-W*<1Y0}xCCp%Uu@;>V-+8aM^3pn7UYWJe#L z4e{gJL3F7rdxcp8smDIf_mQ9c+eGqtttr}9zANmOXMty`9@NnPqs%mE{_J81hEudi zn!t74whA&Jk^~SEJ0ZItwd?yrvgd2#U1Zq}D&>1!%aohIkpSoptp`G*XrgjWNN?c5 z7?uASu#}NRltY$rT>Gs^nw)+ftsdFaukv}7Fg1Ny9Msa z_W{>0Bh=v-Ptor_cl5?hOTx;@kh={3=3%rCMD+!yez~dDCRgazc<~wme1O4aq0Eh-(Vn&g9f>#$S zL=-Ymtw2`Xon4*1TSqIEI+&r^KRd~M^z^;s(W$RLozCL9@)r!sG|dU$jq`!PY;a`TjR&`Y_9guD5MY_kKq4+DnU$?05zlBm@F4H9 zGNKZRxP@;@%V=5Mv}|i{S>3rUYZO}s3#ZW*`K%cnt2F<;i|+I0+_-H2)JL_0HN2Xj z@Cb+Z|HCqTw(4iqE;YHwD9x%IM+y)xaZueO)DPbB>%{DeX;_5V#1Dpf{xsTu))+9_ zi_yvHGV&KK(1Q)KtEZ8=B%rN>7O%4#0X*UQA;1y9ML-pjMGck-=ElG@lmBzg1Yrk&ejp*S52c1adnB+(~tbwbY))4>*HwKgxr5zJ?b$xT~2)@2EBR%PI zRFnbsPuJ#U{q3uzr?<>ukoC(f@q-a$C5$x^!1}`0N{y2l6lP~M?d6fdbxUMNvMmg9 zvaM)sB!h5=_aLWBBJ5;OA?eTa1y~EqugP-ad+A0tieJ+)v8 z9M)Ta+&(Or03rmh+G`cy`92m6sU(5!jho`J7c&mj|8Rs64kw*ynW<%A(+g_1Z*2*@ z3{-Gv!3MMGulte#JV~Z<@Ch#ZN(|wF4nSfodmB_{!@~5>SjSJIZjAi&ioj0L3k`KK zNUfT#d`whE@Jwhgze>}!Q~EX z>sf$Cj5R6|0n~ojZ-BQPPEfAH@Wz+*#huy~(79H^OJ&KK33|FUAZRfJA}+qjJQ(s9AD*w9jJfM>J)$wJ{gsvjpn3WZl*(T6HG z0|F(77PsP$fNe)xa{OQ1y?0oX+qW)?%ca<{QU#WxAkst(y(|l$6cJDe9SMjKsz?jX zjtZfO6s1H(dO{DO1yCUoA|NevPyz%95Ge^I1nvyD_TG2zbDrm%v(NATan~O{StQ^5 zW*KvgcfNC!rV%WJSN0;*?r4D>e;#)K%lhvvak|p^oT#88;Jf^d6n+;y0WM@t1g@M6 z=)Y+JZZrFmrXC9Gc7Mrut>)nN26FIaVqyBv3(|}y?UhKs2uMI66kQbd*7L0^0=Yxsf#8B5l&@b%=;)wQ1hWX73<$u%R~uGT ziC({Lby58_0e|{?r;bA(&PWygfHcyUK_CY%3JW+qR#ZR5*k+D$I-D%6rs@d4{D`~(JLg$0)(cfTuK%B%zH_AkRVX~MYym>*>|vF&3=&6FdVPE-Q_&(UY15Q0liT_V$q{n8I=L< zKb?Lefg>u2tnhoTbmw`qb63#ZdF%;`{yn>Cr8A7yyymIAzY^o4jlq?FT=#*CHPe2j z(eZ@%bEph{;H4W_6^XH$9|?Syf7jh}^U@xuyw{&a_eS)ZGGDD zy0(V8)cC@DHy}}F&u6lLBUd2fWw#t$T0hp^!Q#Gpj5%!#?>>r^u~5;+`u4TZ=wo?< zcMeTqwYnmYIKUkk+7#`wtkJHMqIxed+pY3wX&`!O>EHFp^h4urpnAHEirgVzK+=~O z{Ku;7qMh09!Z62S$6j*jW0RrO8TpJiCBrQNSEj zT5)G#MGu1awoPoP1w{V{L*LQMPVsKJo#ri&I5(qUk8W=DzFp-v>?ZWY{f0PCwVwe9cl~e`1Pqlw?+xfN`U@6r!<)v9699G~|M=&JT|Z2` zIdvn3wp_e*|1nY=XmaT)_a<-y|NM{s7yPZ0gS0rX3jAZT{T~tqJh=ZKcmuwIaBLpP z0)R@uVglqjQMN#(Ias{L;O-9h@ZYZfR_2PC$#%bWSvQ)4_&8@Sa8!Jq8QHs+;xvV> zP9kVrNCf5aie}Dnza$(Tod@UKN{__bT1XHhMGBWkT2%`k+v)}KPb5SVRP+R2+lt(6 z(QCAd9s`jby@;4DT_5Nj5UC9Ofsy^eZi8ZSJk@ibLyP=ug?~Q^h5{ZnBHQ=+Hjt!j zZ9p8*;XKk*fr>P&_{q%4CzL?oZF|+HveWn7%*kS4bDX=L{FQZbbMzk%frH7@qMdq% zH+yz+w%TKKWsy^nCAicKppsnE}Y`esp^ z(;t%txOdQh?aJAPzwf^LegO8@wCPQY(XseK+2g|`sWS3b7d)#^!kz*jH{U_#t%k2n zPkZ{#vo|Mw*JR6gXk2^1_*Yqc@KyfkuBS&a+q(9h^)+QJSU`#YcsU&F2~;7 z*C^Y^@rB&6QZ2YCI+qZK!B)FK<`3N2NN`v=m!=do(%^6uqn!$r$zu>c{jy;d5%M>` zTszUEOs6}-gGh4f`VF6jI5Yq7_8vpiw4!!R?M*8!5{PvwgBPg?i`{%q$ZfVbxG?gv z8C;s$8oIg6IsC=TA-BQN4+rw&y6)6D3vNO_||-$__!0GsIA{Wi4pui zdf$R31UEnxi9R`d! zp#E3ON>xRZ3O@juH97%ejE$$2E%^vHvFEhfZf8aD1&$Q!)p_+CGy1yborNv!`@pWQ z#zp7yEAlamDq_wh-r^7`fKUd>V@-Am(nc=q*9V7HP;0f4TRZX%MiMrCAv{BZ!*5*d zk$wD@azC;T`sJpWhypnanM@z|4g1XA)35y%_=xI2`nUE-D$q-ke`NXu%n zTzZ#%;LX>1B&Y^^1YBL;|L*ZxMxTxOF z;@X%&=TU5#)WdBg4w79#uc9sGoHOJb2zftuuXV@;eCWDr1(PvSj}6IDl09TJwII6# zSI;!3C}x4%x1x~GDTgCAr8FiVnCzpMknY3vSDUI2VF>)WW8@tSZ0v=o!q#M&(%1TZGVuoVkYgU3D{{{yR01#Wbo-Oq(Y$% zb#T7w*mvSFvv{X%L)@@!D7AInk{&Nu6>2IvK}( z1$Zm%OG=c3_mzr})Fp>1F(tWAK^C{7j#o+2S4SEVZiGIQ`y17j)isKuWZps9P063M z28W0fmni$t0tXf>2&$gwnD5`trfn{1a^4gzu55^>~z;36;>jIs$ExE(DU?>7<^ICmflWi$l`;C9#m5Y%8EX2ZO zt^Qd2OhY7uDPbfc$OFf0@w)#(I&PG>AkR3X`|T2JnXE1+17CspeNc3JGn^FtPhwhtiUw;~@^i8>p~a$i@-O zh`LD3_DY$rOi38}%gi?ZF|PryeGu~ASJd|tOL=PB`3u!KjPSsRl|or^YhEIK~MU?XKN@Q>8Y>H z3ta2a`msT3wQ6&B@zy0udj)t*_M-D+-*JHwqTkMx*Hlgo9;CTvTLYin!2H*j-a~=Z z3d*96uy3caO!Sssyw44UAn~AWUvux~?F`4lgUS3C>CE5F{tLD8f9DO0ci+Cv#G$bg zQd@Qt1Tq1`xp+4hLjD^68^t^c0JD7Q+qDaLmv_=ay|}|((1g3IvtsArQ-%pYWs>v! zq_=F$RTzM4dyMO${yX0P#Lg7!RJd_yQqGsa(beR6nj5<4TkdwtBOtxU)}IeLaP;I2 zn1-4>8G7B*RnH0O7a+M@(sB4S1n_u$mOPE64_$08rjFk^h434FeqYi@r}Sp&=?k@I zn?VMF=UtM49M+W6m@#K(1NnrhtL?t-Io0p_Q3Hlt?X9AmF8&K?D0&V86u)VQ;%1gx z3qs#vg*s@TwOK0XX#G!(2w*tDj$)*2bKj_NjWeYI@$J(r&Ab zgTO&QPF7oPKkk`Y^&5fTvT@(}zYR?Om$ra#%jR__uLN4MJuAy(yr^ql{X)Bs9%l&c z@t|iS*M@iR{g@Lr-yRffum4fT@Jpti-6$2fGAye9;^#A%=x?72w*UMRgl}p*eIj3= zQ$)FI!*AO4dF@Jgs;cei3)0zbUv8VLpI9KKlG|M)m<#hmnz;@jTAMh2>9e(&%;tb| z0ElT9bNLg7BpwV3w$VNWy900HS8KjK+2{anRSuSs-i<2@i=88%=Y-}#54BJnHU^5 zew14D4C1b5aCYACOPNRa+j~`m53{Sh>>b?X(>&c~C}sU!AT9^@(5>UC*eiBJjoJK! zl7k4rrFNqSmGkBMtfhV3Jm=z8Gfy**OtNq>D4KH(_+w+=-n6@rb~2Q7#K_TZ3aMWo zw+eh~WQy2b<;|0oe5P)wb6NExn?m+cowEhb)t`Id%ItieEBUPLrq~{zUcM5HOeR0} zZHIT~6<491oiyj>Ol_pQTbMd*M!-E%xXc%wR8$ttZEw}X18J?~$?kA>ZPC>AOJ)Xg z1q3sQ+PE#m%*i^l$Cv=kb9rL%bk(*8hb$^%a~Tv1-hw3cDcvc) z48!zy&b*c<2f{2aP@BcWMP+;X3hjEz2p|h?jhziLXV$0909*tZUX8lC7W3-?0qU{yMl^}B3==Pv+RJ2n80JJ^D_Vr$mzdCm47J4gY3KOqm7p-w=p0( z>uF#?+U8!p3H&-FuLuD3YS6D!+Y{;g+&ph_TmU|8G`;;P|Nk}^a^UE)*AQ|Moj1?I zjB>ZxM_K$^Cc6a-JkdA+DN&w$+m`qe_)bB$F?WQ>7eh!x3peVauwgvUk@;*~&Q7Oq z$*-J7iU|u-#ZzjJi-CVu@q7_gj8=4#Z@gscBDp6pWK-c^RpF>&0L&oBb6MvS#6(2f zEc4i_2l^2exVQT6G8Mml3b2gB5D@PKh%NI8^5i-X|10OCn#22dR)&0yO7Cw^5d;Y> z5Eo7C7Fk`X+x9`zE;-1{d9(#X`DoNGA~`Q(h@d)RV(D?T!y%P0!f1g|y^#1k3buuB>;R;Dq<5 z>iJ(F_efYrc{pdw2U#+qd7l>^DF%Ir@L~Ncq2{xwovx|KXwapEvy7>@D+O%Qs!S<amsNtmb7Y0Dct!M1Gd3d^1$Y&FvX}rW#CnHJq~bD$F>3> zPw^eU&nal*GyW|$D-EG%iRb5Z|LmiP<&nv=30#BW)ClIQ^G91}rB*3v5@?-D*_x5Nq3 zP_`?$Ti1|SB|l8%#D@sS@9!>R6s%L5F)MrpNsoX0kD4TTgIZHEyP;aTgt$?k!x z#>LULb}y$6G;Qa+;*1GUZ5qN`L%8*tX`=e2k6jX)5EMnHRg8Gy; zy51|MHaeGkj@e`064P(1A!akA8uVaber@s|rGxF%8M%JXj@uLUVJe4T6`pzvTu$S+ z{nMF?M`~dLL+EcJ0U$|}>Wu2I^!er^!@bx0Qu<8?wY39b8*C4EJhpi*ER}z%V>HWr-S9(gLTcPtQF^Vk#NfKSiu>ni)duJ= zv+r+}@z}7~^vv~=<9_s@u?M^9v33KiOU14GH`;#!*R!ZsJE(uIA>o&S_VB=)-9ft;$Rvrz>!q#>v@e5|`QJSYW~7KV zxX0FObwBU5vBR&{!fWFR)qRLPwLz>7)cQ?OS?Ht$D!4f1e*3kY3e6u6wmXv179J>s zYcgeBPv^RpjbF`_Feb4|)bC4Hp8zPgqw%E3(^KROv30q-(|TimJ?zzXI+~xh-7~ay zKq=@-xCiP(@u+Y#N$*p|!>DUuS~=ixEae(WkoYTkyTd=LHgcHQ6$5OP-3#_cQt8YL|Nb)0=Jk`ZKu zWE_HNo>;0;P9eOVDw~g*l>a&Kpo9#zVbs<}{>a_CUr6yQ$mi8Bd;{}&yMlI?l`C3F zsnz4iaIsU#h5bol3p%I9Rb5*3I~Pm%j)YbD>R9=F|J5zOpdp4t#op~cB-iu{WoUFy zzav;#L38Z>Xqkr*_H^vDrnTd#I}fDj4^Ji4>zoqbh*ZR;Vq97cU)!{M5LdO?Mm zAeWViSUN$Ef28oK=R-o*RxCg3oT zBsirnhrhX#M?_j8#p@En`F2W75T!G>;5f_tJaffol&Z9rIvvU$K0Utbc^Jk%w9@Q8 z{K}LNW;aW-heZ^5ODY>MVoldA4x}#Hs@Sh-eH}{Qu)SWhu;JLg_Y0^)C?ZBrD)<~E zLfw@u2Bv9C-&KD4bnytc{=mu+?v`H}| zzy5)gGl7X$M{=xSRtMp#mlX|#dos%u7=54l+N(_L)W(+1+mFb;c(a}~t+e)dKH|`Z zxRxl>W2H;jE>>Se*(CISUu_n4h`(!Bm_(H3>css!h|X-|`8+$eUX<$88I_UeV(rO^ zpR73*Xzx*wN=*XJDY4{0%FXo0Ev)=t=C9g>4b4&a`C;x_o0`zi!z5w3R4G;@JE(Vo z;NO^kdH6&)a`{P$GBbI;O3m+ekX^NH%>pazYBQ!u2$vnTwt(x8#D0<7_zPyMdHF!t z57cNOYepd_JhSl^H*&>)2#?I1##@-n~ zhXX){5ZiRlqwVD8zIOcXFoK3rfh5Yr^)Y#6bs|JhXGNkr_gyv(W`GiXPuhTh_!<`NZ@
G*DuTGl(1U)gNlm-JqS_KL6CS-?2wGaUm}hxfA5~EoA;wcM&kb z)3^Ply~8&r>Hq9@OKHYw`s2-a7Z4G#nm+iqyR(`iu}B`*BDswNRl7ZGUOKOdpt?s$ zz01N~ne9W}xllH#t|{x*eYMY4T^yqGJXC9dwfDQ$Og4|+?3$qz%4^2)@g6Yl zF21(v=v8Kp<|F%m@*!C%cT}B6=~SvhgDbbz(FNK7J?zZ!zGs*@cv7|qu*f?Tp%cHm z^A}IMeaqFEi7YromkP2sd&NUkFq_Ug&q-dN9AT{IqZzp!AMM4jodGqJMX-ngL`>(L z+)z)n=wD<$ z1QRLU8|J8eqg&E4Z+$4E`UbbuR^hg~yO@wXz>Sq1(Q8q|w}b(;L%M1o@wkFqGxV6$ zZGbOo(Dw*)*RbO~W0chDY1PA;V^ero}_KO@Hb<%-Af zVWo#9-Z9jVE6y|SlnkZafklZ7x(uSzgb{f|adJa%7aMs#s$oC%S~k)*SIz&uWzx78 zWHD6Rd2^UbX&G>t+tcrwqhRhL67yg49{5Ia3_V*_J^xa@qZSTNC>eQ`|7#sQzV!i0 zAnmi*jErv8-2(M0${oDl?U)I8Lt9vDruZ|O3Yy~BK%?bYd+$dW4rn_NAM4?Lx^h6` z-m6LpCFU_cR>MJ(GPk+&ztjT4(XMlpDd!~0rD3_!v(GRp_?%6q9zS{heNOY_LzIvH z6%fD>`$rnAuF{vz3AXFGBvJ)b_5lv5)D7Wmdw=gh&*7|)17oNunO&kqOTBLN79Vcz zyCc_gDuDW#kA)H_6JeqqEknp}%B&JJpVEc`0s}n4b801iTe0z#AB_BF_t!$_*6?le zaS7T?>odVFXbi*9;R{<%wJl;*qKy!bC~!iH{?%ur32Kq#TWm8hLK!hNx`$i#NU=r6 zFFNozr`Xof-6*lXmxfT9mz34tH&m&IQ*#kmV%{YGKUirNm2j$u2u$^sU{{E$WL3xG zDfW~*oY1`M&;F9lHtq9LO0r5V;2Y0FOzizsu6BFoSb~k;rol{-tXqU4Z<44I*h%#? zvj!LcsOk6fdkFq?%Nv}r@vCLy*hf=(^7_{v^z{o=6-NmX2LT=z;>+JNkc*T3dLH2g zPWFDA{4(S;OZ~N1gIOi3_w~!{Z^U!OaWIG8i>+kYq8i@3L>K+ky1sp$bEnuTnaiSAU{m=t(Fc&NXYVP|_(@O35k| zod`J%=a5j61aOpw$A7u4bxmTt7%wvShdgzxbiOorvgA#A{WYj*3X3AVes>+N9}4LTCaaNhCX&)z>OarQCL^#9X5 z-^8YX*qtm|w}N_fNK`HE>QzLFYGpOt1kQ-sbX5Md2rDqG(w|pod~4!Wt*?VBc~NOQ zJ`sK6-yvQYJngA81_2;5C%g`-S5MTmM1M=s_BA9=8|Uj$q?S-`P-$Bf4;5ys-wR51 znK#-UubR&QDISjbz!rLIN^K^C%7gwhTrx(Y^KLvO7NJW8jv6dp5h8?{I@p5?(#m?{ z1@fnV$7A1xxa)1e9i+O>X^Ln<|0AbOKe==!eXSI$BJbD|lg1_WG5UAd3X{ZUx-qe9 zV)qKz7ZV67?Ww|Xk^1}#^?MbN{}mDE$-dj(Sq6lW?YjUa>(F`3YP!-=f5fUzhOz_& z8unkb6TMP3PHw89U@0IQV+XU@){rCZj*y0lYH77mfazr)Ng2WpW=0*nBpAz|ZYFqHK72>2k^dNEka@V=-0^JiaYO&<2YB93ZQ))Tza*WutTWHBq)~`5Lq0j4o&=WVsKgw)6 zl34Xbag%KK_tfwb@pb`+}u!HCozEhg8Xwxu7>ecG`yNU8INr{iz9eJg@UY za$IQYnIp>O*Qqa7t2sri*E6;mT$sx0ZO6p*>wQWJrmGun3M}r`Ki`-mAWY)`)?xc> zTi8%7z@TkU1VP`FO&a%99O)GJx%^`9^ptgN-)+o>Iab1u?$q^(3kk!|T3WNxODi+; zh>!oT2`x@GT>x)!Si)9+)i~3k+Z_(8`xV@>i}7#u8n`9&`n&u^Wr3;gYs#2rR>B|Vi|7eL;2i0H`NUMSW zN(0)>?LZIMLO`E3?)C8NSO26Kj=UrM06DiI=R2j`Z4LeV%{DCNhuccs?F?ObB(VLd z`=YkFOP*8QvPyBhKTY%6G#dsl74rT&w&rjSi8)dKT~$@6&=+~2xOJ~^X}#OH@NSq? zkakq!6cG25Pg$}fTou<_S#9=-0v-sy$u)*Cr{O9s0C{v=X=dq4!3ckQfk9noNiKhB zQb+C?HUiIcf*+KZn0UA3*iL$d)yu4F=u6op78usoXX>sLB#G-|r}W0qwH+*-&|-&g z=@F*FNZLyrS>K+gaox zQMNwR*saLAjHdZ3LUTPh2bYchXn7CBD1B=s_iD0ln&HNL3Vx_0^s7|?Ld5tkz*5|{ z*jbyo7q#_g{zT&eK~&<%**=g=lC*>9$G9rt0g|{zB;WNfN37I;`FG=6_d=~!A3mwD z&&M9>=bds$_WE++4VUlUrj7na2%$xK{JHk2c(aKDwc>|+tC_OxihSE9WAk~%8GGm} zrU({ZnjZ`}fJ_LqEBdzKQ7#u6fHW-yi!24xx9vyEXa$rfYRAQPUq`rP-g`}6xA$MgK2 z<9Yt+ILN%`x~}(mo!5E3Ua#}Kh6%VnDXQtJSvOc19$_=I?1^Rrt8d&)p+DdE+0c^T z-^je#dPPGu_CO&0qUGCszvI_WSu(Bz1-Aut;$8x^ew7XsS^wqH3T#3 zNO~fctp|MM2k~22EvbDw3f@0aLR_&H1CH~=?z=(4*9N5Glf_QWS~^u5tN9jMZ&a7a zcRaHza#)g3>==y?CJ(*}+09popD23#NS-8Sv}34rq)xc^$%f?3${+3gOHKt7@7%%g zJ(S&$|IU9F0Z=ukKlCWJ`osZy`2m>gZFx#*@M53^W_%$Q5g-ueCe(A$DdlE~&23&> z0OXtLYAavJojg?qLtzzVXuaZg?Rw(jU{kx@AJ*My24S@q(31~8#BJrGpF|ROfT}qa zXNwq(|f1-7q;FaqZusrN%r5qg5 zsr>mfskQEY^Z6>KKSmS?@L8N!h6GX&XgUB@QZ%J|nVr7D!dkZ_25AwDLIa zmM3~fn*tKx`yYGr#){YwrLS8_yQD`StH}nI45e z4MQLI`w4&MAI0-PYZ8eeXb=KW9?zcT7L0ISUdYNG=;H|3rDnxlP}UE7c2cX;&P5m& z{XFr=iEl;o(2u0iQuQB_sQbbtF_EP z4L7s;kNXR%s|hx*Q+K}}KiD$noK(fVfH*fuEk2z@P_Uid`>ccY_1;^`bnGh4k`TPz znlydWqfT>^xHwUevH8(@eQIpB3JMgJnM}~H&+yTcS=g&&JKy#^`0hKr@=5CncX-2( z_G8u4>xo{Y9!Vd0=@Ktb?NtcW#k?z9=s~wXS*jnmm>}nM<&JGseb=L>{*{I{Ulw;q z(Hc8S5~?$IV+nilE5+Y{je2uK{YSdo{zedfA#+@?LjSitIZ%gBgKH$&NM|)AbCfyZ zQtoU;IM3P)wxX&-$#7^FcwKoHg@}q_!Vp4}~|> z=<@|hJl+-JLEECk_U=CCYFS6i?55aLc2=#I>IH2Ez(q`|t~iWUdT?Y7TZ3|8m$!*_ z8vCy$%odAmBb0aucJXb8B-Z%vRd#+K3Q4Nor}4jG*4t><(-+$J4-xcMUtK9%t(`b< zTqb}j)a`MU#hXP=>ZglEoH~*i%TmUJ(``ODAn$y6zjPn}JL{`n{B^zHAo32TM!XS( zX?#FlzI?XtV}R4AbF&ERt{n5H9OYr(%V=63Ftm|MczO^(Xdw?4FH+*b5U7Hha#V7fnCqL3dv zEA@0DWq^ySH9_IG+)&$XBL((=skxuGArcj9HcRH{{c9-EG?K^5qiANs4R7^ze#n0F zlthX>t2{}%nLT-8C3q!hUdB)KUANH@IA*ElDB_RWBAxp9m^57$Y z>$G$Q%{->KpX{hW+VLHag6!{-cCsRQ^%}f`8*7Ez2ZN!;N&an7D>XVsfkV4dye|_b z?`XDKz#0j z1&fJwt63-U1m_fmPi&8n)~bfJNh(&LcqB1!dvL?bkk+&Hz=jwbEVx_mb3B#?nKOTQ z>@+&42uBo}2%M6wXxOGXeP0sQpGo8x`Z&wD#E6$CX@P0^r>v2u zj);`ENGj!dVQK3}5MSMR+JTlbE>W|p@(X>n`B-#*QSMJoRZLHxg)El1L*zl{t5=0{ zy8jqW+G2^(+A0L-v;P>4R)tHeN5@VpFJeBu2atI`uipQ@S0Pmo!=TfgIjK6l*68uq zry~L)(`Vak{EKzFR=ezZAu_&ApQeLUn0WJxFVF}2&FoQbzd0xnt zRk_>n%U#vgXW2xhA8K+Vt{EL%@Q1AcOuz-qOL3>GqY-bjqU%fY(*XAQbV{R)_7Hc` z;x>DiU5cX7*}Ks+ult==%zIOr4#X*0>oT_cZ)A?j4oVLuW1)lq&p^(1T<}_T8oA2# zU{>aim^mKLSn<@W)#*v6>o0)@_~6(ydU#L%1lD5Q1$xEf&i%)o^nq5JdH?b(6_~2$ zmn+{JhtjN3t8F6nk{*)Q5?cmV61KY*Gm02Ei1Z2FkdjQxMM#;I61nJUBBO2wRG=Zr zyj|qG9-X8lqYz1+qT^a9-{IOP&YbW^x$?a(Fm5|_An#VqOcsrJOk9+c+>Iz*PI3Lz zkE-P8zq;zhlhr+%#Kw<`O(g;TUtx8DwaZa7$Bl6Lo$}RK(2v8h>-&2vK-m=ML?*GT z?f#s{4-9+KQ~t;l*MTo{HKmBy!;23G%8V-y5`TaIa~@}VuuYTM+TBkgeE>@;Zzjvt zyDpnTRyS1fT!zUrx16{Em-SLMscrwEW6=q<`DQ1i_q;3Q`-uJUUTsOfdUc{BMt!VL zsspUqV|dTVJ6fJp(m?gtpmjfh)w!TE@xed9ts7x`A(5cHKsb}0R}7ykz3>)0V8ss; ztbjc_{F)2KIABneMf#bU>#k&DL^r=00i-Cjp_I{nDbCc{t%-#n70or6@z(VbNZYnk zZK}`xfd`k`dls*PHhL8HR(jMy)>KRk+#q(9Ewqa{bcYb6u;oN0`BA>Nqhz;k`gj`G zETEUHbQkOaGw)2TD-Z+Gs_Y-%#A6aA(yBi4u#nnMh)5-lZ9y(7juMoxkvKJZ(A3@D zFNR**xR@Cc^)xBx%!WHj5+!${?=n^b95#nt*V9RCj}A~B+w`cVb}4nQlimJQ{SPh3 zk2$!*u2@N1w(@eKP|#uqF>PXFtL$?crM;}dK+^YGKn8Bv;BKegC%XXvTKvX)P>hwj zhkqkQyc~KEM+v|p&cDA@R%1!heD(qK0!Z|7hWIG@5%6YqbAsqKb4hk^8WTV>N`-ohtb z1Uroc_tW{h5@Nd3D3Z+KFgx}KE$w*OCK9-$elzvXB)z|DAN>9L2U(Js_Shvjn(*AU zt7yYv9?8-EqbE4em;2U6(6~?slQMYx!9ohjs^GGXJPeDD0FK!+h6h+j;N&kzgZ_nGIfO=-01*ZoQ3Na#(IvyE9BuZ_t@VGz42QNL-!W z_Q44Fcj%}|7x7V+CkgilzBOxawcJ|`Rkd8Cju30$u zy{|e})YScX)v{IPi5K!s#R;f#=ln|jhxKWlyFJVmr0W~%`zgTK{wGk)oDBAW;^l0C zjvPsYMUEXKm1V=#)g<-@c0AWgJYGvkC|(~XxDJv6%6QA}O#wj8cbZpUp}u1+&s=-F zU%FK7O6_&Y8lT)d{$n!8`AMgg{dGM^u>r-5sJddX<;bIO5I(6cynEm$(Ohf0OgR8qLIn%m4t(H;NC$tn#$H1$-&Bhs`QYd|gFU)E`UX1Rx9hu3EEJ@-lxONo+O{hqq(TPGk(;^8pPsD;q zwi;(^F&s)CLp^LuR>;UVe(06W&CFJGYRV~Sn@Ns6cSK5FJ7qdtle;HE zjW^Q!R=*`g-Kr=IIYVo^>Swbt;&F0E2sRRsF}_vLa7v6c5yN5r4keBZUXl@3)`m*_ ztj@P7f|NT|uazn7lwI85V4G-e|@Ir(@cw z#)(5mo=+E&K*Kc{-x8j;U#|kD18&InRJO=)<5Si) z(4rQ&*{p60e+R0H#bI&Zz51XpiR?l<>mZl|G5jgw1!zO@W`opLg5gGM1w^NKf~@6r zqc5aCj}wdFfgdA&Uq4#r;?_U{;fg7%!0wj+08SY1di7WTgo1Q0<*z(O16X;&=WkU@ z!X4VnNqDqS>fXj#?2>c7kVc(>A>}>-mC|$Enu@ttez|a>;RzAj-F-N;jZB5Jy;p z57(QPAbz?IDsq=LWKD9NdQwZmn`~^r9n;;OpURlH#C!=coGgwOT6$f4{A$(HwsZI! zP;opHp*|^l>N0XFXz5n8O^*h3eZlt!*ajM68Y^WhXBKB@u!iGcOv3HfzxpdFZ>^cT zmoyQoKdxgf#+~ z-O5AD6*e0i?YZnvG35+0$aKKkW19TfA;F-)Otnxgr%PT3>)#7bsF8t9|B+Is47E6Q z)k%kk|HQVTdzD8?J0!944`t3m-cU`ljX3Kba5%EnHI-JC1rQTB^d9(#=?}>3on8 z?h=C855T{kl9$i zvAUvSz%j4j96m1z*HyGghU#c3LVf zsnvGz2^gQ!7G7ZjrXTjqUE3d!FCCe?4GBPU_xnm6TX)rrj(u}6Z+&&WhF9_iDbNH` zVIybc+9XTD^T>WY*(vAru1>$fuAQOjWz_>)>(<8Y-#Ozyl-hwte@b#ASl?@4O%7|z zGh$bSJjRF`je$ktjSq$cZ>^}M#tcp);$I5N^+`8n;FzSoA0zq9al*0TCm8oRjMRxFO2)FuhfKb^B6LB-O$-;ntJP{rc<>y79*&!}r?fBVx3h2oFqE}- ztbPN1vTr4+qp_)@xlaGXpf2UYFSGd7n)%$P=My++m7AtMe!W9{(oLSViR+rYA4n7` zDcn*lX4hGC7#F~V|@QNe+4}B-i6=8kw1YLuz7GhGay5a%fN$^P|hp%pM@zn*|s8ks-9#P_AJH@HrIi{!NrUMF6uwas9yHHrqv!oR=B{m|^C z)Nwg!6Ep5E&Qe64|3BGUC$= zMbazt?Lf_VwboeFEbO(yDV~z2Wgk0&nu*18csFcuBu-}PED)S>o%s1ue2=^)TIC73 z-hg#zZyHkSK7d?_4!Opp1o@wP_YhatR(QZem8RCN#nxeR?mnp{}@=(=P z*U}2WHgHOxQh=I7S|4S{{ErjTy1VB>2U2F0Ry>F2EOVQ`L=)X4@ypNATgT}EumJk! z7FT{aw;v}7B5F4}d#uNW(}VaqNw?2v&k$QJxjurb6c1fZ!f=)FHoN-N>8jtQn(Nhdd9#C9P{GGh20EtAVC%&V z=X)C}!qg18e0>{+5y@=vMuMeBtLeQ_N$TSm%1;N=+B)p#ztSh9%c);s)Qp zV>YUaG!eU9-ovj2U%&mQ^&IU4OpAy@6;g33qS|$_KonOb8oe;P{?pMb9)ie{xXNWo z(xW}X5!}c-GHOTGt_k)jJ+i8Mb%(0aUrg3N($w+&{vY92b3{x7pC~9?yV0+22ATr- z_4YZ`$ruG7`9FE8_+IjR;9-qha;9l2ORb!xvJ~|QdMJb0hvP_&ZC@&z&OaS=6m5$+vt@&pit|n8dadj z3*1en82ZQP^2*VX2-4nR2q;agjHwa-WiY%f0D%hEKSLVQaKm7hveMC((a_0fw3=gC zXR89LF~NV>abHZzSBV|~H?CDS3|TDJ03;t?L`o<61Ltoq@3pX1SE-)V5r!-r-id2z zxK^<0bvl10$m@nuk~0QCYT$qFjNvN=FH%^7q*dExb?kC_XjwT8o6rArZJR>3bT*vUcD&EbGm>>tvGhN{;QgHXO@gUxh zu#nr6^p1L4%_H&kn@y6nD@w(2b15NX&fm&`VJJ)qIF~MwYqCM&u%G7rEb$1G7nF#v z%Z*$@Yk~6*=6>svb6Zfb=(eKP{;i$BHkq%JaE8|r2`SrYmp-Q$XBTCop;iQy6?R{p$cJnA{(?rn!~Ie$O< z*6nC?OyOnR2nHnQ3@>$eJVDV@rMij3FLbdLGPf1=uVKYU;#v|33Z*y!+96Ldtsz9` zIU>yWeQN)iv~p@d!>})0j~2|z<-{zn?&?)nKe-)E8rdxkIZ_sDww;VkVIb!ppwXVs z%=t9wU`LaZ2jDqcIga3Y!vZzi2*QfnaX0UgA|2|AZ^#psjM=65628pXo34&j#>-l8 zTU)t_mFshf=4ri6h0K;xL|!^I}=ojtz3bM!rLCa8VZ`DFQQkRj=+Oyb}2# zz_x-gv^u__Hn9FasE1;)oe|5KdfyhI{Db=zHMUY{^9~xB!RE23GIN%6yI&+Gn||0W zy*LPWrg>xMj};H4<5Q3lxR3>laz^u}=&^F^74KHzr@O zh7wbs5kCM~edVC)b7+k7!=gG?l?$h;vnOzPk-^Oz2=)FtTgKDyrTYdg8R9+zQJRZ? z3f-}C>m;@8xOB%*a&^SfY+E^GUwsU*s6_Z+Wu94DI=sSw#W{dwmB76sBGft_1sr1y z#ul!P2jPNPT)L?xI6q;sTCjJYfWM=$^0@HS#piO!ax|RY_A{xwo*UasN8Jb zS1(Z!mv|#tYNWw!RI_zR&2EB#TVKC;K^cFk`+uf z_JBslyn<2dd(56UC(z)i!1diy2-|aq7jA-b30C%?huRjXa zZ=spqrw0xF)Kb=k2XazREn8V9uDiIVj+a^RyG35i6p45Jf;`!q+%+5s@UCX|)fhEU zyL;L2h-@kVI81v)3tsk`9L2+!WAaQ5!1S#5WZ}BU(uflU6h|U2~dNZfQ;~R;Id4`$Sm5WD`6q8veCB-S1dc^nC8 zXV)*pQdhD0;X1pSf0pu+zH>ik{FwWjkDG6Y^UEj&NpTmfKParSu@ttTlypTOLz2|AM^c!E%#*;c28>)V znggt@^_HlWJ3)%FN2F(@`}J95dEzF2B_pEaQR(&fpPR9LXVTP}v^n`l%Q%>S$Ei`o z%&$&XH?x-OBQ;)KWAoaH{q$8G;iU55rn$b&nBC`kt>U`xGRGSpcLkNbM2?Q{QR+dC z&(ZOA^u%H9=MRxn;bF8%h1=}h@oi1SCSW6=kl$6Jzx5)VfuDU ze|d{ZNU$nhkw{E8Ih6k0AK3Ca<32e!{7ETB%NaYvbmt!$1IL|!(C{(%0(s58EC87} ztLipdw6!z*N{_YXknxi#vrcX@u1V>awRsxre$#??J$)E|!}jB*@S*g_ zRdpDBHI14+aHy5hkFuSJ_@hg!FH*=;_?~;)Kfc7rV^OdZV>U;lXYqf%1XauMx^tX2x>^vMWt0&mA74#ca{kpF{m`HUNu~e%&sP| z5}~oSt5nMm3-g)I{j8*^DklFaZRSaJ)RP*Ovd+6_ z`_Yyx-0FCDQEp2DE+*Ez!WP;cbA%!#Y|7U-l{6HWJ~T4*I*?O!>r~Itrutv0>z9n! zuQ5GoV*?3=%XcwNiiYf)j03|W4_+rF)XM}ng(wI8f$2fdHmX~=KB${x>)9v6J{1rA z;n84E=W zmwMiDp=l&LxM)}%+az=QETLv~_w;K0(=o$JcET3R(-!5>>>eI|t$B?8hq}xWJ-An? zlcXF{fkUuF_<}JNw)QOBH+mM8+xU22wtA%|W1)H?fIMwebZNGu0W>75L)~(T9 z8D!sqc*D)3@f^Wtj5j4AC5vV*@9SERpW%COR?>WBXqoxR6Scuxd6{aN0lc&c6GksG zexK<g6B_x9a&G-wyAylzi}oy69J*--IODlUo@V`DUf_9Z(Eq>vobJ;w=Y}#i%53 zATfDgEP}Rin*jkXKaPNkq(Wds0E9~oG>^rkg4HRlZ@KJuSN$baCXe@S;oT?pf{T7I zY7%xQHlM9}MA}dIZ?0fweQGBsbc4L!&|j}u2JgG7`NbZ(m+?%g7lMA$`Z7}9FRN{1 zM2k%@seFy#Y5yHeA+@@`1ZZJ-g$zZe5xdg?pg!+kB!}WvhzP&5>85fQ$>H&*ff1G~ z@J@{cCqtv;jo7kt%kk|Q4wKWJ8KuJs>On7@hfLmxJgZSp?GGN@jZxKpmhlq*E#~>M z2h-$K#|wr{lP%4yUNs%Eacxfx(#1{&>e59 z9OBXl#=eyC2|+sV)?UQ$*2$5q!xqmrVtp4^Fg6T$bpettjIY1->jgn+qr6GusvEk& zUzZQi8}(nlozbW_;f!i;ZvxLIt@k%0h_)d|3-g0{8Ak6=OUGanEQ- z6G;vLKuc&{l}*VK%1n;EiDW^Mir7Q^h3LEx8KU0QV7IyAr@OeqGaiF$DBs+5-ruAs zy{3n6d2joxZ$d5FRpP^@e@AZaw`YWX{!8EZ(c+1C)u{45t7)3d-PkMyjs-bAzYc!_Tr`+C8K#pl}L`tJ4ze8m6NH4Cf$h;$+A#4X~-BGEpPW^T>guQeQ} zL`_-VxT#(q5yABP4ex1D6J=;S(AB-!g^7>kiBQ+r%B43e*B)>lS@9h!9;@eNS@c_^ zD?XSY?zvw+kA40zm+dj-vDst(wHbr0Kc@qF{j|skV zC7!&&S;Sx`x%qA>s@i_PD-nZu3?7e}LpcJF6)w8{#Sno1fGtJsR9Eejz~kJCcOn9U z+iz7cFW5)hdE41osO#75w2T{bRfRM)HZY7Z?MH;KAY-<+j9U8xw*3`0tArkSjBI%T zZ)((8zjrR~S@v&$UsRAxwur)Jv#83wlg0rfoF&tLwc|b4!w^W=!p#@%L(2EoV|~FM zRZ)SR&>#`y*w94tsbE(Em!T#@G(y#vK6C7x$RL(E#TPQYwol zwJdB9*LLP;CIlryej{`0YQ_+FTkSg26uBXDQ}tZEv&8sB?R`2VBxsRtyB|jl;;jC* zCWIJs9@C)*Xhf^|hq3-17Ml`S&Z%bIFmhxp>7t%EYlN>*kTaZYOUU+I;>f^=y5>}L z7gfn$ZBd;X!ZR3vRl@KCd7^ zMj%C6A;FKk=2VyO@7INJ1E<^p1%c%ljJ3@%28ZH-d=@V(%*;JRyASbr%UPwHX|>56 z475>*og4h(kru}s9ukS*T{%Jb7yH2-u>}S$SD`#6Acnyt`o!`Od0N#io^28&@PqqU zU%-u0zMZQe{BGqRi#m&-1mZu*B@p)ODry^F>UbsRCqK9hw`hn9Ia>0<5-ZsitB-|%ntbWn4ras0%8Ju2+Xx!(cgpSj1S z*HB_00Mr33z`YNM&40k|&w$Ds75aO`dg$+@^B>CmH}so&EUWNdAfOHWdR~io68?#4 zCTp$K!dwD6Au}~th5+P{_S8yKCyXoJdI@$MuIcN)P#Lde^n7h$m*CSnSKXS1Cu024cy9QQaP)zGn4!G zEmBOMPcs-KUOTd|B~sE^KhpZvbTN>3^1S0tAnQ`YMU(#Ja_g#VzSk)a%~<5+RVk_H zdp#ECPADjzxps38Cy*1|B@#Lg|VgP}B^c5gr z6<8CPx<{eT(WFks(qfyz9k0$xJjXg&1AHZg#}2bGZ8v3C*M*#(={V<3F|$&_wWaGJ;a?r}|e_ZrIY9w4q=|^HbviS7OldZ9tCKQd*6v zaTQf^a#Oe8mFJa&U9`PTd);}}4pF!H*hlI&yJLKs@ieUORSUi@Re*N!&X(7t=?RMC zbz9@q{@mgt2o4i=yYZqbSfQLdy7Gl$oV&GS+XCDhY9sD6(;^3D?Ey>a%LQ+pML1!p zTEn|XMp`#%_Uz3u1zc~J7%(>?p7S0TTWC2DG zGGFVO8x+MeKcz8KkU(=UL}xcpwK41v9N7Q<+lw{MC^y?_n%BBB!|9jK&y5lG;bnA= zpiaLr!Pp>QTs`tOMM|zCSVuA@HS+#u&6t~C88ebTIoNDZyAE`tDjHH?Rff9RtgYLn z50xDMiarQ=u+}~pm6pq$aZmMjvJL+XAj={ToRbyB;QTC`;}D z1P*r*_u#aj0!xjQ9QTV&K3EARhZ!K^FvvxCK-hU?^?4O|Nk!s#9#Wx7&t(@yrVd*0J;(Re;P-P42r2FE={KfMXFhqlgDs1|R1&n7F z(<`axwtu#&n$TKAv*3qfcpXruSg^+q6P2(C(4W$0f_sfRy-i>?jFWr5%^QzEa85;% zWvhe$Gb-{sI2aNg8_HG72XM$C=c{%T3H3mW{S&Ppf#NU9D?HYIb$vBM3!pcS`eU(r zkbshM%uq&f@N8lENxpomeLc9 z=aSGEP;}zTbl}P@Y-MINkFlX2IDVaexNr3JEkH!FZ zL7enL3ZyrEo|dy)1O>mS%uRfB_&GqhCFWMqivBzYa2B@#0apK&6wo^%K^a*Sfa9l3 zBPP^1y4+AfKhG8J<8&SVAF!-zHczB8h4i04(8aI^;L6A#fM#3z1@z`yt>bwpOkYw@ zp)W34;u+7B_a#?}>(v3V4}%5_OXo=-g#}z&f&nQLO<>gNGB)aP!fW+(w(j@CkgEF; zO0PZ~gHR6R9-P-vz726}!0Z8<|LBjJQ@q)qbq`GPBeNywU(noX=_LLFsA`3=42PpalkzrRebD3VK$Zi`xiq?Q!IQ z#X5VeBRvpU4Sa^`3uyfA)U9vK(WbM^s98d8qWwlqY$0F)cpHaNSA2S<;UhnjM4?5q z90Uw-O%_bkEoDS8O;xF*QtLcal`>v*6>rd}9ikwvInKlRN+XMKdTuHD31y-PA6&;7 zPiQ^c5xEwq&Ig$?ukGQ-OXA&o0|00-Iu1r9(C)vIUZ&y5HOX?e5_pfwDRM9_j86%& z$Z#u%Zt4NtJSh=XNEFjR(GGAs0KMzDi%+1*a|0Jh>17IhrS^d8h!0U_t+KU_M6=HT@&s!t?XaDSh0X%AQ@mX?-A0ZqPbzKLm8L&1XizBcW>3!| zL8#=#D#eW@06-cEbh;U+y2-3}T8fXFz`=~xtDG8qqIk?60;AkG4$$RbWy0*+>CM|qA#eZ&-O7c=rd$z6`W^F`)z1VriHTUazD-IGz6y*+P{Ee<5 zq;XeNuX0znCo6*(I6PWeCJFJ#s1^NAt@b5yl@C%K%I~cH$RjDqkAv(>YB57^&|>F8 zZx9W9#&bXOXW)orBv8Cn9xxS-xH}~Ab1iy0ITKT0otJ`~&J%;~*(Ymix&h_C#8l*2 zqU$M?d|?VkUEu9Ag8F5;!)&mkR(F!VpYSbjx2xhk0ON)j>pBC+TgPe}%B_IVW+tQI>Ilvz&f7!fgt zL~ov;z8%Ymj5GHk0O*sY15en}Gr|KC={P+cNKA-bqz(<>lB4hvO=Zvs;MzW5hH_`W z(Wo~!PO6>fc`Ek8!AKN_EUMoMv?z*GCX=VVbUhC#Aj z(GS(For@|hoG~zj{4dE6P(TIx>R&$S#*u;r?q~0#f9;kf@gs>n9Tc$3MbGlKv$Zf{ zwS62Gr(IllPunVuRF%9UZpK)lrq2tA3i@=00Ov8+0;|lKI*yV*?d=kw3FAp!IA2g+ zKJYJf>S5rH#v-6Sn?0kgn~g~*_^(3~&o{k5{g}L(j~E3aE({SfOGp*iy-qsMZ)f;i zEvG(=s6=>Wo$JKyG(3Jn<pMt*JT#MhRcq%(Ty88*8>^UxMauVcSqd`xh}b8U|A5o!AjT>w_o znnk%pvF6_+-%e4&6t2sj)p>&Q9DzPk=8b>B5*owq$=*uo;NCLrMbU^ zU`&8=_&*uafs}dKsx%}xVYg`ZyT}3IGxS@k<$egbEke(dn<`#Yiz9BRf6-Xv-h6q$ zyr>@jUrE)0E+z1D*xA09$yOgzZ^`GSmJ<~fV2q)$R&@kUii;lpG1#_QP#B8xwJn$0 zJa~8k@mY=Z%hP_jBFE(mHeG`>w;WXD!^Y*z#lN$*&Zli@1m>aHAT@ zg+h~NxLZN{e%;}snvZmkWo*9)^V8^qMN0>q<*$`@E%Lrt$KG>&1mb#Lv-6#XbeUlk zGLDOSk=ci+@DgjH!E&;cu~v0yLJ^cd9_vdw?-*OD$h1lMWEy}=rR)}d4<5v z)u>_kCrNmll+KEF`vSmP;d&wSHXEGF&Vd+!2ul3SRAot z3@z~K_Ccy{!~E}Yo!7l{vRK=M^6s`Zs$ll+xg|I6&PUc8$Cd9jz!0s>Ct7u^rM8&p zb`;>mm{fzS*Y-@-LlQ7y@oj2M@T9uAf~Pnmao<7paxJrii-~+BXfmWC%M##juCxw- z_Zb{VJcBaCia0sJ{Eu3epZcIOGCY!uvtW6PkguBD9x?7JOZ`N)`G8YJ85@3a^?^}z zc!+SW*_9agj#PW)TKCq+KBo_bVmvAN1-J+yDd2$oX&h1q?VNt9%-+6ZJopV@&0_y7 z4q&f8fAz;dCItM~!CMLYKUT2){Me=6iP2wQcIfYA{JWvevqN0e@fN#C9#YvXYy;e5 z>Yr7+qOY@Lt4d^S{V##sSnXwdVudgU8~NN!+5%9e5=3IqRne1!ZvmhHQ+3duAo(SD z^c+$3w^{&T=v!_Y-ZP>HB8kBm0m{dbeDFTTGsdm_^x&fH+2~CaLY<@@`zw5eevplNM8|P1>lh@JG6MAc+Z$Cy2f>MJ3-^Q|o-c#-U!0ujJb+#-RLih@9(AYUAZV{4|;QyFmj6* zaxI=ll(Ro1d-d-ZUFL;xT%QpX(GAqv0mr8ARiE zbX}Cmd)80v^60Wjn#}}y)#5`kUXqnQ`JLbTsr~won)5nrO!+wKwo8FZV=6)IBL}CY zs0{QeYG#HFkQaS!5eK5A{Fm60a2fhJN{RIHFKY2`E2)`dkp*WJnrig3Sw~#t?LbZs z27U+b`o^uDiKm@Hvr8Sb_dGNEiOHOK@hZ+!p0^|Pe}BRk&MPGd*kqtZv4zhM@$hDQ z=$*Fq!zB&GG5|q=8e(isqTRX4e!Xh{I@eq%rqnC}JgU?2j zL~((rNMuEady{EJNH5}RfL+~xA!eq=z=ck;3VFq6eYeK^t5mpKR*7FP|Ldsxe}dBe zwn@hB%E=pgK#I=bAOBJXjHP4dUZ=JWnq|hs1z=QZ)d#mF{GZ=NwY9z>-DA z{vxCPE7kAIzQV+UB!{zBdW6rVSc&Q-C%6RmUw?itN-6681gs}~>-<@pm~7hMKseO`7=x~H#BWf= z#V~Ch3NH63F8L+q!XsP;p!jwN6yNM;n7e$PS(b|st)%kHz?d9cnW?>!Vllwa2jyBB z|2k$@JDHQR2=4%?E>tD9C6=~$O+YqvC%Tif_uTx2Z)@RY*KCGzi|0%#ime)h+h33% zjd)WzcR(BmIH;U_&A%O6HqKqTtkXE-W*<1Y0}xCCp%Uu@;>V-+8aM^3pn7UYWJe#L z4e{gJL3F7rdxcp8smDIf_mQ9c+eGqtttr}9zANmOXMty`9@NnPqs%mE{_J81hEudi zn!t74whA&Jk^~SEJ0ZItwd?yrvgd2#U1Zq}D&>1!%aohIkpSoptp`G*XrgjWNN?c5 z7?uASu#}NRltY$rT>Gs^nw)+ftsdFaukv}7Fg1Ny9Msa z_W{>0Bh=v-Ptor_cl5?hOTx;@kh={3=3%rCMD+!yez~dDCRgazc<~wme1O4aq0Eh-(Vn&g9f>#$S zL=-Ymtw2`Xon4*1TSqIEI+&r^KRd~M^z^;s(W$RLozCL9@)r!sG|dU$jq`!PY;a`TjR&`Y_9guD5MY_kKq4+DnU$?05zlBm@F4H9 zGNKZRxP@;@%V=5Mv}|i{S>3rUYZO}s3#ZW*`K%cnt2F<;i|+I0+_-H2)JL_0HN2Xj z@Cb+Z|HCqTw(4iqE;YHwD9x%IM+y)xaZueO)DPbB>%{DeX;_5V#1Dpf{xsTu))+9_ zi_yvHGV&KK(1Q)KtEZ8=B%rN>7O%4#0X*UQA;1y9ML-pjMGck-=ElG@lmBzg1Yrk&ejp*S52c1adnB+(~tbwbY))4>*HwKgxr5zJ?b$xT~2)@2EBR%PI zRFnbsPuJ#U{q3uzr?<>ukoC(f@q-a$C5$x^!1}`0N{y2l6lP~M?d6fdbxUMNvMmg9 zvaM)sB!h5=_aLWBBJ5;OA?eTa1y~EqugP-ad+A0tieJ+)v8 z9M)Ta+&(Or03rmh+G`cy`92m6sU(5!jho`J7c&mj|8Rs64kw*ynW<%A(+g_1Z*2*@ z3{-Gv!3MMGulte#JV~Z<@Ch#ZN(|wF4nSfodmB_{!@~5>SjSJIZjAi&ioj0L3k`KK zNUfT#d`whE@Jwhgze>}!Q~EX z>sf$Cj5R6|0n~ojZ-BQPPEfAH@Wz+*#huy~(79H^OJ&KK33|FUAZRfJA}+qjJQ(s9AD*w9jJfM>J)$wJ{gsvjpn3WZl*(T6HG z0|F(77PsP$fNe)xa{OQ1y?0oX+qW)?%ca<{QU#WxAkst(y(|l$6cJDe9SMjKsz?jX zjtZfO6s1H(dO{DO1yCUoA|NevPyz%95Ge^I1nvyD_TG2zbDrm%v(NATan~O{StQ^5 zW*KvgcfNC!rV%WJSN0;*?r4D>e;#)K%lhvvak|p^oT#88;Jf^d6n+;y0WM@t1g@M6 z=)Y+JZZrFmrXC9Gc7Mrut>)nN26FIaVqyBv3(|}y?UhKs2uMI66kQbd*7L0^0=Yxsf#8B5l&@b%=;)wQ1hWX73<$u%R~uGT ziC({Lby58_0e|{?r;bA(&PWygfHcyUK_CY%3JW+qR#ZR5*k+D$I-D%6rs@d4{D`~(JLg$0)(cfTuK%B%zH_AkRVX~MYym>*>|vF&3=&6FdVPE-Q_&(UY15Q0liT_V$q{n8I=L< zKb?Lefg>u2tnhoTbmw`qb63#ZdF%;`{yn>Cr8A7yyymIAzY^o4jlq?FT=#*CHPe2j z(eZ@%bEph{;H4W_6^XH$9|?Syf7jh}^U@xuyw{&a_eS)ZGGDD zy0(V8)cC@DHy}}F&u6lLBUd2fWw#t$T0hp^!Q#Gpj5%!#?>>r^u~5;+`u4TZ=wo?< zcMeTqwYnmYIKUkk+7#`wtkJHMqIxed+pY3wX&`!O>EHFp^h4urpnAHEirgVzK+=~O z{Ku;7qMh09!Z62S$6j*jW0RrO8TpJiCBrQNSEj zT5)G#MGu1awoPoP1w{V{L*LQMPVsKJo#ri&I5(qUk8W=DzFp-v>?ZWY{f0PCwVwe9cl~e`1Pqlw?+xfN`U@6r!<)v9699G~|M=&JT|Z2` zIdvn3wp_e*|1nY=XmaT)_a<-y|NM{s7yPZ0gS0rX3jAZT{T~tqJh=ZKcmuwIaBLpP z0)R@uVglqjQMN#(Ias{L;O-9h@ZYZfR_2PC$#%bWSvQ)4_&8@Sa8!Jq8QHs+;xvV> zP9kVrNCf5aie}Dnza$(Tod@UKN{__bT1XHhMGBWkT2%`k+v)}KPb5SVRP+R2+lt(6 z(QCAd9s`jby@;4DT_5Nj5UC9Ofsy^eZi8ZSJk@ibLyP=ug?~Q^h5{ZnBHQ=+Hjt!j zZ9p8*;XKk*fr>P&_{q%4CzL?oZF|+HveWn7%*kS4bDX=L{FQZbbMzk%frH7@qMdq% zH+yz+w%TKKWsy^nCAicKppsnE}Y`esp^ z(;t%txOdQh?aJAPzwf^LegO8@wCPQY(XseK+2g|`sWS3b7d)#^!kz*jH{U_#t%k2n zPkZ{#vo|Mw*JR6gXk2^1_*Yqc@KyfkuBS&a+q(9h^)+QJSU`#YcsU&F2~;7 z*C^Y^@rB&6QZ2YCI+qZK!B)FK<`3N2NN`v=m!=do(%^6uqn!$r$zu>c{jy;d5%M>` zTszUEOs6}-gGh4f`VF6jI5Yq7_8vpiw4!!R?M*8!5{PvwgBPg?i`{%q$ZfVbxG?gv z8C;s$8oIg6IsC=TA-BQN4+rw&y6)6D3vNO_||-$__!0GsIA{Wi4pui zdf$R31UEnxi9R`d! zp#E3ON>xRZ3O@juH97%ejE$$2E%^vHvFEhfZf8aD1&$Q!)p_+CGy1yborNv!`@pWQ z#zp7yEAlamDq_wh-r^7`fKUd>V@-Am(nc=q*9V7HP;0f4TRZX%MiMrCAv{BZ!*5*d zk$wD@azC;T`sJpWhypnanM@z|4g1XA)35y%_=xI2`nUE-D$q-ke`NXu%n zTzZ#%;LX>1B&Y^^1YBL;|L*ZxMxTxOF z;@X%&=TU5#)WdBg4w79#uc9sGoHOJb2zftuuXV@;eCWDr1(PvSj}6IDl09TJwII6# zSI;!3C}x4%x1x~GDTgCAr8FiVnCzpMknY3vSDUI2VF>)WW8@tSZ0v=o!q#M&(%1TZGVuoVkYgU3D{{{yR01#Wbo-Oq(Y$% zb#T7w*mvSFvv{X%L)@@!D7AInk{&Nu6>2IvK}( z1$Zm%OG=c3_mzr})Fp>1F(tWAK^C{7j#o+2S4SEVZiGIQ`y17j)isKuWZps9P063M z28W0fmni$t0tXf>2&$gwnD5`trfn{1a^4gzu55^>~z;36;>jIs$ExE(DU?>7<^ICmflWi$l`;C9#m5Y%8EX2ZO zt^Qd2OhY7uDPbfc$OFf0@w)#(I&PG>AkR3X`|T2JnXE1+17CspeNc3JGn^FtPhwhtiUw;~@^i8>p~a$i@-O zh`LD3_DY$rOi38}%gi?ZF|PryeGu~ASJd|tOL=PB`3u!KjPSsRl|or^YhEIK~MU?XKN@Q>8Y>H z3ta2a`msT3wQ6&B@zy0udj)t*_M-D+-*JHwqTkMx*Hlgo9;CTvTLYin!2H*j-a~=Z z3d*96uy3caO!Sssyw44UAn~AWUvux~?F`4lgUS3C>CE5F{tLD8f9DO0ci+Cv#G$bg zQd@Qt1Tq1`xp+4hLjD^68^t^c0JD7Q+qDaLmv_=ay|}|((1g3IvtsArQ-%pYWs>v! zq_=F$RTzM4dyMO${yX0P#Lg7!RJd_yQqGsa(beR6nj5<4TkdwtBOtxU)}IeLaP;I2 zn1-4>8G7B*RnH0O7a+M@(sB4S1n_u$mOPE64_$08rjFk^h434FeqYi@r}Sp&=?k@I zn?VMF=UtM49M+W6m@#K(1NnrhtL?t-Io0p_Q3Hlt?X9AmF8&K?D0&V86u)VQ;%1gx z3qs#vg*s@TwOK0XX#G!(2w*tDj$)*2bKj_NjWeYI@$J(r&Ab zgTO&QPF7oPKkk`Y^&5fTvT@(}zYR?Om$ra#%jR__uLN4MJuAy(yr^ql{X)Bs9%l&c z@t|iS*M@iR{g@Lr-yRffum4fT@Jpti-6$2fGAye9;^#A%=x?72w*UMRgl}p*eIj3= zQ$)FI!*AO4dF@Jgs;cei3)0zbUv8VLpI9KKlG|M)m<#hmnz;@jTAMh2>9e(&%;tb| z0ElT9bNLg7BpwV3w$VNWy900HS8KjK+2{anRSuSs-i<2@i=88%=Y-}#54BJnHU^5 zew14D4C1b5aCYACOPNRa+j~`m53{Sh>>b?X(>&c~C}sU!AT9^@(5>UC*eiBJjoJK! zl7k4rrFNqSmGkBMtfhV3Jm=z8Gfy**OtNq>D4KH(_+w+=-n6@rb~2Q7#K_TZ3aMWo zw+eh~WQy2b<;|0oe5P)wb6NExn?m+cowEhb)t`Id%ItieEBUPLrq~{zUcM5HOeR0} zZHIT~6<491oiyj>Ol_pQTbMd*M!-E%xXc%wR8$ttZEw}X18J?~$?kA>ZPC>AOJ)Xg z1q3sQ+PE#m%*i^l$Cv=kb9rL%bk(*8hb$^%a~Tv1-hw3cDcvc) z48!zy&b*c<2f{2aP@BcWMP+;X3hjEz2p|h?jhziLXV$0909*tZUX8lC7W3-?0qU{yMl^}B3==Pv+RJ2n80JJ^D_Vr$mzdCm47J4gY3KOqm7p-w=p0( z>uF#?+U8!p3H&-FuLuD3YS6D!+Y{;g+&ph_TmU|8G`;;P|Nk}^a^UE)*AQ|Moj1?I zjB>ZxM_K$^Cc6a-JkdA+DN&w$+m`qe_)bB$F?WQ>7eh!x3peVauwgvUk@;*~&Q7Oq z$*-J7iU|u-#ZzjJi-CVu@q7_gj8=4#Z@gscBDp6pWK-c^RpF>&0L&oBb6MvS#6(2f zEc4i_2l^2exVQT6G8Mml3b2gB5D@PKh%NI8^5i-X|10OCn#22dR)&0yO7Cw^5d;Y> z5Eo7C7Fk`X+x9`zE;-1{d9(#X`DoNGA~`Q(h@d)RV(D?T!y%P0!f1g|y^#1k3buuB>;R;Dq<5 z>iJ(F_efYrc{pdw2U#+qd7l>^DF%Ir@L~Ncq2{xwovx|KXwapEvy7>@D+O%Qs!S<amsNtmb7Y0Dct!M1Gd3d^1$Y&FvX}rW#CnHJq~bD$F>3> zPw^eU&nal*GyW|$D-EG%iRb5Z|LmiP<&nv=30#BW)ClIQ^G91}rB*3v5@?-D*_x5Nq3 zP_`?$Ti1|SB|l8%#D@sS@9!>R6s%L5F)MrpNsoX0kD4TTgIZHEyP;aTgt$?k!x z#>LULb}y$6G;Qa+;*1GUZ5qN`L%8*tX`=e2k6jX)5EMnHRg8Gy; zy51|MHaeGkj@e`064P(1A!akA8uVaber@s|rGxF%8M%JXj@uLUVJe4T6`pzvTu$S+ z{nMF?M`~dLL+EcJ0U$|}>Wu2I^!er^!@bx0Qu<8?wY39b8*C4EJhpi*ER}z%V>HWr-S9(gLTcPtQF^Vk#NfKSiu>ni)duJ= zv+r+}@z}7~^vv~=<9_s@u?M^9v33KiOU14GH`;#!*R!ZsJE(uIA>o&S_VB=)-9ft;$Rvrz>!q#>v@e5|`QJSYW~7KV zxX0FObwBU5vBR&{!fWFR)qRLPwLz>7)cQ?OS?Ht$D!4f1e*3kY3e6u6wmXv179J>s zYcgeBPv^RpjbF`_Feb4|)bC4Hp8zPgqw%E3(^KROv30q-(|TimJ?zzXI+~xh-7~ay zKq=@-xCiP(@u+Y#N$*p|!>DUuS~=ixEae(WkoYTkyTd=LHgcHQ6$5OP-3#_cQt8YL|Nb)0=Jk`ZKu zWE_HNo>;0;P9eOVDw~g*l>a&Kpo9#zVbs<}{>a_CUr6yQ$mi8Bd;{}&yMlI?l`C3F zsnz4iaIsU#h5bol3p%I9Rb5*3I~Pm%j)YbD>R9=F|J5zOpdp4t#op~cB-iu{WoUFy zzav;#L38Z>Xqkr*_H^vDrnTd#I}fDj4^Ji4>zoqbh*ZR;Vq97cU)!{M5LdO?Mm zAeWViSUN$Ef28oK=R-o*RxCg3oT zBsirnhrhX#M?_j8#p@En`F2W75T!G>;5f_tJaffol&Z9rIvvU$K0Utbc^Jk%w9@Q8 z{K}LNW;aW-heZ^5ODY>MVoldA4x}#Hs@Sh-eH}{Qu)SWhu;JLg_Y0^)C?ZBrD)<~E zLfw@u2Bv9C-&KD4bnytc{=mu+?v`H}| zzy5)gGl7X$M{=xSRtMp#mlX|#dos%u7=54l+N(_L)W(+1+mFb;c(a}~t+e)dKH|`Z zxRxl>W2H;jE>>Se*(CISUu_n4h`(!Bm_(H3>css!h|X-|`8+$eUX<$88I_UeV(rO^ zpR73*Xzx*wN=*XJDY4{0%FXo0Ev)=t=C9g>4b4&a`C;x_o0`zi!z5w3R4G;@JE(Vo z;NO^kdH6&)a`{P$GBbI;O3m+ekX^NH%>pazYBQ!u2$vnTwt(x8#D0<7_zPyMdHF!t z57cNOYepd_JhSl^H*&>)2#?I1##@-n~ zhXX){5ZiRlqwVD8zIOcXFoK3rfh5Yr^)Y#6bs|JhXGNkr_gyv(W`GiXPuhTh_!<`NZ@
5)D7Wmdw=gh&*7|)17oNunO&kqOTBLN79Vcz zyCc_gDuDW#kA)H_6JeqqEknp}%B&JJpVEc`0s}n4b801iTe0z#AB_BF_t!$_*6?le zaS7T?>odVFXbi*9;R{<%wJl;*qKy!bC~!iH{?%ur32Kq#TWm8hLK!hNx`$i#NU=r6 zFFNozr`Xof-6*lXmxfT9mz34tH&m&IQ*#kmV%{YGKUirNm2j$u2u$^sU{{E$WL3xG zDfW~*oY1`M&;F9lHtq9LO0r5V;2Y0FOzizsu6BFoSb~k;rol{-tXqU4Z<44I*h%#? zvj!LcsOk6fdkFq?%Nv}r@vCLy*hf=(^7_{v^z{o=6-NmX2LT=z;>+JNkc*T3dLH2g zPWFDA{4(S;OZ~N1gIOi3_w~!{Z^U!OaWIG8i>+kYq8i@3L>K+ky1sp$bEnuTnaiSAU{m=t(Fc&NXYVP|_(@O35k| zod`J%=a5j61aOpw$A7u4bxmTt7%wvShdgzxbiOorvgA#A{WYj*3X3AVes>+N9}4LTCaaNhCX&)z>OarQCL^#9X5 z-^8YX*qtm|w}N_fNK`HE>QzLFYGpOt1kQ-sbX5Md2rDqG(w|pod~4!Wt*?VBc~NOQ zJ`sK6-yvQYJngA81_2;5C%g`-S5MTmM1M=s_BA9=8|Uj$q?S-`P-$Bf4;5ys-wR51 znK#-UubR&QDISjbz!rLIN^K^C%7gwhTrx(Y^KLvO7NJW8jv6dp5h8?{I@p5?(#m?{ z1@fnV$7A1xxa)1e9i+O>X^Ln<|0AbOKe==!eXSI$BJbD|lg1_WG5UAd3X{ZUx-qe9 zV)qKz7ZV67?Ww|Xk^1}#^?MbN{}mDE$-dj(Sq6lW?YjUa>(F`3YP!-=f5fUzhOz_& z8unkb6TMP3PHw89U@0IQV+XU@){rCZj*y0lYH77mfazr)Ng2WpW=0*nBpAz|ZYFqHK72>2k^dNEka@V=-0^JiaYO&<2YB93ZQ))Tza*WutTWHBq)~`5Lq0j4o&=WVsKgw)6 zl34Xbag%KK_tfwb@pb`+}u!HCozEhg8Xwxu7>ecG`yNU8INr{iz9eJg@UY za$IQYnIp>O*Qqa7t2sri*E6;mT$sx0ZO6p*>wQWJrmGun3M}r`Ki`-mAWY)`)?xc> zTi8%7z@TkU1VP`FO&a%99O)GJx%^`9^ptgN-)+o>Iab1u?$q^(3kk!|T3WNxODi+; zh>!oT2`x@GT>x)!Si)9+)i~3k+Z_(8`xV@>i}7#u8n`9&`n&u^Wr3;gYs#2rR>B|Vi|7eL;2i0H`NUMSW zN(0)>?LZIMLO`E3?)C8NSO26Kj=UrM06DiI=R2j`Z4LeV%{DCNhuccs?F?ObB(VLd z`=YkFOP*8QvPyBhKTY%6G#dsl74rT&w&rjSi8)dKT~$@6&=+~2xOJ~^X}#OH@NSq? zkakq!6cG25Pg$}fTou<_S#9=-0v-sy$u)*Cr{O9s0C{v=X=dq4!3ckQfk9noNiKhB zQb+C?HUiIcf*+KZn0UA3*iL$d)yu4F=u6op78usoXX>sLB#G-|r}W0qwH+*-&|-&g z=@F*FNZLyrS>K+gaox zQMNwR*saLAjHdZ3LUTPh2bYchXn7CBD1B=s_iD0ln&HNL3Vx_0^s7|?Ld5tkz*5|{ z*jbyo7q#_g{zT&eK~&<%**=g=lC*>9$G9rt0g|{zB;WNfN37I;`FG=6_d=~!A3mwD z&&M9>=bds$_WE++4VUlUrj7na2%$xK{JHk2c(aKDwc>|+tC_OxihSE9WAk~%8GGm} zrU({ZnjZ`}fJ_LqEBdzKQ7#u6fHW-yi!24xx9vyEXa$rfYRAQPUq`rP-g`}6xA$MgK2 z<9Yt+ILN%`x~}(mo!5E3Ua#}Kh6%VnDXQtJSvOc19$_=I?1^Rrt8d&)p+DdE+0c^T z-^je#dPPGu_CO&0qUGCszvI_WSu(Bz1-Aut;$8x^ew7XsS^wqH3T#3 zNO~fctp|MM2k~22EvbDw3f@0aLR_&H1CH~=?z=(4*9N5Glf_QWS~^u5tN9jMZ&a7a zcRaHza#)g3>==y?CJ(*}+09popD23#NS-8Sv}34rq)xc^$%f?3${+3gOHKt7@7%%g zJ(S&$|IU9F0Z=ukKlCWJ`osZy`2m>gZFx#*@M53^W_%$Q5g-ueCe(A$DdlE~&23&> z0OXtLYAavJojg?qLtzzVXuaZg?Rw(jU{kx@AJ*My24S@q(31~8#BJrGpF|ROfT}qa zXNwq(|f1-7q;FaqZusrN%r5qg5 zsr>mfskQEY^Z6>KKSmS?@L8N!h6GX&XgUB@QZ%J|nVr7D!dkZ_25AwDLIa zmM3~fn*tKx`yYGr#){YwrLS8_yQD`StH}nI45e z4MQLI`w4&MAI0-PYZ8eeXb=KW9?zcT7L0ISUdYNG=;H|3rDnxlP}UE7c2cX;&P5m& z{XFr=iEl;o(2u0iQuQB_sQbbtF_EP z4L7s;kNXR%s|hx*Q+K}}KiD$noK(fVfH*fuEk2z@P_Uid`>ccY_1;^`bnGh4k`TPz znlydWqfT>^xHwUevH8(@eQIpB3JMgJnM}~H&+yTcS=g&&JKy#^`0hKr@=5CncX-2( z_G8u4>xo{Y9!Vd0=@Ktb?NtcW#k?z9=s~wXS*jnmm>}nM<&JGseb=L>{*{I{Ulw;q z(Hc8S5~?$IV+nilE5+Y{je2uK{YSdo{zedfA#+@?LjSitIZ%gBgKH$&NM|)AbCfyZ zQtoU;IM3P)wxX&-$#7^FcwKoHg@}q_!Vp4}~|> z=<@|hJl+-JLEECk_U=CCYFS6i?55aLc2=#I>IH2Ez(q`|t~iWUdT?Y7TZ3|8m$!*_ z8vCy$%odAmBb0aucJXb8B-Z%vRd#+K3Q4Nor}4jG*4t><(-+$J4-xcMUtK9%t(`b< zTqb}j)a`MU#hXP=>ZglEoH~*i%TmUJ(``ODAn$y6zjPn}JL{`n{B^zHAo32TM!XS( zX?#FlzI?XtV}R4AbF&ERt{n5H9OYr(%V=63Ftm|MczO^(Xdw?4FH+*b5U7Hha#V7fnCqL3dv zEA@0DWq^ySH9_IG+)&$XBL((=skxuGArcj9HcRH{{c9-EG?K^5qiANs4R7^ze#n0F zlthX>t2{}%nLT-8C3q!hUdB)KUANH@IA*ElDB_RWBAxp9m^57$Y z>$G$Q%{->KpX{hW+VLHag6!{-cCsRQ^%}f`8*7Ez2ZN!;N&an7D>XVsfkV4dye|_b z?`XDKz#0j z1&fJwt63-U1m_fmPi&8n)~bfJNh(&LcqB1!dvL?bkk+&Hz=jwbEVx_mb3B#?nKOTQ z>@+&42uBo}2%M6wXxOGXeP0sQpGo8x`Z&wD#E6$CX@P0^r>v2u zj);`ENGj!dVQK3}5MSMR+JTlbE>W|p@(X>n`B-#*QSMJoRZLHxg)El1L*zl{t5=0{ zy8jqW+G2^(+A0L-v;P>4R)tHeN5@VpFJeBu2atI`uipQ@S0Pmo!=TfgIjK6l*68uq zry~L)(`Vak{EKzFR=ezZAu_&ApQeLUn0WJxFVF}2&FoQbzd0xnt zRk_>n%U#vgXW2xhA8K+Vt{EL%@Q1AcOuz-qOL3>GqY-bjqU%fY(*XAQbV{R)_7Hc` z;x>DiU5cX7*}Ks+ult==%zIOr4#X*0>oT_cZ)A?j4oVLuW1)lq&p^(1T<}_T8oA2# zU{>aim^mKLSn<@W)#*v6>o0)@_~6(ydU#L%1lD5Q1$xEf&i%)o^nq5JdH?b(6_~2$ zmn+{JhtjN3t8F6nk{*)Q5?cmV61KY*Gm02Ei1Z2FkdjQxMM#;I61nJUBBO2wRG=Zr zyj|qG9-X8lqYz1+qT^a9-{IOP&YbW^x$?a(Fm5|_An#VqOcsrJOk9+c+>Iz*PI3Lz zkE-P8zq;zhlhr+%#Kw<`O(g;TUtx8DwaZa7$Bl6Lo$}RK(2v8h>-&2vK-m=ML?*GT z?f#s{4-9+KQ~t;l*MTo{HKmBy!;23G%8V-y5`TaIa~@}VuuYTM+TBkgeE>@;Zzjvt zyDpnTRyS1fT!zUrx16{Em-SLMscrwEW6=q<`DQ1i_q;3Q`-uJUUTsOfdUc{BMt!VL zsspUqV|dTVJ6fJp(m?gtpmjfh)w!TE@xed9ts7x`A(5cHKsb}0R}7ykz3>)0V8ss; ztbjc_{F)2KIABneMf#bU>#k&DL^r=00i-Cjp_I{nDbCc{t%-#n70or6@z(VbNZYnk zZK}`xfd`k`dls*PHhL8HR(jMy)>KRk+#q(9Ewqa{bcYb6u;oN0`BA>Nqhz;k`gj`G zETEUHbQkOaGw)2TD-Z+Gs_Y-%#A6aA(yBi4u#nnMh)5-lZ9y(7juMoxkvKJZ(A3@D zFNR**xR@Cc^)xBx%!WHj5+!${?=n^b95#nt*V9RCj}A~B+w`cVb}4nQlimJQ{SPh3 zk2$!*u2@N1w(@eKP|#uqF>PXFtL$?crM;}dK+^YGKn8Bv;BKegC%XXvTKvX)P>hwj zhkqkQyc~KEM+v|p&cDA@R%1!heD(qK0!Z|7hWIG@5%6YqbAsqKb4hk^8WTV>N`-ohtb z1Uroc_tW{h5@Nd3D3Z+KFgx}KE$w*OCK9-$elzvXB)z|DAN>9L2U(Js_Shvjn(*AU zt7yYv9?8-EqbE4em;2U6(6~?slQMYx!9ohjs^GGXJPeDD0FK!+h6h+j;N&kzgZ_nGIfO=-01*ZoQ3Na#(IvyE9BuZ_t@VGz42QNL-!W z_Q44Fcj%}|7x7V+CkgilzBOxawcJ|`Rkd8Cju30$u zy{|e})YScX)v{IPi5K!s#R;f#=ln|jhxKWlyFJVmr0W~%`zgTK{wGk)oDBAW;^l0C zjvPsYMUEXKm1V=#)g<-@c0AWgJYGvkC|(~XxDJv6%6QA}O#wj8cbZpUp}u1+&s=-F zU%FK7O6_&Y8lT)d{$n!8`AMgg{dGM^u>r-5sJddX<;bIO5I(6cynEm$(Ohf0OgR8qLIn%m4t(H;NC$tn#$H1$-&Bhs`QYd|gFU)E`UX1Rx9hu3EEJ@-lxONo+O{hqq(TPGk(;^8pPsD;q zwi;(^F&s)CLp^LuR>;UVe(06W&CFJGYRV~Sn@Ns6cSK5FJ7qdtle;HE zjW^Q!R=*`g-Kr=IIYVo^>Swbt;&F0E2sRRsF}_vLa7v6c5yN5r4keBZUXl@3)`m*_ ztj@P7f|NT|uazn7lwI85V4G-e|@Ir(@cw z#)(5mo=+E&K*Kc{-x8j;U#|kD18&InRJO=)<5Si) z(4rQ&*{p60e+R0H#bI&Zz51XpiR?l<>mZl|G5jgw1!zO@W`opLg5gGM1w^NKf~@6r zqc5aCj}wdFfgdA&Uq4#r;?_U{;fg7%!0wj+08SY1di7WTgo1Q0<*z(O16X;&=WkU@ z!X4VnNqDqS>fXj#?2>c7kVc(>A>}>-mC|$Enu@ttez|a>;RzAj-F-N;jZB5Jy;p z57(QPAbz?IDsq=LWKD9NdQwZmn`~^r9n;;OpURlH#C!=coGgwOT6$f4{A$(HwsZI! zP;opHp*|^l>N0XFXz5n8O^*h3eZlt!*ajM68Y^WhXBKB@u!iGcOv3HfzxpdFZ>^cT zmoyQoKdxgf#+~ z-O5AD6*e0i?YZnvG35+0$aKKkW19TfA;F-)Otnxgr%PT3>)#7bsF8t9|B+Is47E6Q z)k%kk|HQVTdzD8?J0!944`t3m-cU`ljX3Kba5%EnHI-JC1rQTB^d9(#=?}>3on8 z?h=C855T{kl9$i zvAUvSz%j4j96m1z*HyGghU#c3LVf zsnvGz2^gQ!7G7ZjrXTjqUE3d!FCCe?4GBPU_xnm6TX)rrj(u}6Z+&&WhF9_iDbNH` zVIybc+9XTD^T>WY*(vAru1>$fuAQOjWz_>)>(<8Y-#Ozyl-hwte@b#ASl?@4O%7|z zGh$bSJjRF`je$ktjSq$cZ>^}M#tcp);$I5N^+`8n;FzSoA0zq9al*0TCm8oRjMRxFO2)FuhfKb^B6LB-O$-;ntJP{rc<>y79*&!}r?fBVx3h2oFqE}- ztbPN1vTr4+qp_)@xlaGXpf2UYFSGd7n)%$P=My++m7AtMe!W9{(oLSViR+rYA4n7` zDcn*lX4hGC7#F~V|@QNe+4}B-i6=8kw1YLuz7GhGay5a%fN$^P|hp%pM@zn*|s8ks-9#P_AJH@HrIi{!NrUMF6uwas9yHHrqv!oR=B{m|^C z)Nwg!6Ep5E&Qe64|3BGUC$= zMbazt?Lf_VwboeFEbO(yDV~z2Wgk0&nu*18csFcuBu-}PED)S>o%s1ue2=^)TIC73 z-hg#zZyHkSK7d?_4!Opp1o@wP_YhatR(QZem8RCN#nxeR?mnp{}@=(=P z*U}2WHgHOxQh=I7S|4S{{ErjTy1VB>2U2F0Ry>F2EOVQ`L=)X4@ypNATgT}EumJk! z7FT{aw;v}7B5F4}d#uNW(}VaqNw?2v&k$QJxjurb6c1fZ!f=)FHoN-N>8jtQn(Nhdd9#C9P{GGh20EtAVC%&V z=X)C}!qg18e0>{+5y@=vMuMeBtLeQ_N$TSm%1;N=+B)p#ztSh9%c);s)Qp zV>YUaG!eU9-ovj2U%&mQ^&IU4OpAy@6;g33qS|$_KonOb8oe;P{?pMb9)ie{xXNWo z(xW}X5!}c-GHOTGt_k)jJ+i8Mb%(0aUrg3N($w+&{vY92b3{x7pC~9?yV0+22ATr- z_4YZ`$ruG7`9FE8_+IjR;9-qha;9l2ORb!xvJ~|QdMJb0hvP_&ZC@&z&OaS=6m5$+vt@&pit|n8dadj z3*1en82ZQP^2*VX2-4nR2q;agjHwa-WiY%f0D%hEKSLVQaKm7hveMC((a_0fw3=gC zXR89LF~NV>abHZzSBV|~H?CDS3|TDJ03;t?L`o<61Ltoq@3pX1SE-)V5r!-r-id2z zxK^<0bvl10$m@nuk~0QCYT$qFjNvN=FH%^7q*dExb?kC_XjwT8o6rArZJR>3bT*vUcD&EbGm>>tvGhN{;QgHXO@gUxh zu#nr6^p1L4%_H&kn@y6nD@w(2b15NX&fm&`VJJ)qIF~MwYqCM&u%G7rEb$1G7nF#v z%Z*$@Yk~6*=6>svb6Zfb=(eKP{;i$BHkq%JaE8|r2`SrYmp-Q$XBTCop;iQy6?R{p$cJnA{(?rn!~Ie$O< z*6nC?OyOnR2nHnQ3@>$eJVDV@rMij3FLbdLGPf1=uVKYU;#v|33Z*y!+96Ldtsz9` zIU>yWeQN)iv~p@d!>})0j~2|z<-{zn?&?)nKe-)E8rdxkIZ_sDww;VkVIb!ppwXVs z%=t9wU`LaZ2jDqcIga3Y!vZzi2*QfnaX0UgA|2|AZ^#psjM=65628pXo34&j#>-l8 zTU)t_mFshf=4ri6h0K;xL|!^I}=ojtz3bM!rLCa8VZ`DFQQkRj=+Oyb}2# zz_x-gv^u__Hn9FasE1;)oe|5KdfyhI{Db=zHMUY{^9~xB!RE23GIN%6yI&+Gn||0W zy*LPWrg>xMj};H4<5Q3lxR3>laz^u}=&^F^74KHzr@O zh7wbs5kCM~edVC)b7+k7!=gG?l?$h;vnOzPk-^Oz2=)FtTgKDyrTYdg8R9+zQJRZ? z3f-}C>m;@8xOB%*a&^SfY+E^GUwsU*s6_Z+Wu94DI=sSw#W{dwmB76sBGft_1sr1y z#ul!P2jPNPT)L?xI6q;sTCjJYfWM=$^0@HS#piO!ax|RY_A{xwo*UasN8Jb zS1(Z!mv|#tYNWw!RI_zR&2EB#TVKC;K^cFk`+uf z_JBslyn<2dd(56UC(z)i!1diy2-|aq7jA-b30C%?huRjXa zZ=spqrw0xF)Kb=k2XazREn8V9uDiIVj+a^RyG35i6p45Jf;`!q+%+5s@UCX|)fhEU zyL;L2h-@kVI81v)3tsk`9L2+!WAaQ5!1S#5WZ}BU(uflU6h|U2~dNZfQ;~R;Id4`$Sm5WD`6q8veCB-S1dc^nC8 zXV)*pQdhD0;X1pSf0pu+zH>ik{FwWjkDG6Y^UEj&NpTmfKParSu@ttTlypTOLz2|AM^c!E%#*;c28>)V znggt@^_HlWJ3)%FN2F(@`}J95dEzF2B_pEaQR(&fpPR9LXVTP}v^n`l%Q%>S$Ei`o z%&$&XH?x-OBQ;)KWAoaH{q$8G;iU55rn$b&nBC`kt>U`xGRGSpcLkNbM2?Q{QR+dC z&(ZOA^u%H9=MRxn;bF8%h1=}h@oi1SCSW6=kl$6Jzx5)VfuDU ze|d{ZNU$nhkw{E8Ih6k0AK3Ca<32e!{7ETB%NaYvbmt!$1IL|!(C{(%0(s58EC87} ztLipdw6!z*N{_YXknxi#vrcX@u1V>awRsxre$#??J$)E|!}jB*@S*g_ zRdpDBHI14+aHy5hkFuSJ_@hg!FH*=;_?~;)Kfc7rV^OdZV>U;lXYqf%1XauMx^tX2x>^vMWt0&mA74#ca{kpF{m`HUNu~e%&sP| z5}~oSt5nMm3-g)I{j8*^DklFaZRSaJ)RP*Ovd+6_ z`_Yyx-0FCDQEp2DE+*Ez!WP;cbA%!#Y|7U-l{6HWJ~T4*I*?O!>r~Itrutv0>z9n! zuQ5GoV*?3=%XcwNiiYf)j03|W4_+rF)XM}ng(wI8f$2fdHmX~=KB${x>)9v6J{1rA z;n84E=W zmwMiDp=l&LxM)}%+az=QETLv~_w;K0(=o$JcET3R(-!5>>>eI|t$B?8hq}xWJ-An? zlcXF{fkUuF_<}JNw)QOBH+mM8+xU22wtA%|W1)H?fIMwebZNGu0W>75L)~(T9 z8D!sqc*D)3@f^Wtj5j4AC5vV*@9SERpW%COR?>WBXqoxR6Scuxd6{aN0lc&c6GksG zexK<g6B_x9a&G-wyAylzi}oy69J*--IODlUo@V`DUf_9Z(Eq>vobJ;w=Y}#i%53 zATfDgEP}Rin*jkXKaPNkq(Wds0E9~oG>^rkg4HRlZ@KJuSN$baCXe@S;oT?pf{T7I zY7%xQHlM9}MA}dIZ?0fweQGBsbc4L!&|j}u2JgG7`NbZ(m+?%g7lMA$`Z7}9FRN{1 zM2k%@seFy#Y5yHeA+@@`1ZZJ-g$zZe5xdg?pg!+kB!}WvhzP&5>85fQ$>H&*ff1G~ z@J@{cCqtv;jo7kt%kk|Q4wKWJ8KuJs>On7@hfLmxJgZSp?GGN@jZxKpmhlq*E#~>M z2h-$K#|wr{lP%4yUNs%Eacxfx(#1{&>e59 z9OBXl#=eyC2|+sV)?UQ$*2$5q!xqmrVtp4^Fg6T$bpettjIY1->jgn+qr6GusvEk& zUzZQi8}(nlozbW_;f!i;ZvxLIt@k%0h_)d|3-g0{8Ak6=OUGanEQ- z6G;vLKuc&{l}*VK%1n;EiDW^Mir7Q^h3LEx8KU0QV7IyAr@OeqGaiF$DBs+5-ruAs zy{3n6d2joxZ$d5FRpP^@e@AZaw`YWX{!8EZ(c+1C)u{45t7)3d-PkMyjs-bAzYc!_Tr`+C8K#pl}L`tJ4ze8m6NH4Cf$h;$+A#4X~-BGEpPW^T>guQeQ} zL`_-VxT#(q5yABP4ex1D6J=;S(AB-!g^7>kiBQ+r%B43e*B)>lS@9h!9;@eNS@c_^ zD?XSY?zvw+kA40zm+dj-vDst(wHbr0Kc@qF{j|skV zC7!&&S;Sx`x%qA>s@i_PD-nZu3?7e}LpcJF6)w8{#Sno1fGtJsR9Eejz~kJCcOn9U z+iz7cFW5)hdE41osO#75w2T{bRfRM)HZY7Z?MH;KAY-<+j9U8xw*3`0tArkSjBI%T zZ)((8zjrR~S@v&$UsRAxwur)Jv#83wlg0rfoF&tLwc|b4!w^W=!p#@%L(2EoV|~FM zRZ)SR&>#`y*w94tsbE(Em!T#@G(y#vK6C7x$RL(E#TPQYwol zwJdB9*LLP;CIlryej{`0YQ_+FTkSg26uBXDQ}tZEv&8sB?R`2VBxsRtyB|jl;;jC* zCWIJs9@C)*Xhf^|hq3-17Ml`S&Z%bIFmhxp>7t%EYlN>*kTaZYOUU+I;>f^=y5>}L z7gfn$ZBd;X!ZR3vRl@KCd7^ zMj%C6A;FKk=2VyO@7INJ1E<^p1%c%ljJ3@%28ZH-d=@V(%*;JRyASbr%UPwHX|>56 z475>*og4h(kru}s9ukS*T{%Jb7yH2-u>}S$SD`#6Acnyt`o!`Od0N#io^28&@PqqU zU%-u0zMZQe{BGqRi#m&-1mZu*B@p)ODry^F>UbsRCqK9hw`hn9Ia>0<5-ZsitB-|%ntbWn4ras0%8Ju2+Xx!(cgpSj1S z*HB_00Mr33z`YNM&40k|&w$Ds75aO`dg$+@^B>CmH}so&EUWNdAfOHWdR~io68?#4 zCTp$K!dwD6Au}~th5+P{_S8yKCyXoJdI@$MuIcN)P#Lde^n7h$m*CSnSKXS1Cu024cy9QQaP)zGn4!G zEmBOMPcs-KUOTd|B~sE^KhpZvbTN>3^1S0tAnQ`YMU(#Ja_g#VzSk)a%~<5+RVk_H zdp#ECPADjzxps38Cy*1|B@#Lg|VgP}B^c5gr z6<8CPx<{eT(WFks(qfyz9k0$xJjXg&1AHZg#}2bGZ8v3C*M*#(={V<3F|$&_wWaGJ;a?r}|e_ZrIY9w4q=|^HbviS7OldZ9tCKQd*6v zaTQf^a#Oe8mFJa&U9`PTd);}}4pF!H*hlI&yJLKs@ieUORSUi@Re*N!&X(7t=?RMC zbz9@q{@mgt2o4i=yYZqbSfQLdy7Gl$oV&GS+XCDhY9sD6(;^3D?Ey>a%LQ+pML1!p zTEn|XMp`#%_Uz3u1zc~J7%(>?p7S0TTWC2DG zGGFVO8x+MeKcz8KkU(=UL}xcpwK41v9N7Q<+lw{MC^y?_n%BBB!|9jK&y5lG;bnA= zpiaLr!Pp>QTs`tOMM|zCSVuA@HS+#u&6t~C88ebTIoNDZyAE`tDjHH?Rff9RtgYLn z50xDMiarQ=u+}~pm6pq$aZmMjvJL+XAj={ToRbyB;QTC`;}D z1P*r*_u#aj0!xjQ9QTV&K3EARhZ!K^FvvxCK-hU?^?4O|Nk!s#9#Wx7&t(@yrVd*0J;(Re;P-P42r2FE={KfMXFhqlgDs1|R1&n7F z(<`axwtu#&n$TKAv*3qfcpXruSg^+q6P2(C(4W$0f_sfRy-i>?jFWr5%^QzEa85;% zWvhe$Gb-{sI2aNg8_HG72XM$C=c{%T3H3mW{S&Ppf#NU9D?HYIb$vBM3!pcS`eU(r zkbshM%uq&f@N8lENxpomeLc9 z=aSGEP;}zTbl}P@Y-MINkFlX2IDVaexNr3JEkH!FZ zL7enL3ZyrEo|dy)1O>mS%uRfB_&GqhCFWMqivBzYa2B@#0apK&6wo^%K^a*Sfa9l3 zBPP^1y4+AfKhG8J<8&SVAF!-zHczB8h4i04(8aI^;L6A#fM#3z1@z`yt>bwpOkYw@ zp)W34;u+7B_a#?}>(v3V4}%5_OXo=-g#}z&f&nQLO<>gNGB)aP!fW+(w(j@CkgEF; zO0PZ~gHR6R9-P-vz726}!0Z8<|LBjJQ@q)qbq`GPBeNywU(noX=_LLFsA`3=42PpalkzrRebD3VK$Zi`xiq?Q!IQ z#X5VeBRvpU4Sa^`3uyfA)U9vK(WbM^s98d8qWwlqY$0F)cpHaNSA2S<;UhnjM4?5q z90Uw-O%_bkEoDS8O;xF*QtLcal`>v*6>rd}9ikwvInKlRN+XMKdTuHD31y-PA6&;7 zPiQ^c5xEwq&Ig$?ukGQ-OXA&o0|00-Iu1r9(C)vIUZ&y5HOX?e5_pfwDRM9_j86%& z$Z#u%Zt4NtJSh=XNEFjR(GGAs0KMzDi%+1*a|0Jh>17IhrS^d8h!0U_t+KU_M6=HT@&s!t?XaDSh0X%AQ@mX?-A0ZqPbzKLm8L&1XizBcW>3!| zL8#=#D#eW@06-cEbh;U+y2-3}T8fXFz`=~xtDG8qqIk?60;AkG4$$RbWy0*+>CM|qA#eZ&-O7c=rd$z6`W^F`)z1VriHTUazD-IGz6y*+P{Ee<5 zq;XeNuX0znCo6*(I6PWeCJFJ#s1^NAt@b5yl@C%K%I~cH$RjDqkAv(>YB57^&|>F8 zZx9W9#&bXOXW)orBv8Cn9xxS-xH}~Ab1iy0ITKT0otJ`~&J%;~*(Ymix&h_C#8l*2 zqU$M?d|?VkUEu9Ag8F5;!)&mkR(F!VpYSbjx2xhk0ON)j>pBC+TgPe}%B_IVW+tQI>Ilvz&f7!fgt zL~ov;z8%Ymj5GHk0O*sY15en}Gr|KC={P+cNKA-bqz(<>lB4hvO=Zvs;MzW5hH_`W z(Wo~!PO6>fc`Ek8!AKN_EUMoMv?z*GCX=VVbUhC#Aj z(GS(For@|hoG~zj{4dE6P(TIx>R&$S#*u;r?q~0#f9;kf@gs>n9Tc$3MbGlKv$Zf{ zwS62Gr(IllPunVuRF%9UZpK)lrq2tA3i@=00Ov8+0;|lKI*yV*?d=kw3FAp!IA2g+ zKJYJf>S5rH#v-6Sn?0kgn~g~*_^(3~&o{k5{g}L(j~E3aE({SfOGp*iy-qsMZ)f;i zEvG(=s6=>Wo$JKyG(3Jn<pMt*JT#MhRcq%(Ty88*8>^UxMauVcSqd`xh}b8U|A5o!AjT>w_o znnk%pvF6_+-%e4&6t2sj)p>&Q9DzPk=8b>B5*owq$=*uo;NCLrMbU^ zU`&8=_&*uafs}dKsx%}xVYg`ZyT}3IGxS@k<$egbEke(dn<`#Yiz9BRf6-Xv-h6q$ zyr>@jUrE)0E+z1D*xA09$yOgzZ^`GSmJ<~fV2q)$R&@kUii;lpG1#_QP#B8xwJn$0 zJa~8k@mY=Z%hP_jBFE(mHeG`>w;WXD!^Y*z#lN$*&Zli@1m>aHAT@ zg+h~NxLZN{e%;}snvZmkWo*9)^V8^qMN0>q<*$`@E%Lrt$KG>&1mb#Lv-6#XbeUlk zGLDOSk=ci+@DgjH!E&;cu~v0yLJ^cd9_vdw?-*OD$h1lMWEy}=rR)}d4<5v z)u>_kCrNmll+KEF`vSmP;d&wSHXEGF&Vd+!2ul3SRAot z3@z~K_Ccy{!~E}Yo!7l{vRK=M^6s`Zs$ll+xg|I6&PUc8$Cd9jz!0s>Ct7u^rM8&p zb`;>mm{fzS*Y-@-LlQ7y@oj2M@T9uAf~Pnmao<7paxJrii-~+BXfmWC%M##juCxw- z_Zb{VJcBaCia0sJ{Eu3epZcIOGCY!uvtW6PkguBD9x?7JOZ`N)`G8YJ85@3a^?^}z zc!+SW*_9agj#PW)TKCq+KBo_bVmvAN1-J+yDd2$oX&h1q?VNt9%-+6ZJopV@&0_y7 z4q&f8fAz;dCItM~!CMLYKUT2){Me=6iP2wQcIfYA{JWvevqN0e@fN#C9#YvXYy;e5 z>Yr7+qOY@Lt4d^S{V##sSnXwdVudgU8~NN!+5%9e5=3IqRne1!ZvmhHQ+3duAo(SD z^c+$3w^{&T=v!_Y-ZP>HB8kBm0m{dbeDFTTGsdm_^x&fH+2~CaLY<@@`zw5eevplNM8|P1>lh@JG6MAc+Z$Cy2f>MJ3-^Q|o-c#-U!0ujJb+#-RLih@9(AYUAZV{4|;QyFmj6* zaxI=ll(Ro1d-d-ZUFL;xT%QpX(GAqv0mr8ARiE zbX}Cmd)80v^60Wjn#}}y)#5`kUXqnQ`JLbTsr~won)5nrO!+wKwo8FZV=6)IBL}CY zs0{QeYG#HFkQaS!5eK5A{Fm60a2fhJN{RIHFKY2`E2)`dkp*WJnrig3Sw~#t?LbZs z27U+b`o^uDiKm@Hvr8Sb_dGNEiOHOK@hZ+!p0^|Pe}BRk&MPGd*kqtZv4zhM@$hDQ z=$*Fq!zB&GG5|q=8e(isqTRX4e!Xh{I@eq%rqnC}JgU?2j zL~((rNMuEady{EJNH5}RfL+~xA!eq=z=ck;3VFq6eYeK^t5mpKR*7FP|Ldsxe}dBe zwn@hB%E=pgK#I=bAOBJXjHP4dUZ=JWnq|hs1z=QZ)d#mF{GZ=NwY9z>-DA z{vxCPE7kAIzQV+UB!{zBdW6rVSc&Q-C%6RmUw?itN-6681gs}~>-<@pm~7hMKseO`7=x~H#BWf= z#V~Ch3NH63F8L+q!XsP;p!jwN6yNM;n7e$PS(b|st)%kHz?d9cnW?>!Vllwa2jyBB z|2k$@JDHQR2=4%?E>tD9C6=~$O+YqvC%Tif_uTx2Z)@RY*KCGzi|0%#ime)h+h33% zjd)WzcR(BmIH;U_&A%O6HqKqTtkXE-W*<1Y0}xCCp%Uu@;>V-+8aM^3pn7UYWJe#L z4e{gJL3F7rdxcp8smDIf_mQ9c+eGqtttr}9zANmOXMty`9@NnPqs%mE{_J81hEudi zn!t74whA&Jk^~SEJ0ZItwd?yrvgd2#U1Zq}D&>1!%aohIkpSoptp`G*XrgjWNN?c5 z7?uASu#}NRltY$rT>Gs^nw)+ftsdFaukv}7Fg1Ny9Msa z_W{>0Bh=v-Ptor_cl5?hOTx;@kh={3=3%rCMD+!yez~dDCRgazc<~wme1O4aq0Eh-(Vn&g9f>#$S zL=-Ymtw2`Xon4*1TSqIEI+&r^KRd~M^z^;s(W$RLozCL9@)r!sG|dU$jq`!PY;a`TjR&`Y_9guD5MY_kKq4+DnU$?05zlBm@F4H9 zGNKZRxP@;@%V=5Mv}|i{S>3rUYZO}s3#ZW*`K%cnt2F<;i|+I0+_-H2)JL_0HN2Xj z@Cb+Z|HCqTw(4iqE;YHwD9x%IM+y)xaZueO)DPbB>%{DeX;_5V#1Dpf{xsTu))+9_ zi_yvHGV&KK(1Q)KtEZ8=B%rN>7O%4#0X*UQA;1y9ML-pjMGck-=ElG@lmBzg1Yrk&ejp*S52c1adnB+(~tbwbY))4>*HwKgxr5zJ?b$xT~2)@2EBR%PI zRFnbsPuJ#U{q3uzr?<>ukoC(f@q-a$C5$x^!1}`0N{y2l6lP~M?d6fdbxUMNvMmg9 zvaM)sB!h5=_aLWBBJ5;OA?eTa1y~EqugP-ad+A0tieJ+)v8 z9M)Ta+&(Or03rmh+G`cy`92m6sU(5!jho`J7c&mj|8Rs64kw*ynW<%A(+g_1Z*2*@ z3{-Gv!3MMGulte#JV~Z<@Ch#ZN(|wF4nSfodmB_{!@~5>SjSJIZjAi&ioj0L3k`KK zNUfT#d`whE@Jwhgze>}!Q~EX z>sf$Cj5R6|0n~ojZ-BQPPEfAH@Wz+*#huy~(79H^OJ&KK33|FUAZRfJA}+qjJQ(s9AD*w9jJfM>J)$wJ{gsvjpn3WZl*(T6HG z0|F(77PsP$fNe)xa{OQ1y?0oX+qW)?%ca<{QU#WxAkst(y(|l$6cJDe9SMjKsz?jX zjtZfO6s1H(dO{DO1yCUoA|NevPyz%95Ge^I1nvyD_TG2zbDrm%v(NATan~O{StQ^5 zW*KvgcfNC!rV%WJSN0;*?r4D>e;#)K%lhvvak|p^oT#88;Jf^d6n+;y0WM@t1g@M6 z=)Y+JZZrFmrXC9Gc7Mrut>)nN26FIaVqyBv3(|}y?UhKs2uMI66kQbd*7L0^0=Yxsf#8B5l&@b%=;)wQ1hWX73<$u%R~uGT ziC({Lby58_0e|{?r;bA(&PWygfHcyUK_CY%3JW+qR#ZR5*k+D$I-D%6rs@d4{D`~(JLg$0)(cfTuK%B%zH_AkRVX~MYym>*>|vF&3=&6FdVPE-Q_&(UY15Q0liT_V$q{n8I=L< zKb?Lefg>u2tnhoTbmw`qb63#ZdF%;`{yn>Cr8A7yyymIAzY^o4jlq?FT=#*CHPe2j z(eZ@%bEph{;H4W_6^XH$9|?Syf7jh}^U@xuyw{&a_eS)ZGGDD zy0(V8)cC@DHy}}F&u6lLBUd2fWw#t$T0hp^!Q#Gpj5%!#?>>r^u~5;+`u4TZ=wo?< zcMeTqwYnmYIKUkk+7#`wtkJHMqIxed+pY3wX&`!O>EHFp^h4urpnAHEirgVzK+=~O z{Ku;7qMh09!Z62S$6j*jW0RrO8TpJiCBrQNSEj zT5)G#MGu1awoPoP1w{V{L*LQMPVsKJo#ri&I5(qUk8W=DzFp-v>?ZWY{f0PCwVwe9cl~e`1Pqlw?+xfN`U@6r!<)v9699G~|M=&JT|Z2` zIdvn3wp_e*|1nY=XmaT)_a<-y|NM{s7yPZ0gS0rX3jAZT{T~tqJh=ZKcmuwIaBLpP z0)R@uVglqjQMN#(Ias{L;O-9h@ZYZfR_2PC$#%bWSvQ)4_&8@Sa8!Jq8QHs+;xvV> zP9kVrNCf5aie}Dnza$(Tod@UKN{__bT1XHhMGBWkT2%`k+v)}KPb5SVRP+R2+lt(6 z(QCAd9s`jby@;4DT_5Nj5UC9Ofsy^eZi8ZSJk@ibLyP=ug?~Q^h5{ZnBHQ=+Hjt!j zZ9p8*;XKk*fr>P&_{q%4CzL?oZF|+HveWn7%*kS4bDX=L{FQZbbMzk%frH7@qMdq% zH+yz+w%TKKWsy^nCAicKppsnE}Y`esp^ z(;t%txOdQh?aJAPzwf^LegO8@wCPQY(XseK+2g|`sWS3b7d)#^!kz*jH{U_#t%k2n zPkZ{#vo|Mw*JR6gXk2^1_*Yqc@KyfkuBS&a+q(9h^)+QJSU`#YcsU&F2~;7 z*C^Y^@rB&6QZ2YCI+qZK!B)FK<`3N2NN`v=m!=do(%^6uqn!$r$zu>c{jy;d5%M>` zTszUEOs6}-gGh4f`VF6jI5Yq7_8vpiw4!!R?M*8!5{PvwgBPg?i`{%q$ZfVbxG?gv z8C;s$8oIg6IsC=TA-BQN4+rw&y6)6D3vNO_||-$__!0GsIA{Wi4pui zdf$R31UEnxi9R`d! zp#E3ON>xRZ3O@juH97%ejE$$2E%^vHvFEhfZf8aD1&$Q!)p_+CGy1yborNv!`@pWQ z#zp7yEAlamDq_wh-r^7`fKUd>V@-Am(nc=q*9V7HP;0f4TRZX%MiMrCAv{BZ!*5*d zk$wD@azC;T`sJpWhypnanM@z|4g1XA)35y%_=xI2`nUE-D$q-ke`NXu%n zTzZ#%;LX>1B&Y^^1YBL;|L*ZxMxTxOF z;@X%&=TU5#)WdBg4w79#uc9sGoHOJb2zftuuXV@;eCWDr1(PvSj}6IDl09TJwII6# zSI;!3C}x4%x1x~GDTgCAr8FiVnCzpMknY3vSDUI2VF>)WW8@tSZ0v=o!q#M&(%1TZGVuoVkYgU3D{{{yR01#Wbo-Oq(Y$% zb#T7w*mvSFvv{X%L)@@!D7AInk{&Nu6>2IvK}( z1$Zm%OG=c3_mzr})Fp>1F(tWAK^C{7j#o+2S4SEVZiGIQ`y17j)isKuWZps9P063M z28W0fmni$t0tXf>2&$gwnD5`trfn{1a^4gzu55^>~z;36;>jIs$ExE(DU?>7<^ICmflWi$l`;C9#m5Y%8EX2ZO zt^Qd2OhY7uDPbfc$OFf0@w)#(I&PG>AkR3X`|T2JnXE1+17CspeNc3JGn^FtPhwhtiUw;~@^i8>p~a$i@-O zh`LD3_DY$rOi38}%gi?ZF|PryeGu~ASJd|tOL=PB`3u!KjPSsRl|or^YhEIK~MU?XKN@Q>8Y>H z3ta2a`msT3wQ6&B@zy0udj)t*_M-D+-*JHwqTkMx*Hlgo9;CTvTLYin!2H*j-a~=Z z3d*96uy3caO!Sssyw44UAn~AWUvux~?F`4lgUS3C>CE5F{tLD8f9DO0ci+Cv#G$bg zQd@Qt1Tq1`xp+4hLjD^68^t^c0JD7Q+qDaLmv_=ay|}|((1g3IvtsArQ-%pYWs>v! zq_=F$RTzM4dyMO${yX0P#Lg7!RJd_yQqGsa(beR6nj5<4TkdwtBOtxU)}IeLaP;I2 zn1-4>8G7B*RnH0O7a+M@(sB4S1n_u$mOPE64_$08rjFk^h434FeqYi@r}Sp&=?k@I zn?VMF=UtM49M+W6m@#K(1NnrhtL?t-Io0p_Q3Hlt?X9AmF8&K?D0&V86u)VQ;%1gx z3qs#vg*s@TwOK0XX#G!(2w*tDj$)*2bKj_NjWeYI@$J(r&Ab zgTO&QPF7oPKkk`Y^&5fTvT@(}zYR?Om$ra#%jR__uLN4MJuAy(yr^ql{X)Bs9%l&c z@t|iS*M@iR{g@Lr-yRffum4fT@Jpti-6$2fGAye9;^#A%=x?72w*UMRgl}p*eIj3= zQ$)FI!*AO4dF@Jgs;cei3)0zbUv8VLpI9KKlG|M)m<#hmnz;@jTAMh2>9e(&%;tb| z0ElT9bNLg7BpwV3w$VNWy900HS8KjK+2{anRSuSs-i<2@i=88%=Y-}#54BJnHU^5 zew14D4C1b5aCYACOPNRa+j~`m53{Sh>>b?X(>&c~C}sU!AT9^@(5>UC*eiBJjoJK! zl7k4rrFNqSmGkBMtfhV3Jm=z8Gfy**OtNq>D4KH(_+w+=-n6@rb~2Q7#K_TZ3aMWo zw+eh~WQy2b<;|0oe5P)wb6NExn?m+cowEhb)t`Id%ItieEBUPLrq~{zUcM5HOeR0} zZHIT~6<491oiyj>Ol_pQTbMd*M!-E%xXc%wR8$ttZEw}X18J?~$?kA>ZPC>AOJ)Xg z1q3sQ+PE#m%*i^l$Cv=kb9rL%bk(*8hb$^%a~Tv1-hw3cDcvc) z48!zy&b*c<2f{2aP@BcWMP+;X3hjEz2p|h?jhziLXV$0909*tZUX8lC7W3-?0qU{yMl^}B3==Pv+RJ2n80JJ^D_Vr$mzdCm47J4gY3KOqm7p-w=p0( z>uF#?+U8!p3H&-FuLuD3YS6D!+Y{;g+&ph_TmU|8G`;;P|Nk}^a^UE)*AQ|Moj1?I zjB>ZxM_K$^Cc6a-JkdA+DN&w$+m`qe_)bB$F?WQ>7eh!x3peVauwgvUk@;*~&Q7Oq z$*-J7iU|u-#ZzjJi-CVu@q7_gj8=4#Z@gscBDp6pWK-c^RpF>&0L&oBb6MvS#6(2f zEc4i_2l^2exVQT6G8Mml3b2gB5D@PKh%NI8^5i-X|10OCn#22dR)&0yO7Cw^5d;Y> z5Eo7C7Fk`X+x9`zE;-1{d9(#X`DoNGA~`Q(h@d)RV(D?T!y%P0!f1g|y^#1k3buuB>;R;Dq<5 z>iJ(F_efYrc{pdw2U#+qd7l>^DF%Ir@L~Ncq2{xwovx|KXwapEvy7>@D+O%Qs!S<amsNtmb7Y0Dct!M1Gd3d^1$Y&FvX}rW#CnHJq~bD$F>3> zPw^eU&nal*GyW|$D-EG%iRb5Z|LmiP<&nv=30#BW)ClIQ^G91}rB*3v5@?-D*_x5Nq3 zP_`?$Ti1|SB|l8%#D@sS@9!>R6s%L5F)MrpNsoX0kD4TTgIZHEyP;aTgt$?k!x z#>LULb}y$6G;Qa+;*1GUZ5qN`L%8*tX`=e2k6jX)5EMnHRg8Gy; zy51|MHaeGkj@e`064P(1A!akA8uVaber@s|rGxF%8M%JXj@uLUVJe4T6`pzvTu$S+ z{nMF?M`~dLL+EcJ0U$|}>Wu2I^!er^!@bx0Qu<8?wY39b8*C4EJhpi*ER}z%V>HWr-S9(gLTcPtQF^Vk#NfKSiu>ni)duJ= zv+r+}@z}7~^vv~=<9_s@u?M^9v33KiOU14GH`;#!*R!ZsJE(uIA>o&S_VB=)-9ft;$Rvrz>!q#>v@e5|`QJSYW~7KV zxX0FObwBU5vBR&{!fWFR)qRLPwLz>7)cQ?OS?Ht$D!4f1e*3kY3e6u6wmXv179J>s zYcgeBPv^RpjbF`_Feb4|)bC4Hp8zPgqw%E3(^KROv30q-(|TimJ?zzXI+~xh-7~ay zKq=@-xCiP(@u+Y#N$*p|!>DUuS~=ixEae(WkoYTkyTd=LHgcHQ6$5OP-3#_cQt8YL|Nb)0=Jk`ZKu zWE_HNo>;0;P9eOVDw~g*l>a&Kpo9#zVbs<}{>a_CUr6yQ$mi8Bd;{}&yMlI?l`C3F zsnz4iaIsU#h5bol3p%I9Rb5*3I~Pm%j)YbD>R9=F|J5zOpdp4t#op~cB-iu{WoUFy zzav;#L38Z>Xqkr*_H^vDrnTd#I}fDj4^Ji4>zoqbh*ZR;Vq97cU)!{M5LdO?Mm zAeWViSUN$Ef28oK=R-o*RxCg3oT zBsirnhrhX#M?_j8#p@En`F2W75T!G>;5f_tJaffol&Z9rIvvU$K0Utbc^Jk%w9@Q8 z{K}LNW;aW-heZ^5ODY>MVoldA4x}#Hs@Sh-eH}{Qu)SWhu;JLg_Y0^)C?ZBrD)<~E zLfw@u2Bv9C-&KD4bnytc{=mu+?v`H}| zzy5)gGl7X$M{=xSRtMp#mlX|#dos%u7=54l+N(_L)W(+1+mFb;c(a}~t+e)dKH|`Z zxRxl>W2H;jE>>Se*(CISUu_n4h`(!Bm_(H3>css!h|X-|`8+$eUX<$88I_UeV(rO^ zpR73*Xzx*wN=*XJDY4{0%FXo0Ev)=t=C9g>4b4&a`C;x_o0`zi!z5w3R4G;@JE(Vo z;NO^kdH6&)a`{P$GBbI;O3m+ekX^NH%>pazYBQ!u2$vnTwt(x8#D0<7_zPyMdHF!t z57cNOYepd_JhSl^H*&>)2#?I1##@-n~ zhXX){5ZiRlqwVD8zIOcXFoK3rfh5Yr^)Y#6bs|JhXGNkr_gyv(W`GiXPuhTh_!<`NZ@
G4$$RbWy0*+>CM|qA#eZ&-O7c=rd$z6`W^F`)z1VriHTUazD-IGz6y*+P{Ee<5 zq;XeNuX0znCo6*(I6PWeCJFJ#s1^NAt@b5yl@C%K%I~cH$RjDqkAv(>YB57^&|>F8 zZx9W9#&bXOXW)orBv8Cn9xxS-xH}~Ab1iy0ITKT0otJ`~&J%;~*(Ymix&h_C#8l*2 zqU$M?d|?VkUEu9Ag8F5;!)&mkR(F!VpYSbjx2xhk0ON)j>pBC+TgPe}%B_IVW+tQI>Ilvz&f7!fgt zL~ov;z8%Ymj5GHk0O*sY15en}Gr|KC={P+cNKA-bqz(<>lB4hvO=Zvs;MzW5hH_`W z(Wo~!PO6>fc`Ek8!AKN_EUMoMv?z*GCX=VVbUhC#Aj z(GS(For@|hoG~zj{4dE6P(TIx>R&$S#*u;r?q~0#f9;kf@gs>n9Tc$3MbGlKv$Zf{ zwS62Gr(IllPunVuRF%9UZpK)lrq2tA3i@=00Ov8+0;|lKI*yV*?d=kw3FAp!IA2g+ zKJYJf>S5rH#v-6Sn?0kgn~g~*_^(3~&o{k5{g}L(j~E3aE({SfOGp*iy-qsMZ)f;i zEvG(=s6=>Wo$JKyG(3Jn<pMt*JT#MhRcq%(Ty88*8>^UxMauVcSqd`xh}b8U|A5o!AjT>w_o znnk%pvF6_+-%e4&6t2sj)p>&Q9DzPk=8b>B5*owq$=*uo;NCLrMbU^ zU`&8=_&*uafs}dKsx%}xVYg`ZyT}3IGxS@k<$egbEke(dn<`#Yiz9BRf6-Xv-h6q$ zyr>@jUrE)0E+z1D*xA09$yOgzZ^`GSmJ<~fV2q)$R&@kUii;lpG1#_QP#B8xwJn$0 zJa~8k@mY=Z%hP_jBFE(mHeG`>w;WXD!^Y*z#lN$*&Zli@1m>aHAT@ zg+h~NxLZN{e%;}snvZmkWo*9)^V8^qMN0>q<*$`@E%Lrt$KG>&1mb#Lv-6#XbeUlk zGLDOSk=ci+@DgjH!E&;cu~v0yLJ^cd9_vdw?-*OD$h1lMWEy}=rR)}d4<5v z)u>_kCrNmll+KEF`vSmP;d&wSHXEGF&Vd+!2ul3SRAot z3@z~K_Ccy{!~E}Yo!7l{vRK=M^6s`Zs$ll+xg|I6&PUc8$Cd9jz!0s>Ct7u^rM8&p zb`;>mm{fzS*Y-@-LlQ7y@oj2M@T9uAf~Pnmao<7paxJrii-~+BXfmWC%M##juCxw- z_Zb{VJcBaCia0sJ{Eu3epZcIOGCY!uvtW6PkguBD9x?7JOZ`N)`G8YJ85@3a^?^}z zc!+SW*_9agj#PW)TKCq+KBo_bVmvAN1-J+yDd2$oX&h1q?VNt9%-+6ZJopV@&0_y7 z4q&f8fAz;dCItM~!CMLYKUT2){Me=6iP2wQcIfYA{JWvevqN0e@fN#C9#YvXYy;e5 z>Yr7+qOY@Lt4d^S{V##sSnXwdVudgU8~NN!+5%9e5=3IqRne1!ZvmhHQ+3duAo(SD z^c+$3w^{&T=v!_Y-ZP>HB8kBm0m{dbeDFTTGsdm_^x&fH+2~CaLY<@@`zw5eevplNM8|P1>lh@JG6MAc+Z$Cy2f>MJ3-^Q|o-c#-U!0ujJb+#-RLih@9(AYUAZV{4|;QyFmj6* zaxI=ll(Ro1d-d-ZUFL;xT%QpX(GAqv0mr8ARiE zbX}Cmd)80v^60Wjn#}}y)#5`kUXqnQ`JLbTsr~won)5nrO!+wKwo8FZV=6)IBL}CY zs0{QeYG#HFkQaS!5eK5A{Fm60a2fhJN{RIHFKY2`E2)`dkp*WJnrig3Sw~#t?LbZs z27U+b`o^uDiKm@Hvr8Sb_dGNEiOHOK@hZ+!p0^|Pe}BRk&MPGd*kqtZv4zhM@$hDQ z=$*Fq!zB&GG5|q=8e(isqTRX4e!Xh{I@eq%rqnC}JgU?2j zL~((rNMuEady{EJNH5}RfL+~xA!eq=z=ck;3VFq6eYeK^t5mpKR*7FP|Ldsxe}dBe zwn@hB%E=pgK#I=bAOBJXjHP4dUZ=JWnq|hs1z=QZ)d#mF{GZ=NwY9z>-DA z{vxCPE7kAIzQV+UB!{zBdW6rVSc&Q-C%6RmUw?itN-6681gs}~>-<@pm~7hMKseO`7=x~H#BWf= z#V~Ch3NH63F8L+q!XsP;p!jwN6yNM;n7e$PS(b|st)%kHz?d9cnW?>!Vllwa2jyBB z|2k$@JDHQR2=4%?E>tD9C6=~$O+YqvC%Tif_uTx2Z)@RY*KCGzi|0%#ime)h+h33% zjd)WzcR(BmIH;U_&A%O6HqKqTtkXE-W*<1Y0}xCCp%Uu@;>V-+8aM^3pn7UYWJe#L z4e{gJL3F7rdxcp8smDIf_mQ9c+eGqtttr}9zANmOXMty`9@NnPqs%mE{_J81hEudi zn!t74whA&Jk^~SEJ0ZItwd?yrvgd2#U1Zq}D&>1!%aohIkpSoptp`G*XrgjWNN?c5 z7?uASu#}NRltY$rT>Gs^nw)+ftsdFaukv}7Fg1Ny9Msa z_W{>0Bh=v-Ptor_cl5?hOTx;@kh={3=3%rCMD+!yez~dDCRgazc<~wme1O4aq0Eh-(Vn&g9f>#$S zL=-Ymtw2`Xon4*1TSqIEI+&r^KRd~M^z^;s(W$RLozCL9@)r!sG|dU$jq`!PY;a`TjR&`Y_9guD5MY_kKq4+DnU$?05zlBm@F4H9 zGNKZRxP@;@%V=5Mv}|i{S>3rUYZO}s3#ZW*`K%cnt2F<;i|+I0+_-H2)JL_0HN2Xj z@Cb+Z|HCqTw(4iqE;YHwD9x%IM+y)xaZueO)DPbB>%{DeX;_5V#1Dpf{xsTu))+9_ zi_yvHGV&KK(1Q)KtEZ8=B%rN>7O%4#0X*UQA;1y9ML-pjMGck-=ElG@lmBzg1Yrk&ejp*S52c1adnB+(~tbwbY))4>*HwKgxr5zJ?b$xT~2)@2EBR%PI zRFnbsPuJ#U{q3uzr?<>ukoC(f@q-a$C5$x^!1}`0N{y2l6lP~M?d6fdbxUMNvMmg9 zvaM)sB!h5=_aLWBBJ5;OA?eTa1y~EqugP-ad+A0tieJ+)v8 z9M)Ta+&(Or03rmh+G`cy`92m6sU(5!jho`J7c&mj|8Rs64kw*ynW<%A(+g_1Z*2*@ z3{-Gv!3MMGulte#JV~Z<@Ch#ZN(|wF4nSfodmB_{!@~5>SjSJIZjAi&ioj0L3k`KK zNUfT#d`whE@Jwhgze>}!Q~EX z>sf$Cj5R6|0n~ojZ-BQPPEfAH@Wz+*#huy~(79H^OJ&KK33|FUAZRfJA}+qjJQ(s9AD*w9jJfM>J)$wJ{gsvjpn3WZl*(T6HG z0|F(77PsP$fNe)xa{OQ1y?0oX+qW)?%ca<{QU#WxAkst(y(|l$6cJDe9SMjKsz?jX zjtZfO6s1H(dO{DO1yCUoA|NevPyz%95Ge^I1nvyD_TG2zbDrm%v(NATan~O{StQ^5 zW*KvgcfNC!rV%WJSN0;*?r4D>e;#)K%lhvvak|p^oT#88;Jf^d6n+;y0WM@t1g@M6 z=)Y+JZZrFmrXC9Gc7Mrut>)nN26FIaVqyBv3(|}y?UhKs2uMI66kQbd*7L0^0=Yxsf#8B5l&@b%=;)wQ1hWX73<$u%R~uGT ziC({Lby58_0e|{?r;bA(&PWygfHcyUK_CY%3JW+qR#ZR5*k+D$I-D%6rs@d4{D`~(JLg$0)(cfTuK%B%zH_AkRVX~MYym>*>|vF&3=&6FdVPE-Q_&(UY15Q0liT_V$q{n8I=L< zKb?Lefg>u2tnhoTbmw`qb63#ZdF%;`{yn>Cr8A7yyymIAzY^o4jlq?FT=#*CHPe2j z(eZ@%bEph{;H4W_6^XH$9|?Syf7jh}^U@xuyw{&a_eS)ZGGDD zy0(V8)cC@DHy}}F&u6lLBUd2fWw#t$T0hp^!Q#Gpj5%!#?>>r^u~5;+`u4TZ=wo?< zcMeTqwYnmYIKUkk+7#`wtkJHMqIxed+pY3wX&`!O>EHFp^h4urpnAHEirgVzK+=~O z{Ku;7qMh09!Z62S$6j*jW0RrO8TpJiCBrQNSEj zT5)G#MGu1awoPoP1w{V{L*LQMPVsKJo#ri&I5(qUk8W=DzFp-v>?ZWY{f0PCwVwe9cl~e`1Pqlw?+xfN`U@6r!<)v9699G~|M=&JT|Z2` zIdvn3wp_e*|1nY=XmaT)_a<-y|NM{s7yPZ0gS0rX3jAZT{T~tqJh=ZKcmuwIaBLpP z0)R@uVglqjQMN#(Ias{L;O-9h@ZYZfR_2PC$#%bWSvQ)4_&8@Sa8!Jq8QHs+;xvV> zP9kVrNCf5aie}Dnza$(Tod@UKN{__bT1XHhMGBWkT2%`k+v)}KPb5SVRP+R2+lt(6 z(QCAd9s`jby@;4DT_5Nj5UC9Ofsy^eZi8ZSJk@ibLyP=ug?~Q^h5{ZnBHQ=+Hjt!j zZ9p8*;XKk*fr>P&_{q%4CzL?oZF|+HveWn7%*kS4bDX=L{FQZbbMzk%frH7@qMdq% zH+yz+w%TKKWsy^nCAicKppsnE}Y`esp^ z(;t%txOdQh?aJAPzwf^LegO8@wCPQY(XseK+2g|`sWS3b7d)#^!kz*jH{U_#t%k2n zPkZ{#vo|Mw*JR6gXk2^1_*Yqc@KyfkuBS&a+q(9h^)+QJSU`#YcsU&F2~;7 z*C^Y^@rB&6QZ2YCI+qZK!B)FK<`3N2NN`v=m!=do(%^6uqn!$r$zu>c{jy;d5%M>` zTszUEOs6}-gGh4f`VF6jI5Yq7_8vpiw4!!R?M*8!5{PvwgBPg?i`{%q$ZfVbxG?gv z8C;s$8oIg6IsC=TA-BQN4+rw&y6)6D3vNO_||-$__!0GsIA{Wi4pui zdf$R31UEnxi9R`d! zp#E3ON>xRZ3O@juH97%ejE$$2E%^vHvFEhfZf8aD1&$Q!)p_+CGy1yborNv!`@pWQ z#zp7yEAlamDq_wh-r^7`fKUd>V@-Am(nc=q*9V7HP;0f4TRZX%MiMrCAv{BZ!*5*d zk$wD@azC;T`sJpWhypnanM@z|4g1XA)35y%_=xI2`nUE-D$q-ke`NXu%n zTzZ#%;LX>1B&Y^^1YBL;|L*ZxMxTxOF z;@X%&=TU5#)WdBg4w79#uc9sGoHOJb2zftuuXV@;eCWDr1(PvSj}6IDl09TJwII6# zSI;!3C}x4%x1x~GDTgCAr8FiVnCzpMknY3vSDUI2VF>)WW8@tSZ0v=o!q#M&(%1TZGVuoVkYgU3D{{{yR01#Wbo-Oq(Y$% zb#T7w*mvSFvv{X%L)@@!D7AInk{&Nu6>2IvK}( z1$Zm%OG=c3_mzr})Fp>1F(tWAK^C{7j#o+2S4SEVZiGIQ`y17j)isKuWZps9P063M z28W0fmni$t0tXf>2&$gwnD5`trfn{1a^4gzu55^>~z;36;>jIs$ExE(DU?>7<^ICmflWi$l`;C9#m5Y%8EX2ZO zt^Qd2OhY7uDPbfc$OFf0@w)#(I&PG>AkR3X`|T2JnXE1+17CspeNc3JGn^FtPhwhtiUw;~@^i8>p~a$i@-O zh`LD3_DY$rOi38}%gi?ZF|PryeGu~ASJd|tOL=PB`3u!KjPSsRl|or^YhEIK~MU?XKN@Q>8Y>H z3ta2a`msT3wQ6&B@zy0udj)t*_M-D+-*JHwqTkMx*Hlgo9;CTvTLYin!2H*j-a~=Z z3d*96uy3caO!Sssyw44UAn~AWUvux~?F`4lgUS3C>CE5F{tLD8f9DO0ci+Cv#G$bg zQd@Qt1Tq1`xp+4hLjD^68^t^c0JD7Q+qDaLmv_=ay|}|((1g3IvtsArQ-%pYWs>v! zq_=F$RTzM4dyMO${yX0P#Lg7!RJd_yQqGsa(beR6nj5<4TkdwtBOtxU)}IeLaP;I2 zn1-4>8G7B*RnH0O7a+M@(sB4S1n_u$mOPE64_$08rjFk^h434FeqYi@r}Sp&=?k@I zn?VMF=UtM49M+W6m@#K(1NnrhtL?t-Io0p_Q3Hlt?X9AmF8&K?D0&V86u)VQ;%1gx z3qs#vg*s@TwOK0XX#G!(2w*tDj$)*2bKj_NjWeYI@$J(r&Ab zgTO&QPF7oPKkk`Y^&5fTvT@(}zYR?Om$ra#%jR__uLN4MJuAy(yr^ql{X)Bs9%l&c z@t|iS*M@iR{g@Lr-yRffum4fT@Jpti-6$2fGAye9;^#A%=x?72w*UMRgl}p*eIj3= zQ$)FI!*AO4dF@Jgs;cei3)0zbUv8VLpI9KKlG|M)m<#hmnz;@jTAMh2>9e(&%;tb| z0ElT9bNLg7BpwV3w$VNWy900HS8KjK+2{anRSuSs-i<2@i=88%=Y-}#54BJnHU^5 zew14D4C1b5aCYACOPNRa+j~`m53{Sh>>b?X(>&c~C}sU!AT9^@(5>UC*eiBJjoJK! zl7k4rrFNqSmGkBMtfhV3Jm=z8Gfy**OtNq>D4KH(_+w+=-n6@rb~2Q7#K_TZ3aMWo zw+eh~WQy2b<;|0oe5P)wb6NExn?m+cowEhb)t`Id%ItieEBUPLrq~{zUcM5HOeR0} zZHIT~6<491oiyj>Ol_pQTbMd*M!-E%xXc%wR8$ttZEw}X18J?~$?kA>ZPC>AOJ)Xg z1q3sQ+PE#m%*i^l$Cv=kb9rL%bk(*8hb$^%a~Tv1-hw3cDcvc) z48!zy&b*c<2f{2aP@BcWMP+;X3hjEz2p|h?jhziLXV$0909*tZUX8lC7W3-?0qU{yMl^}B3==Pv+RJ2n80JJ^D_Vr$mzdCm47J4gY3KOqm7p-w=p0( z>uF#?+U8!p3H&-FuLuD3YS6D!+Y{;g+&ph_TmU|8G`;;P|Nk}^a^UE)*AQ|Moj1?I zjB>ZxM_K$^Cc6a-JkdA+DN&w$+m`qe_)bB$F?WQ>7eh!x3peVauwgvUk@;*~&Q7Oq z$*-J7iU|u-#ZzjJi-CVu@q7_gj8=4#Z@gscBDp6pWK-c^RpF>&0L&oBb6MvS#6(2f zEc4i_2l^2exVQT6G8Mml3b2gB5D@PKh%NI8^5i-X|10OCn#22dR)&0yO7Cw^5d;Y> z5Eo7C7Fk`X+x9`zE;-1{d9(#X`DoNGA~`Q(h@d)RV(D?T!y%P0!f1g|y^#1k3buuB>;R;Dq<5 z>iJ(F_efYrc{pdw2U#+qd7l>^DF%Ir@L~Ncq2{xwovx|KXwapEvy7>@D+O%Qs!S<amsNtmb7Y0Dct!M1Gd3d^1$Y&FvX}rW#CnHJq~bD$F>3> zPw^eU&nal*GyW|$D-EG%iRb5Z|LmiP<&nv=30#BW)ClIQ^G91}rB*3v5@?-D*_x5Nq3 zP_`?$Ti1|SB|l8%#D@sS@9!>R6s%L5F)MrpNsoX0kD4TTgIZHEyP;aTgt$?k!x z#>LULb}y$6G;Qa+;*1GUZ5qN`L%8*tX`=e2k6jX)5EMnHRg8Gy; zy51|MHaeGkj@e`064P(1A!akA8uVaber@s|rGxF%8M%JXj@uLUVJe4T6`pzvTu$S+ z{nMF?M`~dLL+EcJ0U$|}>Wu2I^!er^!@bx0Qu<8?wY39b8*C4EJhpi*ER}z%V>HWr-S9(gLTcPtQF^Vk#NfKSiu>ni)duJ= zv+r+}@z}7~^vv~=<9_s@u?M^9v33KiOU14GH`;#!*R!ZsJE(uIA>o&S_VB=)-9ft;$Rvrz>!q#>v@e5|`QJSYW~7KV zxX0FObwBU5vBR&{!fWFR)qRLPwLz>7)cQ?OS?Ht$D!4f1e*3kY3e6u6wmXv179J>s zYcgeBPv^RpjbF`_Feb4|)bC4Hp8zPgqw%E3(^KROv30q-(|TimJ?zzXI+~xh-7~ay zKq=@-xCiP(@u+Y#N$*p|!>DUuS~=ixEae(WkoYTkyTd=LHgcHQ6$5OP-3#_cQt8YL|Nb)0=Jk`ZKu zWE_HNo>;0;P9eOVDw~g*l>a&Kpo9#zVbs<}{>a_CUr6yQ$mi8Bd;{}&yMlI?l`C3F zsnz4iaIsU#h5bol3p%I9Rb5*3I~Pm%j)YbD>R9=F|J5zOpdp4t#op~cB-iu{WoUFy zzav;#L38Z>Xqkr*_H^vDrnTd#I}fDj4^Ji4>zoqbh*ZR;Vq97cU)!{M5LdO?Mm zAeWViSUN$Ef28oK=R-o*RxCg3oT zBsirnhrhX#M?_j8#p@En`F2W75T!G>;5f_tJaffol&Z9rIvvU$K0Utbc^Jk%w9@Q8 z{K}LNW;aW-heZ^5ODY>MVoldA4x}#Hs@Sh-eH}{Qu)SWhu;JLg_Y0^)C?ZBrD)<~E zLfw@u2Bv9C-&KD4bnytc{=mu+?v`H}| zzy5)gGl7X$M{=xSRtMp#mlX|#dos%u7=54l+N(_L)W(+1+mFb;c(a}~t+e)dKH|`Z zxRxl>W2H;jE>>Se*(CISUu_n4h`(!Bm_(H3>css!h|X-|`8+$eUX<$88I_UeV(rO^ zpR73*Xzx*wN=*XJDY4{0%FXo0Ev)=t=C9g>4b4&a`C;x_o0`zi!z5w3R4G;@JE(Vo z;NO^kdH6&)a`{P$GBbI;O3m+ekX^NH%>pazYBQ!u2$vnTwt(x8#D0<7_zPyMdHF!t z57cNOYepd_JhSl^H*&>)2#?I1##@-n~ zhXX){5ZiRlqwVD8zIOcXFoK3rfh5Yr^)Y#6bs|JhXGNkr_gyv(W`GiXPuhTh_!<`NZ@