From a5fc9016be0687beea487b53e698b4db68c3b0be Mon Sep 17 00:00:00 2001 From: gSpot Date: Sat, 27 Feb 2021 18:41:29 +0300 Subject: [PATCH] luci-app: UI fixes --- autoinstall/autoinstall.sh | 14 ++--- luci-app-ruantiblock/Makefile | 2 +- .../resources/view/ruantiblock/cron.js | 9 ++-- .../resources/view/ruantiblock/info.js | 48 +++++++++++------ .../resources/view/ruantiblock/log.js | 40 ++++++-------- .../resources/view/ruantiblock/settings.js | 1 + .../resources/view/ruantiblock/tools.js | 37 ++++++------- .../view/status/include/80_ruantiblock.js | 51 ------------------ luci-i18n-ruantiblock-ru/Makefile | 2 +- .../luci-app-ruantiblock_0.9.0-1_all.ipk | Bin 11675 -> 0 bytes .../luci-app-ruantiblock_0.9.0-2_all.ipk | Bin 0 -> 11537 bytes .../luci-i18n-ruantiblock-ru_0.9.0-1_all.ipk | Bin 4347 -> 0 bytes .../luci-i18n-ruantiblock-ru_0.9.0-2_all.ipk | Bin 0 -> 4168 bytes 13 files changed, 84 insertions(+), 120 deletions(-) delete mode 100644 luci-app-ruantiblock/htdocs/luci-static/resources/view/status/include/80_ruantiblock.js delete mode 100644 packages/19.07/luci-app-ruantiblock_0.9.0-1_all.ipk create mode 100644 packages/19.07/luci-app-ruantiblock_0.9.0-2_all.ipk delete mode 100644 packages/19.07/luci-i18n-ruantiblock-ru_0.9.0-1_all.ipk create mode 100644 packages/19.07/luci-i18n-ruantiblock-ru_0.9.0-2_all.ipk diff --git a/autoinstall/autoinstall.sh b/autoinstall/autoinstall.sh index 85fede1..b8862c4 100755 --- a/autoinstall/autoinstall.sh +++ b/autoinstall/autoinstall.sh @@ -10,6 +10,8 @@ LUCI_APP=1 OWRT_VERSION="19.07" RUAB_VERSION="0.9.0-1" +RUAB_MOD_LUA_VERSION="0.9.0-1" +RUAB_LUCI_APP_VERSION="0.9.0-2" BASE_URL="https://raw.githubusercontent.com/gSpotx2f/ruantiblock_openwrt/master" PKG_DIR="/tmp" @@ -21,9 +23,9 @@ fi ### packages URL_RUAB_PKG="${BASE_URL}/packages/${OWRT_VERSION}/ruantiblock_${RUAB_VERSION}_all.ipk" -URL_MOD_LUA_PKG="${BASE_URL}/packages/${OWRT_VERSION}/ruantiblock-mod-lua_${RUAB_VERSION}_all.ipk" -URL_LUCI_APP_PKG="${BASE_URL}/packages/${OWRT_VERSION}/luci-app-ruantiblock_${RUAB_VERSION}_all.ipk" -URL_LUCI_APP_RU_PKG="${BASE_URL}/packages/${OWRT_VERSION}/luci-i18n-ruantiblock-ru_${RUAB_VERSION}_all.ipk" +URL_MOD_LUA_PKG="${BASE_URL}/packages/${OWRT_VERSION}/ruantiblock-mod-lua_${RUAB_MOD_LUA_VERSION}_all.ipk" +URL_LUCI_APP_PKG="${BASE_URL}/packages/${OWRT_VERSION}/luci-app-ruantiblock_${RUAB_LUCI_APP_VERSION}_all.ipk" +URL_LUCI_APP_RU_PKG="${BASE_URL}/packages/${OWRT_VERSION}/luci-i18n-ruantiblock-ru_${RUAB_LUCI_APP_VERSION}_all.ipk" ### tor URL_TORRC="${BASE_URL}/tor/etc/tor/torrc" ### ruantiblock-mod-lua @@ -40,9 +42,9 @@ DATA_DIR_RAM="/var/ruantiblock" RC_LOCAL="/etc/rc.local" ### packages FILE_RUAB_PKG="${PKG_DIR}/ruantiblock_${RUAB_VERSION}_all.ipk" -FILE_MOD_LUA_PKG="${PKG_DIR}/ruantiblock-mod-lua_${RUAB_VERSION}_all.ipk" -FILE_LUCI_APP_PKG="${PKG_DIR}/luci-app-ruantiblock_${RUAB_VERSION}_all.ipk" -FILE_LUCI_APP_RU_PKG="${PKG_DIR}/luci-i18n-ruantiblock-ru_${RUAB_VERSION}_all.ipk" +FILE_MOD_LUA_PKG="${PKG_DIR}/ruantiblock-mod-lua_${RUAB_MOD_LUA_VERSION}_all.ipk" +FILE_LUCI_APP_PKG="${PKG_DIR}/luci-app-ruantiblock_${RUAB_LUCI_APP_VERSION}_all.ipk" +FILE_LUCI_APP_RU_PKG="${PKG_DIR}/luci-i18n-ruantiblock-ru_${RUAB_LUCI_APP_VERSION}_all.ipk" ### ruantiblock FILE_CONFIG="${RUAB_CFG_DIR}/ruantiblock.conf" FILE_FQDN_FILTER="${RUAB_CFG_DIR}/fqdn_filter" diff --git a/luci-app-ruantiblock/Makefile b/luci-app-ruantiblock/Makefile index 1821eec..eaa1ef4 100644 --- a/luci-app-ruantiblock/Makefile +++ b/luci-app-ruantiblock/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_VERSION:=0.9.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 LUCI_TITLE:=LuCI support for ruantiblock LUCI_DEPENDS:=+ruantiblock +luci-mod-admin-full LUCI_PKGARCH:=all diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/cron.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/cron.js index db4b56e..7652f8f 100644 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/cron.js +++ b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/cron.js @@ -94,7 +94,6 @@ function onchange_hour_interval(e) { cron_hour.disabled = bool; cron_day_interval.disabled = bool; - // For luci-theme-material if(bool) { cron_hour.style.opacity = '50%'; cron_day_interval.style.opacity = '50%'; @@ -121,7 +120,7 @@ return L.view.extend({ let cron_status = E('textarea', { 'id': 'cron_status', 'name': 'cron_status', - 'style': 'width:30em; padding:5px 10px 5px 10px !important; vertical-align:middle; resize:none !important;', + 'style': 'width:100% !important; padding:5px 10px 5px 10px !important; resize:none !important;', 'readonly': 'readonly', 'wrap': 'off', 'rows': 2, @@ -139,7 +138,11 @@ return L.view.extend({ E('div', { 'class': 'cbi-value' }, [ E('label', { 'class': 'cbi-value-title', 'for': 'cron_status' }, _('Current schedule')), - E('div', { 'class': 'cbi-value-field' }, [ cron_status, ' ', btn_cron_del ]), + E('div', { 'class': 'cbi-value-field' }, cron_status), + ]), + E('div', { 'class': 'cbi-value' }, [ + E('label', { 'class': 'cbi-value-title', 'for': 'btn_cron_del' }), + E('div', { 'class': 'cbi-value-field' }, btn_cron_del), ]) ]); diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/info.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/info.js index 4b9b03d..2e3b047 100644 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/info.js +++ b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/info.js @@ -105,23 +105,23 @@ return L.view.extend({ if(data.last_blacklist_update.status) { update_status.append( E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, - _('Last blacklist update')), + E('div', { 'class': 'td left', 'style': 'min-width:33%' }, + _('Last blacklist update') + ':'), E('div', { 'class': 'td left', 'id': 'last_blacklist_update.date' }, data.last_blacklist_update.date), ]), E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, 'IP'), + E('div', { 'class': 'td left' }, 'IP:'), E('div', { 'class': 'td left', 'id': 'last_blacklist_update.ip' }, data.last_blacklist_update.ip), ]), E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, 'CIDR'), + E('div', { 'class': 'td left' }, 'CIDR:'), E('div', { 'class': 'td left', 'id': 'last_blacklist_update.cidr' }, data.last_blacklist_update.cidr), ]), E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, 'FQDN'), + E('div', { 'class': 'td left' }, 'FQDN:'), E('div', { 'class': 'td left', 'id': 'last_blacklist_update.fqdn' }, data.last_blacklist_update.fqdn), ]) @@ -129,7 +129,7 @@ return L.view.extend({ } else { update_status.append( E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, + E('div', { 'class': 'td left' }, _('Last blacklist update')), E('div', { 'class': 'td left' }, _('No data')), ]) @@ -139,7 +139,7 @@ return L.view.extend({ if(data.iptables) { let table_iptables = E('div', { 'class': 'table' }, [ E('div', { 'class': 'tr table-titles' }, [ - E('div', { 'class': 'th left', 'width': '33%' }, + E('div', { 'class': 'th left', 'style': 'min-width:33%' }, _('Match-set')), E('div', { 'class': 'th left' }, _('Bytes')), ]), @@ -150,10 +150,15 @@ return L.view.extend({ table_iptables.append( E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, - k), - E('div', { 'class': 'td left', 'id': 'iptables.' + k }, - v), + E('div', { + 'class': 'td left', + 'data-title': _('Match-set'), + }, k), + E('div', { + 'class': 'td left', + 'id': 'iptables.' + k, + 'data-title': _('Bytes'), + }, v), ]) ); }; @@ -167,7 +172,7 @@ return L.view.extend({ if(data.ipset) { let table_ipset = E('div', { 'class': 'table' }, E('div', { 'class': 'tr table-titles' }, [ - E('div', { 'class': 'th left', 'width': '33%' }, _('Name')), + E('div', { 'class': 'th left', 'style': 'min-width:33%' }, _('Name')), E('div', { 'class': 'th left' }, _('Size in memory')), E('div', { 'class': 'th left' }, _('Number of entries')), ]) @@ -178,11 +183,20 @@ return L.view.extend({ table_ipset.append( E('div', { 'class': 'tr' }, [ - E('div', { 'class': 'td left', 'width': '33%' }, k), - E('div', { 'class': 'td left', 'id': 'ipset.' + k + '.' + '0' }, - v[0]), - E('div', { 'class': 'td left', 'id': 'ipset.' + k + '.' + '1' }, - v[1]), + E('div', { + 'class': 'td left', + 'data-title': _('Name'), + }, k), + E('div', { + 'class': 'td left', + 'id': 'ipset.' + k + '.' + '0', + 'data-title': _('Size in memory'), + }, v[0]), + E('div', { + 'class': 'td left', + 'id': 'ipset.' + k + '.' + '1', + 'data-title': _('Number of entries'), + }, v[1]), ]) ); }; diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/log.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/log.js index b6786a5..438cde2 100644 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/log.js +++ b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/log.js @@ -31,13 +31,13 @@ return L.view.extend({ }, render: function(logdata) { - let nav_btns_top = '120px'; + let nav_btns_top = '1px'; let loglines = this.parse_log_data(logdata); let log_textarea = E('textarea', { 'id': 'syslog', 'class': 'cbi-input-textarea', - 'style': 'width:100% !important; padding: 0 0 0 45px; font-size:12px', + 'style': 'width:100% !important; resize:horizontal; padding: 0 0 0 45px; font-size:12px', 'readonly': 'readonly', 'wrap': 'off', 'rows': this.tail_default, @@ -50,7 +50,7 @@ return L.view.extend({ 'type': 'text', 'form': 'log_form', 'class': 'cbi-input-text', - 'style': 'width:4em !important; min-width:4em !important', + 'style': 'width:4em !important; min-width:4em !important; margin-bottom:0.3em !important', 'maxlength': 5, }); tail_value.value = this.tail_default; @@ -62,7 +62,7 @@ return L.view.extend({ 'type': 'text', 'form': 'log_form', 'class': 'cbi-input-text', - 'style': 'margin-left:1em !important; width:16em !important; min-width:16em !important', + 'style': 'min-width:16em !important; margin-right:1em !important; margin-bottom:0.3em !important', 'placeholder': _('Message filter'), 'data-tooltip': _('Filter messages with a regexp'), }); @@ -70,8 +70,8 @@ return L.view.extend({ let log_form_submit_btn = E('input', { 'type': 'submit', 'form': 'log_form', - 'class': 'cbi-button btn', - 'style': 'margin-left:1em !important; vertical-align:middle', + 'class': 'cbi-button btn cbi-button-action', + 'style': 'margin-right:1em !important; margin-bottom:0.3em !important;', 'value': _('Apply'), 'click': ev => ev.target.blur(), }); @@ -113,8 +113,11 @@ return L.view.extend({ E('div', { 'class': 'cbi-section fade-in' }, E('div', { 'class': 'cbi-section-node' }, E('div', { 'class': 'cbi-value' }, [ - E('label', { 'class': 'cbi-value-title', 'for': 'tail_value' }, - _('Show only the last messages')), + E('label', { + 'class': 'cbi-value-title', + 'for': 'tailValue', + 'style': 'margin-bottom:0.3em !important', + }, _('Show only the last messages')), E('div', { 'class': 'cbi-value-field' }, [ tail_value, E('input', { @@ -127,25 +130,14 @@ return L.view.extend({ log_form_submit_btn.click(); ev.target.blur(); }, - + 'style': 'margin-right:1em !important; margin-bottom:0.3em !important; max-width:4em !important', }), log_filter, - E('input', { - 'type': 'button', - 'form': 'log_form', - 'class': 'cbi-button btn cbi-button-reset', - 'value': 'Χ', - 'click': ev => { - log_filter.value = null; - log_form_submit_btn.click(); - ev.target.blur(); - }, - }), log_form_submit_btn, E('form', { 'id': 'log_form', 'name': 'log_form', - 'style': 'display:inline-block; margin-left:1em !important', + 'style': 'display:inline-block; margin-bottom:0.3em !important', 'submit': ui.createHandlerFn(this, function(ev) { ev.preventDefault(); let form_elems = Array.from(document.forms.log_form.elements); @@ -154,6 +146,8 @@ return L.view.extend({ return this.load().then(logdata => { let loglines = set_log_filter(set_log_tail( this.parse_log_data(logdata))); + log_textarea.rows = (loglines.length < this.tail_default) ? + this.tail_default : loglines.length; log_textarea.value = loglines.join('\n'); }).finally(() => { form_elems.forEach(e => e.disabled = false); @@ -173,7 +167,7 @@ return L.view.extend({ 'style': 'position:relative; display:block; margin:0 !important; left:1px; top:' + nav_btns_top, 'click': ev => { - log_textarea.scrollTop = 0; + document.getElementById('log_title').scrollIntoView(true); ev.target.blur(); }, }, '↑'), @@ -182,7 +176,7 @@ return L.view.extend({ 'style': 'position:relative; display:block; margin:0 !important; margin-top:1px !important; left:1px; top:' + nav_btns_top, 'click': ev => { - log_textarea.scrollTop = log_textarea.scrollHeight; + log_textarea.scrollIntoView(false); ev.target.blur(); }, }, '↓'), diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js index c33de5c..c278fe3 100644 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js +++ b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/settings.js @@ -247,6 +247,7 @@ return L.view.extend({ o.description = _('e.g:') + ' 192.168.1.'; o.placeholder = _('e.g:') + ' 192.168.1.'; o.default = ''; + depends_bllist_module(o); // SUMMARIZE_IP diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js index b30a301..671498a 100644 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js +++ b/luci-app-ruantiblock/htdocs/luci-static/resources/view/ruantiblock/tools.js @@ -89,8 +89,8 @@ return L.Class.extend({ app_status_label = this.info_label_error; return `
-
- ${_('Status')} +
+ ${_('Status')}:
${app_status_label} @@ -101,24 +101,24 @@ return L.Class.extend({ return `
-
- ${_('Status')} +
+ ${_('Status')}:
%s %s %s
-
- ${_('Proxy mode')} +
+ ${_('Proxy mode')}:
%s
-
- ${_('Blacklist update mode')} +
+ ${_('Blacklist update mode')}:
%s @@ -136,16 +136,17 @@ return L.Class.extend({ + _('VPN routing error! Need restart') + '' : '', (proxy_mode == 1) ? 'Tor' : 'VPN', (!bllist_module || bllist_module === '') ? _('user entries only') : bllist_mode, - (!bllist_module || bllist_module === '') ? '' : `
-
- ${_('Blacklist source')} -
-
- - ${bllist_source} - -
-
` + (!bllist_module || bllist_module === '') ? '' : + `
+
+ ${_('Blacklist source')}: +
+
+ + ${bllist_source} + +
+
` ); }, diff --git a/luci-app-ruantiblock/htdocs/luci-static/resources/view/status/include/80_ruantiblock.js b/luci-app-ruantiblock/htdocs/luci-static/resources/view/status/include/80_ruantiblock.js deleted file mode 100644 index fed3e8d..0000000 --- a/luci-app-ruantiblock/htdocs/luci-static/resources/view/status/include/80_ruantiblock.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; -'require fs'; -'require uci'; -'require view.ruantiblock.tools as tools'; - -return L.Class.extend({ - title: _('Ruantiblock'), - - load: function() { - return Promise.all([ - fs.exec(tools.exec_path, [ 'raw-status' ]), - fs.exec(tools.exec_path, [ 'total-proxy-status' ]), - fs.exec(tools.exec_path, [ 'vpn-route-status' ]), - uci.load('ruantiblock'), - ]).catch(e => {}); - }, - - render: function(status_array) { - if(!status_array) { - return E('em', _('Error') + ': ' + _('Unable to execute or read contents')); - }; - - let app_status_code = status_array[0].code; - let tp_status_code = status_array[1].code; - let vpn_route_status_code = status_array[2].code; - - let section = uci.get('ruantiblock', 'config'); - let proxy_local_clients, proxy_mode, bllist_mode, bllist_module, bllist_source; - - if(typeof(section) === 'object') { - proxy_local_clients = section.proxy_local_clients; - proxy_mode = section.proxy_mode; - bllist_mode = section.bllist_mode; - bllist_module = section.bllist_module; - bllist_source = section.bllist_source; - } else { - return _('Error'); - }; - - document.head.append(E('style', { 'type': 'text/css' }, tools.css)); - - return E('div', { 'class': 'cbi-section' }).innerHTML = tools.make_status_string( - app_status_code, - proxy_mode, - bllist_mode, - bllist_module, - bllist_source, - tp_status_code, - vpn_route_status_code); - }, -}); diff --git a/luci-i18n-ruantiblock-ru/Makefile b/luci-i18n-ruantiblock-ru/Makefile index d8e334c..fc37880 100644 --- a/luci-i18n-ruantiblock-ru/Makefile +++ b/luci-i18n-ruantiblock-ru/Makefile @@ -5,7 +5,7 @@ include $(TOPDIR)/rules.mk PKG_VERSION:=0.9.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 LUCI_TITLE:=Translation for luci-app-ruantiblock - Русский (Russian) LUCI_DEPENDS:=+luci-app-ruantiblock LUCI_PKGARCH:=all diff --git a/packages/19.07/luci-app-ruantiblock_0.9.0-1_all.ipk b/packages/19.07/luci-app-ruantiblock_0.9.0-1_all.ipk deleted file mode 100644 index 6114c2dca0c0cd9927cf03c6891827bf147358d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11675 zcmV;MEo9OkiwFP!000001MS;YY#p$+Aka`l4KriI%$yTuX67`^%-Aq<(l9eKGcz|0 zGh>sS;Fw?n6ra}>wmWH zzncGl6e}Y${J%Sfzy5s~naqq`jT!%u1B@2l|Drwq^ZaM!VCCfar~GH(;$r`s|Nk9` zqhbHo0P<4c!uvO8+RIg$5x2yp19-M_;n!z(i z$Wx$8@z1w*+C#v75BDGa^h;XC^-a)o=T$QH%guof1IY2a4@-~x$3hLR;#())x_-O20_Q&s-+ozhzst;d==NT9RDAp#fGq^s87 zkvZ3^DC0F(L?C?A<~0Zcn~;vEr>vJJPR@s&Ou4vX>>E*mOzc@~wL)d>damjM;mTc> z_mAGYP)}R6@aM&yh&}{ z@Q$qlQHXt>L=&2?Kkf?6VT5Ig{R8(wA@DaItlyf;f+kvJ6>kg<0`ghCwiOqc}uL4Nkw1b92b#u zuAHT*c6`b|%B}ZPy^aGOhY|8cVSqQ!2CK15_MoCj!X%3+Fs^4%PE+y&HmEONHVyP3 z2KqhT_nR*u67=MpdI+G{o_2Mwg#I~2+}phz@Z`KQ(MJo#8W8L25Y4kX4BC2dr}-Sy zWx4|q)qeS^i=@q-5?Yi<;7k0JDvrlbILhu0x5=9_cq&S6^DG)3I`6-lX1_tNI*vFD z;{&^{)hc@>h4+I4+MVAxwk3mt3t6?lguMdxbgD_D8JUYIWr!9NpjHd-88anX|E3-Z zzb|_|VTtv7t)H?80=|j#d;up-OTY-pURwyZULq!Ch~JlBHX^0)RuQaAp_c}`>WJPs zi5Ay`Gm&L<-i^$FVF?j-?@W$?qOc=4<@zCkjB+y=OD@;?l$t_S9V&+(Mi`-jA!4Ar zT7lXsS3`W{%tdLS{#P*k_=|N!AVEF++qR2QycR|xK+8VQVe%7zAkl^RKHMVz9`KX| zx;mnrAl^KP8v@zwgAD3E{^L+{-0zqJ`vgC4axe}+OAqP50H*W^5S{5>cAJY7JG>Q1 z_xfI6*u3JNx(~$@CY%DCNPt+jb_TM%hzXxLh^w=J;rtO9uOGN?ZNoO~ zc9-EmCIXK0SSP}7L@3vRadkh+XMN6x(`QsNAK9THtugkE-4AWyp}k>c`M04Ecp7J1 z(Kbhoa2%ebF0$|g_B~FUTz3*i!&nH+1k1~ct4Ri3E1daN`C^7@uR&(5hw$o}JbKeRs9R|tMi^{x5yfLiiwQr{aWTfS1Pi+r9k z8XWe8+tj=tkyuXgaHa*cZ3zVMfO^tx$X`rjtUvMWcwwqQ*{dr7O7|llJG0td&nlo_ zV%vdrukqwCYLarUBvY&kY!SdK)EW zeQ)6f+j8nT@qn+Q<0D}c{GPU$y~vBA6%7Daf|(_3(nyPfGGAzj9{hIWuy2l6s0(r6 zsFI-lb#B{$1)gP?DFhrz!hMqr@u3Jvi8HB%g99a1z{}(b+(1ZE-~uZj0{;90!;m%3 z?}Zx5+eK{G>K=u@+e9OYOpHrn?ZSATmV*VcsV3zB-|luiSaxTl<2u1dcJ&!$RMc5w z;YiN5E!+j{I6#)XQxra0fFqp$`|%!(q-sfTrG4YJ#uq9eb4aH#Qk`kM;swgH5?2v$ zfZ{k?;!jp5yMO&K*o~SyGH^|kYS}5GY|_^(lZhC{1~RKx$e_gZcbw@88rd`2D;fC; z7>YMINwRiJ;aM~;hcQsmUvA9RjC?kW%SHbnq!hYxfWwTvp$C7kvM5o2srrsV8ql z`9S=y^N>P3Opb17L?!W{s8UE;T;cZikpjmGU}C3RbcCLH272&n`JUuMZ(Q3G8K z-5n!p95_!n&zN;BZIV!evv zb!6iO>*4Gq>PCkMWeGV8J>k&NnaPseTp-Kz4N&$^hS!5~(aByUq zcY#NAYVN~!%@W7cP;0fvSP%l{$k@zW`mWnO)+Fym2krbqVP+hM${K} zn2@uN@-dujo^c=Zt|%Qg_6P($;1E0+G>@x+y9GYD5H%6E3~BHpCjmQy#K4g)P)Ry1 zgb@D51;N%U-}}beeM}S5Kt-SGPOy)cPc_jIUaarV*cd?@e1h{&y6en7mmwqGWA`%oEz} zy|ykX4wp_`BO6xDG4r+up~^A4P&=yIia4jaZ5fs#8bjvgjNxLjDRH z9pu8PRD}06mA78zsDDLCz(+=gD^qUwn$T@u8dNM_3P}MrJK%l(9PCrF6h?d&zUGPt zG)ADA70OITaW?sF_lvRT?o}05U7xkThxZl#%%@lK@R}L({@3#+Oa{Y;Ww}QIVLxF2 z|0v_9e(_V+=wf+9oq6ji<^rALt~b^g4i^1#qKzb~ijTbRJEOZsV;zG~$}lt4ff{4K zymo3|msrb7rtri9ZF8oPs$N3!7acB$4U_wxD{!vC8-9k|`Elx(EeKy8>~U1xR5X&8 zU;z3qC0wF^_-ypBWT=(VR0y-OJ|6Z;Pli7FOs!w+p@yqvgNt83u@?Lnd6Q|cxkL># zS{5Ax7DF4k$cx?TMX9jL^04V_x~=xby7q4Uw}HHoSn3tF=(&P0_rS4S4hYIsqfng7 zUFdKAz^O%Gn@1H&nu0gj20?yZF!MS>X@;=}y@a0pIlo}xm5y^Yeq&1F1hW~!a(W0q zzGF*2ikv;5_*0w-*fK3E41ygc81cGDLT-+FI;^&2Cy}vI=Y$&tX16havA|~bunKJB zp#9Ce4m@Tu%<-6mp*@FXmKS}mSRtJ6(;)*7K*ohA`(K?&N-*0Y9F4w?5w?K);Ux%1S}7NGQ2Zc*V>Zg*lX-C2fjiMFsQ)LhATFyk~s*_<=akh zzh8nwV@BK#SdQ!k2>%LXB=7kA2DsX`Dr*NV4Lt*TEGZw~WX?{1|Y9c@La!*+OkDST;kyqr5miS{uA-qFQ|9o?Chk7zjCWF4w z_{CgB0zrDMi$1^4H!8OJp@{lzFghuCQY}Lh8c2tqWOpsq&4RPC+?HkM(X>Xw`+IIC zt6`hfnZOVS+xmhkzB@SW9*n+=ukP4Q*Ux0phTt)P;ZZC^PVsnX0v^2nOW`FNtAxv9 zWef2im3TPDz+xa=HsiZ3FUu3A>OsM>e3=A}Acy}VHn8bzc^%tErdmXuiMki@$3cC~ zfLsMhhp0XTP4xP~{%VHdi|NtLTHhcV`v}jPh(#%STX~eI1!s;(M8pLQ1iS&?uwHd8 z+yr&0x9e2-==E#xkw5FKOIUdfZF^0ar^y_&RI8>joGD3^B<;J}@51azrJPYELJo@h zk7LA;qtMoe6ockE=;{{7E*A>Vgh@>tT;DK91@`;~Be!)<>`=(ZkzqhxkpB6R2zgtD zVtp;OT5np?Bv}!)^5P+WM5>=$GfP9%%6A@s5l^nEscHYtG}uX4RbA(>vD*NhJ4Sj; z!_ycVa=VN3Jq2e6!=fL8N&+uCYH!K#+D4D*h&F^|Y9sr zsCqvm1LT*h5xYXG8|FRS?S8^tam`vzdLrMb!>XIoOk_(Oe>o1KXpjRm2Jfln_~yQD zOF`n?;=XC0M*jk1x(u%z2;r)*eZYO>Vo)q01T@j1->$-$38#3IpT2=ZvJc zQ7pvrQja1WB^8h`@3x>+%CZ<0v@9ZOrSbycKWJhjth#F5?-qt1_hu*B2)-aD+30a+ zW%<1>I8M@m>ypJ?yz%iVv+L)3+?y!8}*UbS{TT zC3c-kya5D)`?8j_#zm19ruYpk}_lShp8JM#rk+>w{ed}codzXh>E z3%0CJ6e?h&?Ci3m7Reak1quo2d9ahBpc}P=4Z!AJcSzwFOE6Xo)u;zAj~qay=VoO~ z8PB}WlQ4%SW;v7FOmTv{Jl`T}dLnBLDf-H>q(V_P#k=XzJKd(p*|e%XFo1El-01Ib z8Oi+;#m+7u&$Xdm;NPA6$ZM4qMkQgL6+&=(KujdujEP)t2t@xOR?1@uM?=K+NAKLNH&q z6GU2xYn~=HU$dr@LmJku>6dX>I+A}+iv$K+78S%k4!cHrHqp?=s;hCc4?2f)IUG6| zw(WGIl2a%?@3y%H$>^6n9975rUJ4Av$jXn}#f+%6pJ;3QgsopR^8f-G+k*0HqUkhr zj|{oJO>)Oyb?)!Zv{0~p|J+Ccx8v$f>_)#uwUj$@8K#Y7@x(;aK{w6JAsg841i*>{ z)Yb$XhtMlQ@P0SYZjQ$yQZP}lwOoVf=)B&9kFb*1ct1PSLN(H=N6_m_;f%u)3CTvar=_ zzNIZmKe(6qg)4|1!)`d)a$J;zg+Te2y7RQT4=M`lN>1`2Sbe>~*K zsXeGaIv>QXZX@Eiz+R1Lj#2U{S$I7R5WF_?qpSOV6nq%Pk)qBo>I>P%O+y(b-x3Z) zsINj1JiQn_05i?zXm6QCw4kw~jgAW<%MGE5w0GwYR)f9fUJBG%7>FK|$aF}T*x{#5 zdKN>hY|e~?OFR*#joeA$ZR52~A7>1CEv|%hLbl!PzV{%a%|xPo@fULn{LI)!m;6(~ ze?w_y0FQyTHrlfmltgW+@b&FVZ+*ZG4bppDP! zy)FGet|d>V`%;d6j>o=-2lqB5(1rV);Wnr~y-NDSL9DG7I?k7A|0E_;9naegD?EXe zMb%Bo_K0bsHL5J`|aZ+v%PbVU8B6Y^=jZRFa}wU&rjv)3c255UT|foLT} z@QMu4-G-#+nhw2dp$p~fLD=niV-7v*;Rgjg<8|EDg@}g)_ijXDM?!i5cNq;D6fO9* zj)@q29CadPij3BapkZkC4QuCjfAUzRJLiT<42-;@|dkupe*X5+5hv^k@NC$s5~1_rPM0C&utei1t60bcQ6C z4Jt)7_`p1rMk8*+i0>SC7EI!RQUG4IJX@4nRfNxV00VtbCduTK#yTv1az$;*r7A+d`VfnxueOT~^(xJo8KMnWXtUgY2|iT{&@&m9 zR$oecrvh%K=!f(%yC>*&UYwjicvS#eM53+y=UpBp*Cu`lW3_(CH*RE)CROOHorzaS zq^%N2+9Gk^#eYJvnKzwuDkLk{>AQ2%t%-MPp0c@Ac@OA!5F_J6e*m{;aw4-Hv8b%f z?Tt|tSX(Y~zwN)0k$olSF)ncSARVR7&irhxM3!y1O^8#6rI=g|5KU2$xnOx!S}1`h zjqw|Xx4aZm-%fVny;ISuo3-&DbidWdU!?NE+icud8y>K374<<+1E3PtVf`eSvPnR_ zoW=Ppw!Dg5SX>=2IL}cj&e)wuxC*jRUJ3IZZ91zYNUg!(x@i>Ihk3M&8&e!YH>_@k zSjeVaKA0GT6f?fU*g|H^Erc{JFr5uizw6_bIx@CUH=5Gb82(9S@`c|Ckw$&oy-ftG zL@5%@`&=ET;VBh1M{0jYUK1CiSRY+YGsahkrLoQ0NI}p4@NutveK>d*I(Vu#>5?BD zKI)6dqEQo$3D)h(&tc)If!U%?2s{ZaB^;Gqqr*W+a%?CZF9#E~Fj;=@nt;_WX2Znp ziMB!AX&j$)^0~1K%MI}Kgkl~TO%cTx<8cwp;C^?w(;CE0eW^%nEqF%8_Am%4)r-*m z(sKmu+*Q3qygbW{kkL57$qB>U7vVCZ@iD4ag5=1Cx0xUJ^0yZkWv0r|#O_{7ZNpLV zYWs~x6Ub(aa97bLY1xDsGGta#=$a+E36?qce{7Zf=;5_Y^lmdB9KK;}Rk4iA7uJmi z9m$}dClLFMxpOoms=Sp_yEkVH)%h8xq^P@e*M9?GlReF^xBuZ9yinQ5X7T#ul@=?` zQfDY~@jyLcr5Bu}qPoHq*mxI97qx4(8%Y=MYv)Pd!7_^X-q?<47jdIC)KjYDF6}~R zoqPEmx81amIxcCc(<2`BWej34A^@45cv(0#CBGS zMb0%enusI<$)|uFkLd)qZiX(2u9l7QeaASi=PqK-Y9y=|@kNQCEwZEY@095lVgC88 zN2}7%(u0H!<`S|*eg=xSy3p`_NA-c87UnZC0xA~2ny?oQd$?kUE(vR#Fk0jB^t@a- zi>Ba43_^~6GaMBOH=;BPy6zqSA@{;1JS_e?nJjiid z#h#%?)6w`fCPf_WIZ14}wuw>+MOoSB&aP0Qz|8U=OAUN=s1AnJm?C2ndMniLb)J%& ztz5Ie6`}9P8ju#C54eW48M#JIeyxpkUigZQ1@>O@6OAgpI!2^Z>rplpC6Ww5gD(cN zQS%qM2`OzzZLt6Hc&lNu)|SMv1=q6t@Mf`20H;S#81o!fwD!6~i-Ivaz2qu)Mymo~ zCU~UnIZY3hfA~dc6llODGkLaak!=ZF$v%E{-jmW z9O5H@yYK}OQz+^Y(AlFf2~zd&c_#h5=<&6$1_@7Q@|=^zFdBHy(hyo%VhI5ptO4Ka zY#l^4!BwoYi}ci#^BnI`kZ=$9JeYop1oGxEFlx6YsZHED*+g$!;cXr|ORNTskavA2 z)!ZekoHT6=rMq-VCPC!D%5Zcl3bL{0nf_i`mW6$T`MW58lU}Vbv)~KaBCIqcGm%)Ph!+RkG8+nhO2R% z_mrsYWy`NGy3f=bU3w7lGrNBVMep|QqOSKY+XW?J^erA*kF?xA?@p!LD_9_ZZ44sO z>*4joMh`L%m5L|<>q<8}az`pi=UxEldvp+I)wN@#PJ=-dKRNG`bxG!QD%|QYb2m|e zL(K^+_zrZBNA=fmSgq}JX79y=AoiLr=IkI=u~JqNR2Ew-xbXbin06>1+Kn%R&q_&_ zN?-Vn@de6m2{7u;dkajQVG=n^BoUvj39AMru*bkMK(4iu+H%e}1R`2~r57KbR1$8N zb|E%UkQ^BHjMUrER5WNkWjZeXu{Q&5nmAeN++k#_1?_l|q|uBDRBjxh#lGqN6+!(& zVhhfQM8p;^jpPqjh{!Z}vTGu|4L=(Xpl$oC7idE0_Vm2h6${eI(f8l^9X4iff!zCi zH=~fg#Mh-yzffcX6zOM*@TADM9pO=u9oH7ZrVV)Tl0tl>=k_=e5%})w?`jzU*GKH- z??}CT(Q)-)$_^ph@Y-)JyYw&?TIbV4D-kQ%?HMxyg5VaSHLXq3dm06qAJ5G1aF}MP; zNH1L#qWqPDLDT1wll}luDB^<#?Og1XFFmwfPE|&yR!XOH#%;)%YMC-Kg}wk)#$uax z6Lo^(sGkV^5`&HPq50=}LLuJp#!ffqI&S66t$MaMZMoGl&nj8AA(n2I_9S)b1y>>i z*J`R`hPxr0opY+8(9}PU-*FX$_!RxSx&=ExQq^|CCgXc1D8e5(hWYaxntCZh3 zb)nDyzK(!Y>dK8`|J)=Xd%yJ6cMVo0xt%1Wg2J(zcO|qEdzLEb>lnXR`8x9ZlvO=~ z_IEU$P#=YmR5}de`AZ))t~*!)8S7QEXC0z53yIi5c(qk{9M{^~MnhNp3nL*!W~?mh zFe4DQ?a!U{dj7N`bXelZH_7;U|Nb-`wgH0T;? z2vzdZ5F;rxP+}{2)aA)=1_qzzJ*y3vlZ5)J@1z-SyuSvLaS&kKn=0-p1b%3;N4xP0 z0q#Xp!zGQuzS$=Befc@c7v;B{^BSQGhF2Z>m{(?kcs3b}L6W_@A8`uo6H0 z*+w!1cn(vWS*wQ)LI-OF#t^#KclwJQ=q-|7xSb0^r>^fEyV?D1^Oa>W2uHQ!jD_Fd z#`5m;kkVDJ3!B6+xSTsR*C%4#)7QHlY0iDH?;YMhf#MJ8cvzy~7075;rg{e}*Wq&=!A;(oIz^*~j-r&!h6O^qrx2rc%;gM8 za@(Pn9bQG$!OA`+DO@)O2I;~bd57R(RnhEbzFpb13(^i@0j0G0!0?GGn@8-I>I_j}mHmQIvcaj9m4vj}DaBEFY(g`bwKcs1^9pJn>OqG_5Xn8mA| zPT645{uCXRT7a*BB^Mtr)&d(LV40OodgAS+y0ATFAi@8#ovF+^K?F^SMbd_O|2g1e zpgZW8b;4jQ;Bbu=W~(gk(Hctb3&n^B&TIJ2`^O3F%OmuR(l^bw)JkeE0ZJ`%9X>Kt z3T|sgC*f7=cHVUO6)A-;w}ghkvCyqaM4c_HehDLUyS}3UuCa4{}?;~>) z8N0(R9tcz4@h(;51JF-9Y@J(qSfF#z(Xhj~DF^X7_n2h~6j_6Dx)LxOVTB|gDLn~h zzv}pNa(^e=J9~Y{o1aW?4Pq@7zB==E(`VB%VJ~m!FMonpHEg}q9M7gF(6FazkynMR zaN?p!_L4%!gZ;i6_~NlKVR}z(9)gm>RYmm6kx_yFz8bO#3~@n};Xt9TU@@M!13vaw zN4*P_4~<@2Acoc8BN83fY2zKP!4tN{c82*HbI|w>m+qFGsu^Wz?m;`!e%!Phyz+s5 zN2#O{Kj}p8%x-+O5yrnfS?703N~x8zWc z>Q*+6T^kGGcA>bCD6jw)s_n@SCW4c|K{8Pcf%E=Rf-eIdo_Z6+f*TM$B!aW z&OsJW)8Zy~wkV?#t=Ri46UB_5gp+oY&PghUda9)ozoe0Gr1nT*)RueX)Rz$0C$K30 z&aCdIykEc@SAbfu?;Lw_zCZm)-uhdgaEeDLI$6o*t0dV>JlSXQ6y`km_z4PK_^|>; zxx0|Y_xVF1JO+xZp2L;mQaN2Yn#6~&s>p9RPY68S)GYXN3|Iuh@-nQl1j=lFxA1+x zSTUS%RVreZznOX@%j_YnsYjj3CXYY2oKrB)#+I@S?v@XraUeCz`YuhF=d@!KXJ(IC z`SG9H+L`yAa;{?M-auhvZI5Rfs5Msa*I=js`c9{#<9x;i-65Qvw|E z=hEXJR%f~l?or&ZDa9F@q(Q7&UV_?WBPpH8>U~9>45o!&rNY>=`4UV&qQXcYmJKGD zng2+6i!snY%2c6^t}s<7o1tR%CX?PYUL*tMlz*Vk4sm?a5F#D;V0dITM!@e# zB)T@zxh|0PmGe%LyiFay$;i`ux&|QfkzoBCbw`k)J+}nc25#jJ*zY?=XFegxgsncG zSZ)PQNmQq`i)C9DxWQF!=7)fsaGv6cwRJ33;}L*TCwb6(ivsy#dl1Y0^@sYv@Bog0 z{1mza8=(X4Q>?)se>~qgzsz)n1{B6|E=yuo zc>)C@81xM8gNccWNa&+Sa#=>7g)LNsw=;gN*I5_s@ooI8>t3le^k}|5t+kdezOD(A z#Ag0By)nOq8Hi*oYw#4)cP8x^EHnRtpkyVp*0a^Q#4;hLLYqg8cnzw!d!&)WhmS@AzGNy4m{(48QkkL*oyZZRZu z!)Ej>a_6>*X2y-h1~Fm0;+Qu+%)C~a6!U7M_`VeB8pzP2wW!s}&}@UlIKdS5W?1Y0 zK60Bl(pO7I7*f^2WiSX5Bj|JOPUUxz4k~zxO8dSoIR#*v$foVz+p&gL_2h^PTDbU7 zDj<4KARMAXt+?v!KErD6!3|a4lSX>V0aH)R=MSXRRof;5I z!2m+J2mNf;{&W5ruBa~3Jw-}S*xv`5?@<`e`2gUI#K5C>#Ft#RbmM1DJXB=v$=ue1 zJ!m*$_4g4AEY+MQa!iP5MaDeKH)VF`5+ir&>PFGY`A&;L5T%2WPk=!{s#n!RtI&*K z$HyWw8aXGur9#Pk$%mZrEzO`R9@P)1E@0Bs>@36}Q4N$p%oMFWV+Q{$CKFCQXPNnQ zI`eN|5tOP9sK8D!c;&IFc~v>7Ky!>ue?U=MXY*j?O9&mN)}jxl`N8P8OQjSVhSvkX z5&+95o#<%Dj&Xn5X;de$lA74)(XIur9www$H_jrDH~%M@K7B7CgK7xJkg^GH0?FDfcQG6VU2waYMcP+@8C~^mehFtoHt1qPm`7l1De73v>=+O(AH|~&1 zpJQG`S`DCvSG(M!4(rVFDPk>yDrH_)d(|Tme4JC=U?(0z86!{ z1>418Z`8(M-K9xv42kKZfrZ$Vn?}GAIUJRmBM+@tR`dWtlr%;UdsY^Bq{S{f>=890 z;{0}=M41`I>DgBQqeu%O^H|p^nSpbDksQSwIA+6o!kDYrx+Oy-sH=-ZNmy$ha0yKX z?Q~1R0M7`s3ksD(!8K60^8I$&m9{Ow#pkj-@2W1h!8%rKG_-BscTW@qJ~CSY)3j>H zF>0_ZF$~@QogDu+X)Cgv5p725shKw;8?;{TeZ^6lW?Y&`4w;hja086h!3?0}9v~5_ z+hzq>;_KtX$8!((teF7u`Ups|x?fi&i{}Njzt^3=`v}qy+BGBD^MkgY4BDQVLC<#` zXYYNM$m+PZ6#9WCF9BV@x6UYz1G<*{BS3CUdH8Puv~Ig8MYKXvssO87{R!m(L-Gyf z%Qc~|_eF1<xY#!kTLcG;aA_LCx`& znZ9*h7eB)mXpjn2u>{LxPP1u^T{3_uvg8KnmO1WxfZjW6x-8JlC(dJ%AJ`E>bgsYABS}j;Ln!ih(zFMhA zcCBS=@~(?PX%(STu(jXVA4#w1FNW6S@o5amHVLdA*S-m-(iuBW(8?KUaX2(o$Pdxg zp#U5i;F*%3=4xdrI`t`i8#H+=f4iyRmX~aR7_VhLj$GgKlQ&@B2VSe3E#x85`s=U1{`%{$zyA8`ufP61{s+9m8(08P007%XybS;V diff --git a/packages/19.07/luci-app-ruantiblock_0.9.0-2_all.ipk b/packages/19.07/luci-app-ruantiblock_0.9.0-2_all.ipk new file mode 100644 index 0000000000000000000000000000000000000000..348ce3affa3db8eeed808ab93d56e82ba7132308 GIT binary patch literal 11537 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 DD;8Yi literal 0 HcmV?d00001 diff --git a/packages/19.07/luci-i18n-ruantiblock-ru_0.9.0-1_all.ipk b/packages/19.07/luci-i18n-ruantiblock-ru_0.9.0-1_all.ipk deleted file mode 100644 index abad7f2cb856f68f135031efa83f442edd6f7efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4347 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 SPMtdSfAv3MeiUQ?C;$K